19 lines
645 B
Plaintext
19 lines
645 B
Plaintext
left = 1; right = -1; stay = 0;
|
|
cmp[s_] := ToExpression[StringSplit[s, ","]];
|
|
utm[rules_, initial_, head_] :=
|
|
Module[{tape = initial, rh = head, n = 1},
|
|
Clear[nxt];
|
|
nxt[state_, field_] :=
|
|
nxt[state, field] = Position[rules, {rules[[state, 5]], field, _, _, _}][[1, 1]];
|
|
n = Position[rules, {rules[[n, 1]], BitGet[tape, rh], _, _, _}][[1,1]];
|
|
While[rules[[n, 4]] != 0,
|
|
If[rules[[n, 3]] != BitGet[tape, rh],
|
|
If[rules[[n, 3]] == 1, tape = BitSet[tape, rh],
|
|
tape = BitClear[tape, rh]]];
|
|
rh = rh + rules[[n, 4]];
|
|
If[rh < 0, rh = 0; tape = 2*tape];
|
|
n = nxt[n, BitGet[tape, rh]];
|
|
]; {tape, rh}
|
|
];
|
|
];
|