advent-of-code/2022/python/day02.py

76 lines
1.2 KiB
Python

import shared
from pprint import pprint as pp
rock = "rock"
paper = "paper"
scissors = "scissors"
lose = "X"
tie = "Y"
win = "Z"
Moves = {
"A":rock,
"B":paper,
"C":scissors,
"X":rock,
"Y":paper,
"Z":scissors,
}
Scores = {
rock: 1,
paper: 2,
scissors: 3
}
LosesTo = {
rock: paper,
paper: scissors,
scissors: rock
}
WinsTo = {
paper: rock,
scissors: paper,
rock: scissors
}
def winner(opponent, me):
if opponent == me:
return 3 + Scores[me]
# wins
if (opponent == rock and me == paper) or (opponent == paper and me == scissors) or (opponent == scissors and me == rock):
return 6 + Scores[me]
return 0 + Scores[me]
def which_move(opponent, me):
if me == lose:
return WinsTo[Moves[opponent]]
if me == win:
return LosesTo[Moves[opponent]]
if me == tie:
return Moves[opponent]
def run(moves):
score = 0
for move in moves:
opponent, me = move
my_move = which_move(opponent, me)
o_move = Moves[opponent]
pts = winner(o_move, my_move)
score += pts
print(score)
def main():
rows = [row.rstrip().split() for row in shared.load(2)]
run(rows)
if __name__ == "__main__":
main()