mirror of
https://github.com/SrIzan10/adventofcode.git
synced 2026-06-06 00:46:56 +00:00
105 lines
2.5 KiB
Python
105 lines
2.5 KiB
Python
input = open('input.txt', 'r').read().splitlines()
|
|
|
|
# play
|
|
p = {
|
|
'A': 1,
|
|
'B': 2,
|
|
'C': 3,
|
|
'X': 1,
|
|
'Y': 2,
|
|
'Z': 3
|
|
}
|
|
playerInv = {
|
|
1: 'A',
|
|
2: 'B',
|
|
3: 'C'
|
|
}
|
|
opponentInv = {
|
|
1: 'X',
|
|
2: 'Y',
|
|
3: 'Z'
|
|
}
|
|
|
|
def part1(input=input,isPart2=False):
|
|
results = []
|
|
sum = 0
|
|
|
|
for i in input:
|
|
for pointsKey in p:
|
|
i = i.replace(pointsKey, str(p[pointsKey]))
|
|
i = i.split()
|
|
|
|
opponent = int(i[0])
|
|
player = int(i[1])
|
|
|
|
if isPart2:
|
|
opponent = int(i[1])
|
|
player = int(i[0])
|
|
|
|
winner = rockpaperscissors(opponent, player)
|
|
finalPoints = 0
|
|
match winner:
|
|
case 'player':
|
|
finalPoints = player + 6
|
|
case 'tie':
|
|
finalPoints = player + 3
|
|
case 'opponent':
|
|
finalPoints = player
|
|
|
|
results.append({ 'opponent': opponent, 'player': player, 'winner': winner, 'finalPoints': finalPoints })
|
|
|
|
for r in results:
|
|
sum += r['finalPoints']
|
|
|
|
return { 'results': results, 'sum': sum }
|
|
|
|
|
|
def part2():
|
|
results = part1()['results']
|
|
loss = { "A": "C", "B": "A", "C": "B" }
|
|
wins = { "A": "B", "B": "C", "C": "A" }
|
|
sum = 0
|
|
simInput = []
|
|
|
|
# left hand is the player, right hand is the opponent
|
|
for r in results:
|
|
player = r['player']
|
|
opponent = r['opponent']
|
|
# inverted values for better treatment
|
|
player = playerInv[player]
|
|
opponent = opponentInv[opponent]
|
|
|
|
if opponent == 'X':
|
|
player = loss[player]
|
|
elif opponent == 'Y':
|
|
player = player
|
|
elif opponent == 'Z':
|
|
player = wins[player]
|
|
|
|
simInput.append(f"{player} {opponent}")
|
|
|
|
calc = part1(simInput, True)
|
|
return calc['sum']
|
|
|
|
def rockpaperscissors(opponent, player):
|
|
opponent = int(opponent)
|
|
player = int(player)
|
|
if opponent == player:
|
|
return "tie"
|
|
elif opponent == 1 and player == 2:
|
|
return "player"
|
|
elif opponent == 2 and player == 1:
|
|
return "opponent"
|
|
elif opponent == 1 and player == 3:
|
|
return "opponent"
|
|
elif opponent == 3 and player == 1:
|
|
return "player"
|
|
elif opponent == 2 and player == 3:
|
|
return "player"
|
|
elif opponent == 3 and player == 2:
|
|
return "opponent"
|
|
else:
|
|
raise ValueError("Make sure opponent and player have right numbers.")
|
|
|
|
print('Part1:', part1()['sum'])
|
|
print('Part2:', part2()) |