My solutions for the 2024 Advent of Code challenges. Everything is written in Java and somewhat over-engineered. I'm trying to avoid using any dependencies other than what's available in the standard Java Class Library.
If you're a Python developer or haven't worked with Java much, here are some interesting features on offer:
- Strong Typing - Helps to avoid common bugs that occur due to passing around random values by ensuring you always know what type a given value is.
- Generics - Allow you to write classes and methods that work with many different types.
- Streams - Make it much easier to work with collections and provide access to Functional Programming patterns.
- JavaDoc - Generates easily browsable HTML pages based on comments you've written in your code.
If I write any code for a solution that seems like it'll be even remotely helpful down the line / seems funny to spend time abstracting out into a separate class or package, I'll take the opportunity to do so every time.
Emphasis is placed on getting the solutions done quickly and easily, rather than on correctness or efficiency in terms of memory or runtime. I am trying to ensure I document the important classes and methods if I have extra time after solving puzzles.
Per the Expedient competition guidelines, this repo and available documentation / download links will be updated around 24 hours after a challenge goes online to avoid spoiling solutions.
Other Expedient employees' solutions can be found on GitHub.
Browsable documentation (JavaDoc) is available on my website. Information is provided about the solutions, the solution runner, etc.
You can download the executable JAR file here, please note that it is compiled with Java 17, so you will need a relatively new JDK available to run it. Microsoft's distribution of OpenJDK is freely available to download here. Otherwise, it should work anywhere.
java -jar ./aoc.jar
to run the solutions. If you have test input files located in ./inputs
named with numbers
corresponding to each day, it'll use those to output the solutions. Otherwise, it will default to the built-in sample
inputs.
Available options:
--test
- use the sample inputs even if you have inputs available in./inputs
--all
- run all available solutions and print their output--day=x
- runs the solution for dayx
--help
- display command line usage information