advent-of-code-2023/solutions/day01/solution.nim

54 lines
1.1 KiB
Nim
Raw Permalink Normal View History

2023-12-01 06:36:49 -06:00
import std/[strutils]
2023-12-04 17:41:45 -06:00
import ../aoc
2023-12-01 06:36:49 -06:00
proc parseInput(input: string): seq[string] =
input.split("\n")
proc partOne*(input: string): int =
let lines = parseInput(input)
for line in lines:
var digits: seq[char]
for c in line:
case c
of '0'..'9':
digits.add c
else: discard
result += parseInt(digits[0] & digits[^1])
type
Number = enum
zero = 0,
one, two, three, four, five, six, seven, eight, nine
proc partTwo*(input: string): int =
let lines = parseInput(input)
for line in lines:
var digits: seq[char]
var i: int
while i < line.len:
let c = line[i]
case c
of '0'..'9':
digits.add c
inc i
else:
for number in Number.low..Number.high:
if line[i..^1].startsWith($number):
digits.add $number.ord
# some numbers share chars
# let's jump back an extra index to catch them
i += len($number)-2
break
inc i
result += parseInt(digits[0] & digits[^1])
2023-12-04 17:41:45 -06:00
solve:
"example.txt":
2023-12-04 17:41:45 -06:00
partOne: 142
"example2.txt":
2023-12-04 17:41:45 -06:00
partTwo: 281
"input.txt":
2023-12-04 17:41:45 -06:00
partOne: 54597
partTwo: 54504