カメヲラボ

主にプログラミングとお勉強全般について書いてます

487-3279(6)

最短コード204B

212バイトのコードというのは、カウントが127(実際は99)を超えたところでループを抜けていたのだが、namasuteさんは最後までカウントして(char)100000が-96であることを利用した。さらにint型変数へ1e4を代入するのと最初の改行コードをスキップする作業をまとめて書くことでかなり短く書くことができた。スバラシイ。やはりショートコードに手抜きは許されない。・・・となれば、私が手を抜いていた箇所をあらためて見直さなければならなくなる。


私が手を抜いた箇所といえば最初のループ。kurimuraさんに頼ってちゃんと考えていなかった。少しでも短縮できる方法は無いかとごにょごにょしていたら、1バイトだけ縮まった。基本的に同じ発想だが、先にmod48しておくことで整数の桁が少なくなるようにしてみた。出来上がったコードを見る限り、なんとなくまだ縮みそうな感じがする。しかし、それは難しい。私は疲れすぎた。もう、あんまり考えたくないよー(T-T)


というわけで、再び最短コードとして204Bコードを公開しておくが、ウデに自信のあるショートコーダーはさらに短いコードを探ってみて欲しい。で、できたらおせーて(`皿´)


・・・最近こればっかだなぁ(;´д`)



char a[1<<24];v;
main(x,n){
for(;~n;n=getchar()%48)
x=n-45?n==10?!v?v=1e4:++a[x],0:x*10+(n>9?n*.314-3:n):x;
for(;++n<1e7;)
a[n]/2&&printf("%03d-%04d %d\n",n/v,n%v,x=a[n]<0?1e5:a[n]);
x||puts("No duplicates.");
}