Something went wrong. Try again.
Code for the Advent of Code event
aoc advent-of-code
Something went wrong. Try again.
852 B · 39 lines
Python
at rust
12345678910111213141516171819202122232425262728293031323334353637383940#!/usr/bin/env python
import sysimport argparseimport refrom itertools import batchedfrom z3 import *
parser = argparse.ArgumentParser()parser.add_argument('infile', nargs='?', type=argparse.FileType('r'), default=sys.stdin)args = parser.parse_args()input = args.infile.read()machines = list(batched([int(s) for s in re.findall(r'\d+', input)], 6))
A_COST = 3B_COST = 1PART2_DIFF = 10_000_000_000_000
def solve(machine): ax, ay, bx, by, gx, gy = machine gx += PART2_DIFF gy += PART2_DIFF a, b = Ints('a b') s = Solver() s.add(a * ax + b * bx == gx, a * ay + b * by == gy) c = s.check() if c == unsat: return None m = s.model() return m[a].as_long() * A_COST + m[b].as_long()
part2 = 0
for machine in machines: r = solve(machine) if r is not None: part2 += r
print(part2)