mix lines

mix lines終了。

C

最後土壇場でかなり縮んだ。なんだかとても面白かった。
夕べ締め切りが近づいてきたので見直していたらアイデアが浮かんで、82B -> 78B ができたところで、安心して就寝した。ところが、今朝起きたら 74B が出ていて抜かされていた。出社前のあわただしい時間だったが、アドレナリン流出モード全開で、二次元配列を思いつき、75B をたたいて家を出た。途中、駅で電車待ちの間、char の配列を int の配列にしても、アドレスをいったん int にぶち込んでやれば char* と同等のアドレス計算ができることに気がついた。そこからは、車内で、PC 開いて、74B、70B とたたき出すことができた。
夕べから考えるとこの土壇場で、12B 縮めたことになる。結果の 70B は、しかも、いちばん見やすいコードの気がする。結構、最小解はいちばんシンプルな解になることが多い気がする。

//82B
char s[9999];i;main(c){for(;i<2e3;c&&putchar(c))gets(s+32*i),c=s[i%80*32+i++/80];}
↓
//78B
char s[9999];main(i){for(;i<2e3;printf("%.1s",s+i%80*32+i++/80))gets(s+32*i);}
↓
//75B
char s[80][32];main(i){for(;i<2e3;printf("%.1s",s[i%80]+i++/80))gets(s+i);}
↓
//74B
s[80][8],p;main(i){for(;i<2e3;p=s+i%80,printf("%.1s",p+i++/80))gets(s+i);}
↓
//70B
s[80][8],p;main(i){for(;i<2e3;printf("%.1s",p+i++/80))gets(p=s+i%80);}

Groovy

murky-satyrさんの解。正規表現のMULTILINEモードってこう使うのか。replaceAll() と組み合わせて、各行の先頭文字を全部得る、っと。勉強になった。
サイズは同じでも自分の解とまったく違っていたのでびっくり。