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

2023 Day 1

This commit is contained in:
Jeremy Kaplan 2023-11-30 21:51:43 -08:00
commit f69e98cfc4
3 changed files with 60 additions and 1 deletions

1
2023/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/input

58
2023/day01.nim Normal file
View 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()

View file

@ -8,9 +8,9 @@ I like solving the [Advent of Code](https://adventofcode.com/) challenges every
- 2020: Elixir - 2020: Elixir
- 2021: Go - 2021: Go
- 2022: Rust (Again! v1.65, 2021 edition) - 2022: Rust (Again! v1.65, 2021 edition)
- 2023: Nim
Languages I'd like to use for the future or TODO years: Languages I'd like to use for the future or TODO years:
- J (or other APL-like) - J (or other APL-like)
- Haskell - Haskell
- Zig - Zig
- Nim