カメヲラボ

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

482バイトテトリス

11月1日の日記(http://d.hatena.ne.jp/Ozy/20071101#p1)で,7行テトリスの作者が,超絶ショートコーダーのnanagyouさんであるということがわかりました.現在はもっと短縮されているようです.
http://www.geocities.jp/nanagyou/list.html
nanagyouさん(http://geocities.yahoo.co.jp/gl/nanagyou/)は,ショートコーディング本にも名を刻んでいるスーパーコーダーであります.先日,私が悩んでいたブロック回転の計算についても解決されていますし,document.bodyも変数を使って上手く短縮しています.何より無駄なif文が省かれて構造的にはより洗練されたものになっています.スバラシイ…

で,nanagyouさんのコードを見てて思ったのですが,変数eって単にウェイトをかけてるだけのような気がするので,省いてしまっても良いような気がします.すなわち,

<body id=D onKeyDown=K=event.keyCode-38><script>Z=X=[B=A=12];function Y(){for(C
=[q=c=i=4];f=i--*K;c-=!Z[h+(K+6?p+K:C[i]=p*A-(p/9|0)*145)])p=B[i];for(c?0:K+6?h
+=K:t?B=C:0;i=K=q--;f+=Z[A+p])k=X[p=h+B[q]]=1;h+=A;if(f|B)for(Z=X,X=[l=228],B=[
[-7,-20,6,h=17,-9,3,3][t=++t%7]-4,0,1,t-6?-A:2];l--;)for(l%A?l-=l%A*!Z[l]:(P+=
k++,c=l+=A);--c>A;)Z[c]=Z[c-A];for(S="";i<240;S+=X[i]|(X[i]=Z[i]|=++i%A<2|i>228
)?i%A?"■":"■<br>":"_");D.innerHTML=S+P;Z[5]||setTimeout(Y,i-P)}Y(h=K=t=P=0)
</script>

のようにすればさらに短縮されます.当然,ブロックの落下速度が倍になりますが,それはsetTimeout(Y,99-P)をsetTimeout(Y,198-P)とすればよいわけで,この値自体にあまり意味がないのであれば,大体200ちょっとでループを抜けるであろうiを使って,setTimeout(Y,i-P)としても問題ないはずです.あと8バイト削ったら6行テトリスになる!

ショートコーディング本アゲルアゲル

というわけで,抽選は終わりました.当選者の方々にはメールを送りました.メールが届かなかった方はゴメンナサイ(´ω`)思ったよりたくさん応募があったので,近いうちにプレゼント実験第2弾を行いたいと思います.当選した方はおめでとうございますっっ