2023 Day 1
This commit is contained in:
parent
e0c8b59cf6
commit
f69e98cfc4
3 changed files with 60 additions and 1 deletions
1
2023/.gitignore
vendored
Normal file
1
2023/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
/input
|
||||||
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()
|
||||||
|
|
@ -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
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue