Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

『精霊の箱』に出てくるチューリングマシンを試してみました

先日、『精霊の箱 チューリングマシンをめぐる冒険』を読み終えたのですが、非常に面白かったので、いくつか実際に動かしてみました。

turing_machine.rb

ショールマンに割り当てられた設計図

1行目に入力文字列、2行目以降にファウマン卿の記述方法を書いていきます。本の中では、終了状態が丸付き数字で表現されていましたが、最後の行の最右の数字を終了状態にしています。

$ cat input.txt
○○●●○○●○●
1○○→1
1●●→1
1 ○←2
2○○←2
2●●←2
2  →3
3○ →4
3● →4

実行

ショールマンに割り当てられた設計図は入力数を2倍するものでした。

$ ruby turing_machine.rb < input.txt
 ○○●●○○●○●: 状態1
 ↑
 ○○●●○○●○●: 状態1
  ↑
(途中略)
 ○○●●○○●○●○: 状態3
 ↑
  ○●●○○●○●○: 状態4
  ↑

ララヴに割り当てられた設計図

$ cat input.txt
○●○○●●●○●○○●●○
1○○→1
1  →5
1●●→2
2●●→4
2○○←3
2  ←3
3●○→1
4●●→4
4○○→1
4  →5

実行

ララヴに割り当てられた設計図は、○と○に挟まれた単独の●が○に変えられ、●の連続だけが残るものでした。

$ ruby turing_machine.rb < input.txt
 ○●○○●●●○●○○●●○: 状態1
 ↑
 ○●○○●●●○●○○●●○: 状態1
  ↑
(途中略)
 ○○○○●●●○○○○●●○ : 状態1
               ↑
 ○○○○●●●○○○○●●○  : 状態5
                ↑

ヤークフに割り当てられた設計図

$ cat input.txt
○●●○○
1○○→1
1●●→1
1 |←2
2××←2
2○×→3
2●×→4
2  →6
3○○→3
3●●→3
3××→3
3||→3
3 ○←5
4○○→4
4●●→4
4××→4
4||→4
4 ●←5
5○○←5
5●●←5
5||←2
6× →6
6| →7

実行

ヤークフに割り当てられた設計図は、元の文字列を反転させるものでした。

$ ruby turing_machine.rb < input.txt
 ○●●○○: 状態1
 ↑
 ○●●○○: 状態1
  ↑
(途中略)
      |○○●●○: 状態6
      ↑
       ○○●●○: 状態7
       ↑

全角スペースのところで表示が崩れていますが、実際は以下のように表示されています。

f:id:rahaema:20200322150405p:plain

参考