Compare commits

...

21 Commits

Author SHA1 Message Date
Jens Kadenbach
0a6181ccc0 Day 13 2023-01-27 13:50:12 +01:00
Jens Kadenbach
26e6851eec Day 12 2022-12-16 15:59:43 +01:00
Jens Kadenbach
714980da64 Day 11 2022-12-14 17:28:11 +01:00
Jens Kadenbach
17e4d9d0ab Day 10 2022-12-12 09:57:32 +01:00
Jens Kadenbach
08306ed57d Day 9 - Part 2 2022-12-09 18:53:29 +01:00
Jens Kadenbach
dc5a757eb6 Day 9 - Part 1 refactor with state 2022-12-09 17:56:20 +01:00
Jens Kadenbach
9bd3d62eec Day 9 - Part 1 2022-12-09 15:23:38 +01:00
Jens Kadenbach
e50555fe8b Improve IO in Lib 2022-12-08 16:57:43 +01:00
Jens Kadenbach
ce3466f746 Day 8 - cleanup 2022-12-08 13:58:34 +01:00
Jens Kadenbach
b9df0aa858 Day 8 2022-12-08 13:09:39 +01:00
Jens Kadenbach
435a06fd59 Day 7 - Foldable instance for summing up directories 2022-12-07 18:14:05 +01:00
Jens Kadenbach
7f4a4329b0 Day 7 Cleanup and modularisation 2022-12-07 16:56:47 +01:00
Jens Kadenbach
c115484544 Day 7 Cleanup 2022-12-07 16:26:27 +01:00
Jens Kadenbach
33871a7f64 Day 7 Part 2 2022-12-07 16:24:38 +01:00
Jens Kadenbach
7d1a8b8f5c Day 7 Part 1 2022-12-07 16:11:04 +01:00
Jens Kadenbach
001ffc6789 Day6 with better algorithm 2022-12-06 18:14:27 +01:00
Jens Kadenbach
95f13675dd Cleanup Day 6 - still bad naive algorithm 2022-12-06 11:01:54 +01:00
Jens Kadenbach
3209fa9493 Ugly day 6 solution 2022-12-06 10:54:58 +01:00
Jens Kadenbach
29afc2ff7b Cleanup 2022-12-05 16:15:49 +01:00
Jens Kadenbach
d62259bf75 Day 5 Part 2 2022-12-05 15:59:01 +01:00
Jens Kadenbach
5af46b73dd Day 5 Part 1 2022-12-05 15:49:32 +01:00
40 changed files with 6346 additions and 11 deletions

View File

@@ -27,6 +27,11 @@ library
exposed-modules:
Day1
Day1.Internal
Day10
Day11
Day11.Parser
Day12
Day13
Day2
Day2.Part1
Day2.Part2
@@ -39,22 +44,42 @@ library
Day4.Part1
Day4.Part2
Day4.Shared
Day5
Day5.Part1
Day5.Part2
Day5.Shared
Day6
Day7
Day7.Interpreter
Day7.Parser
Day8
Day9
Lib
Shared
other-modules:
Paths_aoc2022
hs-source-dirs:
src
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints
build-depends:
QuickCheck
, Ranged-sets
Ranged-sets
, base >=4.7 && <5
, containers
, heredoc
, hspec
, hspec-megaparsec
, lens
, linear
, matrix
, megaparsec
, mtl
, parsec
, search-algorithms
, sort
, split
, text
, transformers
, vector
default-language: Haskell2010
executable aoc2022-exe
@@ -65,39 +90,66 @@ executable aoc2022-exe
app
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
build-depends:
QuickCheck
, Ranged-sets
Ranged-sets
, aoc2022
, base >=4.7 && <5
, containers
, heredoc
, hspec
, hspec-megaparsec
, lens
, linear
, matrix
, megaparsec
, mtl
, parsec
, search-algorithms
, sort
, split
, text
, transformers
, vector
default-language: Haskell2010
test-suite aoc2022-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
Day10Spec
Day11Spec
Day12Spec
Day13Spec
Day1Spec
Day2Spec
Day3Spec
Day4Spec
Day5Spec
Day6Spec
Day7Spec
Day8Spec
Day9Spec
Paths_aoc2022
hs-source-dirs:
test
ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
build-depends:
QuickCheck
, Ranged-sets
Ranged-sets
, aoc2022
, base >=4.7 && <5
, containers
, heredoc
, hspec
, hspec-megaparsec
, lens
, linear
, matrix
, megaparsec
, mtl
, parsec
, search-algorithms
, sort
, split
, text
, transformers
, vector
default-language: Haskell2010

View File

@@ -22,7 +22,6 @@ description: Please see the README on GitHub at <https://github.com/auda
dependencies:
- base >= 4.7 && < 5
- hspec
- QuickCheck
- text
- split
- heredoc
@@ -30,6 +29,16 @@ dependencies:
- split
- lens
- Ranged-sets
- parsec
- matrix
- vector
- megaparsec
- transformers
- hspec-megaparsec
- mtl
- sort
- search-algorithms
- linear
ghc-options:
- -Wall

511
ressources/day05-input Normal file
View File

@@ -0,0 +1,511 @@
[J] [B] [T]
[M] [L] [Q] [L] [R]
[G] [Q] [W] [S] [B] [L]
[D] [D] [T] [M] [G] [V] [P]
[T] [N] [N] [N] [D] [J] [G] [N]
[W] [H] [H] [S] [C] [N] [R] [W] [D]
[N] [P] [P] [W] [H] [H] [B] [N] [G]
[L] [C] [W] [C] [P] [T] [M] [Z] [W]
1 2 3 4 5 6 7 8 9
move 6 from 6 to 5
move 2 from 5 to 9
move 8 from 9 to 1
move 3 from 5 to 4
move 9 from 1 to 8
move 2 from 1 to 5
move 1 from 1 to 8
move 14 from 8 to 2
move 1 from 1 to 2
move 2 from 6 to 8
move 2 from 5 to 7
move 6 from 8 to 6
move 4 from 4 to 2
move 2 from 4 to 9
move 5 from 7 to 4
move 2 from 7 to 5
move 6 from 2 to 4
move 2 from 4 to 7
move 4 from 5 to 8
move 1 from 5 to 2
move 3 from 3 to 5
move 3 from 8 to 3
move 4 from 3 to 7
move 2 from 9 to 8
move 1 from 3 to 7
move 1 from 6 to 8
move 5 from 7 to 1
move 3 from 7 to 2
move 1 from 6 to 3
move 2 from 5 to 9
move 5 from 4 to 2
move 3 from 5 to 9
move 5 from 9 to 6
move 2 from 1 to 3
move 4 from 4 to 1
move 2 from 8 to 1
move 18 from 2 to 5
move 3 from 4 to 1
move 1 from 1 to 2
move 1 from 6 to 8
move 1 from 7 to 1
move 10 from 1 to 5
move 1 from 1 to 5
move 3 from 8 to 1
move 2 from 1 to 5
move 3 from 6 to 5
move 8 from 2 to 9
move 2 from 9 to 7
move 3 from 3 to 8
move 1 from 4 to 8
move 3 from 5 to 3
move 15 from 5 to 8
move 4 from 6 to 1
move 2 from 7 to 4
move 9 from 5 to 7
move 1 from 6 to 8
move 5 from 3 to 5
move 5 from 7 to 5
move 3 from 1 to 5
move 2 from 4 to 8
move 3 from 1 to 6
move 20 from 5 to 4
move 1 from 7 to 6
move 21 from 8 to 2
move 1 from 3 to 7
move 2 from 4 to 2
move 1 from 7 to 1
move 18 from 2 to 8
move 3 from 9 to 2
move 1 from 6 to 4
move 1 from 1 to 9
move 8 from 8 to 6
move 4 from 8 to 2
move 1 from 2 to 6
move 7 from 8 to 5
move 2 from 5 to 3
move 1 from 9 to 5
move 5 from 2 to 4
move 1 from 3 to 7
move 2 from 5 to 7
move 4 from 4 to 9
move 2 from 5 to 9
move 6 from 2 to 8
move 3 from 7 to 3
move 2 from 5 to 4
move 4 from 8 to 2
move 2 from 7 to 4
move 7 from 6 to 4
move 1 from 8 to 4
move 3 from 6 to 7
move 2 from 7 to 2
move 7 from 9 to 7
move 1 from 9 to 2
move 3 from 3 to 6
move 3 from 7 to 4
move 2 from 7 to 9
move 6 from 4 to 1
move 3 from 7 to 9
move 1 from 8 to 5
move 1 from 3 to 6
move 3 from 9 to 4
move 2 from 6 to 4
move 3 from 9 to 1
move 4 from 2 to 8
move 1 from 8 to 5
move 9 from 1 to 2
move 1 from 6 to 5
move 1 from 7 to 2
move 1 from 8 to 1
move 2 from 8 to 9
move 1 from 9 to 8
move 1 from 5 to 7
move 1 from 7 to 6
move 1 from 9 to 8
move 1 from 6 to 3
move 26 from 4 to 3
move 1 from 5 to 8
move 3 from 6 to 3
move 7 from 4 to 3
move 1 from 1 to 3
move 1 from 4 to 8
move 13 from 3 to 1
move 1 from 3 to 4
move 12 from 2 to 5
move 20 from 3 to 2
move 1 from 4 to 1
move 4 from 5 to 7
move 1 from 7 to 8
move 9 from 5 to 2
move 5 from 1 to 5
move 21 from 2 to 8
move 5 from 8 to 4
move 4 from 5 to 2
move 6 from 1 to 7
move 1 from 5 to 4
move 4 from 3 to 1
move 6 from 1 to 3
move 1 from 1 to 9
move 6 from 8 to 7
move 4 from 8 to 2
move 4 from 2 to 7
move 5 from 4 to 1
move 8 from 8 to 4
move 1 from 9 to 6
move 18 from 7 to 6
move 15 from 6 to 5
move 2 from 6 to 8
move 2 from 6 to 3
move 8 from 3 to 7
move 15 from 5 to 7
move 3 from 4 to 9
move 12 from 2 to 3
move 3 from 9 to 4
move 6 from 7 to 9
move 9 from 4 to 5
move 10 from 3 to 5
move 9 from 5 to 2
move 14 from 7 to 8
move 14 from 8 to 5
move 4 from 2 to 4
move 1 from 4 to 6
move 2 from 8 to 4
move 3 from 8 to 9
move 18 from 5 to 1
move 1 from 5 to 9
move 1 from 7 to 4
move 5 from 5 to 9
move 3 from 2 to 4
move 13 from 9 to 2
move 13 from 2 to 6
move 1 from 7 to 3
move 3 from 3 to 1
move 9 from 6 to 5
move 1 from 7 to 8
move 20 from 1 to 8
move 2 from 2 to 8
move 5 from 6 to 9
move 15 from 8 to 7
move 3 from 5 to 3
move 5 from 1 to 3
move 2 from 3 to 4
move 3 from 9 to 5
move 4 from 5 to 2
move 4 from 5 to 7
move 3 from 4 to 9
move 10 from 7 to 8
move 2 from 9 to 4
move 1 from 5 to 6
move 8 from 7 to 9
move 1 from 6 to 7
move 6 from 3 to 4
move 12 from 9 to 8
move 1 from 1 to 5
move 2 from 7 to 8
move 1 from 7 to 5
move 1 from 9 to 5
move 2 from 2 to 9
move 11 from 8 to 1
move 7 from 1 to 5
move 3 from 1 to 6
move 5 from 8 to 9
move 8 from 4 to 3
move 4 from 4 to 6
move 5 from 9 to 3
move 4 from 4 to 5
move 2 from 6 to 7
move 1 from 9 to 5
move 2 from 7 to 4
move 12 from 5 to 2
move 8 from 8 to 9
move 8 from 8 to 6
move 9 from 6 to 2
move 4 from 9 to 2
move 1 from 5 to 1
move 5 from 2 to 1
move 2 from 5 to 4
move 5 from 2 to 5
move 5 from 5 to 6
move 3 from 4 to 7
move 11 from 2 to 7
move 2 from 2 to 1
move 4 from 3 to 7
move 2 from 2 to 4
move 6 from 1 to 4
move 1 from 2 to 8
move 2 from 9 to 5
move 4 from 4 to 3
move 5 from 4 to 1
move 2 from 2 to 1
move 1 from 8 to 5
move 14 from 7 to 6
move 3 from 9 to 2
move 15 from 6 to 8
move 4 from 1 to 3
move 2 from 2 to 3
move 1 from 1 to 7
move 2 from 3 to 5
move 4 from 5 to 4
move 1 from 3 to 5
move 5 from 1 to 6
move 12 from 6 to 7
move 7 from 8 to 4
move 12 from 7 to 9
move 4 from 7 to 9
move 1 from 2 to 8
move 12 from 9 to 4
move 23 from 4 to 3
move 1 from 6 to 5
move 3 from 9 to 3
move 1 from 7 to 9
move 1 from 9 to 1
move 1 from 9 to 7
move 42 from 3 to 1
move 3 from 5 to 4
move 5 from 1 to 3
move 3 from 4 to 7
move 1 from 1 to 9
move 4 from 3 to 8
move 1 from 3 to 7
move 1 from 9 to 1
move 2 from 7 to 8
move 8 from 1 to 6
move 2 from 7 to 5
move 9 from 1 to 2
move 5 from 2 to 3
move 3 from 2 to 4
move 20 from 1 to 2
move 1 from 1 to 5
move 1 from 6 to 7
move 3 from 4 to 7
move 2 from 3 to 6
move 3 from 6 to 1
move 1 from 6 to 4
move 2 from 1 to 6
move 3 from 5 to 9
move 1 from 4 to 3
move 2 from 7 to 4
move 6 from 8 to 4
move 1 from 1 to 9
move 1 from 2 to 9
move 2 from 8 to 7
move 3 from 6 to 2
move 5 from 7 to 5
move 4 from 2 to 5
move 4 from 4 to 6
move 3 from 9 to 6
move 4 from 3 to 1
move 1 from 9 to 2
move 7 from 8 to 9
move 4 from 2 to 4
move 2 from 1 to 7
move 3 from 4 to 5
move 4 from 2 to 4
move 1 from 7 to 4
move 4 from 2 to 9
move 7 from 4 to 3
move 1 from 7 to 3
move 6 from 2 to 3
move 2 from 1 to 5
move 10 from 3 to 6
move 2 from 6 to 1
move 2 from 2 to 7
move 2 from 3 to 1
move 1 from 7 to 8
move 11 from 5 to 3
move 2 from 3 to 1
move 4 from 6 to 1
move 1 from 4 to 6
move 8 from 3 to 4
move 2 from 5 to 6
move 3 from 3 to 5
move 1 from 8 to 4
move 1 from 4 to 9
move 2 from 6 to 1
move 1 from 5 to 1
move 9 from 4 to 3
move 5 from 6 to 9
move 5 from 6 to 7
move 13 from 9 to 3
move 5 from 1 to 8
move 4 from 8 to 4
move 10 from 3 to 2
move 3 from 6 to 1
move 2 from 7 to 9
move 1 from 8 to 3
move 1 from 7 to 3
move 1 from 9 to 5
move 1 from 6 to 3
move 7 from 2 to 4
move 3 from 5 to 2
move 8 from 3 to 5
move 7 from 4 to 3
move 5 from 9 to 7
move 1 from 7 to 1
move 9 from 1 to 8
move 9 from 5 to 8
move 2 from 7 to 8
move 3 from 8 to 1
move 10 from 3 to 6
move 1 from 1 to 6
move 5 from 1 to 7
move 3 from 2 to 8
move 7 from 8 to 6
move 7 from 8 to 6
move 1 from 3 to 5
move 5 from 7 to 9
move 4 from 8 to 4
move 3 from 2 to 8
move 1 from 7 to 8
move 3 from 3 to 9
move 3 from 7 to 4
move 1 from 7 to 2
move 9 from 9 to 1
move 5 from 1 to 9
move 4 from 8 to 6
move 1 from 2 to 7
move 1 from 5 to 3
move 1 from 3 to 7
move 1 from 1 to 9
move 1 from 1 to 7
move 5 from 9 to 6
move 2 from 7 to 6
move 10 from 4 to 8
move 1 from 4 to 2
move 1 from 4 to 1
move 1 from 9 to 2
move 3 from 1 to 2
move 1 from 7 to 3
move 1 from 2 to 1
move 16 from 6 to 3
move 9 from 6 to 1
move 6 from 6 to 1
move 5 from 6 to 1
move 3 from 8 to 1
move 11 from 3 to 4
move 1 from 6 to 2
move 3 from 8 to 2
move 4 from 1 to 6
move 5 from 3 to 2
move 1 from 2 to 5
move 1 from 8 to 5
move 5 from 8 to 3
move 4 from 6 to 9
move 2 from 9 to 6
move 3 from 3 to 9
move 1 from 5 to 7
move 5 from 1 to 6
move 3 from 6 to 4
move 2 from 2 to 9
move 8 from 4 to 2
move 9 from 1 to 7
move 3 from 3 to 5
move 3 from 5 to 7
move 12 from 7 to 1
move 5 from 4 to 6
move 1 from 4 to 5
move 7 from 1 to 8
move 5 from 9 to 3
move 1 from 7 to 4
move 10 from 1 to 8
move 1 from 4 to 8
move 4 from 6 to 8
move 1 from 6 to 9
move 2 from 5 to 1
move 4 from 3 to 4
move 1 from 1 to 8
move 4 from 4 to 7
move 2 from 1 to 8
move 4 from 6 to 1
move 3 from 9 to 5
move 1 from 6 to 5
move 1 from 3 to 7
move 24 from 8 to 6
move 3 from 6 to 5
move 4 from 6 to 7
move 1 from 1 to 7
move 7 from 7 to 6
move 7 from 5 to 3
move 13 from 6 to 8
move 3 from 1 to 2
move 7 from 6 to 3
move 12 from 2 to 4
move 4 from 6 to 9
move 6 from 3 to 1
move 1 from 2 to 4
move 2 from 8 to 7
move 2 from 2 to 9
move 6 from 3 to 4
move 12 from 8 to 2
move 18 from 2 to 5
move 10 from 4 to 3
move 4 from 7 to 3
move 5 from 4 to 7
move 3 from 5 to 2
move 4 from 7 to 9
move 1 from 5 to 4
move 3 from 2 to 1
move 4 from 3 to 6
move 7 from 5 to 6
move 2 from 5 to 7
move 5 from 1 to 7
move 9 from 7 to 6
move 8 from 9 to 8
move 1 from 1 to 3
move 1 from 3 to 1
move 10 from 3 to 9
move 8 from 8 to 4
move 1 from 3 to 8
move 1 from 1 to 3
move 6 from 9 to 1
move 5 from 5 to 3
move 5 from 3 to 6
move 1 from 8 to 9
move 19 from 6 to 2
move 13 from 4 to 1
move 4 from 1 to 5
move 6 from 2 to 1
move 2 from 9 to 4
move 1 from 3 to 1
move 9 from 2 to 3
move 4 from 5 to 1
move 5 from 9 to 6
move 4 from 3 to 4
move 3 from 2 to 7
move 2 from 4 to 8
move 6 from 1 to 9
move 1 from 8 to 6
move 4 from 1 to 5
move 3 from 4 to 5
move 1 from 7 to 2
move 11 from 1 to 6
move 1 from 2 to 7
move 5 from 3 to 7
move 1 from 3 to 4
move 1 from 4 to 8
move 3 from 5 to 6
move 8 from 1 to 7
move 1 from 8 to 9
move 1 from 6 to 9
move 1 from 8 to 5
move 11 from 6 to 5
move 12 from 5 to 2
move 1 from 5 to 2
move 8 from 7 to 3
move 1 from 5 to 6
move 2 from 5 to 6
move 3 from 7 to 1
move 6 from 2 to 6
move 1 from 3 to 1
move 1 from 4 to 1
move 4 from 6 to 2
move 5 from 1 to 5
move 10 from 2 to 3
move 2 from 9 to 4
move 4 from 5 to 8
move 2 from 2 to 7
move 12 from 6 to 7
move 1 from 8 to 2
move 10 from 3 to 4
move 2 from 3 to 5
move 1 from 3 to 1

1
ressources/day06-input Normal file
View File

@@ -0,0 +1 @@
lrgrvgvttzmtmtgglmgmccpclppvdvtvvllvggvrggbwwlzlmzzbppnvpnvppcjjzhjhthnhjnhhhndhnnnsbnnhzzvhhplplzlrzzgpzpwzpwwsvsjvjfvvphpspwswrswscwscwsscffspsbbjjcjwjrwwtgwwgswswwzbzddqnnpqnpnqppwzwszsnsjjpddhvvcbbhhpzzlpzlzppfpvvmcmvvflfttrltrlldlglbgblltqtffrtrwrzwwzmzwmwwlzzhttwzzwnnmrrcdrdjrjqjvqvvjzzgccrllhmhzzfnfwwtzwzwpwhhdjhhmzzbbvggzdzccbzbbpcpqccjbcbppsttdjdnjnppjjnmmszmzgzddtctvctcvttgtbbzqqggnmmdllvdvmvzzhfffzvfvtfvtvwwcnwnvwwbccggjcjqcqcbcrrppdqppdzpzqppttjhjdjqjppzgzjjpllwrrbttrvvzzbhzzqppndppwqppnrpnnttfwttsrrgprggmtmhmzhzczwzmwzwrwqwrrrdqrrvssnlngnppfqqgbgjjcttbgtbtmtctmcmcmgmsgsffhghqhbbvtbbtltmltlnlpnngcnggbngbnnzgzccgcpgcpcjppnnzjzdjdggzjzljjhnncgcjcscfctcvttvqtqmqjjsqjqpqfqhqmmlvvmppfrfjjngnnfllrlhhppcjcbjcctgcgtcgcvgvffqfcfpcpdpffrbrvbvnnphpqpfqqtnttmtgtlgtgzttnvvpwvwvcwcfwcwmccwlclqlflpflplwpllndlltlqtlqqmqnqmnqnvqvrrtddqndnrdnnpzprrqnnggvqvhvpvptvvvzwzrwwscsqqmcmttbgtgpptzptzzvszvzdvvtsscbbrpptssltssztszttlvlqljlgljlhhwvhwvvqhvqhqrhqqcnqccnbcbppbffzqfqsfspsqsjjrhjjchcmhmnhmmzjmjmfjmmsbsvvgcggtdgghchrrpnnrttnthtdtmmhmdmppmgpgllrwlrwlwvvlmlglppzttsvsbsnbncnjnffddzcddbzzbzgbghhhtltwtggljjggsdswwpmmfhfsfvfrrgmrgrfggvzzbnbttwqqdcdppqcqpcpqpjqpjpbbgjbgjjfwfwpfpgpzgzmzgzdzzpwzwqqjqfqllgrgjjfvvqnvncntngnhgnhgnnzvvbsbmbqmqwmqwwhbwhhsccvhcclncnqccnvnzvvdgvgnvnttmbbhccwgwttlwtwqttqcqmcqcdcmmjpmmjsjhhprrnnqddjwdjjvvhvgvssthhnfhnnntfthhtggthhbrbrjbbjfbjjrgrsrjrqqqfwflfclflnnnnvggfqgqzzbbvttfcfvcvsswvssnzndndvnvqqznnrjnnsmmptmppncpchcctwtbbgbqqjqtqsqfsfvfvnvmvzzpgzppdzdvdqdjdnjnttvvjbbzrzqrqwrqrbqrqsqpspjssnqnpqqnjndjjzmmvbbrqrccrffhwhggbttpnpphwhhmrrndrnddzqzzfbfwbwnwtwjjwjmjsjcjgcjjfcftcffvpvwwbffgzgnnlfffnddtdbdlbbcjbjmmfpfzfbbwbdwwfmfpmmfjfffvzvdvvhrvrcvcscjjpfjjnfnzzrtrpphtppzrppwhhphthltlllttghgwwvlwlflhldlzzmbzzjppnwppvlplqqbtbwwccswccqzzjhjbbhbnhnshnsslmmlqqjfjrjjmvvhpjqhzqffhsdsbwpjvgpvmbfqltrmpnwfcptpfmtjcpbzfldbhcmzchshrlbjgggrfjcqhzqqvbzsczmbgqmzqmltlrtlbnsfvmlhbbcqbbltjpdrpznrglshvgdnqwlhthghvtbffddcjwgdzfswzbppjtdhstcqqmvzmjrvfjbhmrznwqczdjjclnhbmtdvvzwttwnrlfqwpglpcppdwdcvfqpqfnmbvzvmqlmnlgnrsqdjvtsftgnlrtzsrcqhltmhzhpmzqqfqrjwhqfnqdtnshwgfhcpjrlplnqczdlntnhsczrgfhflsfbmftsbptflqbpwblrfnfzvqtpblftmscpzgdhhsbdbjhqclnptwtmhbbfglmvwnbqgvqhmmswwjpfwqjbvznmcpdzcvbzjmfqnwstvvtdnlvnpznnblfqzjjrjgnsbtmmbjzsvmgwddtnzcvhvtdrmjgtcrjzznrssscrzcfbfpgpnpppsqcqpccnbdjnwrbvhrcwgqncjrzbdhzqpfhqbnvbfrzmlfbfvtpggrtdswnvlsvpjsmfchhpbbszbnqqfrmhpqzdjhmhmnnmplbtrpgphvvqdfbcfnrfrbfbtshlmlfltjnbmggqntvhdnlvtcvlhmlrlfzfrqmlwqzrdghvdvtsqvmpdjrjclmlmgjqwzzldnzvfmwmrrnfghsvpcwjdtlnrhpjczwpgfbhpnmcbpthsndfflbjhnlwdbbmlttfqcmswvppslptgzbvfgppvpnhjccrpgrpwtngmmccjghhcwddmnglschnpjwqtrtsvggnpzvsqshfvcnhptphtlmqmpznfzwvbnhwpsfwvpflsdjcjgfzjprbbfzgdbmrjgwrgfdphghrhnpvfncrdzcwtthmqtdwlhjsdthqpzhbjpgggndtrmwvcsqhzrzwbhtqsqthvqncprvnpsrlpvlvcjrcflhbdhrfthlfnqbzbmvlvhmbjnbbjhpjwlfflfhpfwcwnnsljthvzwprqjmgpldlzjnjtjfjrgnrpzpvzfcsrprbjhwnmccwhppjrlnndjdjzqwpcwnvqwgmnwbrjqqvbplvsncnmdfrbhrrhghfllhrghzmlnltgdsqlgbvnlchgcbqlpqptdwmsjpqrprlhqmstzjfnzgbgvlfshwpcrgzcqmmfwvhwlsdvplmdgrtfrjwpfvhnjqdbwsfcqhchstlzfpdljgvcqsfcnqccnpmvsqbmwjtzwhpglhbjwzmvgqwjhvwfhnlbtsgljzmlldcpjwdcfppmnmphdmhpmdqwwtjtrdhlrjlvzgpbcgvwcmtclgpqwhtpbdtdbdscfzbrzmgjlbppcnvphphfnvzdzzlvfsvsgbgqcnlqwmtcrpwzcvnmnvtmcdsstvqpqzdpvtdsbvtwhdvgzqmzvwlspgbwmlnsrqdqnjwrllncflqsrzdqtjqvpnpjlqfwqtlqfqwlltszcwtpmjtldjgvmvptpmzqhwmlvjgnntpvcslmhlhdbjtjjnvsbnzwtdclwbzrvlqzjljtbdjvwgbwcltvnbhfvtgqrbmzbbfvldhmdvfvtlqglnblfmmpjqmzlnfjltsqdrgmlhbhngrrmhnjndggsdcfmtssmmtmzvhzrmwjsqjcvbsgqgtvdmvqlvlrvglrtlshfdmfrmljjggwjbcsztsjmjftcbbjwrmgqvssrvtgzcgthtlgsjspfmdgwptjdrbswqlpfsbtjlnhllmjpbfhgpfcprpdnqqvqdmcbqhbcqtstvnjdzwzwvhhwmcvcfbdwczpwpdhvnstjnbblbprzsccmwrzgfhmrpvzfztvsrtncdhzhptpfqtnqwvqtwdpvcqztgjgrcbdnvqftphtfbtqdhrffdrdmwsbpvhshzvjbvsrljnzddmmfgcnfdssvzdbsfwmfjsdnslbrqsqfwfqbqszjwvgcjbhrfjcnlfhzvhcbbbpmhhvjdtgrqlcchqtvnhlrgtssllvgcdjrlzlzfbrrrvwvvcgfjdlpscsqljmmwmvwnvrgdmgcbvmwmgprbfrbgptlfjbhrmczwrzwbdhdvtgvldnzfgcngdfhbgqsfzlrbwbvdflrrsrcwthjzvgmdtndgtsjtswfbdqvcjtsdvrvqpmmdlghsdbzplgpfnstplpjdvttgzmnhssftqcqjvdvvdrmltbrpsjvqwbljrqrtqldzbwzznsdstvmdzbrvvtgrrphmbrzwnjbmqvfhljcdlbzqtcbjsfqdqcr

986
ressources/day07-input Normal file
View File

@@ -0,0 +1,986 @@
$ cd /
$ ls
dir bnl
dir dmpsnhdh
272080 dncdssn.hdr
dir fcnqg
6067 hjpmqrq
dir jvwtm
dir ldztz
dir lmmw
dir wthvqw
dir zpdnprb
$ cd bnl
$ ls
dir dhw
dir dmpsnhdh
dir lmw
dir vgbqbrst
$ cd dhw
$ ls
237421 vccwmhl
$ cd ..
$ cd dmpsnhdh
$ ls
dir chf
dir mjpbhjm
dir zwhpwp
$ cd chf
$ ls
4679 lmw.wmp
217367 wwnfv.qqr
dir zfgznbz
$ cd zfgznbz
$ ls
179409 cnj.gdn
171574 vglqg
$ cd ..
$ cd ..
$ cd mjpbhjm
$ ls
dir crf
dir hqnj
dir lmw
18783 lmw.rwr
302608 twpq
166891 vqczlg
$ cd crf
$ ls
32183 dltmqht
240428 frqqdsr.hbf
224910 sgtnrvrt
$ cd ..
$ cd hqnj
$ ls
261723 cgstb
77979 dmpsnhdh.cmd
$ cd ..
$ cd lmw
$ ls
50307 fcqrwd
$ cd ..
$ cd ..
$ cd zwhpwp
$ ls
141133 gdngm.mps
$ cd ..
$ cd ..
$ cd lmw
$ ls
dir dvv
267473 jmqgrh.dlz
295139 rrqjwpm
$ cd dvv
$ ls
114536 gmlmbrrw.wdm
102061 lmw
$ cd ..
$ cd ..
$ cd vgbqbrst
$ ls
105102 dmpsnhdh.bgl
269054 gmwgjf.fzz
dir jbdtpnw
245266 jzsjvgl
216220 lmw.gtb
dir rflp
dir twpq
$ cd jbdtpnw
$ ls
27543 cjvvmzp
$ cd ..
$ cd rflp
$ ls
137601 frqqdsr.hbf
83444 rrqjwpm
$ cd ..
$ cd twpq
$ ls
dir rlbsdj
36846 tnrqzjdd
$ cd rlbsdj
$ ls
56078 bvndq
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd dmpsnhdh
$ ls
dir fnpwwhtj
dir lmw
9090 mgjpsvl.jlh
186374 pbb.zln
$ cd fnpwwhtj
$ ls
dir cgp
$ cd cgp
$ ls
81938 hjpmqrq
281971 jvszf
151057 wmr.bnf
$ cd ..
$ cd ..
$ cd lmw
$ ls
dir bfbv
56929 pbb.zln
dir rrqjwpm
dir sngm
$ cd bfbv
$ ls
92667 qrrttb.jgp
$ cd ..
$ cd rrqjwpm
$ ls
25739 cqljn.zqw
91325 dncdssn.hdr
$ cd ..
$ cd sngm
$ ls
282163 jgrj
dir lmw
237524 lmw.dff
153497 lmw.ntg
dir lqd
dir szn
143535 tvpvc.qpr
98326 vbfgh
$ cd lmw
$ ls
32484 dncdssn.hdr
dir glwr
$ cd glwr
$ ls
144719 frqqdsr.hbf
$ cd ..
$ cd ..
$ cd lqd
$ ls
231401 dncdssn.hdr
dir jnjqmvg
dir lmw
199704 rrqjwpm
$ cd jnjqmvg
$ ls
104947 trpsrfjz.brg
$ cd ..
$ cd lmw
$ ls
230298 rrqjwpm.nnv
158947 wfv.qrb
$ cd ..
$ cd ..
$ cd szn
$ ls
197974 frqqdsr.hbf
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd fcnqg
$ ls
251609 dncdssn.hdr
289497 jdjmftqs
228459 qbmthcq
$ cd ..
$ cd jvwtm
$ ls
dir dmpsnhdh
47959 pbb.zln
dir tlr
dir twpq
dir wbgcsw
dir zjmldjdh
$ cd dmpsnhdh
$ ls
247567 bnl
102471 bnl.wdm
80054 fhqvp.hfm
dir llhp
dir mnsbh
dir mpplsfjp
20844 mtvl.lmp
$ cd llhp
$ ls
180255 dmpsnhdh
$ cd ..
$ cd mnsbh
$ ls
267627 dmpsnhdh
$ cd ..
$ cd mpplsfjp
$ ls
dir bnl
233742 tcnpvqc.tdr
$ cd bnl
$ ls
243223 fcqrwd
$ cd ..
$ cd ..
$ cd ..
$ cd tlr
$ ls
dir vcsngm
dir wndmt
$ cd vcsngm
$ ls
36434 czs.dnv
$ cd ..
$ cd wndmt
$ ls
dir fvmtfcqd
dir nvdb
dir nwqqgl
dir sbspgnpm
$ cd fvmtfcqd
$ ls
237025 nzttjt.rzh
$ cd ..
$ cd nvdb
$ ls
235328 dnrqwqtp.vfc
51984 rhblt.mfz
51332 rjhvhw
$ cd ..
$ cd nwqqgl
$ ls
203534 cjghw
dir cljbrh
$ cd cljbrh
$ ls
133820 lmw.dnd
$ cd ..
$ cd ..
$ cd sbspgnpm
$ ls
270010 hjpmqrq
$ cd ..
$ cd ..
$ cd ..
$ cd twpq
$ ls
dir dmpsnhdh
dir hbchdjjp
247649 hjpmqrq
29891 rrqjwpm
72407 twpq.crb
$ cd dmpsnhdh
$ ls
251490 dncdssn.hdr
222231 hjpmqrq
102058 pbb.zln
$ cd ..
$ cd hbchdjjp
$ ls
70058 dprrmd.qcd
230958 tsdbl.bnq
$ cd ..
$ cd ..
$ cd wbgcsw
$ ls
292028 bhtfcf
dir bnl
dir bqq
dir ctnlpgt
247888 hblhfvwj
dir hbqm
277949 pbb.zln
106225 rrqjwpm
125927 ssqpmlfb.gwm
dir zqmjwsgz
dir zwwphs
$ cd bnl
$ ls
dir fbbr
240500 frqqdsr.hbf
dir mzfrdl
25137 srqlww.mcj
dir tqgrdz
dir ztrnq
$ cd fbbr
$ ls
84414 mjbw.dhs
$ cd ..
$ cd mzfrdl
$ ls
135647 bccwgn
dir cjdptqgh
dir hwdnrqns
dir prq
$ cd cjdptqgh
$ ls
147946 mdgl.drz
11972 pbb.zln
$ cd ..
$ cd hwdnrqns
$ ls
dir dmpsnhdh
$ cd dmpsnhdh
$ ls
254432 phthmn
$ cd ..
$ cd ..
$ cd prq
$ ls
75827 dmpsnhdh.rtl
$ cd ..
$ cd ..
$ cd tqgrdz
$ ls
251475 bjwnll.rlw
$ cd ..
$ cd ztrnq
$ ls
208497 bnl.dtr
179376 gqnbswcj.hht
$ cd ..
$ cd ..
$ cd bqq
$ ls
202201 bnl.lbm
$ cd ..
$ cd ctnlpgt
$ ls
269484 vsfvzrpr
$ cd ..
$ cd hbqm
$ ls
74455 bvnfz
42748 pbb.zln
$ cd ..
$ cd zqmjwsgz
$ ls
146194 pbb.zln
$ cd ..
$ cd zwwphs
$ ls
209587 mtbzd.nwb
$ cd ..
$ cd ..
$ cd zjmldjdh
$ ls
dir cdq
dir mdclfbs
dir tfc
132043 wrm
$ cd cdq
$ ls
289173 twpq.mrn
$ cd ..
$ cd mdclfbs
$ ls
64639 bnl.jwf
dir hpdgt
72868 hznfj.nmj
159467 lmw.bfz
$ cd hpdgt
$ ls
52760 fcqrwd
54661 tzgt.hvh
$ cd ..
$ cd ..
$ cd tfc
$ ls
185481 bwntlh
18925 fcqrwd
$ cd ..
$ cd ..
$ cd ..
$ cd ldztz
$ ls
128430 bwz.fcz
dir dmpsnhdh
dir lbqgz
dir znrnj
$ cd dmpsnhdh
$ ls
238193 dncdssn.hdr
285939 hwfngq.dpw
$ cd ..
$ cd lbqgz
$ ls
171931 vgrp
$ cd ..
$ cd znrnj
$ ls
153738 vmwwbjqd
$ cd ..
$ cd ..
$ cd lmmw
$ ls
dir bqqnsfdj
163303 fcqrwd
43453 frqqdsr.hbf
33319 hjpmqrq
dir rlpcqtzg
$ cd bqqnsfdj
$ ls
dir bnl
2251 hjpmqrq
14707 rrqjwpm
dir tlnbvhdl
$ cd bnl
$ ls
33357 bnl.fqp
151237 bnl.vbs
40294 dmpsnhdh.hwz
76455 dncdssn.hdr
290341 hjpmqrq
dir lmw
dir nqw
$ cd lmw
$ ls
dir sfj
$ cd sfj
$ ls
156532 fcqrwd
$ cd ..
$ cd ..
$ cd nqw
$ ls
59928 dncdssn.hdr
$ cd ..
$ cd ..
$ cd tlnbvhdl
$ ls
183301 hjpmqrq
$ cd ..
$ cd ..
$ cd rlpcqtzg
$ ls
258638 dqt.mlc
$ cd ..
$ cd ..
$ cd wthvqw
$ ls
224501 pbb.zln
$ cd ..
$ cd zpdnprb
$ ls
dir bnl
dir ffg
dir jljlwpsv
212081 lrzc.lhj
dir rrqjwpm
dir twpq
dir vlgsrtm
$ cd bnl
$ ls
124009 hjgjf
74860 hjpmqrq
84996 lrdl.swf
dir pnzmp
$ cd pnzmp
$ ls
dir btbtlrs
128636 nfzf
$ cd btbtlrs
$ ls
107651 hhzbwd.wzj
$ cd ..
$ cd ..
$ cd ..
$ cd ffg
$ ls
57918 jwzbs.tnt
$ cd ..
$ cd jljlwpsv
$ ls
188175 dmpsnhdh.nnb
46693 fcqrwd
111557 pbb.zln
$ cd ..
$ cd rrqjwpm
$ ls
dir bftw
dir ccsfws
87225 mccw
290654 pbb.zln
147394 twzqc.pbz
52983 wsvgf
dir wwfgbzqh
$ cd bftw
$ ls
dir brl
167154 crs
dir lmw
dir rrqjwpm
dir twpq
174963 twpq.wjl
dir vnfhb
dir wcldzp
$ cd brl
$ ls
297937 wspcnp
$ cd ..
$ cd lmw
$ ls
166695 mcjql.jrv
$ cd ..
$ cd rrqjwpm
$ ls
198762 mwn
$ cd ..
$ cd twpq
$ ls
141835 jlwf.hcd
$ cd ..
$ cd vnfhb
$ ls
128626 tvmwhq.wfn
$ cd ..
$ cd wcldzp
$ ls
dir ncq
dir twpq
$ cd ncq
$ ls
dir wrtw
$ cd wrtw
$ ls
133331 fcqrwd
$ cd ..
$ cd ..
$ cd twpq
$ ls
151811 fcqrwd
$ cd ..
$ cd ..
$ cd ..
$ cd ccsfws
$ ls
100548 twpq.ppm
$ cd ..
$ cd wwfgbzqh
$ ls
dir lmw
dir mfms
dir pjbjgbcl
204154 qtflzwm
226500 vdmjj.htj
dir wzqbwr
$ cd lmw
$ ls
dir bgl
95150 dncdssn.hdr
119653 frqqdsr.hbf
97941 hjpmqrq
dir jqthwzj
$ cd bgl
$ ls
dir lmw
dir rrqjwpm
$ cd lmw
$ ls
233655 wmdldvbz
$ cd ..
$ cd rrqjwpm
$ ls
242918 frqqdsr.hbf
227581 hjpmqrq
dir hsvnmlp
dir nsch
25524 pbb.zln
dir qlgg
dir twpq
67453 twpq.fms
$ cd hsvnmlp
$ ls
264517 pbb.zln
$ cd ..
$ cd nsch
$ ls
7898 cmsdzh
233270 dmpsnhdh.bsq
101256 frl
133902 jzvh.vdv
dir lmw
dir sgjsg
130245 wcftvft
$ cd lmw
$ ls
69572 bnjnc.csp
$ cd ..
$ cd sgjsg
$ ls
38856 tnzpz.tbq
$ cd ..
$ cd ..
$ cd qlgg
$ ls
276013 frbstg.pzb
$ cd ..
$ cd twpq
$ ls
136454 fhwz.bqb
94099 rglp
114026 tsrt.cbd
26252 zhclpzm.rqf
$ cd ..
$ cd ..
$ cd ..
$ cd jqthwzj
$ ls
128200 lmw.btl
$ cd ..
$ cd ..
$ cd mfms
$ ls
274935 dmpsnhdh
76547 lchwq.dsd
215701 pbb.zln
dir rmwtvjt
$ cd rmwtvjt
$ ls
74490 hjpmqrq
$ cd ..
$ cd ..
$ cd pjbjgbcl
$ ls
231757 cjcpwwc.wbf
dir cswvftzs
dir jtvtg
dir lmw
dir tnctbjr
dir tqsrfhdr
$ cd cswvftzs
$ ls
dir dchqnbns
dir smf
$ cd dchqnbns
$ ls
94111 szl.hqs
$ cd ..
$ cd smf
$ ls
dir dlnsgvl
dir zglt
$ cd dlnsgvl
$ ls
dir dsz
$ cd dsz
$ ls
156473 hjpmqrq
$ cd ..
$ cd ..
$ cd zglt
$ ls
295383 frgg.sdp
$ cd ..
$ cd ..
$ cd ..
$ cd jtvtg
$ ls
202254 bftv.rqb
58419 lmw
$ cd ..
$ cd lmw
$ ls
8097 fcqrwd
$ cd ..
$ cd tnctbjr
$ ls
250830 frqqdsr.hbf
dir gzrcqr
$ cd gzrcqr
$ ls
dir fnzgsnv
$ cd fnzgsnv
$ ls
117215 hjpmqrq
$ cd ..
$ cd ..
$ cd ..
$ cd tqsrfhdr
$ ls
96381 lmw
$ cd ..
$ cd ..
$ cd wzqbwr
$ ls
149066 dmpsnhdh.vnd
dir dpbcgfdr
dir swp
14495 twpq.gsb
dir zhj
$ cd dpbcgfdr
$ ls
12909 dmpsnhdh
dir jvn
173491 mnhpr.lpr
222018 rfqfjmd.jqq
205077 wbbdrpr.hzj
dir wzpbbbhm
$ cd jvn
$ ls
117656 vqddrqlq.nfd
233109 vqqvh.swz
$ cd ..
$ cd wzpbbbhm
$ ls
143534 pbb.zln
$ cd ..
$ cd ..
$ cd swp
$ ls
131295 pbb.zln
$ cd ..
$ cd zhj
$ ls
166268 pbb.zln
33734 rrqjwpm.blg
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd twpq
$ ls
dir bppvlwqs
dir bvh
dir rmcdr
dir tdn
2230 whb.lfb
dir wwtwnvh
$ cd bppvlwqs
$ ls
195026 hvlhgsw
279259 rrqjwpm
$ cd ..
$ cd bvh
$ ls
dir lmw
$ cd lmw
$ ls
66958 pdqnd
$ cd ..
$ cd ..
$ cd rmcdr
$ ls
dir dmpsnhdh
182930 grj
dir pmrdhrth
119725 qpcqclqh
77890 sjgfjz
142855 twpq
dir zbmcrvbh
$ cd dmpsnhdh
$ ls
dir rrqjwpm
188474 zgjzpbl.vgv
$ cd rrqjwpm
$ ls
dir bnl
dir lmw
7598 vsntvs.pdv
$ cd bnl
$ ls
245600 lmw.mgf
$ cd ..
$ cd lmw
$ ls
73396 hjpmqrq
$ cd ..
$ cd ..
$ cd ..
$ cd pmrdhrth
$ ls
173155 rrqjwpm.pjw
178530 smgpzs.qtj
$ cd ..
$ cd zbmcrvbh
$ ls
124201 fcqrwd
135578 hjpmqrq
54356 hnztplsp.qlh
dir lmw
58350 pbb.zln
dir qfrvdm
dir rcg
15267 rwbzjpt.djn
$ cd lmw
$ ls
dir bbbll
28362 bfgfwlf.wvg
229637 dmpndms.fln
146121 dncdssn.hdr
131039 frqqdsr.hbf
152805 hjpmqrq
dir mlz
$ cd bbbll
$ ls
169940 dncdssn.hdr
216888 pbb.zln
248369 tjpmlr.vmf
$ cd ..
$ cd mlz
$ ls
115167 bhfv.fts
$ cd ..
$ cd ..
$ cd qfrvdm
$ ls
284564 pbb.zln
$ cd ..
$ cd rcg
$ ls
dir sqzjz
$ cd sqzjz
$ ls
116435 jrstpcpl.zsq
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd tdn
$ ls
143971 cmg
133317 fcqrwd
dir pstpclp
133161 tddv
$ cd pstpclp
$ ls
267351 hjpmqrq
86930 rrqjwpm.dvl
$ cd ..
$ cd ..
$ cd wwtwnvh
$ ls
256584 frqqdsr.hbf
114564 twpq.wrd
$ cd ..
$ cd ..
$ cd vlgsrtm
$ ls
148089 bnl.jzj
119796 cjfphsfw.hnd
197668 cpw
dir dmpsnhdh
dir fjsglr
dir lmw
dir lqgrft
9231 pltdltrs
dir rmdp
109777 rncfff.fll
dir vgjzqjpq
dir ztnqnfnq
$ cd dmpsnhdh
$ ls
dir lltnrdtv
dir scthsg
$ cd lltnrdtv
$ ls
179511 pcvmpz
90913 tbr
$ cd ..
$ cd scthsg
$ ls
dir rrqjwpm
$ cd rrqjwpm
$ ls
188629 fcqrwd
$ cd ..
$ cd ..
$ cd ..
$ cd fjsglr
$ ls
139754 fcqrwd
dir pnsjwfzc
$ cd pnsjwfzc
$ ls
113848 lmw
$ cd ..
$ cd ..
$ cd lmw
$ ls
54999 dmpsnhdh
dir ffhcf
251476 frqqdsr.hbf
dir jpgqspqw
198972 nhfclq.pbh
180380 nqmjnvc.fvr
dir pfsjwmbc
213768 rcvccgcd
$ cd ffhcf
$ ls
40478 svmwstq.sjj
$ cd ..
$ cd jpgqspqw
$ ls
22181 hjpmqrq
$ cd ..
$ cd pfsjwmbc
$ ls
dir bcvchw
$ cd bcvchw
$ ls
225892 bnl.nwc
$ cd ..
$ cd ..
$ cd ..
$ cd lqgrft
$ ls
dir rrqjwpm
dir twpq
$ cd rrqjwpm
$ ls
54786 fcqrwd
3053 tthhqjm.ntd
$ cd ..
$ cd twpq
$ ls
109355 bnl
dir lmw
dir mhgqt
301291 rrqjwpm.lrm
271233 twpq.srp
$ cd lmw
$ ls
dir lmw
dir lngbszqm
$ cd lmw
$ ls
139640 pbb.zln
$ cd ..
$ cd lngbszqm
$ ls
98279 mqvq.gsj
283599 rvjd.dvt
$ cd ..
$ cd ..
$ cd mhgqt
$ ls
208165 fcqrwd
$ cd ..
$ cd ..
$ cd ..
$ cd rmdp
$ ls
dir bqn
170956 fcqrwd
90954 snnttp.gld
$ cd bqn
$ ls
75628 hdrgbrpc
$ cd ..
$ cd ..
$ cd vgjzqjpq
$ ls
dir bnl
dir wpfw
$ cd bnl
$ ls
25911 pbb.zln
$ cd ..
$ cd wpfw
$ ls
247784 bzll.ltc
$ cd ..
$ cd ..
$ cd ztnqnfnq
$ ls
dir dtpzsrfc
214055 srgzhp.nlr
$ cd dtpzsrfc
$ ls
142652 bhgwj

View File

@@ -0,0 +1,23 @@
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

99
ressources/day08-input Normal file
View File

@@ -0,0 +1,99 @@
002100030222341303232115221524311502200403234452204125251345024423544443305142410110142101223120110
102030322341143330244233013052025453422005415304655426206452251310214055314024034341233110302320003
003012203404011430120134554314552441635001641050211406204621114102021543144514102510421243314102033
330313423002034140035001210441156554545625042262651356556544202500446121455112434243313013430141203
331203121131230002055113430244610062654034520106363462155201210355601153542301323442223310134324300
232201231021003254355411402310326206625011564114125202263504451451212600155351424154310240411213431
033033333301011523544023206136145505304224325606020360006206455564513553512054354124523232201230441
132201032234334044251334220345360402456541662253556375754662323265201641514121105025300453041111234
314322341322104402235020206565044225363527617767574524475421763504341061551154250344125514014234344
101323043023430543342440532324326413655657527215661116623455613664321005134300223542510253102211310
320404242514122111525043444530625417656773117247512712444315767422412130351505513231104322032421303
221204123205133142044056245654205231734371546616753217321556472223654044043612554152141554333102034
340310155225452152216635634352712541366312326272262143522347111166646736001360102010220214000133002
012404003515002416422500163244271366252711531615333437352461454777311142132000140205630042305222013
332434552302203445503543424523327464362526657251687634745536521746523154717531643250132300541053000
020130312425316362611130462217125425435545265467725256332777233137141524314631100051153314314343032
112115124512002346011342433146124542356845483862756322785545283652723747276776403131622540014001524
332354013101003031053022245431274627654677343638672643442563448782737464337546541546630431125021330
220315320142064161406534365262377268373743527784575246325564676238816733767331345114363612344051535
102041153526000601402325625766534543527882476653366727573448727775677146365732431425225562043130034
350054114310533002426654125166575285757827422257872378766383267543484865317252532765440216543555512
222440404353016144747347457368562668586285847553578732435887584463446862116134751240360645225435344
554234546163262630313431762248876668663352436888374587856263343842526635237314231451062036605442520
525531324662660356256614344438373575732699988366775989976447384338336827686445577222030363631240512
055541261042533424177375756738443482846986979788978997559377679255463858237757327464422026230510130
514123221240250442457744728347386637684953574546455344754548333793233865436751231314653541223102202
355454250661114645144551785724753237378345375493453967559796675839837444334776625552412552302431302
202445234333206767744653874724276586973668878949653473947686567565487325864733735677672241416513452
445415223211061633767433865252483574744685974593334963668983745643354885658423263536531213102544202
201405464251164654177385783224666473975674643767946648464678958969336335638578275154116223152222102
401423140356441654745572266848965593553995667644648964747884544439493545472454437715336645303346422
154440323240741427732867467564957336394985859766644495658985963583496399736552632162756445212536404
441663663062661372122867364584655388977474857585778686889578799644949733463423826715534215154065204
422036122016243651174663588693898583374968974778579585977478599643389537573534354622377452555411315
430412403362272513348763673566578945645997454758694486758844958569786758359475575577532661126532300
503653020441267422765353469867998339764449596776968996449777464644846938866332635583727771665263026
006252631541331635768754753357384754988659585857956567666645975599653466655333342485345762600032403
215205542775713732868842389885585646884858449858579777975997584997463698339932263363162431251615251
342224450731115175762626546538955447796468885776778879697695699945446388444478355347827635732006646
045011110226211633623658548365544498466468766878699597655897586488555435934935526883851537736604133
440352212243431376382869634434568447654566895897796875679759667598898849334873844583742271767024403
566632367121414762272448784755746799985759966559657989697977677955455754549393784586875275341562621
004131167135757426882464486773699786789959957795985595559587775554479945637849747667752242212324244
022411031432724262533554794664597446479869568767598899669969588984864457535986725263473577457413134
036415005331162527346577487593798458668976888776888766856699598847776567686579476836656723623111342
504001302331545267684439554776894957999788577876688969865558955547965687556849786463457244355044511
464266074264126575276833864784546697885788878967966988678696686685576789843676844576623242451411411
660130573642326366362654785549676574587876888769689696798799988678648554635745724364273772474666502
413511521313437652422664948645649566979966676679778669968777776786958464356797545247763267365643645
455033174473274564484285387995879595555686569997977698868769855686564847593489668858847744131410225
560316675532344635443349663994499869866598568889798868967976679655597494679336978524332246567265361
121053163342234352453837754569968465557968697766766888969966667796479457384444468264837376474515455
604062313527642634768255846899648545559665886668966887999959659769978495794795825775373713613231451
041031112622754332842439776736966994677888699898679988967779696758849589365579766676242256227420364
630161363126476778455475799658545955598576568877768698668579988799596866465635488284555252726211044
455563641427127283364758796475975894658677688789777769876667978747955677573575525588444241765111511
256420063532645225542863884958844496596759999769769687678888788875449888945958948378756476127155054
523256165217547362636325547686549767698957967985968987897777685866576744344388256886854362647342110
205224606764556763544234874676659474468968576879668558856675855668779847849738247387744421321145610
022651355615653552468486676459694744747575877656886776677858584988944678787576556747724125467333305
526313424324717126486746644643397589664468865599858886996669788566489473798387676766873216657521426
426530404522411762572567697375959747975669667958685679878659587764977658398697353283563215312244014
023510245741131775436864579684699874979976567776557765866775469587757498544476554753722641656303654
211341433442225414565332887899363678699495567888998675657659688744458493387343842346747477252626250
406543152154335614758277748595836896786654948759999978569588555764838686653647362854723163226456101
333640633617315535456525364849458558744656899855554897897568844446533866457545654847562377442214226
040003053246534354438748723933365934878485997458955574785966996653353969666867276761661111124104550
405602516206264365157378627495546935658594587869579958969686766986836687348285865231616336232000100
304131030254233641578272475868953446545577766644956989679964489688554398956223433417637732661500540
131164662225325441733366324345477954639475997658684766465487974699579665344326248136151472051130445
452312154206174654138684277376889449945746954689646875777596486949365968888456226732332263263420000
003010154551246223274282454345355673349967689986885795449989359633496728553885221437611730454554455
131435126460017635544785754344874379695379366384573934357795398633967475353836864461424146264354142
350154544045013352533173566257757787385448697484997454578735937499665628425542376452563635450224022
302420224365163651765264446875287359533637498445639443969586466433384346337722662774436566624454214
415242456321105173655733744886343826548944666338683876383973497998744488687446541256724244661531431
155303206134314124372553618623857237346567857564464797593393675563536467777317174625640132203003240
335521544652523624641575451785635352333587957647598535633948867838652636686573137515062356442045153
235314500244636615342325346277256685653838226755493858683465683736283367654226655456541546644313125
252520511531061305614364671212856473625642477732845278766573642425286572562373137446456005011330433
241525455120116046543737642325543677623243884242534423327827446383376441727657314343125403632434002
301045223551220356167117621755325772252845222546246588464784874685774676163655131632622146412415515
011150133311336614251435416453632383454327534367288242328746537673543714263674263262001132354544412
314104033000306256531666256433553535833538337463847277453476563227672715617272601302551120422305504
104211442013141664402363645617163435245556228235337864656673626354151416721375243323635625100210424
413422313502535362615054171511431775335574748526574728747453724472157632635263350024552502052340024
131225301023304456424150404525765416565572272321835377167235317312551645334432406536160545434122120
342131052232413325301451041516716541737346252413667115612642227312572433104525003114240240141232002
244421101354005430232434420344323273421374225635551363463245561271743411452116466311034334101231020
232404402304311415164151401553463731147111147752141732625152553615361046133341313265525232544143442
201321033520133414312301326330253041267251614477322566645472656414545035321106361434351501123314104
211232034442524242313453325046331353174352335422752364775746537513333534355120322320404054014303124
224032233240430510135541652065052415154147565656231651653327511443424113100543020223335130010141400
004110101133543440511523265424013341433043655022512172622140322434116104552043413352211021312421433
000304433232402410151205333526613043463556021413402141634154404530112303306244402221312522221004042
200204441020135232033032541516232550445221141520665016336536052063115335040344025054213324400312303
300211022440310123055510053251505226452265556365100101014044645236505213550201425252404100302413231
310312413210032422053242024243343060135340422313312403505631104430120233112324204414021331012401232
132020341330304022053503522313342026211133610000020554213662244142551253124302245242110111033101203

2000
ressources/day09-input Normal file

File diff suppressed because it is too large Load Diff

139
ressources/day10-input Normal file
View File

@@ -0,0 +1,139 @@
addx 1
noop
noop
noop
addx 5
addx 5
noop
noop
addx 9
addx -5
addx 1
addx 4
noop
noop
noop
addx 6
addx -1
noop
addx 5
addx -2
addx 7
noop
addx 3
addx -2
addx -38
noop
noop
addx 32
addx -22
noop
addx 2
addx 3
noop
addx 2
addx -2
addx 7
addx -2
noop
addx 3
addx 2
addx 5
addx 2
addx -5
addx 10
noop
addx 3
noop
addx -38
addx 1
addx 27
noop
addx -20
noop
addx 2
addx 27
noop
addx -22
noop
noop
noop
noop
addx 3
addx 5
addx 2
addx -11
addx 16
addx -2
addx -17
addx 24
noop
noop
addx 1
addx -38
addx 15
addx 10
addx -15
noop
addx 2
addx 26
noop
addx -21
addx 19
addx -33
addx 19
noop
addx -6
addx 9
addx 3
addx 4
addx -21
addx 4
addx 20
noop
addx 3
addx -38
addx 28
addx -21
addx 9
addx -8
addx 2
addx 5
addx 2
addx -9
addx 14
addx -2
addx -5
addx 12
addx 3
addx -2
addx 2
addx 7
noop
noop
addx -27
addx 28
addx -36
noop
addx 1
addx 5
addx -1
noop
addx 6
addx -1
addx 5
addx 5
noop
noop
addx -2
addx 20
addx -10
addx -3
addx 1
addx 3
addx 2
addx 4
addx 3
noop
addx -30
noop

55
ressources/day11-input Normal file
View File

@@ -0,0 +1,55 @@
Monkey 0:
Starting items: 52, 78, 79, 63, 51, 94
Operation: new = old * 13
Test: divisible by 5
If true: throw to monkey 1
If false: throw to monkey 6
Monkey 1:
Starting items: 77, 94, 70, 83, 53
Operation: new = old + 3
Test: divisible by 7
If true: throw to monkey 5
If false: throw to monkey 3
Monkey 2:
Starting items: 98, 50, 76
Operation: new = old * old
Test: divisible by 13
If true: throw to monkey 0
If false: throw to monkey 6
Monkey 3:
Starting items: 92, 91, 61, 75, 99, 63, 84, 69
Operation: new = old + 5
Test: divisible by 11
If true: throw to monkey 5
If false: throw to monkey 7
Monkey 4:
Starting items: 51, 53, 83, 52
Operation: new = old + 7
Test: divisible by 3
If true: throw to monkey 2
If false: throw to monkey 0
Monkey 5:
Starting items: 76, 76
Operation: new = old + 4
Test: divisible by 2
If true: throw to monkey 4
If false: throw to monkey 7
Monkey 6:
Starting items: 75, 59, 93, 69, 76, 96, 65
Operation: new = old * 19
Test: divisible by 17
If true: throw to monkey 1
If false: throw to monkey 3
Monkey 7:
Starting items: 89
Operation: new = old + 2
Test: divisible by 19
If true: throw to monkey 2
If false: throw to monkey 4

82
ressources/day12-input Normal file
View File

@@ -0,0 +1,82 @@
abaaacccccccccaaaaaaccccccccccccccccaacccccccccccaacaaaaaaaaaaaaaaaaaccaaaaacccaaaaccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaa
abaaacccccccccaaaaaacccccccccccccccaaaaccccccccccaaaaaaaacaaaaaaaaaaaccaaaaaaccaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaa
abaaaccccccccccaaaaacccccccccccccccaaaacccccccccccaaaaacccaaaaaaaaaacccaaaaaacccaaccccccccccccccaaaaacccccccccccccccccccccccccccccccccccccaaaaaa
abccccaaccccccaaaaacccccccccaaaaaccaaaaccccccccccccaaaaacaaaaaaaaacccccaaaaaccccccccccccccccccccaaaaacccccccccccccccccaaaccccaaaccccccccccaaacaa
abcccaaaacccccaaaaacccccccccaaaaacccccccccccccccccaaacaaaaaaaaaacccccccaaaaacccccccccccccccccccaaaaaacccccccccccccccccaaaaccaaaaccccccccccccccaa
abcccaaaaacacccccccccccccccaaaaaaccccccccccccccccccaaccaaaaacaaaaccccccccccccccccccccccccccccccaaaaaaccccccccccccccccccaaaaaaaacccccccccccccccaa
abaaaaaaaaaacccccccccccccccaaaaaaccccccccccccccccccccccaaaacccaaaccccccccccccccccccccccccccccccaaaaaacccccccccccccccciiiiijaaaaccccccccccccccccc
abaaaaaaaaaacccccccccccccccaaaaaacccccccccccccccccccccccccccccaaacccccccccccccccccccccccccccccccaaaccccccccccccccccciiiiiijjjaccccccccaaaccccccc
abccaaaaaaccccccccccccccccccaaaccccccccccccccccccccccccccccccccacccccccccccaacccccccccccccccccccccccccccccccccccccciiiiioijjjjaaccccccaaaaaacccc
abccaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaacccccccccccccccccccccccccccccccccccciiinnooojjjjjaaccaaaaaaaacccc
abccaaaaaacccccccccccccccccccccccccccccccccccccaacccccaacccccccccccccccccaaaaaacccccccccccccccccccccccccccaaaccccciiinnnoooojjjjjjkkkaaaaaaacccc
abcaaaaaaaaccccccccccccccccccccccccccccccccccccaaaccaaaaaaccccaaacccccccccaaaacccccccccccccccccccccccccccccaaaaccciiinnnouooojjjjkkkkkaaaaaccccc
abccaccccccccccccccccccaaccccccaccccccccccccaaaaaaaaaaaaaacccaaaacccccccccaaaacccccccccccccccccccccccccccaaaaaacchhinnnttuuooooookkkkkkkaaaccccc
abccccccccccccccccccaacaaaccccaaaaaaaaccccccaaaaaaaacaaaaacccaaaacccccccccaccacccccccccccccccccccccccccccaaaaacchhhhnntttuuuooooppppkkkkcaaacccc
abccccccccaaacccccccaaaaaccccccaaaaaaccccccccaaaaaacaaaaaccccaaaaccccccccccccccccccccccccccccaccccccccccccaaaaahhhhnnntttxuuuooppppppkkkcccccccc
abccccccccaaaacccccccaaaaaaccccaaaaaaccaaacccaaaaaacaaaaaccccccccccccccaaccccccccccccccaaaaaaaacccccccccccaachhhhhnnnntttxxuuuuuuuupppkkkccccccc
abccccccccaaaacccccaaaaaaaacccaaaaaaaacaaacacaaaaaaccccccccccccccccccccaacccccccccccccccaaaaaacccccccccccccchhhhmnnnntttxxxxuuuuuuupppkkcccccccc
abacccccccaaaacccccaaaaacaaccaaaaaaaaaaaaaaaaaaccaacccccccccccccccccaaaaaaaaccccccccccccaaaaaaccccccccccccchhhhmmmntttttxxxxuyyyuvvpppklcccccccc
abacccccccccccccccccacaaaccaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccaaaaaaaacccccccccccaaaaaaaaccccccccccccgghmmmtttttxxxxxxyyyyvvvpplllcccccccc
abaccccccccaacccccccccaaaccaaaaaaaacaaaaaaaaaaccccccccccccccccccccccccaaaaccccccccccccaaaaaaaaaaccccccaccccgggmmmtttxxxxxxxyyyyyvvppplllcccccccc
SbaaaccccccaaacaaaccccccccaaaaaaaaacaaaaaaaaacccccccccccccccccccccccccaaaaacccccccccccaaaaaaaaaaaaacaaaccaagggmmmtttxxxEzzzzyyyvvppplllccccccccc
abaacccccccaaaaaaacccccccaaaaaaacaaccaaaaaaaccccccccccccccaaaccccccccaaaaaacccccccccccacacaaacccaaaaaaacaaagggmmmsssxxxxxyyyyyvvvqqqlllccccccccc
abaccccccccaaaaaaccacccaaaaaaaaacccccccaaaaaaccccccccccccaaaaccccccccaaccaacccccccccccccccaaaccccaaaaaaccaagggmmmssssxxwwyyyyyyvvqqqlllccccccccc
abaccccccaaaaaaaaccaacaaaccaaaaaacccccaaaaaaaccccccccccccaaaaccccccccccaacccccccccccccccccaacccccaaaaaaaaaaggggmmmssssswwyywyyyyvvqqlllccccccccc
abaccccccaaaaaaaaacaaaaacccaaaaaacccccaaacaaaccccccccccccaaaaccccccccaaaaaaccccccccccccaacccccccaaaaaaaaaaaaggggmmmossswwyywwyyvvvqqqllccccccccc
abcccccccaaaaaaaaaacaaaaaacaaccccccccaaacccccccccccccccccccccccccccccaaaaaaccccccccccccaaaaacccaaaaaaaaaaaaaaggggoooosswwywwwwvvvvqqqmlccccccccc
abccccccccccaaacaaaaaaaaaacccccccccccaaacaccccccccccccccccccccccccccccaaaaccccccccccccaaaaaccccaaacaaacccaaacagggfooosswwwwwrvvvvqqqqmmccccccccc
abccccccccccaaacccaaaaaaaacccccccccaacaaaaacccccccccccccccccccccccccccaaaaccccccccccccaaaaaacccccccaaacccaaccccfffooosswwwwrrrrrqqqqqmmccccccccc
abccccccccccaacccccccaaccccccccccccaaaaaaaacccccccccccccaaccccccccccccaccaccccccccccccccaaaacccccccaacccccccccccfffoossrwrrrrrrrqqqqmmmccccccccc
abccaaaccccccccccccccaacccccccccccccaaaaaccccccccccccaacaacccccccaaaaacccccccccccccccccaacccccccccccccccccccccccfffoossrrrrrnnnmqqmmmmmccccccccc
abcaaaaccccccccccccccccccccccccccccccaaaaacccccccccccaaaaacccccccaaaaacccaaaccccccccccccccccccccccccccccccccccccfffooorrrrrnnnnmmmmmmmccccaacccc
abcaaaacccccccccccccccccccccccccccccaaacaaccccacccccccaaaaaaccccaaaaaaccccaaaccacccccccccccccccccccccccccccccccccffoooonnnnnnnnmmmmmmccccaaacccc
abccaaacccccccccccccccccccccaaaaaccccaaccccaaaacccccaaaaaaaaccccaaaaaaccccaaaaaaaccccccccccccccccaccaccccccccccccfffooonnnnnnddddddddcccaaaccccc
abccccccccccccccccccccccccccaaaaaccccccccccaaaaaacccaaaaacaacccaaaaaaaccaaaaaaaacccccccccccccccccaaaaccccccccccccfffeonnnnneddddddddddcaaacccccc
abccccccccccaaaccccccccccccaaaaaacccccccccccaaaacccccacaaacccccaacaacccaaaaaaaaacccccccccccccccccaaaacccccccccccccffeeeeeeeeddddddddcccaaacccccc
abcccccccccaaaaccccacccccccaaaaaaccccccccccaaaaacccccccaaaacccaaacaccccaaaaaaaaaccccccccccccccccaaaaaaccccccccccccceeeeeeeeedacccccccccccccccccc
abaccccccccaaaaccccaaacaaacaaaaaaccccccccccaacaaccccccccaaaacaaaacaaacaaaaaaaaaacccccccccccccaacaaaaaacccccccccccccceeeeeeeaaacccccccccccccccaaa
abaaacccccccaaaccccaaaaaaaccaaaccccccccaaacccccccccccccccaaaaaaaacaaaaaaaaaaaaaaacacaaccaaacaaacccaacccccccccccccccccaacccaaaacccccccccccccccaaa
abaaaccccccccccccccaaaaaaccccccccccccccaaacccccccccccccccaaaaaaaccaaaaaaccaacccaccaaaaccaaaaaaaccccccccaaccccccccccccccccccaaacccccccccccccccaaa
abaaccccccccccccccaaaaaaacccccccccccaaaaaaaaccccccccccccccaaaaaaaaaaaaaacaaaccccccaaaaaccaaaaaaccccccaaaaccccccccccccccccccaaaccccccccccccaaaaaa
abaaaccccccccccccaaaaaaaaaacccccccccaaaaaaaacccccccccccaaaaaaaaaaaaaaaaaaacccccccaaaaaacaaaaaaaaaccccaaaaaacccccccccccccccccccccccccccccccaaaaaa
abaaacccccccccaaaaaaccccccccccccccccaacccccccccccaacaaaaaaaaaaaaaaaaaccaaaaacccaaaaccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaa
abaaacccccccccaaaaaacccccccccccccccaaaaccccccccccaaaaaaaacaaaaaaaaaaaccaaaaaaccaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaa
abaaaccccccccccaaaaacccccccccccccccaaaacccccccccccaaaaacccaaaaaaaaaacccaaaaaacccaaccccccccccccccaaaaacccccccccccccccccccccccccccccccccccccaaaaaa
abccccaaccccccaaaaacccccccccaaaaaccaaaaccccccccccccaaaaacaaaaaaaaacccccaaaaaccccccccccccccccccccaaaaacccccccccccccccccaaaccccaaaccccccccccaaacaa
abcccaaaacccccaaaaacccccccccaaaaacccccccccccccccccaaacaaaaaaaaaacccccccaaaaacccccccccccccccccccaaaaaacccccccccccccccccaaaaccaaaaccccccccccccccaa
abcccaaaaacacccccccccccccccaaaaaaccccccccccccccccccaaccaaaaacaaaaccccccccccccccccccccccccccccccaaaaaaccccccccccccccccccaaaaaaaacccccccccccccccaa
abaaaaaaaaaacccccccccccccccaaaaaaccccccccccccccccccccccaaaacccaaaccccccccccccccccccccccccccccccaaaaaacccccccccccccccciiiiijaaaaccccccccccccccccc
abaaaaaaaaaacccccccccccccccaaaaaacccccccccccccccccccccccccccccaaacccccccccccccccccccccccccccccccaaaccccccccccccccccciiiiiijjjaccccccccaaaccccccc
abccaaaaaaccccccccccccccccccaaaccccccccccccccccccccccccccccccccacccccccccccaacccccccccccccccccccccccccccccccccccccciiiiioijjjjaaccccccaaaaaacccc
abccaaaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaacccccccccccccccccccccccccccccccccccciiinnooojjjjjaaccaaaaaaaacccc
abccaaaaaacccccccccccccccccccccccccccccccccccccaacccccaacccccccccccccccccaaaaaacccccccccccccccccccccccccccaaaccccciiinnnoooojjjjjjkkkaaaaaaacccc
abcaaaaaaaaccccccccccccccccccccccccccccccccccccaaaccaaaaaaccccaaacccccccccaaaacccccccccccccccccccccccccccccaaaaccciiinnnouooojjjjkkkkkaaaaaccccc
abccaccccccccccccccccccaaccccccaccccccccccccaaaaaaaaaaaaaacccaaaacccccccccaaaacccccccccccccccccccccccccccaaaaaacchhinnnttuuooooookkkkkkkaaaccccc
abccccccccccccccccccaacaaaccccaaaaaaaaccccccaaaaaaaacaaaaacccaaaacccccccccaccacccccccccccccccccccccccccccaaaaacchhhhnntttuuuooooppppkkkkcaaacccc
abccccccccaaacccccccaaaaaccccccaaaaaaccccccccaaaaaacaaaaaccccaaaaccccccccccccccccccccccccccccaccccccccccccaaaaahhhhnnntttxuuuooppppppkkkcccccccc
abccccccccaaaacccccccaaaaaaccccaaaaaaccaaacccaaaaaacaaaaaccccccccccccccaaccccccccccccccaaaaaaaacccccccccccaachhhhhnnnntttxxuuuuuuuupppkkkccccccc
abccccccccaaaacccccaaaaaaaacccaaaaaaaacaaacacaaaaaaccccccccccccccccccccaacccccccccccccccaaaaaacccccccccccccchhhhmnnnntttxxxxuuuuuuupppkkcccccccc
abacccccccaaaacccccaaaaacaaccaaaaaaaaaaaaaaaaaaccaacccccccccccccccccaaaaaaaaccccccccccccaaaaaaccccccccccccchhhhmmmntttttxxxxuyyyuvvpppklcccccccc
abacccccccccccccccccacaaaccaaaaaaaaaaaaaaaaaaaccccccccccccccccccccccaaaaaaaacccccccccccaaaaaaaaccccccccccccgghmmmtttttxxxxxxyyyyvvvpplllcccccccc
abaccccccccaacccccccccaaaccaaaaaaaacaaaaaaaaaaccccccccccccccccccccccccaaaaccccccccccccaaaaaaaaaaccccccaccccgggmmmtttxxxxxxxyyyyyvvppplllcccccccc
SbaaaccccccaaacaaaccccccccaaaaaaaaacaaaaaaaaacccccccccccccccccccccccccaaaaacccccccccccaaaaaaaaaaaaacaaaccaagggmmmtttxxxEzzzzyyyvvppplllccccccccc
abaacccccccaaaaaaacccccccaaaaaaacaaccaaaaaaaccccccccccccccaaaccccccccaaaaaacccccccccccacacaaacccaaaaaaacaaagggmmmsssxxxxxyyyyyvvvqqqlllccccccccc
abaccccccccaaaaaaccacccaaaaaaaaacccccccaaaaaaccccccccccccaaaaccccccccaaccaacccccccccccccccaaaccccaaaaaaccaagggmmmssssxxwwyyyyyyvvqqqlllccccccccc
abaccccccaaaaaaaaccaacaaaccaaaaaacccccaaaaaaaccccccccccccaaaaccccccccccaacccccccccccccccccaacccccaaaaaaaaaaggggmmmssssswwyywyyyyvvqqlllccccccccc
abaccccccaaaaaaaaacaaaaacccaaaaaacccccaaacaaaccccccccccccaaaaccccccccaaaaaaccccccccccccaacccccccaaaaaaaaaaaaggggmmmossswwyywwyyvvvqqqllccccccccc
abcccccccaaaaaaaaaacaaaaaacaaccccccccaaacccccccccccccccccccccccccccccaaaaaaccccccccccccaaaaacccaaaaaaaaaaaaaaggggoooosswwywwwwvvvvqqqmlccccccccc
abccccccccccaaacaaaaaaaaaacccccccccccaaacaccccccccccccccccccccccccccccaaaaccccccccccccaaaaaccccaaacaaacccaaacagggfooosswwwwwrvvvvqqqqmmccccccccc
abccccccccccaaacccaaaaaaaacccccccccaacaaaaacccccccccccccccccccccccccccaaaaccccccccccccaaaaaacccccccaaacccaaccccfffooosswwwwrrrrrqqqqqmmccccccccc
abccccccccccaacccccccaaccccccccccccaaaaaaaacccccccccccccaaccccccccccccaccaccccccccccccccaaaacccccccaacccccccccccfffoossrwrrrrrrrqqqqmmmccccccccc
abccaaaccccccccccccccaacccccccccccccaaaaaccccccccccccaacaacccccccaaaaacccccccccccccccccaacccccccccccccccccccccccfffoossrrrrrnnnmqqmmmmmccccccccc
abcaaaaccccccccccccccccccccccccccccccaaaaacccccccccccaaaaacccccccaaaaacccaaaccccccccccccccccccccccccccccccccccccfffooorrrrrnnnnmmmmmmmccccaacccc
abcaaaacccccccccccccccccccccccccccccaaacaaccccacccccccaaaaaaccccaaaaaaccccaaaccacccccccccccccccccccccccccccccccccffoooonnnnnnnnmmmmmmccccaaacccc
abccaaacccccccccccccccccccccaaaaaccccaaccccaaaacccccaaaaaaaaccccaaaaaaccccaaaaaaaccccccccccccccccaccaccccccccccccfffooonnnnnnddddddddcccaaaccccc
abccccccccccccccccccccccccccaaaaaccccccccccaaaaaacccaaaaacaacccaaaaaaaccaaaaaaaacccccccccccccccccaaaaccccccccccccfffeonnnnneddddddddddcaaacccccc
abccccccccccaaaccccccccccccaaaaaacccccccccccaaaacccccacaaacccccaacaacccaaaaaaaaacccccccccccccccccaaaacccccccccccccffeeeeeeeeddddddddcccaaacccccc
abcccccccccaaaaccccacccccccaaaaaaccccccccccaaaaacccccccaaaacccaaacaccccaaaaaaaaaccccccccccccccccaaaaaaccccccccccccceeeeeeeeedacccccccccccccccccc
abaccccccccaaaaccccaaacaaacaaaaaaccccccccccaacaaccccccccaaaacaaaacaaacaaaaaaaaaacccccccccccccaacaaaaaacccccccccccccceeeeeeeaaacccccccccccccccaaa
abaaacccccccaaaccccaaaaaaaccaaaccccccccaaacccccccccccccccaaaaaaaacaaaaaaaaaaaaaaacacaaccaaacaaacccaacccccccccccccccccaacccaaaacccccccccccccccaaa
abaaaccccccccccccccaaaaaaccccccccccccccaaacccccccccccccccaaaaaaaccaaaaaaccaacccaccaaaaccaaaaaaaccccccccaaccccccccccccccccccaaacccccccccccccccaaa
abaaccccccccccccccaaaaaaacccccccccccaaaaaaaaccccccccccccccaaaaaaaaaaaaaacaaaccccccaaaaaccaaaaaaccccccaaaaccccccccccccccccccaaaccccccccccccaaaaaa
abaaaccccccccccccaaaaaaaaaacccccccccaaaaaaaacccccccccccaaaaaaaaaaaaaaaaaaacccccccaaaaaacaaaaaaaaaccccaaaaaacccccccccccccccccccccccccccccccaaaaaa

449
ressources/day13-input Normal file
View File

@@ -0,0 +1,449 @@
[[4,[1,[]]],[8,3,[[0,2],[5,2,6],[7,0,10,0],2,[5,7,10,2]],[[5,9],5,10,[9,7,7]]]]
[[[],9],[[[3,2,6,3],[7,8]],10],[1]]
[[],[0,4,[[2,9,0,1,2],[1,1,1,1],9,[2]]],[[],5]]
[[[[4,6],[9,4,9,5],7,[1,3,6],[]]],[1,[]],[8,[6,[8],0,5],[],[[7,4,9],[4,2,8,2,2],[10,5,5,4],4]],[8,[7,[7,3],[4],10],[10],[[10,1]]],[]]
[[0],[[[1],0,[],2,[4,5,6,3,2]],5,[],3],[[0,[8,8,5,2],10,[7,6,4,8],[4,9,3,9,5]],9,[4,6]],[[10,6,[10,2],8,[]],[10,[10,8,10,1,4],[0,6],4],8,[6,[5,3,3],6,[3,9,4,0],7]],[[4,8],[1,3,9],[[2],6],5,[0,[5,0],0,5]]]
[[[[10,8],[3,6,7],3,[4]],[[8,10,8,4,0],[7,2],7,[2],[1,3]],3,[[0,7,9,1,10],[8,1,6]]]]
[[[1,[5,2,6,6,0]],[[7,7],[]],[[4,5],[],[],[3,7,1,8],1]],[9,[[],[8,7,8,9]],[2,4,0,[7,4,4]],[1],[]],[[[],[4,7,0,4],[1,0]],5,4],[],[[9,[],[7]]]]
[[[3],[[5,2,1]],2]]
[[[[5,8,8,6],0]]]
[[[[3,0,10,1,5],10,[7,0]],8,[0,9,4,[8,10]],[[6],[4,4,8],7,9,[9]]],[[7,[],0,2],[[]],5,6,[]],[0,[[1,10,8,8,1],2,[2,6],[10,9],[7]]],[2],[[[],2,5,[2,9,6,0],8],9]]
[[],[6],[[0,[2],8,[]],[[0],9,5,[7,6,6,6,9],[3,1]],4,10],[[4,[5,1,9,4],2]]]
[[[],[[3,7,5,4,1],[9,0,2,5,6],[4,3],2,[0,1,2,7,2]],[]],[[],2,5,3],[[2,9],1,10,0,1],[[4,9],[],[6,[],7,10,[10,9,1,10,9]],1,7]]
[[10],[],[6,[],[]],[],[2,0,5]]
[[6,1,[8,6,9]]]
[[8,[[0,0],[],1,[8],8],4,[7,8,1,10],10],[]]
[[[0],6],[[],3]]
[[[8,[5],[4],[2,0]],[[1],1,[4,2,10,6]]],[[],[6,5,[6],[9,2,3]],[[6]]]]
[[[6,2,4,[4,9],[2,4,10]]],[[3,[5,5,10,9,9],10,[6,2,8,7,9]],[],4],[[[3,2],[]]],[[[10,9],[3,10]],[0,1]]]
[[[[8,10,1],10]],[7],[[9,[7],[0,9,8,4]]],[[4],4,0]]
[[1,[],[[9,9,2],[10],[]]],[[[7],[],[],[],4],[[3],0,[5,7,1],6],3,10],[2]]
[[10],[],[]]
[[2,4,2,[[6],[1,10],4,9],3],[7,8,5],[[],0],[[5,[],[]],7]]
[[5,3,[[7,6,10],10,7,[6,5,7,9],8],[],4],[0,[[6],[2,2,1,5,7],[1],[2],1],[2],[1,[7,1,3,0,3],[9],7,[1,9,6]]]]
[[[4,[5,9,6,5,6],1,[6,4,4,4,9]],[[],6,[8,3],[2,1],9]],[6,[[10,1]],[7,[6,1]],[[6,3,8,2],8]],[2,7,[],7],[0,7,[[6],9,[4,10,6,6,4]],[]],[7,4,[8,[1,6,8,7]],9]]
[[8],[[1,0,2,10,3],5],[],[9,[[1],[3,6,6,6,8],2,5,8],10,9,[3]],[4,6,1,[8]]]
[[3,4],[[],[7,[1,10],[9,9,7,5,2],5]],[],[[0,[4,7],[2,7,3,8],3],[3],[[],[],9,[2,7,9]],[8,2,6]],[9,[]]]
[[[[2,0,1],6,[1],7]],[7,10,2],[],[[]],[2,1,[[],9],[[6,9,9,6,0],[],[10,2]]]]
[[4,[],6,5],[[],[[],[5,2]],[1,4],0,[[5],[9,9,4,1,5]]],[[],10,10,[8],[1,[8],2,9,2]],[7,3,[[0,8,5,2],[4,2,10],0]],[1,[[1,9,5],3,10,[10,8]],9,[[]]]]
[[5,7,8,9],[6,9,[5],0,[7,[4],[9,7,1,1],7,6]],[[[8,2,9,6]],[8,5,[4,1,0]],[[2,6,3],[2],[4,0],[2,0,5]],6,[[9,6,7,4],[4],4,8,[9]]]]
[[[8,3,[3],[7,5,10]],3,[5],9,0],[3],[[[9,6,0]],1],[3,10,[[9,8,6,10],4,[10,10],[10],[2,7]],2,10],[5]]
[[],[4,[[7]],[[3,10],[5]]]]
[[[[0,5,7],0,10],[[],2,8,3],1,[5,8]],[]]
[[[],[[4,5],9,8,[4,2,7],[1,6]],[[]],1,[[1,10,9,10,4],2,4]],[8,[0,7,2,[3,8,4,9]],[[5,9,3],1]],[[[4],10,[5]],4],[5,[4,9,[]],1,1,8]]
[[4],[1],[],[[[3,2,1,5,6]],[[4],[2,1,3]],[10,5]]]
[[0,6],[],[[],7,9,5],[]]
[[[5,[2,5,0,8,10],5,[10,8,10,7]],5,6],[[7,[]],10]]
[[[[7,0,7],[8,4,10,2,6],[10,8,9],[10,3]],[[1,9,5,0],2,[1,8,1,8,2]]],[[[],[9,3],10,[1],9],[[9,9,6]],1,[0],9]]
[[[[5,1,9,10,6],7]],[10,[4],[7],0],[1,8,[[],4,[10]],[[6,8,4,2],6,[],[10,8]]]]
[[10,[[6,7,7],[5,5,1,4]],[1,0,0,7,[1,8,2]]],[4],[9],[[5],[10,[2,5,10]],5,[]]]
[[8],[4,5],[6,[[9,1,5],[2,10,3,7,7],9]],[9,0,0,[],[0,[7,3],3]]]
[[],[[[4,7,9,6]],2,10,[6]],[[[3,3,10,5],[2,6,1,5,2],[3],[],8],2,7],[6,9,[0,8,9,10,8]]]
[[[4,0,[5]],0,[[],[1,6,5,5,5],[5,2,7,5],2],3,[9,[9,3,9,7,4]]],[8,[],[[1,1]],[[4,8,1],[7,6,8,8],[],10]],[4,[[6,6,3,10,2],[8,1,1,1,7]],[[3],9,[4,3,9,1,7]]],[[1,[8,6,3,1],[2,10,9]]]]
[[[[1,4,10,6],10,[5,6,10,3]],8,[[]],[],6],[],[[9,[5,6],8],10],[2,[9,[5,3,10,4],10,[],[7,4,1,9]]]]
[[4,[[]],[1,[10,8],7,[4],[0,3,2]]],[[[6,4,7,0]]],[10,7,[6,[1,2,8,4]],[9,[3,8,4,7,2]]],[4,[8,[6,10,10,9],[],9],6,[[4,8,3],10,1,2],8],[[7,7,[8,8,7,1,1],6],[[8,8,10,2,4],0]]]
[[],[8],[8,10,0],[7,[[4,1,0],5]],[[[6,9,4],[9,1],[6,4,6,6,10],[]],3,7]]
[[9],[3,6,[[1,7],[],9,[8]],[7,[9],3,[]],9],[0,[0,2]],[3]]
[[7,[10,[3,0,10],5,[5,3,2],4]],[]]
[[[5,8,3,[0,2,2,7,0],7],[[10,2,0,10,7],[0,3,10,10,5]],3,[8],[10,4,7,0]],[]]
[[[0,[0,8,1],2],4,[],[9],10]]
[[[3,6,[2,0]],5,[[7,2],[],3,5,4]],[[9]],[7,[6,[1,5],[9,6]],[[],9,[1],3],[10,[],0]],[[1,[5,6],9,[10,7,4,7,4]],[5,[0,7,0,0],6,[0,0]],[],[[10,1,9,9,6],[1,3],[8],3]],[[[],[]]]]
[[9,[[4,3,0]]]]
[[10,9],[[],[[0,8,0,8],[0,10,4,2]],[10,[0,0],[5,10,0,5],5],5]]
[[[[8,5,4,6]]],[8,[2,0,[3,6,7,8],10,[3,8]]],[0,2,[[3,6,10,4],[8,7,6,6,2],9,[7,3,9,7]],[3,9],[9,[3,8,0],2,9,[4]]]]
[[6,[6],4,[[10],[0,1,3,3,8],1,2],9],[[[0,5,7,6,7],[3,3,10,9,2],4],[[],5,1,4],[[8,10,1,4,1],3,5,1,2],[[1,6,6,0],[9,7,6,7]]],[]]
[]
[[8,0,[7,[10,10,8,6],5],6],[],[]]
[[[[9,10,3],10,5,4],[[7,2]],1,6],[9,[5,[7,3,3,5,2]]],[6,[[1],[],[8,4,6,3,2]]]]
[[[[2,8,2],[4,9],2,10,[3,6]],6],[1,8,2],[2,8],[[1,[5],6,[]],1,[1]]]
[[[[0,2,1],9,1,[6,2]],8,1],[10,[],6,8,[1,0]],[1,2,[3,9,[3,6],[9,0,10],7]]]
[[[[1,7,3,9,6],[],[],4],[],1,1],[[],10,10],[],[[3,5],[[10,3,10,9],3,9]],[0,[[],4,[6,2,3,9,7],[4,10,4,4]],[7,10,3,[1,0,4],[10,9,4]],4]]
[[],[],[],[7],[0]]
[[1,[]],[],[5,6]]
[[6,2,0],[]]
[[5,7,5,[[2],[3]],[[1],[2,9]]],[1],[[[5,1,1,9],[]],2,1,[9]],[[9,[],[9,4],0],3,2]]
[[[2,10,0,2],[],5,[[7],[],[],[5,3],[7,9]],7],[],[],[]]
[[1,8,[4,[],[],[5],[6]]]]
[[2,[3,[],10]],[[],5,[],[[8,8,7]]],[4,[4,[2],[6,0,0,10,3]],[[1,4]],2]]
[[8],[[[]],7],[10,9,2,[[8],6,6,[8,1,4,5]]]]
[[8],[[8,[10,10,9]],3],[4,[],[1]]]
[[4,[6],[5]],[],[[10,0,3],10,5,3]]
[[],[[[10,2,6],[1,4,9,2,5]],[],[5,2],[1,3,5]],[[[7,2,2,0],[0,1],10],10,[9,[4,8],[8,2,10],[1,4,2]],7,[[2]]]]
[[],[[[],[],[9,10,5,6],2,[0]],10],[[],[[4,9,3,7],7,4],[],2,2],[8,[6,8,[7,5,5],[2,4,8,0,7],[3,1,7,3,9]],[[9,1,5,1],[5,1,1],[],[2,1,2,1]],[[0,9,1,10],5,[],10,[5,0,10,2]],[10,[3,4,8,8,4],5]]]
[[[[8,6,7,6,1],[4,2,7,1,3],[]],[]],[[7,[3,10,6],[3,6,5,8,0]],0,[],0],[6,[6,8,[5],4,2],7,[[0],5]]]
[[6,5,6,10],[[[1,3,3]],1,2,[[5,0,10,2,10],[4,7,7,0],2,[2]],7],[[2,4,6,6],9,[[0,1,9],[10],9,[2,7,6,5,2],3],3,7],[[[8,4,6,1,1],[9],2]]]
[[6,1,[],1],[[],[[],3,8,[6,1,10,9,2],[7,0,1,10,2]],[]],[9,[6,9,[4,10],7],1,9]]
[[[],[[]],5,[[7,8],[3,0,9,2,0],7]]]
[[[],[[2,6],6],[],10],[],[[[6,6,10,2,8],[7,4,2]],[8,4,7,5],[5,[6,10],[]],[3],8]]
[[[],6,3,[[3,4,8]]],[1,3,[5,4],[[4]],2]]
[[],[[[5,10],6],2]]
[[[7,[3,9,2],[],1],[3,7,[2,9,0,0],[3]],9],[[],[[4,10],4,[],[10,3,7,3],[10,0,7]]]]
[[9,7,5],[3,4]]
[[],[],[5,8,[[8,3,2],[6,1,0,7],[],[9,0,9],[8]],2]]
[[[4,4,0,6,[8]],[1,[2,0],[4],[5,6,0,4,9]],3,[[6,1,7,7,4],[],[6,9,9,10,10],[4,3,9,3,4],[1,2,1,3]],1],[5,6,8,[],3],[[[9,3,10,3,3],9,[3,8,9,10,10]]],[[[5],6]]]
[[],[[5,1,5,5],0,[7,3,[6,6,9],[10,5,6],[0,7,4,2]],1],[4,1,[[6,2,8,1,0],[8],[5,4]],2,6],[[[8],7],[1,1,7],[[5]]]]
[[[[],4,[]],[[3,3,7],[3,4,10,1,9],2],[[5,8,9,5,7],[4,3,4,9],9,1],5],[[[6,7,6,10],[2,4,0,3],5,[0,0,8,6,8],8],[2,8],10]]
[[[4,[2,0,6,6,7],[8,4,8,5,2]]],[[],2,[5,[],3,[8,10]],[],2],[],[],[[0,[4,9,2],[5,5,1,5],10,6],8,[10,[1,8,4,7]],[[0,1,5,5,2]],[]]]
[[[2],[[3,10,0,5],[10,3,10,8],0,[]],8,[10,6,[5,2,4,5],[1]]],[],[[],[7,[0,10,4],[6,2,7],1,[1,4]]],[7,[],[[7,9],3,3]],[8,[[],[1],8],3]]
[[[]]]
[[[[0,1]]],[2,[10,[3,8,3],[3],[]],4,[[10,5,9,0],[5,2,8],[8,7,7,0,6],9],3],[10,[3,9,9,[7,4,0,9]],3]]
[[],[[[5,8,0,4,8]],10,[5,[]],9],[[[8,1,6,4],5,4,[8,9,0,5]],1],[],[[[],7]]]
[[[8],6,[3,[0,10,2],5,7,[2]],[10,9,7],3],[[[7,0,10,8,4],[6],7,8],[[7,4,7,6]],[[1],[4],2],[],[3,[4]]],[10,[]],[0,[[2,3,10,5],10,[10,10,0],[5,0],[8]],8,[[8,2,2],4,[],[0,3,10,4]]],[0,[10,[4,2,4,2,2]],8,[[9,1,2],5,[9,0,8,3,4],6,[10,3,4,5,2]],1]]
[[[],[9,8]],[],[[[8],3,[0,1,6],[1,3],[9,8,9,8]],7,[[3,1],[2,0,1,6,10],4],5,[0,[0,6,1,5],[8,8,2,8,6],6,7]],[[8,6],9,8],[]]
[[[10,[3,4,1,1]]],[[],9,8]]
[[1,8,8,4,[6]],[]]
[[0,0,6],[2,6,[[],[0,2],10,[10,9],2]]]
[[1],[[[3,4,1,10,4],[7,10,3],[],[3,10,10,0]],[],4,[[0,5,0,0,9],6,[7,4,8,10,3]]]]
[[[],[0,[9,9,5],[4,6],[1,7],[1,3,6,10,1]]]]
[[],[],[0,[9,6],[2,7,[4,6]],[[2,5],10,[3,0,10]],0]]
[[],[8,[2,3,[0,6],7]],[]]
[[2,7,2,[0,[2,6],[],3,[9,3,9,6]],8]]
[[[[5,8,8,10],1,[10,8,10,5],[5,2,0],[0,7,0]],[]],[[[10]],[],10],[[],[],6]]
[[[3,[2,1],[],[],[]],0,3],[[],8,[],1,[7,0,[2,3,1,9],[9,0,4,6,2]]],[[[0,9],7,9,2,[4,3]],5,[3,[5,3,6],[],[]],[[7,10,0],[9,5,6],[0,8,4,1],[5,4,8],1]],[],[[[9,4,6],[9,4,3,8,5],4],[7,[6,2,7,3]],4,[]]]
[[7,[[7,10],[0,1,3],[2,7,4,10],7,[1,2]],9],[[[],[10,6,3,4],[10,7,1]],[[],[10,8,10,6],[7,7,3,6,0],[7,5],[1,8]],1,0],[[],1]]
[[],[[8,5],7,10,[10]],[[[],[4,0],[10,0,0,2,1]],[[9,7,9,9,0],9,9,[6,5],[4,9,7,3,10]],1,[[8,2,8,9]],0],[0,[[],10,0,3,3],5,[]]]
[[],[7,[0]],[9,[3,[7,3,9],1,[8,1,5,3,6],[]]],[10],[2,5,7,6]]
[[],[4,[],10,8,[9,7]],[8,10,9,[0,10]]]
[[[],[],[2,[7,8],10]],[[],[2,[8,6,2],3,[7,3,9]],8],[5,[[1,7,2,6,6],0,6,[8,0],[6,10,0]],7],[]]
[[4,3,[[6,6]],0,7],[[[4,0,2,9]],[4,[1,10,9,5],1,[],[4,4,2]],[1,[],[4,5,5,0,8],[9,5,10,7],7],8,2],[[[7,0],7,2],8,[],[[5],1,0,[0,2,6,7],[5,6,5,5,2]],8],[8,1,[6,4,[5]],0,[4,9,[],[4,3,0,3,8],[]]]]
[[9,[[5,10,9,4],4],7],[[9,[],2,3,[2]],5,0,[[4,10,1,7,6],4,7,9],[4,[6,4,3],[6,4],[5],8]],[[[0,10,1,4,9],6,[9,2,1],[5,2,3]],[],[9,0,[1,0,9,6],[2]],[3,[9,2]],[10,[5,7,5,2,1],10,9,3]]]
[[0,[[4,2,5,8],[8,7,9]],[6,0,10],9,[[2,9,1,9,3]]],[3,[2,[0,0],[4,3,0]],[1]],[],[3,[[5,1,3,2],7,2]]]
[[[[9,5,5,1,1],10,7],[[3,9],9,[8,6,3,6,1]],[],[[2]]],[[1,[8],4],[10,10,3,3]]]
[[[[3,5,8,1],9,[6,6,3,3,2]]],[3],[7]]
[[[[0,10,1,4],4,[3,8],7],0,2,[[5,2,4,0,6],[7,5,9],[],[2,2,2,6,8],[6,9,9,3]]],[5,4],[],[[0,5],7,7,7]]
[[10,[[5],[10],6,10,3],[[4,10,2],0,[10]],8],[[[],4,[7,6,6]],5,[3,3,[0,7],8],2,9],[]]
[[3],[[]],[10,[1,1,[2,10,1]],[[1],2,[0,10,4],4,6]],[],[8,[3,5],[10,0,10,4,[]],[[0,4,6],3,3]]]
[[[],[[0,7],7,4,[0,6,1],[8,3,7]],5,3,0],[],[[5,7,10,2,4],[],7,6,[]],[4],[]]
[[0,1,9,[[8,0],[9],[4,0,4,5,1],[4,10,0,6,2],[9,0,0,8]],9],[9,[0,[8,10,7],10,1,8],[7],[0,5,[10,4],8,[]]]]
[[0,9,8],[5,8],[0,[2,8],6,[],[[8]]],[[[1,8,4,4]]],[]]
[[[[0,7],10],[[1,10,4],[2,9,2],[9,9,3,6]],5,4,6],[[7],9],[[],[],[[0]],2]]
[[[[],5,10,3],[0,7,2,1,[9,1]]],[],[[[8,5]],[[1,5,1,7,2],[8,6,1,7,9]],2,7],[]]
[[[6,[9,5],[3,8,5,2],1],[[9,0,6,0,4],10],[[6,8],[6,6,6,8],6,[],0],0,7],[0,5,2,[[6,10,2,4]]],[[7]]]
[[2,[2,[]],[[3,9,1,4,3],4,9,[5,0,6]]],[9,[[6,10,6]]],[10,[10],[0,5,[6,9,2,4,6],[8,6,6],[4,4,7,0,10]]],[5,[]]]
[[[[]],[],[[8,9,9,10,7]]],[9,[4,[0],[2,2,7,6,7],5,[1,2]],8],[[[7,6],[4,5,6],[5,4,9,2,2]],2,2,2,[[4,3,8,6],[0,10,4,0,0],[7,1,4]]],[[],[9,10,9,[2,6,1,2,5],[5,9,5]]],[[[5,10,10],0]]]
[[[]],[],[]]
[[[5],5,1,6,[[10,0,5],[6],[5,0,10]]],[],[[8],[[9,0,3,4],0,[4,6,1],[1,1,2,2],7]],[3,7,3,7,0]]
[[[6,5,[2,7,3],3,[]],[[4,1,10,1,10],[]],2],[[[4,5,7,8],7,[6],7,4],[[4,2,3,2]],9,[[9],[],6,7],1]]
[[[4,[2,4,10],[],10,[10,0,7]],[5,[],10,6,2],[[0,6,7],3,0,9,[5]]],[4],[3,7,2],[[9,0,[2],[4,10,9,4]]]]
[[[6,10,8,[],[3,0,9,3,0]],1,[[],[8],7,[8],[]],[10,1]],[[[2,9],[10]]],[2],[9,[]]]
[[],[[]],[7,4,8]]
[[[9,[7,6,5,0,4],8,3]]]
[[[4,3],7,9,4,10],[[9,[3]],5,[6],[[],[4]]],[[9,1,5,[7,0,4],9],[3,8,0,0],[8,3,2,7],3,[6,3]],[]]
[[[[10,3,4],5,4]],[[[1,1,3],[1,4],6],[[8,7,9,6],[4,10],6,[9,6,3],[]],[[8,2],1,8,10,8],6],[[8,[6],5],[[5,3]]],[[1,[9,5],0,[9,7]]]]
[[[5],2,7,[[],[10,10,0,5]],[]],[[[6,8,5],[1,6,0],6,[10]]],[[[0],[6,8,7,0],[4,8,9,10,8]],[[],[10,6,1,0],3,[4,1],3]],[9,[[],[],3,1],7,[[8,1,10,10,9],[3,8],[2,4,8]],0]]
[[]]
[[[7,[]],[3,[1,9,1,9,0]],[3]],[]]
[[2,6,[[],3,6]],[7,2,2,[[0,9,5,9],[7],9,6,6],10],[],[8,2,[4,[4,3]],1]]
[[9,[10,[8,1,0,9],[2,4,6,4,6],[4,4,1]]]]
[[5,3,[[2,0,3],[1,1],[7],7],[[],0],[[0,4,8,3,9],4]]]
[[[[4],8,3,6,6],[[],6,[6,8,4,7]]],[0,9],[],[[[],4,[8,4],[2,7],[7,1,10]]]]
[[7,8,[[1,5]]],[6,1,7,[8,10,9,[]]],[],[[[2,7,0,8,10]]]]
[[9,[1,[7,6],10,10],3,[],[[]]],[]]
[[[[0,0],3,[0]],10,6,6],[],[[[2,0,3,8],4,0,3,[8,6,6,5,3]],[7],2,[[9,7],[],2,[0,6]]]]
[[[5,[0,0,3,7,6]],7,10,5,[[5,4,4,3,10],[4,5,2,0,0],0]],[],[[1,0,4]]]
[[8,[[5],[],5,8,[9,10,4,1,8]],6],[8],[[],9],[],[7,[],[]]]
[[[8,[8,6,7]],[5,0,9],4,[7,10,6,[1,4,1,1],3],[6,[3,2,8],10,[9,4],[4,3,3,8]]],[],[1,[[9],0,2],9,[6,0,0,4,[1,3,7]],[3]],[]]
[[0,[],6,[8,[0,2],[0,6],[7,4,1]],10],[8,[4,3,[9,10,0,4,7]],0],[[],0,7]]
[[2,[[],[4],4]]]
[[6,[8,[0,7,0,3],2]],[6]]
[[[0,0,[0,8,5],[4,2,4]],[7,[2],[0,4,9,5]],7,[[1,1,4,3]]],[],[],[]]
[[[4,[]],6]]
[[],[[0,10,1]],[[]],[4,[[6,7,6,1]],[3,3,[],7],[[5,6,8,6,8],[8,7],[1]],0]]
[[[5,4,[8,3,7],[2,6]],[]],[],[0],[1,6]]
[[2,[7],[9,0,1],1],[10,[5,[10,9,2,8],8,[8,0,0,10,3]],3,[[7,5,9]],9]]
[[6,8],[5],[[[3,0],[],1,6],[[3,0]],3,8,[[6,5,1,8,8],1]],[1,8,2,[[]],4]]
[[[[9,7,2,6,7],6,3],4,[[6,4,9,7,3],4],[10,0,4,[5,2,4,6,3],[6,6,4]],2],[[9,[3,9],[4,2],[5,0]]],[[0,[6,10,7,2],[7,7,3]],5],[0]]
[[[[9,10,9,0],8,[2]]],[9],[1,10,[3,[]],[8,[8,2,6,6],[3,8,4],0]]]
[[8,3]]
[[6],[3,[5,6,0,10,4],7,[[7,2,2],[]]],[],[3,[1],[2,[]],[9],3],[7]]
[9,1,9,8,2]
[9,1,9,8]
[[[10],[8,0,[]],10,[[6,3,8,8]],[9,5]],[0,9],[[10,[2,3,5,4,10],3,[],[0,8,2,4]],[[7,9,4,7],[8,6,0]]]]
[[2,[8,[5,0],2,9,[9,6,4,2,7]],2,[[]]]]
[[],[7,[9,2,[3,9,2,4],[1,3],[0,10,4,3]],6],[],[[],2,9]]
[[8,10],[1,[[10,8]],[],0,2]]
[[9,[[],[1,2,2],0,1,[5,4,5]],[0,3,[0,8,4,6,3],[2,5,6,2],[9,5,9,0]]],[2,[6,[],4,9],8,[7]],[5]]
[[[[2,4,6,4,0],[2,9,4]],5,10],[2,[6,10],6,[],[3,2,[6,6],[1,5,10],[]]],[[6],1,5,9],[[7,7,6],[6,[]]],[[7,9,10,[9,3,2],5],[[5,8,1],[4,1,6],[1,5,3,0,9]],2,8,5]]
[[[[3,0],[10,8,0]],1],[7,[4,[0,5],0,[],[1,0,7,2,8]],[[],[7,5,1,1],[0,8],[7,6],[10]]]]
[[[],8,2]]
[[7,[[1],[],6,[2]],[[4,5,4,8]],[]],[0,[[1,8,4],10,[2,3,2,3,4]]],[[10,[1,5],[9,3,1,1,6],4,[]],4,9,[[5,9,2,10,10]]],[7,4,[[1,3,9],0,[7]]],[4]]
[[0,7,4,[6],[]],[[0,[0,2],3,[4],[1,1,10,3]],[1,5,9,6,2],10],[[6],[8],[[1,10,3],[7,5,7],1,[5]],[]],[]]
[[1],[6,[2,0,10],[[8,7],7,[3,9]],[1,[0,8,10,8],9]],[5],[6,[3,1,[10,10,10,9,5],[9],0],0,[[9],[]]]]
[[5]]
[[10],[]]
[[[1,3,7,6]],[9,9,[0,[10,2],2,9,4],6],[],[[[7,10],[5],4,8,[5]],8,2]]
[[2,[],2,6],[10,9],[2,8,2]]
[[[[9],3,3],2],[[0,[]],2,3,[[3]],[5,6,3,[4,2,7]]],[10,[8,8],8,5]]
[[[[8,1,8],[5,8],6,9],7,2,6],[[2],5,[[],[8,8,0,0],4,[1,4,10,10,4]]],[1,10,[9,4,[]],[],9],[6,8,[[10,2,0,10,10],5,4,[2,6],3]],[[6,0,[6,4],3],[[0,4,6],7],2,[6,[]]]]
[[4,[[5,5,0,1],[8,9]],0,[2,[]]],[6,9,[[9,10,6,7]]],[[],8,[],0],[[],[[1]],[],5,[[6,6,0,2,2],[9],9,[7,3,4]]],[[[3,10,4,4],1],[10,[2]],[1,[6],5,8,4],[]]]
[[],[1,9,[[],6]]]
[[1,[[9,1],[6,3,1],[1,10,9,2],[4]]],[2,3,[2,8,7],3,8],[8,[3,1,[],9,0],[5]],[[0,4],7,[[10,9,1,4,2],0],[[3,1,7],4,[10,8,7],[0]],2],[10,[9,7,[10,3,2,2]],[[10,5,4],[3],[4]]]]
[[[9,8,8],[0]],[[],2,1,3],[4,[[]],[8,[4,0,6],7,2,[2,1]],[0,8,[5]],[5,9,[],5,6]],[4,[1,[6,7],1],10],[1,[1]]]
[[7,[[2,3,0,5,8],7,[],8,[]]],[[0],0,[[2],[0,0,2],[1,0]],4]]
[[[[1,8,6],[4,1,6,4],8,[7,7,8],3],[[2,1,1,8],0,10,7,[]]]]
[[[[9,10,7,1],8,0]],[[]],[4,[2,0,[4,2,10,8,0]],[],[[10,9,10,7],5,5,1,0]]]
[[4,7,7],[],[[0,[10,7,3,8],8,[10,0]]],[[9],0]]
[[[2,[9,7],[4,2,8,5]]],[[[6,7,4],2,1,[4,1,8],[6,10]],[[4,10,6],[6,2]],[],6,[4]],[[3,1],[[5,10],3],[0]]]
[[[[7,0],1,[0,10,4,0],[8]],0],[],[2],[10,[[0],[10,1,0,4,1],5,10,4],9,7]]
[[[[]],[[],[7],[],[5,5,5],[8,7,1]],3],[[[9],[],3,4,[7,5,2]],[0,[7,8,0,4,8],[2],[8,4]],[]],[7,[1,9,[5,9,0,4],[]],[[7,8,10,5],[10,6,10,9],0,9,6],[6,4,[]]]]
[[9],[[[9,9,7],0,[1,10,4]],8,[[1,9,4],[4,10,2,4],[5,6,9,9,8]]],[[],[7,[1]],[4,10,1,[],[1]],[[4,10,8,4],[9,4,8,1,0]]],[10,10],[[[0,4,3],[5,8,4,5]],[],[1]]]
[[[1,[],4,[10,1,7,4,0]],7,[[6,8,9,10,9],[4,10,2],[1,5,3,3,10],6],[[5,2,5,9],[8,8,9]]],[[0]],[10,[5,[9,3],2],[],[0,7,[9,10,3,5,9],1,1]]]
[[7,[],0,[[4],[9,1,10,9,0],[],8],[3,[1,8],7]],[1],[]]
[[1,[3,6],[5,3,0,5,4],5],[[[8,3,1],2,[10],[],7],[1,[4],[6,10,0,8,6]],[[1,10,7,4],8],10],[5,[5,3,6],6,1]]
[[4,1,6,7,8],[],[4]]
[[[],[1,3,8,7,5],1]]
[[],[],[[3,[7,2,5,0],5],[4,[3,10,9,4,1],5,6,[7,7,10,0]],7],[9,8]]
[[[],10,2,[[9,9,8],0,[8,2,3,9,1],[5,3,4],1],[2,7,[1,8,0,6],[8,8]]],[[[7],[4,5,7,8],5,7,5],7],[[6],5],[[[3,0,6,4],10],8,[],[9,[]]]]
[[[],3,[2,[],[8],4,[9,5,9,9,4]],[[],[0]],[1,5,[4]]]]
[[[2,4,1,[3,5,6,2],9],4,[1,1,[],[3,2,7]],4],[[],8,4],[3]]
[[[[0,6,8],[8,7,7,10,4],[1]],[[2,7,3],3]],[],[]]
[[4,7,4,6,[0]],[[[6,9,2,5,8],6,[7],10],4,1],[[[4,5,5,2,9],6,8,9],[[1,6,4,3]],7,[]],[[[4,4],[3,6],[5,9,7],4,6],2,5,6]]
[[[0,[9,4]],8,[8,10,8,[8,10,8]],[8,[3,9,6],10]],[[10,[7],8],2],[],[]]
[[1,3,[10]],[4,1],[0],[[0,10,8,6],2,[[7,3]]]]
[[[0,[0],3,[3]]],[],[7,4]]
[[6,[],9,[[2,10,8,6,2],[6]],[[2,10,0,0,6],7,5,[8,1,10],9]],[[[],[3,1,1,1],[9]],7,1,7,[]],[],[1]]
[[1,1,[]],[8,2,9,5],[[6,8,[10,6,9],[9,1,4,8],[3,7,0]],[]]]
[[[10,[9,5,9],9],[4,8,0,4,[5,4]],9,[4],0],[[6,[0,2]],10,5],[],[[[1,5]],4,[3,[1,4,4],[7,10,5,6],6,0]],[]]
[[8,6,[],7],[[],[],3,[[2,4,6]],[[3,9],5,[8],[6]]]]
[[6,[[10,9,9],6,[1,1,8,1]],[[4,6,10,3,1],[4,2,10,1,9],0,1],[[]]],[6,[[1,7,0,8,5],[5,2],[4,8,7,10],[4,4],[4,6,4,10,9]]],[[8],[[6,4,10,8],[3,9,9],[5,4,5],[3,4,10,5,6]],6,[0,[2,5,0,2,0]]]]
[[8,[4,6,[1],[9,6,3]],[7],10,7],[10,3],[[4,1,[8,4,8,7,2]],1,10]]
[[[[9,7,8],4,[2,6,6],3,7]],[8,0,10,[[1,5,3,6],4,[],[7]]],[[]],[[[7,10]],0,2,8,[[],[7,4,8],6,4]]]
[[4,[[5,3,9,4,0]],4,[[],[3,9,3,1,1]],10],[[3,[7,3,9]]],[[5]],[[[1,8,4,0],[5,4,5],[10],6,[7,10,9]],10,[3],[5]]]
[[],[8,4,10],[2,3,[10],7],[[[9,1,2],5,6],[],6,6],[[[7,9,10,0,7]]]]
[[0,6,5,[3]],[9,[],[]],[],[[1,9,[2],8]],[[[3],[7,4,4],[]],[6],[[7,5,2,1],[9,5,8,0],[4,5,10,8,5],9],2]]
[[10,[[2,7],0,[4,10]]],[0],[[],9],[6,[[10,1,5],[0,3,8,0],10,[3,10]],0,5]]
[[4,7,6,[[10,4,1,8,3],6,[4,4,7],8]],[4]]
[[6,[[5,8,8,10],[7,2],1]],[[[1,10,9],[2,1,8,6],[6,10]],[4,2]],[0,[[1],10,[1,7,4,6],3,2],3,[0,4,[]],[[9],[3,3,5,9],5]],[[5,8,4,[0]]]]
[1,10,7,0]
[1,10,7,0,7]
[[[],6,[[8,7,7],[]],[],[[1,0],4,10]],[6,[[6,0,1],[2,5,3,9],[1,3,7]]],[4,7,[4],[[3,7]],7],[[10,9],[9]],[[[7],8,[],[6]],[[4,10,4],[]],1,[0,4,[5,4,1,4,6]],6]]
[[[],[3,7]],[3],[],[[],[[4,2,10],[2,2,2,9],[8,5,0,7]],0],[[[8],[4,10,7,4]]]]
[[[],[4,3,[8,9,4,2],10],[3,6,5,[]],[]]]
[[6,5],[[8],1],[10,[2,1],0,3],[[[0,3,1,8]],[],0,4,[3,3,6,[5,3,8]]],[[7,[5,10,2,7,5],10],[[0,2,7,4],2,[8,10,10,0,6]],[[5],[],[0],[]],[[9,0,6,9],9,1,[9]]]]
[[[4],[3,5,9,[]]],[6,10],[9,[[6],[],[2],[2,1]],0,[]]]
[[[1,0,9,10,[9,5,1,2]],[],0,[[6,1,8,9,5]],[[],2,7]],[[10],7,[9,[1,5,8],[8,7],4,3],[2,[5,3,9,8,2],4]],[2,7,[[6,10,6,2,3],6]],[[[9,4,4,8],4,0,[3,7,2,8]],[[],8,[]]]]
[[4],[[[1,3,2,8,10],[],[0],5,[2,6]],[0,[5,0,10]],[],9,1],[],[[[0],9],[[3,0,8],1],5,[3,[1],[4,3,6]]],[8,1,[0,[4,7,3,0],[3,1,1],5,10],10,6]]
[[[5,9,[7]],9,6,[10]]]
[[5,[[2,9]],[[6,0,3,10]],3,4],[3,4,8],[9]]
[[3,[],3,8,3],[1,6,[[10,2],[2,4,10]],7,[]],[4],[[],[],4,3,8],[[],3,0,6]]
[[4],[],[[[1,5,0,10,1],10,5,3,[9,3,7]],[6,4],8],[]]
[[],[0,1,[4,0,3,1],3,5],[10,[[4,9,2,8]]]]
[[[8,[3,4]],7,[]],[[8,3,4],[7,[5,0,3,3,0],[10,5,6,10],1],[5,1,[8],10,9]]]
[[1],[9,4,[4,[2,1,8,2,6],7,[]],[0,7,4],[]]]
[[[[1,7],[10,7,2],8],4,[[5,10],3,[6,7,8]],[[0],2,6,8],3],[9,[[4,10,2]]]]
[[[10],7,[[],[],0,1],7,[]],[]]
[[[2,0,[0,8,10,3]],0,2,[9,0,[0,2,7],[10,2,2],7],[5]],[],[[8,1,10],2],[]]
[[10,7,2,2,[]],[[[2,2,6,2,5]]],[],[9,8,7]]
[[5,5,[[10,1],[]]]]
[[9,2,3,[8,3,[0]],0],[[[10],[10,8],10],6],[[[1],[7,8,1]],4]]
[[6,[],6,6],[[]],[1,[[9],9,6]]]
[[[[]]],[3,6,7],[7],[3]]
[[8,10],[[0,8,4,9,5],[6,4,9,[5,8]],8,[10,[9,9,6,5],[1,7,1,0,10],2,5]],[1,8,[1],8,7],[]]
[[[0,2,3,[8,2,8,1]],[8,8,1,[4,10]],2],[3,8,3,2],[6,2,[],2]]
[[[[1,2,4],0,7],[4,[8,9,3],[8,3,3,0,3],[6,2]]],[8],[]]
[[],[[[9,2,7,9],[1,4,1],7],[[6,8],5,[6,7]],[6,3,[0,1,3,8,0],[]],[[]],1],[5,5,9,6],[1]]
[[5,8,[10,5],[6],[]],[[10,6,[0,5],10]],[6,[],[],9,10]]
[[7],[[[6,5,1,5],[5,10,0,5],6,[]],9],[],[5,2,[2,4,[5],1]],[5]]
[[[4,[0],2,[2],[8,2,9,10,10]],[0]]]
[[4,3,[[5,9,9,9],9,[0,10,5,6],0]],[[2,5,7,[2,10,5,9,9]],3,[10,[4]],9,1],[[[10,9,1,8,3],6,[2,6],[5,6,10,3],7],5,[2,[2,9,0,4],6,0,[5,8,8,1,0]],[[7],[4,3],[10,8,5,0,4],[8,4,4,7],5],1],[[[],[3]],[[9,5,2,1,1],[5,9]]],[3,4,7]]
[[10,9,10,3,[]]]
[[[[],[8,7,7,5,8],6,[7,7,8],[3,2,5]]],[4,6,[[4,1,0,6],4,[10,8,6,2,1],4]],[],[[[6],[],6],10,10,2],[6,[[1,5,10,5,9],6],[[4],5,[10,10,9]],10,9]]
[[9,0],[],[[5,[],[4,5]],8]]
[[7,[[1],6,5,4]],[[6,0]]]
[[[[9,1],[6,5,2,8,8],2,2,7],[[5,3],[8,1,4,9,1]],4],[[2]],[6,4,0,7,3]]
[[[4],[],[0]],[5,[[7,0,5,0,4]],4,8]]
[[1,[[7],[],5,5,3]]]
[[],[5],[[8,[5,4,8],[]],3,[3,[10,1,2,2],[7],9],5,0]]
[[3,[1,8],6],[9]]
[[1,[[3,9,7],4,[4],4,[]]],[[8],[[0],4]],[6],[1,10],[[0]]]
[[1,0,[[7,4,4,8],[],[8,2,3]]],[4,9,0,[[3,3],3]],[3,[]],[1,10,0,9,[3,8,[9]]]]
[[[10,[5,4,2,1],4,[9,3,8,4]]],[[4],1],[]]
[[4,10,4,1],[[1,10]],[[6,[1,7],[8,0],6],1],[5,[[],[3,4,2]],[]],[9]]
[[[[3,6],[4,4,0,6],6,[4,4,8],[6,8,4,9]],[10],[6,[6,1,6,7]],5]]
[[[[0,8,1,4],[],7,4,[3]],[5,7,3,[6,6]]],[[[],[4,3,4,0],7,4],[3,[2,4,2],[]],[[4],7],6,[]],[0,[1,5],10,[[6,10,7,3]],[6,[]]]]
[[[[8]],8,2,[[0,7,7,4,1],[7,9],[],[],4]],[[6],[]],[[],9,6]]
[[[],[0,[4],10,[4,9,10],3],2,4,[]],[7,1,[10,10,5,10,2],7,[0,9,[6,4]]],[[[],5],9,3,7,9]]
[[[[6,1],2,[6,4,10,3]],[10,[],8,4,[0]]]]
[[[[6,2,7,2],[4],[5,2,0]],[[0,2]],[[3,7,10,8,5],[],[2],4,8],4]]
[[[],[8,[0],7,[5,6,3,7,3]],6],[[],[[6,10],2,[3,1,7,6]],[6,[]],[[]],4],[[0,[1,8,10,2,5]],3,10,[9,9,[],8],10],[6,7,[[4,9,10,8],1,[]],1,[[8,9],[],1]]]
[[5,[5,[9,6,1,9],[7]],6,[],[]],[10]]
[[[[9,1],[8],[2,6],[10,4,1],[2]]],[10,0,9,[0,[9,2,5,3],7,4,1]],[7,[[1,1,4,1,2],[10,5,6,9,6],[6,9],6,3],[]]]
[[2,[[4,7,2,8,9],5,4,2,[2]],[[7],[5,6],3,[]]],[9,6,6,[2,2,8,[],[0,3,6,4]],[6,2,8]],[[[2,1],2,[8],[0,5,7,9,10],10],0,[],1,[6,3,10,3,[]]],[[1,9,9],[[10,3,7]],3,[4,[6,3,1],[],[9],6]]]
[[3,2],[],[[],0,[[2,3,9,4],9,[6,6,1]],[[10,5,1,4],4,2,[5]]],[[[1,0,4],[5,4,4,1,2],[1,6],[4,5],[]],[[0,6,3]],[5]],[]]
[[6],[],[0,[7],[],8,0]]
[[],[[8,[8,0,0,4],9,7,2],[[2],[9],[1,8,5,0],[5,5,7,3]]],[9],[[],[9,10,[5,5,4,7],[5,1,2,0,5]],[[1,0],10,[5,10,1],9],0]]
[[8,[[3,0,2,2,7],7,7,[0,3,0]]],[[[0,3,4],[9,7,0,4,1],9],[[3,10,10,4]],8,8]]
[[3],[4,6,6,10,[]],[[[7,1,5,10],[5],[10,3],5],6]]
[[10,8,[[3,6,9],10,0],7,2],[[],[]],[6,[[]],[]]]
[[[[9,10],7,4,0,[6]]],[5]]
[[1,[]]]
[[[2,8],7,[[10,4],10,[]]],[[[],[2,1],[10,6,2,7],[9]],[[],3,[],[6,4,3,6,3]],[0,[4,8,3,0,5]],8,3],[2,[[5,10,5,0],[6,4,8,4],3,[3,10,5,3],[6,5,3,8,7]],[[10,8,9]]]]
[[[[],9],2,2,8],[3,[[],[10,1,1,4,2],[0,7,3]],8],[[],[4]],[[[]],9,4,[5,[3,5,4,4],[],8]],[]]
[[6,[8,3,[7],[9,6]]]]
[[[[],7],9,[],1,[[],10,2,9]],[[[8,1,6,6],0],2,5,5,[[8,6,5,3],1,6,4,0]],[[8],10,[],2],[[10,2,7,5,[10,3]],[[10,10],7]],[7]]
[[10],[5,[1,[0,10,4,4,6],2,[3],7],9],[8,4,6,2]]
[[],[[3,6],[],0,[0,[1],[4,10],4],[[7]]],[8,[[2,8]],[[5,3,6,7]]]]
[[[8,[1,1,6,7,1]],[],4],[[6,[],[6,7],[5],[5]]],[[[],0],5],[6,10,6,[]]]
[[[],[5,[9],[10,4],[1],7]],[1,[2,[10,1,9,0,6],5]],[[[2]],[],[[8,1,9,8,8],8,[],6,8]],[[[6,3,6,4,2],1,[4,6,6,10,9],8,[9,7,7,10]],10],[2]]
[[4],[[],7,9,[[0,8,1,2],[9,8],0,[5],8]],[[8,[9,6],3,[5,6]]],[6,[5,[9,10,4,7],4],[],2,6],[[],8,[[7,7]],[6,0,[8]]]]
[[9],[1,[],2,[[],5,[7,9,2,1],[7],[]],3],[0,[],[[5,1,2,0],0,[10,9,10,6,10],[8,1],5]],[7,[[3,8,9,10],[0,2]],[2,0],9,[[1,3,9,3,9],[6,6,3],[]]],[4]]
[[[6,3,7],9,[[1,3,5,8,10],1,[6,10,10,9],3,[1,7]]]]
[[],[[],5]]
[[8],[7,2,10]]
[[6,[4,[3],[],[1,7,4,2,5],[3,10,10]],8,[],[9,8,[]]],[[0,0,3],[5,[5,2,5],4,[5,1,2,8,6],9],4],[[]]]
[[1,10],[4],[[0],3,[[8],5,[2,6,10,3]]]]
[[],[8,5,9],[[[5],[3]],7,4,4],[8]]
[[],[]]
[[8,[],0]]
[[4,4,6],[9,5,[[3,8,4,5],5],9,[[5,3],[0,4,0,3],3,[4,10],7]]]
[[[[6,2,3,9,9],[4,1],10,[],3],[4,1,[8,5,5,8],[6,7,2],[4]]],[[[10,4,2,10,9],[2],[2,4,6],3],[[0,8,10],[4],[0,7,0,9,0]],[3]],[4,7,3,8]]
[[[6,5,0],9,5,7,2],[[[],[],7,3,0]],[[7],[],4],[1,6,6,[],9]]

96
ressources/day13.py Normal file
View File

@@ -0,0 +1,96 @@
import json
import pathlib
import sys
def parse(puzzle_input: str) -> list[list[int, ...]]:
"""Convert str representations of lists into real int lists"""
str_pkts: list[list[str, str]] = [
packet.splitlines() for packet in puzzle_input.split("\n\n")
]
int_pkts: list[list[int, ...]] = []
for pkt in str_pkts:
int_pk: list[int, ...] = []
for pk in pkt:
# Here's the magick - I'm highly averse to eval()
int_pk.append(json.loads(pk))
int_pkts.append(int_pk)
return int_pkts
def compare(l: int, r: int) -> int:
"""Compare 2 ints, return 1, 0, -1 depending on values"""
if l < r:
return 1
elif l > r:
return -1
else:
return 0
def compare_packets(left: list[int, ...], right: list[int, ...]) -> int:
"""Compare 2 lists to establish correct order"""
match left, right:
case int(), int():
return compare(left, right)
case int(), list():
return compare_packets([left], right)
case list(), int():
return compare_packets(left, [right])
case list(), list():
for l, r in zip(left, right):
res = compare_packets(l, r)
if res != 0:
return res
return compare_packets(len(left), len(right))
def part1(pairs: list[list[int, ...]]) -> int:
"""Solve part 1"""
sum_of_indices: int = 0
for idx, pair in enumerate(pairs):
if compare_packets(*pair) == 1:
sum_of_indices += idx + 1
return sum_of_indices
def flatten(l: list[list[int]]) -> list[int]:
"""Flatten a nested list one level"""
return [item for sublist in l for item in sublist]
def find_index(l: list[list[int]], item: list[int]) -> int:
"""Return index of where item falls in list"""
item_idx: int = 0
for pkt in flatten(l):
if compare_packets(pkt, item) == 1:
item_idx += 1
return item_idx
def part2(pairs: list[list[int, ...]]) -> int:
"""Solve part 2"""
# Remove one layer of list to match flattened list above
first_divider: list[int] = [2]
second_divider: list[int] = [6]
first_pos: int = find_index(pairs, first_divider) + 1
second_pos: int = find_index(pairs, second_divider) + 2
return first_pos * second_pos
def solve(puzzle_input: str) -> tuple[int, int]:
"""Solve the puzzle for the given input"""
data: list[list[int, ...]] = parse(puzzle_input)
solution1: int = part1(data) # Correct answer was 4734 (with my data)
solution2: int = part2(data) # Correct answer was 21836 (with my data)
return solution1, solution2
if __name__ == "__main__":
for path in sys.argv[1:]:
print(f"{path}:")
puzzle_input = pathlib.Path(path).read_text().strip()
solutions = solve(puzzle_input)
print("\n".join(str(solution) for solution in solutions))

View File

@@ -14,7 +14,6 @@ day1 = do
putStrLn ("Highest calorie count = " ++ calorieCount)
caloriesOfTop3Elves <- day1_2
putStrLn ("Calories of top 3 elves = " ++ caloriesOfTop3Elves)
putStrLn "-----------"
day1_1 :: IO String

76
src/Day10.hs Normal file
View File

@@ -0,0 +1,76 @@
module Day10
( Instruction (..),
parseProgram,
signalStrength,
executeProgram,
draw,
isSpriteDrawn,
day10
)
where
import Control.Arrow ((>>>))
import Data.List.Split (chunksOf)
data Instruction = Addx Int | Noop
deriving (Show, Eq)
newtype Pixel = Pixel Bool deriving (Eq)
instance Show Pixel where
show (Pixel True) = ""
show (Pixel False) = ""
type CRT = String
parseProgram :: String -> [Instruction]
parseProgram = lines >>> map parseProgram'
where
parseProgram' :: String -> Instruction
parseProgram' "noop" = Noop
parseProgram' line = splitAt 4 >>> snd >>> read >>> Addx $ line
isSpriteDrawn :: Int -> Int -> Bool
isSpriteDrawn x p = abs (position - x) <= 1
where
position = p `mod` 40
draw :: [Int] -> CRT
draw registerValues = unlines lastPicture
where
pictures = zipWith isSpriteDrawn registerValues [0..]
lastPicture = concatMap (show . Pixel) >>> chunksOf 40 $ pictures
signalStrength :: [Int] -> Int
signalStrength e = start + sum computedRest
where
start = e !! 20 * 20
rest = drop 20 e
withCycle = zip [60, 100..] (every 40 rest)
computedRest = [c*r | (c,r) <- withCycle]
every :: Int -> [a] -> [a]
every n xs = case drop (n-1) xs of
y : ys -> y : every n ys
[] -> []
executeProgram :: [Instruction] -> [Int]
executeProgram = scanl (+) 1 . concatMap execOne
where
execOne instruction = case instruction of
Noop -> [0]
Addx x -> [0, x]
day10 :: IO ()
day10 = do
input <- readFile "ressources/day10-input"
putStrLn "Day10"
let states = parseProgram >>> executeProgram $ input
let signal = signalStrength states
let crt = draw states
putStrLn ("Signal strength: " ++ show signal)
putStrLn ("CRT picture: \n" ++ crt)

101
src/Day11.hs Normal file
View File

@@ -0,0 +1,101 @@
{-# LANGUAGE OverloadedStrings #-}
module Day11
( runMonkeyMachine,
mostActiveMonkeys,
monkeyBusiness,
day11,
runPart1Machine,
runPart2Machine,
worryLimit,
divideBy3,
)
where
import Control.Monad.State.Strict (execState, get, modify', put)
import qualified Control.Monad.State.Strict as St
import Data.Foldable (forM_, toList)
import Data.List (sortOn)
import Data.Ord (Down (..))
import Data.Sequence ((|>))
import qualified Data.Sequence as S
import Data.Text (pack)
import Day11.Parser
day11 :: IO ()
day11 = do
input <- readFile "ressources/day11-input"
putStrLn "Day11"
let monkeys = (monkeyBusiness . mostActiveMonkeys . runPart1Machine . parseMonkeys) (pack input)
putStrLn ("Part 1 monkey business: " ++ show monkeys)
let monkeys' = (monkeyBusiness . mostActiveMonkeys . runPart2Machine . parseMonkeys) (pack input)
putStrLn ("Part 2 monkey business: " ++ show monkeys')
type MonkeyState = St.State (S.Seq Monkey)
runPart1Machine :: [Monkey] -> [Monkey]
runPart1Machine = runMonkeyMachine divideBy3 20
runPart2Machine :: [Monkey] -> [Monkey]
runPart2Machine monkeys = runMonkeyMachine (worryLimit monkeys) 10000 monkeys
worryLimit :: [Monkey] -> WorryReducer
worryLimit monkeys = (`mod` limit)
where
limit = product $ map _test monkeys
runMonkeyMachine :: WorryReducer -> Int -> [Monkey] -> [Monkey]
runMonkeyMachine eval i monkeys = toList (infiniteMachine !! i)
where
infiniteMachine = iterate go $ S.fromList monkeys
go :: S.Seq Monkey -> S.Seq Monkey
go m = execState go' m
go' :: MonkeyState ()
go' = mapM_ (doMonkey eval) [0 .. length monkeys - 1]
mostActiveMonkeys :: [Monkey] -> [Monkey]
mostActiveMonkeys = take 2 . sortOn (Down . _inspectionCount)
monkeyBusiness :: [Monkey] -> Int
monkeyBusiness = product . map _inspectionCount
-- update a sequence of monkeys according to the moves of the monkey at position idx
doMonkey :: WorryReducer -> Int -> MonkeyState ()
doMonkey reducer idx = do
horde <- get
let m = horde `S.index` idx
let targets = fmap (evalMonkey reducer m) (_items m)
let m' = m {_items = S.empty, _inspectionCount = _inspectionCount m + S.length (_items m)}
put $ S.update idx m' horde
forM_ targets $ \movement ->
modify' (move movement)
-- update other monkeys according to a list of calculated moves
move :: (Int, Int) -> S.Seq Monkey -> S.Seq Monkey
move (to, item) horde
| item < 0 = error ("Item worry level overflow: " ++ show (to, item))
| otherwise =
let m = horde `S.index` to
m' = m {_items = _items m |> item}
in S.update to m' horde
type WorryReducer = Int -> Int
divideBy3 :: WorryReducer
divideBy3 = flip div 3
evalMonkey :: WorryReducer -> Monkey -> Int -> (Int, Int)
evalMonkey reducer monkey item = (target, newLevel)
where
afterOp = case _operation monkey of
Add Old -> item * 2
Add (Fixed x) -> item + x
Multiply Old -> item * item
Multiply (Fixed x) -> item * x
newLevel = reducer afterOp
isDivisible = newLevel `mod` _test monkey == 0
target =
if isDivisible
then _ifDivisible monkey
else _otherwise monkey

98
src/Day11/Parser.hs Normal file
View File

@@ -0,0 +1,98 @@
{-# LANGUAGE OverloadedStrings #-}
module Day11.Parser (
parseMonkeys,
Monkey (..),
Operation (..),
Op (..),
)
where
import Text.Megaparsec
import Text.Megaparsec.Char
import Data.Text (Text)
import Data.Void (Void)
import Control.Monad (void)
import qualified Data.Sequence as S
type Parser = Parsec Void Text
data Op = Fixed Int | Old
deriving (Show, Eq)
data Operation = Add Op | Multiply Op
deriving (Show, Eq)
data Monkey = Monkey
{ _nr :: Int
, _items :: S.Seq Int
, _operation :: Operation
, _test :: Int
, _ifDivisible :: Int
, _otherwise :: Int
, _inspectionCount :: Int }
deriving (Show, Eq)
parseMonkeys :: Text -> [Monkey]
parseMonkeys input = case parse (monkey `sepBy` void eol) "" input of
Left err -> error (show err)
Right result -> result
monkey :: Parser Monkey
monkey = do
void (string "Monkey ")
nr <- many numberChar
void (char ':')
void eol
startingItems <- items
operation <- op
d <- divisor
ifDiv <- ifDivisible
ifOther <- ifOtherwise
return Monkey
{ _nr=read nr
, _items=S.fromList startingItems
, _operation=operation
, _test=d
, _ifDivisible=ifDiv
, _otherwise=ifOther
, _inspectionCount=0 }
ifDivisible :: Parser Int
ifDivisible = do
x <- read <$> (string " If true: throw to monkey " >> many numberChar)
void eol
return x
ifOtherwise :: Parser Int
ifOtherwise = do
x <- read <$> (string " If false: throw to monkey " >> many numberChar)
void eol
return x
divisor :: Parser Int
divisor = do
d <- read <$> (string " Test: divisible by " >> many numberChar)
void eol
return d
items :: Parser [Int]
items = do
void (string " Starting items: ")
startingItems <- sepBy1 (many numberChar) (string ", ")
void eol
return (map read startingItems)
op :: Parser Operation
op = do
o <- void (string " Operation: new = old ") >> addOp <|> mulOp
void eol
return o
where
old = string "old" >> return Old
num = Fixed . read <$> many numberChar
addOp = do
void (string "+ ")
Add <$> (old <|> num)
mulOp = do
void (string "* ")
Multiply <$> (old <|> num)

87
src/Day12.hs Normal file
View File

@@ -0,0 +1,87 @@
module Day12
( day12,
possibleStarts,
parseGrid,
findPath,
GridPoints (..),
Grid,
findBestPath
)
where
import Algorithm.Search (dijkstra)
import Data.Char (ord)
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Maybe (mapMaybe)
import Data.Tuple (swap)
import Linear.V2 (V2 (..))
import Data.Sort (sortOn)
type Pos = V2 Int
type Grid = Map Pos Char
data GridPoints = GridPoints { _start :: Pos, _end :: Pos }
deriving (Show, Eq)
parseGrid :: String -> (GridPoints, Grid)
parseGrid input =
( GridPoints
{ _start = inverseGrid Map.! 'S',
_end = inverseGrid Map.! 'E'
},
Map.fromList grid
)
where
rows = zip [0 ..] $ lines input
grid = concatMap (uncurry colsForRow) rows
inverseGrid = Map.fromList $ map swap grid
colsForRow :: Int -> String -> [(Pos, Char)]
colsForRow r = zipWith makePos [0 ..]
where
makePos c height = (V2 r c, height)
findPath :: Grid -> GridPoints -> Maybe (Int, [Pos])
findPath grid GridPoints {_start = start, _end = end} =
dijkstra (neighbors grid) (const . const 1) solutionFound start
where
solutionFound = (==) end
neighbors :: Grid -> Pos -> [Pos]
neighbors grid pos = filter (canMove grid pos) possiblePositions
where
directions = [V2 1 0, V2 (-1) 0, V2 0 1, V2 0 (-1)]
possiblePositions = map (+ pos) directions
canMove :: Grid -> Pos -> Pos -> Bool
canMove grid from p = case grid Map.!? p of
Just c -> asHeight c <= (currentHeight + 1)
Nothing -> False
where
asHeight 'S' = asHeight 'a'
asHeight 'E' = asHeight 'z'
asHeight x = ord x - ord 'a'
currentHeight = asHeight $ grid Map.! from
possibleStarts :: Grid -> [Pos]
possibleStarts grid = map fst $ filter (\(_, v) -> v == 'a') (Map.toList grid)
findBestPath :: Grid -> GridPoints -> (Int, [Pos])
findBestPath grid points = fastest
where
starts = possibleStarts grid
newPoints = [points { _start = s} | s <- starts]
allPaths = mapMaybe (findPath grid) newPoints
fastest = head $ sortOn fst allPaths
day12 :: IO ()
day12 = do
input <- readFile "ressources/day12-input"
putStrLn "Day12"
let (positions, grid) = parseGrid input
let path = findPath grid positions
putStrLn ("Cost and path : " ++ show path)
let fastest = findBestPath grid positions
putStrLn ("Cost and path for nices route: " ++ show fastest)

117
src/Day13.hs Normal file
View File

@@ -0,0 +1,117 @@
{-# LANGUAGE BlockArguments #-}
module Day13 (parsePackets, Packet (..), checkPair, sumIndices, day13, parsePacketList, addDividers, part2, findDividers, dividers) where
import Text.Megaparsec
import Text.Megaparsec.Char
import Data.Void (Void)
import Control.Monad (void)
import Data.List (intercalate, elemIndex, sort)
import Data.Maybe (catMaybes, mapMaybe)
data Packet = List [Packet] | Entry Int
instance Eq Packet where
(Entry a) == (Entry b) = a == b
(List [Entry a]) == (Entry b) = a == b
(Entry a) == (List [Entry b]) = a == b
(List []) == (Entry _) = False
(List []) == (List (_:_)) = False
(List []) == (List []) = True
(Entry _) == (List []) = False
(List (a:as)) == (List (b:bs)) = a == b && List as == List bs
a@(Entry _) == b@(List _) = List [a] == b
a@(List _) == b@(Entry _) = a == List [b]
(List (_:_)) == (List []) = False
instance Ord Packet where
compare (Entry x) (Entry y) = x `compare` y
compare (List []) (List []) = EQ
compare (List []) (List (_:_)) = LT
compare (List ((Entry x):xs)) (List ((Entry y):ys))
| x < y = LT
| x == y = List xs `compare` List ys
| otherwise = GT
compare (List (x:xs)) (List (y:ys)) =
case x `compare` y of
LT -> LT
EQ -> List xs `compare` List ys
GT -> GT
compare (List (_:_)) (List []) = GT
compare (Entry x) (List ys) = List [Entry x] `compare` List ys
compare (List xs) (Entry y)= List xs `compare` List [Entry y]
newtype PacketPair = PacketPair (Packet, Packet) deriving (Eq)
instance Show PacketPair where
show (PacketPair (p1, p2)) = show p1 ++ "\n" ++ show p2 ++ "\n"
instance Show Packet where
show (Entry n) = show n
show (List ps) = "[" ++ intercalate "," (map show ps) ++ "]"
type Parser = Parsec Void String
parsePackets :: String -> [PacketPair]
parsePackets input = case parse (packetPairs `sepBy` eol) "" input of
Left err -> error (show err)
Right result -> result
parsePacketList :: String -> [Packet]
parsePacketList input = case parse (packetLine `sepBy` eol) "" input of
Left err -> error (show err)
Right result -> catMaybes result
packetLine :: Parser (Maybe Packet)
packetLine = Just <$> parsePacket <|> return Nothing
packetPairs :: Parser PacketPair
packetPairs = do
p1 <- parsePacket
void eol
p2 <- parsePacket
void eol
return $ PacketPair (p1, p2)
parsePacket :: Parser Packet
parsePacket = do
void $ char '['
entries <- (parseNum <|> parsePacket) `sepBy` char ','
void $ char ']'
return $ List entries
where
parseNum = Entry . read <$> some numberChar
checkPair :: PacketPair -> Bool
checkPair (PacketPair (p1, p2)) = p1 <= p2
sumIndices :: [PacketPair] -> Int
sumIndices pairs = sum $ map fst $ filter snd $ zip [1..] $ map checkPair pairs
dividers :: [Packet]
dividers = [List [List [Entry 2]], List [List [Entry 6]]]
addDividers :: [Packet] -> [Packet]
addDividers = (++) dividers
-- find the 1-based indices of the dividers
findDividers :: [Packet] -> [Int]
findDividers packets = map (+1) positions
where
positions = mapMaybe findIndex dividers
findIndex x = x `elemIndex` packets
part2 :: [Packet] -> Int
part2 packets = product $ findDividers $ sort $ addDividers packets
day13 :: IO ()
day13 = do
input <- readFile "ressources/day13-input"
putStrLn "Day13"
let pairs = parsePackets input
putStrLn ("Sum of indices: " ++ show (sumIndices pairs))
let packets = parsePacketList input
putStrLn ("Decoder key: " ++ show (part2 packets))

14
src/Day5.hs Normal file
View File

@@ -0,0 +1,14 @@
module Day5 (day5) where
import Day5.Part1
import Day5.Part2
day5 :: IO ()
day5 = do
input <- readFile "ressources/day05-input"
putStrLn "Day5"
let message = day5_1 input
putStrLn ("Message from crates: " ++ message)
let secondMessage = day5_2 input
putStrLn ("Actuale message from crates: " ++ secondMessage)

25
src/Day5/Part1.hs Normal file
View File

@@ -0,0 +1,25 @@
module Day5.Part1 (
executeOperation,
day5_1
) where
import qualified Data.Sequence as S
import Data.Foldable (toList)
import Day5.Shared
executeOperation :: Row -> Operation -> Row
executeOperation row op
| count op == 1 = updatedRow
| otherwise = executeOperation updatedRow (Operation { count = count op - 1, from = from op, to = to op })
where
originStack = row `S.index` asInt (from op)
targetStack = row `S.index` asInt (to op)
movedContent = head $ content originStack
updatedOrigin = Stack (drop 1 $ content originStack)
updatedTarget = Stack (movedContent : content targetStack)
updatedRow = S.update (asInt $ to op) updatedTarget $ S.update (asInt $ from op) updatedOrigin row
day5_1 :: String -> String
day5_1 input = toList . findTopOfStacks $ foldl executeOperation row operations
where
(row, operations) = parseInput input

24
src/Day5/Part2.hs Normal file
View File

@@ -0,0 +1,24 @@
module Day5.Part2 (
execute9001Operation,
day5_2
) where
import qualified Data.Sequence as S
import Data.Foldable (toList)
import Day5.Shared
execute9001Operation :: Row -> Operation -> Row
execute9001Operation row op
= updatedRow
where
originStack = row `S.index` asInt (from op)
targetStack = row `S.index` asInt (to op)
movedContent = take (count op) $ content originStack
updatedOrigin = Stack (drop (count op) $ content originStack)
updatedTarget = Stack (movedContent ++ content targetStack)
updatedRow = S.update (asInt $ to op) updatedTarget $ S.update (asInt $ from op) updatedOrigin row
day5_2 :: String -> String
day5_2 input = toList . findTopOfStacks $ foldl execute9001Operation row operations
where
(row, operations) = parseInput input

84
src/Day5/Shared.hs Normal file
View File

@@ -0,0 +1,84 @@
module Day5.Shared (
StackIndex (..),
Operation (..),
Stack (..),
Row,
Content,
asInt,
content,
parseOperation,
parseStacks,
parseRow,
combineRows,
parseInput,
zipWithPadding,
findTopOfStacks
) where
import qualified Data.Sequence as S
import Data.Sequence (Seq (..))
newtype StackIndex = StackIndex Int deriving (Show, Eq, Ord)
asInt :: StackIndex -> Int
asInt (StackIndex i) = i - 1
data Operation = Operation
{ count :: Int
, from :: StackIndex
, to :: StackIndex} deriving (Show, Eq)
type Content = Char
newtype Stack = Stack [Content] deriving (Show, Eq)
content :: Stack -> [Content]
content (Stack c) = c
instance Semigroup Stack where
(Stack x) <> (Stack y) = Stack (x ++ y)
instance Monoid Stack where
mempty = Stack []
type Row = S.Seq Stack
parseOperation :: String -> Operation
parseOperation line = Operation {
count = read $ parts !! 1,
from = StackIndex (read $ parts !! 3),
to = StackIndex (read $ parts !! 5)
}
where
parts = words line
parseStacks :: [String] -> Row
parseStacks input = foldl combineRows S.empty rows
where
rows = map parseRow input
parseRow :: String -> Row
parseRow ('[':c:']':' ':cs) = Stack [c] :<| parseRow cs
parseRow (' ':' ':' ':' ':cs) = Stack [] :<| parseRow cs
parseRow ['[', c, ']'] = S.singleton $ Stack [c]
parseRow [' ', ' ', ' '] = S.singleton $ Stack []
parseRow (' ':'1':_) = S.empty -- skip last line
parseRow cs = error ("parseRow: unexpected Row \"" ++ cs ++ "\"")
combineRows :: Row -> Row -> Row
combineRows S.Empty row = row
combineRows row S.Empty = row
combineRows up down = S.fromList [x <> y | (x,y) <- zipWithPadding up down]
zipWithPadding :: (Monoid a, Monoid b) => S.Seq a -> S.Seq b -> [(a,b)]
zipWithPadding (x :<| xs) (y :<| ys) = (x,y) : zipWithPadding xs ys
zipWithPadding S.Empty (y :<| ys) = (mempty, y) : zipWithPadding S.empty ys
zipWithPadding (x :<| xs) S.Empty = (x, mempty) : zipWithPadding xs S.empty
zipWithPadding S.Empty S.Empty = []
parseInput :: String -> (Row, [Operation])
parseInput input = (parseStacks stackInput, map parseOperation (drop 1 operationInput))
where
(stackInput, operationInput) = break ("" ==) $ lines input
findTopOfStacks :: Row -> Seq Content
findTopOfStacks row = head . content <$> row

41
src/Day6.hs Normal file
View File

@@ -0,0 +1,41 @@
module Day6 (
findEnd,
findStart,
day6
) where
import qualified Data.Sequence as S
import Data.Sequence (Seq (..), (|>))
findStart :: String -> Maybe Int
findStart = findUniqueSubstring 14
findEnd :: String -> Maybe Int
findEnd = findUniqueSubstring 4
findUniqueSubstring :: Int -> String -> Maybe Int
findUniqueSubstring size input
| length input < size = Nothing -- imposible to find a substring because input is too small
| otherwise = find 0 S.empty $ S.fromList input
where
find :: Int -> Seq Char -> Seq Char -> Maybe Int
find _ _ Empty = Nothing
find off window (r :<| rs)
= case S.elemIndexL r window of -- is new element in window?
Nothing -> if S.length window == size -1 -- Element not found, but is our window large nough?
then Just nextOff -- Large enough, we got a winner!
else find nextOff enlargedWindow rs -- Not large enough, push new element to the end of the window
Just i -> find nextOff (removeConflict (i + 1)) rs -- continue after clearing window
where
nextOff = off + 1
enlargedWindow = window |> r
removeConflict i = S.drop i enlargedWindow
day6 :: IO ()
day6 = do
input <- readFile "ressources/day06-input"
putStrLn "Day6"
let offset = findEnd input
putStrLn ("Found end marker at " ++ show offset)
let startOffset = findStart input
putStrLn ("Found start marker at " ++ show startOffset)

24
src/Day7.hs Normal file
View File

@@ -0,0 +1,24 @@
module Day7 (
day7
) where
import Day7.Parser
import Day7.Interpreter
import Shared
day7 :: IO ()
day7 = do
input <- readFile "ressources/day07-input"
putStrLn "Day7"
let parsed = forceRight $ parseTerminalLines input
let tree = buildTree parsed
let small = filterDirectories (<= 100000) tree
let sumOfSmall = sum small
putStrLn ("Sum of those directories is " ++ show sumOfSmall)
let rootSize = head $ sizeOfDirectories tree
let freeSpace = 70000000 - rootSize
let requiredSpace = 30000000 - freeSpace
let bigEnough = filterDirectories (>= requiredSpace) tree
let smallest = minimum bigEnough
putStrLn ("Smallest directory that is still large enough " ++ show smallest)

81
src/Day7/Interpreter.hs Normal file
View File

@@ -0,0 +1,81 @@
module Day7.Interpreter (
buildTree,
mkdir,
FileTree (..),
Directory,
calculateSize,
filterDirectories,
sizeOfDirectories,
) where
import Day7.Parser
import Data.Map (Map)
import qualified Data.Map as Map
import qualified Data.Foldable as F
data FileTree a = FileTree
{ sub :: Map String (FileTree a)
, files :: Map String a
, isRoot :: Bool
} deriving (Eq)
-- Directory is a FileTree with file sizes of Int
type Directory = FileTree Int
-- pretty much only useful for summing up file sizes
instance F.Foldable FileTree where
foldMap f dir = foldMap f (files dir) <> mconcat mappedSubfolders
where
subFolders = Map.elems $ sub dir
mappedSubfolders = map (foldMap f) subFolders
instance Show a => Show (FileTree a) where
show d = "DIR " ++ show (Map.toList $ files d) ++ " - " ++ show (Map.toList $ sub d) ++ "\n"
mkdir :: Directory
mkdir = FileTree { sub = Map.empty, files = Map.empty, isRoot = False }
rootDirectory :: Directory
rootDirectory = mkdir { isRoot = True }
buildTree :: [TerminalCommand] -> Directory
buildTree commands = fst (buildTree' rootDirectory commands)
where
-- executes terminal commands and returns all remaining commands
buildTree' :: Directory -> [TerminalCommand] -> (Directory, [TerminalCommand])
buildTree' dir [] = (dir, [])
buildTree' dir (command:cs) = case command of
Listing entries ->
let asFiles = Map.fromList $ toFiles entries
newDir = dir { files = asFiles }
in buildTree' newDir cs -- update current directory and return all remaining commands
In dirName ->
let subFolders = sub dir
selectedDir = Map.findWithDefault mkdir dirName subFolders -- select or create folder
(replacement, rest) = buildTree' selectedDir cs -- recurse down
updatedSub = Map.insert dirName replacement subFolders -- update folder the map of the current directory
in buildTree' dir { sub = updatedSub} rest -- continue with updated folder and rest of commands
Out -> (dir, cs) -- return to previous caller and return all remaining commands
Root -> if isRoot dir
then buildTree' dir cs -- return to previous caller as long is current directory is not root
else (dir, command:cs) -- keep the Root command because it is not yet completed
-- convert to file-pairs and ignore directories
toFiles :: [ListingEntry] -> [(String, Int)]
toFiles ((FileListing name size):rest) = (name, size): toFiles rest
toFiles (_:rest) = toFiles rest
toFiles [] = []
calculateSize :: Directory -> Int
calculateSize = F.foldl' (+) 0
flatten :: Directory -> [Directory]
flatten d = d : concatMap flatten (Map.elems (sub d))
sizeOfDirectories :: Directory -> [Int]
sizeOfDirectories = map calculateSize . flatten
filterDirectories :: (Int -> Bool) -> Directory -> [Int]
filterDirectories predicate dir = filter predicate $ sizeOfDirectories dir

68
src/Day7/Parser.hs Normal file
View File

@@ -0,0 +1,68 @@
module Day7.Parser (
parseTerminalLines,
TerminalCommand (..),
ListingEntry (..),
DirName,
FileName,
Size
) where
import Text.ParserCombinators.Parsec
type DirName = String
type FileName = String
type Size = Int
data ListingEntry = DirListing DirName | FileListing FileName Size
deriving (Show, Eq)
data TerminalCommand = In DirName | Out | Root | Listing [ListingEntry]
deriving (Show, Eq)
parseTerminalLines :: String -> Either ParseError [TerminalCommand]
parseTerminalLines = parse terminal "(error)"
terminal :: GenParser Char st [TerminalCommand]
terminal = many command
command :: GenParser Char st TerminalCommand
command = do
_ <- string "$ "
cd <|> ls
ls :: GenParser Char st TerminalCommand
ls = do
_ <- string "ls\n"
entries <- many listingEntry
return $ Listing entries
listingEntry :: GenParser Char st ListingEntry
listingEntry = dirListing <|> fileListing
dirListing :: GenParser Char st ListingEntry
dirListing = do
_ <- string "dir "
dirName <- many $ noneOf "\n"
_ <- char '\n'
return $ DirListing dirName
fileListing :: GenParser Char st ListingEntry
fileListing = do
fileSize <- many1 digit
_ <- char ' '
fileName <- many $ noneOf "\n"
_ <- char '\n'
return $ FileListing fileName (read fileSize)
cd :: GenParser Char st TerminalCommand
cd = do
_ <- string "cd "
name <- many $ noneOf "\n"
_ <- char '\n'
return $ nameToDir name
nameToDir :: DirName -> TerminalCommand
nameToDir "/" = Root
nameToDir ".." = Out
nameToDir ds = In ds

81
src/Day8.hs Normal file
View File

@@ -0,0 +1,81 @@
module Day8 (
Forest,
Visibillity,
parseForest,
checkVisibility,
countVisible,
findMaxScenicScore,
viewingDistance,
day8
)where
import qualified Data.Matrix as M
import Data.Matrix ((!))
import Data.Char (isDigit)
import qualified Data.Vector as V
import Data.Monoid (Sum (..), getSum, Product (..), getProduct)
import Control.Arrow ((>>>))
type Forest = M.Matrix Int
type Visibillity = M.Matrix Bool
parseForest :: String -> Forest
parseForest input = M.fromList rows cols asNumbers
where
ls = lines input
cols = length (head ls)
rows = length ls
asNumbers :: [Int]
asNumbers = map (read . (: [])) . filter isDigit $ input
checkAgainstNeighbours :: (Int -> [V.Vector Int] -> a) -> Forest -> M.Matrix a
checkAgainstNeighbours f forest = M.matrix (M.nrows forest) (M.ncols forest) check
where
check(x, y) =
let row = M.getRow x forest
col = M.getCol y forest
-- left and top are reversed to order the as seen from (x,y)
left = V.reverse $ V.take (y - 1) row
right = V.drop y row
top = V.reverse $ V.take (x - 1) col
bottom = V.drop x col
v = forest ! (x,y)
in f v [left, right, top, bottom]
checkVisibility :: Forest -> Visibillity
checkVisibility = checkAgainstNeighbours isVisible
where
isVisible treeHeight = any (all (< treeHeight))
countVisible :: Visibillity -> Int
countVisible = foldMap (Sum . isTrue) >>> getSum
where
isTrue True = 1
isTrue False = 0
checkScenicScores :: Forest -> M.Matrix Int
checkScenicScores = checkAgainstNeighbours allDistances
where
allDistances treeHeight neighbors = foldMap (viewingDistance treeHeight >>> Product) >>> getProduct $ neighbors
viewingDistance :: Int -> V.Vector Int -> Int
viewingDistance treeHeight neighbors
| V.length neighbors == 0 = 0
| V.head neighbors >= treeHeight = 1
| V.head neighbors < treeHeight = 1 + viewingDistance treeHeight (V.tail neighbors)
| otherwise = 0
findMaxScenicScore :: Forest -> Int
findMaxScenicScore = checkScenicScores >>> M.toList >>> maximum
day8 :: IO ()
day8 = do
input <- readFile "ressources/day08-input"
putStrLn "Day8"
let forest = parseForest input
let visibleTrees = checkVisibility >>> countVisible $ forest
putStrLn ("Number of visible trees is " ++ show visibleTrees)
let highestScenicScore = findMaxScenicScore forest
putStrLn ("Highest scenic score is " ++ show highestScenicScore)

116
src/Day9.hs Normal file
View File

@@ -0,0 +1,116 @@
module Day9
( parseMovements,
Move (..),
Grid (..),
up,
down,
left,
right,
diag,
still,
step,
recordPositions,
normalizeMovement,
Step (..),
follow,
buildTails,
day9,
)
where
import Control.Arrow ((>>>))
import Control.Monad.Trans.State.Strict (State, modify, runState)
import qualified Data.Set as S
newtype Move = Move (Int, Int)
deriving (Show, Eq)
newtype Step = Step (Int, Int)
deriving (Show, Eq)
up :: Int -> Move
up y = Move (0, y)
down :: Int -> Move
down y = Move (0, y * (-1))
left :: Int -> Move
left x = Move (x * (-1), 0)
right :: Int -> Move
right x = Move (x, 0)
diag :: Int -> Move
diag x = Move (x, x)
still :: Move
still = Move (0, 0)
type Pos = (Int, Int)
data Grid = Grid {h :: Pos, t :: Pos} deriving (Show, Eq)
data MovementLog = MovementLog {visited :: S.Set Pos, recordedSteps :: [Step]}
deriving (Show, Eq)
logOne :: (Pos, Step) -> MovementLog -> MovementLog
logOne (p, s) (MovementLog v steps) =
MovementLog (S.insert p v) (s : steps)
buildTails :: [Step] -> [([Pos], [Step])]
buildTails steps = iterate (snd >>> recordPositions) ([], steps)
recordPositions :: [Step] -> ([Pos], [Step])
recordPositions steps = (allPositions, allSteps)
where
-- insert last tail position
allPositions = S.toList $ S.insert lastTailPos (visited state)
allSteps = reverse (recordedSteps state)
((_, Grid {t = lastTailPos}), state) =
runState (recordPositions' steps Grid {h = (0,0), t = (0,0)}) (MovementLog S.empty [])
recordPositions' :: [Step] -> Grid -> State MovementLog ([Step], Grid)
recordPositions' [] grid = return ([], grid)
recordPositions' (m : ms) Grid {h = headPos, t = tailPos} =
let newHead = headPos `step` m
followStep = follow newHead tailPos
newTail = tailPos `step` followStep
in modify (logOne (newTail, followStep))
>> recordPositions' ms Grid {h = newHead, t = newTail}
parseMovements :: String -> [Move]
parseMovements = lines >>> map toMove
where
toMove ('U' : ' ' : xs) = up $ read xs
toMove ('D' : ' ' : xs) = down $ read xs
toMove ('L' : ' ' : xs) = left $ read xs
toMove ('R' : ' ' : xs) = right $ read xs
toMove _ = error "cannot parse movement"
normalizeMovement :: Move -> [Step]
normalizeMovement (Move (dx, 0)) = replicate (abs dx) (Step (signum dx, 0))
normalizeMovement (Move (0, dy)) = replicate (abs dy) (Step (0, signum dy))
normalizeMovement m = error $ "cannot normalize movement: " ++ show m
step :: Pos -> Step -> Pos
step (x, y) (Step (dx, dy)) = (x + dx, y + dy)
follow :: Pos -> Pos -> Step
follow (x1, y1) (x2, y2)
| abs dx > 1 || abs dy > 1 = Step (signum dx, signum dy)
| otherwise = Step (0, 0)
where
dx = x1 - x2
dy = y1 - y2
day9 :: IO ()
day9 = do
input <- readFile "ressources/day09-input"
putStrLn "Day9"
let headSteps = parseMovements >>> concatMap normalizeMovement $ input
let allTails = buildTails headSteps
let positions = (!! 1) >>> fst >>> length $ allTails
putStrLn ("Number of distinct positions " ++ show positions)
let tail9 = (!! 9) >>> fst >>> length $ allTails
putStrLn ("Number of distinct positions of tail 9" ++ show tail9)

View File

@@ -1,9 +1,27 @@
module Lib
( someFunc
) where
import Day4
import Day1 (day1)
import Day2 (day2)
import Day3 (day3)
import Day4 (day4)
import Day5 (day5)
import Day6 (day6)
import Day7 (day7)
import Day8 (day8)
import Day9 (day9)
import Day10 (day10)
import Day11 (day11)
import Day12 (day12)
import Day13 (day13)
days :: [IO ()]
days = [day1, day2, day3, day4, day5, day6, day7, day8, day9, day10, day11, day12, day13]
sep :: IO ()
sep = putStrLn "---------"
someFunc :: IO ()
someFunc = day4
someFunc = mapM_ (>> sep) days

6
src/Shared.hs Normal file
View File

@@ -0,0 +1,6 @@
module Shared(forceRight) where
forceRight :: Either a b -> b
forceRight (Left _) = error "forced Right but got Left"
forceRight (Right b) = b

193
test/Day10Spec.hs Normal file
View File

@@ -0,0 +1,193 @@
{-# LANGUAGE QuasiQuotes #-}
module Day10Spec (spec) where
import Control.Arrow ((>>>))
import Day10
import Test.Hspec
import Text.Heredoc
testInput :: String
testInput = [str|noop
|addx 3
|addx -5
|]
testProgram :: [Instruction]
testProgram = [Noop, Addx 3, Addx (-5)]
testInput2 :: String
testInput2 = [str|addx 15
|addx -11
|addx 6
|addx -3
|addx 5
|addx -1
|addx -8
|addx 13
|addx 4
|noop
|addx -1
|addx 5
|addx -1
|addx 5
|addx -1
|addx 5
|addx -1
|addx 5
|addx -1
|addx -35
|addx 1
|addx 24
|addx -19
|addx 1
|addx 16
|addx -11
|noop
|noop
|addx 21
|addx -15
|noop
|noop
|addx -3
|addx 9
|addx 1
|addx -3
|addx 8
|addx 1
|addx 5
|noop
|noop
|noop
|noop
|noop
|addx -36
|noop
|addx 1
|addx 7
|noop
|noop
|noop
|addx 2
|addx 6
|noop
|noop
|noop
|noop
|noop
|addx 1
|noop
|noop
|addx 7
|addx 1
|noop
|addx -13
|addx 13
|addx 7
|noop
|addx 1
|addx -33
|noop
|noop
|noop
|addx 2
|noop
|noop
|noop
|addx 8
|noop
|addx -1
|addx 2
|addx 1
|noop
|addx 17
|addx -9
|addx 1
|addx 1
|addx -3
|addx 11
|noop
|noop
|addx 1
|noop
|addx 1
|noop
|noop
|addx -13
|addx -19
|addx 1
|addx 3
|addx 26
|addx -30
|addx 12
|addx -1
|addx 3
|addx 1
|noop
|noop
|noop
|addx -9
|addx 18
|addx 1
|addx 2
|noop
|noop
|addx 9
|noop
|noop
|noop
|addx -1
|addx 2
|addx -37
|addx 1
|addx 3
|noop
|addx 15
|addx -21
|addx 22
|addx -6
|addx 1
|noop
|addx 2
|addx 1
|noop
|addx -10
|noop
|noop
|addx 20
|addx 1
|addx 2
|addx 2
|addx -6
|addx -11
|noop
|noop
|noop
|]
spec :: Spec
spec =
describe "Day10" $ do
describe "Part1" $ do
it "parses" $ do
parseProgram testInput `shouldBe` testProgram
it "executes" $ do
executeProgram testProgram `shouldBe` [1,1,1,4,4,-1]
it "executes larger program" $ do
let registerValues = parseProgram >>> executeProgram $ testInput2
registerValues !! 20 `shouldBe` 21
registerValues !! 60 `shouldBe` 19
registerValues !! 100 `shouldBe` 18
registerValues !! 140 `shouldBe` 21
registerValues !! 180 `shouldBe` 16
registerValues !! 220 `shouldBe` 18
it "computes signal strength" $ do
let registerValues = parseProgram >>> executeProgram $ testInput2
signalStrength registerValues `shouldBe` 13140
it "prints a crt" $ do
let registerValues = parseProgram >>> executeProgram $ testInput2
putStrLn $ draw registerValues
it "sprites drawn" $ do
isSpriteDrawn 1 1 `shouldBe` True
isSpriteDrawn 1 1 `shouldBe` True

68
test/Day11Spec.hs Normal file
View File

@@ -0,0 +1,68 @@
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module Day11Spec (spec) where
import Data.Foldable (toList)
import qualified Data.Sequence as S
import Data.Text (Text)
import Day11
import Day11.Parser
import Test.Hspec
import Text.Heredoc
import Data.Int (Int64)
testInput :: Text
testInput =
[str|Monkey 0:
| Starting items: 79, 98
| Operation: new = old * 19
| Test: divisible by 23
| If true: throw to monkey 2
| If false: throw to monkey 3
|
|Monkey 1:
| Starting items: 54, 65, 75, 74
| Operation: new = old + 6
| Test: divisible by 19
| If true: throw to monkey 2
| If false: throw to monkey 0
|
|Monkey 2:
| Starting items: 79, 60, 97
| Operation: new = old * old
| Test: divisible by 13
| If true: throw to monkey 1
| If false: throw to monkey 3
|
|Monkey 3:
| Starting items: 74
| Operation: new = old + 3
| Test: divisible by 17
| If true: throw to monkey 0
| If false: throw to monkey 1
|]
exampleMonkeys :: [Monkey]
exampleMonkeys = parseMonkeys testInput
spec :: Spec
spec =
describe "Day11" $ do
describe "Part1" $ do
it "parses" $ do
head exampleMonkeys `shouldBe` Monkey 0 (S.fromList [79, 98]) (Multiply (Fixed 19)) 23 2 3 0
_items (exampleMonkeys !! 1) `shouldBe` S.fromList [54, 65, 75, 74]
it "runs part 1 monkey machine for 20 rounds" $ do
let monkeys = runMonkeyMachine divideBy3 20 exampleMonkeys
map _inspectionCount monkeys
`shouldBe` [101, 95, 7, 105]
map _inspectionCount (mostActiveMonkeys monkeys) `shouldBe` [105, 101]
map _nr (mostActiveMonkeys monkeys) `shouldBe` [3, 0]
monkeyBusiness (mostActiveMonkeys monkeys) `shouldBe` 10605
it "runs part 2 monkey machine for 10000 rounds" $ do
let monkeys = runMonkeyMachine (worryLimit exampleMonkeys) 10000 exampleMonkeys
map _inspectionCount monkeys
`shouldBe` [52166, 47830, 1938, 52013]
monkeyBusiness (mostActiveMonkeys monkeys) `shouldBe` 2713310158

30
test/Day12Spec.hs Normal file
View File

@@ -0,0 +1,30 @@
{-# LANGUAGE QuasiQuotes #-}
module Day12Spec (spec) where
import Day12
import Test.Hspec
import Text.Heredoc
import Data.Maybe (fromJust, isJust)
testInput :: String
testInput = [str|Sabqponm
|abcryxxl
|accszExk
|acctuvwj
|abdefghi
|]
spec :: Spec
spec =
describe "Day12" $ do
describe "Part1" $ do
it "finds a path" $ do
let (points, grid) = parseGrid testInput
let result = findPath grid points
isJust result `shouldBe` True
fst (fromJust result) `shouldBe` 31
it "finds shortest paths from all lowest points" $ do
let (points, grid) = parseGrid testInput
let fastest = findBestPath grid points
fst fastest `shouldBe` 29

71
test/Day13Spec.hs Normal file
View File

@@ -0,0 +1,71 @@
{-# LANGUAGE QuasiQuotes #-}
module Day13Spec (spec) where
import Day13
import Test.Hspec
import Text.Heredoc
import Data.List (sort, elem, elemIndex)
testInput :: String
testInput = [str|[1,1,3,1,1]
|[1,1,5,1,1]
|
|[[1],[2,3,4]]
|[[1],4]
|
|[9]
|[[8,7,6]]
|
|[[4,4],4,4]
|[[4,4],4,4,4]
|
|[7,7,7,7]
|[7,7,7]
|
|[]
|[3]
|
|[[[]]]
|[[]]
|
|[1,[2,[3,[4,[5,6,7]]]],8,9]
|[1,[2,[3,[4,[5,6,0]]]],8,9]
|]
falsePositive :: String
falsePositive = "[[],[[[10,2,6],[1,4,9,2,5]],[],[5,2],[1,3,5]],[[[7,2,2,0],[0,1],10],10,[9,[4,8],[8,2,10],[1,4,2]],7,[[2]]]]\n" ++
"[[],[[[],[],[9,10,5,6],2,[0]],10],[[],[[4,9,3,7],7,4],[],2,2],[8,[6,8,[7,5,5],[2,4,8,0,7],[3,1,7,3,9]],[[9,1,5,1],[5,1,1],[],[2,1,2,1]],[[0,9,1,10],5,[],10,[5,0,10,2]],[10,[3,4,8,8,4],5]]]\n"
spec :: Spec
spec =
describe "Day12" $ do
describe "Part1" $ do
it "parser a single pair" $ do
let input = "[1,[],3]\n[]\n"
show (head $ parsePackets input) `shouldBe` input
it "checks order" $ do
Entry 1 <= Entry 2 `shouldBe` True
Entry 2 <= Entry 1 `shouldBe` False
List [] <= List [] `shouldBe` True
List [] <= List [Entry 1] `shouldBe` True
List [Entry 1] <= List [] `shouldBe` False
List [Entry 1] <= Entry 2 `shouldBe` True
List [Entry 2] <= Entry 1 `shouldBe` False
let pair = head $ parsePackets falsePositive
checkPair pair `shouldBe` False
it "checks examples" $ do
let pairs = parsePackets testInput
length pairs `shouldBe` 8
sumIndices pairs `shouldBe` 13
map checkPair pairs `shouldBe` [True, True, False, True, False, True, False, False]
describe "Part2" $ do
it "checks examples" $ do
let packets = sort $ addDividers $ parsePacketList testInput
let a = packets !! 9
let b = head dividers
a `shouldBe` b
elem (head dividers) packets `shouldBe` True
findDividers packets `shouldBe` [10, 14]

84
test/Day5Spec.hs Normal file
View File

@@ -0,0 +1,84 @@
{-# LANGUAGE QuasiQuotes #-}
module Day5Spec (spec) where
import Test.Hspec
import Text.Heredoc
import qualified Data.Sequence as S
import Day5.Part1
import Day5.Part2
import Day5.Shared
inputPart1 :: String
inputPart1 = [str| [D]
|[N] [C]
|[Z] [M] [P]
| 1 2 3
|
|move 1 from 2 to 1
|move 3 from 1 to 3
|move 2 from 2 to 1
|move 1 from 1 to 2
|]
inputStacks :: String
inputStacks = [str| [D]
|[N] [C]
|[Z] [M] [P]
| 1 2 3
|]
inputOperations :: String
inputOperations = [str|move 1 from 2 to 1
|move 3 from 1 to 3
|move 2 from 2 to 1
|move 1 from 1 to 2
|]
spec :: Spec
spec =
describe "Day5" $ do
describe "Part1" $ do
it "parses Operations" $ do
let operation = head . lines $ inputOperations
parseOperation operation `shouldBe` Operation { count = 1, from = StackIndex 2, to = StackIndex 1 }
it "parses stacks" $ do
parseStacks (lines inputStacks) `shouldBe` S.fromList [Stack "NZ", Stack "DCM", Stack "P"]
it "parses a single line of stacks" $ do
let row = head . lines $ inputStacks
parseRow row `shouldBe` S.fromList [Stack "", Stack "D"]
it "combines stacks" $ do
(Stack "AB" <> Stack "CD") `shouldBe` Stack "ABCD"
it "combines rows" $ do
S.fromList [Stack "", Stack "A"] `combineRows` S.fromList [Stack "B", Stack "B"] `shouldBe` S.fromList [Stack "B", Stack "AB"]
S.empty `combineRows` S.fromList [Stack "B", Stack "B"] `shouldBe` S.fromList [Stack "B", Stack "B"]
S.fromList [Stack "A", Stack "B"] `combineRows` S.empty `shouldBe` S.fromList [Stack "A", Stack "B"]
S.singleton (Stack "") `combineRows` S.fromList[Stack "B", Stack "B"] `shouldBe` S.fromList [Stack "B", Stack "B"]
S.fromList [Stack "A", Stack "B"] `combineRows` S.singleton (Stack "") `shouldBe` S.fromList [Stack "A", Stack "B"]
it "splits input into stacks and operations" $ do
parseInput inputPart1 `shouldBe`
(S.fromList [Stack "NZ", Stack "DCM", Stack "P"],
[ Operation { count = 1, from = StackIndex 2, to = StackIndex 1},
Operation { count = 3, from = StackIndex 1, to = StackIndex 3},
Operation { count = 2, from = StackIndex 2, to = StackIndex 1},
Operation { count = 1, from = StackIndex 1, to = StackIndex 2}])
it "exeutes a count=1 operation on a row" $ do
let op = Operation { count = 1, from = StackIndex 2, to = StackIndex 3}
let row = S.fromList [Stack "NZ", Stack "DCM", Stack "P"]
executeOperation row op `shouldBe` S.fromList [Stack "NZ", Stack "CM", Stack "DP"]
it "exeutes a count > 1 operation on a row" $ do
let op = Operation { count = 2, from = StackIndex 2, to = StackIndex 3}
let row = S.fromList [Stack "NZ", Stack "DCM", Stack "P"]
executeOperation row op `shouldBe` S.fromList [Stack "NZ", Stack "M", Stack "CDP"]
it "finds the top items on stacks" $ do
let row = S.fromList [Stack "NZ", Stack "DCM", Stack "P"]
findTopOfStacks row `shouldBe` S.fromList "NDP"
it "solves the demo" $ do
day5_1 inputPart1 `shouldBe` "CMZ"
describe "Part1" $ do
it "executes 9001 operations on a row" $ do
let op = Operation { count = 2, from = StackIndex 2, to = StackIndex 3}
let row = S.fromList [Stack "NZ", Stack "DCM", Stack "P"]
execute9001Operation row op `shouldBe` S.fromList [Stack "NZ", Stack "M", Stack "DCP"]
it "solves the demo" $ do
day5_2 inputPart1 `shouldBe` "MCD"

31
test/Day6Spec.hs Normal file
View File

@@ -0,0 +1,31 @@
module Day6Spec (spec) where
import Test.Hspec
import Day6
spec :: Spec
spec =
describe "Day6" $ do
describe "Part1" $ do
it "finds the marker just after the beginning" $ do
findEnd "aabcd" `shouldBe` Just 5
it "finds the marker in the beginning" $ do
findEnd "abcd" `shouldBe` Just 4
findEnd "aabcd" `shouldBe` Just 5
it "finds nothing if nothing is there" $ do
findEnd "abc" `shouldBe` Nothing
findEnd "abcb" `shouldBe` Nothing
findEnd "abcabcb" `shouldBe` Nothing
it "finds a marker" $ do
findEnd "mjqjpqmgbljsphdztnvjfqwrcgsmlb"`shouldBe` Just 7
findEnd "bvwbjplbgvbhsrlpgdmjqwftvncz" `shouldBe` Just 5
findEnd "nppdvjthqldpwncqszvftbrmjlhg" `shouldBe` Just 6
findEnd "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg" `shouldBe` Just 10
findEnd "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw" `shouldBe` Just 11
describe "Part 2" $ do
it "finds start of message marker" $ do
findStart "mjqjpqmgbljsphdztnvjfqwrcgsmlb"`shouldBe` Just 19
findStart "bvwbjplbgvbhsrlpgdmjqwftvncz" `shouldBe` Just 23
findStart "nppdvjthqldpwncqszvftbrmjlhg" `shouldBe` Just 23
findStart "nznrnfrfntjfmvfwmzdfjlvtqnbhcprsg" `shouldBe` Just 29
findStart "zcfzfwzzqfrljwzlrfnpqdbhtmscgvjw" `shouldBe` Just 26

130
test/Day7Spec.hs Normal file
View File

@@ -0,0 +1,130 @@
{-# LANGUAGE QuasiQuotes #-}
module Day7Spec (spec) where
import Test.Hspec
import Text.Heredoc
import Shared
import Day7.Parser
import Day7.Interpreter
import qualified Data.Map as Map
inputPart1 :: String
inputPart1 = [str|$ cd /
|$ ls
|dir a
|14848514 b.txt
|8504156 c.dat
|dir d
|$ cd a
|$ ls
|dir e
|29116 f
|2557 g
|62596 h.lst
|$ cd e
|$ ls
|584 i
|$ cd ..
|$ cd ..
|$ cd d
|$ ls
|4060174 j
|8033020 d.log
|5626152 d.ext
|7214296 k
|]
cdTerm :: [TerminalCommand]
cdTerm = forceRight $ parseTerminalLines
[str|$ cd foo
|$ ls
|23 f
|34 f2
|dir d
|$ cd ..
|]
cdOutTerm :: [TerminalCommand]
cdOutTerm = forceRight $ parseTerminalLines
[str|$ cd foo
|$ ls
|42 f
|$ cd ..
|$ cd bar
|$ ls
|100 baba
|$ cd x
|$ cd /
|$ ls
|23 f
|dir foo
|dir bar
|]
cdOutParsed :: [TerminalCommand]
cdOutParsed = [
In "foo",
Listing [FileListing "f" 42],
Out,
In "bar",
Listing [FileListing "baba" 100],
In "x",
Root,
Listing [FileListing "f" 23, DirListing "foo", DirListing "bar"]
]
spec :: Spec
spec =
describe "Day7" $ do
describe "Part1" $ do
describe "parser" $ do
it "parses an ls command" $ do
parseTerminalLines "$ ls\n" `shouldBe` Right [Listing []]
it "parses a cd up command" $ do
parseTerminalLines "$ cd ..\n" `shouldBe` Right [Out]
it "parses a cd root command" $ do
parseTerminalLines "$ cd /\n" `shouldBe` Right [Root]
it "parses a cd in command" $ do
parseTerminalLines "$ cd dirname\n" `shouldBe` Right [In "dirname"]
it "parses a file listing line" $ do
parseTerminalLines "$ ls\n1234 f\n$ cd foo\n" `shouldBe` Right [Listing [FileListing "f" 1234], In "foo"]
it "parses a larger shell log" $ do
cdOutTerm `shouldBe` cdOutParsed
describe "tree" $ do
it "reads a listing" $ do
buildTree [Listing [FileListing "f" 123]] `shouldBe`
mkdir { files = Map.singleton "f" 123, isRoot = True }
it "changes dir" $ do
buildTree cdTerm `shouldBe`
mkdir {
sub = Map.fromList [
("foo", mkdir { files = Map.fromList [("f", 23), ("f2", 34)] })
],
files = Map.empty,
isRoot = True
}
it "changes dir outwards" $ do
buildTree cdOutTerm `shouldBe`
mkdir {
sub = Map.fromList [
("foo", mkdir { files = Map.fromList [("f", 42)] } ),
("bar", mkdir {
sub = Map.fromList [("x", mkdir)],
files = Map.fromList [("baba", 100)]
} )
],
files = Map.fromList [("f", 23)],
isRoot = True
}
it "calculates size of directories" $ do
calculateSize mkdir { files = Map.fromList [("f", 23), ("f2", 34)] }
`shouldBe` 23 + 34
calculateSize mkdir {
sub = Map.fromList [ ("d", mkdir { files = Map.fromList [("f", 23), ("f2", 34)] })] }
`shouldBe` 23 + 34
it "sums stuff up" $ do
let parsed = forceRight $ parseTerminalLines inputPart1
let tree = buildTree parsed
let filtered = filterDirectories (<= 100000) tree
let summed = sum filtered
summed `shouldBe` 95437

64
test/Day8Spec.hs Normal file
View File

@@ -0,0 +1,64 @@
{-# LANGUAGE QuasiQuotes #-}
module Day8Spec (spec) where
import Test.Hspec
import Text.Heredoc
import Control.Arrow ((>>>))
import qualified Data.Matrix as M
import qualified Data.Vector as V
import Day8
testInput :: String
testInput = [str|30373
|25512
|65332
|33549
|35390
|]
testVisibility :: Visibillity
testVisibility = M.fromList 5 5
[x,x,x,x,x,
x,x,x,o,x,
x,x,o,x,x,
x,o,x,o,x,
x,x,x,x,x]
where
x = True
o = False
smallForest :: String
smallForest = [str|1234
|5678
|9012
|]
parsedSmallForest :: Forest
parsedSmallForest = M.fromList 3 4 $ [1..9] ++ [0,1,2]
spec :: Spec
spec =
describe "Day8" $ do
describe "Part1" $ do
it "parses a forest" $ do
parseForest smallForest `shouldBe` parsedSmallForest
it "checks visibility" $ do
let forest = parseForest testInput
checkVisibility forest `shouldBe` testVisibility
it "counts visible things" $ do
let v = parseForest >>>
checkVisibility >>>
countVisible $ testInput
v `shouldBe` 21
describe "Part2" $ do
it "calculates viewing distance from height" $ do
viewingDistance 5 (V.fromList [3]) `shouldBe` 1
viewingDistance 5 (V.fromList [5,2]) `shouldBe` 1
viewingDistance 5 (V.fromList [1,2]) `shouldBe` 2
viewingDistance 5 (V.fromList [3,5,3]) `shouldBe` 2
it "calculates the scenic score" $ do
let s = parseForest >>>
findMaxScenicScore $ testInput
s `shouldBe` 8

102
test/Day9Spec.hs Normal file
View File

@@ -0,0 +1,102 @@
{-# LANGUAGE QuasiQuotes #-}
module Day9Spec (spec) where
import Control.Arrow ((>>>))
import Day9
import Test.Hspec
import Text.Heredoc
import Data.List (sort)
testInput :: String
testInput =
[str|R 4
|U 4
|L 3
|D 1
|R 4
|D 1
|L 5
|R 2
|]
expectedPositions :: [(Int, Int)]
expectedPositions = sort [
(2,4),(3,4),
(3,3),(4,3),
(1,2),(2,2),(3,2),(4,2),
(4,1),
(0,0),(1,0),(2,0),(3,0)
]
testInput2 :: String
testInput2 = [str|R 5
|U 8
|L 8
|D 3
|R 17
|D 10
|L 25
|U 20
|]
spec :: Spec
spec =
describe "Day9" $ do
describe "Part1" $ do
it "parses the instructions" $ do
parseMovements testInput
`shouldBe` [ right 4,
up 4,
left 3,
down 1,
right 4,
down 1,
left 5,
right 2
]
it "moves a step" $ do
step (0, 0) (Step (1, 1)) `shouldBe` (1, 1)
step (0, 0) (Step (1, 0)) `shouldBe` (1, 0)
step (1, 0) (Step (-1, 0)) `shouldBe` (0, 0)
step (0, 1) (Step (0, -1)) `shouldBe` (0, 0)
it "normalizes movement" $ do
normalizeMovement still `shouldBe` []
normalizeMovement (left 2) `shouldBe` [Step (-1, 0),Step (-1, 0)]
normalizeMovement (right 1) `shouldBe` [Step (1, 0)]
normalizeMovement (up 1) `shouldBe` [Step (0, 1)]
normalizeMovement (down 2) `shouldBe` [Step (0, -1), Step (0, -1)]
it "follows the head" $ do
follow (1, 0) (0, 0) `shouldBe` Step (0, 0)
follow (0, 1) (0, 0) `shouldBe` Step (0, 0)
follow (1, 1) (0, 0) `shouldBe` Step (0, 0)
follow (2, 1) (0, 0) `shouldBe` Step (1, 1)
follow (1, 2) (0, 0) `shouldBe` Step (1, 1)
follow (2, 2) (0, 0) `shouldBe` Step (1, 1)
follow (4, 2) (3, 0) `shouldBe` Step (1, 1)
it "moves around and records tail position" $ do
let positions = parseMovements
>>> concatMap normalizeMovement
>>> recordPositions
>>> fst
>>> sort
$ testInput
length positions `shouldBe` 13
positions `shouldBe` expectedPositions
it "solves the riddle" $ do
input <- readFile "ressources/day09-input"
let headSteps = parseMovements >>> concatMap normalizeMovement $ input
let allTails = buildTails headSteps
let positions = (!! 1) >>> fst >>> length $ allTails
positions `shouldBe` 5878
it "solves example of part 2" $ do
let headSteps = parseMovements >>> concatMap normalizeMovement $ testInput2
let allTails = buildTails headSteps
let tail9Positions = fst $ allTails !! 9
length tail9Positions `shouldBe` 36
it "solves the riddle part 2" $ do
input <- readFile "ressources/day09-input"
let headSteps = parseMovements >>> concatMap normalizeMovement $ input
let allTails = buildTails headSteps
let positions = (!! 9) >>> fst >>> length $ allTails
positions `shouldBe` 2405