Day 4
This commit is contained in:
88
day_02/solve.nim
Normal file
88
day_02/solve.nim
Normal file
@@ -0,0 +1,88 @@
|
||||
import std/[strutils, tables]
|
||||
|
||||
type Shape {.pure.} = enum
|
||||
Rock = 1,
|
||||
Paper = 2,
|
||||
Scissor = 3
|
||||
|
||||
let shapeTable = {
|
||||
"A": Rock,
|
||||
"B": Paper,
|
||||
"C": Scissor,
|
||||
"X": Rock,
|
||||
"Y": Paper,
|
||||
"Z": Scissor
|
||||
}.toTable
|
||||
|
||||
let scoringTable = {
|
||||
Rock: {
|
||||
Rock: 3,
|
||||
Paper: 0,
|
||||
Scissor: 6
|
||||
}.toTable,
|
||||
Paper: {
|
||||
Rock: 6,
|
||||
Paper: 3,
|
||||
Scissor: 0
|
||||
}.toTable,
|
||||
Scissor: {
|
||||
Rock: 0,
|
||||
Paper: 6,
|
||||
Scissor: 3
|
||||
}.toTable
|
||||
}.toTable
|
||||
|
||||
type Response {.pure.} = enum
|
||||
Lose = 0,
|
||||
Draw = 3,
|
||||
Win = 6
|
||||
|
||||
let resultTable = {
|
||||
"X": Lose,
|
||||
"Y": Draw,
|
||||
"Z": Win
|
||||
}.toTable
|
||||
|
||||
let responseShape = {
|
||||
Lose: {
|
||||
Rock: Scissor,
|
||||
Paper: Rock,
|
||||
Scissor: Paper
|
||||
}.toTable,
|
||||
Draw: {
|
||||
Rock: Rock,
|
||||
Paper: Paper,
|
||||
Scissor: Scissor
|
||||
}.toTable,
|
||||
Win: {
|
||||
Rock: Paper,
|
||||
Paper: Scissor,
|
||||
Scissor: Rock
|
||||
}.toTable
|
||||
}.toTable
|
||||
|
||||
const strategyGuide: seq[string] = readFile("day_02/input.txt").splitLines
|
||||
|
||||
proc solveTotalScore() =
|
||||
var score = 0
|
||||
for step in strategyGuide:
|
||||
let opponent = shapeTable[step.substr(0, 0)]
|
||||
let response = shapeTable[step.substr(2, 2)]
|
||||
score += response.int
|
||||
score += scoringTable[response][opponent]
|
||||
echo "Total socre: " & $score
|
||||
|
||||
proc solveDecryptedScore() =
|
||||
var score = 0
|
||||
for step in strategyGuide:
|
||||
let opponent = shapeTable[step.substr(0, 0)]
|
||||
let desiredResult = resultTable[step.substr(2, 2)]
|
||||
let response = responseShape[desiredResult][opponent]
|
||||
score += response.int
|
||||
score += desiredResult.int
|
||||
echo "Descrypted score: " & $score
|
||||
|
||||
|
||||
if isMainModule:
|
||||
solveTotalScore()
|
||||
solveDecryptedScore()
|
||||
Reference in New Issue
Block a user