私自身の Turing 疑似コードでは:
- 入力 A0B をテープ 2 にコピー
- 000010000 をテープ 3 に書き込みます
- テープ 3 の数字にテープ 2 の A を掛けます。
- Aの先頭から
- テープ 4 に 0 を書き込みます
- コピー番号 3 => 4
- テープ 3 で 1 回進む (3++)
- A が終了しない限り、ステップ 3 に進みます
- 回答をテープ 4 からテープ 3 に移動します
- テープ 2 の番号 B を減らす
- テープ 2 の B が 0 でない場合は、手順 2 に進みます。
- テープ 3 の答えをテープ 1 にコピーします
動作するチューリング コードは次のとおりです (テープはポインターのようなもので、小文字、入力テープは ですi
)。
# At the start for 2^3
# i: 000111011110000
# ^
_start_ -> *a = 0, start2
start2 [*i==0] -> i++, *a++ = 0, *b++ = 0, start4
start2 [*i==1] -> i++, *a++ = 1, start2
start4 [*i==0] -> *b-- = 0, b--, initc
start4 [*i==1] -> i++, *b++ = 1, start4
initc -> *c++ = 0, *c++ = 1, *c++ = 1, *c-- = 0, mult
# example
# i: 00011101111000
# ^
# a: 001110000
# ^
# b: 001111000
# ^
# c: 00011000
# ^
mult[*b==0]: lastcpy
mult[*b==1]: b--, *d++ = 0, *d++ = 1, rewa
rewa[*a==0]: a++, a++, multcpy
rewa[*a==1]: a--, rewa
multcpy[*c==1]: c++, multcpy2
multcpy[*c==0]: multcpy3
multcpy2[*a==0]: multcpy
multcpy2[*a==1]: *d++ = 1, multcpy2
multcpy3: *d-- = 0, *c = 0, cpydtoc
cpydtoc[*d==1]: d--, *c++ = 1, cpydtoc
cpydtoc[*d==0]: *c-- = 0, mult
lastcpy[*c==1]: *i++ = 1, c--, lastcpy
lastcpy[*c==0]: *i = 0, _finish_
# Should end with
# i: 00011101111011111111100
# ^
エラーがないか確認してください:)