これは少し前の話ですが、2022年の春休み期間中に僕はNeosVRというメタバースプラットフォームによく行っていました。NeosVRの中に2月〜3月に開催されたMMC(Metaverse Maker Competition)というクリエイターのイベントがあります。このイベントはNeosVRで作品を作って競い合うという形です。
チューリング機械とは
全学期、ある科目でチューリング機械のことを勉強しました。ちょうど春休みの前、チューリング機械を設計するレポートがあって、NeosVRで実装してみたいと思いました。
単にいうとチューリング機械はアラン・チューリングが考察した計算を行う自動機械である。チューリング機械の構造は無限に長いテープがあって、そのテープにマスに分ける。機械でテープを読み込む・書き込むヘッドがある。一周の動作は、ヘッドが現在の位置のテープを読み込んで、状態遷移図により書き込む命令があれば書き込んで、テープを右か左のマスに移動します。状態遷移図で終了と定義されている状態まで辿り着けば終了となります。
あるプログラミング言語はチューリング機械のように計算できると「チューリング完全」と呼びます。NeosVR内にあるLogiXというプログラミング言語でチューリング機械を実装できるのでLogiXもチューリング完全です。
NeosVRで実装
自分で実装してみたチューリング機械の見た目は以上の画像通りです。中央の部分は編集できる状態遷移図です。上の部分はテープで、テープの上はヘッドです。左側は状態を追加する、入力を変更、初期状態を変更、状態をつなぐ、チューリング機械を起動・停止することができるコントロールパネルです。実装したときにNeosVRのツールなどに関しては初心者なのですごく勉強になりました。
展示している状態遷移図は01*0
パターンを確認するチューリング機械です。01*0
というのは最初に0
があり、それから任意の数の1
があって、最後に0
で止まる入力である。つまり010
、0110
、01110
などの入力は受理するが0111
や0120
などの01*0
パターン以外は拒否することです。
最後に
MMCに参加してみて、チューリング機械のこともNeosVRのことも色々勉強しました。あのときの睡眠時間も結構やばかったのですが楽しかったです。
残念ながら、受賞しませんでしたがいい経験になりました。今後もこのイベントに参加できればぜひより良い作品を頑張って作ります!