This commit is contained in:
Danny Hpy 2023-01-21 20:41:50 +01:00
parent 53ce37f822
commit 536d83a552
Signed by: dannyhpy
GPG Key ID: 7139FBBEA22D1CEC
2 changed files with 103 additions and 0 deletions

43
2022/02/first.nim Normal file
View File

@ -0,0 +1,43 @@
import
std/strformat,
std/strutils,
std/tables
import
../../adventofcode
let input = adventofcode.getInput()
var score = 0
type
Choices = enum
rock, paper, scissors
let choices = toTable({
'A': rock,
'B': paper,
'C': scissors,
'X': rock,
'Y': paper,
'Z': scissors,
})
for line in input.splitLines:
let opponentChoice = choices[line[0]]
let ourChoice = choices[line[2]]
# The choice we make is added to the score
score += 1 + ord ourChoice
let outcome = ord(ourChoice) - ord(opponentChoice)
case outcome
of -2: score += 6
of -1: score += 0
of 0: score += 3
of 1: score += 6
of 2: score += 0
else:
raise newException(ValueError, fmt"Outcome: {outcome}")
echo fmt"Answer: {score}"

60
2022/02/second.nim Normal file
View File

@ -0,0 +1,60 @@
import
std/strformat,
std/strutils,
std/tables
import
../../adventofcode
let input = adventofcode.getInput()
var score = 0
type
Choice = enum
cRock = 'A',
cPaper = 'B',
cScissors = 'C'
RequiredOutcome = enum
roDefeat = 'X',
roDraw = 'Y',
roVictory = 'Z'
let choiceScores = toTable({
cRock: 1,
cPaper: 2,
cScissors: 3,
})
for line in input.splitLines:
let opponentChoice = Choice line[0]
let requiredOutcome = RequiredOutcome line[2]
var ourChoice: Choice
case requiredOutcome
of roDefeat:
score += 0
case opponentChoice
of cRock:
ourChoice = cScissors
of cPaper:
ourChoice = cRock
of cScissors:
ourChoice = cPaper
of roDraw:
score += 3
ourChoice = opponentChoice
of roVictory:
score += 6
case opponentChoice
of cRock:
ourChoice = cPaper
of cPaper:
ourChoice = cScissors
of cScissors:
ourChoice = cRock
# The choice we make is added to the score
score += choiceScores[ourChoice]
echo fmt"Answer: {score}"