Solve 2022/02
parent
fc6103528f
commit
4534eccffd
@ -0,0 +1,57 @@
|
||||
https://adventofcode.com/2022/day/2
|
||||
|
||||
## \--- 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](https://en.wikipedia.org/wiki/Rock_paper_scissors) tournament is
|
||||
already in progress.
|
||||
|
||||
Rock Paper Scissors is a game between two players. Each game contains many
|
||||
rounds; in each round, the players each simultaneously choose one of Rock,
|
||||
Paper, or Scissors using a hand shape. Then, a winner for that round is
|
||||
selected: Rock defeats Scissors, Scissors defeats Paper, and Paper defeats
|
||||
Rock. If both players choose the same shape, the round instead ends in a draw.
|
||||
|
||||
Appreciative of your help yesterday, 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--" Suddenly, the Elf is called
|
||||
away to help with someone's tent.
|
||||
|
||||
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 winner of the whole tournament is the player with the highest score. Your
|
||||
_total score_ is the sum of your scores for each round. 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).
|
||||
|
||||
Since you can't be sure if the Elf is trying to help you or trick you, you
|
||||
should calculate the score you would get if you were to follow the strategy
|
||||
guide.
|
||||
|
||||
For example, suppose you were given the following strategy guide:
|
||||
|
||||
[code]
|
||||
|
||||
A Y
|
||||
B X
|
||||
C Z
|
||||
|
||||
[/code]
|
||||
|
||||
This strategy guide predicts and recommends the following:
|
||||
|
||||
* In the first round, your opponent will choose Rock (`A`), and you should choose Paper (`Y`). This ends in a win for you with a score of _8_ (2 because you chose Paper + 6 because you won).
|
||||
* In the second round, your opponent will choose Paper (`B`), and you should choose Rock (`X`). This ends in a loss for you with a score of _1_ (1 + 0).
|
||||
* The third round is a draw with both players choosing Scissors, giving you a score of 3 + 3 = _6_.
|
||||
|
||||
In this example, if you were to follow the strategy guide, you would get a
|
||||
total score of `_15_` (8 + 1 + 6).
|
||||
|
||||
_What would your total score be if everything goes exactly according to your
|
||||
strategy guide?_
|
||||
|
@ -0,0 +1,3 @@
|
||||
A Y
|
||||
B X
|
||||
C Z
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,53 @@
|
||||
"""
|
||||
Part1
|
||||
"""
|
||||
|
||||
file = open("input/input", "r", encoding="utf-8")
|
||||
|
||||
SCORES = {"ROCK": 1, "PAPER": 2, "SCISSORS": 3, "WIN": 6, "DRAW": 3, "LOSS": 0}
|
||||
|
||||
MAPPINGS = {
|
||||
"A": "ROCK",
|
||||
"B": "PAPER",
|
||||
"C": "SCISSORS",
|
||||
"X": "ROCK",
|
||||
"Y": "PAPER",
|
||||
"Z": "SCISSORS",
|
||||
}
|
||||
|
||||
BETTER_THAN = {
|
||||
"ROCK": "PAPER",
|
||||
"PAPER": "SCISSORS",
|
||||
"SCISSORS": "ROCK",
|
||||
}
|
||||
|
||||
score = 0
|
||||
|
||||
for line in file.readlines():
|
||||
line = line.strip()
|
||||
opponent, ours = line.split(" ")
|
||||
|
||||
opponent = MAPPINGS[opponent]
|
||||
ours = MAPPINGS[ours]
|
||||
|
||||
score_this_round = 0
|
||||
score_this_round += SCORES[ours]
|
||||
|
||||
print("opp:", opponent, "our", ours)
|
||||
|
||||
if opponent == ours:
|
||||
outcome = "DRAW"
|
||||
elif ours == BETTER_THAN[opponent]:
|
||||
outcome = "WIN"
|
||||
else:
|
||||
outcome = "LOSS"
|
||||
|
||||
score_this_round += SCORES[outcome]
|
||||
score += score_this_round
|
||||
|
||||
print(outcome, "Score:", score_this_round)
|
||||
print()
|
||||
|
||||
|
||||
print()
|
||||
print(score)
|
@ -0,0 +1,55 @@
|
||||
"""
|
||||
Part2
|
||||
"""
|
||||
|
||||
file = open("input/input", "r", encoding="utf-8")
|
||||
|
||||
SCORES = {"ROCK": 1, "PAPER": 2, "SCISSORS": 3, "WIN": 6, "DRAW": 3, "LOSS": 0}
|
||||
|
||||
MAPPINGS = {
|
||||
"A": "ROCK",
|
||||
"B": "PAPER",
|
||||
"C": "SCISSORS",
|
||||
"X": "LOSS",
|
||||
"Y": "DRAW",
|
||||
"Z": "WIN",
|
||||
}
|
||||
|
||||
BETTER_THAN = {
|
||||
"ROCK": "PAPER",
|
||||
"PAPER": "SCISSORS",
|
||||
"SCISSORS": "ROCK",
|
||||
}
|
||||
|
||||
WORSE_THAN = {"ROCK": "SCISSORS", "PAPER": "ROCK", "SCISSORS": "PAPER"}
|
||||
|
||||
score = 0
|
||||
|
||||
for line in file.readlines():
|
||||
line = line.strip()
|
||||
opponent, outcome = line.split(" ")
|
||||
|
||||
opponent = MAPPINGS[opponent]
|
||||
outcome = MAPPINGS[outcome]
|
||||
|
||||
score_this_round = 0
|
||||
score_this_round += SCORES[outcome]
|
||||
|
||||
if outcome == "WIN":
|
||||
ours = BETTER_THAN[opponent]
|
||||
elif outcome == "DRAW":
|
||||
ours = opponent
|
||||
else:
|
||||
ours = WORSE_THAN[opponent]
|
||||
|
||||
score_this_round += SCORES[ours]
|
||||
|
||||
print("opp:", opponent, "our", ours)
|
||||
score += score_this_round
|
||||
|
||||
print(outcome, "Score:", score_this_round)
|
||||
print()
|
||||
|
||||
|
||||
print()
|
||||
print(score)
|
Loading…
Reference in New Issue