From d6cf3f1cbe0b1f0d649dc6a62bbf14916f50f081 Mon Sep 17 00:00:00 2001 From: Juris Date: Wed, 25 Dec 2024 07:19:13 +0200 Subject: [PATCH] 2024-25 Scala 2 --- scala2/src/main/resources/2024/25-test-00.txt | 40 +- scala2/src/main/resources/2024/25.txt | 4000 ++++++++++++++++- .../jurisk/adventofcode/y2024/Advent25.scala | 56 +- .../adventofcode/y2024/Advent25Spec.scala | 13 +- 4 files changed, 4072 insertions(+), 37 deletions(-) diff --git a/scala2/src/main/resources/2024/25-test-00.txt b/scala2/src/main/resources/2024/25-test-00.txt index a8b6c947..a53fe9bb 100644 --- a/scala2/src/main/resources/2024/25-test-00.txt +++ b/scala2/src/main/resources/2024/25-test-00.txt @@ -1 +1,39 @@ -noop \ No newline at end of file +##### +.#### +.#### +.#### +.#.#. +.#... +..... + +##### +##.## +.#.## +...## +...#. +...#. +..... + +..... +#.... +#.... +#...# +#.#.# +#.### +##### + +..... +..... +#.#.. +###.. +###.# +###.# +##### + +..... +..... +..... +#.... +#.#.. +#.#.# +##### \ No newline at end of file diff --git a/scala2/src/main/resources/2024/25.txt b/scala2/src/main/resources/2024/25.txt index a8b6c947..08ce55d4 100644 --- a/scala2/src/main/resources/2024/25.txt +++ b/scala2/src/main/resources/2024/25.txt @@ -1 +1,3999 @@ -noop \ No newline at end of file +##### +#.### +..### +..##. +...#. +..... +..... + +..... +.#.#. +.#.#. +.#.#. +.#.#. +.#.#. +##### + +##### +##### +#.### +#.#.# +..#.. +..#.. +..... + +..... +....# +#...# +#...# +##.## +##### +##### + +..... +.#..# +.#.## +.#### +##### +##### +##### + +..... +..#.. +..#.. +.##.# +###.# +###.# +##### + +..... +..... +....# +#.#.# +#.### +##### +##### + +..... +..... +..... +..... +...#. +.#.#. +##### + +##### +##.## +##.## +##.## +##.## +#...# +..... + +##### +##### +##### +##### +##.## +.#..# +..... + +..... +..... +..... +.#... +.#.#. +.#### +##### + +..... +#...# +#...# +##.## +##.## +##.## +##### + +##### +.#### +.#### +.###. +.#.#. +.#.#. +..... + +##### +#.#.# +#.#.# +#.#.# +#.#.# +#...# +..... + +##### +##### +.#### +..### +...#. +...#. +..... + +..... +#.... +#..#. +#..#. +#.##. +####. +##### + +##### +##.#. +##... +##... +##... +.#... +..... + +##### +##.## +##.#. +##... +.#... +.#... +..... + +##### +#.### +#..## +#..## +#..#. +...#. +..... + +..... +....# +....# +.#..# +.#..# +.##.# +##### + +..... +..... +..... +....# +..#.# +.##.# +##### + +##### +####. +###.. +##... +.#... +..... +..... + +##### +.###. +..##. +...#. +...#. +..... +..... + +##### +#.### +..### +..### +...#. +..... +..... + +..... +#.... +#.#.. +#.#.. +#.##. +##### +##### + +..... +..... +...#. +...#. +#..## +#.### +##### + +..... +.#... +.#.#. +.#### +.#### +##### +##### + +..... +....# +....# +..#.# +..#.# +#.### +##### + +##### +##### +.#### +.#.## +.#..# +.#..# +..... + +..... +.#... +.##.. +.##.. +.##.. +###.# +##### + +..... +#..#. +#..## +#.### +#.### +##### +##### + +##### +.###. +.###. +.#.#. +...#. +..... +..... + +..... +..... +#..#. +##.#. +##.#. +##### +##### + +##### +.#.## +.#.#. +...#. +...#. +...#. +..... + +##### +###.# +###.# +.#..# +.#..# +....# +..... + +..... +..... +..#.. +..#.# +..### +.#### +##### + +##### +##### +##### +##.#. +#.... +#.... +..... + +..... +#.#.. +###.# +###.# +##### +##### +##### + +..... +..... +.#... +.#..# +.#.## +##.## +##### + +..... +..... +....# +....# +.#.## +.#### +##### + +##### +##### +####. +##.#. +.#... +..... +..... + +..... +#.... +#.... +#.... +#.#.# +##### +##### + +##### +##### +####. +##.#. +#..#. +...#. +..... + +..... +..#.. +..#.# +#.### +##### +##### +##### + +##### +.###. +.###. +.###. +..#.. +..... +..... + +##### +##### +##### +.#### +.#.## +...#. +..... + +..... +..... +.#... +.#.#. +.#.#. +.#.#. +##### + +##### +#.#.# +#.#.# +#.... +#.... +..... +..... + +##### +##### +###.# +###.# +.#... +.#... +..... + +##### +##### +###.# +#.#.# +..#.# +....# +..... + +##### +#.### +#..## +...## +...## +...#. +..... + +..... +..... +.#.#. +.#.## +##.## +##.## +##### + +##### +####. +#.#.. +#.#.. +#.#.. +#.... +..... + +..... +#.... +##... +##... +###.# +###.# +##### + +##### +##### +.#.## +.#.## +.#.## +....# +..... + +##### +##### +##.## +##.## +.#.## +....# +..... + +..... +#.#.. +#.#.. +#.#.. +#.#.# +#.### +##### + +..... +..#.. +..##. +..##. +..### +.#### +##### + +..... +#.#.# +#.#.# +#.#.# +#.### +#.### +##### + +..... +....# +....# +.#..# +.#.## +.#.## +##### + +##### +#.### +#.### +...## +...## +...#. +..... + +..... +..#.. +.##.. +.##.. +.###. +####. +##### + +..... +..#.. +#.#.. +####. +####. +####. +##### + +##### +###.# +#.#.# +#.#.# +#...# +....# +..... + +##### +#.##. +#.##. +#..#. +#.... +..... +..... + +..... +#.... +#..#. +#..#. +##.## +##### +##### + +##### +.#.## +.#.#. +..... +..... +..... +..... + +..... +..... +#.#.. +###.. +####. +####. +##### + +##### +##### +##### +##### +.###. +.#.#. +..... + +..... +..... +..... +#.#.. +####. +##### +##### + +##### +##### +##.## +.#.#. +.#.#. +...#. +..... + +..... +....# +..#.# +#.#.# +#.#.# +##### +##### + +##### +##### +.##.# +.##.# +.##.# +..#.. +..... + +##### +##### +##### +##.#. +##... +#.... +..... + +##### +##### +.#### +..#.# +..#.. +..... +..... + +..... +.#... +.#.#. +.#.#. +.#### +.#### +##### + +..... +..... +....# +#...# +##..# +##.## +##### + +..... +..... +..... +..... +..#.# +.##.# +##### + +##### +###.# +.##.. +.##.. +.##.. +..#.. +..... + +..... +..... +..#.. +..#.# +#.### +#.### +##### + +##### +####. +.###. +.###. +.###. +.#.#. +..... + +..... +..... +...#. +#..#. +#..#. +#.### +##### + +..... +..... +..... +....# +.#.## +##### +##### + +..... +....# +#...# +#.#.# +###.# +###.# +##### + +..... +..#.. +..#.# +..#.# +..#.# +#.### +##### + +..... +#...# +#...# +#...# +#.#.# +#.#.# +##### + +##### +##.#. +##... +.#... +..... +..... +..... + +..... +..... +..... +.#... +.#... +.##.# +##### + +##### +.##.# +.##.# +..#.. +..... +..... +..... + +##### +#.### +#.### +#.### +#..#. +#.... +..... + +..... +#...# +#...# +#...# +##..# +##.## +##### + +..... +..... +#.... +##.#. +##.#. +##### +##### + +..... +.#.#. +.###. +.###. +##### +##### +##### + +..... +..... +.#.#. +.#.#. +##.#. +##### +##### + +##### +.#### +.#.## +.#.## +.#.#. +.#... +..... + +##### +##### +####. +.###. +..##. +..#.. +..... + +##### +##.## +##.## +##.## +#..## +...#. +..... + +..... +#.#.. +#.##. +#.### +#.### +##### +##### + +##### +#.### +#..## +#..#. +#..#. +#.... +..... + +##### +##.#. +.#.#. +.#.#. +...#. +...#. +..... + +##### +####. +###.. +###.. +##... +#.... +..... + +..... +#.... +#.... +##... +##... +##.#. +##### + +..... +.#... +.#..# +.#..# +##.## +##### +##### + +..... +#.#.# +#.#.# +#.#.# +#.#.# +##### +##### + +..... +....# +.#..# +.#.## +.#.## +.#### +##### + +##### +##### +.#.## +.#.## +.#..# +..... +..... + +##### +###.# +###.# +#.#.# +..#.# +..#.# +..... + +..... +..... +.#... +.#... +##... +###.# +##### + +..... +..#.# +.##.# +.##.# +###.# +##### +##### + +##### +##.## +##.## +#..## +#..#. +#..#. +..... + +##### +##.## +##.## +##.## +.#.#. +...#. +..... + +##### +###.# +##..# +.#..# +....# +..... +..... + +..... +..... +..... +.#.#. +####. +####. +##### + +..... +...#. +#.##. +#.##. +#.##. +#.### +##### + +..... +.#... +.#... +.#... +.#.#. +##### +##### + +##### +##### +#.#.# +#.... +#.... +#.... +..... + +..... +..... +.#... +.##.. +.###. +.#### +##### + +..... +..... +.#..# +.#..# +.#.## +.#.## +##### + +##### +##### +##### +#.### +...#. +...#. +..... + +##### +#.### +#.### +#.#.# +#.#.# +#...# +..... + +..... +....# +...## +...## +...## +.#.## +##### + +##### +##.#. +##.#. +##... +#.... +#.... +..... + +##### +#.##. +#.##. +#.##. +..##. +..#.. +..... + +##### +.#.## +...#. +...#. +...#. +..... +..... + +..... +...#. +...## +#..## +##.## +##### +##### + +..... +..... +..#.. +.##.# +.##.# +.#### +##### + +##### +##.## +##.#. +##.#. +.#.#. +.#... +..... + +##### +##### +##### +####. +#.#.. +#.... +..... + +..... +..#.. +..#.. +..#.. +.###. +.#### +##### + +..... +..#.. +..#.. +#.#.# +#.#.# +#.### +##### + +..... +..#.# +.##.# +###.# +###.# +##### +##### + +..... +....# +..#.# +..### +.#### +.#### +##### + +##### +.###. +.#.#. +.#.#. +.#... +..... +..... + +##### +.#### +.###. +.##.. +.##.. +..#.. +..... + +##### +##### +.##.# +..#.# +..#.# +..... +..... + +##### +#.### +#.#.# +#.#.# +..#.. +..... +..... + +##### +.##.# +.##.# +.##.# +.##.# +.#..# +..... + +##### +##### +##.## +#..#. +#..#. +#..#. +..... + +##### +.##.# +.##.# +.#... +.#... +..... +..... + +##### +###.# +###.# +###.# +.##.. +..#.. +..... + +..... +#.#.# +#.#.# +#.#.# +#.#.# +###.# +##### + +##### +.#.## +....# +....# +....# +....# +..... + +##### +###.# +.##.# +.##.# +.##.# +..#.. +..... + +##### +##### +##.## +##.## +#..## +#..#. +..... + +..... +.#... +.#..# +.##.# +.#### +##### +##### + +..... +.#... +.#... +.#... +.#... +##.#. +##### + +##### +##.## +#..## +...## +...## +....# +..... + +..... +.#... +.#... +.#..# +.#..# +##.## +##### + +##### +###.# +.##.. +.#... +.#... +..... +..... + +..... +.#... +.#... +.#.#. +##.#. +####. +##### + +..... +..... +#..#. +#..## +#..## +##.## +##### + +..... +#.#.. +#.#.# +#.### +##### +##### +##### + +..... +..#.. +.###. +.#### +.#### +.#### +##### + +..... +....# +....# +....# +.#.## +##### +##### + +..... +..... +#...# +#..## +##.## +##### +##### + +##### +###.# +###.# +##..# +#...# +#.... +..... + +##### +##### +.##.# +.##.# +.##.# +.#... +..... + +##### +##### +##### +#.### +#..## +#...# +..... + +..... +#...# +#...# +#..## +#..## +##.## +##### + +##### +.###. +.###. +.###. +.###. +.#.#. +..... + +..... +...#. +#..#. +#..## +#.### +#.### +##### + +..... +..... +..... +#.... +#...# +#.#.# +##### + +..... +...#. +#..## +##.## +##.## +##.## +##### + +##### +##### +##### +#.### +...## +...#. +..... + +##### +##.#. +#..#. +...#. +...#. +..... +..... + +..... +..... +...#. +..##. +.###. +.#### +##### + +##### +##### +##### +#.### +#.#.# +..#.. +..... + +##### +#.#.# +#...# +..... +..... +..... +..... + +##### +##.## +.#.#. +.#.#. +...#. +..... +..... + +..... +..#.# +#.#.# +#.#.# +#.#.# +#.#.# +##### + +..... +.#... +###.. +###.. +###.. +###.# +##### + +##### +##.## +#..## +#..#. +...#. +...#. +..... + +..... +..... +#.#.. +#.#.# +#.#.# +#.#.# +##### + +..... +...#. +...#. +#..#. +##.#. +##.#. +##### + +..... +..... +.#... +.#... +###.. +###.# +##### + +##### +.##.# +.##.# +.##.# +..#.. +..... +..... + +..... +....# +#...# +#...# +#.#.# +#.#.# +##### + +..... +..... +....# +..#.# +.##.# +##### +##### + +..... +..... +..#.. +..#.. +.##.. +####. +##### + +##### +#.#.# +#...# +#...# +#.... +..... +..... + +..... +.#... +##... +##.#. +####. +####. +##### + +..... +..#.. +..#.. +#.#.. +#.#.# +###.# +##### + +##### +#.### +#.#.# +....# +..... +..... +..... + +..... +..... +..... +..... +.#..# +###.# +##### + +..... +..... +...#. +...#. +..##. +.#### +##### + +##### +##### +.#### +.#.## +.#.#. +.#.#. +..... + +..... +....# +....# +.#..# +##.## +##.## +##### + +..... +#..#. +##.#. +##.## +##### +##### +##### + +##### +###.# +###.# +###.# +.##.. +.#... +..... + +..... +..... +..... +..#.# +.##.# +.#### +##### + +##### +##.## +##.## +.#.## +.#.## +.#..# +..... + +..... +..... +..... +.#... +###.. +###.# +##### + +##### +##### +##### +##### +##### +#.#.# +..... + +##### +.###. +.###. +.##.. +..#.. +..#.. +..... + +##### +##### +#.#.# +#.#.# +..#.# +..#.. +..... + +..... +..... +.#..# +.#..# +##.## +##### +##### + +..... +.#... +.#..# +.#..# +.#..# +###.# +##### + +##### +##### +#.### +#.#.# +#.#.# +#.#.. +..... + +##### +####. +####. +#.##. +#.#.. +#.... +..... + +##### +####. +.###. +.#.#. +.#.#. +...#. +..... + +..... +..#.. +#.#.. +###.# +###.# +##### +##### + +..... +..... +..#.. +..#.. +..#.. +.###. +##### + +..... +.#... +##... +###.. +###.. +###.# +##### + +##### +#.#.# +#.#.# +#...# +....# +....# +..... + +##### +.#### +.#### +.##.# +.#..# +....# +..... + +..... +..... +..#.. +..#.. +#.#.# +##### +##### + +..... +.#.#. +.#.#. +####. +####. +####. +##### + +##### +##### +.###. +..##. +..##. +...#. +..... + +##### +###.# +.##.. +.##.. +..#.. +..#.. +..... + +..... +...#. +...#. +..##. +.###. +.###. +##### + +..... +..... +..... +..#.# +..#.# +#.### +##### + +..... +..... +#...# +#...# +#.#.# +##### +##### + +##### +##### +##.## +.#.## +.#.#. +.#... +..... + +##### +##### +.##.# +.##.# +.##.. +..#.. +..... + +..... +..#.. +..#.# +#.#.# +#.#.# +###.# +##### + +##### +#.### +#.### +..#.# +....# +....# +..... + +##### +##.#. +#.... +#.... +#.... +#.... +..... + +##### +##.#. +#..#. +...#. +...#. +...#. +..... + +..... +....# +....# +#...# +#...# +##.## +##### + +##### +#.### +#.### +#..## +#..#. +...#. +..... + +##### +##### +###.# +##..# +#...# +#...# +..... + +..... +..... +#.... +##... +##..# +###.# +##### + +..... +..... +..#.. +#.#.. +#.#.. +#.##. +##### + +..... +.#... +.#... +.##.# +.##.# +###.# +##### + +##### +##### +###.# +##..# +##..# +#...# +..... + +##### +####. +###.. +###.. +#.#.. +#.#.. +..... + +..... +....# +#..## +##.## +##.## +##### +##### + +..... +..... +....# +#...# +#..## +#.### +##### + +..... +..#.. +.##.. +.##.# +.##.# +###.# +##### + +..... +...#. +.#.## +.#.## +.#### +.#### +##### + +..... +#.... +#.#.. +#.##. +####. +####. +##### + +##### +####. +####. +####. +#.#.. +#.... +..... + +##### +####. +.##.. +..#.. +..... +..... +..... + +..... +..#.. +.###. +####. +####. +####. +##### + +##### +####. +.##.. +.##.. +.##.. +.#... +..... + +##### +##.## +.#.## +...## +...#. +..... +..... + +..... +.#... +.#..# +.#.## +.#### +##### +##### + +##### +####. +####. +##.#. +.#.#. +.#... +..... + +..... +...#. +...#. +...#. +#.### +#.### +##### + +##### +.#### +.###. +.##.. +..#.. +..... +..... + +..... +..... +....# +..#.# +#.#.# +##### +##### + +..... +....# +...## +...## +#.### +##### +##### + +..... +#.... +#.... +#...# +#..## +#.### +##### + +##### +##.## +#..## +#..## +#...# +....# +..... + +##### +##.## +##.## +##..# +#...# +....# +..... + +..... +.#... +.#.#. +.###. +.###. +.#### +##### + +##### +##.## +.#.## +.#..# +.#..# +..... +..... + +##### +####. +####. +###.. +#.#.. +..... +..... + +##### +##### +##### +##### +.#### +.#.#. +..... + +##### +##.## +##.#. +.#.#. +.#.#. +.#.#. +..... + +..... +....# +..#.# +..#.# +#.#.# +#.### +##### + +##### +.#### +.###. +.###. +.#.#. +..... +..... + +##### +#.### +#.#.# +..#.# +....# +..... +..... + +..... +..#.. +..#.. +.##.# +.##.# +.##.# +##### + +..... +.#... +.#... +##..# +##..# +###.# +##### + +##### +##### +.#### +..### +..### +..#.# +..... + +##### +#.##. +#.##. +#.##. +...#. +...#. +..... + +..... +..... +..... +#.... +#.... +#.#.# +##### + +##### +###.# +.##.# +..#.# +....# +....# +..... + +..... +.#.#. +.#.#. +##### +##### +##### +##### + +##### +###.# +.##.# +.#... +.#... +.#... +..... + +..... +....# +#...# +##..# +##..# +###.# +##### + +##### +##### +.#.## +.#.## +....# +....# +..... + +##### +##.#. +#..#. +#..#. +#..#. +..... +..... + +##### +##### +###.# +#.#.. +..#.. +..#.. +..... + +##### +##.## +#...# +....# +....# +..... +..... + +..... +..... +#.... +##..# +##..# +##.## +##### + +##### +##### +###.# +.##.# +.##.# +..#.. +..... + +..... +#.#.# +#.#.# +#.### +#.### +##### +##### + +##### +##### +##.## +##.## +.#.#. +...#. +..... + +##### +##### +#.### +#.##. +#.#.. +..... +..... + +..... +...#. +...#. +.#.#. +##.#. +####. +##### + +..... +#.#.. +#.##. +####. +####. +####. +##### + +..... +..... +..#.. +.##.. +.##.# +###.# +##### + +..... +#.... +#.... +#...# +#.#.# +#.### +##### + +##### +##### +.###. +.###. +..##. +..#.. +..... + +..... +#.#.. +#.#.. +#.#.# +#.#.# +##### +##### + +..... +...#. +...#. +..### +.#### +##### +##### + +..... +.#... +.#... +##..# +###.# +##### +##### + +..... +..... +...#. +...#. +#..## +##.## +##### + +..... +..#.. +..#.. +.###. +.###. +####. +##### + +..... +..... +#..#. +#..## +#.### +##### +##### + +..... +..... +..#.. +#.#.# +#.#.# +#.### +##### + +##### +##.## +#..## +#..#. +#..#. +..... +..... + +##### +##.## +.#.#. +.#.#. +..... +..... +..... + +..... +..... +.#... +.#... +.##.# +.##.# +##### + +..... +..#.. +..#.. +.##.. +.##.. +.##.# +##### + +..... +#.#.. +###.. +###.# +##### +##### +##### + +..... +..... +..... +..#.. +.##.. +.##.# +##### + +..... +.#... +.#... +##.#. +##### +##### +##### + +..... +..#.# +#.### +#.### +##### +##### +##### + +..... +..... +..... +..#.. +..#.. +#.##. +##### + +##### +###.# +#.#.# +#.#.# +#...# +#...# +..... + +##### +##### +##### +.###. +.##.. +.#... +..... + +..... +#.#.. +#.#.. +#.##. +#.##. +##### +##### + +##### +##.## +#..## +#..## +#..## +....# +..... + +..... +..... +#.... +#.#.# +###.# +##### +##### + +..... +..... +..... +.#..# +###.# +###.# +##### + +..... +....# +...## +...## +.#.## +.#.## +##### + +##### +.#.## +...## +...#. +...#. +..... +..... + +..... +.#... +.#.#. +####. +####. +##### +##### + +##### +##### +####. +.###. +.#.#. +.#... +..... + +..... +..... +..... +.#.#. +##.#. +####. +##### + +##### +#.#.# +#.#.# +..#.# +..#.. +..#.. +..... + +##### +#.### +#.### +..#.# +....# +..... +..... + +##### +####. +###.. +##... +##... +.#... +..... + +..... +..... +.#..# +###.# +##### +##### +##### + +##### +##.#. +##.#. +##.#. +.#.#. +.#... +..... + +..... +..#.. +..##. +..##. +#.### +##### +##### + +..... +....# +...## +...## +..### +#.### +##### + +##### +###.# +###.. +##... +.#... +..... +..... + +##### +##### +##.#. +.#... +..... +..... +..... + +##### +###.# +###.# +.##.. +..#.. +..... +..... + +##### +##### +##### +####. +##.#. +.#... +..... + +..... +....# +....# +...## +..### +.#### +##### + +##### +.#.#. +.#.#. +.#.#. +.#... +..... +..... + +##### +##### +.#### +.###. +.##.. +.#... +..... + +##### +####. +####. +.##.. +..#.. +..... +..... + +##### +##### +##### +.##.# +.#... +..... +..... + +..... +...#. +#..#. +#..#. +#..#. +##.#. +##### + +..... +.#... +.#.#. +.#.#. +.#.## +##### +##### + +##### +##.## +##.#. +##.#. +##... +.#... +..... + +##### +##### +#.### +#.##. +#.##. +..#.. +..... + +..... +...#. +...#. +#.##. +#.##. +##### +##### + +..... +..... +#..#. +#..#. +##.#. +##.## +##### + +..... +...#. +...#. +..##. +..##. +.#### +##### + +##### +#.### +#.#.# +#.#.# +#...# +#.... +..... + +..... +..#.# +.##.# +###.# +###.# +###.# +##### + +##### +##.## +##..# +##..# +##..# +#.... +..... + +..... +....# +...## +#..## +##.## +##### +##### + +..... +...#. +...#. +..##. +..##. +#.### +##### + +##### +###.# +#.#.. +#.... +#.... +#.... +..... + +##### +##### +###.# +##..# +##..# +#.... +..... + +##### +###.# +###.. +##... +#.... +..... +..... + +##### +##### +##### +####. +##.#. +#..#. +..... + +##### +#.### +#.##. +..##. +..#.. +..... +..... + +##### +.#.## +.#.## +.#.#. +.#... +..... +..... + +..... +..... +.#... +###.# +###.# +###.# +##### + +##### +####. +#.#.. +#.... +..... +..... +..... + +..... +..... +...#. +#..#. +#..#. +##.#. +##### + +##### +####. +.###. +.###. +..##. +..#.. +..... + +..... +....# +#...# +##.## +##### +##### +##### + +##### +##### +##### +####. +#.##. +#..#. +..... + +##### +##### +.##.# +..#.# +..#.# +....# +..... + +##### +##### +##### +#.### +..### +...#. +..... + +..... +..... +.#.#. +.#.#. +.#.#. +####. +##### + +..... +..... +.#.#. +.#.#. +.###. +####. +##### + +##### +##### +##.## +##.## +#...# +....# +..... + +##### +##### +###.# +#.#.# +#.#.. +#.... +..... + +##### +##### +#.### +#..## +#...# +..... +..... + +..... +.#... +.#.#. +##.#. +##.## +##.## +##### + +..... +#.#.. +#.#.# +###.# +###.# +##### +##### + +..... +..#.. +.##.. +.##.. +.###. +##### +##### + +..... +#...# +##..# +##.## +##.## +##.## +##### + +..... +..#.# +..#.# +.#### +.#### +.#### +##### + +..... +...#. +...#. +.#.#. +.###. +.###. +##### + +##### +##### +#.##. +#..#. +..... +..... +..... + +##### +##### +###.# +##..# +.#..# +.#..# +..... + +..... +..#.. +.##.. +###.. +####. +####. +##### + +##### +###.# +###.# +.##.# +..#.# +....# +..... + +##### +####. +#.##. +#.##. +#.#.. +#.#.. +..... + +..... +#.#.. +#.#.. +###.# +###.# +##### +##### + +..... +.#..# +.##.# +###.# +##### +##### +##### + +..... +.#.#. +.#.#. +.#.## +##.## +##.## +##### + +..... +..... +....# +#...# +##.## +##.## +##### + +..... +#...# +#...# +#.#.# +###.# +###.# +##### + +..... +..#.. +#.#.# +#.### +##### +##### +##### + +..... +..... +#.#.. +#.#.# +#.### +##### +##### + +..... +..#.# +#.#.# +#.#.# +#.#.# +###.# +##### + +##### +##### +#.### +#.### +#.#.# +#.... +..... + +..... +.#... +.#... +.#..# +.##.# +.#### +##### + +..... +..... +.#... +.#... +##..# +###.# +##### + +..... +..... +#...# +#...# +##..# +###.# +##### + +##### +.#.#. +.#.#. +.#... +.#... +.#... +..... + +##### +.###. +.###. +..#.. +..... +..... +..... + +..... +..#.. +..#.# +..#.# +.##.# +###.# +##### + +##### +##.## +##..# +##..# +.#... +..... +..... + +..... +..... +..#.. +#.#.# +###.# +###.# +##### + +..... +..... +...#. +#..#. +#.### +##### +##### + +..... +#..#. +#..#. +##.#. +####. +####. +##### + +##### +##### +####. +####. +##.#. +#..#. +..... + +##### +.###. +..#.. +..#.. +..#.. +..#.. +..... + +..... +.#..# +.#..# +.##.# +.#### +.#### +##### + +##### +##.## +#...# +#.... +#.... +..... +..... + +..... +#...# +##..# +###.# +###.# +###.# +##### + +..... +.#.#. +.#.#. +.###. +.#### +.#### +##### + +##### +.#.#. +.#.#. +.#.#. +.#.#. +.#.#. +..... + +##### +##### +##### +##.## +##..# +.#... +..... + +..... +...#. +.#.## +.#### +.#### +##### +##### + +..... +..#.# +..#.# +..### +..### +#.### +##### + +##### +.#.## +...#. +...#. +..... +..... +..... + +##### +#.### +..### +..##. +..##. +...#. +..... + +..... +...#. +...## +..### +#.### +#.### +##### + +##### +####. +###.. +###.. +###.. +#.#.. +..... + +##### +#.#.# +#...# +#...# +#.... +#.... +..... + +##### +##.## +##.## +##.## +##..# +#.... +..... + +##### +##### +##.## +.#.#. +.#... +.#... +..... + +..... +..... +..... +..... +#.#.. +###.# +##### + +##### +##### +.#.#. +.#.#. +.#... +..... +..... + +..... +.#... +.#..# +.#..# +###.# +###.# +##### + +##### +#.### +#..#. +#..#. +#.... +..... +..... + +##### +####. +.#.#. +.#.#. +.#.#. +.#.#. +..... + +##### +##.#. +##... +#.... +#.... +#.... +..... + +..... +...#. +...#. +...#. +...## +#.### +##### + +##### +#.### +#.#.# +#.#.# +#.#.# +....# +..... + +##### +.#### +.###. +.###. +..##. +...#. +..... + +..... +..#.. +..#.. +..#.. +.##.# +###.# +##### + +..... +..#.. +..##. +.###. +.###. +.###. +##### + +##### +##### +##### +#.#.# +#.... +#.... +..... + +##### +##### +##### +#.### +#.##. +#..#. +..... + +..... +#...# +#.#.# +#.#.# +##### +##### +##### + +##### +###.# +##..# +##..# +##..# +.#... +..... + +..... +.#... +.##.. +.##.# +.##.# +##### +##### + +..... +.#... +##... +###.. +###.# +##### +##### + +##### +##.## +##.## +#..#. +#..#. +...#. +..... + +..... +.#... +.#... +.#.#. +.#.#. +.#### +##### + +##### +#.### +#.#.# +#.#.. +..#.. +..#.. +..... + +..... +.#... +.#.#. +.#### +.#### +.#### +##### + +##### +.#### +..### +...## +...#. +...#. +..... + +..... +..... +...#. +#.##. +#.##. +#.##. +##### + +##### +###.# +##..# +##..# +##..# +.#..# +..... + +##### +##.## +##..# +.#..# +.#... +..... +..... + +..... +..#.. +..##. +#.##. +#.### +##### +##### + +##### +##### +#.### +..### +..### +...#. +..... + +..... +...#. +#.##. +#.##. +####. +##### +##### + +..... +#..#. +#..#. +#..#. +#.##. +#.##. +##### + +##### +##### +#.### +#.### +#.### +..#.# +..... + +..... +..... +...#. +.#.#. +.#### +.#### +##### + +##### +.#### +.#.## +....# +....# +....# +..... + +##### +.#.#. +.#.#. +.#.#. +.#.#. +.#... +..... + +..... +..... +#..#. +#..#. +##.#. +##### +##### + +##### +##.#. +##.#. +.#.#. +.#.#. +..... +..... + +..... +..#.. +..#.# +..#.# +#.### +#.### +##### + +##### +##### +####. +.###. +.###. +..#.. +..... + +##### +###.# +##..# +##... +##... +.#... +..... + +##### +####. +####. +####. +#.##. +#..#. +..... + +##### +####. +#.##. +#.##. +..#.. +..... +..... + +##### +##### +.#.## +....# +....# +....# +..... + +##### +##### +.#### +..##. +..#.. +..#.. +..... + +##### +##### +#.##. +#.#.. +#.... +..... +..... + +##### +#.### +#.##. +#.##. +..##. +...#. +..... + +..... +.#... +.#..# +##..# +##.## +##.## +##### + +..... +#.#.. +#.##. +#.##. +#.##. +##### +##### + +##### +##### +.##.# +.##.. +.#... +.#... +..... + +##### +##### +.#### +.#.## +....# +..... +..... + +..... +..... +..... +.#... +.#.#. +.#.## +##### + +##### +##### +##### +###.# +##..# +#.... +..... + +..... +.#... +.#... +.#.#. +##.## +##.## +##### + +##### +##### +##.## +#..## +...#. +...#. +..... + +..... +...#. +..### +..### +..### +#.### +##### + +##### +##### +##### +####. +#.##. +...#. +..... + +##### +#.##. +...#. +...#. +..... +..... +..... + +##### +#.### +#.### +..##. +..#.. +..#.. +..... + +..... +..... +.#.#. +.#.#. +.#.## +.#### +##### + +..... +#.#.. +#.#.# +#.#.# +###.# +##### +##### + +..... +..... +..#.. +#.#.. +#.#.. +####. +##### + +..... +..... +..... +..... +.#..# +.##.# +##### + +..... +.#.#. +.#.#. +##.#. +####. +##### +##### + +##### +###.# +###.# +###.# +##... +.#... +..... + +##### +.#.## +.#..# +.#... +..... +..... +..... + +..... +....# +#..## +#..## +#.### +#.### +##### + +##### +.##.# +.#..# +.#..# +.#..# +.#... +..... + +##### +##.## +#...# +#...# +#...# +#...# +..... + +..... +..... +#.... +#.#.. +#.#.. +#.#.# +##### + +..... +...#. +#..## +#..## +#.### +##### +##### + +..... +.#... +.#... +.##.. +.##.. +###.# +##### + +..... +..#.. +..#.# +..### +..### +#.### +##### + +..... +..... +...#. +...#. +..##. +.###. +##### + +##### +##### +#.### +..##. +...#. +...#. +..... + +##### +.#### +.#### +.###. +.#.#. +..... +..... + +##### +#.### +#.### +#.### +#.#.# +#.... +..... + +##### +##### +####. +#.##. +..#.. +..#.. +..... + +##### +##### +##### +##.#. +.#.#. +..... +..... + +..... +...#. +...## +#..## +#..## +##.## +##### + +##### +#.#.# +#.#.. +#.... +#.... +..... +..... + +..... +..... +#.... +#.#.. +#.#.. +#.##. +##### + +..... +...#. +...## +..### +.#### +.#### +##### + +..... +...#. +..##. +..##. +..##. +#.### +##### + +..... +.#... +.#.#. +##.#. +####. +##### +##### + +##### +##### +#.### +#.### +#..## +#..#. +..... + +..... +..... +....# +#.#.# +#.#.# +#.### +##### + +##### +##### +##### +#.#.# +#...# +....# +..... + +##### +##### +#.### +#.### +..### +...#. +..... + +..... +.#..# +.#..# +.#..# +##.## +##.## +##### + +..... +..... +...#. +...#. +#.##. +#.##. +##### + +##### +#.### +#.#.# +#.#.# +..#.# +....# +..... + +##### +##.## +##.## +.#.#. +.#.#. +.#.#. +..... + +##### +##.## +##.#. +##.#. +#..#. +#..#. +..... + +##### +##### +.#### +.#.#. +.#.#. +.#.#. +..... + +..... +..... +.#... +.#... +.##.. +.###. +##### + +..... +#.... +#.#.. +#.#.. +#.#.. +####. +##### + +##### +#.### +#.##. +#..#. +#..#. +...#. +..... + +..... +..#.# +.##.# +.#### +.#### +.#### +##### + +##### +##### +###.# +###.# +##..# +.#..# +..... + +##### +#.#.# +#.#.# +#...# +#...# +#.... +..... + +##### +.#.## +.#..# +.#..# +....# +..... +..... + +..... +..... +..#.. +..#.. +..##. +#.### +##### + +##### +#.### +#.### +#.#.# +..... +..... +..... + +##### +##### +###.# +##... +#.... +..... +..... + +##### +##### +.#.## +.#.#. +...#. +..... +..... \ No newline at end of file diff --git a/scala2/src/main/scala/jurisk/adventofcode/y2024/Advent25.scala b/scala2/src/main/scala/jurisk/adventofcode/y2024/Advent25.scala index 7619a6a5..52875612 100644 --- a/scala2/src/main/scala/jurisk/adventofcode/y2024/Advent25.scala +++ b/scala2/src/main/scala/jurisk/adventofcode/y2024/Advent25.scala @@ -1,37 +1,46 @@ package jurisk.adventofcode.y2024 +import cats.implicits.{catsSyntaxEitherId, toFoldableOps} +import jurisk.geometry.Field2D import jurisk.utils.FileInput._ import jurisk.utils.Parsing.StringOps object Advent25 { - type Input = List[Command] + type Input = List[Field2D[Boolean]] type N = Long - sealed trait Command extends Product with Serializable - object Command { - case object Noop extends Command - final case class Something( - values: List[N] - ) extends Command - final case class Other(value: String) extends Command - - def parse(s: String): Command = - s match { - case "noop" => Noop - case s"something $rem" => Something(rem.extractLongList) - case s if s.nonEmpty => Other(s) - case _ => s.failedToParse - } - } - def parse(input: String): Input = - input.parseLines(Command.parse) + input.parseSections(s => Field2D.parseBooleanField(s)) + + sealed trait Schematic + object Schematic { + final case class Lock(heights: List[Int]) extends Schematic + final case class Key(heights: List[Int]) extends Schematic + + def convert(field: Field2D[Boolean]): Either[Lock, Key] = + if (field.firstRowValues.forall(_ == true)) { + Lock(field.columns.map(_.count(identity) - 1)).asLeft + } else if (field.firstRowValues.forall(_ == false)) { + Key(field.columns.map(_.count(identity) - 1)).asRight + } else { + "Invalid field".fail + } - def part1(data: Input): N = - 0 + def fits(lock: Lock, key: Key): Boolean = { + val Height = 7 + lock.heights.zip(key.heights).forall { case (l, k) => + l + k <= Height - 2 + } + } + } - def part2(data: Input): N = - 0 + def part1(data: Input): N = { + val (locks, keys) = data.map(Schematic.convert).partitionEither(identity) + (for { + lock <- locks + key <- keys + } yield Schematic.fits(lock, key)).count(identity) + } def parseFile(fileName: String): Input = parse(readFileText(fileName)) @@ -43,6 +52,5 @@ object Advent25 { val realData: Input = parseFile(fileName("")) println(s"Part 1: ${part1(realData)}") - println(s"Part 2: ${part2(realData)}") } } diff --git a/scala2/src/test/scala/jurisk/adventofcode/y2024/Advent25Spec.scala b/scala2/src/test/scala/jurisk/adventofcode/y2024/Advent25Spec.scala index 28657bbd..85ce4ecd 100644 --- a/scala2/src/test/scala/jurisk/adventofcode/y2024/Advent25Spec.scala +++ b/scala2/src/test/scala/jurisk/adventofcode/y2024/Advent25Spec.scala @@ -10,21 +10,12 @@ class Advent25Spec extends AnyFreeSpec { "part 1" - { "test" in { - part1(testData) shouldEqual 0 + part1(testData) shouldEqual 3 } "real" in { - part1(realData) shouldEqual 0 + part1(realData) shouldEqual 3301 } } - "part 2" - { - "test" in { - part2(testData) shouldEqual 0 - } - - "real" in { - part2(realData) shouldEqual 0 - } - } }