Advent of Code

What is Advent of Code? Well, go to https://adventofcode.com/

Okay, but what is it? Go to https://adventofcode.com/2021/about

Primarily, I’ve used Advent of Code as a fun way to keep my coding skills from atrophying during times where I’m coding less at work and it serves as a great way to learn new languages by forcing me to interact with typical things like:

  • reading and writing from a file
  • splitting input by line
  • parsing
  • basic list and map operations
  • some intermediate structures, like heaps and graphs
  • the part 1 / part 2 stucture is a nice example of changing requirements

Putting my progress into a single place to make tracking easier:

My Advent packages by language with thoughts

  • Python: valbaca/advent-py
    • Python is #1 for a reason, both in general and especially with Advent of Code solvers.
    • Does run into perf issues, even on reasonable algorithms.
    • It looks like I’ll primarily be using Python at work, so I’m going to focus on Python.
  • Go: valbaca/advent-go
    • I’ve used Advent to learn Go. Go is eating Java, so I needed to be familiar with it.
    • Incredibly fast to compile and execute (~50x compared to Python), but can be downright boring and tedious to write.
    • I really miss niceties of (nearly every other) language.
    • I thought I was going to use Go for my primary coding language at work, but when I started I found it’s purely Python
  • Java & Clojure: valbaca/advent
    • Java has been the language I’ve used most for the past 10 years in my career, but I wanted to learn Clojure.
    • I’ve used Advent to learn Clojure. I reach for Java occassionally for perf and familiarity.
    • Certainly discovered some of the Clojure super-powers: writing a input file reader that uses the namespace of the file is some cool magic.
    • REPL is awesome, but initial startup, REPL connection pains, and absurd memory usage really drag.
  • Crystal: valbaca/AdventOfCode-Crystal
    • Again, used Advent of Code to help learn, but hardly got far at all.
    • Super fast to execute, tad bit slow to compile. No good debugger or IDE.
    • I really wish Crystal fulfilled that sweet spot of Ruby syntax at C speed…but it has essentially no tools.
  • JS/TS: …nah
    • JavaScript is an “if you must” language, but I’m sure it would be just fine for Advent problems.
  • Rust: …maybe someday?

Progress by Year and language

  • Year 2015: 🎄 DONE! multiple times!
  • Year 2016: ❄️ ON ICE @ Day 20
    • Days 1-7 & 19 in Python
    • 1-11 in Clojure and 11-18 in Java.
    • 1-12 in Go
  • Year 2017: ❄️ ON ICE @ Day 7
  • Year 2018: ❄️ ON ICE @ Day 6
  • Year 2019: ❄️ ON ICE @ Day 2
  • Year 2020: 🎄 DONE!
  • Year 2021: 🌟 IN PROGRESS!