mirror of
https://github.com/rjNemo/advent_of_code_2022
synced 2026-06-06 02:26:41 +00:00
day2 part 2
This commit is contained in:
parent
8cecf0653c
commit
96e7b21aac
2 changed files with 50 additions and 10 deletions
|
|
@ -15,7 +15,8 @@ and `C` for Scissors. The second column--" Suddenly, the Elf is called away to h
|
||||||
The second column, you reason, must be what you should play in response: X for Rock, Y for Paper, and Z 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.
|
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
|
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
|
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).
|
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).
|
||||||
|
|
||||||
|
|
@ -39,4 +40,22 @@ This strategy guide predicts and recommends the following:
|
||||||
- The third round is a draw with both players choosing Scissors, giving you a score of 3 + 3 = **6**.
|
- 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).
|
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?**
|
**What would your total score be if everything goes exactly according to your strategy guide?**
|
||||||
|
|
||||||
|
## Part Two
|
||||||
|
|
||||||
|
The Elf finishes helping with the tent and sneaks back over to you. "Anyway, the second column says how the round needs
|
||||||
|
to end: `X` means you need to lose, `Y` means you need to end the round in a draw, and `Z` means you need to win. Good luck!"
|
||||||
|
|
||||||
|
The total score is still calculated in the same way, but now you need to figure out what shape to choose so the round
|
||||||
|
ends as indicated. The example above now goes like this:
|
||||||
|
|
||||||
|
- In the first round, your opponent will choose Rock (A), and you need the round to end in a draw (Y), so you also
|
||||||
|
choose Rock. This gives you a score of 1 + 3 = **4**.
|
||||||
|
- In the second round, your opponent will choose Paper (B), and you choose Rock so you lose (X) with a score of 1 + 0 =
|
||||||
|
**1**.
|
||||||
|
- In the third round, you will defeat your opponent's Scissors with Rock for a score of 1 + 6 = **7**. Now that you're
|
||||||
|
correctly decrypting the ultra top secret strategy guide, you would get a total score of **12**.
|
||||||
|
|
||||||
|
Following the Elf's instructions for the second column, **what would your total score be if everything goes exactly
|
||||||
|
according to your strategy guide?**
|
||||||
37
day2/main.py
37
day2/main.py
|
|
@ -1,7 +1,4 @@
|
||||||
from typing import Generator
|
def total_score_1(data: list[list[str]]) -> int:
|
||||||
|
|
||||||
|
|
||||||
def total_score(data: Generator[list[str]]):
|
|
||||||
points = {
|
points = {
|
||||||
"A": 1,
|
"A": 1,
|
||||||
"B": 2,
|
"B": 2,
|
||||||
|
|
@ -26,9 +23,33 @@ def total_score(data: Generator[list[str]]):
|
||||||
return score
|
return score
|
||||||
|
|
||||||
|
|
||||||
def read_data() -> Generator[list[str]]:
|
def total_score_2(data: list[list[str]]) -> int:
|
||||||
|
points = {
|
||||||
|
"A": 0,
|
||||||
|
"B": 1,
|
||||||
|
"C": 2,
|
||||||
|
"X": 1,
|
||||||
|
"Y": 0,
|
||||||
|
"Z": 2,
|
||||||
|
}
|
||||||
|
score = 0
|
||||||
|
for row in data:
|
||||||
|
a, exp = row
|
||||||
|
if points[exp] == 0:
|
||||||
|
# it's a draw
|
||||||
|
score += 3 + points[a] + 1
|
||||||
|
elif points[exp] == 2:
|
||||||
|
# won
|
||||||
|
score += 6 + (points[a] + 1) % 3 + 1
|
||||||
|
else:
|
||||||
|
# lose
|
||||||
|
score += (points[a] - 1) % 3 + 1
|
||||||
|
return score
|
||||||
|
|
||||||
|
|
||||||
|
def read_data() -> list[list[str]]:
|
||||||
with open("./input.txt", "r") as f:
|
with open("./input.txt", "r") as f:
|
||||||
return (row.strip().split(" ") for row in f.readlines())
|
return [row.strip().split(" ") for row in f.readlines()]
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
@ -37,5 +58,5 @@ if __name__ == "__main__":
|
||||||
("B", "X"),
|
("B", "X"),
|
||||||
("C", "Z"),
|
("C", "Z"),
|
||||||
]
|
]
|
||||||
data = read_data()
|
dataset = read_data()
|
||||||
print(total_score(data))
|
print(total_score_2(dataset))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue