Reapeated Printing FIXED.c
あなごる Reapeated Printing FIXED.c で新しい最短解が見つかった。
歴史を振り返りながら、記録する。
i;char s[];main(c){i||gets(s)?main(putchar(s[2]<c?i=0,10:c),c=*s+i++/atoi(s+4)):0;}
83B
以上がワイのコードである。
s;main(i){while(s&&putchar(s%65537-1?++i%atoi(1+&s)?s:s++:10)-10||gets(&s,i=0));}
81B
以上は、問題終了時トップだった nu さんのコードだ。
わけがわからない。 65537 って何。
i;char s[];main(k){for(;i||gets(s);putchar(k>s[2]?i=0,10:k))k=*s+i++/atoi(s+4);}
80B
以上は、 blahmoo さんにより更新された新記録である。
ワイのコードでは、main 再帰をしておったが、まんま for 文に書き換えた形となっている。
なんや、 main 再帰なんてややこしいことせんでもよかったんや。はじめからこう書けばよかった。そうすれば、トップを取れていた。
どうして、main 再帰にしたかというと、三項演算子 a||b?c:d
の形は崩してはならないという思い込みがあったからだ。維持する前提だと、再帰のほうが短く書けるのだ。
コードとにらめっこしていると、細かいところは見えても、全体が見えなくなることがあるのデス。
i;main(s){while(i||gets(&s))putchar(s%65537==1?i=0,10:++i%atoi(1+&s)?s:s++);}
77B
そして、以上が、さらに新しい、nu さんによる新しい最短解、新トップ記録である。
ぼくのかんがえたさいきょうの i||gets(s)
が組み込まれ、謎の 65537 による演算との合わせ技で、問題終了時から 4B も短くなっている。
エクセレント。
あとがき
くやしいけど、最短解に貢献できたので良かった。といっても、両名がワイのコードを参考にしたかどうかは、謎。コードゴルフでは、誰が書いても、おおよそ、同じコードに辿り着く場合がほとんどである。問題終了後、他の回答を見ないで更新したとも考えられる。
でも、ワイは自意識過剰なので、貢献できたということにしておきます。そっとしておいて下さい。