Title
Attempt to Enumerate and Index Every Possible Dis Program by Outputting and Haltability Specifications
空文字列によるプログラム、すなわちどんな入力についても一切出力を行わず停止もしないプログラムを便宜上NaNに番付した。}こそ入力を受け付けてバイトを食うが、出力など目に見えるものが生じないためNaNにしている。何故ならば各プログラムを「urlのハッシュ部分でパーセントエンコーディングなしで表してみたい」からであり、空文字列によるプログラムについては空文字列で表してみたいからである。
各プログラム
入力にかかわらず固定のバイナリを出力をするプログラムは、その内容を正規表現で表している。それ以外のプログラムは等価のsed -znたるプログラムを表示する。
NaN b NaN
0 ! d
NaN *, >, ^, _, | b NaN
1 { \0+
NaN } b NaN
0 !!, !*, !>, !^, !_, !*, !{, !|, !} d
0 *! d
NaN **, *>, *^, *_, *|, *} b NaN
1 *{ \0+
0 >! d
NaN >*, >^, >_, >|, >} b NaN
2 >{ \xda+
0 ^! d
NaN ^*, ^>, ^^, ^_, ^|, ^} b NaN
1 ^{ \0+
0 _! d
NaN _*, _>, _^, __, _|, _} b NaN
1 _{ \0+
3 {! \0
1 {* \0+
4 {> \0\xda+
1 {^, {_, {{ \0+
5 {| \0\xef+
6 {} s/^/\0/p
0 |! d
NaN |*, |>, |^, |_ b NaN
7 |{ \xef+
NaN ||, |} b NaN
NaN }!, }*, }> b NaN
8 }{ p
9 }| s/^\x94//; t 0; s/^\xee//; t 8; s/^\xef//; t 9; s/^.//; t NaN
NaN }} b NaN
0 ![!*>^_{|}][!*>^_{|}] d
0 *![!*>^_{|}] d
0 **! d
NaN ***, **>, **^, **_, **|, **} b NaN
1 **{ \0+
0 *>! d
NaN *>*, *>>, *>^, *>_, *>|, *>} b NaN
2 *>{ \xda+
NaN *^!, *^*, *^>, *^^, *^_, *^{, *^|, *^} b NaN
0 *_! d
NaN *_*, *_>, *_^, *__, *_|, *_} b NaN
1 *_{ \0+
3 *{! \0
1 *{* \0+
10 *{> \0\0\xda+
1 *{^ \0+
1 *{_ \0+
1 *{{ \0+
11 *{| \0\0\xef+
6 *{} s/^/\0/
0 *|! d
unknown *|*, *|>, *|^, *|>, *|{, *||, *|}
2字までのプログラム
着目されたいのは9番、}|。特にカオスな挙動を取りうるものである。これは、「入力を取得し、その内容に基づきパイプ文字と演算をし、その結果をアキュムレータならびにメモリに書き込み、次のバイト入力についてその書き込まれた内容を実行する」ものである。これは、入力された最初のバイトにより、演算の結果ローダブルにされる可能性があるという。
3字のプログラム
*^から始まる任意の3字のプログラムについてはどれもNaNされることは興味深い。これだけでプログラムカウンタを0と1に囚われさせるというのだから。3字どころか最早43字までのプログラム(多くとも42番地までに命令がロードされており43番地からは全てゼロであるプログラム)がこれに該当するのだから1つの悪夢である。
(0, 0to42) * (1to0, 43) ^ (@43 is 0) (1to0, 44) ^ (@44 is 0) (1to0, 45...59048) ^ (@45...59048 is 0) (1to42, 0) ^ (@0 is 42) (43...59048, 1...59005 is 0) (0, 59006to0) * (@59006 is 0) ( #99 This goes forever )