2022/day02: complete!
parent
85107c66c3
commit
19b014b090
|
@ -0,0 +1,99 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
# opponent: a rock, b paper, c scissors
|
||||||
|
# ME : x rock , y paper, c scissors
|
||||||
|
# Score: 1 R 2 P 3 S
|
||||||
|
# + 0 lost 3 draw 6 won
|
||||||
|
# same: draw
|
||||||
|
# Rock over scissors
|
||||||
|
# Scissors over paper
|
||||||
|
# paper over rock
|
||||||
|
|
||||||
|
scores = {"X": 1, "Y": 2, "Z": 3}
|
||||||
|
|
||||||
|
plays = {
|
||||||
|
"A": "X",
|
||||||
|
"B": "Y",
|
||||||
|
"C": "Z",
|
||||||
|
"Z": "C",
|
||||||
|
"Y": "B",
|
||||||
|
"X": "A",
|
||||||
|
} # rock # paper # scissors
|
||||||
|
|
||||||
|
must = {"X": "lose", "Y": "draw", "Z": "win"}
|
||||||
|
|
||||||
|
|
||||||
|
def choose(opponent: str, ending: str) -> str:
|
||||||
|
"""
|
||||||
|
>>> choose("A", "X") # rock, must lose
|
||||||
|
"C"
|
||||||
|
"""
|
||||||
|
|
||||||
|
if ending == "Y": # draw
|
||||||
|
return plays[opponent]
|
||||||
|
|
||||||
|
if opponent == "A":
|
||||||
|
if ending == "X": # lose
|
||||||
|
return "Z"
|
||||||
|
else: # win
|
||||||
|
return "Y"
|
||||||
|
|
||||||
|
if opponent == "B":
|
||||||
|
if ending == "X":
|
||||||
|
return "X"
|
||||||
|
else:
|
||||||
|
return "Z"
|
||||||
|
|
||||||
|
if opponent == "C":
|
||||||
|
if ending == "X":
|
||||||
|
return "Y"
|
||||||
|
else:
|
||||||
|
return "X"
|
||||||
|
|
||||||
|
|
||||||
|
def get_score(play: str) -> int:
|
||||||
|
opponent = play[0]
|
||||||
|
us = play[2]
|
||||||
|
|
||||||
|
if plays[opponent] == us: # draw
|
||||||
|
return 3 + scores[us]
|
||||||
|
|
||||||
|
if us == "X": # rock
|
||||||
|
if opponent == "C":
|
||||||
|
return 6 + scores[us]
|
||||||
|
|
||||||
|
else: # loss
|
||||||
|
return scores[us]
|
||||||
|
|
||||||
|
if us == "Y": # paper
|
||||||
|
if opponent == "A": # rock
|
||||||
|
return 6 + scores[us]
|
||||||
|
|
||||||
|
else:
|
||||||
|
return scores[us]
|
||||||
|
|
||||||
|
if us == "Z": # scissors
|
||||||
|
if opponent == "B":
|
||||||
|
return 6 + scores[us]
|
||||||
|
|
||||||
|
else:
|
||||||
|
return scores[us]
|
||||||
|
|
||||||
|
|
||||||
|
def part1(strategy) -> int:
|
||||||
|
score: int = 0
|
||||||
|
|
||||||
|
for line in strategy:
|
||||||
|
score += get_score(line.strip())
|
||||||
|
|
||||||
|
return score
|
||||||
|
|
||||||
|
|
||||||
|
def part2(strategy) -> int:
|
||||||
|
score: int = 0
|
||||||
|
|
||||||
|
for line in strategy:
|
||||||
|
line = line.strip()
|
||||||
|
score += get_score("{0} {1}".format(line[0], choose(line[0], line[2])))
|
||||||
|
|
||||||
|
return score
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,15 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from day02 import *
|
||||||
|
|
||||||
|
|
||||||
|
def test_part1() -> None:
|
||||||
|
strategy = open("day02.txt")
|
||||||
|
assert part1(strategy) == 10595
|
||||||
|
strategy.close()
|
||||||
|
|
||||||
|
|
||||||
|
def test_part2() -> None:
|
||||||
|
strategy = open("day02.txt")
|
||||||
|
assert part2(strategy) == 9541
|
||||||
|
strategy.close()
|
Loading…
Reference in New Issue