Advent of Code 2023
Rob van der Leek
Posted on December 1, 2023
In this series I'll share my progress with the 2023 version of Advent of Code.
I'll try to post my solution to the puzzle on the day it's unlocked on the website. Let's see how far I get this year (I've started many times before in previous years but never made it to December 25...)
My solutions are not the most sophisticated, or the smallest, or the fastest, etc. I only have an hour or so each day to work on the puzzles. Still, I hope you like reading along with my coding adventures, and perhaps compare your solutions with mine, let me know in the comments below!
You can also follow my progress on GitHub.
A bit on my setup
This year I'll be using Python. Mainly because this year I don't have the time to learn a new language (if you have a bit more time available, Advent of Code is a great way to learn a new programming language.) But also because Python is a beautiful language.
Rules I try to adhere to:
- I write all the code in a single file (
main.py
) using VIM in a terminal - A solution should be less than 100 lines, if it's bigger I try to refactor/be smarter
- I only use code from the standard Python library, no third-party libraries
- I only use Google/StackOverflow for basic Python stuff
December 1st
The puzzle of day 1 took me longer than expected. Not a soft landing this year 😄 but with those Elves I guess nothing will be easy this year 🤦
My pitfall for this puzzle: The sample input did not contain an example of an input my code did not support. It took me quite some time and a careful re-reading of the "requirements" to figure that out.
Solution here, do not click if you want to solve the puzzle first yourself
#!/usr/bin/env python3
substitutions = [('one', '1'), ('two', '2'), ('three', '3'), ('four', '4'),
('five', '5'), ('six', '6'), ('seven', '7'), ('eight', '8'), ('nine', '9')]
def first_digit(s):
index = 0
while index < len(s):
if s[index].isdigit():
return s[index]
for sub in substitutions:
if s[index:].startswith(sub[0]):
return sub[1]
index += 1
def last_digit(s):
index = len(s) - 1
while index >= 0:
if s[index].isdigit():
return s[index]
for sub in substitutions:
if s[index:].startswith(sub[0]):
return sub[1]
index -= 1
with open('input2.txt') as infile:
lines = [line.strip() for line in infile.readlines()]
numbers = []
for line in lines:
number = int(f'{first_digit(line)}{last_digit(line)}')
numbers.append(number)
print(sum(numbers))
That's it! See you again tomorrow!
Posted on December 1, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.