計算機を作ろう その⑤

続きです。

前回はこちら

uso-800-plus-alpha.hatenablog.com

今回は、経路分けについて考えます。実質最終回です。

 

まずは、下図の赤枠のところを考えてみます。

f:id:tanpe_kanpinuyep_ne:20200101202604p:plain

この図では0(=スイッチON, OFF)ですが、1(=スイッチOFF, ON)のときも含めて、それぞれの場合で何が起こるのかを確かめてみます。

 

(a) 攻方持駒:桂、スイッチON, OFFの場合

スタート地点から出発し、スイッチ0かスイッチ1に上から進入します。

このとき、OFFであるスイッチ1に進入すると不詰となってしまうので、攻方はスイッチ0を選択して進入します。

次に、桂ーと歩ーの選択ですが、持駒に歩が無いので、桂ーのほうへ入ることになります。

つまり、(a)では一番左のルートが選択されることになります。

 

(b) 攻方持駒:歩、スイッチON, OFFの場合

同様に考えると、(b)では左から2番目のルートを選ぶしかありません。

 

(c) 攻方持駒:桂、スイッチOFF, ONの場合

同様に考えると、(c)では左から3番目のルートを選ぶしかありません。

 

(d) 攻方持駒:歩、スイッチOFF, ONの場合

同様に考えると、(d)では一番右のルートを選ぶしかありません。

 

これで、内部状態とテープ記号の全ての組み合わせに対してルート分岐を用意することができました。

 

この瞬間、(a)~(d)全てで、全スイッチがOFFの状態になっています。この後はテープ記号の書き換えに対応したスイッチをONにしに行きます。

(そうすれば、「ひとつだけONで残りはOFF」の状態を維持することができます)

 

今回お題としたチューリングマシンをよく見ると、全パターンでテープ記号を1に書き換えています。つまり、全4ルートが、それぞれスイッチ1をONにしに行くということになります。

スイッチをONにするには、下から進入しなければなりません。が、スイッチ下部に入口はひとつしか無いため、一旦分岐させた4ルートをひとつに集めてやる必要が出てきます。

 

せっかく分岐させたので、その情報は失いたくありません。そのため、こうします。

f:id:tanpe_kanpinuyep_ne:20200101204452p:plain

今回は4ルートが合流するため、

1ルート目:桂桂桂

2ルート目:桂桂歩

3ルート目:桂歩歩

4ルート目:歩歩歩

のように、識別用持駒を与えてやります。そうすれば合流しても、どの分岐から来たのか分かるようになります。

 

そうして、スイッチ1を無事ONにした後に、

f:id:tanpe_kanpinuyep_ne:20200101204723p:plain

識別用持駒を吐き出させて、再度分岐させます。

 

f:id:tanpe_kanpinuyep_ne:20200101204852p:plain

その後は、次の内部状態用の持駒を渡して、次の行き先へ移動させてやれば完成です。

「詰み」の部分について、Wikipediaでは"1, R, H"と記載してありますが、右マス(=Right)へ渡す理由が分からなかったので、そのまま詰ましています。たぶん議論に影響は出ないんじゃないかと思います。

 

要するに、「分岐、合流、スイッチON・OFF、持駒による識別を駆使すればよい」という話なのだと思います。

 

・・・で終わってもたぶん問題ないでしょうが、もう一例挙げてみたいと思います。

 

続く

 

uso-800-plus-alpha.hatenablog.com