- Kotlin 79%
- Java 21%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| framework | ||
| solutions | ||
| test-framework | ||
| .gitignore | ||
| pom.xml | ||
| README.md | ||
| renovate.json | ||
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:
- De naam van de class
Solutionis. - 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 danadventofcode.year2021.day01 - Je class moet
AbstractSolutionextenden.
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:
TInput, het type van de input nadat het geparsed is.TOutput, het type van het resultaat van de puzzel. Voor de eerste paar dagen zal ditLongzijn.
Elke Solution dient een viertal methodes te implementeren:
getDay, retourneert voor welke dag challenge de implementatie geldtparseInput, om de ruwe input (eenStream<String>) te parsen naar het gewensteTOutputsilver, om de oplossing voor het eerste deel van de challenge in te implementerengold, 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()
}
}