2011年6月30日木曜日

『Wiiリモコンプラス バラエティパック』

社長が訊く『Wiiリモコンプラス バラエティパック』

やっぱ任天堂の何がすごいって、この岩田社長の座談会ですよ。
読んでるとどうしても欲しくなるw

楽天で送料込み再安、ポイント10倍だったのでポチリ。

2011年6月29日水曜日

anarchy golf - Equations

anarchy golf - Equations

まじめに解いたら120Byte.
ずるして解いたら54Byte.

どちらにしても届かないので54Byteは封印すべきか否か。

2011年6月27日月曜日

anarchy golf - Two coins 解答編

anarchy golf - Two coins

正直特筆することの無い問題。
理屈抜きに表計算でそれらしい法則を見つけて書いたら最短だった、的な?

main(a,b){for(;~scanf("%d%d",&a,&b);printf("%d\n",a*b-a-b));}

bでくくって(a-1)*b-a、a-1=~-aなので~-a*b-aとか考えたけど文字数一緒なのでそのまま書きました。

PowerSetについては回答が作れなかったので、また後でほかの人のを確認します^^;;

ダンボール戦機 引き続きプレイ中

アニメを追い越し、アルテミスを終え新たなLBXを手に入れました。

ストーリー進行はペースを落としてカードバトルやクエストをちょこちょこと。
かわいそうなカズのためにハンターカスタムを手に入れようとするも、ボディだけ手に入らない・・・。

クエストBBSでいろいろなLBXにカスタムして戦っていても、ある程度の敵ならブルドでもアマゾネスでも同じ戦い方で何とかなるのはぬるいのか、バランスがうまいのか。

しかし、LBXはやはり子供のおもちゃにしてはいけないですね、これw
山野博士はクールなマッドサイエンティストでしょう^^;;

しかし、そのトンデモ感がいい。
とうとう、三体合体LBXまで現れて、ここからどこへ行ってしまうのか。

改めてLBXのプラモ買おうかな・・・。

2011年6月24日金曜日

anarchy golf - Fifth Identity 解答編

anarchy golf - Fifth Identity

n項目までのフィボナッチ数の二乗和を求める問題。
最後のつめていくところでタイムアップでした。

そもそも、フィボナッチ数の特性っていうのは皆さん知っているものなのか?
いろいろ調べてやっと出来たわけですが。

フィボナッチ数自体はf(0)=0、f(1)=1として、f(n)=f(n-1)+f(n-2)となる数列です
ここから再帰で書くと
f(n){return n<2?n:f(n-1)+f(n-2);}
ただgolf的には長いので、近似式として
f(n)=(int)(((1+√5)/2)^n/√5+1/2)
を使うことになります。(wikipedia参照)
・・・ぱっと見長いですがw

さて、今回の問題ではもう少し必要で
f(0)^2+f(1)^2+ ・・・+ f(n)^2=f(n)*f(n+1)
という法則を使います。(こちらを参照しました。)

先ほどの近似式の1/2は誤差調整分なので置いておいて、
f(n)*f(n+1)
=(((1+√5)/2)^n/√5)*(((1+√5)/2)^(n+1)/√5)
=((1+√5)/2)^(2*n+1)/5
でおおよその値が求められます。

ここから僕の解答
main(i){for(;~scanf("%d",&i);i-10&&printf("%.f\n",pow(.5+sqrt(5)/2,i*2+1)/5+.2));}
が出来ました。
ただ、√5なんかは定数ですのでここから誤差のでない程度の定数、黄金比率に置き換える
と良かったんですが、実験する時間がなくなりました^^;;

ほかの方の解答を見ると
nnさん
main(n){for(;~scanf("%d",&n);)n%5&&printf("%.f\n",pow(sqrt(5)/2+.5,n-~n)/5);}
n*2+1とするところをn-~nとしているのがうまいです。
(~n=-n-1)

inaniwaさん
main(f,n){for(;gets(n);)--f&&printf("%.f\n",pow(1.6180339887,2*atoi()+1)/5);}
黄金比率の直書きです

teebeeさん
main(f,n){for(;gets(n);)--f&&printf("%.f\n",pow(2.618033989,atoi()+.5)/5);}
黄金比率の2乗としています。
これで2*n+1がn+.5でよくなるわけです。
で、見てて思ったんですが、誤差補正って要らないんですね^^;

やっぱとりかかりが遅かったのが痛い。77byteまでならいけたと思います^^;;

2011年6月21日火曜日

ダンボール戦記プレイ中

ゼルダの伝説と平行して同日発売のダンボール戦記もプレイ中。

アニメも見ているけど、べたべたで受け入れやすい内容。
バトルはSDガンダムオンラインみたいな感じ?
アクション苦手でも何とかできる感じ。

ちょうどアングラビシダスがはじまるところまで進みました。
バトル自体が気楽に出来るのでゼルダよりプレイしやすい。

というか、ゼルダやってると3DSのバッテリーがすぐ切れる^^;

とりあえず、ざっと見たらこの店はまだ在庫がありそうだった。

2011年6月19日日曜日

anarchy golf - NABEATSU of the world 解答編

anarchy golf - NABEATSU of the world

さて、これもどう縮めたもんか悩んでいましたが。

直感的に文字列変換後に3が含まれているかチェックすべきと思ったので
このようなコードになりました。

main(i,s){for(;i<301;puts(i++%3*!strchr(s,51)?s:"aho"))sprintf(s,"%d",i);}

ただ、関数名が長いしsprintfではポインタ返してくれないのでitoaが使えないか試行錯誤してました。


そして、トップがこちら。
main(i,s){for(;i<301;)puts(i++%3>index(gcvt(i+0.,9,s),51)?s:"aho");}

見慣れない関数gcvtですが、Manpage of GCVTのとおり数字を文字列に変換する古い関数です。
引数がdoubleのため、0.を足しています。
文字列のポインタを返してくれる上に短いという、こんなのがあったのかって感じです。
indexもstrchrと同様の機能の古い関数。

こう考えてみるとアルゴリズムとしてはほぼ同じことがわかります。
ただ、最後の一手、3の倍数か3が含まれているときというのを比較演算子で判定するのはすごいですね。