第379回 PTT を聴きに行った

先週の話ですが。
http://www.ci.i.u-tokyo.ac.jp/~sasada/ptt/arc/379/index.html
Quine ruBy - まめめも という記事がとても面白くて、Perl版JS版を書いたりしてみたことがありまして、そんな縁で追いかけていたid:ku-ma-meさんが発表されるということで、是非とも聴きに行きたい!とPTTに初参加させていただきました。
発表資料はご本人がブログで公開されています。
PTT で Quine や難解プログラミングについて話してきた - まめめも
1時間半ほどひたすらesoteric programmingの話を聴けて、とても楽しかったです。ありがとうございました!

自分メモ

PTT #379 遠藤侑介さん(id:ku-ma-meさん)

  • esoteric programming
  • code golf
  • esoteric Programming Language (esolang)


1. 使用文字を制限してRubyを書く

  • 数値のみ
  • アンダースコアだけで
    • gem install _
    • ゲーデル数を6進表記、各桁をアンダースコアの長さで
      • 評価順、引数の有無に注意
      • 生成されるコード長を考慮した結果、n=5が最小ぽい 計算違いで6に
  • アルファベットだけで
    • require要らず
      1. "p String nil"
      2. p(String(nil))
      3. p("")
      4. puts("".inspect)
      5. inspectメソッド内でconcatしていき、eval self
  • アルファベットだけで数字を作る
    • caller
      • stacktraceのsizeを取ることで作る
    • for文
      • ary.each {|i|...}の構文糖
      • aliasつかってeachをsizeで置き替え
    • 最終的には文字列の長さで
      • String#inspectで concatしてsize
      • 文字列生成部分との衝突を回避するため begin A ensure B end ?
  • ということで
    • 使用文字制限に強い
    • 未解決問題
      • 小文字だけ
      • 大文字だけ(不可能?)


2. Rubyで美しいQuineを書く

  • 基本
    1. 自分自身を文字列として再構成
    2. その文字列を出力
  • 山手Quine: 29駅で元に戻る
    • 起動速度重要
    • フォントデータ、駅名、圧縮の展開、Quine、整形、ゴミの順で詰まっている
    • AAでプログラム書く: eval %w( ... ).join で簡単に
    • 圧縮: デコーダのサイズとデータサイズのトレードオフ。様々な方法
  • quineclock: 時計の形、実行すると現在時刻、かつQuineに
    • 基数変換でフォント圧縮: to_s(36)で36進数(0-9a-z)
  • Qlove: 回る地球のQuine, (デフォルト)8回くらいで一周
    • 世界地図データをzlib圧縮、整数化、文字列に
    • ||, && で地球部分かわす
    • Bignumのコード文字列化: デリミタなど使えない文字に注意。90進数に
  • 15quzzle: 引数でパネルを動かす
  • tic-tac-toe: ○×ゲーム 勝負を進める
  • Quine Reversi: 対話オセロ 勝つとQuine、負けるとQuineしてくれない
  • QR code: Quine Ruby code
    • 読むとQuineコードを出力、実行するとpng生成
    • 符号化自力で
  • tkquine: tkで1窓ずつ開いて文字出力
  • quine web server: 1文字ずつajaxで取得
  • png, gif, avi
  • QB: 目の色が変わる
  • Merry Quine-mas 2009: 音楽演奏つき
    • バイスファイルに波形データを送る
  • Merry Quine-mas 2010: ターミナル上でのアニメーション
  • quineリレー
  • RubyKaigi スタッフロール
  • まとめ
    • Rubyは文字配置制約+Quineに強い


3. esolangでQuine

  • BF Quine は404Bが現在最短
  • esolangでのQuineの書き方
  • Piet: 画像でプログラミング コードA, B, Cの方法で
  • Grass: エンコードすることでgolf、短縮
  • ModanShogi
  • 自己記述集合: x-y平面にプロットすると定義文が描かれる


4. 質疑
Q. どう考えて作るの:
A. 考えてしまえば二晩くらいで。golfのテクニックが役立っている