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..