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.main
parent
0a735eb84b
commit
a77ad30e10
@ -0,0 +1,3 @@
|
||||
A Y
|
||||
B X
|
||||
C Z
|
File diff suppressed because it is too large
Load Diff
@ -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]])}")
|
||||
|
||||
|
@ -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]])}")
|
@ -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
|
Loading…
Reference in New Issue