Watch
1
0
Fork
You've already forked advent-of-code
0

2023 Day 15 Part 1

This commit is contained in:
Jeremy Kaplan 2023-12-14 23:04:10 -08:00
commit e87db204b3

53
2023/day15.nim Normal file
View file

@ -0,0 +1,53 @@
import std/algorithm
import std/deques
import std/enumerate
import std/math
import std/options
import std/sequtils
import std/sets
import std/strscans
import std/strutils
import std/sugar
import std/tables
import std/terminal
proc dbg[T](v: T): T = (echo(v); v)
func empty[T](v: seq[T]): bool = v.len == 0
proc split[T](v: seq[T], pred: proc(elt: T): bool {.noSideEffect.}): seq[seq[T]] =
var current: seq[T]
for elt in v:
if pred(elt):
result.add current
current = @[]
else:
current.add elt
result.add current
func join[T](parts: seq[seq[T]], sep: T): seq[T] =
if parts.len > 0:
result &= parts[0]
for part in parts[1..^1]:
result.add sep
result &= part
type Init = tuple
steps: seq[string]
func parseInit(text: string): Init =
result.steps = text.strip.split(',')
func hash(step: string): int =
for c in step:
result = ((result + c.ord) * 17) mod 256
proc part1(input: string): int =
let text = readFile(input)
let init = parseInit(text)
init.steps.map(hash).sum
echo part1("input/test.txt")
echo part1("input/day15.txt")