aboutsummaryrefslogtreecommitdiff
path: root/2022/09/solve.py
blob: a4b3c3f3fa8bd51457412a894602c72cc9be9ccb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
data = [dat.split(" ") for dat in open("input").readlines() if dat != '']

def solve(n):
    knots = [[0,0] for i in range(n)]
    tails = set()
    for line in data:
        direction = line[0]
        amount = int(line[1])

        for i in range(amount):
            head = knots[0]
            head[0 if direction == "U" or direction == "D" else 1] += 1 if direction == "R" or direction == "U" else -1

            for knot in range(len(knots)-1):
                head, tail = knots[knot], knots[knot + 1]
                xd, yd = head[0]-tail[0], head[1]-tail[1]

                if abs(yd) > 1:
                    tail[1] += 1 if yd > 0 else -1
                    if abs(xd) > 0:
                        tail[0] += 1 if xd > 0 else -1
                elif abs(xd) > 1:
                    tail[0] += 1 if xd > 0 else -1
                    if abs(yd) > 0:
                        tail[1] += 1 if yd > 0 else -1

            tails.add(tuple(tail))

    return len(tails)

print(f"Part 1: {solve(2)}")
print(f"Part 2: {solve(10)}")