diff --git a/2022/day02.py b/2022/day02.py new file mode 100644 index 0000000..ff00e95 --- /dev/null +++ b/2022/day02.py @@ -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 diff --git a/2022/day02.txt b/2022/day02.txt new file mode 100644 index 0000000..6b75281 --- /dev/null +++ b/2022/day02.txt @@ -0,0 +1,2500 @@ +A Y +A Z +A X +B X +A Y +B Y +B Y +A X +A Z +A X +A X +A X +B X +B X +B X +B X +C Z +B Z +B Y +B X +A X +A Y +B X +B X +B X +B Z +B X +B X +B X +B Z +B Z +A X +A X +C X +B X +B X +B X +A X +B X +B X +A Z +B X +B X +B X +B Z +B X +A X +B X +B Z +B X +B X +B Z +A Z +B X +B X +B X +A X +C Z +A X +A X +C Y +A X +B X +B X +B X +A X +B X +B X +A X +C X +B Y +A Z +A Y +B Z +B Z +C X +B Y +A X +B Y +A Y +B X +C X +B X +B X +C X +B X +A X +B X +B X +A Y +A X +B X +B Z +A Z +B Z +B Y +A Y +B Z +B X +B X +B X +A Z +B X +B X +A X +A Y +B X +B Z +B X +B X +B Y +B X +C X +B Z +C X +B Z +B X +A Y +B X +A Z +C Y +B Z +B Y +B X +A X +A Y +A X +B Z +B Z +A Z +B X +B Z +B X +A Y +B Z +B X +B Z +C X +B X +B X +B X +B Z +B Y +C Z +A X +B Y +B X +B X +B Z +B X +B Z +B X +A X +B Z +B Z +B Z +B Y +B X +C Z +B X +B Y +A X +B X +B Z +A X +B X +B X +B Z +B X +B Z +B Y +B Y +B Z +A X +B X +B Y +A Y +A Y +C X +B Z +B X +B X +A Y +C Y +B X +A Z +A Y +B Z +B X +B X +B Z +A Y +B X +B Z +A Y +B Z +B X +B X +A X +B Z +A X +B X +B Z +A X +B X +A X +A X +B X +A Y +B Z +B X +B Y +B X +B X +A Y +A X +C X +A Z +B Y +B Z +C X +B X +B Z +B Z +B Z +B X +B X +C X +C X +C Y +A Z +B X +A X +A Z +A X +B Y +A Z +B Z +B X +B Y +B X +C Z +A Y +B X +A X +B Z +B Z +A Z +A X +A X +B X +B Y +B Y +B Z +B X +B Z +A X +B X +B X +A X +A Y +A Z +B Z +B X +B Z +B X +A X +C Z +B X +A Z +B X +B X +B Z +B X +B Z +B X +B X +A Z +B Z +B X +C X +B X +A X +B X +C X +B X +B X +B X +B X +B X +A X +A Z +A X +B Z +C Z +B X +A Z +C Y +B Z +B Z +B X +A Z +B X +A Z +B Y +B X +A X +B X +B X +B X +A Z +B X +C X +B Y +C X +B Y +B X +B X +B Z +A X +B X +A Y +A Y +A Y +A Y +A Y +B X +A X +B X +A Z +A Z +B Y +A Z +A Y +A X +B X +A Z +A X +A X +B Z +B Z +A Z +B Z +B X +B X +A X +B X +B X +B X +A X +B X +C Z +A Z +A X +A X +B X +B X +B X +B X +A X +A X +A X +B Y +B Y +B X +A X +A Y +A Y +B X +A X +B X +A X +A Z +B Z +B X +B X +A Y +C X +C X +A Y +B X +B Z +B X +B X +A Z +C X +C X +B X +B X +C X +B X +B X +B X +B Y +B X +A Y +B X +A Y +B Z +B X +B X +B X +B X +A X +B X +B X +B X +B X +B Y +B Y +B Z +A Y +B X +B Z +A X +B X +A X +A Y +B Y +B X +B X +C Z +B X +A Z +C Y +B Z +C Z +A X +B X +A X +A Z +A X +A X +A Y +B X +B X +B Y +A X +B Z +B Z +B X +B Y +C X +B X +B X +B X +A X +C X +A Y +B Z +B X +B Z +B Y +C Y +A X +C Z +A X +B X +A Y +B Z +C X +B Z +B X +A X +A Z +B X +C Y +A X +B X +B X +B Z +B Z +B X +A X +A X +B X +B Z +A X +A Z +A Z +A Y +A Z +B X +C Z +A Y +B X +B Z +B X +B X +B X +B Z +A X +B X +A X +B Y +B Y +B X +C Z +A X +A X +A X +B X +B X +B X +B X +A Z +B X +B X +B Y +A X +B Z +C X +A Y +B X +A Y +A Y +B X +C X +C X +B Z +B Z +B Z +B X +B Y +A Y +B Z +B X +C Z +B Z +A Z +A X +A Z +A X +B X +B Z +B X +B X +A Z +B Z +C Y +B Z +B X +B X +A X +A X +C X +B X +C Z +B Z +B X +A Y +B Z +B X +B X +A Z +A X +B X +A X +A X +A X +A Z +C Y +B X +B X +A X +B X +B Y +B Y +B X +B X +B X +C Z +B X +B X +C Z +B Z +A X +C Y +A X +A X +A X +A X +B X +A X +C Y +B Z +A X +B X +B Y +C X +B Z +A X +B X +B Y +B X +C Y +A X +B Z +B Y +B X +B X +B Z +B X +B Y +B Z +B X +C X +B Y +B X +B Z +B Z +B Z +B X +B X +B X +B Y +A Y +B X +B X +B X +B Z +B Y +C X +C X +C Z +B X +A X +B X +B Z +B Z +B Z +A Z +A Y +B X +A X +A Z +B Y +A X +B X +A Y +A X +B X +B Z +A X +A X +A Z +B X +B X +A X +B Y +B X +B Z +A Y +B X +A X +B X +B X +B X +A Y +B X +B X +B Z +C X +C Y +B X +A X +B Y +B X +B X +B Y +B X +B Z +B Y +C X +B Y +B X +C Y +A Z +C X +B X +B Z +A X +B X +B X +B X +B X +A Y +C Z +B X +B X +B Z +A Y +B X +B Y +A X +C X +B X +A Y +A X +B X +B X +B X +B Y +A X +C X +B X +A X +B X +B Z +C Z +A X +A X +B X +A X +C X +A X +B Z +B X +B X +B X +A Y +A Z +B X +C X +B Y +B Z +A Z +A Y +B Y +A Y +B X +B X +C X +B X +A X +B X +B Z +A Y +B Z +A X +B X +A Y +B X +B X +B X +B Z +B X +B X +A X +B X +B X +B X +B X +C X +A Y +A Z +B Z +A X +A Z +A X +B Z +B Z +B X +B X +B X +A X +B X +B Y +A X +B X +C X +A Z +B X +B X +C Z +B X +B Z +A Y +A X +A Y +A X +B X +B Y +B Z +B X +B X +B X +B Z +B Z +A X +A X +B X +B Z +A X +A Y +A Y +A X +B X +A Z +B X +A Y +B Z +A X +C X +B X +B X +A X +B X +C X +B Z +B X +B X +C X +A Y +B X +B X +B Z +B X +A Y +B Z +C Z +B Y +B X +A Y +B X +B X +B X +B X +C X +A Y +B X +B Z +B X +B X +C Z +A X +B X +A Y +A X +B X +B X +A X +A Z +C X +A X +A Y +A Y +B Z +A X +B Z +B X +B Y +A Z +A X +A X +A Y +C Z +B X +A Y +B Z +B X +B X +B Z +B X +A Z +C Z +B Z +A Z +B X +A X +B Z +A X +B X +B Z +B X +A X +B Y +A Z +A Z +B X +B Z +A Y +B Z +A Y +B X +C X +A Y +B Z +A X +B X +B X +C X +B Y +B Z +B Z +B X +A X +A X +B X +A X +C Y +A Y +A X +A Z +A X +A X +B X +B X +B X +B Y +C Y +A X +B X +B X +B X +B X +B X +C Y +A Z +B X +A X +A X +A Z +A Y +C X +A Z +B X +B X +B X +A X +B Z +B X +C Z +A Y +B X +A Y +B Y +B X +A Y +B Z +B X +B Z +B X +A Y +B Y +B Y +A X +B X +C Z +B Z +B Z +B X +A Z +C X +B Z +C Y +B X +A Y +A X +B X +A X +B Z +A Y +B Y +B Y +B X +C X +C X +A Y +A Z +B X +B X +B X +B X +C X +B X +C X +B X +B Z +A X +A X +B X +A Y +B Z +B X +A X +B X +B X +A Z +C X +B Z +C X +A X +B Z +C X +B X +B Z +A X +C X +A Y +A X +A X +A Y +B Y +B X +B X +B X +B Y +B X +A Y +B X +A X +B X +C X +B X +B X +B X +B X +B X +A X +C X +C Z +B X +B X +B Z +B Z +A X +B Y +B X +B X +A Y +B X +B Z +A X +A X +C X +B X +B X +C X +B X +B X +B X +A X +A X +C X +B X +B X +B Z +B Z +A Z +B X +A X +A X +B X +B Y +A X +B X +B X +A X +B X +B X +B X +B X +A Y +A X +B X +A X +B X +A Z +A Y +B X +B X +A Z +B Z +B X +B X +B X +B X +A X +B X +B X +B X +A Y +C Y +A X +B Z +A X +B X +B X +B X +B Y +C X +A X +B Z +B X +C X +A X +A X +A Y +B Z +B X +B X +B Z +C Z +B X +B Z +B X +A X +A Y +A Y +B Z +B X +C Y +B X +B Z +A Y +B Z +A Y +B Y +B X +C Z +B X +A X +A Z +B Z +C X +A Y +C X +A Y +B Y +B X +C X +A X +A Y +A Y +B X +A Z +A Z +A Z +B X +A Z +B Z +A X +B X +A Y +A Z +A X +B X +A Y +B X +B X +B Z +A X +B X +B Y +C Y +B Y +B X +C Y +A X +C Y +A Z +A Y +B Z +B X +A X +C X +B X +C Z +C Y +B Z +B X +C X +B Z +B X +C X +B Z +B Z +C X +B X +B Z +A X +A Y +C Y +B X +A Y +A Y +A Z +B X +B Z +A Y +B Y +A Z +B X +B Y +A Y +B Y +A X +A Y +B Z +A Y +B Z +B Z +B X +B X +C Z +A Y +A Y +B Y +B Z +B Z +A X +B X +A Y +C Z +B X +B Z +B X +B Z +B X +C X +A X +B Z +A X +B Z +C X +B X +A X +A X +A Y +B X +B Z +B X +A X +B Z +B Z +B Y +B Z +C Y +B X +B X +B X +A X +B X +C Z +B X +C Z +A X +B Y +B X +C Y +C X +B X +B X +B Z +B Z +B X +B X +B Z +B X +B Y +A X +B X +A X +C Z +B X +B Z +B X +B X +B X +A X +A X +A Y +B Z +C X +B X +C Y +A Y +B Y +B Y +A X +B Z +B X +A Y +B Z +B Z +A X +B Z +B Y +C X +C X +B X +B X +B Y +B Y +B Y +A X +B X +B X +A Y +B Z +A X +A Z +A Y +A Z +B Z +B Z +A Y +A X +A X +B X +B Z +A Y +B X +A Y +B X +B X +A Y +B X +B X +B Z +C X +A Y +B X +B X +C Y +B Y +B X +B X +B X +A X +B X +A Z +B X +A Z +B Z +A Y +B X +C X +B X +A X +A Z +B Z +B Z +B X +B X +C X +B X +B Z +B X +B Z +B X +B X +A Y +B X +B Y +B X +B X +B Y +B X +B Z +B X +B Z +A X +A Y +B Y +A X +B X +A X +B X +A X +A Y +B Y +B Y +B X +B X +B Z +A X +B X +A X +A X +A Y +B X +A Y +A X +A Y +B Y +B Z +B X +A X +B X +B X +A Y +A Z +B X +A Z +B X +B X +C Z +B Z +B Z +B Y +A Z +B Z +A Z +B Y +B X +C Z +A Z +B Z +A X +B X +B X +B X +C Y +C Z +B Z +C Z +B X +B X +B X +B X +B X +A X +A Z +B X +A X +B X +C Z +B Z +B X +A Z +A X +B X +A X +B X +A Y +B X +A X +A Y +C X +B X +C X +A Z +C Z +B X +C X +B Z +A X +B X +B X +B Z +A Y +A Z +B Z +B X +A X +C Y +B Z +B Z +B X +B X +A X +B X +A Y +B X +B Y +A Z +B X +B X +A Z +A X +B Y +B Z +B X +B X +C X +B Z +A X +B X +A Z +B X +B X +B X +B X +B X +B X +B Z +A X +B X +B X +B X +B X +B Z +B Z +A Y +B X +C Y +B Z +B Z +A Z +B Z +C Y +B X +B Y +A X +A X +A Z +B X +B Y +C X +B Z +B X +B X +B X +B Z +B X +B X +C Y +C X +A X +B X +B Y +B X +B X +A Y +A X +B X +A X +B X +A Z +B X +C Y +C Y +A Y +B Z +C Y +C Y +C X +C Y +C Z +C X +B X +B X +B X +B Y +B X +A Y +C Y +B X +B X +A Z +B X +B X +B X +C Z +B Y +A Z +C Z +B X +B Z +A X +B X +B Z +B X +B X +B Z +A Y +B Z +A X +A X +B X +B X +B X +B X +A Y +A Z +B X +B Z +B Z +B Z +B X +B X +B Y +A Y +B X +C Y +B Z +B Y +B Z +B X +C Y +B Z +A X +B X +A X +B Z +B Y +B X +B Z +C Y +A Y +B X +C Y +C Y +A X +A X +A X +A X +B X +B X +A Y +A Z +B Y +B Z +B X +B X +B X +B Y +B Y +A X +B Y +B X +B Z +B X +B Z +B X +A X +B X +B X +B Y +B X +B Z +B Z +B X +B X +B X +B X +B Z +B X +B Z +A Z +B X +B X +B X +B Y +A X +B Z +A X +C Y +B Y +B Z +C X +C X +B Z +B Z +C X +A X +B X +A X +B X +B X +A Z +B X +A Y +A X +A X +B Y +A Y +A Y +C X +A X +B X +B Y +B Y +A Y +A X +C Y +A Y +B Z +B X +B Y +B Z +A Y +A Y +B Z +A X +C X +A Z +B X +B X +B X +B X +A X +A Y +B X +B X +B Z +A Y +A Y +C Z +B Z +B Y +A Y +A X +C X +A Y +B X +C X +A X +A Z +B X +A X +B X +B Z +C X +B X +A Y +B X +B Z +B X +B X +B X +C X +B X +C Y +B Z +B Z +B X +B X +B Z +C X +B X +B X +A Z +B X +A Y +B X +B Y +B Z +A X +A Z +A X +B X +B Z +B Z +B X +A Y +B Z +B X +C Y +A X +A Y +A Y +B Z +B X +A X +A Y +C X +A Y +A X +B X +B X +A X +C X +B Z +A X +B Y +B X +A X +C Z +C X +B Z +A X +B X +B Y +B X +B X +A Y +B Y +A X +A X +A Z +B X +A Z +A X +B X +A X +B Z +A X +A X +A X +B X +A Y +B X +B Z +C Z +B X +A X +B X +C Z +B X +B Z +A X +C X +B X +B X +A X +B X +B Z +A X +C X +B Z +B X +B X +B X +B X +B X +A Y +C Y +B Z +C Z +B X +A X +A X +A Y +B X +B X +C Y +B X +C Z +A X +B X +A Y +B X +B X +A X +C X +B X +C Y +B X +C Y +A X +B X +B Y +C Y +B Z +B X +A X +B X +B X +B Y +A X +B X +A Z +A Y +A X +A Z +B X +A Y +C Y +B Z +C Y +B X +B X +A Y +C X +C Z +B Z +B X +B X +A Y +B X +B Y +A X +A X +B X +B Z +A Y +A Y +A Y +B X +B X +C X +B Y +B X +A Y +A X +C X +B X +B Z +A Z +B Z +A Y +B Z +A X +B X +B X +B X +B Y +C Z +B Y +B X +A X +B X +A X +A Z +B Z +B X +B X +B X +C X +C Z +B Z +A X +B X +B X +A Y +B X +B Z +A X +B X +A X +A X +C Y +B Z +A X +A X +B Y +B X +A Y +B Y +C X +B Z +A X +A Z +B X +B X +A X +B X +A Y +A X +C X +B X +A X +C X +B Z +B X +A X +A Z +B X +B X +B Z +B X +B Z +C X +B Z +A X +A X +B X +B X +B Y +B X +B X +B Z +A Y +A X +C X +A X +B X +A Z +B X +A X +A X +B X +A X +B X +B X +A Y +A Y +A X +B X +B Z +C X +A X +B X +B X +B Z +B X +B X +A Z +B Z +B Z +B X +B Y +C X +B Z +A X +B X +B X +B Z +A Y +B X +B X +B X +B X +B X +C X +C Y +A Z +B X +C Y +A Y +C X +B X +B X +B Z +B X +B X +A X +A X +A Z +C Y +B X +B X +A Y +B Z +B Z +A X +A Z +C X +B X +B X +B X +B X +A X +C X +B Z +B X +A X +A X +A Y +B X +B X +A Z +C X +B X +A X +B Z +A X +B Y +B X +B X +A Y +C Y +B Z +A X +A Z +A Y +C Y +B X +C X +B X +B Y +B X +B Z +A X +C Y +A Y +B Z +B X +A X +C Z +B X +B Z +A X +C Y +B Y +B X +B X +A Y +B X +B Z +B X +B Z +B X +B Z +A Y +A X +B X +B X +A Y +C X +A X +C X +B X +B X +B X +A X +B Z +B Z +C Z +B Z +A X +A X +B Z +C X +A Z +A Y +B Y +B X +A X +A Y +A X +A Z +B X +B X +B Z +B Z +A Y +B X +B X +B Z +B X +A X +C X +B X +B X +B Y +A X +B X +B X +C Z +B X +B Z +B X +B Y +B X +B X +A X +A Y +A Y +B X +A X +A Z +B Z +B Z +B X +B X +B Z +B X +A Z +B X +A X +C X +B X +B X +B Z +B X +A X +B Z +B X +B Z +C Y +B X +B X +B X +B Z +C X +B X +B X +B Y +B Z +B X +C Y +A Y +C X +A X +B X +A X +B Z +B X +B X +A Y +C Z +A X +B Y +A X +B Z +B X +C Z +B X +C Z +A X +B X +A X +B X +A Y +B X +B Z +B X +B Z +C Z +B X +B X +A Z +A X +A X +B X +A X +B X +B X +B X +B X +A X +B Z +B X +A X +B Z +C Y +C Z +A X +B X +B X +B Z +B Z +A X +A Y +B X +A Y +B X +B X +C X +B Z +B Y +B Z +B Z +A Y +C X +B Y +B X +B X +A Z +B X +B Y +C X +B Y +C Y +B X +B X +C Y +A Z +C X +B X +C X +A Y +B X +C Z +B Z +B X +B Y +A Y +A X +B X +C Y +C X +A X +B X +B X +A X +B X +B X +C X +C Y +A Z +C X +A X +C X +B X +A Y +B X +A Y +C X +B X +C Z +C X +B Z +B X +B X +A X +A X +A Y +B Y +B Y +A Y +C Z +A Y +A X +B Z +B X +B X +C X +B X +C X +A Y +B Z +B X +A Y +A Y +C X +A Y +B Z +B Z +A X +B X +A Y +B Y +B X +A Z +B X +B X +B Z +C X +B X +C X +B X +B X +C X +A X +A Y +B X +A Y +C Z +C X +A Z +B X +B X +B X +A X +B X +B Y +B X +B Z +B X +A Y +B X +B X +B X +B X +B Y +B Y +B Z +C X +A Y +C X +B Y +B X +B Y +B X +A X +B Z +B Z +B X +A Z +C X +A X +B Z +B Y +A Y +B X +B X +B X +A X +B X +A Y +A X +B X +B Z +B X +A X +A Y +B X +B X +A X +B Z +A Z +A X +A Y +C X +A Z +B X +B X +A X +B Z +B Z +A X +A Y +B X +B Z +B X +A Y +B Y +A Y +B X +B X +A X +B X +A X +B X +C Z +A X +B X +C Z +A X +A X +B X +A X +A X +C Z +B Z +B X +B Z +A X +B Z +B X +B X +B X +A Z +B X +B X +B Z +A X +A Y +B X +A X +C X +A Y +A X +B X +B X +B Y +A Y +B X +A Y +A Z +B Z +B Z +B Z +B X +B X +A Y +A Z +B X +B X +B X +B X +B X +A Z +A Z +B X +B X +B X +B X +A X +B X +A X +B X +B Z +C X +A X +B X +C Z +B X +B X +B X +A X +A Z +B Z +C X +A X +B X +C X +B X +A X +C Z +A Z +A Y +B X +C X +B X +C X +B X +B Y +B Z +A X +B X +B X +A X +A Z +B Z diff --git a/2022/day02_test.py b/2022/day02_test.py new file mode 100644 index 0000000..a89dbb9 --- /dev/null +++ b/2022/day02_test.py @@ -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()