545バイトのテトリスプログラム 141
ストーリー by nabeshin
ぷよぷよもあるよ 部門より
ぷよぷよもあるよ 部門より
prankster 曰く、
以前どこかのブログのエントリで見たときはスルーしたのだが、わずか565バイトテトリスのプログラミング解説というページがある。ふと思い出して探してみたところ、これが改良されてjavascript - 545バイトテトリスというものになっていた。
本質的にはJavaScriptによるプログラミングではあるが、実際にHTMLファイルに落として読み込んでみると見事に動作することから、HTMLはプログラミング言語じゃないという解説とか、プログラミング言語ヒエラルキーで「HTMLをプログラミング言語と主張する人々」が最下層であるとかいうのが嘘のような気がする。
ソースの読める方は圧縮のためのテクニックとか工夫とかが分かり面白いだろう。どこがすごいのか、シロウトの私のために解説してくださらないか?
typo (スコア:5, おもしろおかしい)
○プログラム ×プログム
Re:typo (スコア:3, おもしろおかしい)
Re:typo (スコア:2, おもしろおかしい)
>○プログラム ×プログム
生理的圧縮技術ですよ。
実際、みなプログラムだと分かってるじゃないですか。
Re:typo (スコア:1)
Re:typo (スコア:3, おもしろおかしい)
焦りすぎです><
Re:typo (スコア:1, 参考になる)
Re:typo (スコア:1)
七行プログラミング (スコア:5, 参考になる)
七行プログラミング part2 [2ch.net]の59あたりから。
最初11行(2007/4/17 #61)でスタートしたのが、少しずつ改良されて10日後(2007/4/27 #212)には7行達成。
当時リアルタイムに読んでましたけど、日に日にどんどん短くなっていく様は読んでいてなかなか楽しいかったです。
なお、2chのスレでの完成品は、htmlファイルとしての記述込みでちょうど79文字7行(=553バイト)です(<body onKeyDown=…から始まる)。
タレコミのリンク先の545バイトというのは、JavaScriptなコード部分だけになってますね。
Re:七行プログラミング (スコア:1)
純HTMLでゲームを作る! (スコア:3, すばらしい洞察)
#この選択肢、色が違うけどさっき行ったんだったかな…
Re:純HTMLでゲームを作る! (スコア:5, おもしろおかしい)
<p>
ウァーリーウァーリーウァーリー<br>
ウァーリーウェーリーウァーリー<br>
ウァーリーウァーリーウァーリー<br>
ウァーリーウァーリーウァーリー<br>
ウァーリーウァーリーウァーリー<br>
</p>
<p>* 検索禁止</p>
Re:純HTMLでゲームを作る! (スコア:1)
最初に主人公の名前を入れて、ずらずらずらーっと書いてあるページの一番下に、
いくつかリンクがあってそれによってストーリーが変わるという。
エンディングにたどり着いてひたすらバックするのが面倒で、
分岐のたびにタブが増えていく結果になったような気がします。
たしかドラクエ風の世界だったかな?
結構エロかった気もするんだが思い出せないや。
Re:純HTMLでゲームを作る! (スコア:1)
最初に入れた主人公の名前が一回も出てこないならいいんでしょうが。
# 純HTMLの定義とは?って話になりそうですが。
Re:純HTMLでゲームを作る! (スコア:5, おもしろおかしい)
いいえ、エロ小説の時点で不純ですので。
Re:純HTMLでゲームを作る! (スコア:2, おもしろおかしい)
簡単です。どんどん分岐させちゃえばいいんです。
nameselect.html
中略
nameselect_a.html
中略
game_a_scene1.html
game_a_scene2.html
game_a_scene3.html
ちょっとファイルの数を省略してシナリオも簡単なものとなっていますが、とても簡単に実現できることがお分かりいただけたかと思います。
続編 (スコア:3, 参考になる)
一行プログラム (スコア:2, 興味深い)
結構楽しめるゲームなんかが出来たもんです。
Re:一行プログラム (スコア:1, 参考になる)
当時はテトリスというゲームは存在しませんでしたが、まあ256バイトもあれば作れるんじゃないかな?
と思ったら既にやられている方が [256b.com]。
なつかしいなぁ (スコア:2, 興味深い)
(たぶん565バイト版だったと思いますが)。
当時のSafariでは動作しなかったですね。今のSafari(3.04)では動作しますが、デフォルトのフォント設定だと■と_の幅が一致しなくてプレイできないですね。
Best regards, でぃーすけ
IOCCC (スコア:2, 参考になる)
すると世界地図が表示されて・・・
Re:IOCCC (スコア:1)
iocccの問題は、ソースだけ見てもコンパイルしたく
ならないというところです(僕はそうだった)。
これもそうですが、テクニックとしてはiocccの定石化
している部分が多いので。
でも、これからは実行してみることにします。
Re:IOCCC (スコア:1)
インデントを付けてみた (スコア:2, 興味深い)
あり? (スコア:1)
Programmer Hierarchyでも、HTMLとは別になってますよ。
Re:あり? (スコア:1, 参考になる)
scriptタグの中はtype指定された別の記述方式のものとなります。
なのでテトリスになってるのはJavaScriptであってHTMLは配置してるだけです。
本来なら外部ファイルとして読み込むのが正当かとおもいます。
組み込みはちょっとした事を書くのに別ファイルじゃ面倒ってのに対応しただけ。
#と、とりあえず関連してるところにぶら下げる。
Re:あり? (スコア:1)
それはそうと、タレコミのリンク先を辿って、ショートコーダーなる言葉があることを知りました。
なお、ショートコーダーとは、... [zapanet.info]
Javascriptのこの手のテクニックはあまり持っていないので、解説を読み中…
Re:あり? (スコア:3, 参考になる)
文脈をうまく解析してforやifの中身を分かりやすく書いてくれる機能がついてれば完璧なんですけどね。
Re:あり? (スコア:1)
REM文に記述して、メモリを書き換えてプログラムとするなんてのは、ごく最近の話ですもんね!!
タブレット中毒者。
Re:あり? (スコア:1, すばらしい洞察)
昔で言うところのエスケープシーケンスでカーソル位置動かして表示させるのと何ら変わりがない。
さすがに仕様が静的であるVT端末等のターミナルを、プログラム言語と同列に扱うのは無理がある。
1行255バイトプログラム (スコア:1)
線しか書けないグラフィックエディタやちゃんとエンディングまで用意してあるRPGがあったりした。
#256バイトだったかもしれない。
#RPGのエンディングは「Illegal function call in XXX」なんだけど、その世界の言葉では「XXX 年にあなたは世界を救った」みたいな意味になるとかという洒落っ気ある発想でした。
天琉陳(Teruching)
Re:1行255バイトプログラム (スコア:1)
1画面プログラム(MSX) (スコア:1)
(40文字x25行分だっけ)
Re:1画面プログラム(MSX) (スコア:1)
SYSTEM ROMの一部を読み出して、スプライトパターンとして用いるBASICプログラムを見て感動した記憶があります。
Re:1画面プログラム(MSX) (スコア:1)
一番下の行は、通常、ファンクションの内容の表示のために予約されていたので、自由に使えるのは24行です。
ファンクションの表示を消すこともできたはずです。
Re:1画面プログラム(MSX) (スコア:1)
MSX-FANまでしか思い出せませんでした。
他機種も入れるとその前になにかあったはずとは思ったんですが、書名が出てこなかった...
思い出すのは「テクノポリス』とか別の書名ばかり :D
# あと覚えているパソコン雑誌は「ポプコム」とか「MSX応援団」とか「MacLIFE」とか「Mac100%」とか...
--
MSX応援団は買ったことがなかった
もう2バイト (スコア:1)
Re:もう2バイト (スコア:2, 興味深い)
変数宣言のvarを省略してまで、字数を稼いでいるので、冒頭の"window.onkeydown"は奇妙な印象です。ここを"onkeydown"にすると、"window."の7バイト分は削れますね。オリジナルのHTML版は、そもそも、イベントハンドラをタグに直接書いているので、js版に移植した人がつけた贅肉でしょうか。
あと、ランダムな要素を全く使っていないので、決まった形が順番に落ちてくるだけなのは、テトリスとしてどうなんですかね。実装は難しくないでしょうから、初期目標の字数制限(?)のせいでオミットしたんだと思いますが、せっかくここまでやってあるだけに惜しい感じがします。
Re:はぁ? (スコア:1)
タレコミ者です。「本質的にはJavaScriptによるプログラミングではあるが」と書いてあるとおり、HTMLがプログラミング言語でないことは重々承知しています。HTMLテキストという「形式」に落とし込んであるところから、素人目には「HTML=プログラミング言語」と思いかねない例だと思っての感想です。その当たりを汲んで、プログラムテクニックの解説をお願いします。
# HTMLはその名の通りマークアップ言語と理解してます。しつこいようですが。
Re:はぁ?(蛇足な私見-1) (スコア:1)
妙に首を捻らせない、シンプルな内容でタレ込んで欲しかったなぁ。
Re:はぁ?(蛇足な私見-1) (スコア:2, すばらしい洞察)
もちろん、スルー力の抜き打ちテストでしょう。
Re:はぁ?(蛇足な私見-1) (スコア:3, すばらしい洞察)
すべて「釣り」ということにしてスルーしてしまうのが普通になると
相手の文章に(釣りエサではなく本当に)何らかの非があった時に
指摘できない空気になってしまうような気もします。
そして、間違えた人も、一言謝ればいいものを、ろくに謝らずに
「それは知ってます」「そういう事ではありません」「釣りでした」
など、言い訳ばかり重ねてしまう…。悪い意味でのオタク化。
プライドばかり無駄に高くて、自分の非を素直に認めたり謝ったりできない、
そんな人間が育ってしまうのではないでしょうか。
# 分不相応にプライドが高い人って、自分から謝ることができないんですよね。
# いざ指摘しても「それは謝るほどの事なのですか」とか、上から目線だったり。
# 事の大小に関係なく、まず謝るのは社交術の基礎だと思うんですがねぇ…。
Re:はぁ? (スコア:1)
>javascriptはプログラミング言語だけど、HTMLはプログラミング言語じゃない
ブロックの描画には、HTMLが使われているので
HTML+ブラウザは、View層を担当していると考えられると思います。
私は、そういう意味で準プログラミング言語だと考えます。
# Viewエンジンのブラウザが解釈する言語
Re:はぁ? (スコア:1)
>"キミのHTML"はいつも描画してるのかい?
描画を直接行っている言語が何かといえばとても曖昧なんじゃないかとは思いますが
(マシン語?GPU内マイクロコード?GPU設計に使うVHDL?)
今回のテトリスのコードには brタグが含まれています。
innerHTML に設定されたこの"HTML"が描画の「元」になっているはずです。
# オレのHTMLだけなのかな・・・・
Re:はぁ? (スコア:3, すばらしい洞察)
しかし世の多くの人はHTMLをデザインやレイアウトのためのツールだと考え、そのように使っています。これはwebページ作成史のなかでは大変不幸な出来事でした。とはいえ最近は企業も個人も、HTMLを表示用ツールとして使用した場合、あまりにメンテナンスしていくのが大変なので別の方向を探りつつあるようです。
webブラウザはそれぞれの仕様でHTMLを読み込んで表示しているだけです。HTML側にはどのように表示すべしという目的なんてありません。表示目的でHTMLを使用したらえらい苦労が待ってる、ということに気づくのは、HTML学習者が一度は通る関所のようです。
Re:はぁ? (スコア:1, おもしろおかしい)
「猫語にゃあ」に空目した。
それだけなんだ。うん。
Re:小さい理由 (スコア:5, おもしろおかしい)
#Tと書けばテトリスが、Pとかけばぷよぷよになります。
I think I can
HQ9+ (スコア:2, 参考になる)
Re:小さい理由 (スコア:4, すばらしい洞察)
んじゃあ、ブートローダから自分で組んで・・・
でも、BIOSに頼ってるから・・・
んじゃあ、BIOSで最小プログラムを書こう!
でも、ハードウェア上のファームウェアに表示とか頼っちゃうよね・・・
以下、延々と・・・
#そうか!人力でブロックをうごかせば(違
Re:小さい理由 (スコア:2, おもしろおかしい)
それだって、DNAに頼ってる事にっ…
Re:小さい理由 (スコア:3, おもしろおかしい)