From a77ad30e106b0823a416e49a9566f5b828c537df Mon Sep 17 00:00:00 2001 From: Peery Date: Fri, 2 Dec 2022 14:56:01 +0100 Subject: [PATCH] Day 2 (Puzzle 1) - Rock, Paper, Scissor Successfully finished the first puzzle in which rock, paper scissor had to be evaluated into points and summed up. I wonder if there is a more elegant way of checking for wins vs losses. --- entities/elf.py | 30 + input/day2/example_guide.lst | 3 + input/day2/input.lst | 2500 +++++++++++++++++++++++++++ main.py | 28 +- main_day1.py | 14 + rockpaperscissor/__init__.py | 0 rockpaperscissor/file/__init__.py | 0 rockpaperscissor/file/guide_list.py | 66 + 8 files changed, 2630 insertions(+), 11 deletions(-) create mode 100644 input/day2/example_guide.lst create mode 100644 input/day2/input.lst create mode 100644 main_day1.py create mode 100644 rockpaperscissor/__init__.py create mode 100644 rockpaperscissor/file/__init__.py create mode 100644 rockpaperscissor/file/guide_list.py diff --git a/entities/elf.py b/entities/elf.py index 513dc72..63d6909 100644 --- a/entities/elf.py +++ b/entities/elf.py @@ -1,5 +1,8 @@ +from typing import Tuple + from entities.items.item import Item from entities.items.food import Food +from rockpaperscissor.file.guide_list import RPS class Elf: @@ -45,3 +48,30 @@ class Elf: def get_inventory_calories(self) -> int: return sum([x.calorie_value for x in list(filter(lambda x: isinstance(x, Food), self.get_inventory()))]) + + def evaluate_RPS_round(self, other: str, own: str) -> Tuple[bool, int]: + """ + Evaluates a rock paper scissor round according to day 2 puzzle 1. + :param other: What the opponent played + :param own: what you played + :return: + """ + round_score = None + was_win = None + if other == own: + round_score = RPS.DRAW_SCORE + else: + if (other == RPS.PAPER and own == RPS.ROCK) or \ + (other == RPS.SCISSOR and own == RPS.PAPER) or \ + (other == RPS.ROCK and own == RPS.SCISSOR): + round_score = RPS.LOSS_SCORE + was_win = False + elif (other == RPS.PAPER and own == RPS.SCISSOR) or \ + (other == RPS.SCISSOR and own == RPS.ROCK) or \ + (other == RPS.ROCK and own == RPS.PAPER): + round_score = RPS.WIN_SCORE + was_win = True + else: + raise Exception(f"Something went terribly wrong! Other: {other} Own: {own}") + + return was_win, round_score + RPS.RPS_SHAPE_TO_SCORE[own] diff --git a/input/day2/example_guide.lst b/input/day2/example_guide.lst new file mode 100644 index 0000000..25097e8 --- /dev/null +++ b/input/day2/example_guide.lst @@ -0,0 +1,3 @@ +A Y +B X +C Z \ No newline at end of file diff --git a/input/day2/input.lst b/input/day2/input.lst new file mode 100644 index 0000000..b955ddb --- /dev/null +++ b/input/day2/input.lst @@ -0,0 +1,2500 @@ +A Z +A Z +A Z +B Z +C X +A Z +A Z +C Y +A Z +A Y +B Y +A Z +C X +A Z +A Z +A Z +A Z +A Y +A Z +A Z +C Y +C X +C X +C X +A Z +A Z +B Y +A Z +A Z +C Z +B Z +A Y +A Z +B Y +A Z +B Y +A X +B Z +A Z +A Z +A Z +C X +C X +A X +A Z +A Z +C X +A Z +B Y +A Z +B Z +A Z +A Z +B Z +B Z +C Y +B Z +A X +B Z +A Z +B Y +A Z +B Z +C X +A Z +B Y +B Z +A Z +B Y +C X +B Y +A Z +A Z +A Z +B Y +A Z +A Z +B Y +B Z +C Z +A X +A Z +A Z +C Z +C X +A Z +C X +A Z +A X +A Z +A Z +A Z +B X +B Y +A Z +A Z +A Z +C Y +B Y +C X +C X +A Z +A Z +A Z +A X +C X +B Z +C X +C X +A Z +A Z +A Z +A Z +B Z +A Y +A Y +C X +A Y +C X +B Y +A Z +C Z +A Z +B Y +A Z +C X +B X +A Y +C X +A Z +A Z +A Y +B Z +C X +C X +C X +B Y +A Z +A Z +B Y +A Z +B Z +C X +C Z +A Z +C X +B Z +A Z +B Y +C X +A Y +B Y +C X +C X +A Z +A Y +A Z +A Z +A Z +A Y +C X +A Z +A Z +B Z +A Z +B Z +A Z +C Z +C Z +A Z +A Z +B Z +A Z +B Z +A Z +B Z +B Y +B Y +B Z +B Y +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +C X +A Z +A Z +C Y +A Z +C Y +B Y +C X +B Z +A Z +A Z +C X +A Z +B Y +A Z +A Z +A Z +B Z +A Z +B Y +A Z +B Y +A Z +A Z +C Z +A Z +C X +C Y +C X +C Y +C X +A Z +B Z +A Z +A Z +A Z +A Z +A Z +B Y +A Z +C X +C X +A Z +A Z +C Z +C Z +A Z +A Z +A Z +C X +A Z +A Z +A Z +A Y +A Z +C X +A Z +A Z +A Z +C X +C X +A Z +C Y +A X +A Z +A Z +A Y +B Z +A Z +A Z +A Z +C X +A Z +A Z +A Z +B Z +B Z +A Y +B Z +C X +B Y +A Z +A Z +A Z +A Z +A Z +A Z +B Z +C X +A Z +A Y +A Z +B Y +B Z +C Z +A Z +A Y +A Z +B Z +A Y +C X +A Z +A Y +A Z +C Y +A Z +A Z +B Y +C X +A Z +A Z +A X +A Z +C X +A Z +B Y +A Z +C X +A Z +B Y +A Z +C Y +B Z +C X +A Z +C X +B Y +A Z +C X +A Z +B Y +A Z +A Z +C Z +A Z +A Y +A Z +A Z +C X +A Y +A Z +B Z +A Z +A Y +C X +A Z +B Y +A Y +A Z +A Z +A Z +A Z +A Z +A Z +B Z +B Y +B X +C Y +B X +A Z +A Y +C X +A Z +A Z +C X +C Y +A Y +A Z +C X +B Y +B Y +C X +A Z +C Y +A Z +A Z +A Z +A Z +B X +A Z +A X +B Z +C Z +A Z +A Z +A Y +A Z +A Y +A Z +A Z +B Y +A Z +A Z +A Z +C X +A Z +A Z +A Z +B Z +A Z +A Z +A Z +A Z +A Z +B Z +A Z +A Z +C X +A Z +A Z +A Z +A Z +A Y +A Z +A Z +C Z +A Z +A Y +B Y +B Z +A Z +B Y +B Z +A Z +C X +A Z +B X +A Z +A Z +A Y +A Z +B X +B Z +A Z +B Z +A Y +A Z +A Z +A Z +B Y +A Z +B Z +A Z +B Z +A Z +A Y +A Z +B Z +A Z +C X +C X +A Z +A Z +B Z +A Z +A Z +C X +A Z +A X +A Z +A X +C X +A Y +C Y +B Y +A Z +A Y +A X +A Z +A Y +A Z +A Z +A Z +C X +B Z +A Z +B Y +A Z +A Y +A Z +A Z +B Z +C X +A Z +A Z +A Y +C X +C Y +B Z +A Z +A Z +B Z +C X +A Z +A Z +A Z +C Y +A Y +A Z +B Z +B Z +A Z +B Z +A X +A Z +B Z +A Z +A Z +B Y +A Z +A Y +B Y +A Z +B Z +C X +C Y +A Z +B Z +C X +A Z +B X +A Z +A Z +C X +A Z +A Y +B Z +B Y +A Z +A Y +C Y +A Z +C X +B Z +A X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Y +A Z +A Z +C X +B Y +B Z +C X +C X +C X +A Z +A Z +B Z +B Y +A Z +A Z +B Y +B Y +A Y +A Y +A X +A Y +B Y +A Y +C X +A Z +A Z +A Z +A Y +B Y +A Z +C Y +B Z +C X +A Y +A Z +C Z +A Z +B Z +C X +B Z +C X +B Z +B Y +B Y +C X +A Z +A Z +B Z +B Z +B Z +A Z +A Z +A Z +A Z +A Z +C X +C X +C Y +B X +C X +A Z +A Z +A Z +A Z +A Z +A X +A Z +C X +A Z +C Z +A Z +C X +C Z +A Z +A Z +A Y +B Z +A X +A Z +A Z +A Z +C X +B Y +A Z +B Y +A Z +B Y +A Z +C X +A Z +C X +A Z +A Z +A Z +A Z +A Z +B X +B Y +C X +C X +A Z +C X +A Z +A Z +A Z +A Y +A Z +A Y +A Z +A Z +A Z +C Y +A Z +A Z +B Z +B Y +C X +A Y +A Z +B Z +A Z +A Z +A Z +B Y +C Z +A Y +C Y +A X +A X +B Z +A Y +C X +C X +B Z +A Z +B Z +A Z +A Z +A Y +B Z +C Y +A Z +A Z +A Z +C X +B Y +A X +A Z +C X +A Z +B Z +B Y +C X +B Y +A X +A Z +A Z +A Z +A Y +A Z +A Z +A Y +A Y +A Y +A X +A Z +A Z +B Z +A Y +A Z +C X +C X +A Z +A Z +B Z +B Y +A Z +A Z +C X +A Y +C X +B Z +A Z +A Z +A Z +A Y +A X +C Y +C X +C X +A Z +A Y +A Z +A Z +A Z +C X +A Z +A Z +B Z +C X +C X +B Z +B Z +C X +A Z +B X +A Z +B Z +A Y +A Z +A Z +C X +A Z +C Z +A Z +B Z +C X +A Z +B Y +A Y +A Z +A Z +B X +C X +B Z +C X +C X +C Y +B Z +C X +A Y +C X +A Z +A Z +A Z +A Y +A Z +C X +C Y +A Z +A Z +B Z +A Z +B Y +A X +A X +B Z +C X +B Y +A Z +C X +A Z +B Z +A Z +B Y +B Y +A X +B Y +A Z +A X +A Z +C X +A Z +A Z +B Y +C Y +A X +A Z +C Y +C X +A Z +A Z +A Z +A Y +A Z +C X +A Z +B Y +A Z +B Z +B Z +C X +B Y +A Z +C Y +A Y +A Z +A Z +C X +A Z +A Z +A Z +A Z +B Y +B Z +A Z +A Z +C Y +A Z +A Z +A Z +A Z +A Y +A Z +A Z +C Y +B Y +B Z +A Z +B Z +A Z +B Z +A Z +A Z +A Y +A Z +A Z +B Z +C Y +A Z +B Z +A X +C X +C X +A Z +A Z +A Z +A Z +A Z +C X +A Z +C X +A Z +B Y +A Z +C Y +A Y +B Z +C X +A Y +A Z +A Y +A Z +B Z +B Y +A Y +B Z +A Z +A Z +C Z +C Z +A Y +A Z +A Z +C X +A Z +A X +C Y +C X +A Z +A Z +B Y +B Z +C Y +A Z +B Z +A Z +C Z +A Z +A Y +B Y +C X +A Z +A Z +A Z +C X +A Z +A Y +A Z +A Z +B Z +C X +C X +C X +A Z +A Z +A Z +C X +A Z +A Z +A Z +A X +A Z +C X +C X +B Z +A Z +A Z +A Z +B Y +A Z +C X +A X +B Z +C X +A Z +C X +A Y +A Z +A Z +A Y +A Z +A Y +A X +C X +A Z +A Y +B Y +A Z +A Y +C Z +B Y +A Z +A Z +A Y +A Z +C X +A Z +B Y +B Z +B Z +A Z +A Z +A Z +C X +A Z +B Y +B Y +A Z +A Y +C X +A Z +C X +A Z +C X +C X +A Y +B Z +A Z +A Z +A Z +A Y +A X +B Y +A Z +B Z +B Y +C Y +C X +C Y +A Z +B Z +A Z +A Y +B X +C Z +A X +A Z +A Z +A Z +A Y +A Y +A Z +A Y +C X +A Z +A Y +C X +A Z +A Z +C Y +A Z +B Z +A Y +B Z +B X +B Z +C X +A Z +A Z +C X +A Z +A Z +C X +B Z +B Z +B Z +A Z +A Z +B Y +A Z +A Z +C Z +C Z +B Z +A Z +B Y +A Z +A Z +C X +B Z +A Z +A Z +A Z +C Y +B Y +C X +A Z +A Z +A Z +A Y +A Z +C X +A Z +C X +A Z +A Z +C Y +C X +C X +C X +C X +C X +B Z +B Z +B Y +B Y +C Z +A Z +B Z +A Z +A X +A Z +A Z +A Z +C X +A Z +C X +A Z +A Z +C X +C X +B Y +A Z +C Y +A Z +A Y +C Y +B Z +B Y +C X +A Z +C Y +A Z +A Z +A Z +B Y +C X +B Z +B Z +C X +B Y +B Z +A Z +C X +A Z +B Y +B Z +A Y +A Z +A Z +A Z +A Z +C Y +A Z +C Y +A Z +B Y +C X +B Z +A Z +A Z +B Z +C X +B Z +A Z +A Z +A X +B Y +A Z +A Z +A Z +A Z +A Y +B Z +A Z +A Z +A Z +B Z +C Y +C X +C X +B Z +A Z +B Z +C X +A Y +C X +B Y +B Z +C Y +B Y +B Y +A Y +C Y +A Z +A Z +B Z +B Z +A X +A Z +A Z +B Z +A Z +B Z +A X +A Z +A Y +A Y +A Z +B Z +A Z +B Z +A Z +B Z +C X +A Z +A Z +C X +A Z +A Z +A Z +C X +B Y +A X +B Z +B Z +C Y +A Z +A Z +C X +B Y +C X +A Z +A X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +B Z +B Z +C X +A Y +C Z +A Y +A Z +C Y +A Z +A Z +A Y +A Z +C X +C Z +A Z +A Y +A Z +A X +A Y +A Z +C X +B Z +A Z +B Z +C Y +C X +A Z +A Z +A X +A Z +B Z +C X +A Z +B Y +A Z +A X +A Z +B Z +A Z +A Z +C X +B Z +B X +A Z +A Z +C Z +A Z +A Z +A Y +B Z +A Z +C X +B Z +A Z +C Y +A Z +B Z +B Z +A Z +A Z +C X +B Z +C Y +A Y +A Y +B Z +A Z +A Z +C Z +B Z +A Y +A Y +C Z +C Z +A Z +B Z +B Y +A Z +B Y +A Z +A Z +A Z +C Y +A Y +A Z +A Z +A Z +A Z +C Z +A Z +B Y +A Z +B Z +C Y +A Z +B Y +B Z +A Z +A Y +A Z +A Z +B Z +A Z +A Z +A Z +C Z +B Z +C X +B Z +A Z +A Z +A Y +A Z +A Z +A Z +A Z +C Y +A Z +A Z +A Z +A X +A Y +B Y +C X +A Z +A Z +B Y +A Z +C X +A Y +A Z +A Z +C X +A X +A Z +A Z +A Z +B Y +B Z +A X +A Z +C X +A Z +C X +B Z +B Y +A Z +B Y +A Y +A Z +A Y +A Z +B Y +C X +B X +B Y +C X +A Z +A Z +A Y +A Z +A Y +B Z +B Y +B Y +A Y +A X +A Z +C X +A Z +B X +A Z +A Z +C X +B Y +B Z +B Z +B Y +B Z +A Y +C X +C Z +A Z +A Y +B Y +B Y +A Z +A Y +C Y +B Y +B Z +A Z +A Y +A Z +B Z +A Z +A Z +A Z +A Z +B Z +A Y +C X +A Z +A Z +B Y +A Z +B Y +B Z +A Z +C X +A Z +C X +B Y +A Z +B Z +C X +A Z +A Z +A Z +C X +C X +A Z +A Z +A Z +B Y +A Z +A Z +A Z +A Z +A Z +A Y +B Z +C Y +A Y +C X +A Z +A Z +B Y +B X +A Z +C Z +A Z +A Y +A Z +A X +A Z +A Z +A Z +C Z +C X +C X +B Y +C X +C X +B Y +C Z +C X +C X +A Y +A Z +C X +C Z +B Y +A Z +C X +C X +A Z +A Z +A Z +A Y +A Z +A Y +B Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +C X +C X +C X +A Z +A Z +B Z +A Y +A Z +A Z +B Z +A Z +A Z +A Z +A Z +A Z +C X +C X +A Z +A Z +C X +C Z +C Z +A Z +A Z +B Y +B Z +A Z +A Z +B Y +B X +C X +B Y +C X +C X +A Z +C X +C X +C Y +C X +C X +C X +B Z +B Z +A Z +A Z +B Z +A Z +C X +A Z +B Y +A Y +A Z +C Z +B Y +B Z +B Z +A Z +C X +B Z +A X +B Y +A Y +B Y +B Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +C X +B Z +A Z +B Y +A Z +B Z +A Z +B Y +A Z +A X +A Z +B Y +B Y +A Y +C X +A Z +A Z +C Y +A Z +A Z +B Z +C Z +B Z +A Z +A Z +C X +C Y +B Z +A Z +C X +A Z +C X +B Y +C X +B Z +A Z +A Z +C X +A Z +C X +A Y +C X +C X +C Y +B Z +C X +B Z +C X +A Z +A Z +C X +A Y +B Z +C X +B Z +C X +A Z +C X +C X +A Z +A Z +B Y +C Z +A X +A X +A Z +C X +A Z +A Z +A Z +A Y +A Z +A Z +A Z +A Z +B Z +C X +B Y +A Z +A Z +B Y +A Z +A Z +A Z +A Z +B Y +A Z +B Z +A Y +A Y +A Y +A Z +A Y +A Z +B Z +A Z +B Y +A Z +C X +A Y +C X +A Z +B Y +A Y +A Z +A Y +A Z +C Z +A Z +B Z +A Z +C X +B Z +A Z +A Z +C X +B Y +A Z +C X +C Y +A Z +B Y +A Z +B X +B Y +B Y +C Z +C X +A Z +C X +A Y +A Y +B Z +A Z +C X +B Z +A Z +A Z +A Y +C X +C X +A Z +A X +B Z +A Z +A Z +A X +A Z +C X +A Z +B Y +A Z +B X +B Y +A Y +C X +A Z +A X +A X +A Y +B Y +A Y +A Z +C X +B Z +A Z +A X +A X +A Z +C X +B Z +C X +B Y +A Z +C X +A Y +A Z +A Z +A Z +A Z +C Z +B Z +C Z +A Z +A Z +C X +B Y +A Y +B Z +C X +B Z +A Z +A Z +A Z +A X +B Y +C X +B Y +B Z +B Z +A Z +A Y +C Y +A Y +A X +A Z +C X +A Z +A Z +A X +A Z +A Z +C X +A Z +A X +A Z +C Y +A Z +B Z +A Y +A Z +C Z +A Y +A Y +B Z +A Y +A Y +A Y +A Z +A Z +A Z +A Z +C X +A Z +A Z +A Z +A Z +A Z +A Z +A X +A Z +A Z +A Z +A Z +A Z +A Y +B Z +A Y +A Z +C X +A X +B Z +A Z +A X +C Y +B Y +B Y +B Z +C X +C X +A Z +A Z +C X +C X +A Z +A X +A Z +A Z +A Z +A X +C X +C X +A Z +A Y +A Z +A Z +A Z +A Z +C Z +A Z +C X +B Z +C Z +C X +A Z +B Y +C X +C X +B Z +C X +B Y +A Y +B X +A Z +A Z +A Z +B Z +C X +A X +B Z +A X +A Z +C Z +B Z +A Z +A Z +C X +C X +A X +C X +C Y +A Z +A Z +A Z +B Z +C Z +A Z +A Z +A Z +A Z +A Z +B Z +A Z +A Z +C X +B Y +A Z +B Z +A Z +C X +A Z +A Z +A Z +B Z +C X +B Y +A Z +A Z +A Z +C Y +A Z +A Z +C X +C X +A Y +B Z +A Z +C Y +C X +A Z +A Z +A Z +C X +A Z +A Z +B Z +B Z +A Z +A Z +A Z +C X +C X +A Z +B Z +A X +B Y +C X +C X +C X +A Z +C X +A Z +A Z +B Y +A Y +B Z +B Z +A Z +A Z +C Z +A Y +A Y +A Z +A Z +C X +C Z +A Z +A Z +A Z +A Z +C Y +B Y +B Y +C Y +A Z +C X +B Z +A X +A Y +B Z +A Z +A Z +A Z +A X +A Z +A Z +A Z +A Y +C Z +A Y +C X +A Y +A X +C X +A Z +B Y +A Y +B Y +A Z +C X +C Z +A Z +C Z +A Y +A Z +A Z +B Z +B X +B Z +B Z +B Y +C Z +C X +A X +C Z +B Z +A Z +A Z +B Z +A Y +A Z +B Y +C X +A Z +B Z +C X +A X +B Z +A Z +A Z +C X +C X +C X +B Z +C Z +A Z +C X +A Z +A Z +A Z +A Z +C Z +C X +A X +B Y +A Z +C X +C Z +A Z +C X +B Z +B Y +A Z +C X +A Z +B Z +C Z +A Z +A Z +A X +B Y +C X +A Z +C X +A Z +A X +C X +A Z +C X +A Y +A Z +C X +C Z +C Y +B Z +B Z +A Y +B Z +A Z +A Z +A Y +A Z +C X +C X +A Z +A Z +C X +B Z +A Z +B Y +A Z +A Z +A Z +C X +A Z +A Y +B Y +A Z +C X +A Z +A X +A Z +A Z +C X +C Y +A Z +C X +A Z +A Y +C X +B Z +C Z +B Y +A Z +A Z +B Y +A Z +B Y +A Z +A Z +A Z +C X +A Y +C X +A Z +C Y +A Z +A Z +A Z +B Y +B Z +B Z +C Z +A X +A Z +A Z +C X +A Z +C X +A Z +A X +C Z +C X +A Z +A Z +A Z +A Z +B Z +A Z +A Z +C Y +A Y +A Z +C Y +C Y +A Z +B Z +A Z +B Z +A Z +B Z +C Y +C X +C X +A Y +A Z +B Z +C X +A X +A Z +A Z +A Y +A Z +A Z +A Z +C X +C X +A Y +A Z +A Z +C X +B Z +B Y +A Y +A Z +B Z +A Z +A Z +A X +A Z +A Z +B Y +A Z +A Y +B Z +C X +A Z +A Z +A Z +C X +A Z +B Z +B Z +A Z +A Z +A Z +A Z +B Z +A Z +A Z +A Z +A Z +C X +C X +A Z +B X +A Z +B Y +C Z +A Z +A Z +A Z +C Z +A Z +B Y +A X +A Z +C Z +A Z +C Z +A Z +C X +A Y +C X +C Z +A Y +A Z +A Z +C X +C X +A Z +A Z +A Z +B Z +B Z +A Y +B Y +C Z +B Z +B X +A Z +A Z +A Z +C X +B Y +A Z +B Z +C X +A Z +A Z +C X +C X +A Z +A Z +A Z +A Z +B Z +A Z +A Z +A Z +A Z +A Z +B Z +A Z +A Z +B Z +A Y +A Z +B Y +A Z +A Z +A Z +B Z +A Z +A Z +C X +B Y +C X +A Y +C X +A Z +A Z +A Z +C X +B Z +A Z +A Z +A Z +A Z +A Z +C X +A Z +A Z +A Z +A Z +A Z +A Y +C X +B Y +C X +A Z +A Z +A Z +A Z +A Z +B Y +A Z +C X +A Z +A Z +A Z +A Z +A Z +A Z +A Z +C X +A Z +C X +A Y +B Z +A Z +C X +A Z +C X +B Z +B Z +A Z +A Z +A Z +C X +A Z +B Z +B Y +C X +C X +C X +B Z +A X +A Y +A Z +A Z +A Z +A Y +A Z +A Z +A Y +A X +A Y +C X +A Y +C X +B Z +B Y +C X +B Y +B Y +C X +A Z +A Z +B Z +C X +A Z +A Z +B Y +A Z +B Y +A Z +A X +C Y +C X +B Z +C X +A Z +A Z +A Z +C X +A Z +C X +A X +A Y +A Z +A Z +C X +A Y +A Z +B X +A Y +A Z +A Z +A Z +A Z +A Z +A Z +C X +A Z +C X +A Z +C Y +A Z +A Z +B Z +A Y +A Z +B Y +B Y +A Z +C X +A Z +C X +C Z +A Z +B Z +B Z +A Z +A Z +C X +C X +B Y +A Z +A Z +B Z +C Z +B Y +B Y +C X +A Z +A Z +B Y +A Z +C X +C Z +A Z +B Z +C X +A Y +C X +A Z +B Y +B Y +A Y +A Z +A Z +A Z +A Z +A Z +A Y +A Z +A Y +A Z +B Y +B Y +B Y +C X +A Z +A Z +A Y +A Z +A Z +C X +A Y +C X +A Z +A Z +A Z +B Y +A Z +A Z +B Z +C X +A Z +B Y +B Y +C X +C Z +B Y +A Z +A Z +A Z +C X +A Z +B Z +C Z +C X +B Y +A Z +A Z +A Y +A X +A Z +A Z +A Z +A Z +A Z +A Y +B Y +A Z +B Z +B Z +A Z +C Y +A X +A Z +A Z +C X +C X +C Y +B Y +B Y +B X +A Z +A Z +B Z +A Z diff --git a/main.py b/main.py index 69d6e16..30614f6 100644 --- a/main.py +++ b/main.py @@ -1,15 +1,21 @@ -from calories.file.calorie_list import CalorieList - +from entities.elf import Elf +from rockpaperscissor.file.guide_list import RockPaperScissorGuide if __name__ == "__main__": - elves = CalorieList("./input/day1/input.lst").parse_file() - for elf in elves: - print(f"Elf {elf} has calories: {elf.get_inventory_calories()}") - elves.sort(key=lambda x: x.get_inventory_calories(), reverse=True) - print(f"Most calories has: {elves[0]} with {elves[0].get_inventory_calories()} calories in their inventory!") + my_elf = Elf() + other_elf = Elf() + rounds = RockPaperScissorGuide("./input/day2/input.lst").parse_file() + scores = [] + for other, own in rounds: + result, score = my_elf.evaluate_RPS_round(other, own) + scores.append(score) + if result: + r = "won" + else: + r = "lost" + print(f"Elf {my_elf} played {own} against {other} and {r} with {score} points!") + + print() + print(f"I've got a total of {sum(scores)} points!") - print(f"The top 3 calorie elves are: {elves[0]} ({elves[0].get_inventory_calories()}), " - f"{elves[1]} ({elves[1].get_inventory_calories()}) and " - f"{elves[2]} ({elves[2].get_inventory_calories()})") - print(f"Their total is: {sum([x.get_inventory_calories() for x in elves[:3]])}") diff --git a/main_day1.py b/main_day1.py new file mode 100644 index 0000000..2f31b48 --- /dev/null +++ b/main_day1.py @@ -0,0 +1,14 @@ +from calories.file.calorie_list import CalorieList + + +if __name__ == "__main__": + elves = CalorieList("./input/day1/input.lst").parse_file() + for elf in elves: + print(f"Elf {elf} has calories: {elf.get_inventory_calories()}") + elves.sort(key=lambda x: x.get_inventory_calories(), reverse=True) + print(f"Most calories has: {elves[0]} with {elves[0].get_inventory_calories()} calories in their inventory!") + + print(f"The top 3 calorie elves are: {elves[0]} ({elves[0].get_inventory_calories()}), " + f"{elves[1]} ({elves[1].get_inventory_calories()}) and " + f"{elves[2]} ({elves[2].get_inventory_calories()})") + print(f"Their total is: {sum([x.get_inventory_calories() for x in elves[:3]])}") diff --git a/rockpaperscissor/__init__.py b/rockpaperscissor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rockpaperscissor/file/__init__.py b/rockpaperscissor/file/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rockpaperscissor/file/guide_list.py b/rockpaperscissor/file/guide_list.py new file mode 100644 index 0000000..d34d2bd --- /dev/null +++ b/rockpaperscissor/file/guide_list.py @@ -0,0 +1,66 @@ +import os +from typing import List, Tuple + + +class RPS: + ROCK = "R" + PAPER = "P" + SCISSOR = "S" + + ROCK_SCORE = 1 + PAPER_SCORE = 2 + SCISSOR_SCORE = 3 + + WIN_SCORE = 6 + DRAW_SCORE = 3 + LOSS_SCORE = 0 + + RPS_SYM_TO_SHAPE = { + "A": ROCK, + "X": ROCK, + + "B": PAPER, + "Y": PAPER, + + "C": SCISSOR, + "Z": SCISSOR + } + + RPS_SHAPE_TO_SCORE = { + ROCK: ROCK_SCORE, + PAPER: PAPER_SCORE, + SCISSOR: SCISSOR_SCORE + } + + +class RockPaperScissorGuide: + """ + Day 2 - Rock Paper Scissors + + The Elves begin to set up camp on the beach. To decide whose tent gets to be closest to the snack storage, + a giant Rock Paper Scissors tournament is already in progress. + + One Elf gives you an encrypted strategy guide (your puzzle input) that they say will be sure to help you win. + The first column is what your opponent is going to play: A for Rock, B for Paper, and C for Scissors. + The second column, you reason, must be what you should play in response: X for Rock, Y for Paper, + and Z for Scissors. Winning every time would be suspicious, so the responses must have been carefully chosen. + + The score for a single round is the score for the shape you selected (1 for Rock, 2 for Paper, and 3 for Scissors) + plus the score for the outcome of the round (0 if you lost, 3 if the round was a draw, and 6 if you won). + """ + + def __init__(self, path: str): + if not os.path.isfile(path): + raise FileNotFoundError(f"File was not found or isn't a file: {path}") + + self.file_path = path + + def parse_file(self) -> List[Tuple[str, str]]: + strategy_guide = [] + with open(self.file_path, "r") as file: + for line in file: + line = line.replace("\n", "") + a, b = line.split(" ") + strategy_guide.append((RPS.RPS_SYM_TO_SHAPE[a], RPS.RPS_SYM_TO_SHAPE[b])) + + return strategy_guide