Solutions in Java for the Advent of Code in 2024
- Do not spend too much development time on a solution
- Write tests with the example input to ensure that everything works and keeps working (also to test the second part)
- Improve readability when writing an algorithm
- Lower down the complexity and improve the performances when not impacting too much the readability
- Try some new features of the languages or libraries when possible
- Use the Darkyen's Time Tracker to inject the time spend of each puzzle
This year I created an automation in Java to quickly setup the daily environment.
The code is in DaySetup.java, it uses DayXX.java and DayXXTest.java as templates for the main code and the tests.
When the DaySetup::main
runs it:
- downloads the daily input to the
test/resources
folder - prepares the initial Java code for the main algorithm
- prepares the tests to run the algorithm with the proper input
This repo does follow the automation guidelines on the /r/adventofcode
community wiki. Specifically:
- Inputs files are downloaded once and locally cached
- It is always possible delete the local copy and ensure to download a new uncorrupted copy
- The
User-Agent
header contains the info about this repository
- Day 6:
- (part 1) missed that in a single step the guard could find his direction blocked and the direction at 90°, so he must turn by 180°
- (part 2) checking any possible positions for placing obstacles instead of using the initial path of the guard; it just requires more iterations and time
- Day 5: (part 1) considering that multiple items could be at the same topological order, the problem was simpler; it was a nice game to adapt a standard algorithm for topological order (Kahn's) to generate a data structure (
List<List<String>> partialOrder
) that holds the information about missing relation between items - Day 4: (part 1) forgot to check in diagonal
- Day 3: (part 2) checking if
s.startsWith("do")
ors.startsWith("don't")
and the first always triggers - Day 2:
- (part 1) missed to check when two levels are equals
- (part 2) tried to fix the levels without the bruteforce approach
- Day 1: (part 1) forgot to sort