本文へスキップ
totonoe.tech

🌀 難解プログラミング言語

難解プログラミング言語を整える。

あえて読み書きしにくく作られた言語を、図鑑と実行環境で。

Brainf*ck・Whitespace・Piet・Chef・Malbolge など、難解プログラミング言語(エソラング)12種の図鑑と、Brainf*ck・Befunge・Ook!・Deadfish・Malbolge・JSFuck・Whitespace をその場で動かせる実行環境です。読みにくさ・書きにくさの5段階と、成り立ち・出典を事実にもとづいて載せています。

エソラングを整える

= あえて読み書きしにくく作られたプログラミング言語16種を、コード例つきで一覧する図鑑

難解プログラミング言語(エソラング)16種を紹介する図鑑。Brainf*ck・Whitespace・JSFuck・Lazy K・Piet・Befunge・Folders・Velato・Shakespeare・Chef・Malbolge・INTERCAL を、記号系/視覚・構造系/文学・世界観系の3分類で、誕生年・作者・国・仕組み・出典(esolangs.org)とともに解説。Brainf*ck と Befunge はページ内で実行できる。送信ゼロ。

  • ● 16言語を記号系・視覚構造系・文学世界観系の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 表示の切り替え
  • ● スタック・算術・ヒープ・フロー制御・出力を実行
  • ● 命令ごとの逆アセンブル表(色分け)
中級
開く

Grassを整える

= w・W・v の3文字だけで書く言語 Grass を実行して、関数と適用の色分けを見られます。

Grass は w・W・v の3文字だけで書くラムダ計算ベースの難解言語で、UENO Katsuhiro氏が2006年に提案しました。このツールは作者の公式仕様に沿ったインタプリタで、Out・Succ・w・In と文字の比較(Church の真偽)に対応します。関数定義と適用の色分け、スタックの長さと中身、出力を確認でき、文字列から Grass を生成することもできます。入力はブラウザの外へ出ません。

  • ● 作者の公式仕様に沿ったインタプリタ(Out・Succ・w・In・文字の比較)
  • ● 全角の w W v も同じ文字として読む
  • ● 関数定義と適用の色分け表示
専門
開く

INTERCALを整える

= PLEASE の回数まで検査される1972年の言語 INTERCAL を実行して、変数のビットと NEXT スタックを追えます

INTERCAL(1972年、Don Woods と James M. Lyon)の基本部分集合を実行するページ。DO・PLEASE・NOT・ラベル・変数・mingle・select・単項演算・NEXT・RESUME・FORGET・COME FROM・READ OUT・WRITE IN・GIVE UP・ABSTAIN・STASH・IGNORE・1次元配列に対応し、C-INTERCAL に倣って PLEASE の割合が少なすぎる・多すぎるとエラーにする。多次元配列や拡張命令は未対応。

  • ● PLEASE の割合を実行前に検査(E079・E099)
  • ● COME FROM・NEXT・RESUME・FORGET に対応
  • ● mingle・select・単項 AND/OR/XOR を式で評価
専門
開く

Pietを整える

= 色のマス目がそのままプログラムになる言語 Piet を、塗って実行して1歩ずつ確かめるツール

Piet(David Morgan-Mar, 2002)は、色の変化で命令が決まる画像型プログラミング言語。このツールは公式仕様どおり、20色・カラーブロック・DP/CC・17命令・白の通過・黒と端での向き変え(8回で停止)を実装したインタプリタ。マス目エディタ、ステップ実行、画像の読み込みとPNG保存を端末内で行う。

  • ● 20色のマス目エディタ(クリック・タップ・なぞって塗れる)
  • ● 仕様の17命令・白の通過・黒と端での向き変えに対応
  • ● ブロックの枠・DP/CC・スタック・次の命令を1歩ずつ表示
専門
開く

Shakespeareを整える

= 登場人物が変数、台詞が計算になる戯曲形式の言語を、舞台の上の値とスタックごと眺める

Shakespeare Programming Language(SPL・2001年・Karl Hasselström と Jon Åslund)をブラウザ内で実行し、舞台にいる人物・各人物の値とスタック・直前の問いの答え・今の台詞の日本語での意味をステップ再生できる遊び場。名詞(1か-1)と形容詞(付くごとに2倍)で数を作り、the sum of などで組み合わせる。入力欄は Open your mind / Listen to your heart が読み、尽きると -1。語彙は仕様の代表的な語だけ。実行は100万文で必ず停止。送信ゼロ。

  • ● 最後まで実行と、1文ずつのステップ再生(再生/一時停止/1文/速度)
  • ● 舞台にいる人物・各人物の値とスタック・直前の問いの答えを表示
  • ● 今の台詞の意味を日本語で一言(例: Juliet の値を (Juliet + 2) にする)
中級
開く

><>(Fish)を整える

= 盤面を走るポインタと、増やせるスタックを、ステップごとに眺める

><>(Fish、2009年・Harpyon)の全命令(移動・鏡・算術・文字列モード・スタック操作・複数スタック [ ]・レジスタ・g/p・入出力)をブラウザ内で実行し、盤面のポインタ・向き・スタック・レジスタをステップ再生できるツール。標準入力と初期スタックの指定、命令数上限100万歩つき。送信ゼロ。

  • ● 実行とステップ再生(ポインタ・向き・複数スタック・レジスタの表示)
  • ● 標準入力と、最初に積んでおく数を指定できる
  • ● 全命令に対応( [ ] による複数スタックや g/p の書き換えも)
専門
開く

HQ9+を整える

= H・Q・9・+ の4命令だけの冗談の言語を、命令ごとの出力で眺める

HQ9+(2001年・Cliff L. Biffle)の4命令(H/Q/9/+。H・Q は小文字も可)をブラウザ内で実行し、命令ごとの出力とアキュムレータの値を表にするツール。歌詞は esolangs.org の 99 bottles of beer の形。なぜ冗談の言語と呼ばれるかの解説つき。送信ゼロ。

  • ● H・Q・9・+ の4命令すべてに対応
  • ● 命令ごとの出力とアキュムレータの値を表で表示
  • ● Hello World・自分自身を出す(クワイン)・99 Bottles of Beer のサンプル
中級
開く

COWを整える

= 牛の鳴き声12種類でできた Brainfuck の仲間を、Brainfuck への対応つきで動かす

COW(2003年・Sean Heber)の12命令(moo/mOo/moO/mOO/Moo/MOo/MoO/MOO/OOO/MMM/OOM/oom)をブラウザ内で実行し、メモリ・ポインタ・レジスタをステップ再生できるツール。Brainfuck との対応表と、Brainfuck→COW 変換(元と変換後の出力比較)つき。送信ゼロ。

  • ● 12命令すべてに対応(mOO・MMM・OOM・oom も)
  • ● メモリ・ポインタ・レジスタのステップ再生
  • ● Brainfuck との対応表
中級
開く

他のカテゴリ

運営サイト

私たちが運営するサイト