-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday02_rock_paper_scissors.py
62 lines (47 loc) · 1.66 KB
/
day02_rock_paper_scissors.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
#!/usr/bin/env python3
from enum import Enum
class Shape(Enum):
ROCK = 1
PAPPER = 2
SCISSORS = 3
def main(strategy: str) -> None:
score = 0
for turn in strategy.splitlines():
opponent, you = parse(turn)
score += outcome(opponent, you) + you.value
print("Part One:")
print(score)
score = 0
for turn in strategy.splitlines():
opponent, you = parse2(turn)
score += outcome(opponent, you) + you.value
print("Part Two:")
print(score)
def parse(turn: str) -> tuple[Shape, Shape]:
first, second = turn.split()
opponent = {"A": Shape.ROCK, "B": Shape.PAPPER, "C": Shape.SCISSORS}[first]
you = {"X": Shape.ROCK, "Y": Shape.PAPPER, "Z": Shape.SCISSORS}[second]
return opponent, you
def parse2(turn: str) -> tuple[Shape, Shape]:
first, second = turn.split()
opponent = {"A": Shape.ROCK, "B": Shape.PAPPER, "C": Shape.SCISSORS}[first]
you = [
{"X": Shape.SCISSORS, "Y": Shape.ROCK, "Z": Shape.PAPPER}[second],
{"X": Shape.ROCK, "Y": Shape.PAPPER, "Z": Shape.SCISSORS}[second],
{"X": Shape.PAPPER, "Y": Shape.SCISSORS, "Z": Shape.ROCK}[second],
][opponent.value - 1]
return opponent, you
def outcome(opponent: Shape, you: Shape) -> int:
if opponent == you:
return 3
return [
6 if you == Shape.PAPPER else 0, # opponent = Shape.ROCK
6 if you == Shape.SCISSORS else 0, # opponent = Shape.PAPPER
6 if you == Shape.ROCK else 0, # opponent = Shape.SCISSORS
][opponent.value - 1]
if __name__ == "__main__":
INPUT = """A Y
B X
C Z
"""
main(INPUT)