グーグル:チューリングマシン 解法

TOPへ戻る

第1ステージ
青丸の再生ボタンを1回押してスタート。
ボタン横の赤い数字は、押した回数。
ボタンを押した後、再生ボタンを押す。
×や/印のボタンは、押さなくて良い。
解法の原理の誤りはあしからず。
テープ内の2進数「00010」を、「001」に書き替えよ、と言う問題です。
押すたびに、0と1に変わるボタンが2つ有ります。  左向きの矢印1つと、右向きが3つ有ります。
再生ボタンを押すと、0を示した中央のヘッドは、まず左矢印に従いヘッドより1つ左の数字である「0」に移動します。(この時のテープは右回転)
問題の2進数は「011」だから、ヘッドより1つ左の数字は、「1」でなくてはいけません。 左側のボタンを1回押して「1」に変えます。
左矢印に従いヘッドより1つ左の数字に移動した後は、その位置から3つの右矢印に従い右側3つ目の位置(1つ目は0、2つ目は1、3つ目は0)に移動します。
右に3つ移動した値は0だとダメなので、右側のボタンを1回押して「1」に書き替えます。
再生時の動作は、指示図の左から右へ。
1つのボタンがあり、押すたびに「□」内の数字が1、空っぽ、0に変わります。
左矢印に従いヘッドより1つ左にテープが移動すると、そこは何もなく空っぽです。
ボタン下の数字は「0」だから、空っぽの時は「0」を書き込む指示を与えるため、ボタンを2回押します。
このボタンは、条件を与える指示です。
状態が?ならば、ボタン内の矢印が記す方向に書かれた動作を行う。
テープが左に1つ移動した値は空っぽだから、ボタンを2回押して□にすることで、「空っぽの時は、ボタン下には0と書かれているから、そのとおりに0を書き込む」動作を行うように指示を与える。
ヘッドの値は0だから、「条件:1ならば・・・・」は3つとも合致しません。
左矢印により、左に1つ移動。 この時のヘッド数値は、「1」
豚の鼻の様なボタンがあります。 押すたびに上に伸びている横棒が移動します。
初期の状態では、条件:「□」内の数字が1を記した位置にあります。 この状態だと、ヘッドより1つ左に移動したときのテープ数字は「1」だから、「1」ならば右に2つ移動で終ります。
ボタンを1回押せば横棒が1つ移動します。 条件:「□」内の数字が1を記しています。 ヘッドより1つ左に移動したときの数字は「1」だから、「1」ならば右に3つ移動で終ります。
ボタンを2回押せば横棒が2つ移動します。 同様に条件:「□」内の数字が1を記しています。 ヘッドより1つ左に移動したときの数字は「1」だから、「1」ならば「0」に書き替え、右に3つ移動して終了します。
左矢印により、左に1つ移動。 この時のヘッド数値は、「1」
条件ボタンの「□」内が1だと、ヘッドより1つ左に移動したときのテープ数字は「1」だから、「1」だと右に1つ移動し、その数字を0にします。
「□」内が空っぽだと、ヘッドより1つ左に移動したときの数字は空っぽではないから、ボタン右側の豚の鼻のような記号上に伸びる横線が左矢印に伸びているため、テープは左移動を繰り返し空っぽのテープ位置を見つけます。
3つ移動すれば空っぽのテープ位置があり、その位置に来れば右に1つ移動して、その位置の数字「1」を「0」に書き替えます。
豚の鼻のようなものは、条件を満たすまで指示された動作(この場合は左移動)を繰り返す命令です。
ちなみに、条件ボタンを「0」にすればどうなるでしょうか?
ヘッドより1つ左に移動したときの数字は0ではないから、繰り返しによって「0」を探し続ける無限ループに陥ります。 実際に試すと、「0」を探し続ける動作を行い、数秒して停止します。
左矢印が2つ有るから、テープが2つ移動したときの値は「0」です。
条件ボタンの「□」内が0だと「1」に書き替えられるから間違いです。 さらに繰り返し命令にて、他の0も1に変えてしまいます。(右に2回移動した数値0は1に書き替えられ、下段条件、数値1の時は右移動で残りの0も1に書き替え)
条件ボタンの「□」内が1だと「1」に書き替える指示は、テープの値「0」に対しては無意味で、繰り返し命令にても他の0も1に変えることは出来ません。
ボタンの「□」内を空っぽにします。
テープが2つ移動したときの値は「0」だから、ボタンの「□」内が空っぽにすれば条件が合いません。
ただし、繰り返し命令によって空っぽの部分を1に変える動作を行います。 下段条件、数値1の時は右移動。 移動後の数字は空っぽではなく0だからそのまま。 空っぽのテープを見つけるまで右移動を繰り返すが、次の数値も0だからそのまま。 右端の数値は1、さらに空っぽのテープを探す繰り返しを行うと思いきや、上段繰り返し指示の左に条件、数値1ならば空の丸(動作終了)
下段のボタンを変更します。
左矢印が2つ有るから、テープが2つ移動したときの値は「0」です。
下段0ボタンを1にすることで、条件より0の値は「1」に書き替えられます。
繰り返しにより0の時は1に書き替える動作を繰り返しますが、残りの数字はすべて「1」です。
この残りの1を「0」にしなくてはいけないので、下段条件ボタンの「□」内0を「1」にします。
上段0ボタンがあるから、下段ボタンの「□」内0を「1」にすることで、「1」ならば右移動、かつ「1」を「0」に書き替える動作を続けます。 最終空っぽのテープを見つけると終了。
**上段の「□」内0のボタンを□1にして、0のボタンを1にしても良いでしょう。**
この場合は、テープが2つ移動したときの値「0」を「1」に変更したボタンの影響で「1」に書き替えます。 □1に変更したボタンにて条件1を0に変える動作を繰り返す。 下段条件0の時は右に移動。  最終空っぽのテープを見つけると終了。
第2ステージ(解法はボタン操作を行った後のもの)
上段繰り返し命令にて左移動を繰り返す。 上段条件、テープが空の時は右移動して「0」に書き替える。(繰り返しで3コマ移動すると空っぽだから、下段を参照し、右に1つ移動して1を0に書き替える)
さらに下段参照にて右に1つ移動。 下段繰り返しにて、下段条件、「空っぽなら左移動」に合致するまで右移動。
右端の0の隣の空っぽまで移動すると条件に合致するから、テープは左に移動して、上段を参照しその位置の0を「1」に書き替え。
上段、「条件:1なら何もしない」に見合うまで左移動。
1つ左に移動すると条件に合致した1が有るから何もしない。
下段参照、1を「0」に書き替え。
下段参照、「条件:1ならば左移動」まで右移動を繰り返し。
テープ右端の数値は「1」だから条件に合致して1つ左移動。
上段参照、左移動した数値「0」を「1」に書き替え。
上段参照、さらに左移動して「空っぽ」の部分に「0」を書き込む。
上段、再生ボタンのすぐ右の「条件:空っぽならば1を書き込む」は、条件に満たないからそのまま。
上段、「1に書き替え」は、現テープ数値が1だから「1」を「1」に書き替える結果に。
上段、左に1つ移動。
上段、「条件:0ならば0を書き込む」は、左移動した数値は0だから同「0」に書き替える結果に。
下段、右に1つ移動。
下段、「条件:空っぽならば左に1つ移動」は、条件に満たない。
下段、0に書き替え(現テープ数値1を0に書き替え)
下段、「条件:空っぽならば1を書き込む」は、条件に満たない。
下段、2つの「条件:空っぽならば何もしない」は、条件に満たない。
上段、2つの「条件:空っぽならば何もしない」は、条件に満たない。
上段、左に1つ、右に1つ各移動。
上段、左に1つ、右に1つ各移動。
上段、2つの左矢印にて、左に2つ移動。
上段、「条件:0ならば空っぽならば???」条件同士が衝突し合って意味がわからない。
下段、「条件:空っぽならば0ならば???」に見合うまで右移動。 1つ右移動すると空のテープがある。
上段、空のテープに「1」を書き込む。
上段、右に1つ移動。
上段、「条件:空っぽの時は何もしない」は、条件に満たない。
上段、繰り返し。
上段、「条件:0ならば空っぽならば???」条件同士が衝突し合って意味がわからない。
下段、「条件:空っぽならば0ならば???」に見合うまで右移動。 2つ右移動すると空のテープがある。
上段、空のテープに「1」を書き込む。
上段、右に1つ移動。
上段、「条件:空っぽの時は何もしない」で終了。
上段、「条件:1の時は0を書き込む」は、条件に満たない。
上段、右に1つ移動
上段、「条件:空っぽの時は左1つ移動」は、条件に満たない。
上段、繰り返し
上段、「条件:1の時は0を書き込む」は、条件に満たない。
上段、右に1つ移動
上段、「条件:空っぽの時は左1つ移動」は、条件に満たない。
上段、繰り返し
上段、「条件:1の時は0を書き込む」は、この時点で合致。
下段、左に1つ移動して1に書き替え。
下段、左に1つ移動。
下段、「条件:0の時は動作を繰り返し」は、この時点でのテープは0だから条件に合致。
繰り返し動作にて数値が書き替えられて終了。
 完成