Compare commits

..

4 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
17 changed files with 1696 additions and 1 deletions

View File

@@ -27,6 +27,11 @@ library
exposed-modules: exposed-modules:
Day1 Day1
Day1.Internal Day1.Internal
Day10
Day11
Day11.Parser
Day12
Day13
Day2 Day2
Day2.Part1 Day2.Part1
Day2.Part2 Day2.Part2
@@ -62,10 +67,15 @@ library
, containers , containers
, heredoc , heredoc
, hspec , hspec
, hspec-megaparsec
, lens , lens
, linear
, matrix , matrix
, megaparsec , megaparsec
, mtl
, parsec , parsec
, search-algorithms
, sort
, split , split
, text , text
, transformers , transformers
@@ -86,10 +96,15 @@ executable aoc2022-exe
, containers , containers
, heredoc , heredoc
, hspec , hspec
, hspec-megaparsec
, lens , lens
, linear
, matrix , matrix
, megaparsec , megaparsec
, mtl
, parsec , parsec
, search-algorithms
, sort
, split , split
, text , text
, transformers , transformers
@@ -100,6 +115,10 @@ test-suite aoc2022-test
type: exitcode-stdio-1.0 type: exitcode-stdio-1.0
main-is: Spec.hs main-is: Spec.hs
other-modules: other-modules:
Day10Spec
Day11Spec
Day12Spec
Day13Spec
Day1Spec Day1Spec
Day2Spec Day2Spec
Day3Spec Day3Spec
@@ -120,10 +139,15 @@ test-suite aoc2022-test
, containers , containers
, heredoc , heredoc
, hspec , hspec
, hspec-megaparsec
, lens , lens
, linear
, matrix , matrix
, megaparsec , megaparsec
, mtl
, parsec , parsec
, search-algorithms
, sort
, split , split
, text , text
, transformers , transformers

View File

@@ -34,6 +34,11 @@ dependencies:
- vector - vector
- megaparsec - megaparsec
- transformers - transformers
- hspec-megaparsec
- mtl
- sort
- search-algorithms
- linear
ghc-options: ghc-options:
- -Wall - -Wall

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))

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))

View File

@@ -11,9 +11,13 @@ import Day6 (day6)
import Day7 (day7) import Day7 (day7)
import Day8 (day8) import Day8 (day8)
import Day9 (day9) import Day9 (day9)
import Day10 (day10)
import Day11 (day11)
import Day12 (day12)
import Day13 (day13)
days :: [IO ()] days :: [IO ()]
days = [day1, day2, day3, day4, day5, day6, day7, day8, day9] days = [day1, day2, day3, day4, day5, day6, day7, day8, day9, day10, day11, day12, day13]
sep :: IO () sep :: IO ()
sep = putStrLn "---------" sep = putStrLn "---------"

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]