2011年7月8日金曜日

anarchy golf - Number Sequence 解答編

anarchy golf - Number Sequence

特定のルールの数列を出力しろというもの
ルールを見つけるためエクセルで前項との差を求めてみると
3回ごとに2が現れます。これで3回周期の何かという推定が出来ます。
値を見ていくと3n番目が2*(n-1)、3n+1番目がn、3n+2番目がn+1という数列のようです。

ここからこういう回答ができました。
main(n){for(;n-402;)printf("%d\n",(n%3?:n-1)-1+n++);}

3n+1番目を(n-1)+1、3n+2番目が(n-1)+2とみることでn-1基準にしています。
ただ、n-1が二回出てくるのが気に食わないためm=n-1としてしまおうと思ったけど
うまく出来ませんでした。

上位陣のコードを見ると

leonidさん
n;main(){for(;n<401;)printf("%d\n",(-~n%3?:n)+n++);}

inaniwaさん
i;main(){for(;i<401;)printf("%d\n",(-~i%3?:i)+i++);}

nnさん
i;main(){for(;i<401;)printf("%d\n",i++-(~i%3?:-i));}

-~n%3を使ってますね。
-~n=n+1なのでこれで良い訳です。
うまくやりますねぇ。

0 件のコメント:

コメントを投稿