最短ちょっと手前
Fibonacci Numbersとgoogle、最短コードまでそれぞれ後1Bと2B。
ここまでを振り返ると、最短コードまで後一歩のものはそこそこあれど、最短コードまで辿り着いたものがない。
最後の一押しがあまりにも遠すぎるorz
Fibonacci Numbers
ループでやるには多分ここが限界っていうところまで持ってこれた。
これ以上縮めるにはmain再帰を使うしかないと思う。main再帰版は現在47B。
ループの終了条件が0より小さくなったときになっているのは、iとjが共にsigned intのため。
フィボナッチ数列の47番目を計算すると、最上位ビットが立って符号がひっくり返ってしまうから。
記念にループ版の限界だと思う48B版も残しておく。57B版はおまけでぺたり。
後で見直してどうやって考えていったのか思い出すのに役に立ちますように。
57B(ループ版)
j,k; main(i) { for(; k++ < 46; printf("%d\n", k > 2 ? i += j : 1)) j = i - j; }
48B(ループ版)
j; main(i) { for(; i - j > 0; i += j) printf("%d\n", j = i - j); }
47B(main再帰版)
j; main(i) { printf("%d\n", j = i - j); i < 0 ? : main(i + j); }
この問題を普通に解いての最短は恐らく46Bだと思う。
トップの21Bはどうやって通したんだろう。想像もできない。
C言語なら最低でも9B使ってしまう以上、残りの12Bで計算していることになるんだけど・・・
追記
ループ版では48Bが限界だと思ってたらid:ichirin2501さんが47Bまで縮めてしまった。
まさかここから更に縮むとは思わなかったなあ。凄いとしか言いようがない。
自分の限界は当てにしない方がいいな。ぎゃふん。
id:ichirin2501さんが最短コードに到達したということで、対抗心を燃やしてみた。
けど前回のコードをprintf1個に押し込んでも57Bが限界だったというorz
ここから後2Bどうやって削るんだろう・・・
o[]; main() { printf("g%sgle", memset(o, 'o', atoi(gets(o)))); }