先週の話ですが。
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に
- アルファベットだけで
- アルファベットだけで数字を作る
- caller
- stacktraceのsizeを取ることで作る
- for文
- ary.each {|i|...}の構文糖
- aliasつかってeachをsizeで置き替え
- 最終的には文字列の長さで
- String#inspectで concatしてsize
- 文字列生成部分との衝突を回避するため begin A ensure B end ?
- ということで
- 使用文字制限に強い
- 未解決問題
- 小文字だけ
- 大文字だけ(不可能?)
2. Rubyで美しいQuineを書く
- 基本
- 自分自身を文字列として再構成
- その文字列を出力
- 山手Quine: 29駅で元に戻る
- 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のテクニックが役立っている