- Code might be ugly as it is just there to solve the puzzles of https://adventofcode.com/. :-)
- Code for "early" puzzles might evolve over time because later puzzles sometimes require refactoring for reusability or add some additional features to existing code
- General framework for every day incl. unit tests
- Testing includes additional input & output values, not just the method parameters + return value
- Everything (except input) is quite type insensitive to avoid unnecessary conversions
- Command line tool to
- try out different inputs for the current puzzle
- download your puzzle input
- run your logic with your puzzle input
- copy the result automatically to clipboard
- create a history of results per day
- Tuples with up to 16 elements via jOOλ
- Functional interfaces with up to 16 parameters via jOOλ
- JSON parsing/writing etc. via json.org lib
- Simple CSV parsing (to String/int/long)
- Direction enums to help with navigating using square or hex fields
- Running lots of repeating state manipulations with speed optimization via cycle detection
- Painting and parsing of 2D ASCII images with a few different possibilities
- "OCR" for these images that supports 6 and 10 pixel high fonts (see details)
- Calculating polygon sizes and line lengths
- Math util functions for least common multiple and greatest common divisor
- Math util functions for chinese remainder theorem
- Math util function to solve systems of linear equations
- Advanced solving of logic/arithmetic/... problems with Z3
- Graph support
- Integrate JGraphT
- Creation from 2D maps
- Export to DOT to render it
- Support of multiple years
- Command line tool to
- add support for other years
- reset your implementation for a desired year to start from scratch
The general structure is based on https://github.com/dave-burke/advent-of-code-java-starter/
- Every solution for the years 2015-2024