diff --git a/aoc2022.cabal b/aoc2022.cabal index 95a7735..73754c3 100644 --- a/aoc2022.cabal +++ b/aoc2022.cabal @@ -316,4 +316,33 @@ test-suite day12aoctest , pqueue , array ghc-options: -threaded -rtsopts -with-rtsopts=-N + default-language: Haskell2010 + +-- Day 13 + +test-suite day13basictest + type: exitcode-stdio-1.0 + hs-source-dirs: src/day13/test, src/day13 + main-is: Basic.hs + other-modules: + Day13Lib + build-depends: base + , HUnit + , parsec + , split + ghc-options: -threaded -rtsopts -with-rtsopts=-N + default-language: Haskell2010 + + +test-suite day13aoctest + type: exitcode-stdio-1.0 + hs-source-dirs: src/day13/test, src/day13 + main-is: AoCTest.hs + other-modules: + Day13Lib + build-depends: base + , HUnit + , parsec + , split + ghc-options: -threaded -rtsopts -with-rtsopts=-N default-language: Haskell2010 \ No newline at end of file diff --git a/data/input130.txt b/data/input130.txt new file mode 100644 index 0000000..6439c56 --- /dev/null +++ b/data/input130.txt @@ -0,0 +1,23 @@ +[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] \ No newline at end of file diff --git a/data/input131.txt b/data/input131.txt new file mode 100644 index 0000000..84cd264 --- /dev/null +++ b/data/input131.txt @@ -0,0 +1,449 @@ +[[[[2]],[2,[3],[9,3],10],8],[[9,[5,7,5,5],6,8],[[],7,7,2]],[[]]] +[[[0,[5,6,5],[0,4,1]],[],[3],[]],[5,0,1],[1,3,6,[1,[7,4]],10],[]] + +[[[],[[1,1],9]],[],[[10,[1,6,3,8,6]],8,[2],10]] +[[[6,[2],6,5,[4,10,5,8,9]],[3,[10,4,0],1]],[7,[[2,10,7,9,3],[10,6],2,6],[7,[1],[3,5],[3,8,5,8,2],[]],2],[9],[[9,[0],[0,6,3,7],2,6],[1,1],4,2],[]] + +[[[[8,0],8],4,[[4,8,8,10],1,[3],4]],[2],[]] +[[7,[0,[1,0],3,[2,7,1,3,8]],[6,0,4,0],6,6]] + +[[[[5,9],[4,9,2,10,5],0,[7,9,3]]],[3,[6],[4,[5,4,6],[5,4,0,5]],[[5,5,7],[10,6,5,8],[9,0,6,3,1],2],[9,[1,8,3,5,10],[0,5],3]],[6,8,[[5,9],0,5,[7]]],[[]],[[9,[],[1,8,8,0,4],[0,4,1]],0,[[],9],[]]] +[[10],[[[],[3],4],[6]],[[10,5,[],[],5]]] + +[[[3,8],[0,8,[],6]]] +[[],[[6],6,[5]]] + +[[0,9,4,3],[[[4,5,4]]]] +[[0,[[9,0,5],6],[3,3,[10,0,1],3,4]],[0],[2,2,5,3],[[6],9,0,8,[[9,6,4]]],[6]] + +[[[[5,2,5],10,6,1,8],1,[[],3,[8],[9,1,1,4,1]],[]],[2,[[8,6,1],[3]],[[],[9,9]]]] +[[[5,8],2]] + +[[[0,[8,2,6],[5,7,1],[10,3,7]],7,[0,9,8],[1,8],[]],[[],[9]],[[1,[9],10,8,7],[],2,[[4,5,4,10],9],8],[[[],3,3]],[[],[[],[7,10,3,5],1,[0]]]] +[[2,[3,9,[4,1,10],3,[]],7,8]] + +[[],[5,[[9,2,5,1,8],[],9,[7]]]] +[[[9,10,[3,10,10,8,2],2],8,[[3],8,[2,2,1,3]]]] + +[[2,7,[6,3],[]]] +[[[5,8],8,[],[1,[7,8,3,8,4]],9],[[],1,[[2,7],1,[8,10,6,9,5]],10,[[],7,[]]],[],[10,10,4,0,6]] + +[[[[3,0,0,6],[1,3,1,0,3],[8],6,5]],[2,8,[8]],[9,[[5,8],9,[0,2],1,8],[]],[10,1,[0,[],9]]] +[[4,[[10,7,10],4,[]],[[1,7]],[[],8,[10,10],[8,4],[2,5,4,5,0]]],[[[5,9,2,7],10,3],[],8,[1],[[0,3,9,8],[],7,[],9]],[10,5,1],[8,[2,3,[2,9,1,4,3]],0],[[],5,[5,[8,8,2],10,2]]] + +[[],[6,[4,[9],1],[7,0]],[1,[],[[5,7]],[7]]] +[[[5,[8,5,2,7,5]],[[3,6,9],[6,7],7]]] + +[[2,0]] +[[[7,2,[],1,2]],[],[[],2,[[0,6,0,6,8]]]] + +[[0,2,[],7]] +[[4],[],[7],[9,[[4,7,5],9,6,3,[7]],4,[]],[7,1,[4],[[7],[9,7,10,1],[1,9]],3]] + +[[[[0,4,5,7],9,2],8,[5],4],[[10,3],[[4,10],[5,3,5,6],4],[[8],2,[4,0,2,8],[7,1,4,2,3],[9,3]],[0,[5,6,7],10,[0,3],[9,6,7,9]],[5,4,[2,10,7,10,7],6]],[[],2],[[8,1,8]],[[[],5,7,0]]] +[[0,[[],3,[10,10,3,8],1,4],6,[],1],[[[],7],[],[10,3,[],[9],[2,4,4,10]],5,6]] + +[[[],[],[[0]]],[[2]],[[1,5,3,[0,5],[6]],10,1,[[],[9,2,8],[2,6,0,6],7],[[6,6],8]]] +[[[2,[3,2,10],[3,3],3],10,[],[[],[6,7,6,5],5,7,[3,6]]]] + +[[],[[[4,0,3,2],0,[8],1,3]]] +[[6],[],[[[7,10,0,1],[0,8],5,[9,0,9,3],[9,8,9,5,7]],[],[[],[9],5,7,[5,0,8]]],[[[6,6,5,5],6,[2,2],0],[3,[10,6,3,4,9]],9,8],[]] + +[[[],1,3],[[[6,8,3,6,4],8,2,0],9]] +[[],[8,[]],[[[10],[9,8,5,7],8]],[[[1,5,4],4,[9,6,10,5],0],[[7,5,7,0],6],1,9]] + +[[1],[[7,[]],9],[[],0]] +[[[[9],7,4],1,[],1,6],[8,3,5,[],[[3],8,[4,3,3,3,3]]],[5,[2,[5],[8],10,[7,5]],[9,[3,2,1],6],8,7]] + +[[[],[],0,9],[[0,[6],9,8,0],[[],6,3,[],0]],[[10,4],[[]],[[6,6,0]],6,[[2,1]]],[[],8,[[2,5,0,10],[8,10,4,6,4],9,[1],9],7,[[4,7],2,2,7,3]]] +[[1],[8,0,[8,[10],[],0,6],7,5],[],[[],[3,[8,0,4,7,9],4,[1,3,2],[7,3,0,8]],[[6],[]],4,[[3,7,7,9,2],1,6,1]]] + +[[[[0],3,7,1],[0,6,[6],[3,9,7,8]],3,2],[],[[],[10,[10],10,1]],[[[9],[0,4,7,8],3,[10]],6,4],[5,4]] +[[[1,3,[8,2,1,10,6],0,6],7],[7,9,7,2],[]] + +[[[[5,6,3,5],3,[10,4,8,6]],4,1,9,0],[[4,9,10,[5]]],[4]] +[[0,[1,[7]],[[],10,3,[5,6,3],[1,6,6,3,6]],[[]]],[[[],[7]],[9,9,[10,1,5,10],[]],[[0,9,9,5,9],10,4,[10,0,8]],[[]]]] + +[[],[],[10],[[5,6,8]],[[[7,5],[7,8,2]],3,5,4,[9,[1,0,8,7],[2],9]]] +[[],[[6],4,9,6],[[1,[4],2],7,1,[[5,3,5,0],10,6,9]],[]] + +[7,6,8,4,7] +[7,6,8,4] + +[[6,[6],4,[[],[1,9],3,0],10],[[[],[9,6,2]],[[4,4],9]],[]] +[[3,2,4,6,[1,3,9,10,[8,3,9]]],[3,[7,[7,8,2,6],1,[1,5,1]],4],[[[4],9,8],[[10],5,[10,10,4,3],4,5],10,[[2,10,3,9],[10],10,[5,1,10,6,9]]],[],[4,0,[]]] + +[[5,[[5,0,0,9]],[8,[5],4]],[3,[[2,2]],[],4,[[9,2,8,1,8],[5,3,1,8],3]],[[[1,7,3,2],9],[0]]] +[[[[1,2,0,1],6,[5,7],[9,7],1],[9,3],[1,[]],10]] + +[[10,9,[[5,2,7,9],[4,2,9,6,2]],3],[]] +[[],[[4,7],[[7,3],10,2],3,8],[[2,1,1,9],[7],3,0,10],[8,5,0]] + +[[[],[[4,1],10,[5]],1,[8,[6,8,8],[9,0,0,2],[5,8,3]]],[],[2,[[10,8],[1,1],8,[6,7,2],0],[],9,3],[[[6,3,2,4,7]],10,0]] +[[],[4,[[5,5,3,9],5,9,[],[2,3]]]] + +[[[1,10,[6,6,5],10]],[10,6,[10,5,10]],[[],[0,6,[5,0],[]],9,[],0],[1,3,9]] +[[],[[1,2,6,[4]],10,5,[],2],[]] + +[[[8,[8,10],[1,5,4,3],1]],[[4,[4,7,8,2,0],[],[7,0,2,3,3]],10,5],[[[3,9,6,1,6],9,6],[2,10],6,[9,7,2,[3,4,4]],3],[],[8,4]] +[[2,2,[]],[[[2],9,[2,3,2],2],[[4,0,3],[4,3,0],0,0]]] + +[[10,6,10,6]] +[[[1]]] + +[[0,6,[6]],[9,[7,4],[[3],[9,6,10,4,3],0,[],[]]],[[0,5,[4,0,8],6,4],[0,[],4,[5,8,8,5]],6,6],[[[8,1,8,8],[2,9],[1],[7],4],0,1],[[],1,4,3]] +[[1],[[[4,8],[],[5,3,10,1,2]],[8,[6,8,5,1],0,[5,0],7]],[4,5],[[5,10],10],[10,8]] + +[[[]],[8],[[[10],9],[[5,5,5,5,6],[3],3,4],6,[],[7,[0,5,4],9,6,3]],[[3,7,4,[3,4],7],[],0,0,[1,10,10]]] +[[10],[7,2,[8,5,[4,10,1,9],[]]]] + +[[[[7,7]],[0,3,8,9,2]],[2,[[6,0],10],[[],2]],[[],10,2,9],[6,9,[10,[9,0],[0,9,3,2],10],8,6],[0]] +[[[8,[7,6]],10,10],[],[],[[2],10,8,2]] + +[[1],[[6,8,10,4,5]],[[3,[9,5],[],[]],7,8],[4,5,[[0,6,1,9],[7,3]],[[7,3,2,7],5,9,2,0]]] +[[[0,0]]] + +[[5],[]] +[[[[0,2,2,8,5],0,[10,7,5,7,9],[10]],10,3,4,3],[[[5],0],4],[10,9,0,9,[[3,10],[3,8,2,5,1],[3,1,2],0,10]]] + +[[8,4],[9],[2,3,[[1,1],[5,6,2,8],3,8],8,6],[3,[[7,2],[4],5,8,[]],3,[],[[8,1,5,9],[7],[],[7,3],10]],[]] +[[[5,[10,8],6,[5,10],[]]],[[]],[5,[[6,3],[],1,[4],3],[6,6,[0,6,4,3,0],[0,10,10,2,8],4]],[5,[[8,1],[2,1,7],0,[9,10,0]],2,[[7,2],[9,3,7,8],[3,10,5,1]]]] + +[[9,7],[[8,[5],1,[2,10,2,4]],2]] +[[0,4,0,10,4],[],[[[1,2,4,9],[5,6,5],[5],3]],[9,6,[[],7,3,[]],8,6],[7,6,3]] + +[[1,8,9,8,1],[8,6,[4,[6,10],[6,0,9,3]],4],[],[[[],2,[],[4]],[[1,1,10,8],10,3,[]]]] +[[9,0],[]] + +[[[[2]],0],[9,[1,10],4,[],[[9,5,9,1],[10,4,0,10]]]] +[[5,[[],[2,9,4,5],7,7],9],[[[8,5,1,2],7,4,[9,1,5,9],[7,5,3,9]],2,[[2],[8]],8,[[5,1,7,10],1]]] + +[[[[1,0,7,6],[]],1,5],[[0,3,[2,8,0,6],6],[],[9,8,[6,7],[3],[0,5,6,3,10]],7],[9],[],[[],6]] +[[1,3,[]],[8,9,9,[[10,5,9,2],[0,1,1,10],[3,9,9,5]]],[8,[[6,5],8,[4],[0,9]]],[[0,2,[2,1,2,2,4],8,8],[[],[9,5,1,10,1]]],[]] + +[[2,5,[[9,9,1,1,4],[4]],0],[6,0],[[[0,9,2,2,10]],[9,[5,0,7],5,[]]],[9,4,[[7,4,6,10],[],[6,1,2,3]],10]] +[[3,10,[1,[7,9],[6,3,7,2,10]],6,[[2,8,8,6]]],[[2,9,[],[8,2],[]]]] + +[[3,[7,[7,4,9],[6,9,2,6],[6,2],[2,6,4,9,7]],4,[]],[[],6,8,3]] +[[[[6,3],10],0,3],[[[3,0],[],[8,1]],[[],6,0,[2,6,6,0]],1]] + +[[[[9,4,0,9,9]]],[],[1],[[[5,10,1,10,9],9,[3],[],[1,5,9]],0,[[10],3,10,10],8]] +[[8,7]] + +[[[[4,3,0,5,9],[6,1,0,10,9]],[8,1],9]] +[[7,2,3],[],[7],[[7,[],[6,4,0]],3,[[5]],[10,[6],[9,8,4],10,[1]],7],[5,9,10]] + +[[1,[5,[8,8]],10],[1,[],[[7,2,10,8],7]],[3,1],[10,[[5,7],[10,1,9,5],10],10],[[1,[]],10,3,[[0,1]]]] +[[[[],[0,6,4,9]],[[],[10,6,2],7,3,[8]],[[2,4,8],6,[7,9,5],10],10,[8,[7,9],8]]] + +[[8,2,[],6,7],[[[8,5,10,2]],[8],4],[[0,8],0,[]],[[[],[],8,[2],[1]]]] +[[3,[[]]]] + +[[5,[[1,4,5,7,0],5,10],7],[0,[],[5,[],[]]],[[5]]] +[[3,[[10],2,[9,7,2,1,6]],[[2,7,2,10],2,6,6,[]]],[1,0,3,[[1,5,5,7,5]]],[[[0,0,7,1]]]] + +[[],[],[3],[]] +[[[[8,8,5,1,9]],5,1,[[0,7],[5,5,3,9],1,0]]] + +[[[[5],4],8]] +[[[[10,1,10,1],[8,8,6,10,2]],[]],[],[[]],[[[0,5,9],[8,3,9],[],[2],10]]] + +[[3,[1],[[1,7,8,7,0]],5,[8,8,5,3]],[0,0,[[5],[4,0,6]]]] +[[1,[[],9],0,[1],5],[[5,[9],[9,7,6,0,9],2,[]],[[6,2]],[]]] + +[[[7]],[[3],4,[[0,2,8,10,7]],7,3]] +[[0,9,7],[5,[],[]]] + +[[[[0,2,4,5,7],[5,4,0],[5],2],9,[[7,9,5],[0],0,9],4,6],[[],10,[]]] +[[6],[],[[6,[1,8,5,3]],[2,[1,10,3,4,7],10,0,7]],[1,[10,5,[1,1],[2,10,3,0,8]],[[0,10,0,10,9],[],[6,2,8]]],[[[9,4]]]] + +[[[],0,0,10],[[9,1,[0,8,3,0]],6]] +[[6,10,[[2,6],1,[]]],[[],4]] + +[[[6]],[[[9]],[[9,5,3,4],0],0,1,3],[5,0,[8,6,10,7,3]],[[2,[5,1,2],[2,6,1]],0,8]] +[[0],[],[[3],[10,[],4,[],[6,6,5]],8,3,3]] + +[[],[10,9],[2,[[6,1,5],5],9,[8,4,1,2,[10,8]],0],[[],5,[[]],[],5],[[[]],[]]] +[[[1,[9],2]],[[[6,0,10,1,0],10,[5,4,8,4,6],5]],[]] + +[[[0,[1,8,2,1],[5]],[],2,4],[[10,7],3,[6]],[5,[[7,2],[4,1,9,9],10,7,[3,5]],2,2]] +[[3,[[]],9,[],[[],[8],[],[4]]]] + +[[[],[5,3],8]] +[[[[],[8,4,5,3],5,9]],[[[1],[3,9,9],[7,8,3],3],1,[[10,4,3,10,0],[8],[],[0,2],2],[1,[1,10,8]],[8,1,7,[6,5,3],[7]]]] + +[[[[8],2],8,[4,4,[1,8],[6],4]],[2,[2,4,[9,5,3,9]],7,[[2,6],[5,10,0,3,2]]],[[[],[],9,[9,2,3,0,9]],[[0,7,3],[],9],[],[2,[0,2],[9],5,10]],[[3,0,7,[],5],[[10],6],7,[],[[9,5,0],7,1,0,[2,6]]],[]] +[[],[],[6,[],5,9],[0],[[[],[0],[0],[8,5,7,5]],4,[],[[10],0,9,8,4],4]] + +[[[[5,0,10]]],[0,7]] +[[[],[[8,9,3,9],[8,1,5,2,8],[5,0,1,0],[2,0]],[7,[7,10,9,6],[0],[4,9,0],[7]],[[],[1,6,2,9],1]],[[9,8,[6,2,2,7,7],[4]],4],[[[4,9,5,5,5],5,0,[]],1,8,[[0],5]],[[[6,10],10,0,[4,5,6],2],[],[[0,8],7,1,[0,6,0],9],[[5,3,3],[2,9],9,[6,8],[5,6,2]],0],[]] + +[[10,7,[],0],[[[10,8,8,10,2],10,0,[3,3]],6,4],[[[7,3,3]],[],[[4,10,4]],1,3],[[[0],[7]],2],[[7,4],7]] +[[[[2,4,7,2],8,1,[8,7,5]]],[[],[1,[1,1,8,2],[6,1,4,3]],[3,10,9],10],[[[],[9,8,5,3,6],8,8],7,[[1,0,9,2,0],7,6],[[3,10,2,9,6],5]]] + +[[],[3,[9],[[2,3,6,6],[],1,4,7]],[[2,1]]] +[[[[],[2,10,6,3],5,[]],[[]]],[1,0,3],[[[10,2,1]],[4,10,[8,10,8]]]] + +[[6,[[0,6,3,2]],2,[[9,7],0,[3,7,9,5],[]]],[[[7],8],[[10],[3],2]],[8,6,[1],7,10],[[9,[2,9,5,2]],5,[[5,1,5,8,6],9,[],10],8,1]] +[[[[5,10,5],5,5],0,[]],[3,[],[],[2,1,[],[3,5,9]],[0,[0,7]]]] + +[[7,[[7]],3,[[9,0,8,5],[9,9,10],[3,2,1,8],[10,3]],8]] +[[10,[[2,7,2,0],0],6,8,[[6,5,2,6,10],[1,2,7,4],3,5]],[4,[5,8]]] + +[[5,[],[[1,5,3]],10,9],[[],[],[],4],[]] +[[],[[10,0,7,10],[1,7,7,2,7],[],0,[[8,3],[10,6,9,2,6],[0,5,5,10,7],[4,5],3]]] + +[[],[[4],6,[[1]]],[10,9,[[4,9,9,2,6],[3,1],[7,5,0],[7,8,7,3,7],3],[9,[3,7,0,9],9,5,5],3],[[],7,[5]],[9,[],[3,[8,2,10]]]] +[[],[6,[9,10,8,[6,0,5],[9,8,8]],[]]] + +[[[2,[8,2,3,1,0]],[]],[[4,0,[8],[8,7],5]],[1,0],[8,6,3],[0,[6,[8,6,9,2,6],4],[[0],6,[]],[]]] +[[],[[1,[5,9],[3,9],8,[10,7,4,4]],6,5,[[5,4]]],[[0,[4],[7,8,1,0,7]],[4,[1,0,10,0,7],[3,3,0,5],7],8,[[9,5,7,2,8],[6]],[10,1,[6,7]]]] + +[[[3,[8,3,10,4,2],4,[1,10,1],2],7,[2,[7,1,7,9]]],[[[8,1,5,10,0]],9,0,[],[[0,6,4],[3,4,2,0,1],5]],[7],[],[[[3,10,7],[0,7],[4,5,6,4,4],[]],6,[9,[0,3,6]],[[],[],[0],[2,10,9,4,5],5]]] +[[0,4,[4,[],4,10,3],6,[8]]] + +[[4],[[5,4,6],[]]] +[[[0,9,[]],10,10],[[7,5,4],6,0,[5,[2,7]],[[3],[1,2,6,5],10]],[9,7],[9,0]] + +[[[[],2,4,[7,1,2,10]]],[[[6]],[[5,8,1,4,0],[7,2,9],1],10,2,[4,4,8]]] +[[[3],[7,2],2,[7,[9,6,4,2],[10]]],[[2,[8,9,0,4]],[]],[9]] + +[[],[8]] +[[]] + +[[[[9,0,6,10]]]] +[[[[2,0,5],[1,9,1,5],[],[5,4]],[[9]],[[],6,5,3,4],9,[9,0,2]],[10,9,[1,5,4]]] + +[[],[],[7,[[5,2,7,5],[9,2,1,0,4]],[[5,1,6,6,7],[0,1,7,3]],6,[]]] +[[],[2,[[7,5,7],5,[6,1,5],[1,8,8,0]],1,0],[2,[2,[]],7,[2,[3,2,1,0,3]],9],[6],[[5],[[10,4,10,4],5,6,[4,2,9,7,5],[0,5]]]] + +[[3,7,[[8,1,6,8,4]],[3,[0,10,9,3]]],[[[8],[9,1],[5,8,1,0]],[],[[2],7,[5,0,7],2,2],7],[10,5]] +[[[3,[]],2,[[0,9,4,0,2],[5],5],8,2],[[]],[2,5,2,3,4]] + +[[4,[[1,9,1,6,3],7,0,4],[]],[[0,3,1,[4]]],[[6,[2,0],[2],[8,7,8,9,9]]],[10,1],[[[6,8],0,[5]]]] +[[0,[9,[8,9,2,6],7,0],3],[[[0,2,7,10]],[]]] + +[[3,3,10,7,5],[]] +[[7,8,5,5],[2,10,7,[[9,3,3],[8,7,2,3,6],[]],10],[[5,[6,1,4,8,6],6,7],5,5,0],[2,[[2,0],8,2],2]] + +[[],[[[3,2,6],4],[9],[0,10,[6],[6,6],7],8,8]] +[[],[[[5,3,7,9],[2,10,5,5,9]],[5],[4,[]],3,9],[[[1,7,6,5],[],9,[1,7],[1,10,5]],9,3,[0,5,[2,9,3,1,10],4,[2,0,3,5]]]] + +[[],[9,[1,1],[0,10],5,7],[6,[[7,8,8],[1,5],[8,9],0,1]],[5]] +[[],[[0,[0,0,5,0],6,0],1,2,[1,[6],7,2,0],[[6,3,7,5],[0,0,7,10]]]] + +[[8],[4],[[0,[7],1,1,[10,9,5]]],[],[]] +[[8,0,[7,10,7,[]]],[[3,[4],[6,5,3],2],1,[[2],[8,3],[2,0,1,0,1],[7,9,9,4,9]]]] + +[[[]],[[[3,4,1],[10,0,2,3,0],[],10,[9]]],[4]] +[[[[1,7,3,2,1],[0,7,9,5,4],6],[]],[[4,4,8,[2,6,8]],[6,[1],9],[[8,8,9,10,2],[6,0,8],[],3,8]],[6],[[[8],5],[0],[[4,4,10,1],4,[6,2,6,6,8],7,[2]],[6,5,[7],[3,8,3,10,9],9],[[8],10,2,1,[3,8,6,7]]],[]] + +[[[[9,6,10,1],[8],9],[7,[7,1,7,1],5],0,[[],1,[6],[8]],[4,[1],[4,0,3]]],[10]] +[[5,2,[]]] + +[[],[[],1],[[[5]],[[4,4,3],[10],4,3,[9,4,7,3,8]],1,[[3,0,9,5],3,[6,1,3],8,1],[[8,9,9,5,3],[4],[],[2,3,4],[1,10,8,7,7]]],[[[7,2,2,4],[5,3,2,8],3,[6,10,8,10]]]] +[[[],0],[[],7,[[4,5,4],[9,4],[0]],[[7,2,9],[10,2,8,8,5],2,[4,10,8],[7,0,8,8,3]],[]],[3,10],[2],[[6,3,[4,3]]]] + +[[[3,0],[5,[],3,[],8]],[]] +[[[3,[6],[3],6,[9]],10,8],[0,[[7,9,10],7,[]],9,2],[[[8,0,8,9,0],[0],[2,6,7]],[5,1,0],[[4,5,1,9,10],[7,3,9,3,1]],1,2],[0,[[],[2],5],3,1,2]] + +[[[]],[6,[6,[4,7,1],[7,6,8],2,1],1]] +[[10,[],[[],[7,9],2]],[[3,[5,4],7],1,1,[[3,8],9,2,[3,8,9,1,10]]]] + +[[],[],[9,10],[[[4,10,9,9,10],0,0],2,1,3,8],[[[2,4],6],4,10]] +[[[3]],[10,[6]],[],[[2,[5],9,5,7],[[2,1],[5],9],10,8,[1,9,[],[10,1,2,0,2],0]],[]] + +[[],[[1,2,9,3],[9,9,7,[6,2,7,2,1],[6,8,6,6,2]]],[10,0],[[1,8,6,5],7,[],4,[[],8,[1]]]] +[[1,[7],[[],7,[3,4,2,7,3]]],[9,[5,8],[7,9],1],[4,[4,6],[],8,3],[]] + +[[4,3,4],[[],[[6,3,3,6],3,[]],[],6,[[2],[3,6,10,0,2],[9,5,0],9,2]],[9,[8],2,[[2,0,3],7,9,[10,0,5,5,4],9],8],[10],[5]] +[[7,[8,[7],[6,6,4,3],[],[]],[0,7,[7,3,9,0,3],8],[],[[2,7,10],0,5,[4,9,9,9]]],[[5,[0,7,7,10],[5,9],[3,5,1]],6,1]] + +[[[8,[4,3,2,1],[9,3,1,8,2],[0,8]]],[[6,[4]],[[4],[5],[4,1,4,9]],[10,[6,5,3,5],3],[[7,4],4,[],[7,3,9,2,0]],[6,0,7,[4,4,7],7]],[[[4,4,2,10],[1,9,2,10,8],3,[10,4,2,9,9],[7,2,7,1,8]],7,[10,[6,6]],[[10],3],[]],[[[],3,2,[7,9],[3]],[[],[]],4,1,[]],[[[4,3,5,0],[6,0]],2,[[7,7],7,[1,6,10,1]],[9,9,6,0],[3,8,[5,8,2],6]]] +[[],[2,2,[2,[0,9,7,4,9]]]] + +[[[3],10,[0,3,9,4]],[[],[],[2,[3,3,7,8,2],4,[7]],3,7],[10,5,[[4],[5,0,8,1]],[4,6,9]],[5],[2,8,[6,2,5,[],4],10]] +[[9,2,2],[[[10,8],8,7]],[1,[2,[2],[3,3,2],0,6],[8,[0,6,10]],[[7,8,3,8],9,2],[6,[0,0],2,[1,3,10]]],[10,[1,4,[7],[5]],0,[4]],[]] + +[[8,[[3,7,9]],10,7],[[],[],[[8,2],5,[6,3,8,10,9]]]] +[[1,5,[7,10,[4,8],10,[]],1,[[0,9,3,2,2],[9,10,6,5,2],6]],[],[],[]] + +[[[[6]],9]] +[[1,[6,5],2],[3,[[8,6,6,3],6,[1,4,3,4]]]] + +[[7,[[4,1,6,4,2]],7,[[3,8],[],[4,6,10]]],[7,[[7,4,9,7],5,[6,7,1,3,4],[8,2,10,10]],9,1,2]] +[[3,3],[[7,[10,6,5,5,0]],9,[1,[],0]],[5]] + +[[],[[1,[7,0,5]],[],6,10],[[[5,10,7,2,10],8,[4,5,6,9,1],6,[10,9,2]],[0,[10,2,6],[7],9]]] +[[],[8,2,7,[1,[6],[0,2],3],[]],[0,[2,8,8,7],[],6,3]] + +[[],[[4,5],[1,2,9,2],[1],1],[[],[3,3,7,0,9],[6,[10,8],[8,8,5]],[[4,8,3,1],[7],[4,2],0,9]],[[5,8,[6,10],[8,8,10]],[[7,2],[7,3,3],6,1],10,5,[[],[4,1],[8,0,2,10]]],[]] +[[[],4,[1],8]] + +[[7,2,3],[[3,[10,10,2],[2,7,7,1,0],[0,6]],[2,[3,2,7,3,7],0,10,0],2,[[3,7,0],7,[9,5,0,6],5]],[[[4,8,8,10,2],[4,8,2,1,8],[6],8,4],[],[1,3,8,4],0,[[7,6,5,2],8,[8,0,2],8]],[[9,[9],[2,8,10,2],5,[8,3,0,9]]],[8,[],[5,[0,0,5,9],[4,0,2],[]],0,10]] +[] + +[[[0],[7]],[[7,[]],8,[[2,1,10,3],0,[]],[0,0]],[7,[[3,2,0]],1],[8,[[8],[1,3],[0,8,5,0],[],[0,6]],[[3,0,5],[3,2,2,7],0,5]]] +[[[[],4,6],6,[[3],[9,5,5,0],[4,0,3,1]]],[[4,10,7,[],[1,2,9]],9,[[6,2,5]],1],[[[10,7],[4,3,4,6]],5,[[10,1,9,2,10]],1]] + +[[[7,[6,1],6,[4,2,5,2,5],2],2,[0,[0,8,3,2,1],7]]] +[[[7,0,2],[],[3],9,[6,[4,4],[2,2],[4]]],[[]],[[[],5,2],[1,[6,3,3,6,6]],[[],[5,10,9,7]]],[10,2,0,[[6,6,9]],[9,0,9]]] + +[[[[1,5,2],7,[9,10,7,3,6],9],[9,[],[6,9]],[[],[3]]],[[],[[]],[[0,2],3,[6,5,3,7],2],[6],6],[9,[[7],5],0],[0,1,0,[5,[10,1,9,9,5],[0],[4,2,10,3],[3]],1],[]] +[[[3,1,9,4],[[2,9,5],[9],9,[]],[[],[10,4],5,[3]],[[4,0,1]],[9,4,10,[1],8]],[8,[[8,10],10,[9,4]],[[6],[8,6,9]],[[],4,[0,10,4,3,5],[6,5,3,0,6],[4,8,3,3]]],[0,[0,[],9]],[8,3,7]] + +[[6,[[9,4,8,6],6,7],[[4,7,7,0,4],7,[3,2,9,10],9]]] +[[3,10,5,[]],[]] + +[[3,[[9],[1,5]],[6,3,[9,5,6,10,2],4],[10],4],[[[3,1,7,10],[1,5,9,10,0],[7,10],2],[4,[0]],5,6,[8,[3,5,1],[8,6,5,4],10]]] +[[2,7,1,10],[[],[[3,6],10,4],10,6],[[0,6],[8,1],[[]]],[],[[[],[3,7,6],[5],[2,3,8],5],[5,7]]] + +[[[1,[],[9,1,6,0,6],6,1],1,9,4,4],[[2],[3],7,[[7,7,3]],8],[[9,[8,2,7,9,0],[7,2,8,10]],[[]]]] +[[5,[4,[],[9],6],3,[1,[8]],1],[10,[6,0,[0,1,10,3,8],[9,8,0,4]],0,2,8],[1,3,[]]] + +[[10,0,[10,[8,6]],[9,9,[10,4]]],[3],[[[4,1],[7,5,5,7],3,10,[]]],[4]] +[[0,2,[[4,0,6],[3,0,10,9,0]],[[0,3],8,[7],[0]]],[7,8,6],[],[10,2,[[5,5,2,9]]],[[9,6,5]]] + +[[],[1,9]] +[[[2,10],7,8,[[4,8,6],0,8,[7,5,8],[3,1,10]]],[]] + +[[],[4]] +[[[4,1,6,7],7,2,5]] + +[[],[4,[[2,0,3,10],[],2,10,0],[3,4],[6,[5,9,10,8],[],[]]],[7,7,4]] +[[[[],[5,7,2,5],[10,7],[6,2,9,2],[7,9,10]]],[9,[0,10,6,3,[8,1,1]],[[0],[1],[0,7,7,3,0],[],5]]] + +[[4,10,0,[[7,5,3,9],1,8,4,[]],[[8,3,1],4,[10,1,5],[9],0]],[4,[4],[10,[10,2]],4,9]] +[[[[],[6,3,1,4],2,6,[1]]],[[1,2,8]],[],[3,2,[[1,0,10,1,6],4,8,3,2],[[10,0,3,7,1],[7]]],[[[8,1,6,0],[]],5,[[6,6],[5,6],6],2,6]] + +[[[0,6,[6,2,4,1,5],3]],[[[10,9,0],7,[10,5,0,9,2],[],4],[],5,10,1],[4],[[],[],0,6,2],[]] +[[[0,0,4],1,[10,5,[8,10,5,0,10],10]]] + +[[[[1,1,8],[4,3,10,4],10,[1,6,2,7,1]],[],[[9,2],[6,3,2,6],[2],2,[5,3]]],[5],[10]] +[[[[2,2,4,10],3,10],[[4,9],0,6,3],[[6,3,1,8,10],9,8],7,[[8,1,0,2,5],[4],1,[0,9,1,1,10],[7,0,6,10,1]]],[],[[[3,9],[5,7],[4,2,3,3],[6,7,10,8,8]],6,[6,[2,6],0],[4,2],0],[[[0,9,3,6,10],[6,8,4,8,10],10,4,[8]],[1,[],[10,10,4,7,10],[0,0,9,1]]]] + +[[[[8,6,8],[9,2],8,[6,6],[6,6,4,1,0]],[[5,8,10,3],1,7,3],10],[[0,[1,6,1],[7],[2,0,6]],[],[3,[2],[7,8],[2,10,5,7,10]],[10,[4,5,5]]],[[[5,6,4,10],[],[1]],[[8],[7,7]]]] +[[1],[[[7],[],[8,3],[0,10,4,4],[0,6,2]]],[[3,[10,6,10,8,1]],[3,5,[4,5,9,3],[9,7,5,6]],3,2],[7,[[]],7,4]] + +[0,5,2,6] +[0,5,2,6,9] + +[[[[]]],[8,7,1,[10,9],4]] +[[[6,6],[0,[],0],[6,0,1,10]],[[[9],9,[1,4,10],6],0,[]],[[]],[2,[9],10]] + +[[[[6],[],0,10],[[6,2,7,4,6],[9],6,10],[[10,2],[1,4,2,3],[9,6],0],[],[10,1,10]],[[[1,2,6,10,0],[]],[],10,8,[2,[3,7,10,10],[6,7,6,10],[8,8,0,7,1]]],[[5,4],8,6,[2,[2],0]]] +[[7],[8,2,3]] + +[[[[8,4,4],7,[10,5,10,6],7,[9,2,0,3,4]],[6,0,[6,9,3],9,[]]],[5,7,[[7,10],9,6,[1,10]]],[[[],[4,4,2],6,[8,7,0]],[0,[5]],5,4],[]] +[[[10],0,[6,[2,0,4,6],2,8,8],1]] + +[[],[[2,[],[],8],[[4,6,7],9,[2],[2,1,2,2,1],[3,5]]],[],[[[1,0,9,2,3]],[[2,4,4,3,4],[6]]],[3,2,1,7,4]] +[[[[8],0,2,[9,5,3],9],0],[5,[6,[2,10,7,6],4,8],[7,5,[3,7,2,9,4]],[[6,1,1],[3],4,[0,9,5,10,0],3],5],[1,[0,0,4,6],10]] + +[[[7,[],3,0,10],4,2,[4,7,8,[1],9]]] +[[5,1],[[[0,3,0,10],8,0,7,2],0,[[6,5]]],[[[9,1,0,10],[8],0,[9]],[4,1,[7,2,1,7,8]]],[]] + +[[2,10,[],[],4],[0,[[4,1,8,3,10],2,[8,4,5,7,4]],[]],[],[[],[[3],[3],[],[3,4,1,1],8],10,3,[]],[1,6]] +[[10,[[9],[8],[10],[4,8,3,7,6]]],[[1,[10,7,2]]],[5,[],[[2,6,7],[6,2,2,1,10],3,6,2]],[5,6]] + +[[],[10,[2,[3],[10,10],3,[9,1]],[[8],[1]],[[1,0],7,5,[6,9,1,8],[6,10,1]],[[9,4,4],5,0,[]]],[3,[7,10,7,[5,1,8,5,4],9],2,[0,[1,8,3,1,0],[4,4,3,10],0,7]]] +[[3,8,9,[[0,8,5,2,7],[],6]],[[],1,[[0],6,1,[5,9,3,6],5]],[],[[7,1,[],[5,0],[0,4,6,4]]]] + +[[1,[]],[[7,[7,3,2,1,0]],[3],[4],[6]],[2,8,2,6],[[],[1,10,2,[5,8,0,6,9]],[[5,0]]]] +[[[[10,3,6,0],[8,0,10,1],[5,4,0,10,2],10],7,0],[4,[],4,6],[6,1,[6,0]]] + +[[9,0]] +[[[]]] + +[[7,[3,[3,7,9]],0],[[8,[4,0,10],10],[8,9]],[6,6,7,2],[[[4,4,8,4,2],6],[],[[2],[4,3],10,[2,9,2,0]],7,2]] +[[],[[[2,9,3,4,9],[5,8,9,3],[6],4],2,[[],1,[5,9],7]],[[],9,4],[[9],[[0,3,0,8],[],10,3,8],[[9,2,2,6,7],0,8]]] + +[[[6],[8,[5,4,3,3,5]],[],[[],[8],[4,2,0,1,0],[9,10,10,3]]],[[[8],[1,4,3],2,[7],6],[1,[]],[8,1,9,5,[]],[[5],8]],[[7,7,8,8],[3,[6,10],4],4,[2,3],[]],[[],10]] +[[3],[[[3,7,1,1],8,9,[9,6,7],4],7],[1,[5,[3],[0,0,0,3,3]],9,4],[[],[[5,6,4,2],[3,10,8,6]],[],1]] + +[[2,[[2,5,6,6,8],[],[9,2,8,10,10],8],[],3,[[],10,6,[2]]],[[]]] +[[9,7,10,2,[[4,8,5,8],[2,4,6]]],[6],[[9,6],[]],[]] + +[[],[[0,8,1],[[5],[5,0,4]],[],[[6,10,1,1],3]],[[8,[3,8,7],[0,4]]],[[[4,2,2],[],[0]],5],[[],[[7,0,6,1,8],[3,10]],7]] +[[4,[5],4,0,3],[],[[[3,4,9,7,4],2,[3,8,5],7,[8,0,2,4,9]]],[9,[[6,8,8,10,9],[10],[9],[5],1],10],[2]] + +[[1],[0],[[8]],[1,6,2],[8,[3,3,[3],[],2],1,5]] +[[10,8,[6,[10,7,1,2],5],7],[[4,5],[[2,8],[1,5,4,7]]],[],[6,7,2,9]] + +[[[],[]],[8],[[[5,5],0],[[0,3,1,7],9,[8,8,7,3]],0,[]]] +[[[6],4,8,[[5]],1]] + +[[[3,6,[],[3,3,4,4]],[[6],7,9,[3,6,6]],[8,7,[4,9,7,8],[6]]],[]] +[[[[2],[6,5,9,3,3],4,[9]]],[[],[[4,10,8],3,[2,0,6,9]],5,1]] + +[[[[],[4,2],1,[9,9],[10,2,5,2,10]],[],3],[[[10,4,2,3,3],[],3,9,[6]],10,4],[5,[[8,8],[],9],9,[[7,8],3,[],3]],[[4,[3,8],10,7],[],[9],7,[5,[],5,1,[0,3,5,10,10]]],[[[9,4],[3,1,2,8],10],[[6,4,5]]]] +[[9]] + +[[[10,[1],[10,4,0]],[8,6,1],0],[[[7,6]]],[0,10,[2,[1,0,5]]],[9,[]],[[[4,3,8,0],0,7,[10,0,9],2],[8,1,1,[7,9,6]]]] +[[9,5,0,5],[[[],8,[2,2,5,6,4],[1,7,8,7],[4,7,8]]],[4,[[2,2,0,8]],[[7,8],8,[7,6,2,8,6],[2,2,0,6,2]],[4,[7,5,4],[10,1],6,[4]],[3]],[],[4,10,[2,[9,3,8]]]] + +[[],[5,2,8],[2,5,9],[[[3,2],4,[2,6],[8,5]],7,[7],[]],[[9,[1,2,3,5,6]],2,7,10,8]] +[[],[],[[],[[9,6,8,4,8],5,8],8,[7,[10,5,1,1,4],2,[6,0,8,8,3]],[8,[],[1,2]]]] + +[[9,4],[[[2,5],4,10,[5,6]]],[[5,8,[],[0,4,3,2],5],[[],[2,6,10,8],[],[1,4,9],9],9,[[4,4,8,4]],[[4,5,10],[1,9]]],[[0],10,[10,[],5,[8]]]] +[[3,[6,6,7,10,[8,0]],2],[],[[9,4,[0,4,5,4,8],[7,0]]],[2,8]] + +[[6,[[]],7,[],2],[[[5,8,0,7],[10,1,0],9],[5,[4],0],[[0,7,6,9,1],[],[4],5],[1,8]],[]] +[[[[0,3,7,3,8],10,[4,4,0]]],[7,7,[[2,3],[5,6],3],10,10],[4,9,[7,[7,4]]]] + +[[[5],2]] +[[[],[[7],[5,1,2]],[5,7,3,[10,8],10],1,[0,5]],[2,[[4,10,3,0,6]],6,[],[[4,2,0,1],9,[],[7,8,2,9,3],1]],[0,9,7],[[[1],8,2,0,[1,3]],[6,5]]] + +[[[4,7,[9]]]] +[[9],[[[6,5,2,2,7],1],[5]],[]] + +[[],[3],[[[],[10,4,6,3,3],10,[0,8],9],[1],[],[]]] +[[3],[1]] + +[[[[],[1,3],[1,1,3],0],[[2,3,5],[2]],[[2,7],[]],[2,[5,0],[8,7],2],7]] +[[10,[]],[0,2,4,5],[[[],0,4,[6,6,5],10],[5,9,3,[]],[[8,9],[9,10,2,2]],[10,[3,4],[1],[9,10]],6],[0,3,10]] + +[[0],[[[1],[5],[4]],[4,0,10,2],[7,7,[],[10]],[[8,8,8,3,7],0,[6,5,2],2,7],8],[[[0,0,3,7],3],[[3,3,2,2]]]] +[[8],[1],[8],[[],[8],[]],[[],1]] + +[[8,6,3,[[4,4,0]]],[[5],4,[[7,5,1,5],7,8],0],[5,2,2,[[8,5],[3,8,4,9,5],6,[3,7,4],[]],5],[3,[9,9,0]]] +[[[5,[5,1,5]],10,8],[5,10]] + +[[0,[],0],[[[4],6,8,8],[[8,7,2],2,[10]],[4],9]] +[[[1,[10,2,2,1,5],7,1,[4]],2,10,8]] + +[[[1,8,5,[],6],[[7,7,9,7],[8,7,5,7,6],[9,5,10,6]],[[9,4,9,0,0],[2,3]],[],[1,5,0,[],[10,0,10]]],[[7,[7,0],6],[]]] +[[7],[0],[[0,2,10],5],[4,[[4,2],8,0,[3,5,4,7]],7,7]] + +[[[[9,1,4]]],[[[1,5,7,6],[1,2]]],[0,[[],[1],4,[5,4,5,0,7]],1,5,2]] +[[[],[],[[6,4,2],[4,0,1],10,4,7]],[5],[[],9,8,[[6,9,8,1,1]]],[],[4,[9]]] + +[[[]],[],[],[5]] +[[8],[],[[8],4,[6,1],[6]],[[[3,10,5]],[]]] + +[[[9]],[6,4]] +[[[1,[9,5,3,6,7],[0,10],[6],1]],[[[],5,[5,8,1]]],[3,1,[[10,6,5],[8,8,5,10,4]],[]],[1,1,[[9,5],8,3,1,[8,5,2,2]]],[]] + +[[],[[[7,10,8]],[[8,3],10,1,5,2]]] +[[[[3],[2]],[[10,0,8,3],[9],8],0,0],[10],[5,4,[[],[10,3,1,7],[],8],7],[0,[[],[5,9],[9,4],4,[3,1]],7],[[],3,[[10],8,9,[10,10,2]]]] + +[[7,[8,10,9,[10,3,4,6],4],1,0,[0]]] +[[[[10,10,9,8],1,[7,10,10,5],[9,5,8,7,4],[10,7,4,8,3]],10,9,[[6],[8,9,8],8]],[[9],[],[4,1]],[5,[],[[],[9,6,8,1,3]],[[4,4,0,7],4,[2,0,9,6]]]] + +[[2,[3,[],9],[[],[5,4,2,7,8]],2]] +[[[],[0,[5],[2,4],[],7]],[8,[6,9,[6],[],[8,4,6]],[[8,1,4],3,[6],6,2],[7],5]] + +[[3,1,[[6,4,0,1,9],3,0,[]]],[1,5,[9,[6]],0],[4,3]] +[[],[10],[7]] + +[[3,[8,6,[1],5],7],[[],6]] +[[],[]] + +[[[9,8,9,[0,2,10,2],10],[1,5,[0,5,7,8]],1,[9,[6,10,10]],[[5,2],0]],[1],[],[10]] +[[6,4,3],[10,[[5,6,0,3,5],[]],[5,[5,3,10],0],[]],[6,[9],[10,[5],7,[3,4,10,9,1]],[3],6],[[[4,3],3,1,[7,0,1,6,8],[4,8]],[],[1,[8,1,5,9,5],[3,4,4]],[6,6,5],8]] + +[[8,0]] +[[],[[[10,9,4,8],[10,0,6,6,6],[6,2,4,10,9],4]],[[9,9,5,[]],[9,7,[10,7]]],[[[8,0,10,9,5],7],6]] + +[[[0],[[0,2,7],[3],6],4]] +[[[4,5,[6,9,5,3,8],6,[5,2,1,2,2]],0,3,1,[]],[[],9,[]]] \ No newline at end of file diff --git a/src/day13/Day13Lib.hs b/src/day13/Day13Lib.hs new file mode 100644 index 0000000..a302d9d --- /dev/null +++ b/src/day13/Day13Lib.hs @@ -0,0 +1,68 @@ +module Day13Lib + ( Value (..), + parseList, + parseNumber, + -- + processInput1, + processInput2, + ) +where + +-- import Data.Either +import Data.List +import Data.List.Split (splitOn) +import Debug.Trace +import Text.Parsec + +data Value = Num Int | List [Value] deriving (Show, Eq) + +parseList :: Parsec String () Value +parseList = do + char '[' + ls <- (parseNumber <|> parseList) `sepBy` char ',' + char ']' + return $ List ls + +parseNumber :: Parsec String () Value +parseNumber = do + ns <- try . many1 $ digit + return $ Num (read ns) + +cmp :: Value -> Value -> Ordering +cmp (Num x) (Num y) = compare x y +cmp x@(Num _) y@(List _) = cmp (List [x]) y +cmp x@(List _) y@(Num _) = cmp x (List [y]) +cmp (List (x : xs)) (List (y : ys)) = case cmp x y of + EQ -> cmp (List xs) (List ys) + o -> o +cmp (List []) (List (y : ys)) = LT +cmp (List (x : xs)) (List []) = GT +cmp (List []) (List []) = EQ + +runParse :: String -> Value +runParse s = case parse parseList "" s of + Left e -> error $ "parse error: " ++ show e + Right v -> v + +-- #################### + +processInput1 :: String -> Int +processInput1 = + sum + . zipWith (\x y -> if y == LT then x else 0) [1 ..] + . map + ( (\[x, y] -> cmp x y) + . map runParse + . lines + ) + . splitOn "\n\n" + +processInput2 :: String -> Int +processInput2 = + product + . zipWith (\x y -> if y `elem` dividers then x else 1) [1 ..] + . sortBy cmp + . (++) dividers + . (concatMap (map runParse . lines) . splitOn "\n\n") + +dividers = [runParse "[[2]]", runParse "[[6]]"] \ No newline at end of file diff --git a/src/day13/test/AoCTest.hs b/src/day13/test/AoCTest.hs new file mode 100644 index 0000000..b7f24b3 --- /dev/null +++ b/src/day13/test/AoCTest.hs @@ -0,0 +1,41 @@ +import Day13Lib (processInput1, processInput2) +import System.IO +import Test.HUnit + +testCases1 = + [ ("data/input130.txt", 13), + ("data/input131.txt", 5938) + ] + +testCase1 (file, result) = do + withFile + file + ReadMode + ( \handle -> do + contents <- hGetContents handle + assertEqual "input test" result $ processInput1 contents + ) + +testCases2 = + [ ("data/input130.txt", 140), + ("data/input131.txt", 29025) + ] + +testCase2 (file, result) = do + withFile + file + ReadMode + ( \handle -> do + contents <- hGetContents handle + assertEqual ("input test: " ++ file) result $ processInput2 contents + ) + +tests = + TestList $ + [TestCase (testCase1 c) | c <- testCases1] + ++ [TestCase (testCase2 c) | c <- testCases2] + +main :: IO () +main = do + runTestTT tests + return () diff --git a/src/day13/test/Basic.hs b/src/day13/test/Basic.hs new file mode 100644 index 0000000..ef43504 --- /dev/null +++ b/src/day13/test/Basic.hs @@ -0,0 +1,26 @@ +import Day13Lib +import Test.HUnit +import Text.Parsec + +parseTests = + [ parse parseNumber "" "1" + ~?= Right (Num 1), + parse parseNumber "" "10" + ~?= Right (Num 10), + parse parseList "" "[]" + ~?= Right (List []), + parse parseList "" "[1,2]" + ~?= Right (List [Num 1, Num 2]), + parse parseList "" "[1,[]]" + ~?= Right (List [Num 1, List []]) + ] + +tests = + TestList $ + parseTests + ++ [] + +main :: IO () +main = do + runTestTT tests + return ()