2011年5月28日土曜日

anarchy golf - Deadfish 解答

anarchy golf - Deadfish
終わりました。
ぎりぎりで80Byteまではいきましたが一番の鬼門は
256になったら0にする、でした。

IncでもDecでもSqrでもなりうるので別に計算してたんですが・・・
Topの皆さん、掛け算の中だけで処理してらっしゃるw
やっぱテストケースをしっかり見ないと縮みませんね。

僕の解答は
a;main(c){for(;gets(&c);a*=a!=256)c&1?c&4?printf("%d\n",a):c&2?a*=a:a++:a&&a--;}
の80Byte

で、256になる掛け算のみに注力すると
a;main(c){for(;gets(&c);)c&1?c&4?printf("%d\n",a):c&2?a*=a%8?a:0:a++:a&&a--;}
で77Byte

ポイントは
入力は1行2バイトなので文字列として取り込んでも問題なし。むしろ改行コードは外れるのでOK。
下三ビットでコマンド判別
デクリメントはa=0では計算しない
終了コマンドは必ず最後なので特に考えなくてよい。
256になるのは掛け算のみ(つまり16^2)なのでそこだけはじく。

ということで最後のポイントだけ気づきませんでした。

0 件のコメント:

コメントを投稿