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 も短くなっている。

エクセレント。

あとがき

くやしいけど、最短解に貢献できたので良かった。といっても、両名がワイのコードを参考にしたかどうかは、謎。コードゴルフでは、誰が書いても、おおよそ、同じコードに辿り着く場合がほとんどである。問題終了後、他の回答を見ないで更新したとも考えられる。

でも、ワイは自意識過剰なので、貢献できたということにしておきます。そっとしておいて下さい。