AoC 2017 Day 25: Turing

Source: The Halting Problem

Part 1: Implement a Turing machine defined as such:

Begin in state A. Perform a diagnostic checksum after 6 steps.

In state A: If the current value is 0: - Write the value 1. - Move one slot to the right. - Continue with state B. If the current value is 1: - Write the value 0. - Move one slot to the left. - Continue with state B.

e>

As we did in part 1 of day 22, we’ll use a set to store the current state (store 1, if an index is not in the set, it’s 0). That gives us the ability to grow unbounded (so long as we have enough RAM).

Once you have that, actually running the Turing machine is pretty straight forward:

for tick in range(breakpoint):
    value = 1 if pointer in one_bits else 0

    if value and not transitions[state, value, 'value']:
        one_bits.remove(pointer)
    elif not value and transitions[state, value, 'value']:
        one_bits.add(pointer)

    pointer += transitions[state, value, 'offset']
    state = transitions[state, value, 'state']

print(len(one_bits))

It’s not the fastest thing in the world, but it works well enough:

$ python3 run-all.py day-25

day-25  python3 turing.py input.txt     79.73910212516785       2870

Since it’s the last day, there’s only one part. A fun year. Check out the index post for a list of this year’s posts.

Merry Christmas! ☃️