Compare commits

..

2 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
10 changed files with 947 additions and 1 deletions

View File

@@ -30,6 +30,8 @@ library
Day10 Day10
Day11 Day11
Day11.Parser Day11.Parser
Day12
Day13
Day2 Day2
Day2.Part1 Day2.Part1
Day2.Part2 Day2.Part2
@@ -67,10 +69,12 @@ library
, hspec , hspec
, hspec-megaparsec , hspec-megaparsec
, lens , lens
, linear
, matrix , matrix
, megaparsec , megaparsec
, mtl , mtl
, parsec , parsec
, search-algorithms
, sort , sort
, split , split
, text , text
@@ -94,10 +98,12 @@ executable aoc2022-exe
, hspec , hspec
, hspec-megaparsec , hspec-megaparsec
, lens , lens
, linear
, matrix , matrix
, megaparsec , megaparsec
, mtl , mtl
, parsec , parsec
, search-algorithms
, sort , sort
, split , split
, text , text
@@ -111,6 +117,8 @@ test-suite aoc2022-test
other-modules: other-modules:
Day10Spec Day10Spec
Day11Spec Day11Spec
Day12Spec
Day13Spec
Day1Spec Day1Spec
Day2Spec Day2Spec
Day3Spec Day3Spec
@@ -133,10 +141,12 @@ test-suite aoc2022-test
, hspec , hspec
, hspec-megaparsec , hspec-megaparsec
, lens , lens
, linear
, matrix , matrix
, megaparsec , megaparsec
, mtl , mtl
, parsec , parsec
, search-algorithms
, sort , sort
, split , split
, text , text

View File

@@ -37,6 +37,8 @@ dependencies:
- hspec-megaparsec - hspec-megaparsec
- mtl - mtl
- sort - sort
- search-algorithms
- linear
ghc-options: ghc-options:
- -Wall - -Wall

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

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

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

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]