スゴイゼDNA
170台も出たし、もういいかなーと思ったら、なんとhinoeさんが150Bまで短縮してしまいました。
char*q,*r; i,j,n=6e3,t['~~']; main(o){ for(q=gets(t+2*n);j=gets(q);t[++t[n+o]+9*o]=j) for(o=0;i=*q++;)for(r=q;*r;)o+=i>*r++; for(;i<n;j&&puts(j))j=t[i++]; }
ここまでくると、配列が単なるメモリ領域としか感じられないコードですね。とにかく書き込み時に領域が重ならなければそれでOKなので、無茶なコードも通るようです。ソートされっぷり値の最大値が600強になっているようなので、配列tの0〜5999までは読み込んだ文字列のポインタ、6000〜11999までがソートされっぷりテーブルで、それ以降に文字列が入るデータ構造と、うまく配列を使いこなしている感じですね。私もこれを参考に変数を減らしてみたりいくらかコードを書き換えてみましたが、なんか微妙な感じです。
char*q,*r; i,j,t['~~']; main(o){ for(q=gets(t+9999);j=gets(q);t[++t[6000+o]+9*o]=j) for(o=0;i=*q++;)for(r=q;*r;)o+=i>*r++; for(;i<6e3;j&&puts(j))j=t[i++]; }
nを消しても変わらず。
char*q,*r; i,t['~~']; main(o){ for(q=gets(t+9999);*t=gets(q);t[++t[6000+o]+9*o]=*t) for(o=0;i=*q++;)for(r=q;*r;)o+=i>*r++; for(;i<6e3;o&&puts(o))o=t[i++]; }
てなかんじでさらにjを減らしても変わらず。なんとなーく短くできそうでありながら、できない。悩ましい・・・。