diff options
Diffstat (limited to 'day24.py')
-rw-r--r-- | day24.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/day24.py b/day24.py new file mode 100644 index 0000000..1fad620 --- /dev/null +++ b/day24.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +with open('day24.txt') as data: + program = [tuple(line.strip().split()) for line in data] + params = [] + for i in range(0, 18 * 14, 18): + a = int(program[i+4][-1]) + b = int(program[i+5][-1]) + c = int(program[i+15][-1]) + params.append((a, b, c)) + + +def f(params, z, w): + a, b, c = params + if z % 26 + b != w: + z = z//a*26 + w + c + else: + z = z//a + return z + +zs = {0: [0, 0]} +for i, p in enumerate(params): + new_zs = {} + for z, inp in zs.items(): + for w in range(1, 10): + new_z = f(p, z, w) + if p[0] == 1 or (p[0] == 26 and new_z < z): + if new_z not in new_zs: + new_zs[new_z] = [inp[0]*10+w, inp[1]*10+w] + else: + new_zs[new_z][0] = min(new_zs[new_z][0], inp[0]*10+w) + new_zs[new_z][1] = max(new_zs[new_z][1], inp[1]*10+w) + print(f"Digit: {i+1} tracked values of z: {len(new_zs)}") + zs = new_zs +print(f'best valid values: {zs[0]}') + |