From 44861c9717fae62096eaf89fd991ed5a9df6f62f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20R=C3=B8dland?= Date: Fri, 20 Dec 2024 10:29:57 +0100 Subject: [PATCH] 2024 - Day 20 - input/init --- .../kotlin/no/rodland/advent_2024/Day20.kt | 27 ++++ .../no/rodland/advent_2024/Day20Test.kt | 82 ++++++++++ src/test/resources/2024/input_20.txt | 141 ++++++++++++++++++ src/test/resources/2024/input_20_test.txt | 0 4 files changed, 250 insertions(+) create mode 100644 src/main/kotlin/no/rodland/advent_2024/Day20.kt create mode 100644 src/test/kotlin/no/rodland/advent_2024/Day20Test.kt create mode 100644 src/test/resources/2024/input_20_test.txt diff --git a/src/main/kotlin/no/rodland/advent_2024/Day20.kt b/src/main/kotlin/no/rodland/advent_2024/Day20.kt new file mode 100644 index 00000000..abd3f006 --- /dev/null +++ b/src/main/kotlin/no/rodland/advent_2024/Day20.kt @@ -0,0 +1,27 @@ +package no.rodland.advent_2024 + +import no.rodland.advent.Day + +// template generated: 20/12/2024 +// Fredrik Rødland 2024 + +class Day20(val input: List) : Day> { + + private val parsed = input.parse() + + override fun partOne(): Long { + return 2 + } + + override fun partTwo(): Long { + return 2 + } + + override fun List.parse(): List { + return map { line -> + line + } + } + + override val day = "20".toInt() +} diff --git a/src/test/kotlin/no/rodland/advent_2024/Day20Test.kt b/src/test/kotlin/no/rodland/advent_2024/Day20Test.kt new file mode 100644 index 00000000..88df1d18 --- /dev/null +++ b/src/test/kotlin/no/rodland/advent_2024/Day20Test.kt @@ -0,0 +1,82 @@ +package no.rodland.advent_2024 + +import no.rodland.advent.* +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import readFile + +// +// run: download_aoc_input.sh to download input +// + +@Suppress("ClassName") +@DisableSlow +internal class Day20Test { + private val data20 = "2024/input_20.txt".readFile() + private val test20 = "2024/input_20_test.txt".readFile() + + private val resultTestOne = 2L + private val resultTestTwo = 2L + private val resultOne = 2L + private val resultTwo = 2L + + val test = defaultTestSuiteParseOnInit( + Day20(data20), + Day20(test20), + resultTestOne, + resultOne, + resultTestTwo, + resultTwo, + { Day20(data20) }, + { Day20(test20) }, + ) + + @Nested + inner class Init { + @Test + fun `20,-,example,1`() { + report(AOCTest({ "123".toInt() }, Unit, 123, 5, "20".toInt(), Part.TWO, false, "example")) + } + + @Test + fun `20,-,example,2`() { + report(test.initTest.copy()) + } + + @Test + fun `20,-,test,init`() { + report(test.initTest) + } + + @Test + fun `20,-,live,init`() { + report(test.initLive) + } + } + + @Nested + inner class `Part 1` { + @Test + fun `20,1,test`() { + report(test.testPart1) + } + + @Test + fun `20,1,live,1`() { + report(test.livePart1) + } + } + + @Nested + inner class `Part 2` { + @Test + fun `20,2,test`() { + report(test.testPart2) + } + + @Test + fun `20,2,live,1`() { + report(test.livePart2) + } + } +} diff --git a/src/test/resources/2024/input_20.txt b/src/test/resources/2024/input_20.txt index e69de29b..1ad1be40 100644 --- a/src/test/resources/2024/input_20.txt +++ b/src/test/resources/2024/input_20.txt @@ -0,0 +1,141 @@ +############################################################################################################################################# +#.......###...#...###.....###...#...#.......#...#.............###.......#...#####.........#.....#...........###.......#...#.....#...###...### +#.#####.###.#.#.#.###.###.###.#.#.#.#.#####.#.#.#.###########.###.#####.#.#.#####.#######.#.###.#.#########.###.#####.#.#.#.###.#.#.###.#.### +#.#...#.....#...#...#...#.....#.#.#.#...#...#.#.#...........#.#...#.....#.#...#...#.....#.#.#...#.....#.....#...#.....#.#.#.#...#.#...#.#...# +#.#.#.#############.###.#######.#.#.###.#.###.#.###########.#.#.###.#####.###.#.###.###.#.#.#.#######.#.#####.###.#####.#.#.#.###.###.#.###.# +#...#.........#...#...#...#...#...#.#...#.#...#...###...###.#.#.#...#...#.#...#.....#...#.#.#...#...#.#...###...#.....#.#.#.#...#.#...#...#.# +#############.#.#.###.###.#.#.#####.#.###.#.#####.###.#.###.#.#.#.###.#.#.#.#########.###.#.###.#.#.#.###.#####.#####.#.#.#.###.#.#.#####.#.# +###...###...#...#.#...###...#...#...#...#...#.....#...#.....#...#.....#.#.#.......###...#...#...#.#.#...#.#...#.#.....#.#...#...#.#.#...#.#.# +###.#.###.#.#####.#.###########.#.#####.#####.#####.###################.#.#######.#####.#####.###.#.###.#.#.#.#.#.#####.#####.###.#.#.#.#.#.# +#...#.....#.#.....#.......#...#.#.#...#.....#.#...#.........#.....#.....#.#.......#...#.#.....#...#.###.#...#.#.#.#...#...#...###.#.#.#.#.#.# +#.#########.#.###########.#.#.#.#.#.#.#####.#.#.#.#########.#.###.#.#####.#.#######.#.#.#.#####.###.###.#####.#.#.#.#.###.#.#####.#.#.#.#.#.# +#.........#.#.........#...#.#...#...#.#.....#.#.#.....###...#...#...#...#.#...#...#.#...#.#...#...#.#...#.....#.#.#.#.###.#.#...#.#...#...#.# +#########.#.#########.#.###.#########.#.#####.#.#####.###.#####.#####.#.#.###.#.#.#.#####.#.#.###.#.#.###.#####.#.#.#.###.#.#.#.#.#########.# +#.........#.#.........#.....#.....#...#.....#.#...#...#...#.....#...#.#.#.#...#.#.#...#...#.#.###.#.#.#...###...#.#.#...#.#.#.#.#.#.........# +#.#########.#.###############.###.#.#######.#.###.#.###.###.#####.#.#.#.#.#.###.#.###.#.###.#.###.#.#.#.#####.###.#.###.#.#.#.#.#.#.######### +#.........#.#...............#.#...#.###.....#.....#...#...#.#...#.#...#.#.#...#.#...#.#.#...#.#...#...#.....#...#.#.#...#.#.#.#.#.#.....#...# +#########.#.###############.#.#.###.###.#############.###.#.#.#.#.#####.#.###.#.###.#.#.#.###.#.###########.###.#.#.#.###.#.#.#.#.#####.#.#.# +#.....#...#.#...#...#...###...#...#...#.............#.#...#...#.#.#.....#.#...#...#.#.#.#...#.#...#.........#...#...#.#...#.#.#...#...#...#.# +#.###.#.###.#.#.#.#.#.#.#########.###.#############.#.#.#######.#.#.#####.#.#####.#.#.#.###.#.###.#.#########.#######.#.###.#.#####.#.#####.# +#.#...#...#.#.#.#.#...#.#...#.....#...#.........#...#.#.....#...#.#.....#.#...#...#...#...#.#.#...#.#...#.....#.....#.#...#...#.....#.....#.# +#.#.#####.#.#.#.#.#####.#.#.#.#####.###.#######.#.###.#####.#.###.#####.#.###.#.#########.#.#.#.###.#.#.#.#####.###.#.###.#####.#########.#.# +#.#.....#.#.#.#.#.....#.#.#.#.....#.###.....#...#...#.#...#.#.###.#.....#.#...#.....#.....#.#.#...#.#.#.#...#...###...#...#...#...#.....#...# +#.#####.#.#.#.#.#####.#.#.#.#####.#.#######.#.#####.#.#.#.#.#.###.#.#####.#.#######.#.#####.#.###.#.#.#.###.#.#########.###.#.###.#.###.##### +#.....#...#.#.#.#...#.#.#.#.#...#.#...#...#.#.#.....#.#.#...#.....#...#...#.....###.#.....#.#...#.#.#.#.#...#.....###...#...#...#...#...#...# +#####.#####.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#####.#.#############.#.#######.###.#####.#.###.#.#.#.#.#.#######.###.###.#####.#####.###.#.# +#...#.#...#...#...#...#...#...#.#...#.#.#.#.#.#.#...#.#...#...........#.....#...#...#.....#...#...#.#.#...#.......#...#...#...#.....#...#.#.# +#.#.#.#.#.#####################.###.#.#.#.#.#.#.#.#.#.###.#.###############.#.###.###.#######.#####.#.#####.#######.###.###.#.#####.###.#.#.# +#.#...#.#.......#.............#...#.#.#.#.#.#...#.#...#...#.......#...#...#.#...#...#.#.....#.....#.#.#.....#.....#.#...#...#.....#.....#.#.# +#.#####.#######.#.###########.###.#.#.#.#.#.#####.#####.#########.#.#.#.#.#.###.###.#.#.###.#####.#.#.#.#####.###.#.#.###.#######.#######.#.# +#.#...#.#.......#.###...#...#.#...#.#.#.#.#...#...#...#...#.....#.#.#.#.#.#...#...#.#.#.#...#...#.#.#.#.#...#...#.#.#...#.......#.......#.#.# +#.#.#.#.#.#######.###.#.#.#.#.#.###.#.#.#.###.#.###.#.###.#.###.#.#.#.#.#.###.###.#.#.#.#.###.#.#.#.#.#.#.#.###.#.#.###.#######.#######.#.#.# +#...#...#.........#...#...#...#...#.#.#.#...#.#.#...#...#.#...#...#.#...#.#...#...#.#.#.#...#.#...#.#.#.#.#.....#...#...###.....#.......#.#.# +###################.#############.#.#.#.###.#.#.#.#####.#.###.#####.#####.#.###.###.#.#.###.#.#####.#.#.#.###########.#####.#####.#######.#.# +#.....###...###...#.........#...#...#.#.#...#.#.#.#.....#.#...#...#.#.....#...#.###.#.#.#...#...#...#.#.#.#...........#...#...#...#...#...#.# +#.###.###.#.###.#.#########.#.#.#####.#.#.###.#.#.#.#####.#.###.#.#.#.#######.#.###.#.#.#.#####.#.###.#.#.#.###########.#.###.#.###.#.#.###.# +#...#.....#.....#.#.....###...#.....#.#.#...#.#.#.#...#...#...#.#.#.#.#...#...#...#.#...#.#...#.#.#...#...#...#...#.....#.....#...#.#.#.#...# +###.#############.#.###.###########.#.#.###.#.#.#.###.#.#####.#.#.#.#.#.#.#.#####.#.#####.#.#.#.#.#.#########.#.#.#.#############.#.#.#.#.### +###.............#.#...#.......#.....#.#...#.#.#.#.#...#.....#.#.#...#.#.#.#...###.#...#...#.#...#...#.........#.#.#.#...........#...#...#...# +###############.#.###.#######.#.#####.###.#.#.#.#.#.#######.#.#.#####.#.#.###.###.###.#.###.#########.#########.#.#.#.#########.###########.# +#...#...#...#...#.....#.......#.....#.....#.#.#.#.#...#.....#...###...#.#.#...#...#...#...#.......#...#.........#...#.#...#...#.........#...# +#.#.#.#.#.#.#.#########.###########.#######.#.#.#.###.#.###########.###.#.#.###.###.#####.#######.#.###.#############.#.#.#.#.#########.#.### +#.#.#.#.#.#.#.........#.....###...#.......#.#.#.#...#.#.......###...#...#.#.#...#...#####...#.....#.....#...........#...#...#...#...###...### +#.#.#.#.#.#.#########.#####.###.#.#######.#.#.#.###.#.#######.###.###.###.#.#.###.#########.#.###########.#########.###########.#.#.######### +#.#...#.#.#.#...#.....#.....#...#.#...#...#...#.#...#...#.....#...#...###...#...#.....#####.#.#.........#.........#.#.........#...#.........# +#.#####.#.#.#.#.#.#####.#####.###.#.#.#.#######.#.#####.#.#####.###.###########.#####.#####.#.#.#######.#########.#.#.#######.#############.# +#.....#.#.#...#.#.....#.....#...#...#.#...#.....#.#.....#.#...#...#.#...#.......#...#...#...#.#.#.....#...........#.#.......#...#...#.......# +#####.#.#.#####.#####.#####.###.#####.###.#.#####.#.#####.#.#.###.#.#.#.#.#######.#.###.#.###.#.#.###.#############.#######.###.#.#.#.####### +#.....#.#.....#.......#...#...#.....#.....#.....#.#.....#...#...#.#...#.#.....#...#.#...#...#.#.#.#...#...#.....###.......#.#...#.#.#.......# +#.#####.#####.#########.#.###.#####.###########.#.#####.#######.#.#####.#####.#.###.#.#####.#.#.#.#.###.#.#.###.#########.#.#.###.#.#######.# +#.....#.#...#...#.....#.#.#...#...#.........#...#.....#.#.......#.#.....#.....#...#.#.#...#.#.#...#.....#...#...#...#...#...#.....#.........# +#####.#.#.#.###.#.###.#.#.#.###.#.#########.#.#######.#.#.#######.#.#####.#######.#.#.#.#.#.#.###############.###.#.#.#.##################### +#.....#...#...#.#.#...#.#.#.....#.......#...#...#...#.#.#.......#.#.....#.......#.#.#.#.#.#...###...#.......#.....#...#.........#...###.....# +#.###########.#.#.#.###.#.#############.#.#####.#.#.#.#.#######.#.#####.#######.#.#.#.#.#.#######.#.#.#####.###################.#.#.###.###.# +#.....#...#...#...#.....#...#.........#.#.....#.#.#...#.....#...#.#...#.......#...#...#.#.#...#...#...#...#.....#...#...........#.#.....#...# +#####.#.#.#.###############.#.#######.#.#####.#.#.#########.#.###.#.#.#######.#########.#.#.#.#.#######.#.#####.#.#.#.###########.#######.### +#...#...#.#.....#...........#.#.......#.......#.#.....###...#.###.#.#.#.......###...###.#.#.#.#...#.....#.....#.#.#.#...#...#...#.#...#...### +#.#.#####.#####.#.###########.#.###############.#####.###.###.###.#.#.#.#########.#.###.#.#.#.###.#.#########.#.#.#.###.#.#.#.#.#.#.#.#.##### +#.#.#...#.....#.#.......#...#.#.#...###.......#.#...#...#...#...#...#.#...###...#.#.#...#...#.#...#.#.........#...#.....#.#...#...#.#...#...# +#.#.#.#.#####.#.#######.#.#.#.#.#.#.###.#####.#.#.#.###.###.###.#####.###.###.#.#.#.#.#######.#.###.#.###################.#########.#####.#.# +#.#...#.....#.#.#...###...#...#...#...#.#.....#...#...#...#...#.....#.....#...#...#...#...#...#...#.#...........###.....#.#.........#...#.#.# +#.#########.#.#.#.#.#################.#.#.###########.###.###.#####.#######.###########.#.#.#####.#.###########.###.###.#.#.#########.#.#.#.# +#...#.....#...#...#...........#.......#.#.....#...###...#...#.#...#.....#...#...........#.#...###...#.........#...#...#...#.......###.#...#.# +###.#.###.###################.#.#######.#####.#.#.#####.###.#.#.#.#####.#.###.###########.###.#######.#######.###.###.###########.###.#####.# +###...###...#.....#...#.....#...#...###.#.....#.#.#...#.#...#.#.#.#...#.#...#.#...........#...#...###.......#.#...###.#.........#.....#...#.# +###########.#.###.#.#.#.###.#####.#.###.#.#####.#.#.#.#.#.###.#.#.#.#.#.###.#.#.###########.###.#.#########.#.#.#####.#.#######.#######.#.#.# +#...........#.###...#...###.......#.....#.......#...#.#.#...#.#.#...#.#.#...#.#.........#...#...#...#.......#...#S....#...#...#...#...#.#.#.# +#.###########.#######################################.#.###.#.#.#####.#.#.###.#########.#.###.#####.#.###################.#.#.###.#.#.#.#.#.# +#...#...#...#.....#.......#...........#...#...#...#...#...#.#.#...#...#.#.#...#.........#.###.....#.#.....#########.....#...#...#...#.#.#...# +###.#.#.#.#.#####.#.#####.#.#########.#.#.#.#.#.#.#.#####.#.#.###.#.###.#.#.###.#########.#######.#.#####.#########.###.#######.#####.#.##### +###...#.#.#.#...#.#.....#.#.........#.#.#.#.#...#...#...#.#.#.....#.#...#...#...#.......#...###...#.......#######...###.#.....#...###...#...# +#######.#.#.#.#.#.#####.#.#########.#.#.#.#.#########.#.#.#.#######.#.#######.###.#####.###.###.#################.#####.#.###.###.#######.#.# +#.......#.#.#.#...#.....#...........#...#.#.#.........#.#...#...###...###...#.....#...#...#.....#...#############.....#.#.###...#...###...#.# +#.#######.#.#.#####.#####################.#.#.#########.#####.#.#########.#.#######.#.###.#######.#.#################.#.#.#####.###.###.###.# +#.......#.#.#...#...#.................###...#.#.........#...#.#.#...###...#...#.....#.###...#.....#.###.....#.....#...#...#...#...#.....#...# +#######.#.#.###.#.###.###############.#######.#.#########.#.#.#.#.#.###.#####.#.#####.#####.#.#####.###.###.#.###.#.#######.#.###.#######.### +#...###...#...#.#.#...#...#...........#...###.#.#.....###.#.#.#.#.#.#...#.....#.....#.......#...#...###...#...###.#.....#...#...#...#.....### +#.#.#########.#.#.#.###.#.#.###########.#.###.#.#.###.###.#.#.#.#.#.#.###.#########.###########.#.#######.#######.#####.#.#####.###.#.####### +#.#.#...#...#.#.#...#...#...#...#.......#...#.#.#...#.#...#...#...#.#.#...#...#.....#.........#.#E#######.......#.......#...#...###...###...# +#.#.#.#.#.#.#.#.#####.#######.#.#.#########.#.#.###.#.#.###########.#.#.###.#.#.#####.#######.#.###############.###########.#.###########.#.# +#.#.#.#.#.#.#...#...#.........#...#.........#.#...#.#...#...........#.#...#.#.#.#.....#.......#...#####.......#.........#...#...#...#...#.#.# +#.#.#.#.#.#.#####.#.###############.#########.###.#.#####.###########.###.#.#.#.#.#####.#########.#####.#####.#########.#.#####.#.#.#.#.#.#.# +#.#...#...#.......#.........###...#...#...###.#...#.#.....###...#...#.#...#.#.#...#...#...........#####.....#.#...#.....#...#...#.#.#.#...#.# +#.#########################.###.#.###.#.#.###.#.###.#.#######.#.#.#.#.#.###.#.#####.#.#####################.#.#.#.#.#######.#.###.#.#.#####.# +#.#...#.....#...#...#.....#.#...#.....#.#.#...#.....#.......#.#...#.#.#...#.#.#.....#.#.....#...#...#.......#...#...###...#.#.#...#.#...#...# +#.#.#.#.###.#.#.#.#.#.###.#.#.#########.#.#.###############.#.#####.#.###.#.#.#.#####.#.###.#.#.#.#.#.#################.#.#.#.#.###.###.#.### +#.#.#.#.#...#.#...#...#...#...#.....###.#.#.....#...........#.#.....#...#.#.#.#.....#...#...#.#.#.#.#.#...#...#...#...#.#.#.#...#...###.#...# +#.#.#.#.#.###.#########.#######.###.###.#.#####.#.###########.#.#######.#.#.#.#####.#####.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#####.#####.###.# +#...#...#...#.#.....###...#.....###.....#.......#.............#.....#...#...#.#.....#...#.....#.#.#.#...#...#...#...#.#.#.#...#...#...#.#...# +###########.#.#.###.#####.#.#######################################.#.#######.#.#####.#.#######.#.#.#################.#.#.###.#.###.#.#.#.### +#.......###...#...#...#...#.#.........#.....#.....#.............#...#...#.....#.......#.......#.#.#...#...........#...#.#.#...#.#...#...#...# +#.#####.#########.###.#.###.#.#######.#.###.#.###.#.###########.#.#####.#.###################.#.#.###.#.#########.#.###.#.#.###.#.#########.# +#.....#.#...#...#...#...#...#.......#...#...#.#...#.....#.....#...#.....#.......#...#.........#.#.#...#.........#...#...#...#...#.#.....#...# +#####.#.#.#.#.#.###.#####.#########.#####.###.#.#######.#.###.#####.###########.#.#.#.#########.#.#.###########.#####.#######.###.#.###.#.### +#.....#...#...#.###.....#.#...#...#.....#.....#.#...#...#...#.#...#.....#.......#.#.#.........#.#.#...........#.......#.....#.....#...#.#...# +#.#############.#######.#.#.#.#.#.#####.#######.#.#.#.#####.#.#.#.#####.#.#######.#.#########.#.#.###########.#########.###.#########.#.###.# +#.........#...#.........#.#.#...#.......#...###...#...#####.#.#.#...#...#...#...#.#.#...#...#.#.#...#.....###...#.....#.###...#...#...#.....# +#########.#.#.###########.#.#############.#.###############.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.#.###.#.###.#####.#.###.#.#####.#.#.#.######### +#.........#.#...#...#...#.#...........#...#.#...#...#...#...#.#.#...#...#...#.#...#.#.#...#.#.#.###...###.....#.#...#.#.....#...#.#.#.......# +#.#########.###.#.#.#.#.#.###########.#.###.#.#.#.#.#.#.#.###.#.#.#####.#.###.#####.#.#####.#.#.#############.#.###.#.#####.#####.#.#.#####.# +#.....#.....###...#...#...###.........#...#.#.#.#.#.#.#.#...#.#.#.#...#.#.###.....#.#.....#.#.#.#...#.........#.#...#.....#.....#.#...#.....# +#####.#.#####################.###########.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#######.#.#####.#.#.#.#.#.#.#########.#.#######.#####.#.#####.##### +#.....#.#.....#.......#...#...#.......#...#.#.#.#.#.#.#.#...#.#.#...#.#.#.#...#...#.....#.#...#.#.#.#.#.......#...#...###.....#.#.....#.....# +#.#####.#.###.#.#####.#.#.#.###.#####.#.###.#.#.#.#.#.#.#.###.#.#####.#.#.#.#.#.#######.#.#####.#.#.#.#.#####.#####.#.#######.#.#####.#####.# +#.#...#.#...#...#...#...#.#...#.#.....#.#...#.#.#.#.#.#.#.#...#.#.....#.#.#.#.#.......#.#...#...#.#.#...#...#.......#.......#...#.....#.....# +#.#.#.#.###.#####.#.#####.###.#.#.#####.#.###.#.#.#.#.#.#.#.###.#.#####.#.#.#.#######.#.###.#.###.#.#####.#.###############.#####.#####.##### +#...#...###...#...#.....#.###.#.#...#...#...#.#...#.#.#...#...#.#.....#.#.#.#...#.....#.#...#...#.#.#...#.#.#...#.....#...#.....#.....#.....# +#############.#.#######.#.###.#.###.#.#####.#.#####.#.#######.#.#####.#.#.#.###.#.#####.#.#####.#.#.#.#.#.#.#.#.#.###.#.#.#####.#####.#####.# +#.....#...###...#.......#.....#...#...#.....#.#.....#.....#...#.....#.#.#.#...#.#.#.....#...#...#.#.#.#...#.#.#.#...#.#.#.....#...#...#.....# +#.###.#.#.#######.###############.#####.#####.#.#########.#.#######.#.#.#.###.#.#.#.#######.#.###.#.#.#####.#.#.###.#.#.#####.###.#.###.##### +#...#.#.#.#.....#.........#...#...#...#.#.....#.#...#...#.#...#...#.#.#.#...#.#...#.....#...#...#.#.#.....#.#.#.#...#.#.....#...#.#...#.....# +###.#.#.#.#.###.#########.#.#.#.###.#.#.#.#####.#.#.#.#.#.###.#.#.#.#.#.###.#.#########.#.#####.#.#.#####.#.#.#.#.###.#####.###.#.###.#####.# +#...#...#...#...#...#...#.#.#.#.#...#...#.#.....#.#.#.#...###.#.#...#.#.###...#.........#...#...#.#...#...#.#.#.#.###...#...###...###...#...# +#.###########.###.#.#.#.#.#.#.#.#.#######.#.#####.#.#.#######.#.#####.#.#######.###########.#.###.###.#.###.#.#.#.#####.#.#############.#.### +#...........#.#...#...#...#.#...#.#.....#.#...#...#...###.....#.....#.#.....###.....#.....#.#.#...###.#...#.#.#.#.....#.#...###...#...#.#...# +###########.#.#.###########.#####.#.###.#.###.#.#########.#########.#.#####.#######.#.###.#.#.#.#####.###.#.#.#.#####.#.###.###.#.#.#.#.###.# +#.....#.....#...#...#...#...#.....#...#...###.#.........#.#...#...#.#...#...#.....#.#.###.#.#.#.....#.#...#.#.#.#...#.#.#...#...#...#.#.#...# +#.###.#.#########.#.#.#.#.###.#######.#######.#########.#.#.#.#.#.#.###.#.###.###.#.#.###.#.#.#####.#.#.###.#.#.#.#.#.#.#.###.#######.#.#.### +#.#...#.....#...#.#.#.#.#.#...#.......#.......#...#...#.#.#.#.#.#...#...#.###...#...#...#.#.#...#...#.#...#.#.#.#.#...#.#.....#...#...#.#...# +#.#.#######.#.#.#.#.#.#.#.#.###.#######.#######.#.#.#.#.#.#.#.#.#####.###.#####.#######.#.#.###.#.###.###.#.#.#.#.#####.#######.#.#.###.###.# +#.#.###...#.#.#.#.#.#.#.#.#...#.......#...#...#.#.#.#.#.#...#.#.....#...#.#.....#...#...#.#.###.#...#.#...#...#.#.....#.#...#...#.#.###...#.# +#.#.###.#.#.#.#.#.#.#.#.#.###.#######.###.#.#.#.#.#.#.#.#####.#####.###.#.#.#####.#.#.###.#.###.###.#.#.#######.#####.#.#.#.#.###.#.#####.#.# +#.#.....#...#.#.#.#.#.#...#...#.....#.#...#.#.#.#...#...###...#...#...#.#.#.....#.#.#.#...#...#.....#.#.......#.#...#.#...#.#...#.#.....#.#.# +#.###########.#.#.#.#.#####.###.###.#.#.###.#.#.###########.###.#.###.#.#.#####.#.#.#.#.#####.#######.#######.#.#.#.#.#####.###.#.#####.#.#.# +#...#.....#...#.#.#.#.###...#...###...#.#...#.#...#.........#...#.#...#.#.#.....#.#.#.#.#...#.#...###.....#...#.#.#.#.###...#...#.#.....#...# +###.#.###.#.###.#.#.#.###.###.#########.#.###.###.#.#########.###.#.###.#.#.#####.#.#.#.#.#.#.#.#.#######.#.###.#.#.#.###.###.###.#.######### +#...#.#...#...#...#.#.#...#...#.........#...#.....#.....#...#.#...#...#.#.#.....#.#.#.#.#.#.#...#.......#.#...#.#.#.#.#...#...###...#...#...# +#.###.#.#####.#####.#.#.###.###.###########.###########.#.#.#.#.#####.#.#.#####.#.#.#.#.#.#.###########.#.###.#.#.#.#.#.###.#########.#.#.#.# +#...#.#.#...#.....#.#.#...#...#.......#...#...#.......#.#.#.#.#...#...#...#...#.#.#...#.#.#.#...#.......#.#...#.#.#...#...#...........#...#.# +###.#.#.#.#.#####.#.#.###.###.#######.#.#.###.#.#####.#.#.#.#.###.#.#######.#.#.#.#####.#.#.#.#.#.#######.#.###.#.#######.#################.# +###.#.#.#.#.......#.#.#...#...#.......#.#.#...#.#...#...#.#.#.###.#...#.....#...#...#...#.#...#.#.......#...#...#.###...#.#...#...#...#.....# +###.#.#.#.#########.#.#.###.###.#######.#.#.###.#.#.#####.#.#.###.###.#.###########.#.###.#####.#######.#####.###.###.#.#.#.#.#.#.#.#.#.##### +#...#.#.#.........#...#...#...#.#...#...#.#.###...#...#...#...#...#...#.......#.....#...#...#...#.....#.....#...#.....#.#...#.#.#.#.#.#.....# +#.###.#.#########.#######.###.#.#.#.#.###.#.#########.#.#######.###.#########.#.#######.###.#.###.###.#####.###.#######.#####.#.#.#.#.#####.# +#.#...#...#.......#...###.#...#.#.#...#...#.#.........#.......#...#...#.......#...#.....#...#.#...###.#.....#...#...#...###...#.#.#.#.#.....# +#.#.#####.#.#######.#.###.#.###.#.#####.###.#.###############.###.###.#.#########.#.#####.###.#.#####.#.#####.###.#.#.#####.###.#.#.#.#.##### +#.#...#...#.......#.#...#.#...#.#...###...#.#.#...#.....#.....#...#...#.#...#.....#...#...#...#.....#.#.....#...#.#.#.#...#.#...#...#.#.....# +#.###.#.#########.#.###.#.###.#.###.#####.#.#.#.#.#.###.#.#####.###.###.#.#.#.#######.#.###.#######.#.#####.###.#.#.#.#.#.#.#.#######.#####.# +#...#.#...#...#...#...#...#...#.#...#.....#.#.#.#.#...#.#.#.....#...#...#.#.#.#.......#.#...#...#...#.#...#...#.#.#.#...#.#.#.#.......#...#.# +###.#.###.#.#.#.#####.#####.###.#.###.#####.#.#.#.###.#.#.#.#####.###.###.#.#.#.#######.#.###.#.#.###.#.#.###.#.#.#.#####.#.#.#.#######.#.#.# +###...###...#...#####.......###...###.......#...#.....#...#.......###.....#...#.........#.....#...###...#.....#...#.......#...#.........#...# +############################################################################################################################################# diff --git a/src/test/resources/2024/input_20_test.txt b/src/test/resources/2024/input_20_test.txt new file mode 100644 index 00000000..e69de29b