diff --git a/2022-python/output/day_09.py b/2022-python/output/day_09.py new file mode 100644 index 0000000..2c1e2b7 --- /dev/null +++ b/2022-python/output/day_09.py @@ -0,0 +1,71 @@ +from output import DD, ints + + +def solve(data): + p12 = [] + for sl in [2, 10]: + seen = set([(0, 0)]) + snake = [(0, 0)] * sl + for line in data.splitlines(): + d = line[0] + for i in range(ints(line)[0]): + ns = [] + hd, *tls = snake + r, c = hd + hd = r + DD[d][0], c + DD[d][1] + ns.append(hd) + for tl in tls: + r, c = tl + match (r - hd[0], c - hd[1]): + case (2, -1): + tl = r - 1, c + 1 + case (-2, -1): + tl = r + 1, c + 1 + case (-2, 1): + tl = r + 1, c - 1 + case (2, 1): + tl = r - 1, c - 1 + case (1, 2): + tl = r - 1, c - 1 + case (-1, 2): + tl = r + 1, c - 1 + case (-1, -2): + tl = r + 1, c + 1 + case (1, -2): + tl = r - 1, c + 1 + case (0, 2): + tl = r, c - 1 + case (0, -2): + tl = r, c + 1 + case (2, 0): + tl = r - 1, c + case (-2, 0): + tl = r + 1, c + case (2, -2): + tl = r - 1, c + 1 + case (-2, -2): + tl = r + 1, c + 1 + case (-2, 2): + tl = r + 1, c - 1 + case (2, 2): + tl = r - 1, c - 1 + ns.append(tl) + hd = tl + snake = ns + seen.add(tl) + p12.append(len(seen)) + p1, p2 = p12 + return p1, p2 + + +if __name__ == "__main__": + with open("./input/09.txt", "r") as f: + inp = f.read().strip() + + p1, p2 = solve(inp) + + print(p1) + print(p2) + + assert p1 == 6212 + assert p2 == 2522