From 9a0bc181cf683a52ef52221c94db52206864ff52 Mon Sep 17 00:00:00 2001 From: Andi Lau Date: Wed, 25 Dec 2024 16:21:40 +0100 Subject: [PATCH] Day 25: Code Chronicle --- README.md | 1 + src/main/kotlin/days/Day25.kt | 37 + src/main/resources/input_day_25.txt | 3999 +++++++++++++++++++++++++++ src/test/kotlin/SolutionsTest.kt | 1 + src/test/kotlin/days/Day25Test.kt | 63 + 5 files changed, 4101 insertions(+) create mode 100644 src/main/kotlin/days/Day25.kt create mode 100644 src/main/resources/input_day_25.txt create mode 100644 src/test/kotlin/days/Day25Test.kt diff --git a/README.md b/README.md index 16cfdb5..e4f49d3 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Advent of Code is an Advent calendar of small programming puzzles by [Eric Wastl - Day 14: [Restroom Redoubt](https://adventofcode.com/2024/day/14) -- [Day14.kt](https://github.com/andilau/advent-of-code-2024/blob/main/src/main/kotlin/days/Day14.kt) - Day 18: [RAM Run](https://adventofcode.com/2024/day/18) -- [Day18.kt](https://github.com/andilau/advent-of-code-2024/blob/main/src/main/kotlin/days/Day18.kt) - Day 22: [Monkey Market](https://adventofcode.com/2024/day/22) -- [Day22.kt](https://github.com/andilau/advent-of-code-2024/blob/main/src/main/kotlin/days/Day22.kt) +- Day 25: [Day 25: Code Chronicle](https://adventofcode.com/2024/day/25) -- [Day25.kt](https://github.com/andilau/advent-of-code-2024/blob/main/src/main/kotlin/days/Day25.kt) ### Features diff --git a/src/main/kotlin/days/Day25.kt b/src/main/kotlin/days/Day25.kt new file mode 100644 index 0000000..4133900 --- /dev/null +++ b/src/main/kotlin/days/Day25.kt @@ -0,0 +1,37 @@ +package days + +@AdventOfCodePuzzle( + name = "Code Chronicle", + url = "https://adventofcode.com/2024/day/25", + date = Date(day = 25, year = 2024) +) +class Day25(val input: String) : Puzzle { + private val securities: List = input.split("\n\n").map { Security.from(it) } + + override fun partOne(): Int = securities + .filterIsInstance() + .flatMap { key -> securities.filterIsInstance().map { lock -> key to lock } } + .count { (lock, key) -> lock.signature.zip(key.signatur).all { (l, p) -> l + p <= 5 } } + + override fun partTwo() = Unit + + sealed class Security() { + data class Lock(val signature: List) : Security() + data class Key(val signatur: List) : Security() + + companion object { + fun from(input: String): Security { + val lines = input.lines() + return when { + lines.first().all { it == '#' } -> Lock(pivot(lines.drop(1)).map { it.count { it == '#' } }) + lines.last().all { it == '#' } -> Key(pivot(lines.dropLast(1)).map { it.count { it == '#' } }) + else -> error("Something else") + } + } + + private fun pivot(list: List): List { + return list[0].indices.map { col -> list.map { it[col] }.joinToString("") } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/input_day_25.txt b/src/main/resources/input_day_25.txt new file mode 100644 index 0000000..e77b6ab --- /dev/null +++ b/src/main/resources/input_day_25.txt @@ -0,0 +1,3999 @@ +..... +..... +.#... +##... +###.# +###.# +##### + +##### +##.## +.#.#. +...#. +..... +..... +..... + +##### +##### +##.## +##.## +.#.## +...#. +..... + +..... +#.#.. +####. +##### +##### +##### +##### + +..... +..... +...#. +...#. +.#.#. +.#### +##### + +..... +...#. +#..#. +##.#. +##### +##### +##### + +##### +#.### +...## +...#. +...#. +..... +..... + +##### +#.### +..##. +..#.. +..... +..... +..... + +##### +##### +####. +.##.. +.##.. +.#... +..... + +##### +##### +.###. +..##. +...#. +...#. +..... + +..... +..... +#.... +#.#.# +#.#.# +#.### +##### + +##### +##### +##.## +#..## +#..#. +..... +..... + +..... +..... +#...# +##..# +##..# +###.# +##### + +##### +#.#.# +#.#.# +#.#.. +#.#.. +..#.. +..... + +##### +.##.# +.#... +.#... +.#... +..... +..... + +..... +....# +#...# +#.#.# +#.### +##### +##### + +..... +#.... +##... +##.#. +##.#. +##### +##### + +##### +.#.#. +.#... +..... +..... +..... +..... + +##### +#.### +#.### +#.##. +#.##. +#..#. +..... + +##### +#.### +#.#.# +#.#.# +#...# +....# +..... + +##### +.#### +.##.# +.##.# +..#.# +..#.. +..... + +..... +.#... +##.#. +##.## +##### +##### +##### + +..... +..... +.#..# +.#..# +###.# +###.# +##### + +..... +..#.. +..#.. +.##.. +.##.# +##### +##### + +..... +#...# +##..# +###.# +###.# +###.# +##### + +##### +#.### +#.#.# +..... +..... +..... +..... + +..... +..... +..... +..#.# +..#.# +#.### +##### + +..... +...#. +.#.#. +##.#. +####. +####. +##### + +##### +##### +####. +.###. +.##.. +..#.. +..... + +##### +#.### +#.##. +..#.. +..... +..... +..... + +..... +...#. +...## +...## +#.### +#.### +##### + +..... +....# +....# +#..## +#.### +#.### +##### + +##### +.###. +..##. +..##. +...#. +..... +..... + +##### +##.#. +##.#. +##.#. +##.#. +.#... +..... + +..... +.#... +.#... +.#.#. +.#.#. +.#.#. +##### + +##### +.#### +.##.# +.#..# +.#... +..... +..... + +..... +.#.#. +.#.#. +.#.## +##### +##### +##### + +..... +..... +#.... +##... +###.. +###.# +##### + +##### +##.## +##..# +##..# +.#... +..... +..... + +..... +..... +#...# +#.#.# +##### +##### +##### + +..... +..#.# +#.#.# +#.### +##### +##### +##### + +..... +..#.. +#.#.. +#.#.. +###.# +###.# +##### + +##### +.#### +..### +..#.# +..#.. +..... +..... + +##### +##### +##### +.##.# +..#.. +..... +..... + +##### +####. +##.#. +#..#. +...#. +..... +..... + +..... +..#.. +.##.. +.##.. +.##.# +###.# +##### + +##### +###.# +.##.# +.#... +.#... +.#... +..... + +##### +####. +#.##. +#.##. +#..#. +..... +..... + +..... +.#..# +.#..# +.#.## +.#.## +.#.## +##### + +##### +##### +##### +###.# +.#..# +..... +..... + +..... +...#. +...#. +.#.#. +.#.#. +.#### +##### + +..... +..... +..... +...#. +..##. +#.### +##### + +##### +.#### +.###. +.###. +.#.#. +.#... +..... + +##### +##### +##.## +#..## +....# +..... +..... + +..... +#...# +#...# +#..## +#.### +#.### +##### + +..... +.#... +.#... +.#.#. +.#.## +##.## +##### + +##### +##### +##### +.###. +..#.. +..#.. +..... + +..... +...#. +.#.#. +.#.#. +.###. +.###. +##### + +##### +##### +##### +##.## +.#.## +...#. +..... + +..... +..... +.#..# +##..# +##.## +##### +##### + +..... +..... +#...# +#...# +##.## +##### +##### + +##### +####. +.###. +.#.#. +.#.#. +..... +..... + +##### +.#### +.#.#. +.#.#. +.#... +..... +..... + +..... +..... +..#.. +..#.# +..#.# +#.### +##### + +##### +##### +##.## +##..# +##..# +#...# +..... + +##### +##### +#.### +#.#.# +#.... +#.... +..... + +##### +##### +.##.# +.##.. +.#... +..... +..... + +##### +##.## +#..## +#..## +#..## +...#. +..... + +##### +##### +##.## +##..# +.#... +.#... +..... + +##### +#.#.# +#.#.. +#.#.. +#.... +..... +..... + +..... +..#.. +..##. +..### +#.### +##### +##### + +##### +##.## +##..# +##... +##... +#.... +..... + +##### +.#.## +...## +...## +...#. +..... +..... + +##### +.#### +.##.# +.#..# +.#... +.#... +..... + +..... +.#.#. +.#.#. +##### +##### +##### +##### + +##### +##### +.#### +.###. +..#.. +..... +..... + +##### +##### +.#.#. +.#.#. +.#.#. +.#... +..... + +##### +.#### +.##.# +.##.. +..#.. +..#.. +..... + +##### +##### +##### +###.# +###.# +.#... +..... + +##### +.#.## +.#..# +.#..# +..... +..... +..... + +..... +#.... +##..# +##..# +##.## +##### +##### + +##### +#.#.# +#.#.# +#.#.# +#...# +#.... +..... + +..... +.#... +.##.# +.##.# +.##.# +.##.# +##### + +..... +.#... +.##.. +.##.. +.###. +.###. +##### + +##### +.###. +.###. +.#.#. +...#. +...#. +..... + +..... +.#... +.##.# +.##.# +.#### +##### +##### + +..... +.#.#. +.#.#. +.#.#. +.#.#. +.#### +##### + +..... +.#.#. +.#.#. +.#.#. +.#.#. +.###. +##### + +..... +..#.. +..#.. +..##. +.###. +.#### +##### + +..... +...#. +#..#. +#..#. +##.#. +##.#. +##### + +..... +..... +.#... +.##.. +.##.. +###.# +##### + +..... +..#.. +..##. +#.### +##### +##### +##### + +..... +...#. +..### +.#### +##### +##### +##### + +##### +##### +####. +####. +.#.#. +.#... +..... + +..... +#.#.. +#.##. +#.##. +####. +####. +##### + +..... +..... +.#... +.#.#. +.#### +##### +##### + +..... +.#... +.#.#. +.#.#. +.#.## +##### +##### + +..... +..#.. +..#.. +.##.. +.##.. +###.# +##### + +..... +..#.. +..#.. +..#.. +.##.# +.#### +##### + +##### +##### +###.# +#.#.# +#.#.# +#.#.# +..... + +##### +##### +##### +#.#.# +#.#.. +..... +..... + +##### +##### +##.## +.#.#. +.#.#. +.#.#. +..... + +..... +..#.# +..#.# +..#.# +..### +#.### +##### + +..... +..... +..... +...#. +.#.## +##### +##### + +..... +..#.. +.##.. +###.# +###.# +##### +##### + +..... +.#... +.#... +.#... +.##.# +##### +##### + +##### +#.### +...## +...#. +..... +..... +..... + +##### +####. +#.##. +..##. +...#. +..... +..... + +..... +#.#.. +#.##. +#.### +##### +##### +##### + +..... +#.... +#..#. +##.#. +##.#. +##.## +##### + +##### +##### +##### +#.### +#..#. +#.... +..... + +##### +####. +.##.. +.##.. +.#... +..... +..... + +##### +##### +.##.# +..#.# +..... +..... +..... + +##### +##### +##### +#.#.# +#.#.# +#...# +..... + +##### +###.# +#.#.# +#...# +#...# +....# +..... + +..... +..... +..#.. +.##.# +.##.# +##### +##### + +##### +###.# +###.# +###.# +##..# +.#..# +..... + +##### +####. +##.#. +.#... +..... +..... +..... + +##### +.#.## +.#..# +..... +..... +..... +..... + +..... +....# +#..## +#..## +#.### +##### +##### + +..... +..... +...#. +...#. +#.##. +##### +##### + +##### +##.## +##.## +.#.#. +.#.#. +.#... +..... + +##### +#.### +..#.# +..#.# +..#.. +..#.. +..... + +##### +##### +##### +.##.# +..#.. +..#.. +..... + +..... +....# +.#..# +##..# +###.# +###.# +##### + +##### +#.### +#.### +#.##. +#.#.. +..... +..... + +##### +###.# +##... +.#... +.#... +..... +..... + +##### +##### +.#### +.#### +.##.# +..#.. +..... + +##### +##### +.##.# +.##.# +.#..# +..... +..... + +..... +.#... +.#... +.#..# +##.## +##### +##### + +##### +###.# +###.. +##... +.#... +.#... +..... + +..... +..... +..#.. +..##. +#.##. +##### +##### + +##### +#.### +#..#. +#..#. +#..#. +#.... +..... + +##### +##.## +##.#. +##.#. +#..#. +#..#. +..... + +..... +...#. +...#. +...#. +#.##. +#.##. +##### + +..... +#.... +#.... +##... +##.#. +##.## +##### + +..... +.#... +.#... +###.. +####. +####. +##### + +..... +#.... +#..#. +##.#. +####. +##### +##### + +..... +.#... +###.# +###.# +##### +##### +##### + +..... +...#. +..##. +..##. +.###. +##### +##### + +##### +##### +##.## +#..#. +#..#. +#.... +..... + +..... +#.... +#.... +#.... +#.#.. +#.##. +##### + +..... +..... +.#.#. +##.#. +##.#. +##.## +##### + +##### +.#### +.#### +.#.## +...#. +..... +..... + +##### +#.### +#.##. +#.#.. +..#.. +..... +..... + +..... +....# +#...# +#.#.# +#.#.# +##### +##### + +..... +#..#. +#.### +#.### +#.### +#.### +##### + +..... +..#.. +..#.. +..##. +..##. +.###. +##### + +..... +..... +..#.. +..#.. +#.#.. +###.# +##### + +..... +...#. +...## +...## +..### +#.### +##### + +##### +##### +####. +####. +##.#. +.#.#. +..... + +##### +.#### +.###. +.#.#. +.#.#. +...#. +..... + +##### +####. +#.#.. +#.#.. +#.#.. +#.... +..... + +##### +#.##. +#..#. +...#. +...#. +...#. +..... + +##### +###.# +#.#.# +..#.. +..#.. +..... +..... + +##### +##.## +#..## +#..## +#..#. +#..#. +..... + +..... +..... +....# +.#.## +.#### +.#### +##### + +..... +..#.# +..#.# +#.#.# +#.#.# +#.### +##### + +..... +.#.#. +.#.#. +.###. +.###. +####. +##### + +..... +..#.. +..#.. +..#.# +#.#.# +##### +##### + +##### +.#.## +.#.#. +.#.#. +.#.#. +.#... +..... + +##### +###.# +.##.# +.#..# +..... +..... +..... + +##### +#.### +#..## +#..## +...## +....# +..... + +##### +##.## +.#..# +.#..# +.#..# +.#..# +..... + +##### +#.#.# +#.#.. +..#.. +..... +..... +..... + +..... +..... +#.#.. +###.. +###.# +###.# +##### + +##### +.##.# +.##.# +.##.# +.##.. +.#... +..... + +..... +..... +#..#. +#.##. +##### +##### +##### + +##### +##### +####. +####. +###.. +#.#.. +..... + +..... +#.... +#.... +#...# +#.#.# +#.### +##### + +##### +##### +####. +#.#.. +#.#.. +#.... +..... + +##### +##### +##### +##### +#.#.# +..#.. +..... + +##### +##### +###.# +##..# +##..# +#.... +..... + +##### +###.# +###.# +##..# +##..# +.#..# +..... + +..... +.#... +.#..# +.##.# +###.# +##### +##### + +##### +####. +##.#. +.#.#. +.#.#. +.#.#. +..... + +##### +####. +####. +.###. +.###. +..#.. +..... + +##### +.#### +..### +..### +..##. +...#. +..... + +..... +....# +....# +....# +..#.# +#.#.# +##### + +..... +..... +...#. +..##. +.###. +.#### +##### + +##### +##### +##.## +##.## +#...# +#.... +..... + +##### +.#.## +.#.## +.#.#. +.#.#. +..... +..... + +##### +#.### +#.##. +#.#.. +..... +..... +..... + +##### +##### +#.### +..#.# +..#.# +..#.. +..... + +..... +..... +..... +.#.#. +.#.#. +####. +##### + +..... +#..#. +#..#. +#..#. +#..#. +#.### +##### + +..... +..... +..... +.#... +.##.# +##### +##### + +##### +##### +#.### +..### +..### +...#. +..... + +..... +..... +.#..# +###.# +##### +##### +##### + +..... +..... +.#... +.#..# +##..# +###.# +##### + +..... +..... +.#... +.#... +.#.#. +.###. +##### + +##### +####. +.###. +..#.. +..#.. +..... +..... + +##### +###.# +##..# +##..# +.#..# +..... +..... + +..... +#.... +#..#. +#.##. +#.##. +####. +##### + +..... +..... +#..#. +#..#. +#..#. +#.##. +##### + +..... +.#... +.#..# +.#.## +.#### +##### +##### + +..... +..#.. +#.#.. +#.#.# +#.#.# +#.#.# +##### + +##### +##.## +##..# +#...# +#...# +..... +..... + +..... +#.#.# +#.#.# +#.#.# +#.#.# +#.### +##### + +..... +..#.# +..#.# +#.### +##### +##### +##### + +##### +.##.# +.##.# +..#.. +..... +..... +..... + +##### +#.### +#.### +#.##. +#..#. +...#. +..... + +##### +##### +.#.## +...## +...#. +..... +..... + +##### +##### +.###. +.##.. +.##.. +.#... +..... + +..... +..... +.#... +.#..# +.##.# +.##.# +##### + +..... +..... +..#.. +..##. +#.##. +#.### +##### + +..... +..... +.#... +.#..# +.##.# +###.# +##### + +..... +..#.. +..#.# +.##.# +.##.# +.##.# +##### + +##### +#.### +..### +..### +...## +....# +..... + +..... +.#..# +.#..# +.#..# +.#.## +##### +##### + +..... +...#. +.#.#. +.#.#. +##.## +##### +##### + +##### +####. +###.. +#.#.. +#.#.. +#.... +..... + +..... +..... +..... +....# +#.#.# +#.### +##### + +##### +###.# +.##.# +.##.# +..#.# +....# +..... + +##### +###.# +###.# +###.# +.##.# +.#..# +..... + +##### +##### +##.## +##.## +##..# +.#... +..... + +..... +#.... +#..#. +#..## +#.### +##### +##### + +..... +....# +....# +...## +.#.## +.#.## +##### + +##### +###.# +#.#.# +..#.# +..#.. +..... +..... + +..... +#.... +#...# +#.#.# +###.# +###.# +##### + +##### +##### +.###. +.##.. +..#.. +..#.. +..... + +##### +##.## +##.#. +##.#. +##.#. +.#.#. +..... + +..... +.#... +.#..# +.#..# +###.# +##### +##### + +..... +....# +#..## +#.### +#.### +##### +##### + +..... +.#... +###.. +###.# +###.# +###.# +##### + +##### +#.### +#.##. +#.##. +...#. +..... +..... + +..... +...#. +.#.#. +.###. +.#### +##### +##### + +##### +####. +#.##. +..#.. +..#.. +..... +..... + +..... +..... +....# +#..## +##.## +##.## +##### + +##### +#.### +..#.# +..#.# +..... +..... +..... + +##### +.#### +.##.# +.#..# +.#..# +.#..# +..... + +##### +###.# +##..# +##..# +#...# +....# +..... + +##### +##### +###.# +###.# +#.#.# +..... +..... + +..... +..... +..#.. +#.#.. +#.#.. +###.# +##### + +##### +##### +#.### +#.##. +#..#. +#..#. +..... + +##### +##.## +##.#. +#..#. +#..#. +#..#. +..... + +..... +..... +#...# +#..## +##.## +##.## +##### + +..... +..#.. +#.##. +#.##. +#.##. +####. +##### + +##### +##### +####. +.###. +.#.#. +.#... +..... + +..... +#.... +#...# +#..## +##.## +##### +##### + +##### +#.##. +#.#.. +#.#.. +#.#.. +#.#.. +..... + +##### +##.#. +.#.#. +.#.#. +..... +..... +..... + +..... +....# +..#.# +#.#.# +###.# +###.# +##### + +##### +.#### +.#### +..### +..##. +...#. +..... + +..... +#.#.. +#.#.. +#.#.# +#.#.# +###.# +##### + +..... +#.... +#.... +#.#.. +###.# +###.# +##### + +..... +.#... +.##.. +###.. +###.. +####. +##### + +..... +.#..# +.#..# +.#.## +##.## +##### +##### + +..... +..... +..... +..#.. +#.#.. +#.#.# +##### + +..... +..#.. +..#.. +.##.# +.##.# +.##.# +##### + +..... +..#.. +..#.. +#.#.# +#.#.# +#.#.# +##### + +##### +##### +##### +##### +.#### +..#.# +..... + +..... +..... +....# +#...# +#...# +##.## +##### + +##### +##.## +##..# +#...# +#.... +..... +..... + +..... +...#. +...#. +...#. +#..#. +#.### +##### + +..... +..#.# +..#.# +#.#.# +#.#.# +#.#.# +##### + +..... +..... +.#.#. +.#.#. +.###. +##### +##### + +##### +##### +###.# +##..# +#.... +#.... +..... + +..... +..... +..#.. +..##. +..##. +#.### +##### + +##### +##### +#.### +#.#.# +#.#.. +..#.. +..... + +..... +.#... +.#..# +##..# +##..# +###.# +##### + +##### +##### +#.##. +#.##. +...#. +..... +..... + +##### +##### +##### +##.## +##.#. +.#.#. +..... + +..... +#.#.. +#.#.. +###.. +###.# +###.# +##### + +##### +#.### +#.##. +...#. +...#. +...#. +..... + +##### +.#### +.#### +.###. +..#.. +..... +..... + +..... +#.... +#..#. +##.#. +##.#. +##### +##### + +..... +...#. +...#. +...## +#.### +##### +##### + +##### +##### +.#### +.#### +..##. +..#.. +..... + +##### +##### +####. +#.##. +#..#. +#..#. +..... + +##### +##.## +##.## +##..# +#...# +#...# +..... + +..... +..... +..#.. +..#.. +..#.. +.##.# +##### + +##### +#.#.# +#.#.# +#.#.# +#.#.. +#.... +..... + +##### +##### +#.#.# +#.#.. +#.#.. +..... +..... + +##### +##.## +##.## +.#.## +.#.## +...#. +..... + +##### +##.## +##.## +##..# +.#..# +..... +..... + +..... +.#... +.##.# +.##.# +.#### +.#### +##### + +..... +#..#. +#..#. +##.## +##.## +##### +##### + +##### +.#.## +....# +....# +..... +..... +..... + +..... +..... +..... +....# +...## +.#.## +##### + +##### +####. +.#.#. +.#.#. +...#. +...#. +..... + +..... +..... +..#.# +#.#.# +###.# +##### +##### + +..... +.#... +.#.#. +.#.## +.#.## +##.## +##### + +##### +###.# +##..# +#.... +..... +..... +..... + +##### +###.# +#.#.# +#...# +#.... +#.... +..... + +##### +##### +.##.# +.##.# +..#.. +..#.. +..... + +##### +#.### +#.### +#.### +#..#. +...#. +..... + +##### +.#### +.#### +.#### +.#.## +....# +..... + +..... +....# +...## +...## +.#.## +.#### +##### + +##### +#.##. +#.##. +#.#.. +#.#.. +..... +..... + +..... +..... +...#. +...## +#.### +##### +##### + +..... +..... +..... +#..#. +##.#. +##### +##### + +..... +#.... +#..#. +#.##. +#.### +#.### +##### + +##### +#.### +#..## +#..## +#...# +#.... +..... + +##### +##### +####. +.#.#. +...#. +..... +..... + +##### +###.# +#.#.# +#.#.# +#.#.. +..... +..... + +##### +##### +#.#.# +#.#.. +#.#.. +#.#.. +..... + +..... +..... +#.... +#..#. +##.## +##.## +##### + +..... +..... +#.#.# +#.#.# +#.### +##### +##### + +##### +.#### +.##.# +.#... +.#... +..... +..... + +##### +##.## +##.## +.#..# +....# +....# +..... + +##### +#.### +#.#.# +#.#.# +#.#.# +#.#.# +..... + +..... +.#.#. +.#.#. +.#.#. +.###. +.###. +##### + +..... +.#... +.#..# +.#.## +##### +##### +##### + +..... +..... +..... +..#.. +..#.. +#.#.# +##### + +..... +..... +..#.. +#.#.# +#.#.# +#.### +##### + +##### +#.##. +#.#.. +#.#.. +#.#.. +#.... +..... + +##### +##.## +##.#. +#..#. +#.... +#.... +..... + +..... +....# +.#..# +.#..# +.##.# +.#### +##### + +..... +.#... +.#... +.##.. +.##.. +.###. +##### + +..... +#...# +#...# +##.## +##.## +##### +##### + +..... +..... +..#.. +.###. +####. +##### +##### + +..... +..... +..... +..... +..#.. +#.##. +##### + +..... +...#. +.#.## +.#.## +.#.## +##.## +##### + +##### +##### +##### +##.## +##..# +#...# +..... + +##### +#.##. +#.##. +#.##. +...#. +..... +..... + +..... +#.#.. +#.#.. +###.. +####. +####. +##### + +..... +..... +#...# +#.#.# +###.# +###.# +##### + +..... +..... +..... +#...# +##..# +##.## +##### + +..... +..... +..... +..... +#..#. +##.#. +##### + +##### +###.# +#.#.# +#.#.. +#.#.. +..#.. +..... + +..... +.#..# +##..# +##.## +##### +##### +##### + +..... +.#..# +.#..# +.#..# +###.# +##### +##### + +..... +#.... +##..# +##..# +###.# +##### +##### + +##### +.#### +.##.# +.##.# +..#.# +..... +..... + +##### +##### +##### +####. +.#.#. +..... +..... + +##### +##### +#.### +..##. +..#.. +..... +..... + +..... +..... +#..#. +#..#. +#.##. +####. +##### + +..... +..... +....# +#.#.# +#.#.# +#.### +##### + +..... +...#. +...#. +..##. +#.##. +##### +##### + +..... +..#.# +..#.# +..#.# +.##.# +.##.# +##### + +##### +####. +###.. +###.. +#.#.. +#.#.. +..... + +##### +#.#.# +#.#.# +#.#.# +#...# +#...# +..... + +##### +##### +##.## +##.## +#..## +#..#. +..... + +##### +####. +####. +.##.. +.##.. +.#... +..... + +..... +..#.# +..#.# +..#.# +..#.# +#.#.# +##### + +..... +..... +....# +#..## +#..## +##.## +##### + +..... +..#.. +#.##. +#.##. +#.##. +##### +##### + +..... +..#.# +..#.# +.##.# +.#### +.#### +##### + +..... +...#. +...#. +..##. +#.##. +#.##. +##### + +##### +##### +.##.# +.#..# +.#..# +..... +..... + +##### +##.## +##.## +##.## +.#.## +...#. +..... + +..... +.#.#. +.#.#. +.#.## +.#.## +##### +##### + +..... +..... +.#.#. +.#.#. +.#.## +##### +##### + +..... +#.#.. +#.##. +#.##. +####. +##### +##### + +..... +..#.. +.##.. +.###. +####. +##### +##### + +##### +##### +##### +####. +##.#. +.#.#. +..... + +##### +##.## +##.## +##.## +##..# +#...# +..... + +..... +..#.. +..#.# +..### +..### +#.### +##### + +..... +#.... +#.... +#.... +#..#. +##.## +##### + +##### +##### +.###. +.#.#. +...#. +..... +..... + +..... +#..#. +#..## +#..## +#.### +#.### +##### + +##### +##### +#.### +...#. +..... +..... +..... + +##### +#.### +#.### +#.### +#.#.# +#...# +..... + +..... +..... +#.... +#.#.. +####. +##### +##### + +##### +##### +#.#.# +....# +....# +....# +..... + +##### +.#### +.#.#. +.#.#. +.#... +.#... +..... + +##### +##### +##### +.#.## +....# +..... +..... + +##### +##.## +#..## +...## +...#. +..... +..... + +##### +##.## +.#..# +.#..# +....# +....# +..... + +##### +##### +.#### +.#.#. +...#. +...#. +..... + +..... +.#... +.#.#. +##.#. +##.## +##.## +##### + +..... +#.... +#..#. +#.##. +#.### +##### +##### + +##### +.###. +..##. +..##. +...#. +...#. +..... + +##### +.#.## +...## +...## +...#. +...#. +..... + +..... +#.... +#.... +##..# +##.## +##### +##### + +##### +##### +.###. +.#.#. +.#.#. +..... +..... + +..... +..... +#...# +#.#.# +#.#.# +###.# +##### + +..... +..#.. +..##. +..##. +..### +.#### +##### + +..... +..... +....# +#...# +#.#.# +#.### +##### + +..... +...#. +...#. +.#.#. +##.#. +####. +##### + +##### +##.## +.#.## +.#.#. +...#. +...#. +..... + +..... +..#.. +#.#.# +###.# +##### +##### +##### + +..... +..... +..... +#.... +#...# +#.#.# +##### + +##### +##### +##.## +##.## +#..#. +#.... +..... + +##### +#.### +#.### +#..## +....# +....# +..... + +..... +..... +...#. +...#. +...## +.#.## +##### + +##### +##### +##### +#.#.# +#...# +..... +..... + +..... +.#... +.#.#. +.#.#. +.###. +##### +##### + +..... +.#... +.#.#. +.#.## +.#### +##### +##### + +##### +##### +####. +.##.. +..#.. +..#.. +..... + +##### +#.##. +#..#. +#..#. +#..#. +#..#. +..... + +..... +..#.. +..##. +.###. +####. +##### +##### + +..... +..... +....# +.#..# +.#..# +.##.# +##### + +##### +.#### +.#### +..#.# +....# +..... +..... + +##### +##.## +.#.## +...## +....# +....# +..... + +..... +..... +#..#. +#..## +#.### +#.### +##### + +..... +..#.. +#.#.. +#.##. +####. +####. +##### + +..... +#.... +#..#. +#..## +##.## +##### +##### + +##### +###.# +###.# +#.#.# +..#.# +..#.# +..... + +..... +.#.#. +.#.## +##### +##### +##### +##### + +..... +#.#.. +###.. +###.# +###.# +##### +##### + +..... +....# +.#..# +.#..# +###.# +##### +##### + +..... +..... +..... +..#.. +.###. +.#### +##### + +..... +.#... +.#..# +.##.# +.##.# +###.# +##### + +##### +.###. +.##.. +.##.. +.#... +..... +..... + +..... +....# +.#.## +##.## +##### +##### +##### + +##### +##.## +##.## +##.#. +.#... +..... +..... + +##### +##### +##### +#.##. +..##. +...#. +..... + +..... +...#. +.#.## +##.## +##.## +##### +##### + +..... +#.#.# +##### +##### +##### +##### +##### + +##### +.#### +.#### +..### +..#.# +..#.# +..... + +##### +##### +#.#.# +#.#.# +#.#.# +..... +..... + +##### +##### +##### +.###. +.###. +.#.#. +..... + +..... +.#... +##... +###.. +###.. +####. +##### + +..... +..... +#.... +#.... +#...# +##.## +##### + +..... +.#... +.#... +##.#. +##### +##### +##### + +##### +##.## +.#.#. +.#.#. +..... +..... +..... + +##### +#.### +#.##. +#..#. +#..#. +#..#. +..... + +..... +.#... +##..# +###.# +###.# +###.# +##### + +##### +.#.#. +..... +..... +..... +..... +..... + +..... +...#. +...#. +..##. +.#### +.#### +##### + +..... +....# +..#.# +.##.# +##### +##### +##### + +..... +.#... +.#.#. +####. +####. +####. +##### + +..... +..... +#...# +#..## +#..## +#.### +##### + +..... +#..#. +#.### +#.### +#.### +##### +##### + +..... +..... +#..#. +#..#. +##.#. +##.## +##### + +..... +.#... +.##.. +.##.. +.##.# +##### +##### + +..... +#.... +#...# +#..## +#..## +#.### +##### + +..... +..... +.#.#. +.#.## +.#### +##### +##### + +..... +..... +.#... +.#... +.#..# +###.# +##### + +..... +...#. +...## +#.### +#.### +##### +##### + +##### +.#### +..##. +..##. +..#.. +..#.. +..... + +##### +####. +#.#.. +..... +..... +..... +..... + +##### +#.### +#.### +#..## +#..#. +..... +..... + +##### +##.## +##.## +#..#. +#..#. +#..#. +..... + +##### +###.# +###.. +###.. +###.. +.#... +..... + +##### +##.## +##.## +.#..# +.#... +..... +..... + +##### +##### +#.### +#.##. +#..#. +...#. +..... + +..... +.#..# +###.# +###.# +###.# +###.# +##### + +..... +....# +.#.## +.#.## +.#.## +.#### +##### + +..... +.#... +.#... +.#... +.#..# +.##.# +##### + +##### +##.## +##..# +.#... +.#... +..... +..... + +##### +####. +####. +#.##. +#..#. +#.... +..... + +##### +##.#. +#..#. +#..#. +...#. +..... +..... + +..... +.#... +.#..# +.#..# +.##.# +###.# +##### + +##### +##.## +##.#. +.#.#. +.#.#. +.#... +..... + +..... +..... +.#..# +##.## +##.## +##### +##### + +##### +.#### +.##.# +.##.# +.##.# +.#..# +..... + +##### +#.### +#.##. +...#. +...#. +..... +..... + +..... +..... +..... +..#.# +..#.# +#.#.# +##### + +##### +##.#. +#..#. +#..#. +#..#. +..... +..... + +..... +..... +#.#.. +#.#.# +#.#.# +#.### +##### + +..... +#.... +##... +##... +##... +###.# +##### + +##### +###.# +#.#.# +....# +....# +....# +..... + +##### +##### +.#### +..### +...#. +...#. +..... + +##### +#.### +#.### +#.#.# +....# +..... +..... + +##### +#.### +..##. +..##. +..##. +...#. +..... + +##### +##### +##### +##.## +##.## +.#..# +..... + +..... +.#... +.#... +.#.#. +##.#. +##### +##### + +..... +..... +#.#.# +###.# +##### +##### +##### + +..... +..... +.#.#. +.#.## +.#.## +.#### +##### + +..... +....# +.#..# +.#.## +.#### +##### +##### + +..... +..... +...#. +.#.#. +.#.#. +.#.## +##### + +##### +##### +##### +###.# +###.. +#.#.. +..... + +##### +.#### +.###. +..#.. +..#.. +..... +..... + +##### +###.# +.##.. +.##.. +.#... +.#... +..... + +..... +.#.#. +.#.#. +.#.## +.#### +##### +##### + +##### +##### +###.# +.##.. +.#... +..... +..... + +##### +#.### +#.#.# +#.#.# +#.... +..... +..... + +##### +##### +##### +##.## +##.#. +.#... +..... + +##### +.###. +.###. +.##.. +.##.. +.#... +..... + +##### +.#### +.#### +.#.#. +.#.#. +.#... +..... + +##### +#.### +#.### +#..## +#..## +...#. +..... + +##### +#.### +#..## +#..## +#..## +#...# +..... + +##### +.###. +.##.. +..#.. +..#.. +..#.. +..... + +##### +###.# +###.# +###.# +.#... +..... +..... + +##### +##### +#.### +..##. +...#. +...#. +..... + +##### +##.## +##..# +.#..# +.#..# +..... +..... + +##### +##.## +.#.## +.#.## +.#.#. +.#.#. +..... + +##### +###.# +###.# +#.#.# +#...# +#.... +..... + +..... +..#.# +..#.# +.##.# +###.# +##### +##### + +##### +#.#.# +#.#.# +#.... +..... +..... +..... + +##### +#.#.# +#.#.# +#.#.# +#.#.# +....# +..... + +..... +..#.. +..##. +.#### +.#### +##### +##### + +##### +#.### +#.#.# +#.#.# +#.#.. +#.... +..... + +..... +..#.# +.##.# +.##.# +.##.# +.#### +##### + +##### +#.#.# +#.#.# +#.#.. +..#.. +..... +..... + +..... +..... +..... +..#.. +..##. +.#### +##### + +..... +#...# +#..## +##.## +##.## +##### +##### + +##### +####. +#.##. +#.#.. +#.#.. +..... +..... + +##### +##### +##.## +##.#. +##.#. +.#.#. +..... + +##### +##.## +#..## +#..## +....# +..... +..... + +..... +#.#.# +###.# +##### +##### +##### +##### + +..... +....# +.#..# +.#.## +.#.## +.#### +##### + +..... +#.#.. +#.#.# +#.#.# +#.### +#.### +##### + +##### +#.##. +#..#. +#..#. +#.... +..... +..... + +..... +.#... +.#... +##... +##... +###.# +##### + +##### +##### +#.### +#.### +..##. +...#. +..... + +..... +..... +#..#. +#.##. +#.### +##### +##### + +..... +..#.. +..#.. +..#.. +..#.. +.###. +##### + +..... +..#.. +..#.. +#.##. +#.### +#.### +##### + +##### +.##.# +.#... +.#... +.#... +.#... +..... + +..... +#.... +#.... +##... +###.# +###.# +##### + +..... +..... +..... +.#... +.#.#. +##.## +##### + +..... +...#. +#..#. +#.### +#.### +##### +##### + +..... +..... +..... +.#.#. +.#.#. +##### +##### + +##### +#.### +..### +..#.# +..... +..... +..... + +##### +##.## +##.#. +##... +.#... +.#... +..... + +..... +..#.. +..#.. +#.#.. +#.#.. +#.#.# +##### \ No newline at end of file diff --git a/src/test/kotlin/SolutionsTest.kt b/src/test/kotlin/SolutionsTest.kt index c5d6e3d..e82aa69 100644 --- a/src/test/kotlin/SolutionsTest.kt +++ b/src/test/kotlin/SolutionsTest.kt @@ -21,6 +21,7 @@ class SolutionsTest { Day14(InputReader.getInputAsList(14)) to Pair(214109808L, 7687), Day18(InputReader.getInputAsList(18)) to Pair(370, "65,6"), Day22(InputReader.getInputAsList(22)) to Pair(14869099597L, 1717), + Day25(InputReader.getInputAsString(25)) to Pair(3223, Unit), ) .map { (day, answers) -> DynamicTest.dynamicTest("${day.javaClass.simpleName} -> ${answers.first} / ${answers.second}") { diff --git a/src/test/kotlin/days/Day25Test.kt b/src/test/kotlin/days/Day25Test.kt new file mode 100644 index 0000000..1a82faf --- /dev/null +++ b/src/test/kotlin/days/Day25Test.kt @@ -0,0 +1,63 @@ +package days + +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.DisplayName +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test + +@DisplayName("Day 25") +class Day25Test { + val schematics = """ + ##### + .#### + .#### + .#### + .#.#. + .#... + ..... + + ##### + ##.## + .#.## + ...## + ...#. + ...#. + ..... + + ..... + #.... + #.... + #...# + #.#.# + #.### + ##### + + ..... + ..... + #.#.. + ###.. + ###.# + ###.# + ##### + + ..... + ..... + ..... + #.... + #.#.. + #.#.# + #####""".trimIndent() + + @Nested + @DisplayName("Part 1") + inner class Part1 { + + @Test + fun `How many unique lock-key pairs fit together without overlapping in any column`() { + assertThat(Day25(schematics).partOne()).isEqualTo(3) + } + + } + +} \ No newline at end of file