-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday02.py
More file actions
48 lines (36 loc) · 993 Bytes
/
day02.py
File metadata and controls
48 lines (36 loc) · 993 Bytes
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
_p1_map = {
'forward': lambda p, v: (p[0] + v, p[1]),
'down': lambda p, v: (p[0], p[1] + v),
'up': lambda p, v: (p[0], p[1] - v),
}
_p2_map = {
'down': lambda p, v: (p[0], p[1], p[2] + v),
'up': lambda p, v: (p[0], p[1], p[2] - v),
'forward': lambda p, v: (p[0] + v, p[1] + (p[2] * v), p[2]),
}
def parse(input):
ret = []
for line in input.strip().splitlines():
a, b = line.split(' ')
ret.append((a, int(b)))
return ret
def part1(input):
input = parse(input)
p = (0, 0)
for d, v in input:
p = _p1_map[d](p, v)
return p[0] * p[1]
def part2(input):
input = parse(input)
p = (0, 0, 0)
for d, v in input:
p = _p2_map[d](p, v)
return p[0] * p[1]
if __name__ == '__main__':
import sys
import utils
input = sys.stdin.read()
p1, t1 = utils.time(part1, input)
print(f'part1: {p1} ({t1:.20f})')
p2, t2 = utils.time(part2, input)
print(f'part2: {p2} ({t2:.20f})')