From 9f593af332ea7cd9e6f4f09e6b986e76a6db1184 Mon Sep 17 00:00:00 2001 From: Ashhhleyyy Date: Tue, 13 Dec 2022 09:34:37 +0000 Subject: [PATCH] feat: day 13 (27:59.59) --- .aoc-cache/13.txt | 449 ++++++++++++++++++++++++++++++++++++++++++ Cargo.lock | 28 +++ Cargo.toml | 1 + src/bin/day_13.rs | 148 ++++++++++++++ test_cases/day_13.txt | 23 +++ 5 files changed, 649 insertions(+) create mode 100644 .aoc-cache/13.txt create mode 100644 src/bin/day_13.rs create mode 100644 test_cases/day_13.txt diff --git a/.aoc-cache/13.txt b/.aoc-cache/13.txt new file mode 100644 index 0000000..f00fdeb --- /dev/null +++ b/.aoc-cache/13.txt @@ -0,0 +1,449 @@ +[[[2],3,[],[]]] +[[6,9,1,3,[[2,9],4,8,[9,2,1]]],[],[[3],3]] + +[[7,[10,[3,2,6],10,[10],[4,8,7,4,7]]],[9,8,8,7]] +[[3,9],[2,2,[6,[1,8],[10,7,8]],[[1,9,8],[],[],[2,4,2],[3]]],[8,[],[[7]]]] + +[[2,[6,1,0]],[],[]] +[[[9],[[1,4],[1,10,9,2,6],6,2],4,[[10,9,3,8],6]],[[10,[]],[[1,8],6,6,7,0],[[1,9],0,4,[3],[8,8,8,10]]],[],[8,6,3,[5]],[[10],[[6,4,2,0],6,1,8,0],0,[[9],[3,4,0,5],[10]]]] + +[[2,7],[1,[4,[9,9,6]],0]] +[[[[5,2]],10,5]] + +[[4,2,[2,[6]],5],[],[[[8],[6,10]],4,5,[[10,0],[10,1,9,10]]]] +[[[[3,10,2,9,10],8,[4,5,5],1],[1,4,[6,4,9],[],8]],[10,2],[[0,[4,3,1,5],[2,6,2,1,6],6,[1,1]],7]] + +[[[5,2,[7,9,3,2,7],4,[1,3,0,7]]],[[],[[0,0,10],[7],[10,3,0,9]]],[[8,7,6,4],10,[[1,1,0,9,2],[],[6]]],[1,[],4,10,[]],[8,0,5]] +[[[[10,6,4],[7,2]],7,[[8,9,7,6,5],2,8]],[],[[6,8,8,[7,6,1]]],[[7,5,[6],[2,7,10,4,6],[6,7,9]],[[2,0,2,3,6],[4,1,6,7,0]],[0,0,7,2,1],[[8,7],6,[4],6,1]],[[],[],[[],[9,5,4,8,3]],2]] + +[[[5,[4,10,6,9],2,[4,10,9,6,4],[5,2,9,5]]],[],[[1],[[10,6,6,5,10]],6,1]] +[[[[2,8,6],8,6,4],[[1],8,9]],[10,[],[[2,5],[10],[5,1,6,3]]],[3,[]]] + +[[[[10,5,5,5,4]],8],[6,[[6,7,8],[3,2,5,4,6],3,5],1,[[5,7],10,8],[9,7]],[[[],[1,5,3,9],2,10]],[],[]] +[[[7,10,6,[2],8]],[2,[],[10,[0,2,6]]]] + +[[[10,9,[],3]],[[10],[7,[5,8],9]],[[0],[[4,5,1],[5]],[[]],4,[[9],4,1]]] +[[[[],8,[1,6]],[7]],[],[[7,[6,8],0,5,0],[2,6],[[6,4,7,1]],9]] + +[[[],[[5],[6,9]]],[]] +[[5],[],[[8,[5],2],[2,0,[7],[8,2,1]],[1,[4,9,3],[8,1,3,1,4],[]],6,2]] + +[[[[5,3,10,4,10],[5,7],[5,9,2,5,1]]],[[[1],[2],8],10,9,4,[[5,5,7,4],1,[8,9,8]]],[2,[2,8],[7,7,7,0,4]]] +[[9,4,[5],[]],[3,2,[5],[]],[[[],[4,8],10],8,[]],[7,[[7],7],[[1,4,6,4,7]],[]],[]] + +[[9],[[3,4,9,8],10,1],[9,[[8,2],2,2,[1,5]]],[[[1],[6]],2],[4,7,[3],[6,6],6]] +[[[3,[5,0]],[[3],[5,5,10,0],[],[5,8,7]],3]] + +[[1,[1]],[],[10,[3,[5,8],9,[2,1,9],[7,4]],6,[[1],[4,10]],[5,[5,2]]],[[5,9],[8],6]] +[[8,7,[0,[],10],[6]],[1],[[[9,6,9,7,8],9,[8,8,10,1,0],3,0],[2,2,[10,2],0,7]]] + +[[[[10,4,6,3],[1,6,2]],[],7]] +[[8,1],[5,[[],[8,9,10,1]],5]] + +[[],[[4,0,[3,4,4,10,1]],2,[[3,3,3,5,3],3,8],5,10],[6]] +[[[2,4,6,[9,3],[]]],[4,[1,[8,10,3,5,2],[10,3,9],8,[7,7,3,8,4]],[4,3],10]] + +[[3,[8,7,[6,1,5,7]],[9,[],[0,10],[2,1,2,4]],[[2,1,7,2],0,9,8,9],[[3,1,0],10]]] +[[3,[6,9,4],[[2,1,10],8],10],[5,7,3,[[3,8]]],[6,[8,3,3,8],7,10,5]] + +[[[3,3,1],0,8,[3,[7,10,0,6],[7,9,10,7,10],4,1]],[[[],[],9],[9,5,[3,2,7,8],[7]],[[10,3],3],[8,5,[5,6,2,7,0]]],[10,6],[[9,[1]],9,[[1]]]] +[[[[4],0,6,[8,3,7,6,2],5],10,[2,[0,5],[8,10,10,10,8],1,[2,2]]],[[[4,9,1,6]],[[9,1,3,10,0],7]],[1,7,4,4,[]],[]] + +[[4,[1]]] +[[[[6,2,10,9,10],10],[[7,7,0,7,10],1,7,8],[9,[2,7,0,4]],10]] + +[[9],[[4,[8],[4,6,6],10]],[[3],[7,8,7,7]],[[[10,7,3,2,2]],[[],[],4,1,[6,4,10,10]],7,5,[7,5,0,10,[1,5,7]]]] +[[[[8,8,9,8],[],[9,3,3]]],[8,[2],5,7,8]] + +[[[],[[],9,[0,4]]],[],[],[0,[1,[1]],[6,5,[3,10,1,0,6]],2,6]] +[[6,[[4,4],1,[6]],[[5,5],[],4],7]] + +[[],[6,[[8],[7,3,3,6],3,8,[]]],[[0],[],6,[5,10,2,2]],[[0,3,0],2,[[9],2],3],[9,[9],7,2,[6,[],[0,9],1,[0]]]] +[[3,[2,[10,3,0,6],0],1,9],[2,[[6]],[],[[1,1],7,[5,6,4,2],7,8],[0,[5,8,4],[]]]] + +[[5,7,[[7,7,6],7,5,[3,3,10,5]],3,6]] +[[[[0,5,7]],0,[[8,7,9,1,5]],4],[[],[7,1,[10,9,7,3]],1,2,0],[[[]],[5,9],[10,2,[8,6,7,4],[]]]] + +[[9,[]],[[[8,2],[6,4,9,4,9],2],[4,6,9,9],2],[[],4,[[6,2,6],[4,4,9,0],[9,9,6],[2],9],[],1],[[[3,9,0],4],6,[]],[[],4]] +[[[],[]]] + +[[0],[[[9,7,7],[3]]],[4,4],[],[6,5,[8,5,[3],[3,2,10,10,8],[6]]]] +[[[3,[3,9,9],9,[0],10]],[],[[],[],[]],[[0,[5,6,3,3,4]],3,7],[[[0,4,5,2,0],10],9,9,[[0,1],6,3]]] + +[[6,2],[[]],[1,5,9,[[0,8,3,5,0],[8,8,10],4,9,3],[2,[8,9],[9,8,5,0,3]]]] +[[2,1,5,5,9],[4,7],[[[9],[4,0,4,0],3,[]],3,[2],2,5]] + +[[[[]],[7,2],[0,[4,1],3],10],[[9],3],[[],9,[5,[2]],5],[0,[[3],[],[9,7,5],3,2],[5],[5]]] +[[[[9,9],3,8,3],[10,[1,6,7,6,0],3,6,[10,10]],5],[],[1,[9,9,5,3],[2,[5,5,3,8,8],3,[1,7],0]]] + +[[],[[7,6],[[3],[],3,[0,9],[1]],0,[6]],[6,[[10,8,5,4],3]],[]] +[[[[],[0,1,9],1,[3],7],0,[2,[2,4,1,0,9]],[[6,3,3,3,5]],[4]],[],[],[1,[],[],5,[[],1,1,[3]]]] + +[[3],[[[],5,[3,1,7,2],[10,10,5],[9,4,4,7,2]]],[8,[],8,[[2]],8]] +[[],[[3,[0,6,7]],7,7],[2,6,[2,[],[]],[],[[1,9,2,6,9],[6],[9,6,3,1],4,[]]],[6,9,[[8,10,8,5,7],[6],[3]],5],[[[5,4,6],1,[1,10,9,2,2]],[[9,8,10],9,3,[2,4,1,10,0],[4]],6,7]] + +[[10,5],[],[[[4,3,5],[10],[10]],10,8,2,[]],[[]],[5,0]] +[[[],6,[5,10]],[[4,3,[9,1,10,0,10],[6]],[[0,2,6,5]],7,[2,7,[],7,[7,8,3,2]]],[[7,[5,4,8,4],0,4,[8]],3]] + +[[[[10,2,1],[3],3],[[3,6],[3,10,2,8],[],6],8,[[],8,8]],[[[2,5,0,9],10],[[8,8,0,2],[6],[8]],[[10],[5,7,8]],10],[[6],9],[[[],[4,2,9,3,10],0,[2],9]]] +[[[[0,6,6,2],[6,9,6,6,1]],[[],5],6,0],[[[4,9,1,3,0]],7,3,2],[8,[],10,[[9],[3,8],0,[8,1,10]]],[[[5,8],[1,6,0,6]]],[[1,8,8,[4,1,10,3]],[[8,1,4,6,1],[],[6,0,1,8],0],7,6,[2,[2,4,4,9,0],10,[]]]] + +[[[[5],1,[],1,1],[[3,10,6,4],2,[6,8,2],7],[7,[7,0,8,10,8],1],10,1],[[[9,7],10,[7],8],[8,[9,10,6,10],0,[1,10]],[[],[10,3,4],[8,3,0,7,7],[6,8],3],1],[4,[[],[0,2,1,6],[],10,[9,10,5,9,0]],[6,[5],[6,10,0,5,7],[2,6,0,8],[]]]] +[[9,8]] + +[[0,[]],[[5],10,5,[[4,10,8]]],[[],[[],[8,1,7],2],[[4]],4],[[],[]],[7,[2,6],9,[3,[2,4,4,3],7]]] +[[7,3,7,[2,6,[0,1,10,3],[7]],10],[],[]] + +[[5,10,1,[[0,4,4,3],[7,4,8,2,8],0]]] +[[],[10,[],[[8,10,9,7,0],0,7,9]]] + +[[8,[7,[5]]],[7,9,[8,9,[5,3],1,10]]] +[[6,2,[[7,4,6],1,6,[3]]],[5,6,4,[[3,3,5,3]]],[7,[]],[9],[4]] + +[[0,[[1],10,3,8,9],6]] +[[[6,1],0,5],[7,[[9,9],3],[]],[[5,4,[0,10,4,9]],10,5,[[9,5,2,8,8],8,2,[1,9,1,1,10]]]] + +[[9],[[[],[1,9,9,0,6],[9,1,7,5,0]],4,5,3],[[],[[9,9,10,3],2,[],6,0]],[]] +[[[],2,7],[[1,7,[4,2],8],10]] + +[[3,9,5,7,8],[],[6,9],[9,[],7]] +[[[[10],8,0,[3,7,5,5]]],[0,[5,1,[10,1,1],[6]]],[[[2,8,6],[1,4,6],[5,1],[6,3]]],[[0,7,0],[6,[8,2,0,2],[8,9],[7,10,9,1]],[7,2,7,[2,3,1,4],[2]]],[[[],[],[3,4,4,1],[8]],5,4]] + +[[10,5],[],[[[3,10],1,[6,4,0],5,4],6,[[],4,[0],[7,7,7,2]],[10],5],[1,[[9,0]]],[9,1,4,4,4]] +[[0,6,[[0,6,9]]],[],[3,[9,5,[4,7,0],[2,6,0,1,4],[2,3]],9,3,[[9,10,1]]],[[2,0],[5,[10,2],[0,7]],0,[[4,7],[4,1,6],0,[1,3]]]] + +[[9,9,5,0,10],[],[[6],1],[9,6,[],[[6,3,9],[],4,[1,4],7]],[6,[2,[4,2],[4]],[4,[2,6],[1,10,9,4]],0,[]]] +[[],[5,9,5,[[1,3,6,1,9],4,10,1,1],[3]],[]] + +[[1,1],[7,[[9,8],[]],5],[[[7,8,7],8,[6,0],[2,3,6],[5,8,10]],9,10],[[8,7,[6,5,8,4,9]],[[2,3],2,7,3],[]],[7]] +[[[[0,8,8,4,6],[7,7,10,9],10,[8,9,3,5],4],[[8,7,6,7]],[5,8,[]]],[],[[0,0,1]],[],[8,[],4]] + +[[3,[[],[],[10,5,7,1]],8,1,[[1,5,1,10],[8,9,8,6,6],[0,5,8],2,8]],[9,7,[10,5]],[[[],[5,0,7,8,0],7],[8,8]],[5,[1,8,6,[3,3]]]] +[[[[3,8,4],[],[1,3,5,10,6],8],1,[5,[4,9,2,8,4],[8]],[[5,10,4],3,6,8,[1,10,8]]]] + +[[3,[9,[4,4],[6],6],9,10,5],[],[[0,0,[8,4]],0],[8,[5,[1,2]],0,3,0],[]] +[[10,[],[7],[[1,7]]],[],[[[8,1,0],1,9]]] + +[[[[8,6,1],5,[1,10,1],[1],0],[0,6,[],[9]],9,[[2,5,7,7,4]],1],[1,3,1],[[[10,9,7,8],8,[8,8,10],[]],[9,[8,3,5,6,10],7],[8,9,[3,8,4,1,3],[9],1],1,2]] +[[[],2,10,[[],7,4,6,4],[[],8,3,[2],4]],[7,2,4,10],[[[],1,[3,4,3,10]]]] + +[[],[10,[4,[3,4,0,5],6,8],[[8,5,1,6,1],5],[7],[[6],[10,7,5,1],[],2]],[[5,[1],8,10,8],[],[[1,2,9,3],[3],[1,0,0,0]],10],[[[5,7,1,8]]]] +[[[[10]],[8,7,[7,3,7,1,9],2,6],[[]]],[6],[],[[[],3]]] + +[0,3,2,5] +[0,3,2,5,5] + +[[[2,2,[5,8],[]],9,9,6,8],[[5,4],[7,[9,5,3,9,1],[0,6,9],9]],[7,[[4,2]],[5],[[6],[6,0,5],[]]],[]] +[[9,9,[[],0,[2,1,4,10]]],[[[10,8],[4,10]],[[10,4],0],5,0]] + +[[[[5,10,8,8],10],[[10],8]],[10,[5],[8]]] +[[3,7,1,4,[10,6,7,4]],[[]]] + +[[[7,[5,6,8]],[6,8]],[[]],[9],[[[],[3,3,6,10,0]]]] +[[10,[[3],9,9,8,5],7],[[],[],2,[[],3],[[0,0,7,0]]],[4,[8,8,[9,3],[7],3],2],[[8,[9,7,5],[8]],[3]],[0,1,6,[]]] + +[[8,2,[[6,8,4],[0,1]],0,1],[1,8,[9,[9,9,4,5],[4,3,6,7,7],[9,9,10,6,0],[7,8]]]] +[[7,7],[10,[],1]] + +[[]] +[[],[1],[9,[]]] + +[[1,9,9,0],[0,[],2],[[6,[6,4,8],[10,6,2,8],[8,4,1],9]],[[[9,3]],0,[10,5,9,6,10],[10,[2,0,2,2]],10]] +[[1,9]] + +[[[2,5,[6,3,3,7]],[10,[0,1,0,2,1]],1]] +[[10,9,6],[2,[],[10,[9,6,2,0,0],5,1,[]]],[[[5,7,4],[1,0,8,5,7],[4,6,3,8]],[0,6,[5,7,5],7,5],[[1,6],[0,9,0,7,6],[],8,2]],[[0,[5]]]] + +[[7,[[8,1,1,8],1,[7,6,5,2],[9],8],[[2,8,0,2,2]]],[4],[],[7,[[9]],[[0,10]]]] +[[[[9],[7,0,1],[10,10],2,5],[[],0,2,[7,10,1]],[[10,2,8],[8,9],1],[],[10,0]],[5],[10,[[7,4,7,10],6,[],5,9],[7,[1,0,4],[10,6,3,7],10,[7,4]],[[1,4],[],1]]] + +[[],[6],[[4,[],4,5,[]],[[],[7,8,0,7,3],[2,9],4],9,[7,[4,4,3,6,6],[4,1,0,4,3]]],[9,3]] +[[[2,7,3]]] + +[[0,[0],[[8,4],1,3,6,6],6],[4,9]] +[[],[2],[0,2],[[0,2],[3],7,2],[4,7,8,7,[2,7,3,[8,8,6,7],[4,8,6]]]] + +[[[[],[7]],[]],[3,[2,[5,0,10,10,7],0],5,6],[[],9,10],[[[3,3,2,9,7],0,[1,4]]],[]] +[[6,2,[[0,10,8],3,4,[9],10],2,[[1,10,2,10],8,10]],[]] + +[[[[]],4,[[2,1,1,4],[9],0,6],9,9]] +[[],[[10],[]],[[[6,2,1,9]]],[[[2],6,10,[7]],4,9,[[0,7,8,4],1,4]],[7,[8],[8],10,9]] + +[[10,7,3,[[8,8,2,9]]],[[],5,[9],[]]] +[[7,[9,3,[10],2],5,7,9],[4,[[8],2,7],[[8,1,3,8]],[7,7,3,[2,1,8,0],6],[]],[],[[[]],5],[[],[],7,7,7]] + +[[[[],[8,5],0],[5,[],[],9,[9,5]],10,7]] +[[10,[5,[1,5,3,7,2],4,5,7],[0,[],[9,5,9,2,9],5,7],0],[8,5],[1,[1,[1],[2,5,2,2],[4],7],[9,[7,0]],4]] + +[[[2],[[7],5,[9,8],4,[6,5,1]],4,[[0,3,9,6]]]] +[[3,[2,3,[],10],[],2,[4,[6,8,4],[]]],[[[1,1,9,8],[9,8,9]],[[2,1],6,[9,9,10,10]],2],[5,[[0,0],8],6,[[7],3,3,6],1],[9,[[],[3,8,2,1]]],[3,0,[5,[1],[5,8,6,7,3],8]]] + +[[[],4,[[5,3,8,2,2],[5,3],[],[]],[0]],[7,[0,7],[[4],[0,10,0,9,5],4],[[3,6,4],7,[2,9,10,10,9]]]] +[[9,8],[6,4,2],[0,5]] + +[[],[[4],2,6,1,[[2,10,0]]]] +[[9,7,[8,[5],[7,2,8],[3,10,4,5]]]] + +[[[[10]],1,5,9,2],[],[7,8,[3,10,6,10]],[3],[[],[1,2,[0,2,6],[10,6]],5]] +[[10,5,[9,[0,9,3,10,2]],8,6],[2,7,[[2,5],2,[2,4,4,9,3],4]]] + +[[],[6,[3,[7,3,9,8,9],[2,6]],3],[]] +[[[[4,3,3,1,5],[1,2,4],9],9,9,2,[]],[[7,6,1],1,10,7],[[]]] + +[[[]],[[0,[],1],[[9,9]]],[],[[[5,6,1,6,1]],1],[2,[6,[4,1,9,7],[7,6],9,[7]],9,9,[[8,3]]]] +[[2],[],[[6]],[[2],[[4,6,10,4,5],10,5,[2,1],9],[[10],[0,9,8],[7,1,7,5]],[],[[1,4,9,5],5,[3],[10,1,9,10,6]]]] + +[[6,[[9,0],[],[3,10,6,6],8,10]],[[1,1,8,5],[],3,1],[],[0,2,[3,1,[2]]]] +[[[8,0,10,[5,10]],[[],10,4],[8],[2]],[[[7,7,9,2,0],[1,3,5,10,10],1],[[]]]] + +[[3,7,[],10],[5,5,5,5,7]] +[[[],[9,0,[3,7,10]],[[1,0],[5,9,10,6],9],9],[[[0],0,10,10],[0,[2,7]],[[],10]],[]] + +[[[[],[2,10,10],0],[1]],[]] +[[6,6],[7,1,[[5,10,6,6],5,[]],[],1],[[],6,10,[2,5]],[7,[[8],[],[],0]]] + +[[9,[[4,2,3,3,8],4,[8,9],[1,2,8],[0,5,7,4]],2,[[8,6,10],4]],[],[[9],[[],[],9],5],[],[6,[],[[6,9,1]],4]] +[[[8,2,5,10,1]]] + +[[0,7,1,6],[[10,[8],[5,9,10],8],1,7,[6,[10,10],[10,3,3,10,2],3,[4,6]]],[7,[[4,1,6,3,10],[0,2],9],[[5,8,3,5,2],4],[[10],[],9,[2,1]]],[5,[[1,7,6],[3,8,1,5]],9,[5,[1,3,0,1],[4,6,2],[],[10,10,2]]],[10,2,[1],[5,[7],[5,8,4],0,8]]] +[[[9,10],3,1],[],[]] + +[[[[6,6,2,1],10,[3],[5],6],4,[[9]],0,[]],[9,[0,[],1,5],10,[]],[]] +[[[[9],5,9,1,0],1,5],[[10,[10,8,4,1]]],[8,4,1,[4]]] + +[[],[6]] +[[7,7,[],[],[[8,7,3]]],[[3,[7,4],[0,0,6,10,5]]],[9,7],[[0,0,4,[8,2,2,1,8]],[[]],[8,[7,3,0,5,0],0,[3,6,7],6],9]] + +[[[[],9],[[7,8],[9,4],[4]],[1,7,2],10],[1]] +[[8],[[6,5,9,[0,9]],4],[]] + +[[6,[10,1,[],4],[2,[3,9,1,5],8,4,9],[4,1,1]],[[5,[]],[[7,0,9,5,5],[]]],[8,9,[4,[3,4,9,10,0],1]],[],[[4,[1,3,7,10,1],1],[[9,1,8,6,2]],10,9]] +[[9,[8,[2,5,1,0,5],9],[[4,8],4,8,0],[2]],[[3,[6]]],[[[5],8,2,4],[[],[7,1,0]],3],[[[3,7],4,[8,9,0,2,3],[4,5]],1]] + +[[[4,[4,5,0,2],9,[0,6,6]],7,7,6,10],[[[2,5,8],0,0],1,[6]],[7],[2,0,5],[0,10]] +[[2,[4,9,5,7,[6,5,5]],[3,4],8,5]] + +[[[[],6,[3,7,5],[4,6],[0,0,0,6,1]]],[[[],10,10,[6,2,9,7,10],[]]],[1,[[],9,9],[5,7,[1],6],[[10,2]]],[],[[4]]] +[[9,[7,6,[9,3,0,3,5]]],[8],[2,3,0]] + +[[[8],[[5,10],[4,9,10,10],8,0,2],[6,8,0,6]],[9,2],[],[7,[4]]] +[[[],6,8,[]],[[[0,9],[]],5,[[5,5,8],[6],7,2]],[],[7]] + +[[5],[[[],[9,5],[8,4,3],[3,4,1,6,10]],0,0,[[10,10,3,9,10]],[[8],6,[5,2,3,5,2]]]] +[[[[],[5],6],5,0,5,5],[0,10],[]] + +[[[1,[4,8]]]] +[[[[],6],6,[4,9],3,[]],[[[],[5,6,8,3],1,2],4,10,[[5],8,[2,9,9,2,7],[1,0,9]]],[[[7,7,7]],10,[10,9,5,[3,0],10],[[10,4]],6],[2,[0],3,[4,[],9],5],[[],3,3,[9,6,[0,0]]]] + +[[],[[]],[6],[1,[[0,0,3,1,0],6,2,0]]] +[[[9,8,[7,5],10,10],9,7],[],[9],[[3,[3],2,[7,7,3],7],1,[4,7,5]]] + +[[5,8,[[10,1,5],[1,2],6,[8,9,9,6,0],[2,0,9,3,7]],9,8],[[],9,[2]]] +[[[5,[],[9,5,10,3,4]],4,2],[],[[1,[9,4],[0]],9,3]] + +[[3,0,9,[8,9,[4,2]]],[[[2,6,7,8],3,[]],10,6],[[7],[9,[9,8]],[[7,3,3],10,[0]],3],[2,[[5,7,0],[8,6,5],[3,7]],[]]] +[[4],[[0,[1,4,9,0,7],[0]],4,4],[0,[[10,8,0],9,[],1],[[3,2,2,8],8,6],[3]],[],[[7,1,8,1],0]] + +[[2,0,5,[[9,3],[9,5]],4],[[[4],[8,2,9,6,3],[10,9,2,7,5],6],[[],[1],2,0,10],8,10],[[5],3,10,[8,2,[5,4,7,0],6]]] +[[6,1,[[8],[5,2,6,0,3]],[[7,6,0]]],[[[],4,[4,7],0,8],7,9],[[[0,0,10],[3,10,10],[],[9,1,6,0]],[[]],6,8,6]] + +[[3,5,3,4],[[5,[],8,10,[8,9]],[[4,10,4,9],2],[8],[3],9],[1,[[1],[4,1,0,2,10],10,2,1],[[3,4,0],6],[],[[2,2,9,10],5,[7,2,6,8],[10]]]] +[[],[3,[],[4,[6,0,2],3,[6,4],[3]],[10,[9,0,3,7]]],[],[3,[2,0,[2,9,6,4,10]],9]] + +[[8,8,[6,[],[]],0,6],[],[4,[],8,[0,1,3],[5,[0,4]]],[[[9],1,0,[4,1]],[],0,4,[6,7,[2,4,9]]]] +[[6,0,0,5,[]]] + +[[5,[[5,1,1,7,5],7],[5,[6,8],[5,9]],[[10,6,7],[],[],[],0],[9]],[9,6,[[9,9,0],[7,5,4,8,3]],[[2,8],8,3,[3,0,1,10,7],[6]]],[[5,[5,3,2,8],1,10,[6]],0,9,6],[[],9,9]] +[[[4,8],7,[[10],7,[7]],[[4,10,10,3,4],[10,0],1,[]],5],[4,5],[[[8,2],6,10],[],[6,4,3]]] + +[[5,1,5],[[5,[5,6],5,[3,1]]],[7,[[],[]]]] +[[],[[8,[],[7,4],[9,6,10,10]],1,10,[],6],[8,3,8,5],[6],[]] + +[[3,[10],[8],[[]],3]] +[[[5,7],3]] + +[[],[],[],[],[[],[[2,1,6,0],[9,1,4,0,3],3,10],10]] +[[2,4,[]],[7],[[2,0,[7],[10,0,8,6,5],[0,1,5]]],[],[[7,1,5,[0,9]],7,[[2,8,5,9]]]] + +[[],[[3,[6],[6],9,[9,10]]],[[[9,6,5,4]],[],4,6,7],[],[[5,[5,7,6],[6],10],10,0,[[3,3],7,[3,10,1,7,3]]]] +[[[]]] + +[[[2,[0,10,3,0,3],5,6],1],[[[10,4,9],7,[5,4],[1,4,2,7,6],2],[[5,5],[10,1,10],[0,9,0],9],[[9],[2],0,2],7,[[10,3,6,6,10],[8,0,8,2]]],[4,1,[4,[5,5,4],[4],[10,9,6,1]],2,[[8],[],[3,7,7],[]]],[7,[[4,0,6,2,7],[4,3,3]],7,0]] +[[7],[[],4],[[],[[1,6,6,10,8],5,3,5,6],8,0,[[]]],[],[3,[10,8,9,[5],[0,0]],3,[9]]] + +[[9],[[],1],[[[8,7,8],1,3],[3,[8,4,10,5],[7,6,5]],3,1,[7,[],[9,5,7,4,5],[2],1]],[10,[[5,3,10],9,4],9,7],[7,1,9]] +[[[0,[7],[6]],[[2,8,0,0],[2,0],2,[5,9,7,2]],9,[],[4,4,7,1,[7,4,8]]],[],[2,9,1,6]] + +[[[8,[],1],5,5,[7,9,[4,10,9],2,8]],[],[],[6],[[[7,3,1,9]],[0,[]],2,4,7]] +[[[0,9,[9]],3,[7,[],9,[]],9],[],[[1,7,7,[10,7,5,2]],[7,[5,1],1,[6,10,1],10],[[10,6,5,10,10]]],[2],[8,9,4,[[],[3,5]]]] + +[[[[],[]],[8,1,[10,6],8,[8]],[[9,7,10],6,4,6],[3,3],3]] +[[0],[[6],[0,3,4,9],[[5,2,0,10],6]]] + +[[[[7,10]],[3,[6,7],[6,0,4,7],7,[6,10,1]],0]] +[] + +[[],[[7,9,3],[],[5,[9,4],9,4],9],[10,[2,10,3,[0,2,5,8],[5,0,10]],[3,[]],3,6]] +[[4]] + +[[],[[[],[0,5],[7,8,2,6],6]],[1]] +[[[8,[0,0],8,10,8],5,[8,2,[10,5,5,5,6],10],[[0,10,8,0],3,[8],7],5],[[],0],[[[],[],8,1,[5,0,4]],6,[[1,7,8,10,4],8],[]]] + +[[10,10,5,6],[[7,[3,6,1,5,9],[3],[1,6,6,7],[3]],2,[[8,6,7],[6,9,0,7],[10,4,8],[9,1,6,4,10],0],8,[[10,10,6],[],4]],[2,[7],[1],[4,[4,4]],[[],0,[2,7,4,1]]],[],[[],2,8,2]] +[[[],[5,[10,5],[3],1,[4,2,1]],5,[9,5,7],10],[[1,[]],0,7,[]]] + +[[0,10,[[],2,1,5]],[[[0],0,[6,6,0,2,10]],[9]],[8,7,4,3],[4]] +[[8,[]],[8],[1,[[6,10,7,9],[],3],6,10],[[[2,3,2],1,2,5,6],4,[],6,9],[[[2,10,4,9,3],[2,6,8],[5,5],4],8,[]]] + +[[2,1,[[8,9,10],[]]],[[9,4,4],4,[0],2]] +[[[6,0,[],[10,2,7,1]],[[8,2],4,10],3,10],[[[7,0],6],[4,2,[]]]] + +[[],[8],[[[10,0,1],[10,0,6],[3],[3,10,10,4,3],5]]] +[[9,3]] + +[[0,[]],[9],[0,[[8,8,4,3,7],[10,2,1,6,1],[6,4,6,5]],[8,4,[5,8,5,5,3],7]]] +[[1,[[5,7,8],[10],[3,0,9,0],7,[1,3,3,0,7]]]] + +[[[[1],3,[3]],[[10],1],7],[]] +[[],[],[[[],[1,1,0,6],7,[3,10,9]],2,[5,[],9,2,2],[[5,3,4,10],[0,1]]],[[]],[8]] + +[[5,9,[0,[6,1,10,3,3],4],[[5,0],[],3,[]]],[7,10,[7,5,[10]],9,[1,0]],[5]] +[[10,[[10],[],[10,9],7],[4],[4]]] + +[[5],[[],6]] +[[9,[]],[[[9,6,5,0],[6,10,5,6]],8,[10,5]],[0,[3,[8,9,1,6]],[0,[4,0,0,2,2]],8],[5,3]] + +[[[3,3,7,6,0],3],[4,[7,[9,0,6,10,3],[1]]],[[7,[5,0,2,10,2],3]],[]] +[[[[5,3,0,8],[]]],[],[[[1,7,5,6,4],[10,10],[]],2],[[[6,0,6,4],9],3,[[7,1],1,6,10,[3,5,3,8,6]]]] + +[[],[0,1,[[2,8]],1]] +[[[[8,3,7,8],7,6,[6,8,1,5]],[4,8,10,3],[0],[9,8,[6,2,5,4]]],[3],[1,[],[[]],4,10],[2,9,0]] + +[[3],[6],[1,[3,[6,0,10,6,8]],8,6,0],[8,[[1,7],[],[1,0,4,7,1],8,[5,3,0,3]],[],[[5,2],3,[10,3,5,4,4],[9,6,5,6,3]]]] +[[[[],7],7],[9,10,[[],[2,8,0,3],8,[10,0,1,7,2]],[]],[0,[[],[1],[9,7],5]]] + +[[[],5,0,0,7],[2,[[2,5,7,0],[8],[4,3,9]],[1]],[1,[2,6,[2]],[2,[9,7]]],[7]] +[[8,[1,6,[9,0,4,7],4]],[[],[[1,8,9,6],3,[1,10],[10],4]],[]] + +[[3,3,[[9]],8]] +[[9,4,8,0],[6,8,7,7,[]]] + +[[4,[],3,[3,[6,2]]],[[2,[7,10,10,6,0],8,5],[[3,9,9,9],5,[8,8,4,9],8],3],[[[8,4,3,2,2],5,0,[3,8]]],[[8,[3,8,3],[7,9,8],8,0],[10]],[8,3,[8],[[8,3,1,1,3],9,[6]],8]] +[[],[9,[7,2]],[[[0,6,6],[7,10],1],[10],[],[[],10,5]],[1,1,9],[1,[8],5]] + +[[[5],0,[],[[3,4,9,3,0],[8,5]]]] +[[[[8,5],[3]],10,[[7,7,2,7],[7,0,7,10,3]],[3,[],9,6],[[],4,[6,2,0,10],[0]]],[4,1,[8,[],8,10,9],9,10]] + +[[[1,6,[0]],[[]],9,[[1],[1,3,1,7],[2,10],7,[]]],[7,[4,0,10,9,8],3,6],[[2]],[]] +[[],[10,5]] + +[[1,[[9,10,7],[]]],[1,[8],3,3],[8,[[8,9],0,[10],[8,5,8]]],[7,[8,[0,7,3,1,9],[],[10,4,8]],[[4,10],9,8],[7,[],[5,4],[]]]] +[[],[8],[10,7,[],[0,[],3,[1,9]],[5]]] + +[[8,[[2,7,0,3],[8,2,1],6],2,7],[],[[[1,4,5,2,2]],3,[[9],5,0]]] +[[1,4,[10,[2,4,0,2]],[]],[6,7,6,[[2,3,4]]],[[[4,2,7,7,0],[2,1,10],7],[[],10],[7,[],6,9],3,6]] + +[[[10,8,4,[8,7,9,3,4]],[3,5,[0,10,6,8]]]] +[[[[10],[1,9,1,5]],[[5,8],[3,4],[9,3,0]],3],[9,[],9,9,5],[9,[3]],[]] + +[[5,[[4,6,5,1,5]]],[[[],6,7]],[[[9,8,2],10],2,3,8],[[5,7,3,[2,3,2,0,1],2],[],10,[9,1,3,6,0],5],[1,[]]] +[[6,2,[[],[9,3,0,5,6],[],2,[0,8,0,8,8]]],[9,6,[1]]] + +[1,1,0,6,1] +[1,1,0,6] + +[[[10,[5,1],[5,6,10,1,3],2,6],7,2],[[3],7,[4,7],2,[[0,1],1]]] +[[4,9,4]] + +[[[[6,5,1],2,5,7],[[],[8,0],9,[9,7]]],[],[]] +[[[9,8],8],[9],[[7,8,6,[3]],[9,[10,6,2,9],[9,5,3]],[2,[0,0,8,5,0],5]],[0,[]]] + +[[],[],[0,7,[[10,2,1,0,7]]],[[6],5,[[5,8,4],[]],[10,[7,4],[2,10,8],3],[[1,10],[],1,[7,6,10]]],[[],0]] +[[8,[[],[3],8,[1,9,1,1,0],7],[[6],0,[6,8,8],10]]] + +[[4],[6],[4,[[3,10,6,3],6,[],1,5],[]],[[[0,8,0,4,3],[9],0,[7],7],5],[10,9,3]] +[[1,4,10,[4,[8,3,6,6,6],0,8,[6,7]]],[[2,[]],8,[],5]] + +[[],[0,[[8,6],6,[8,9]],[[5,9,3],[5],1,[],[5,4]]],[3],[],[[5,0,0,7],[9,0,[8,3,10,6],10]]] +[[10,[[8,4],[5,6,0,7,9],0,2],7],[[1,3,[2,6,8,3]],9]] + +[[],[[[1,9,0,7,10],8,[4,1,8,3,7]]],[6],[]] +[[6,2]] + +[[2,1,[]],[3,[],[],[0,[5,3,9],[],3]],[8,0,7,[[9,7,3,5]],[[1],6,3,[4,10,0]]]] +[[[[9,1,10,3]],[],[1,[10],[3,0,10],[]],6]] + +[[[[0,4],[],[1]],7,[7,10,5,[10,8],0],[[]]],[1,[],9,2,[[1,8,0,7,9],[8,4,8]]],[[6,4,[],[7],6],[[10,5],2,[4,2],[5,4],[8]]],[[],[7,[1,1,7,9]],7,6]] +[[7,5],[[9,4,8]]] + +[[[],[[7,10],[2,5,3,6],[3,7,6,9,10],[2,0]],7,9,[[],1,0,[3]]],[[[1,8,3,4],3,5,[6]],9,7,6,[3,9]],[8,2],[4],[10,[],[[5,0,7,10]],1,[[0,2],[1,5,8],[],10,5]]] +[[2,6],[[7,[7,3,6,9,9]],[4,2,[2,2,1],1],[],[],[[],3,4,3]],[5,2,9,6]] + +[[5,[5,[1,2,5],[7]],[[8],4],[4,2,0,[4]],10]] +[[],[10]] + +[[[0,1,[6,7,3,10,1]]],[7,[4,[],[]],[5,[4,9,0],3],2,2],[],[],[8,[1]]] +[[7,4,[[0,6],3,4,4],1],[],[[[],[8,5],7]]] + +[[[[4,3,3,4],7],[2]],[[],9,[8,7,[7,6,6,6,9],3,3]],[0,[2,[9],7],[[2,4,2,9],[9,8,3,7],3],8],[[]],[[[],8,2],[[2,3,4,8,9],2],9,[1,10,[2,2,5,2,8],2]]] +[[[10,[6,0,9,8,3],4,[]],5,0,[7,1,3,3,0],8],[[4,0,[7,3,1,10]],8,4]] + +[[[6,[8,2,0,5],2,1,[7]],3,6,7,[[0,9,10,3],10,1,5]],[],[[7,[],[8],[0,9,9],1],[10,[8,8]]],[[[],[5,8,6,10]],[[0,10,8,8],[7,7],0,0]]] +[[7,[[4,1,6],[],[3,0,10,8]],[[0,9],[4],[7],[6,3,2]]],[],[[4,[5]],[[4],10],8,[]],[[[0,2,3,10],0,4,[2,5]]],[9,0]] + +[[[[7,10],[],[2,3,9,9]],[[],[2,1,3]],0,7,0],[],[7,[3,9,2,[]],[]]] +[[8],[2],[[[10,7]]],[8,[[9,8,7,9],1,[5,5,9,4,0],9,[0,7,7]],[[6],[3,6,9,5,5],6],[]],[[]]] + +[[[[],[],3,0,2],[0,3,6],8,7],[4]] +[[8,7,4],[[],7,[],[[1,2,10],0]],[[[7,6,4,1]]]] + +[[[8,[7,7,2,5,7],8,[9,1,9,3],[8,7,4,1]],0,[],3]] +[[6,7,[[9],[6,4,0,4],[4],[10]]],[[7],[[],6,[10],[],[7,2,4,1]],[[4,7],[7,9,6,9]],[[],[],[]]],[10],[8,[10]]] + +[[[[],1],8],[],[5]] +[[10,5,[8,[6,10],8,10,[9,0,3,9,8]],[9,[3,4,1,2],[6,0,3,0,6],1],8],[[6,[3]]],[]] + +[[9,[10,2,6,4]],[0,[[5,7,9,1],[6,10]],[[10,1,1,0],[1,4,2,3,6]],[]],[]] +[[6],[0,[[1,6,2,0,5],8,[3,6],1,[10,4,5,2]],6,3,[7,3,[],[8,5],9]],[[],[[6,2,4],5,[10,10],6]]] + +[[[0,6,[6,7,5],[]],[[7,7,0,7,9],[],[6,7,10,4,5],6,[]]],[[[8,3,10,8,2]]],[7,[[2,6,5]],2,3,[[]]],[7]] +[[[],[],[[6,2,5],[7,9,5],[0,4,2,5],6,8],[10,0,[4,2],[9,7,5]],[]]] + +[[1,5],[0,6,[[7,4,2,9],5,[2,2]]]] +[[3,2,10],[]] + +[[[6,[0,5],[],[3,2,4]]],[2],[[[0],[7,3,3,10,0],2]],[[[],[],5,4],[[7,8,3]],[8,[0],8]]] +[[0],[1],[5],[1,[[3,9,9,3],5,5,1,1],4,[4,0],10]] + +[[[[7],[4,2,6],8],[9],[1,3,2]],[[7,[7,10,3,1],[1,10,2],4,[0]]],[0],[[9,[4,9,8,2],[0,8,8,4,9],[],[]],[[10,2,2],2,[3],[2,8],10],[9,0,[2,6,3,4,7]],[4,[5,7,1,7],[10,9,5,0,0],[9,3,0,8,7],8],2],[]] +[[0],[7,[],3],[]] + +[[4,[[8,0],3,[0,1]],[1,6],[7,[0,6],9],1],[],[[[6],[9,4,4,9,10],7,[9],[6]],6,5,[[],[1,4,6],[0,0,3,5],[6,1,6,9,7],[8,4,8,3]]],[0,6,[[1],8,[10,4,1],7],[[3],8,[3,2],[6]]],[7,[6],7]] +[[],[9,[[5,0,3,4]]],[[[]],7,[10]]] + +[[8,[9,9,1],[1,7,1,10],[[7,6,7,2,6],9,4]],[[[1,1,2],[4,8],9,7,[7,6]],8,6,[[],4,[]],4]] +[[0,10,7,[],[]]] + +[[[[7,2,1,9]]],[4]] +[[[[10,1,6,8,2],[4,9,7,4],1],[],2,[],10],[],[[[8,7],[7],3,[6],7],4,4],[1,4,[8,[3]],[7],3],[[8,6,[2,2,9,4,9],9],[7,[0]]]] + +[[[[6,0,7,10]],9,[[3]],[[]],10],[],[[9,[10,4,3,9]],3,6,10,[10,[],[4,0,8]]],[2,5],[1]] +[[[[8,8],[2,7],[],7,[0,10,0,3]]]] + +[[[10,10,0,6]]] +[[4,9],[3,10,[[4,0,3,10,1],7,10,3,[6,1,8,10]]],[],[3,1,10,[]]] + +[[[7,2,4,[8],4],0,[10]],[],[[[5,5,7],1,[6,4,9],[1,4,2]],[[6,5,9,2],[0,4,6,5],[],6,[8,5,9,9,0]],[[8,5,9],[9,3],[3,4],[9,8,1,0,6]],[[3,3,8],[6]]]] +[[[5]],[]] + +[[],[[[2,2,8,9,6]],[0,9],2,8]] +[[8,7],[1,1]] + +[[[5,10]],[7,4,[[3,5,5],[9]],1,8],[],[],[[],[[5,3,5],[8,4,10,7],6]]] +[[],[[1,[3,9,5,0],5,5]],[]] + +[[],[]] +[[1,1,1,[[8,3],6,[5,0],[0,5,7],[3,8]]],[[[7,7,7],[7,3],4,3]],[10,5]] + +[[[],6,4,[1,8,7,4],1],[4,8,[[],4,[10,2,7,2],10,[]]],[[[10,7,0],10],[10]]] +[[[2,[6],1,5,[8,0,10,2,2]],[[3,4,6,8,5]],5],[[0,[2,6,0,0],[3,6]]]] diff --git a/Cargo.lock b/Cargo.lock index 1fda254..8abf997 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,6 +32,7 @@ version = "0.1.0" dependencies = [ "aoc_proc", "color-eyre", + "peg", "petgraph", "regex", "time", @@ -281,6 +282,33 @@ version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" +[[package]] +name = "peg" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a07f2cafdc3babeebc087e499118343442b742cc7c31b4d054682cc598508554" +dependencies = [ + "peg-macros", + "peg-runtime", +] + +[[package]] +name = "peg-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a90084dc05cf0428428e3d12399f39faad19b0909f64fb9170c9fdd6d9cd49b" +dependencies = [ + "peg-runtime", + "proc-macro2", + "quote", +] + +[[package]] +name = "peg-runtime" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa00462b37ead6d11a82c9d568b26682d78e0477dc02d1966c013af80969739" + [[package]] name = "percent-encoding" version = "2.2.0" diff --git a/Cargo.toml b/Cargo.toml index aa7e239..5334162 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,3 +15,4 @@ ureq = "2.5.0" time = "0.3.17" regex = "1.7.0" petgraph = "0.6.2" +peg = "0.8.1" diff --git a/src/bin/day_13.rs b/src/bin/day_13.rs new file mode 100644 index 0000000..2875b45 --- /dev/null +++ b/src/bin/day_13.rs @@ -0,0 +1,148 @@ +use aoc_2022::prelude::*; + +peg::parser!{ + grammar packet_parser() for str { + rule number() -> usize + = n:$(['0'..='9']+) {? n.parse().or(Err("usize")) } + + rule packet_number() -> PacketEntry + = n:number() { PacketEntry::Integer(n) } + + rule packet_list() -> PacketEntry + = "[" l:(packet_item() ** ",") "]" { PacketEntry::List(l) } + + pub(super) rule packet_item() -> PacketEntry + = packet_list() / packet_number() + } +} + +#[derive(Clone, Debug)] +enum PacketEntry { + Integer(usize), + List(Vec), +} + +#[derive(Eq, PartialEq)] +enum CompareResult { + InOrder, + Equal, + OutOfOrder +} + +impl Into for CompareResult { + fn into(self) -> std::cmp::Ordering { + match self { + CompareResult::InOrder => std::cmp::Ordering::Less, + CompareResult::Equal => std::cmp::Ordering::Equal, + CompareResult::OutOfOrder => std::cmp::Ordering::Greater, + } + } +} + +impl PacketEntry { + /// Compares with self being first. + fn compare(&self, other: &PacketEntry) -> CompareResult { + match (self, other) { + (PacketEntry::Integer(v1), PacketEntry::Integer(v2)) => { + if v1 == v2 { + CompareResult::Equal + } else if v1 < v2 { + CompareResult::InOrder + } else { + CompareResult::OutOfOrder + } + }, + (PacketEntry::Integer(v), PacketEntry::List(_)) => { + PacketEntry::List(vec![PacketEntry::Integer(*v)]).compare(other) + }, + (PacketEntry::List(_), PacketEntry::Integer(v)) => { + self.compare(&PacketEntry::List(vec![PacketEntry::Integer(*v)])) + }, + (PacketEntry::List(l1), PacketEntry::List(l2)) => { + for (a, b) in l1.iter().zip(l2.iter()) { + match a.compare(b) { + CompareResult::InOrder => return CompareResult::InOrder, + CompareResult::Equal => continue, + CompareResult::OutOfOrder => return CompareResult::OutOfOrder, + } + } + + if l1.len() == l2.len() { + CompareResult::Equal + } else if l1.len() < l2.len() { + CompareResult::InOrder + } else { + CompareResult::OutOfOrder + } + }, + } + } +} + +type Input = Vec<(PacketEntry, PacketEntry)>; + +fn parse(s: &str) -> Result { + let mut pairs = vec![]; + + for pair in s.trim_end().split("\n\n") { + let (a, b) = pair.split_once("\n").unwrap(); + let a = packet_parser::packet_item(a)?; + let b = packet_parser::packet_item(b)?; + pairs.push((a, b)); + } + + Ok(pairs) +} + +#[aoc(day = 13, parse = parse, test_cases = ["day_13.txt"])] +fn day_13(input: Input) -> Result<()> { + // Part 1 + let result = input.iter().enumerate().filter_map(|(i, (left, right))| { + let result = left.compare(right); + if result == CompareResult::OutOfOrder { + None + } else { + Some(i + 1) + } + }).sum::(); + println!("Part one: {result}"); + + // Part 2 + let mut sorted = input.iter().flat_map(|(a, b)| [a.clone(), b.clone()].into_iter()) + .collect::>(); + + // add extra packets + for i in [2, 6] { + sorted.push(PacketEntry::List(vec![PacketEntry::List(vec![PacketEntry::Integer(i)])])); + } + + sorted.sort_by(|a, b| a.compare(b).into()); + + let mut result = 1; + for (i, item) in sorted.iter().enumerate() { + match item { + PacketEntry::List(l) => { + if l.len() == 1 { + match &l[0] { + PacketEntry::List(l) => { + if l.len() == 1 { + match l[0] { + PacketEntry::Integer(2) | PacketEntry::Integer(6) => { + result *= i + 1; + }, + _ => {} + } + } + } + _ => {} + } + } + } + _ => {}, + } + } + + println!("Part two: {result}"); + + Ok(()) +} diff --git a/test_cases/day_13.txt b/test_cases/day_13.txt new file mode 100644 index 0000000..27c8912 --- /dev/null +++ b/test_cases/day_13.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