パスワードを忘れた? アカウント作成
16714 story

545バイトのテトリスプログラム 141

ストーリー by nabeshin
ぷよぷよもあるよ 部門より

prankster 曰く、

以前どこかのブログのエントリで見たときはスルーしたのだが、わずか565バイトテトリスのプログラミング解説というページがある。ふと思い出して探してみたところ、これが改良されてjavascript - 545バイトテトリスというものになっていた。
本質的にはJavaScriptによるプログラミングではあるが、実際にHTMLファイルに落として読み込んでみると見事に動作することから、HTMLはプログラミング言語じゃないという解説とか、プログラミング言語ヒエラルキーで「HTMLをプログラミング言語と主張する人々」が最下層であるとかいうのが嘘のような気がする。
ソースの読める方は圧縮のためのテクニックとか工夫とかが分かり面白いだろう。どこがすごいのか、シロウトの私のために解説してくださらないか?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • typo (スコア:5, おもしろおかしい)

    by Anonymous Coward on 2007年11月22日 13時22分 (#1254085)
    最近の「ら」抜き言葉はここまできてしまったのですか!(違

    ○プログラム ×プログム
  • by taka2 (14791) on 2007年11月22日 14時08分 (#1254138) ホームページ 日記
    2ch のプログラム技術板七行プログラミングスレ [2ch.net]での5年ぐらい前のネタですね。79文字×7行(=553文字)にこだわってるので、565バイトと545バイトの違いは大きい。

    七行プログラミング part2 [2ch.net]の59あたりから。
    最初11行(2007/4/17 #61)でスタートしたのが、少しずつ改良されて10日後(2007/4/27 #212)には7行達成。
    当時リアルタイムに読んでましたけど、日に日にどんどん短くなっていく様は読んでいてなかなか楽しいかったです。

    なお、2chのスレでの完成品は、htmlファイルとしての記述込みでちょうど79文字7行(=553バイト)です(<body onKeyDown=…から始まる)。
    タレコミのリンク先の545バイトというのは、JavaScriptなコード部分だけになってますね。
  • 純HTMLでゲームを作る! (スコア:3, すばらしい洞察)

    by ctrl_alt_meta (19732) on 2007年11月22日 13時42分 (#1254107)
    ゲームブックなら可能だな。。。

    #この選択肢、色が違うけどさっき行ったんだったかな…
    • Re:純HTMLでゲームを作る! (スコア:5, おもしろおかしい)

      by .wii (33675) on 2007年11月22日 15時46分 (#1254202)
      <h1>ウォーリーをさがせ</h1>
      <p>
      ウァーリーウァーリーウァーリー<br>
      ウァーリーウェーリーウァーリー<br>
      ウァーリーウァーリーウァーリー<br>
      ウァーリーウァーリーウァーリー<br>
      ウァーリーウァーリーウァーリー<br>
      </p>
      <p>* 検索禁止</p>
      親コメント
    • ゲームブックとは少し違うけどどっかのウェブサイトのエロ小説で似たようなのを見た記憶があります。
      最初に主人公の名前を入れて、ずらずらずらーっと書いてあるページの一番下に、
      いくつかリンクがあってそれによってストーリーが変わるという。
      エンディングにたどり着いてひたすらバックするのが面倒で、
      分岐のたびにタブが増えていく結果になったような気がします。
      たしかドラクエ風の世界だったかな?
      結構エロかった気もするんだが思い出せないや。
      親コメント
      • それって純HTMLで出来ますかね?
        最初に入れた主人公の名前が一回も出てこないならいいんでしょうが。

        # 純HTMLの定義とは?って話になりそうですが。
        親コメント
        • Re:純HTMLでゲームを作る! (スコア:5, おもしろおかしい)

          by Anonymous Coward on 2007年11月22日 15時39分 (#1254195)
          > それって純HTMLで出来ますかね?

          いいえ、エロ小説の時点で不純ですので。
          親コメント
        • Re:純HTMLでゲームを作る! (スコア:2, おもしろおかしい)

          by Anonymous Coward on 2007年11月22日 19時30分 (#1254277)

          それって純HTMLで出来ますかね?

          簡単です。どんどん分岐させちゃえばいいんです。

          nameselect.html

          <html>
          <p>あなたの名前の最初の文字を選んでね
          <p><a href="nameselect_a.html">あ</a> <a href="nameselect_i.html">い</a> <a href="nameselect_u.html">う</a> <a href="nameselect_e.html">え</a> <a href="nameselect_o.html">お</a>

          中略

          <p><a href="nameselect_wa.html">わ</a> <a href="nameselect_wo.html">を</a> <a href="nameselect_nn.html">ん</a>
          </html>

          nameselect_a.html

          <html>
          <p>「あ」の次の文字を選んでね
          <p><a href="nameselect_aa.html">あ</a> <a href="nameselect_ai.html">い</a> <a href="nameselect_au.html">う</a> <a href="nameselect_ae.html">え</a> <a href="nameselect_ao.html">お</a>

          中略

          <p><a href="nameselect_awa.html">わ</a> <a href="nameselect_awo.html">を</a> <a href="nameselect_ann.html">ん</a>
          <p><a href="game_a_scene1.html">終わり</a>
          </html>

          game_a_scene1.html

          <html>
          <p>「あ」の目前にはおっかない感じの家がある。
          <p>入ってみますか?
          <p><a href="game_a_scene2.html">入ってみる</a> <a href="game_a_scene3.html">やめておく</a>
          </html>

          game_a_scene2.html

          <html>
          <p>ヤクザの家だった!「あ」は殺されました。
          <p><a href="game_a_scene1.html">最初からやり直し</a>
          </html>

          game_a_scene3.html

          <html>
          <p>その後「あ」は幸せに暮らしたという。
          <p><a href="game_a_scene1.html">最初からやり直し</a>
          </html>

          ちょっとファイルの数を省略してシナリオも簡単なものとなっていますが、とても簡単に実現できることがお分かりいただけたかと思います。

          親コメント
  • 続編 (スコア:3, 参考になる)

    by Anonymous Coward on 2007年11月22日 15時26分 (#1254192)
    500バイト切りましたよ http://zapanet.info/blog/item/1130 [zapanet.info]
  • by NOBAX (21937) on 2007年11月22日 13時31分 (#1254094)
    昔、ASCIIが月刊誌だった頃、BASICで255文字以内のプログラムを作るコンテストがありましたね。
    結構楽しめるゲームなんかが出来たもんです。
  • by Deasuke (34806) on 2007年11月22日 14時56分 (#1254176) 日記
    昔Javascriptの簡単なsyntaxチェッカーを受注したことがありましたが、そのテスト入力の一つに利用させてもらいました。
    (たぶん565バイト版だったと思いますが)。

    当時のSafariでは動作しなかったですね。今のSafari(3.04)では動作しますが、デフォルトのフォント設定だと■と_の幅が一致しなくてプレイできないですね。

    --
    Best regards, でぃーすけ
  • IOCCC (スコア:2, 参考になる)

    by Anonymous Coward on 2007年11月22日 16時05分 (#1254209)
    ちょっと違うけど僕は これ [ioccc.org] で感銘を受けました。

    % a.out 37 137
    すると世界地図が表示されて・・・
    • by 335 (4199) on 2007年11月22日 16時22分 (#1254219) 日記
      いやぁ、ひさしぶりにいいもの見せて頂きました。。

      iocccの問題は、ソースだけ見てもコンパイルしたく
      ならないというところです(僕はそうだった)。
      これもそうですが、テクニックとしてはiocccの定石化
      している部分が多いので。

      でも、これからは実行してみることにします。

      親コメント
  • by Anonymous Coward on 2007年11月22日 17時51分 (#1254245)
    解析しやすいように、インデントを付けて整形してみました(前半)。:-)
    <HTML>
    <HEAD>
    <TITLE>テトリス</TITLE>
    </HEAD>
    <BODY>
    <TEXTAREA cols="80" rows="38" onclick="this.select()">
    window.onkeydown = function(e) {
        K = e.keyCode
    };
     
    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
  • by TarZ (28055) on 2007年11月22日 13時29分 (#1254093) 日記
    普通に、HTML ≠ JavaScript ですよね。

    Programmer Hierarchyでも、HTMLとは別になってますよ。
    • Re:あり? (スコア:1, 参考になる)

      by Anonymous Coward on 2007年11月22日 13時47分 (#1254117)
      HTMLの中に組み込まれたJavaScriptであってHTMLで書いてるわけじゃないですね。
      scriptタグの中はtype指定された別の記述方式のものとなります。
      なのでテトリスになってるのはJavaScriptであってHTMLは配置してるだけです。

      本来なら外部ファイルとして読み込むのが正当かとおもいます。
      組み込みはちょっとした事を書くのに別ファイルじゃ面倒ってのに対応しただけ。

      #と、とりあえず関連してるところにぶら下げる。
      親コメント
      • by TarZ (28055) on 2007年11月22日 14時04分 (#1254135) 日記
        ですよね。なので、「HTMLがプログラミング言語だ」ってのはちょっと違うでしょう。

        それはそうと、タレコミのリンク先を辿って、ショートコーダーなる言葉があることを知りました。

        なお、ショートコーダーとは、... [zapanet.info]
        ショートコーダー(Short Coder)とは、プログラムのソースコードを極限まで短縮する技術を持ったプログラマのことである。
        ...


        Javascriptのこの手のテクニックはあまり持っていないので、解説を読み中…
        親コメント
        • Re:あり? (スコア:3, 参考になる)

          by Angelica (23122) on 2007年11月22日 17時42分 (#1254243) 日記
          たまたま昨日「圧縮ツールの逆、JavaScriptの整形ツール - JS Beautifier登場 [mycom.co.jp]」というのを読んでいたので、早速試してみる [laacz.lv]。
          window.onkeydown = function(e) {
              K = e.keyCode
          };
          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()
          ・・・やっぱり読みにくいな。
          文脈をうまく解析してforやifの中身を分かりやすく書いてくれる機能がついてれば完璧なんですけどね。
          親コメント
  • その昔、Oh! FM と言う雑誌にBASICでの1行(255バイト)プログラムの特集があった。

    線しか書けないグラフィックエディタやちゃんとエンディングまで用意してあるRPGがあったりした。

    #256バイトだったかもしれない。
    #RPGのエンディングは「Illegal function call in XXX」なんだけど、その世界の言葉では「XXX 年にあなたは世界を救った」みたいな意味になるとかという洒落っ気ある発想でした。
    --
    天琉陳(Teruching)
  • MSX用の1画面プログラムが載ってたのはMSXFANだったっけか?
    (40文字x25行分だっけ)
    • プログラムポシェット では?

      SYSTEM ROMの一部を読み出して、スプライトパターンとして用いるBASICプログラムを見て感動した記憶があります。
      親コメント
  • by kawaz (15398) on 2007年11月22日 13時59分 (#1254131) ホームページ
    ■を*に、_を_にすればもう2バイト削れますよね。
    • by Torisugari (25483) on 2007年11月22日 19時21分 (#1254272) 日記
      どこにぶら下げるか迷いましたが…。

      変数宣言のvarを省略してまで、字数を稼いでいるので、冒頭の"window.onkeydown"は奇妙な印象です。ここを"onkeydown"にすると、"window."の7バイト分は削れますね。オリジナルのHTML版は、そもそも、イベントハンドラをタグに直接書いているので、js版に移植した人がつけた贅肉でしょうか。

      あと、ランダムな要素を全く使っていないので、決まった形が順番に落ちてくるだけなのは、テトリスとしてどうなんですかね。実装は難しくないでしょうから、初期目標の字数制限(?)のせいでオミットしたんだと思いますが、せっかくここまでやってあるだけに惜しい感じがします。
      親コメント
typodupeerror

192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり

読み込み中...