From f69e98cfc4c00b0e0d87c6aaf1d90d436f1d31bf Mon Sep 17 00:00:00 2001 From: Jeremy Kaplan Date: Thu, 30 Nov 2023 21:51:43 -0800 Subject: [PATCH] 2023 Day 1 --- 2023/.gitignore | 1 + 2023/day01.nim | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 +- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 2023/.gitignore create mode 100644 2023/day01.nim diff --git a/2023/.gitignore b/2023/.gitignore new file mode 100644 index 0000000..59ded47 --- /dev/null +++ b/2023/.gitignore @@ -0,0 +1 @@ +/input diff --git a/2023/day01.nim b/2023/day01.nim new file mode 100644 index 0000000..92ff2d0 --- /dev/null +++ b/2023/day01.nim @@ -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..