2023 Day 1
This commit is contained in:
parent
e0c8b59cf6
commit
f69e98cfc4
3 changed files with 60 additions and 1 deletions
58
2023/day01.nim
Normal file
58
2023/day01.nim
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
const numbers = "0123456789"
|
||||
const words = @[
|
||||
"one",
|
||||
"two",
|
||||
"three",
|
||||
"four",
|
||||
"five",
|
||||
"six",
|
||||
"seven",
|
||||
"eight",
|
||||
"nine",
|
||||
]
|
||||
|
||||
proc part1(): int =
|
||||
let f = open("input/day01.txt")
|
||||
defer: f.close()
|
||||
|
||||
var line: string
|
||||
while f.readLine(line):
|
||||
var nums: seq[int] = @[]
|
||||
for char in line:
|
||||
if char in numbers:
|
||||
nums.add(char.int - '0'.int)
|
||||
|
||||
result += 10 * nums[0] + nums[^1]
|
||||
|
||||
proc extractNumsOverlap(line: string): seq[int] =
|
||||
var i = 0
|
||||
while i < line.len:
|
||||
let char = line[i]
|
||||
|
||||
if char in numbers:
|
||||
result.add(char.int - '0'.int)
|
||||
inc i
|
||||
continue
|
||||
|
||||
for n, word in words:
|
||||
let
|
||||
size = word.len
|
||||
cap = min(i + size, line.len)
|
||||
if line[i..<cap] == word:
|
||||
result.add(n+1)
|
||||
break
|
||||
inc i
|
||||
|
||||
proc part2(): int =
|
||||
let f = open("input/day01.txt")
|
||||
defer: f.close()
|
||||
|
||||
var line: string
|
||||
while f.readLine(line):
|
||||
let
|
||||
nums = extractNumsOverlap(line)
|
||||
|
||||
result += 10 * nums[0] + nums[^1]
|
||||
|
||||
echo part1()
|
||||
echo part2()
|
||||
Loading…
Reference in a new issue