カメヲラボ

主にプログラミングとお勉強全般について書いてます

終わりたかったけど。

例のやつの続き。
ようやく100を切ったときのコード。


main(n,c){n=getchar()%2;c=n?96203:21;n=n?17:4;
for(;n--;c/=2)puts(c%2?"yes":"no");}
ここから無駄な変数nをなくすとid:yaneuraoさんのトコで紹介されているようなコードになる。確かに正攻法ではないが、ここまでたどりつくにはそれなりの苦労が必要ではある。120あたりをさまよっているとき、やねさんが0.44Kほどのコードを何回も何回もsubmitしているのを見て、「ああ、ついにヤルのか・・・」と思い自分もいろいろ調べることにした。id:tanakhさんのところで、どうやら全く同じ(と思われる)Inputデータがあるとのことなのでとりあえずゲット。あとはやねさんの解析した結果をヒントに、2回目のInputが4回のテストケースで最初の値が22ということは、サンプルのInputデータなのかもー、とか思いながら書いて恐る恐るsubmit。通ったときは、「ああ、通っちゃった(´д`)」というかんじ。で、


main(c){for(c=getchar()%2?227275:21;c-1;c/=2)puts(c%2?"yes":"no");}

の形になったところで止まる。227275という大きな数字を'aaa'みたいに文字コードで表せないか考えたが、入力可能な文字列はspace(0x20)。2文字だと16の4乗-1までしか表現できないし、3文字だと最低でも0x202020と、2105376になってしまうので、9万とか22万台の数はうまく表現できない。没。


答えデータを3進法で現すことはできそうなのだが、n進法で解答データを用意して%nで判定しようとすると、n>2では最終的な余りが0にならない。n=3の場合は、余りが1または2だし、n=4のときは1,2,3と一通り増えるだけで、0が出てこないと3項演算子の利点が生かしきれないのだ。ちゅうことで、これも没っぽい。


とか考えてたら今日もあんまり仕事が進まなかったよママン(´д`)


追記:
やねさんやロベールさんやkurimuraさんや達のおかげで64byteを達成しました。なんか最後の最後で皆さんを踏み台にしてしまったみたいで心苦しいですが・・・。


とか書いてたらさらに短くなってたりして(;´д`)