🌀 難解プログラミング言語
難解プログラミング言語を整える。
あえて読み書きしにくく作られた言語を、図鑑と実行環境で。
Brainf*ck・Whitespace・Piet・Chef・Malbolge など、難解プログラミング言語(エソラング)12種の図鑑と、Brainf*ck・Befunge・Ook!・Deadfish・Malbolge・JSFuck・Whitespace をその場で動かせる実行環境です。読みにくさ・書きにくさの5段階と、成り立ち・出典を事実にもとづいて載せています。
エソラングを整える
= あえて読み書きしにくく作られたプログラミング言語12種を、コード例つきで一覧する図鑑
難解プログラミング言語(エソラング)12種を紹介する図鑑。Brainf*ck・Whitespace・JSFuck・Lazy K・Piet・Befunge・Folders・Velato・Shakespeare・Chef・Malbolge・INTERCAL を、記号系/視覚・構造系/文学・世界観系の3分類で、誕生年・作者・国・仕組み・出典(esolangs.org)とともに解説。Brainf*ck と Befunge はページ内で実行できる。送信ゼロ。
- ● 12言語を記号系・視覚構造系・文学世界観系の3分類で紹介(C・JavaScript・Java・Python との比較は /prog-lang/)
- ● 読みにくさ・書きにくさの5段階評価とコード例
- ● Brainf*ck・Befunge はページ内で実行可能(自分のコードも実行できる)
Brainf*ckを整える
= たった8命令だけの言語を、1命令ずつ動かして仕組みを見る
Brainf*ck(1993年・Urban Müller)をブラウザ内で実行・ステップ実行(テープ先頭30マスとポインタ位置・現在命令のハイライト・再生/一時停止/1歩/速度)・テキストからのコード自動生成(前の文字との差分方式・往復同一性をテストで確認)ができる遊び場。入力命令「,」は入力なし(0)として扱う。ステップ上限で必ず停止。8命令でチューリング完全になる仕組みの解説つき。送信ゼロ。
- ● 実行とステップ実行(テープ先頭30マスの可視化・現在命令のハイライト)
- ● 再生/一時停止/1歩/速度スライダー
- ● テキスト→Brainf*ck コード自動生成(その場で実行して一致を確認)
Befungeを整える
= 盤面の上を上下左右に走るプログラムを、ポインタの動きごと眺める
Befunge-93(1993年・Chris Pressey)をブラウザ内で実行し、80×25の盤面上のポインタ位置と向き・スタックの内容をステップ再生できる遊び場。矢印「> < ^ v」で向きが変わり盤面がそのまま実行経路になる仕組みを可視化。「?」はランダムに向きが変わる。入力命令「&」「~」は入力なし(0)。ステップ上限で必ず停止。送信ゼロ。
- ● 実行とステップ再生(ポインタ・向き・スタックの表示)
- ● 再生/一時停止/1歩/速度スライダー
- ● Hello World・カウントループ・乱数迷路のプリセット
Ook!を整える
= Brainf*ck の8命令を「Ook.」「Ook?」「Ook!」に置き換えただけの言語を、相互変換して実行する
Ook!(Brainf*ck の各命令を Ook. / Ook? / Ook! の2語1組に置換した言語)を Brainf*ck と双方向変換し、ブラウザ内で実行できるツール。語の誤り・語数の奇数・存在しない組み合わせは文字位置つきでエラー表示。入力命令は入力なし(0)。送信ゼロ。
- ● Ook! ⇄ Brainf*ck の双方向変換(位置つきエラー表示)
- ● そのまま実行して出力を確認
- ● Hello World のサンプルつき
Deadfishを整える
= 4命令だけの言語で、値の推移を表で追い、目的の数値から最短コードを作る
Deadfish(i/d/s/o の4命令。値が −1 または 256 になると直ちに 0 にリセットされる)をブラウザ内で実行し、1命令ごとの値の推移を可視化するツール。数値→最短命令列の自動生成(BFS)つき。256 は作れないため生成不可の理由を表示。送信ゼロ。
- ● 1命令ごとの値の推移表
- ● 数値→最短 i/d/s 列の自動生成(幅優先探索)
- ● −1/256 の自動リセット規則の可視化
Malbolgeを整える
= 「人間には書けない」よう設計された言語の、既知のプログラムを動かしてレジスタの動きを見る
Malbolge(1998年・Ben Olmstead。位置依存の命令と自己書き換えで人間には書けないよう設計された言語)の実行専用インタプリタ。仕様(esolangs.org)どおりに crazy 演算・暗号化テーブル・3進レジスタを実装し、既知の Hello World 2種(世界初のビームサーチ発見版と短縮版)が正しく出力することをテストで確認。1ステップ実行でレジスタ a/c/d を表示。送信ゼロ。
- ● 既知の Hello World 2種をプリセット実行
- ● 1ステップ実行でレジスタ(a/c/d)を確認
- ● 自己書き換え・crazy 演算を仕様どおりに実装
JSFuckを整える
= 記号6文字「[ ] ( ) ! +」だけで JavaScript を書く言語への変換器
文字列や JavaScript コードを [ ] ( ) ! + の6文字だけの JSFuck 式(2012年・Martin Kleppe)に変換するツール。「false」「true」「undefined」「NaN」 の文字列化から文字を取り出す direct 方式・数値式の digit 方式・Function 経由の escape 方式の内訳表と、元と変換後の文字数比較を表示。「実行可能な形にする」で実行用の式にも変換できるが、ページ上では eval を使わず一切実行しない(CSP に unsafe-eval なし)。送信ゼロ。
- ● [ ] ( ) ! + の6文字だけへ変換
- ● 「実行可能な形にする」で実行用の式にも変換
- ● 元/変換後の文字数比較と倍率表示
Whitespaceを整える
= スペース・タブ・改行の3文字だけで書く「見えない言語」を、見える形にして実行する
Whitespace(2003年・Edwin Brady と Chris Morris。スペース・タブ・改行の3文字だけの言語)のブラウザ内インタプリタ。実コード⇄S/T/L 表示の切替、スタック・算術・ヒープ・フロー制御・出力の実行、命令ごとの逆アセンブル表(色分け・日本語の意味)、テキストからのコード生成(push+outchar)に対応。入力命令(readchar/readnum)は入力なしでエラー停止。ステップ上限で必ず停止。送信ゼロ。
- ● 実コード⇄S/T/L 表示の切り替え
- ● スタック・算術・ヒープ・フロー制御・出力を実行
- ● 命令ごとの逆アセンブル表(色分け)
他のカテゴリ