そろそろ限界
今まで解いてきた問題は自分の技術だと、そろそろ縮められる限界点に到達したっぽい。
無駄を省こうにもどうやって省いていいものやら。
アルゴリズムが違うんだろうけど、今より短くできそうなのが思いつかないorz
もっと考えるんだ!俺!
99 shinichiroes of hamaji
前回のものと大して変わりなく。
押し込めるところに押し込んで3B短縮した260B。
単数形と複数形でそれぞれ文字列を持ってるのを解消しない限り、ここから縮みそうにない。
トップはここから60Bも短いんだからそれだけじゃないんだろうけどね。
char *s = " shinichiroes of hamaji", *u = " shinichiro of hamaji", *w = " on the wall"; i = 99; main() { for(; i;) printf("%d%s%s, %d%s.\n%s, %d%s%s.\n\n", i--, i > 1 ? s : u, w, i, i > 1 ? s : u, i > 1 ? "Take one down and pass it around" : "Go to the store and buy some more", i > 1 ? i - 1 : 99, i - 2 ? s : u, w); }
Smileys Triangle
顔の出力部分を全部配列の中に突っ込んで、初回の出力が終わったら不要な部分をポインターで読み飛ばす。
3B縮んで75B。配列を廃止したいけど中々上手くいかない。
printfにしたら長くなりそうだしなあ・・・
char c[99] = ":\n:-\n:-)"; main(i) { for(; i++ < 33;) puts(i < 3 ? c : strcat(c + 5, "))")); }
tennis
printfを1個にまとめることができた。
後は細々と比較条件を直したりして6B縮んだ。現在161B。
2位集団まで後5Bで手が届きそう。これは凄い!
o, t; main(i) { for(; gets(&i); printf(o - t ? "Player%d %s %d - %d\n" : "Set is tied at %d\n", o - t ? o > t ? 1 : 2 : o, o > 6 | t > 6 ? "wins the set" : "leads", o > t ? o : t, o < t ? o : t) ) i % 48 < 2 ? o++ : t++; }