61 lines
1.4 KiB
Nim
61 lines
1.4 KiB
Nim
import std/strscans
|
|
import std/strutils
|
|
|
|
proc part1(): int =
|
|
let f = open("input/day02.txt")
|
|
defer: f.close()
|
|
|
|
let
|
|
reds = 12
|
|
greens = 13
|
|
blues = 14
|
|
|
|
var line: string
|
|
while f.readLine(line):
|
|
var id: int
|
|
var rest: string
|
|
|
|
block game:
|
|
if not scanf(line, "Game $i: $*$.", id, rest):
|
|
echo "ERROR"
|
|
continue
|
|
|
|
for counts in rest.split(";"):
|
|
var r, g, b: int
|
|
for s in counts.split(","):
|
|
let parts = s.strip.split()
|
|
case parts[1]:
|
|
of "red": (if parts[0].parseInt > reds: break game)
|
|
of "green": (if parts[0].parseInt > greens: break game)
|
|
of "blue": (if parts[0].parseInt > blues: break game)
|
|
inc result, id
|
|
|
|
proc part2(): int =
|
|
let f = open("input/day02.txt")
|
|
defer: f.close()
|
|
|
|
var line: string
|
|
while f.readLine(line):
|
|
var id: int
|
|
var rest: string
|
|
|
|
if not scanf(line, "Game $i: $*$.", id, rest):
|
|
echo "ERROR"
|
|
continue
|
|
|
|
var reds, greens, blues: int
|
|
|
|
for counts in rest.split(";"):
|
|
var r, g, b: int
|
|
for s in counts.split(","):
|
|
let parts = s.strip.split()
|
|
case parts[1]:
|
|
of "red": (reds = max(reds, parts[0].parseInt))
|
|
of "green": (greens = max(greens, parts[0].parseInt))
|
|
of "blue": (blues = max(blues, parts[0].parseInt))
|
|
|
|
let power = reds * greens * blues
|
|
inc result, power
|
|
|
|
echo part1()
|
|
echo part2()
|