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が含まれているときというのを比較演算子で判定するのはすごいですね。

2011年6月17日金曜日

Imaginary Range

Android版が出てたのでやってみましたが、よくわからない感と面白いのが入り混じってますw

話の筋とか微妙に惹かれるような、突き放されすぎのような。
コミックのテンポがアメコミ・バンデシネなので違和感あるし。
ただ、キャラの絵は結構好きだしミニゲーム自体も面白いし。

評価に困りますねw

やった感じだとスマートフォンよりタブレットのほうがやりやすいです。
でも、コミックはタブレットの解像度じゃ粗が見えるし。

おすすめ、まではいかないけど無料だしやってみたら?位の感じw

Imaginary Range News | SQUARE ENIX

ゼルダの伝説 時のオカリナ3Dプレイ中。

じつはこれが初3Dゼルダなわけですが、結構楽しいですね。
いろいろ触って試して先に進んでいくというギミックがよいです。

いまの攻略本世代とかにはどうなのかなぁ・・・。
甥っ子は楽にクリアできなきゃゲームじゃないとか言い出しますしw


2011年6月15日水曜日

anarchy golf - Difference of 回答編

anarchy golf - Difference of

あまりいぢってる暇の無いまま終わりました。

僕のコードは
char*p;
main(a){
for(gets(&a);p&&*p||~-puts(p=&a);)
*p++=p[1]?abs(*p-p[1])+48:0;
}

Topのhinoeさんは

main(a,p)
char*p;
{
for(;*++p||!gets(p=&a)-puts();)
*p=p[1]?abs(p[1]-*p)+48:0;
}

ぱっと見、一番違うところはgetsの位置。
この問題では入力は一行だけなので二回目以降のgetsの返り値はnullになるので
出力が一文字だったときに終了ということになりますね。

あとは*pをmain第二引数に当てることで初回の判定を削ってます。

ちなみにinaniwaさんの改良版ではt=p[1]とすることで文字数を削ってます。
これ、一度試してたはずなんだけど、なんでやめちゃったんだっけなぁ?^^;;

Optimus Pad届いた。

早速届いたのでざっと使ってみました。

SIMもささずに立ち上げてみたけど、普通にWiFiで接続。

ブラウザは快適。やはりこれくらいの画面でないと一般サイトは見難いよね。
スクロールもスムーズで問題なし。

アプリはDLNAと動画プレイヤを試行錯誤中。
Xperiaで使ってるTwonky Mobileが対応していなかった^^;;
NetfrontとSkifta betaはなんかしっくりこない。

今日はUPnPlayというのを試してみるか。
DTCP-TP対応したの出ないかなぁ。

2011年6月13日月曜日

anarchy golf - Enumeration of divisor

anarchy golf - Enumeration of divisor

ちゃちゃっとやってみた。
一発書きで59Byteだったけど、タイムアウトで蹴られた・・・。
書き直したら70Byte位になったので見直し中。

Optimus Pad買った。

家でごろ寝しながら使えるタブレットが欲しくていろいろ探していました。

3DSのブラウザがFlash対応なら良かったんだけど。
ってそれなら手持ちのXperiaと大差ないかw

iPad2か、Xoomか、Optimus Padかで悩んだけど、やっぱAppleものに手を出す気になれず、しかもSoftbankなのが気に入らないのでiPad2は却下。

XoomかOptimus Padか、で行くと大差は無いんだけど3G SIMが入るかはいらないかは大きい気がしたのでOptimus Padに決定。

あとは新規契約か白ROMか、だけどあんまり持ち歩く気が無いので白ROMに決めてヤフオクで落札。
ネット使いたいときはXperiaからSIM抜けばそのまま使えるしね。

たぶん水曜までには到着する・・・はず。

2011年6月9日木曜日

anarchy golf - Basic Code Golf 解答編

anarchy golf - Basic Code Golf

とりあえず、今回のポイントは文字読み込みと出力に何を使うか、という話。

read、putcharでやろうと思ったけど、readが使えるならwriteもつかえるんじゃね?
ってことでやってみた。
stdoutのファイルポインタ値はいくつかな?って調べてた中で0(stdin)に出力すると
何も出なかった。ヘッダ調べてどうやらstdoutは1らしいってことで1に出力すると出た。

これ、使えるんじゃね?と思ってこうなった。
writeの2番目以降の引数はreadと同じなので省略可。
ダブルクォーテーションが来るたびフラグを反転。
フラグによって空白出力/非出力を切り替えです。

c;
main(a){
for(;read(0,&c,1);a^=c==34)
write(c>32*a);
}

ほかのトップの人はwriteの中が違うくらいだと思う。3パターンくらい考えてこれにしときました。

2011年6月6日月曜日

anarchy golf - Ejection simplified 解答編

anarchy golf - Ejection simplified

あ~、勝てると思ったんだけどなぁ^^;

最初にトップに躍り出たコードは
j;
char*p;
main(x,o){
for(;p=gets(o);j++,puts(o))
for(x=strlen(o)-1;j%x&&++p-o<x;*p=' ')
strncat(o,p,*p!=' ');
}

こんな感じ。
ほとんどひねったとこもなく短くなったのにはびっくりでした。
最終的にはstrlenをやめましたが。

anarchy golf - Greeting Animals 解答編

anarchy golf - Greeting Animals

さっき終わりましたね。
トップのinaniwaさんのmain(A,C)に吹きましたw

ただ、こうするとCの更新で文字列が壊される気がするんですけど何で通るんだろう?

僕のコードはこちら。
char*s[]={
"\x04naraion",
"\x0c",
"\x09usu",
0,
"\0tanoshii",
"\0yukaina",
"\x06nagi",
0,
0,
"\x0akanku",
"\x0an",
"\x08ni",
"\x07nbou",
0,
"\x08sagi",
"\x0Cusu"
},*b,*p;
main(c,b){
for(;p=gets(&c);strcpy(p+*b,b+1),puts(*b?p:strcat(p," nakamaga popopopo-n")))b=s[c%236%17];
}

top陣との一番の違いは書き換えデータを配列で持っていたかmemchrを使ったかというポイント。
ダブルクォーテーションとコンマの数が効いてます。
20文字弱くらい縮むかな?。
あとで実験してみよう。

anarchy golf - Ejection simplified その2

anarchy golf - Ejection simplified

チョコチョコいじって103byteにしておいたら、昨日抜かれちゃいました(汗

見直しても1Byteしか削れず、これ以上はまた一から考え直しが必須。まいったなぁ・・・。

2011年6月2日木曜日

anarchy golf - Greeting Animals

anarchy golf - Greeting Animals

一応やってみた。
例のACですね。

入力をMOD計算やらして整形して出力。
がんばったけど229Byteかぁ。
これ以上縮められる気がしない。

10秒でルービックキューブを解くロボット

YouTube - Swinburne's Record Breaking Rubik's Cube Robot

うわぁー、これすげぇ・・・。
いまだに自分では6面揃えられません。

2011年6月1日水曜日

anarchy golf - Ejection simplified

anarchy golf - Ejection simplified

昨日は130byteあたりをうろうろしてましたが、ふとひらめいてまっさらな状態から書き直し。
110byteとなり、Topに踊りでました。

ゴルフではついついトリッキーなコードを書いてしまうのですが、シンプルに書くのも大事ですね。

anarchy golf - Ejection解答編

anarchy golf - Ejection

妙に長いままおわっちゃったなぁ。

ネスト付で書くと
m,n;
i,j;
char*p,s[80];
u[80];
r[80];
d[80];
v;e;
main(){
    for(;p=gets(s);n++)for(m=0;*p;m++)
        v=*p-85||v/++u[m]?v:u[m],
        *p-82||++r[n],
        e=*p++-68||e/++d[m]?e:d[m];
    for(;v--;j=!puts(s))
        for(i=m;i--;)
            s[i]=u[i]>v?j=32,85:j;
    for(j=v;++j<n;puts(s))
        for(s[i=m+r[j]]=0;i--;)
            s[i]=i<m?j%~-n&&i%~-m?32:35:82;
    for(j=0;e/++j;puts(s))for(s[i=m-1]=0;i--;)
            s[i]=d[i]/j?68:32;
}
やってることはシンプルですね。よく考えればフィールドは正方形なので横がわかれば縦もわかるんだよね。
もう一度やり直したらずいぶん縮むかも。でも簡易版Ejectionが出題されたのでそっちに行きますw

ちなみに枠線判定のj%~-n&&i%~-mはj%(n-1)&&i%(m-1)の意味。
0~(n-1)のn個の数列の両端のとき0になります。