超短いテトリスプログラム

2021/11/12

テクノロジー

t f B! P L
eyecatch プログラマーは誰でもより短いプログラムを好むことを知っている、ユゲタです。 そして、先日面白いプログラムを見つけたので、紹介したいと思います。 それは、超短いプログラムでテトリスが遊べてしまうという、すごいヤツです。 こうしたプログラムは「ショートプログラミング」と呼ばれていて、一部の人達が誠意的に競って作っているらしいです。 このテトリスは、定かではありませんが、確かショートプログラミングで賞をとったヤツだったと記憶しています。

テトリス

<body onKeyDown=K=event.keyCode><script>X=[Z=[B=A=12]];h=e=K=t=P=0;function Y() {C=[d=K-38];c=0;for(i=4;i--*K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/ A)*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1 if(e=!e){if(f|B){for(l=228;i--;)Z[h+B[i]]=k=1;for(B=[[-7,-20,6,17,-9,3,6][t=++t %7]-4,0,1,t-6?-A:-1];l--;h=5)if(l%A)l-=l%A*!Z[l];else for(P+=k++,j=l+=A;--j>A;) Z[j]=Z[j-A]}h+=A}for(i=S="";i<240;X[i]=Z[i]|=++i%A<2|i>228)i%A?0:S+="<br>",S+=X [i]?"■":"_";document.body.innerHTML=S+P;Z[5]||setTimeout(Y,99-P)}Y()</script></body>
実際に遊んでみたい人は、index.htmlというファイルを作って、そこに、上のコードをコピペして、webブラウザで開いてみてください。 ビックリするぐらい快適にテトリスができてしまいます。 ただし、テトリスのコマを回転させるキーがよくわかりません・・・

ショートプログラミングについて

wikipedia : ショートプログラミング とにかく短いプログラムに驚く人も多いかと思いますが、こうしたショートプログラムはどういう思考で作られているかと言うと、 javascriptだけで言うと、どにかく短く書くテクニックというのがいくつかあり、それらを駆使して作られているんですね。 例えば、条件がAの時は値に1を入れて、それ以外は0を入れるというプログラムを書くには、 let data; if(val === "A"){ data = 1; } else{ data = 0; } こうしたif文を思いつくと思いますが、 let data = val === "A" ? 1 : 0; 三項演算子という書き方にすると、これだけで書くことができます。 また、他にも、少数値を整数に変換する命令は、 Math.floor(3.1415926); こうして3という整数値を求めることができますが、 これも、 ~~(3.1415926) これだけで、まったく同じ結果を得ることができます。 ifやforに{}中括弧を書かない記述方法だったり、関数を数珠つなぎにして記述する方法などは、javascript特有でもあるのですが、 見た目が複雑になる反面、非常に短いプログラムで記述ができてしまうという方法でもあります。 「難読化」というのは、この技術を使って実現しているんですね。 確かに、読みにくい! 実際の仕事で使うプログラムに役立つかどうかはさておき、こうした事を知っているのと知らないのとでは、他人のコードを読んで理解する能力がまるで違ってきます。 競技プログラムではなくてもいいのですが、こうしたショートプログラムを書けるスキルって、ちょっと憧れたりしませんか? 今日はそんなスゴ技を目の当たりにして、モチベーションを刺激してみましたが、これを読んだ人は刺激を受けましたでしょうか? また、面白いプログラムを見つけたら、紹介したいと思います。 お楽しみに!

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ