No description
  • Kotlin 79%
  • Java 21%
Find a file
2026-06-03 11:11:36 +02:00
.forgejo/workflows workflow: add caching 2026-03-13 12:59:29 +01:00
framework Use JUnit BOM for dependency management 2025-07-05 09:09:02 +02:00
solutions fix(deps): update dependency io.vavr:vavr to v1 2026-03-13 13:03:14 +01:00
test-framework Use JUnit BOM for dependency management 2025-07-05 09:09:02 +02:00
.gitignore Generic setup first 2 exercises. 2021-09-15 16:36:04 +02:00
pom.xml fix(deps): update kotlin monorepo to v2.4.0 2026-06-03 09:00:50 +00:00
README.md AdventOfCodeTestEngine gemaakt om veiliger te kunnen refactoren 2021-12-13 09:08:54 +01:00
renovate.json renovate: enable automerge 2023-12-13 17:32:38 +01:00

Advent of Code framework en mijn oplossingen!

Uitvoeren

De Application class heeft een main die op zoek gaat naar alle AbstractSolution implementaties, en die stuk voor stuk uitvoert.

Dit framework gaat ook zelf jouw inputs ophalen (en lokaal cachen). Om dit aan de praat te krijgen moet je eerst inloggen op https://adventofcode.com. Als je dat eenmaal gedaan hebt, kopiëer de waarde van de session cookie (b.v. door developer tools te openen). De waarde van dat cookie geef je mee als system property met de naam AdventOfCode.sessionId mee aan de applicatie.

Voorbeeld (als je de JAR eenmaal gebouwd hebt):

$ java -jar adventofcode.jar -DAdventOfCode.sessionId=abcdef

Achter een proxy laten werken

Als je de opdrachten wilt uitvoeren vanachter een proxy, voeg dan de volgende twee vlaggen toe:

  • -Dhttps.proxyHost=proxyhostname
  • -Dhttps.proxyPort=8080

Dan wordt totaalaanroep als volgt:

$ java -jar adventofcode.jar -DAdventOfCode.sessionId=abcdef -Dhttps.proxyHost=proxyhostname -Dhttps.proxyPort=8080

Toevoegen nieuwe "day"

Het framework gaat bij het uitvoeren van Application zelf op zoek naar alle implementaties van AbstractSolution. Om een nieuwe implementatie vindbaar te maken, zorg er dan voor dat:

  1. De naam van de class Solution is.
  2. De class in een package zit dat het patroon adventofcode.year<YEAR_HIER>.day<DAG_HIER> volgt, waarbij de dag wederom uit twee cijfers bestaat. Voor dag 1 uit 2021 is het dan adventofcode.year2021.day01
  3. Je class moet AbstractSolution extenden.

Samenvattend, voor dag 1 uit 2021 moet de fully-qualified classname van je class als volgt zijn: Solution.

De AbstractSolution superclass heeft twee generic parameters, namelijk:

  1. TInput, het type van de input nadat het geparsed is.
  2. TOutput, het type van het resultaat van de puzzel. Voor de eerste paar dagen zal dit Long zijn.

Elke Solution dient een viertal methodes te implementeren:

  • getDay, retourneert voor welke dag challenge de implementatie geldt
  • parseInput, om de ruwe input (een Stream<String>) te parsen naar het gewenste TOutput
  • silver, om de oplossing voor het eerste deel van de challenge in te implementeren
  • gold, om de oplossing voor het tweede deel van de challenge in te implementeren

Voor het gemak volgt hier een template voor je AbstractSolution implementaties:

package adventofcode.yearYYYY.dayDD

import AbstractSolution
import java.util.stream.Stream

class Solution : AbstractSolution<INPUT_TYPE_HIER, OUTPUT_TYPE_HIER>(YYYY, D) {
    override fun parseInput(inputLines: Stream<String>): INPUT_TYPE_HIER {
        TODO()
    }

    override fun silver(input: INPUT_TYPE_HIER): OUTPUT_TYPE_HIER {
        TODO()
    }

    override fun gold(input: INPUT_TYPE_HIER): OUTPUT_TYPE_HIER {
        TODO()
    }
}