RosettaCodeData/Task/Universal-Turing-machine/Python/universal-turing-machine-2.py

25 lines
714 B
Python

def busy_beaver(beavers):
tape = dict()
pos = beaver = steps = 0
while True:
steps += 1
value = tape.get(pos, 0)
new_value, direction, next_beaver = beavers[beaver * 2 + value]
tape[pos] = int(new_value)
if next_beaver == 'H': return steps, sum(tape.values())
pos += 1 if direction == 'R' else -1
beaver = ord(next_beaver) - 65
rules = ['1RH not_used',
'1RB 1LB 1LA 1RH',
'1RB 1RH 0RC 1RB 1LC 1LA',
'1RB 1LB 1LA 0LC 1RH 1LD 1RD 0RA',
'1RB 1LC 1RC 1RB 1RD 0LE 1LA 1LD 1RH 0LA']
for beavers in rules:
beavers = beavers.split()
steps, ones = busy_beaver(beavers)
print(f'BB({len(beavers)//2}) = {steps:>10,} steps with {ones:>5,} ones')