From f88eeb1f914ce5d3ab3e21e3c1120ab1de53a99a Mon Sep 17 00:00:00 2001 From: Andrew Coleman Date: Thu, 15 Dec 2022 10:39:06 -0500 Subject: [PATCH] day 13 solution --- 2022/day13.txt | 449 +++++++++++++++++++++++++++++++++++++++++ 2022/src/days/day13.rs | 82 ++++++++ 2022/src/days/mod.rs | 1 + 2022/src/main.rs | 3 + 2022/tests/day13.txt | 23 +++ 5 files changed, 558 insertions(+) create mode 100644 2022/day13.txt create mode 100644 2022/src/days/day13.rs create mode 100644 2022/tests/day13.txt diff --git a/2022/day13.txt b/2022/day13.txt new file mode 100644 index 0000000..926d2f2 --- /dev/null +++ b/2022/day13.txt @@ -0,0 +1,449 @@ +[[],[1],[[[1,3],2,1,3]]] +[[[],6,[3,8]],[]] + +[[9,6,0],[[0]],[[[5,3,1,1,10],4,[],[10,2],[2,9,9,7]],[[10],8]],[1,[[4,9,10,0]],[[0,8],10,8],0],[[7,[5,6,5,7],9,4,[0,4]]]] +[[9,[],[10,4],[2,9,[2]]],[[[],6,3],1,7,[5,0],[7,7,[10],[0,6,2,4,7],7]]] + +[[[],[],[]],[6,[[1,4,7,9],7],[]]] +[[],[],[],[[[6,2,1],[5,7],2,[8,0],[7,1,5,6]]]] + +[[5,1],[3],[4,6]] +[[3,3,[1,[2,4,2,7,2],[0,3],8],9,0],[4,[6]],[],[9,[2,[9,9,2,6,7],[],2,2],[[],[10],[],[0]],6]] + +[[[10,[10,3,5],1,8],[[10,4],2,10,0,6],[3,3,2,[4,4],[3,6]]],[[[],2,0,8,[2,2,3,3]]],[[8],3,10,4,4],[]] +[[1,[7,10],[[2],[10,2,1,4,2],[2,3,8],0,8],5],[7,[[10,4],8]],[],[],[]] + +[[[4,[2,2,8,0]],3,5,[0],3],[4,[10],10,1],[3],[1],[1,4,[10],[[8],[5,3,0,6,6]],8]] +[[2,4],[3,1,[],[[]],[4,[7,0,3],0]],[]] + +[[2,0],[[],[[3,0,6],6,2,6],8,5,[0,[10,0,10,10,8],[4,5,1]]],[[[6,7,0,6,10],[8],[1],6,7],0,6,[10,5,4,[4,2,9],0],[[2,7,8,6,7]]],[[[7,8,6,3],0,[4,3,3,10,8],[4]],[8],2,1,[1,7,[2,3,6],[7,3],9]]] +[[6],[5],[],[6,0],[[],[9,[10,5],10,[4,3,0,6,6]]]] + +[10,0,2,0] +[10,0,2,0,2] + +[[9],[4],[1,[[7],[8,3,4,6,5],[7,7,9],[10,9,1],[7]],[[3,9,9],[],[],6,[1,2]]],[],[3]] +[[4],[3,9,[[9,10,8,2,7],9,[10,9],3,[7]]],[[6],[9,[9,10,3],[],0],[],[8],9],[7,1]] + +[[0,[[2,7,1,9],6,[4],[3,4,10]],[2,4,9,[3,8],7]],[4,[3]]] +[[[[2,3,5,2,7],[10],[10,2,7],4,0],[10,[8,10,2,1,2],[7]],3,[10,[7,3,10,3]]],[],[6,3,[[0]]],[0,[0,[],6,4],3,[[9,5]]],[9,6,7,8,3]] + +[[[],1],[2,1,[],8,[]],[8]] +[[4],[8,[9],[[5,3,1,3,9],[6,0,0],10,8,5],6],[]] + +[[1,[[7,6,3,4],9,[]]],[6],[],[[10],[3,[7,9],[8,0,1,6,7],3,[7,8,4,5]],3],[[4,[8,1,0,7],6]]] +[[[1]],[4,5,2,[0]]] + +[[9,[0,[1,10,9,8]]],[[3]]] +[[],[[[],[5,3,3],[]]]] + +[[0]] +[[],[[0,4,[],[10]]],[6,[[1,4,8]],3,[5,[10,3,7,5],7,[7,2,3,4]],8],[]] + +[[[9,[6,1,5,6,6]],[[6,5,9],9,2,[2,10,0,4]],2,7,[1,[],[5,5,6,3,10],[1,5,3,6]]]] +[[4],[],[],[[[]],[3,[8,3,3,2],0],[6,[8],1,[6,4],[5,0]]],[10,6]] + +[[4]] +[[],[3,[[4,1,3,7],5,[],[10,4,0,8]],[],8,9],[9,[[6,3,2,7,0],1,[],[6,4],6],6,[4,9,1,[3,0,6,4,5]],1],[9,[5,3,7],[[1,8,10,7],[5,3,5],[6],0]],[1]] + +[[5,[2,[6,1,4,2]],[[6,6,2],[10,3,10,10],[5,8,10],10],[0,3,[2,4,2,1]],5],[[[1,9],10,[]],[9,[1,9,3],8,7,[]],[[1],[],3,[5,2],10],[[1,2,1],3]],[3],[[],10,0,[]]] +[[],[[5],[9,9,4]],[[5,[10,10],[0,9,6,3,7],2,5]],[8],[1,7,8]] + +[[],[8,6],[0,8,[[7,0,2]]],[0,0,[9,[9]]],[]] +[[[1,[10,8,0,0],0],[]],[],[],[[7,[4,7,10,9],[]],[7,4,[],2,[3]]],[]] + +[[5,4,[]]] +[[0,1,9,9],[6],[[[4],[7,1,7,10],[5,2,7]],[1,8,6]],[[[8],[6],1,[3,8]],10],[]] + +[[1,9,[5,5,[0,5,0],[0,7,1,3,1]],3],[7,[],1,[4,7,6]],[[2,2,2,7,[8]],[[9],[5,9,5,2],6,7],[[7,3,10,1],2,0,[1,3],5],6,6]] +[[],[[[5,2],3,[],1,10],1,9,[3,6,4,[],[4,1,2,7]]],[],[[[9,9,10,2,5],[3]],[8,1,[6,0]]],[[],[],[2,[5,2,6,6],[4,9,6,3,9],2],6]] + +[[[[],3,7,5],[3,[4,9,0],[]],[[6,7,7,7,10],[0,6,7,4,8],5,7,[1,10,8,10]],1,1],[[4,5,10,[10,1]],9,[[6,1,0,6]],9],[3],[],[0]] +[[10,0,[[5,4,2,3]],4],[6,[],4,[8,8,[3,7,10,7],7,4],2],[4,7,[],[[3,5,6],2],10]] + +[[[[7,9],[7]],[3,10],[]]] +[[[[4,2],[0,9]],[2,0],4,4]] + +[[[9,[6,1],5,[5,10,0]]],[[[4,7,5,8,0],7,[2,2,3,0,4],[8,5,3,2,8]]],[3,[],[5,[3],9,[10,5,6]]],[[0],9,[2,[10,9,4,7],[7,4,0],[1]],4,1]] +[[[0,10]],[3,8,1,[10,[6,7,8],[],[10,6,7,6,9]],[10,5]],[6,7,[5]],[[[],7],2,3,[3]],[2,6]] + +[[[2,3,7,9]],[[[],[6],[],[9,1,0,0,10],10],1,7],[7,[[2,5,0,5],2,[9,9,1,2,3],[],9],7]] +[[[[3,0]],2,[[2,8,0,8],1,[0,3],[7,10,5,9,2],[10,5,4,5]]],[3,8,7,3],[5,[7,5],[2,3,10,[9,6,9],[7]],3,3],[0,[5,[7],[],6,[0,7,2,5]],4,[[5,6,9,9,3],[1,7,5,5,1],[7,4,3,8,5],[6,10,4,10,10],8]]] + +[[[9,[2,4,3]],6],[4,9],[8]] +[[10,[],7],[10],[[[1,6],[4,0],9,8],[[6,1,5,6],2],10,5],[],[[8,[8,5],[1,6,6,4,10]],5,8,6]] + +[[],[4,[4,[6,10,0],[10,8,10,10,2],[6,0]]],[[[5]]],[6]] +[[[10,[5,9,6]]]] + +[[[],[4],[[5,6,7,7],[4,3,7],[2,1],[]],1]] +[[[8,8],2,[],[],[[7,3,2],6,5,[6]]],[2,[5,7,[3,5],9],8],[1,[10,[0,6],[10,7],1,[9,3,4]],5],[]] + +[[]] +[[9,8]] + +[[8,3],[[],2,[[]],[2,5,9,1]],[[[7,9,9,4,1],[10,3],3,[3]],[1,10,3]]] +[[8,[2,3,7,9,[]],[],7],[]] + +[[[[4],[],6,9,[3,6,8]],[1,[0,6,7],[3,0]],5,[[6],[5,6,2,2],[8,10],1,2],[[3,8,7,10,10],4,8]],[1,[[4,8,2,7],3,[2],[],5]]] +[[[[3,6,4,8],[10,7,2,9],[4,6,5,9,1]]],[[4,7,4,[1,3],8],[[6,10],[5,0,3,0],5]],[[[3,9],[6,2,10,5,1],[4]]]] + +[[[[10,6],9,[5,1,9],[0,3,4,6],[6,1,8]],2],[5],[9]] +[[0,6,10,2],[[6,8,3,2,[9,8]]]] + +[[7],[],[],[[],[[10,0,3,3,1],0],[10],[5,[9],0,6,2],5],[[3,6,6,9,[8]],0,[4,9,[0,5],[]],[[7]],[[8,1,8,4],[2,6,6,3,4],[9,4,2,3],[],[10,4,5,7,2]]]] +[[4],[6,[],[2,9],7],[2]] + +[[[],0,[[2,6,8,0,9],6,[10,4],2,[]]]] +[[[0,[],[3],10],10,[6,[10,9,9,6],5,[0,2,4,3],[4,3]],5],[3,[5,0],7,2,[4,[5],[3,4,8],[3,5,4,9,6],5]],[[[2,10,0]],[[10,3,2],[7,3],[2,4,2,6],[5]]]] + +[[[[6,3],4]],[[],[],[[5,8,0,5,8],7,0,0],[[],6,5,10]]] +[[],[10,[10,[1]],7,[[8],[6,7,7],3,4,8]]] + +[[],[[1,5,[9,7,8,3,9],9,[1,3,5,10,8]],6,10,[[5,6,3,0,8],9,1],4],[],[[[2,1],[3,10,1,7]],[9,[6]],2,4,4]] +[[],[[8,1,5,[6,1,7],[8,1,1,0]],5,1]] + +[[7,5,6,3,1],[[1],10],[[]],[[],2],[[[8],10,3,[8,3,1,9],6],0,[0,[0,2,1,0],0,[9,4,6]]]] +[[1,2,8,8],[5,[6,[1],[6],[],[3,1,8,6,0]],[]],[[[5,6],3],6,[]]] + +[[],[[[2,4,6,0,0],6],4],[[7,[2,1]],[5],4],[2,[],[0]],[6,[[9,7]]]] +[[6,7,4],[],[],[[[8,9,4],[1,7,3],[6,2],7,8],[5,[6,5,3]],[3,6]],[]] + +[10,2,2,7,5] +[10,2,2,7] + +[[9]] +[[[6,5],0,[[],[],[6,9,6,2,6]]],[7,3,[],8,[8,3,[0,3,3,8],[5,6,9],[1,1,9,3,1]]]] + +[[4,0],[1,[[7],[],[8,7],[7],10]]] +[[[]],[[[6,2,1,7,2],[7],2],8,[[6],5,6],1],[6,[0,10,6]]] + +[[[8,4],[3],2],[[[],[7],5],[4]],[9,1,5,5],[8,1,[[],7],1,[]],[[10,[],3,[7,2,6,3]],[],[[1,2,10,7,0],[],1],7,[3,[1,4,1]]]] +[[4,5],[[],[],[8,[5,8,5,5],[]]],[[],8,4,10],[]] + +[[[[1,2,1,9],[3,8,4,2,9],[10,0],[2,1,0,10],[2,1,2,9]],[0,3,8],2,6],[[9,[],[]],[[],[],[2],5,[10,2,7,1]],[[6,9,2,8,2],0,10],[[0,0,10],5]],[1,[[6],1]],[[1],5],[9,[[1,6,8]]]] +[[[[10,4,9,9],[],0,5]],[9,[6,9,6],10,9,6],[],[[3,8]],[[1,5],[[]],[]]] + +[[0,[10,[2]],10,9],[10,0],[[],8,4,3,[[9],6]],[[4,10],4,[],2]] +[[4,[],8,7,5],[6,[3,[4,4,1,6,5],6,2,8]]] + +[[],[8,[[0,7,2],[7,1,0,2],[],[1],9],3],[10],[[3],0]] +[[],[7,3],[[]]] + +[[1,[0,[],[8,8,4],[2,8,3,10],4],8,[[6,1],[0,9,3,1,4],[8],2]],[3,9,[2,[],[7,3],5]]] +[[[7],1,[[0,7],7]],[6,7,7],[],[]] + +[[[[5,1]],[3,5,0]]] +[[],[0,[1],[[7,4],10],10],[0,8,[[3],2],[[6,7,5,10,2],[9,6,8,9],8]],[7,2,[1,[6,5],[],[4],[5,4,8,0,10]],[8]]] + +[[4,[8,10],6]] +[[1,[7,10,4,6,[6,1]],7,[[3,8,1,6],[7,2,0],[]]]] + +[[10,[0]],[[],[10],10,7],[1,[]],[0,[5],[10],8,[2,0,1,[3,5,2,3,1],4]]] +[[1,5,4],[[[2,6]],5,[0,[],[2,5,4,10],[9,7,0]],10],[]] + +[[],[[[6,6,1,0,3],[5]]],[2,[[1,7,7,4,3],0,1],[[1,10,6],[1,7,9]],7,[[5,9,4],[5,10,2],[6,5],[3,6]]],[[4,[3,10]],[],[[10,4,6,1],[9,0,2],1,[4],[8]],[[9]],10]] +[] + +[[4,4,6,[1,[2,10],6,[7]],[7,6]],[4,0,[0,3],6,8],[],[9,[3,0,[3,5],1],9,2,6]] +[[4,[[7],4]]] + +[[[[8,6,1]],2],[[1,10,[5]],[[],[4,3,9,7],[3,8,9],2],7,10],[4,[[],[10,6,9,4],[],5,2],[3,4,1,[3,9,10,4,6]],0,[10]],[[10],[4,3,3,9],[],[]]] +[[6,[[2,2,8,6],[10,3,5],1]],[7],[[3,[4,1,2],2,10,[3]],5],[[8,[2,1,2,3],7],[5,[6],[0,3,9],[2,2]]],[[5],[9,2],9]] + +[[],[[[],[3,1,1],8],[2,0,3]],[[[1],[4]],3,9,5,[5,10,4,9]],[[[5,3,4],[4,3,10,9,8],0,8,[8,4,10]],10,2,[3,7]],[[],1]] +[[[]],[4,[[6,8,3,2,10]],[[7,2,0],3,[1,3,10,10,9],[1,8,0,0],6],[10,[0],[3,4],[9],0]]] + +[[],[[[7,5,5,7,3]],[[4,4],10,[6,8,6,8],4,[9]]],[[],0]] +[[2,[]],[[],[],2,[],[]]] + +[[[],0,2,[]],[9,[[],6,3]],[[[6,0,1,4],7,5,6,[7,8,1,6,0]],10,2,6,4],[[],5,1]] +[[],[6,3,9,[[4,7,0,3],7,[5,9,7,10],6]],[[[1,0,0,1],[7],3,[10,6,5,9,0]],[5],9,0,3],[7,[[5,7,8,3],3,[1,4,4,1],[6,2,7],9]]] + +[[6,6,10,6,0]] +[[[7,[3,7,6,10,1]],[[1,4,9,9],10,4],3],[0,[]],[1,9,[[4,8],[],5]],[],[]] + +[[[[1,3],[10,7,9],[0,6],[0,7],[4]],[[3,0],2,[4,2,8]],7],[0],[],[]] +[[1,10,9,9]] + +[[1],[],[9,4,10]] +[[[[9,7],[2,0,8,6,5],0,8],[[0]],10,[6,[],6],3]] + +[[4,[],[[3,2,1,4],1,[5,10,0],[6,10,5],[1,1,6,10,6]],8],[[1,[5,0,1,8]],[[],[3,8,6,8],[1],[0,4]],10],[2,[[],[],[2,3],0,[5,9,2,6,9]],2,7,3],[],[5,0,[8,[0,7,4,7]],[9,5,10,4],5]] +[[[[4,6,5],[9,3,7,10],[1,9,8,6,2],[1],[9,9,4,2]],[[8],[0,6,5],[6,9,10,8],8]],[3,[[0,9]]],[1,5,[[0,4],[9,6]],2,9]] + +[[7],[],[[4],7]] +[[[9],0],[[3,[6,1,8,8],[4,7,3,0]],[[6,4,0],10,4,3,9],10,6,1],[[6,[2,8,6,3,1],[]]],[7,[[1,0,1],2,0,[10],[10,3,5,7,1]]],[7,7]] + +[[9,[[6],[3,0,4,2],0,0,9],2],[[[8,4,0]],[[0,8,9],9,4,6]],[],[6,[[6,6,9,8]],[[5]]]] +[[[3,1,[5,5,7,6,6]],7,[3,10,[8]]],[1,8,[9,[2,10,6,7,2]]],[[4,2,3],5,10,1,9],[4,0,[],6],[[1,[5,8,8],8,1,3],[[2]],9,[7]]] + +[[[],9,[],8],[[],[[8,4,6,3,8]],5,[]],[1,[7,10,[7,10,6,7]],[]],[9,[[],3],[0,5,0,[1,10,5,2,4],8]]] +[[8,2,6,0],[7]] + +[[10,[[],6,9,0]],[6,[7,[10],0,3],5],[[[7,2,1,9],[1,2,7,0],[9,1,8],[],6],3,[[3,5,0,8,8],6,[10,8]]],[[[8,4,1,6],2],[[7],10]]] +[[[[1,8,5,4],7,[5,3],5,[7,5,5,7,10]],[[],5,5],[]],[]] + +[[2],[0],[[10,[1,1,2],[],4],[[10,2,4,5],0,[]],[[10]],[[9,7,1,0,4],[9],1,[3,0,3,1]],[]],[],[6,1,1]] +[[],[[10,[3,3,4,5],1,[9,10,7,8,1],4],[[7,3,10,10,8],1],[[6,10,2,8],[5,10,6],3,2],2],[[0],[[],4],3],[],[[[8,3],[0,1,5,2],4,[2,1,7,10],6],[[0],[8],0,3],8,[[4],[],7,9,[7,4,4]]]] + +[[[7,[],7],[[]],[8,6,8],5,7],[1,5]] +[[9,[[6,3,3,6]],4,[5],6],[3,[],[]],[[3]],[6,5,[[0,5,2]],6,[9,6,1,7,7]],[[1,7,[9,6],4,0],1,[[8,1,0,8]]]] + +[[8,0],[[[10],[10,10,6,3,7],[9,6,8,8]],3]] +[[3,[3,9],6],[],[],[[7,7,5,4,[7,10,0]]]] + +[[],[7],[[[9,4,6],[10,0,6],9],[6],[[8,3,2],[2,10,6,9,8],8,[0,9],5],10]] +[[2,9,[[7,9,2],[1,3,6,1],4,7,4],[[8,0,7],[2],[0,3,7],[],[5,8,9,4,2]]],[9,[[10,2,1,8],3,[0,10,3,7]],1],[[4,4],2],[[[6,1,0,4],3,[10,1],3],[[],[7,3,8],[7,0]],[7],5,[[3,7,5,9,0],8]]] + +[[10,[8],[8,[10,10,5,9,1],[3,6],[9,2,7,6],7],[6,[8,1,4],[]]],[[[5,0,8],3,5,5,5],1],[]] +[[6,[[4,0],1,4,[7,7,8,1],10],[[8,5,8,7],7,[1],[8,10,2],[9,2,1,3]],[10,[8],7,4,[3,1,9,2]]],[0,4,1,0,[[2,2,7,6,10],3,7,[6,7,10],[]]],[],[4,5]] + +[[[1]],[0,[[8,4,1,3],10,[3,7,9]]],[3,[[6],4,[9,6,5,10,4],[0,9]]],[0,5,[[5,2,2]]],[9,[9,4,3],[[9,4,4,4,0]],6]] +[[[],7,5],[0],[[[0,3,6],[9,1,5,2],[4,0],[],8]],[]] + +[[[7,7,[7,4,6]],[[6,6,2]],2],[[[4],[3,1],7,[2,6,8]],[[],[10],[]]]] +[[10,[[2],2,[8,2]]],[[],[8,[2,3]],5,[10,[6,5,6],8,[],6],4]] + +[[[[]],10,8,[],9],[[[1,4,8,2],[7,3,1,0,6],4,[7,6,1],6],[7]]] +[[[6,5,7,8],[9,[2,0,9],9,[1,8,9,8,0]]],[9]] + +[[[8,[],[10]]]] +[[[5,1,[9],10,[3,3,10,4,9]],[1,[5,8,4],1,10]],[3,[4,5,3],5,5],[],[[[9,0,5]],[],2,[[0],1,[9,9,5,5,3]],[[0,4,7,1]]],[]] + +[[2,[2,6,5,1,[7,10,4,8,5]],[10,[0,8,9],[9]],4,[[8],[5,9,9],[8,10,4]]],[],[[],6,0,4],[],[7]] +[[[[7,8]],8,[4,4],0],[[3],[7,10,[7,7,2,10,7],[0,5,1],8],[[7,4,8,8,1]],[6],4],[2,3,10,2]] + +[[[[0],[2,2],[5,6,5,7],2]],[[4,8,9],1,0,9,[[7,0],[]]],[3,[4,[0,2,10,8,9],[2,9]],[],10]] +[[4,[3],[[],9]],[8,[5,3,[],[8]],[],5,[2,7,[10,4],6,[4,10]]],[[],[],6,[[],0]]] + +[[0,4,8],[[],[[3,7,5,1,8],5,9,8],[]],[[10,[2,4]],10],[],[5,[[10,5,6,2,0],6],[[2,9],0],4]] +[[3,7]] + +[[[5],2],[2],[0,[[1,6,10],7,1,[],[0,1,6]]],[4]] +[[4,[],8,2],[],[8,[[4,0,6,9,7],10],[[10,4],[8,6,6,4],[4]]]] + +[[5,9,5,3,[3,0,[0],[10]]]] +[[[[0],4,8,[],5],[9,[1]]],[10],[[],[1,6,4,0]],[],[[],10,10]] + +[[],[8,[[1,3,7],[0,2,6],1,10,[6,6,9,2]],1,7,[[2],10,5,7,[]]]] +[[[9,[6,7,8,7],8,[0,2,9,9],[9]],[[],7],[[7,6,3],3,[0,8,9],[1,6]],5],[8,5],[10,1,[[],[3,9],[],5]],[]] + +[[],[10,2],[3,2,0,[[10],[10],1,2],[]],[],[5,[],[[1],[5,4,4,9,8]],[7,2,[]]]] +[[[],7,3],[[],2,0],[6,8,[[8,5,4,0,1]],0],[[[0,0,5,10]]],[[8,[7,10,6,4],8],8,[[10,6,3,2],10,[2]],[],[3]]] + +[[[3],[4,7,1,[2,2,1,8],[1,5]],4,2],[[],3],[],[[[3,8,0,6,5],6,[0]],4]] +[[[3,0],[[0,0,10,4],[4,6,4,5,2]],[[7],7,[10,7,2],[2,6,3],6],9]] + +[[[[3,4,2,3,4],[2,2],[1,7],5,[5]],8,[[5,6,9,8,0],2,0]],[],[1]] +[[],[[6,[],5,8,[6,1]],[[5,5,6,1,9],[10,5,0,7],5,[3,6],[5,6,10,0]],4]] + +[[5,[[2,9,4,5],7,4],6]] +[[[[1,6,3,1,0],[6,10,6],[],1,[]],6,[[1],[4,6,10],[],[6,1,10],[5,5]],2,[[8,6,4,4,7],[]]],[9,4]] + +[[],[],[2],[[[5,1,6],[4,1,9,7],6,[8,1,0],[0,6,0,10,1]],[],[[4,2,3,7,10],[10,6,3,6],3,[0]],[[10],[9,4,6]]],[4,0]] +[[],[[10,10,[6,3]]],[[[8,9,3,4]],4,[],10,[[4,1,10],4,8,[6,6,0,10],4]]] + +[[[6,[],7],[2,0,[3,4,0],6,[7,1]],[[2,6,10],9],[]],[[]]] +[[[[10,10,7],[0,6,8,4],6],9,[],10],[4],[0,[8,[],0],8,4],[[[8,9,8,6,1]],[[5,8],[],8,[3,3,3,10]],[[],[],[5,6,2,3,9],3,[3,3,5,4,0]],7,[[3,5],4,6,10]],[2,[2,6]]] + +[[[[9,7,5,2],[4,2,7,5,2]]],[0,[2,6,[3,7,6,0]],[0,6,[2],8],2,6],[[],2,[[9,9],[9,1,3,8,6],8,3,6]]] +[[[4],2,[1,6,[0,7,9,3],[10,4],[5,2,1]],[0,[],[6],1]],[[9,9,[6,8],9,[8]],[8,[2,10],[7,0],5],9,10]] + +[[3,4],[0,[0,0,[0,8,5,9]],5]] +[[[],[4,7,7],[[3],[4,5,6],7,[9,8,7],[10,8,0,10]],[[4,0,5,8,5],[8,3,9,5],5]],[[],0,6],[[[5,0,3],[],[4],[6,1,2,5]]],[[[8],[9,6],9],[[],[2,10]],[[5,7,7,7,7],8],[[],[],7,[5]],[6,[4,5],[3,4,6,5,2]]],[2,[]]] + +[[4,6,8,[4],[[6,8],[],0,6,1]],[1,[[3],[5,5,6,2],8],0,6],[[7,[1,4,4]],[10,[7,4,9,8,0],5,7],[[3,4,2,6]],0]] +[[],[[2,8,[4,3,3]],10,[9,[],8,8]]] + +[[[[1,10],[7,2,2,9]]],[[[9],9,[0]],[[8,10,7],0],[8,[5,2,1,2],[5,4,1,10,5],2,[9]],[[7,10,7,8],[7,10,4,0],[6,0,1,0,2],[4,4,4]],[10,[],0,[9,5,7,4,8],[8,7,1,6]]],[[[1],[8,8],9],3],[],[[[6,2,2],9,[],[1,1,6,3]],[7],0,0]] +[[[],[5,9,3,[5],8],[7,0,[],2,9],0,8],[[0,[],[2,4,6],9],[5,[],[8,6]],6,8,5],[[],10,7],[[[],3,5,[10,4,4]],3,8],[[[0,0,8]]]] + +[[3,10,[5,8,3],[],8],[[[1,7,10],8,[8,4],0,[7,4,0]],[6,6,[10,7,3,1,7]],[],[[0,9,8,10],6,[8,6,0],[8,10,2,1,4]]],[],[7]] +[[[],2,[1,[9,0,2],[1,7,1]]],[[[5,1,2],[6,6,1,2,2],2,5,[10,3]]]] + +[[8,[[3,1,9]],3]] +[[],[1,5,10],[3,[9,5,[10,2,10],7,8],[[]],8,[]]] + +[[[[4,0],[],[0,3,4]]],[3,9]] +[[5,9,0,6]] + +[[],[1],[3],[[[7,8,8,4],0],[7,5],[5,[2,0,5,10],[7]],10],[9,[10,7,[10,1,10,8]],5,7,0]] +[[],[],[[],10,[[6],[4,5],[2,2],[7,7]]],[[10,[8]],[[6,9],[3],8],2,[[0,9,1,3],0,5,2,3],[8,5,7,10]]] + +[[5,9,10,[3,7,10,[],1],3],[5,3,[[3,4]],1]] +[[[[7,3,3,7],7,2],[[2,3,8],[10],2]],[[8,[1,3,1,9],6,[6,1]],0,[9],3],[[],[[2,3,9,0],4],[10,7,[3]]],[5,4,[]]] + +[[[4,[8,1]],10],[[[],[4],5,3],[[5,6,1,9],[9,0,8],7],[],[[],[8,7,10],9,[4]]],[9,9]] +[[[[1],7],[[4],6,8,0,1]],[6,[0,[],[5],6,[1,6,2]]],[9,1,[],10],[[[8,3,2,7,3],[0,9,1,8]]],[]] + +[[[0],[]]] +[[[[10,2,2,6],[5],3,6,5]]] + +[[6,[[7,0],[7,5],1,3],[8,[3,2],[10,4,4,5,3],[6,10,10,6],5],1,3],[1],[[],[[],4,0]],[[[7,0,2]]]] +[[],[],[3,[3],0,[[4],8],[2,[5,7,3,0,2]]],[]] + +[[1,7,[[6,9,8,9,6],10]],[[]]] +[[4,[[4,4,9,7,1],[4,10]],[3,10,[3,10,10,3,1],9]],[10,10],[[[3,4,8,5,6],4,[]],0,8,4]] + +[[[]]] +[[[9,1,[5,2,7],[10]]]] + +[[10,[],8],[[[9,4,7,7,2],[0,5],[8,2,1],[10,5]],2,0],[],[[[5,1],[1,1,4,8],4],10,[4],9],[]] +[[[],[[0,1,1,8],[]],[8,2],7,5]] + +[[9,10,10,8,1],[],[4,[[4,4,8,6,9],[],[],7]],[4,9]] +[[[[6,4,7],2,9,9,10],[[9],[6,7,4,9,7],[2,10]],[9,[1,6],9,5,0]]] + +[[8],[[1],1,[1,2,0],6],[],[],[3,[[9,5,10],[8]],[6],[],1]] +[[[[]],[],8]] + +[[[[10,7,9,6,6],10,[6,2,8,0],5,4],[[4,7,10,10],3,[8,10,10],[2,10]],[[8,1,6,10,10],[]],[]],[2,6,10]] +[[],[9],[7,5,2,[6]],[[[3,0,7,6],[4,7],[4,8,2,3],6]],[4,5,[[10,7],[1,3],[8,10,9]],6,8]] + +[[8,6,[[0,0,3],[2,4,0,6],6,[4,1,10,2]],8],[[8,2,9,[4,6,8,1,6],3],[[8],2,[1,7,2]],[[],[7],8,8,[10]],8],[5,5,[9],2,[2,[2],4,8,[]]],[[[8],3,9,10,[1,1,9,7]],9,0],[[10],[8,7,3]]] +[[[[],6,[6,10],5],[],3,7]] + +[[0,9],[[3,1,8,3,7],[1]],[[1,[]],3,2,3],[2,5,1,[8,4,9,[3],4],5]] +[[[[10,7],5],2,2],[0,0,7],[7,[[5,3],5,0],[[],10,[6,10]]],[[[0],[],[5,10,3,3,0]],4,[[10,7],[0,0,4],8,10]],[]] + +[[8],[4]] +[[5,8,[0]],[8,[[3,3]]],[10,2,[10,3,[7,4,1],0],2,4],[[2],[3,5]]] + +[[10,8,[[6,10,5,5],[7,3]]],[[[2],[9,7],[],3,[10,4,9]],[],[1,[9,0],[8]],4,10]] +[[10,4,4,0],[]] + +[[1,7,7,8],[3,[]],[0,[5,10],8,[],[[4,10]]],[[[],4,9],8,[2,[10]]],[0,0,[6,7,[8,5,6]],[[5,2,3,9],10]]] +[[0,2],[6,[[4,0,9,9],1],[[7,0,9,2],3,3]],[4,4,6,[2,[3,5,6,7,3],1]],[],[2,5,7,8]] + +[[],[[],4,2]] +[[2,[6],0,3],[1,[1,[6,4,3,7,2],3,3],1,[[]]],[[[],[5,9,6,8,0],[7,10,10]],[[],[1,7,2,3,6],8,7]],[6,[[3,8,9],[2,2,4,9],[10,6,4,4],8,[1,9,3,10]],[1,[8,8],[6,5],4,[]],4,[1,10]]] + +[[[],5,10,7,9]] +[[5],[],[8,9,[[],[0,6,2],7],10],[[1,[10],[10,4,7,8]],2,1],[]] + +[[[],10,1],[[5,10,[],[]],9,7],[[]],[],[[7,[2,6,7]],9,5]] +[[1,[[],7,[7,2,2,4]],3,[6]],[8,[[1,1,5,1],2,5,[0,4,3,10]],3]] + +[[9,5]] +[[8],[8,6]] + +[[[8,10,5],[9,1,[]],2,4,6],[5],[[0,9,2],[],1,3,[8,6]]] +[[],[[[6,7,0,5],[3],[10,7,7],7],[[2,4,0,1],[7,1],[7,10,4,4,4]],[[10,4,10],[],[4,6,8],[6,0],[1,7,8,7,9]]]] + +[[3,9,[10,6,[9,8,8,8,0],[10,1,5,9]],10],[5,[[0],10,4,[0,1,7],8],[[2,3,7],[8,8,0,4],6,[1,1,2],[1,10,0,7,7]]],[[[10,8,9,8,9],1,[9,0,1,6]],0,8],[7,6,[[6,9,7]],[]],[[[5,4,8]],[[0,9],10,[2,6,2,9],[],4],[[7,2,7],[6,7,3,4,5],[7],1,[1,9,3,3]],[6,[6],[],[10,2,7,4,2]]]] +[[4,[[0,4,1,9,1],[],5,6],[[0],[0,6,7,9,2],[],[10,1,7,0],[7]]]] + +[[8,[[],[2,9,6,2,0],[6],0,2],[],2,[2]],[[4,1,2,[2,1],[4,9,0,9]]],[[1,[3,4]],[[4,0],3,3],0,10],[2]] +[[[7,4],3,4],[[],0,[[10,3,4,0,3]],[[1,5,6,5],[],10]],[[4,[6,4],[0],5],2,[7],[5,[4,5,9,4],[2,8,0]],4],[0,[2,8,2,[8],[]]],[[[2,8],[5],9,[]],[[8,9,2],[9,3],[9,9,3,2,7],5,7]]] + +[[10,[6,[3,2,2,7,8],[3,3,9,4,4],10],4,[7,0,[7,8,4,6,2]],1],[7,[5,[4,0],[7]],[6]],[9,5,8,[[4,7,0,10,8],5],[]]] +[[[[],[],[1,6,6,9],6,[3,0,2]],7,[8,[6],[2,6],1],[[10,1,5,1,9],1,[]]],[5,2,10,[4,[3,6]],7],[[0,[3,2,8,5],[10,1,8,8,1]],8,0],[[[3],[7,8,6],[10,0],[2,5,1,1,9],8],[8,5,[0,10],1],[[3,6,1],5,[2],3,[0,9,0,2]],8,[[]]],[2,[3,[6,2,9],[7,6,8,5]],[2,9,2,1]]] + +[[6,6,7],[],[10,2]] +[[[4,[0],1,1,6],10,5,[8,9,8,6],8]] + +[[[6,[10],[9,10,7],0,8]]] +[[1,8,4,[[8,9,1,6,0],[]]],[4,[[9],4,10,7],2,3]] + +[[[1,[6,3,6,5,3],6],1,0,[[],5,7,6]],[[],6],[],[]] +[[[9,[1,4,10,10]],[4,6,4,[8]],10]] + +[[[],7,[1],[],[0,[3,0],[4,7,5,1,3],[]]],[]] +[[[[7],5,9,9],5,3,7],[[[1,3,2,0],1],0,[[8,7,0,5,2],8,3,[7,7,3,4],9],3],[],[3],[6,[[3,9,3,0],[4,10],[]],[10,0,9,[],10],[],[[1,5],7,9]]] + +[[[3,10,10,3,3],[3],[1,0,4,2,2],6,3],[[9,[10],9,8],[[9,1,4,0,4],2,[4,8],[10,7,7],10],3,9,1],[[5,5]]] +[[8,2,7,0],[9,6,[2,[5,5],1,[7,10,6],[10,8,3,7]]],[]] + +[[[[2,7,3],8,8,[10,10,9,6,4],[]],7],[5],[],[],[]] +[[4],[[[],[5,4]],1],[2,[],5,[[10,0,4,5,9],5,[6,2,0,8],[4],8]]] + +[[0,5,3],[5,2],[[6]],[0],[[1,[6,10],10],[9,[4,7],3,[6],5],[4,[1,7,3,7,8]],[[5,10,1,1,3]],[8,[0,0,2,3],[8,1,7,0,3],[5,7]]]] +[[4],[],[8,4,1,[],1],[6],[]] + +[[[[7,8],[],[9,5,4],[6,9,3],4]],[8],[7],[4,7,[1,[],6,4],7,8],[]] +[[[[1],[]],6],[],[5],[5,[[1]],[[10],[1,8,4],6,[1]],4,[2,[0,5,6,7],4,7]]] + +[[],[9,[3]],[[10,10,[1],[],[4,2]],[[7,10,4]],[[4,0,3,3],1,[7,2]]],[]] +[[6],[[5,[3,3,5],[9,4,1,3,10],9],7,1],[4,10,7,4,9],[[[],[7,4,3,3,1],[],[2,8,4,10]]]] + +[[2,7,[5,8,9,[],4]],[1,[7,3,[0,1,0],4],5,6],[[]],[[[],10]]] +[[2,[[]],[],6,10]] + +[[[[2,6,2,6],7],[7,4],[7,[4,6]]],[[10,4,1,4],3,[]]] +[[[[1,6,9,9,7]]],[]] + +[[[]],[1,3,[2,[],[4,9],0],7,7],[[]],[[2,[0,5,7,1],[10,2,7,7,7],9,[]],7,5,1],[]] +[[[[],0,[8,3,3,10,10],[6,3,10,10,9]]]] + +[[9,[[7,5],8,[2,2,0,7]],[[],1,0]],[0,[3,3,8,[6,5,7,1,10],[9]]]] +[[],[],[],[7,8,10,6],[[4,[7],[]],[5,7],1]] + +[[2,[[5,6,3,9,10],4],[[10,4,4,8,10],5,[4,7,8,10],[],[7,4,2]],6,[[3,5],[0,5,1],8,7,10]],[[[9]]],[2,[[9,9,10],[0,10,1,4,8],[2]],1,[[1,9],1],[[],[6,0,6,9,5],0,[6,3]]]] +[[1,9]] + +[[1]] +[[[],5,8],[0,[6],8,6,4],[],[]] + +[[[[8,7],[8,3,10],5],[],3],[7,9],[6,1],[7],[[[1,8],9,[9,5,4],4],[[6,5,1,4,7],[5,5,2,2],[8]]]] +[[[[7,8,9],[2],9,[10,4,7],0],[[2],[1,7,4],[2],6,[6]],9],[[[1,9],[10,1,6,7,8],2,[10],[8,9,9]],[7],[2]],[8,2,3,3,[[9,2]]],[10,[[],[6,3,0,0]],7],[[[2,10],7,[5,7],8],4,7]] + +[[0,[[2,7,8,8],[5,5,6,2,2],[5,10,2,4],10,[]],[[2,1,9,6]]],[]] +[[3,[1],[[4],0,[7]],[[],5,1,0]],[[6],[5]],[[[3,1,4],[]],6,6,9],[2,[[4,7],6,[9,0,9,0,5],[8,10,4,4]],10,6,1]] + +[[8,9],[],[2,7,10,[[],2]],[[[],9],[[],[7,1,5,3,5]],0,4],[]] +[[7],[[]]] + +[[[[3,7],[2,9],9],1]] +[[10,[[8],[6,2],1,4]],[4,[6,[5,5]]]] + +[[6,8],[[[3,7,10],[5],5],0],[5,4,0,7,9]] +[[7]] + +[[[4]],[],[8]] +[[8,5],[[8,[10,1,3],[9,7,8],[9,10,7,10]],9,[[2,2,5,2],6,[0],[7,10,3]],9,[]],[4,[[8,7,1,5],[0,1],[6,7,6]],[[10,9,10]],[[]],[[8]]],[[5,[1,8,7],[7,7,0,9]],7,7,[],[7,8]]] + +[[[[10,9,9,1],5,7,3,[3,10,3]],5,10,5,0]] +[[1,[[],4,[],5],3]] + +[[2,[8]],[[],0,7,7],[7,[[],[6,9,7],0],5],[8,[5,[1,1,2],[1,0,6,1,0],2,[4]],6,[7,7],[10,[9,6,8,1,7],[]]],[1]] +[[4,10,[],[[9],[8]],[9,[10,3,4,4,3]]],[6,[[2,9]],[],8,4],[[6,[],7,10]]] + +[[],[2,9,10,7,2],[5,[],[[6,4]],[[2,1,9,6],4,[0,0,1,2],4,10],1],[[[8,7,1],3,4],10,[]],[10,[1,[9,4,0,4,9]],9]] +[[[[],[9,4,6,3],[7],5],[3,8,[5,0,0],[2]],0,[[0]]],[[10]],[8],[2,[1],5,4],[8,6,9]] + +[[[],[[9,7,2,7]],[[9,7,3,6,3],7,0,[7,3],0],4,[7]],[[[1],[6,6],3,9,[]],[],5,1],[[7,[],8],9],[8,[[2,4,6,5,8]]],[7]] +[[10,[]],[[[1,9,7,8],0,9,[1,10,9,8],[7,10,10,9,3]],[5,[3,2,5,8,1],[]]],[]] + +[[8,7,[],8,[[2,9,1],[3,6,3,7,0],[9,2],[],[1,3,4,10]]],[[8,4,6,4]],[[7,[2,2,10],[5],8],[],8,10]] +[[6,1]] + +[[],[7,[[2,4,5,8],[7,5,9,0,5],[8,1],[6,7,9,7],[5,8]],[[0,8],[9]],[6,[],[4],[3,6,8,8],[5,10,1]],[3,[9,5,0,2,0],6,[10,3]]],[5,[],7,[[1,1,7],[6,5,3,5,2]],[[0,1,4,3,6],[9,1,5,4,6],[7,3],6,7]]] +[[8],[[[7],10,8],[[10,5,8,8,3],0],[1,9],8]] + +[[1,[[6,8],5,[1,7,7],6,[3,0,1]],6,[5,[3,7],8]]] +[[3,[],10,[[1,1,8],6,3],[3,9,6,4,[2,9,10,6]]],[],[8,[[8,5,6],[],[],[5,7,6]],[6,[9,6,1,5,2]]],[]] + +[[8,[[],2,[5,7]],[5,[6,10]]],[[[1,5]]],[0,4,0],[5,[8],[[1,10,1],0,10,[3,10,5,6,1],[9,5,6]],0],[[[],[10,9,4,9,2]],[8,7,5],1,6]] +[[1,9,[[3],5,10,2],[3,[3,3],[1,9,10]],[]]] + +[[7],[6,0,[7,10],[9]],[],[]] +[[9,7,[1,8,[],9],7,0]] + +[[0,7],[7,2,2],[8,[[3]]],[[[8],1],7],[1]] +[[[[8,1,1,9,2],[5],9],[[3],[5,6,9],1,[]],[],0],[[],5,3,[0,0,3]],[[4,6,6,6,[8,1,8,6,4]],[8,4,[3,10,0,2]]]] + +[[[[10,3,4],0,[]],6,3],[],[[10,[],[0],9,1],5,[[6,2],[5,3,1],[10,3,7,9]]],[[8,7,4,2,0],[1,[10,10,0,1],1,[7]],1]] +[[1,[[4,8,4,0,1],9,5]],[[[1],6],8,[4,[4]]],[3,10,[0,1,[7],7],[6,[],6],[7]]] + +[[[0,0,[8,10,2,3],[6,2,5,6,7]],[9,6,10,1,[1,4,5]],[3,[5,8,3],10,10],4,[5,10,[],[9,2,10,2]]],[6,[5],[[5,6,1],[7,7,6],[0,7],4]]] +[[[[2,10,9,7,0],[8,0],[1,9,3]],[]],[[4],8,7],[],[10,10,10,[],5],[[2],[8,3],8,[1,[5],1]]] + +[[0,6,3],[6,[3,[8],3,1],[]],[3],[[],[8,6,4,[]],[[7,1,2,7,9]],[10,[10,2],[3,7,5],6]]] +[[[1,[10,3,4,2,6],6],[9,3,0,6],[9,[],[6,7,7,1,2],[6]],[[10]],1],[[]],[8,0],[],[8,[[9],7]]] + +[[5,[[8,3],10,9,[8,9,7,4],0]],[],[3,3,7],[2,[5],[4,4,[9,3,5]],3]] +[[[5,[6,9,0,1]],8,4,5,3]] + +[[[7,[],[],6,[4]],[],7],[[],10,5],[[[1,2,5],2,[6,1,3,3]],[[5,4,10,2,6],[1,9,9],10],8,1,9],[8,7]] +[[[5,[7],[9],1,7],6,9,[8],[[],[10,7,9,8,9],7,7,[3,7,10,2,7]]],[[10],[],[],[[2,0,8]],[[],0]]] diff --git a/2022/src/days/day13.rs b/2022/src/days/day13.rs new file mode 100644 index 0000000..0c682a9 --- /dev/null +++ b/2022/src/days/day13.rs @@ -0,0 +1,82 @@ +use anyhow::Result; +use std::cmp::Ordering; +use std::fs; + +#[derive(Debug, Clone, Eq, PartialEq)] +enum Packet { + Num(i32), + List(Vec), +} + +fn parse(s: &str) -> Packet { + if &s[0..1] == "[" { + let mut stack: i32 = 0; + Packet::List( + s[1..s.len() - 1] + .split(|c| { + if c == '[' { + stack += 1 + } else if c == ']' { + stack -= 1 + } + c == ',' && stack == 0 + }) + .filter_map(|s| (!s.is_empty()).then(|| parse(s))) + .collect(), + ) + } else { + Packet::Num(s.parse().unwrap()) + } +} + +impl Ord for Packet { + fn cmp(&self, other: &Self) -> Ordering { + match (self, other) { + (Packet::Num(a), Packet::Num(b)) => a.cmp(b), + (Packet::Num(_), _) => Packet::List(vec![self.clone()]).cmp(other), + (_, Packet::Num(_)) => self.cmp(&Packet::List(vec![other.clone()])), + (Packet::List(a), Packet::List(b)) => a.cmp(b), + } + } +} + +impl PartialOrd for Packet { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +pub fn run() -> Result<()> { + #[cfg(not(feature = "test_input"))] + let file_contents = fs::read_to_string("day13.txt")?; + + #[cfg(feature = "test_input")] + let file_contents = fs::read_to_string("tests/day13.txt")?; + + let mut packets: Vec = file_contents + .trim() + .lines() + .filter_map(|s| (!s.is_empty()).then(|| parse(s))) + .collect(); + + let mut part1 = 0; + for (packet_index, packet_pair) in packets.chunks(2).enumerate() { + let o = packet_pair[0].cmp(&packet_pair[1]); + assert!(o != Ordering::Equal); + if o == Ordering::Less { + part1 += packet_index + 1; + } + } + println!("part one: {}", part1); + + let div1 = parse("[[2]]"); + let div2 = parse("[[6]]"); + packets.push(div1.clone()); + packets.push(div2.clone()); + packets.sort(); + let i1 = packets.binary_search(&div1).unwrap() + 1; + let i2 = packets.binary_search(&div2).unwrap() + 1; + println!("part two: {} * {} = {}", i1, i2, i1 * i2); + + Ok(()) +} diff --git a/2022/src/days/mod.rs b/2022/src/days/mod.rs index e4818a0..cf3e80f 100644 --- a/2022/src/days/mod.rs +++ b/2022/src/days/mod.rs @@ -2,6 +2,7 @@ pub mod day1; pub mod day10; pub mod day11; pub mod day12; +pub mod day13; pub mod day2; pub mod day3; pub mod day4; diff --git a/2022/src/main.rs b/2022/src/main.rs index a52c668..fc76b9d 100644 --- a/2022/src/main.rs +++ b/2022/src/main.rs @@ -48,6 +48,9 @@ fn run_day(number: i32) -> Result<()> { 12 => { days::day12::run()?; } + 13 => { + days::day13::run()?; + } _ => return Err(anyhow!("Invalid day provided")), } Ok(()) diff --git a/2022/tests/day13.txt b/2022/tests/day13.txt new file mode 100644 index 0000000..27c8912 --- /dev/null +++ b/2022/tests/day13.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