ファイルをコピーする最短コード…とは?
学校のプログラミングでまだ一回もショートコードを出していない。初回は「printf("Hello world!");」だと思って「HELLO」の形状にコードを加工しておいた (AAみたいに) のだが微妙に違って出せなかった。残念。
さて、次週のレポート課題は「input.txt」を「output.txt」にコピーするプログラムだ。次週提出分が今学期最終レポートの筈なので是非ショートコードを提出してみたい。と言う訳でこのプログラムの最短コードは何バイトだろうか。もちろん言語はCで。ショートコーダーじゃない私は大した技巧は使えなかった。と言う訳で途中経過を示す (伸びちゃうので改行済みですが我慢して下さい)。
/* 候補1 (98bytes ぐらい) */ main(b,w){int*r=fopen("input.txt","r"); for(w=fopen("output.txt","w");(b=fgetc(r))>-1;fputc(b,w));} /* 候補2 (105bytes ぐらい) */ #define f(n,m) fopen(#n"put.txt",#m) main(b,w){int*r=f(in,r);for(w=f(out,w);(b=fgetc(r))>-1;fputc(b,w));} /* いまいちな候補3 (42bytes ぐらい…だが…) */ main(){system("cp input.txt output.txt");}
FILE* を無理やり char** や int* にしてるのがちょい微妙?候補2の方が気に入ってるのだが長いのが残念。次学期のプログラミングを免除されるような素晴らしい変態コードを思いついた方は是非教えて下さい。そして、来週のレポートの最後にこっそり添付させて下さいw
★ 00:13 追記
/* 候補1+ (97bytes ぐらい) */ main(b,w){int*r=fopen("input.txt","r"); for(w=fopen("output.txt","w");(b=fgetc(r))+1;fputc(b,w));} /* 候補2+ (104bytes ぐらい) */ #define f(n,m) fopen(#n"put.txt",#m) main(b,w){int*r=f(in,r);for(w=f(out,w);(b=fgetc(r))+1;fputc(b,w));}
早速追記。for の条件部を変更。EOF が -1 じゃなかったら沈没 (候補1,候補2もですが) しちゃうけどw