2023 day02

This commit is contained in:
Rupus Reinefjord 2023-12-05 22:23:52 +01:00
parent 4b49e6b86c
commit 24ed30fbe6
2 changed files with 83 additions and 0 deletions

65
2023/day02/d02_1.nim Normal file
View file

@ -0,0 +1,65 @@
import std/[math, sequtils, strutils, sugar]
type
Rules = object
red: int
green: int
blue: int
CubeSet* = object
red*: int
green*: int
blue*: int
Game* = object
id*: int
sets*: seq[CubeSet]
const rules = Rules(red: 12, green: 13, blue: 14)
func isPossible(rules: Rules, cubes: CubeSet): bool =
if cubes.red > rules.red:
return false
if cubes.green > rules.green:
return false
if cubes.blue > rules.blue:
return false
return true
func parseGame*(game: string): Game =
let
sp = game.split({':', ';'})
sets = sp[1..^1]
result.id = sp[0].split(' ')[1].parseInt()
for set in sets:
var cubes = CubeSet()
for reveal in set.split(','):
let
sp = reveal.strip().split(' ')
let
amount = sp[0].strip().parseInt()
colour = sp[1]
case colour
of "red":
cubes.red = amount
of "green":
cubes.green = amount
of "blue":
cubes.blue = amount
result.sets.add(cubes)
when isMainModule:
let
input = stdin.readAll().strip().splitLines()
games = input.map(parseGame)
possibleIds =
collect:
for game in games:
block gameBlock:
for set in game.sets:
if not rules.isPossible(set):
break gameBlock
game.id
echo possibleIds.sum()

18
2023/day02/d02_2.nim Normal file
View file

@ -0,0 +1,18 @@
import std/[math, sequtils, strutils, sugar]
import d02_1
func fewestCubes(sets: seq[CubeSet]): CubeSet =
for cubes in sets:
if cubes.red > result.red:
result.red = cubes.red
if cubes.green > result.green:
result.green = cubes.green
if cubes.blue > result.blue:
result.blue = cubes.blue
when isMainModule:
let
input = stdin.readAll().strip().splitLines()
games = input.map(parseGame).mapIt(it.sets)
fewest = games.map(fewestCubes)
echo fewest.mapIt(it.red * it.green * it.blue).sum()