-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday02.py
executable file
·87 lines (65 loc) · 1.34 KB
/
day02.py
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
SHAPES = {
"A": "rock",
"B": "paper",
"C": "scissors",
"X": "rock",
"Y": "paper",
"Z": "scissors",
}
SHAPE_SCORES = {
"rock": 1,
"paper": 2,
"scissors": 3,
}
SHAPE_DEFEATS = {
"rock": "scissors",
"paper": "rock",
"scissors": "paper",
}
OUTCOMES = {
"X": "lose",
"Y": "draw",
"Z": "win",
}
def part1(input: str) -> int:
lines = input.splitlines()
score = 0
for line in lines:
[opp, me] = line.split()
opp = SHAPES[opp]
me = SHAPES[me]
score += SHAPE_SCORES[me]
if opp == me:
score += 3
if SHAPE_DEFEATS[me] == opp:
score += 6
return score
def part2(input: str) -> int:
lines = input.splitlines()
score = 0
for line in lines:
[opp, me] = line.split()
opp = SHAPES[opp]
outcome = OUTCOMES[me]
match outcome:
case "lose":
me = SHAPE_DEFEATS[opp]
case "draw":
score += 3
me = opp
case "win":
score += 6
me = SHAPE_DEFEATS[SHAPE_DEFEATS[opp]]
case _:
pass
score += SHAPE_SCORES[me]
return score
TEST_INPUT = """A Y
B X
C Z"""
PART1_TESTS = [
(TEST_INPUT, 15)
]
PART2_TESTS = [
(TEST_INPUT, 12)
]