Use Clap for arguments parsing
authorGreg Burri <greg.burri@gmail.com>
Tue, 13 Dec 2022 15:13:26 +0000 (16:13 +0100)
committerGreg Burri <greg.burri@gmail.com>
Tue, 13 Dec 2022 15:13:26 +0000 (16:13 +0100)
Add a -p for processing all days in parallel

Cargo.toml
data/day13.input [new file with mode: 0644]
src/days.rs
src/main.rs

index 3e0b2fe..3a6371a 100644 (file)
@@ -9,6 +9,8 @@ edition = "2021"
 [dependencies]
 itertools = "0.10"
 regex = "1"
+clap = { version = "4", features = ["derive"] }
+rayon = "1.6"
 
 [profile.release]
 opt-level = 3
diff --git a/data/day13.input b/data/day13.input
new file mode 100644 (file)
index 0000000..3509604
--- /dev/null
@@ -0,0 +1,449 @@
+[[[8,[4,3,4]],[[4,8,4,0,4],[3],10,[10,10,5,5,7]],10],[2,[],6,9]]
+[[[6],[],[[]],[5,4,6,9]],[[[9,0,10],[7,2,7]],8,9,0,[[2,9,1,3,5],1,[],10,[]]],[9]]
+
+[[],[[6,8,0,5]]]
+[[3],[3,[]],[[4]]]
+
+[[8,[10]],[1,10,[1,[4,3,1,6],[],[5]]],[3,[1]],[1,8,2,[3,4]]]
+[[1]]
+
+[[9,[],[]],[7,0,[6,4,7],7],[[[0,1,3]],2,6,5],[10,[9,10,9]]]
+[[10,[[2],[0]],7,5,[[3,6,10,1,3],[10,6],0,[3,7]]],[[1],[],[[8,8,10,8],[],[6,5,8,3]],[[5,10,7],[1,2,4]]],[[8,2,0],[3,[]]],[],[[0]]]
+
+[[[[3]],9]]
+[[],[2],[]]
+
+[[9,[10]],[[],[],5,3,8],[]]
+[[[[9,5],[1,5,9,1,8],1]],[[5,[]],[[4,7,0],[3,10],[4,3,8]],[8,[9,0],7,[2,6,6,7],[10,2,5,4,10]],4,5],[10,[0,9],2],[2,[[0,3,2,5,6]],[],0,[5]],[6,3,3,[]]]
+
+[[[[5],[0,7,4,1,10],[3,10],[3,2,10,10]],[[7,5,10,6,9]],2,[[8,7,0],[1,6]]]]
+[[[7,7],1,[7,2,1],[1,7,[10,10,4]],10]]
+
+[[],[7,0,6,[1],[3,6,3,1]]]
+[[7,10,[0],[],[]],[10,1,1,5,2],[],[0,[],5],[[[2,0,0,1,1],3],[0,[8,0,3,8,6],[1,1,1,8],[2,6,4,6,10],10],[[],10,[0,0,0,3,10]]]]
+
+[[9,[[],7,5,[5,10],10],[4,2]],[4,2,3,[[0,9,3],[],2,[4]],2]]
+[[4,3],[[0,[]],[6,8,[],0,[0]],4]]
+
+[3,3,9,0,9]
+[3,3,9,0]
+
+[[[6,3,4],0,[[],8,1,[7,5],[6,2,1]],8],[8,10,6,[6,6,8,4],[8,[4,3]]],[10,[10,[9,1],[6,3,0,6,4]],3,[],[[0,1,0],3,2,6,1]],[[0,10,[8,5,2]]],[0,[]]]
+[[[[3,9],[1,6],[]],0,[],[[10,8,2,5,1],[8],[1,1],[5]]]]
+
+[[[[],8],[],[[10,8]]],[1,5,[[9,7],7,[],[3],10],10],[[8,10,[10,3,5],10,[6,10,6]],[]],[],[3,[[8,6,2,2,8],[7,5,10],8,[0,8]]]]
+[[6,8]]
+
+[[3],[],[[[],8,[10,3,1],9,[2,2,4,4]],[0],5,[8,[],5,10,4]],[5,4,[],[6],7]]
+[[],[[],[[7,3,0,5],7,8,1,[9,7]]],[[[7,10,8]],[[2,1]],[8,[6,1,8,1,6],7,5,[1]]]]
+
+[[[2,4,8,[]],[]]]
+[[5,3,5,10],[[]],[7,0,10,10,8],[9,1,8,[10,3],9],[[]]]
+
+[[[7,[],10,3,7],1,[6,[4,4,4,8],9],2],[],[[9,[],[2]],[5,1,[7,1,0],[]]],[[[9],3,4,1],1],[[5],1,7,2]]
+[[7,[[8,10,4,7],[6,4,2,1],[9,7,6,8,6]],6],[[[10]],0]]
+
+[[[[6,3,4,6,1],[5],6,[3,6,7,3],[2]]],[],[5,[0,[4,2,8,1,10],5,4],7],[[3,9,[3,6,0,4],[2,9]],7,1,[[0,9]],[4,[0,3,3,4,0]]]]
+[[8,5,[9,0],8,3],[2,6],[],[10,[0],8,1,10]]
+
+[[8,5,0],[9,0,7],[0,0,7]]
+[[[10,[8,9]],[[],[2,6,3]],[[6,8,5],[3,1,2,2,1],2,[9,7,3,8],[0,10]],3,[9]],[[],[[0,8,9,7,7],[7,10],[8,0],5],5],[[[],5,9]],[[4,[1,8],3],[5,[4,8]]],[[[4],[8,0,5],4,[10,7,10],[]]]]
+
+[[1,[5,[],[10,3,7],7,9],4],[[[10,5,9,10,1]]],[6]]
+[[[[],1,10,[10,10]],[8,1,[0],5],[]],[]]
+
+[[8,6]]
+[[0],[[[8,3,5],4,[]],9]]
+
+[[1,0,[[2,5,5]],2]]
+[[1,1,1],[0,1,7,10]]
+
+[[],[[[1,8,6,10],10,2],8,[]]]
+[[7],[[0,8,5],10],[[1],4,2],[7]]
+
+[[[],5,0,[]],[1,3,9,3],[6,[[6,6]],[[8,1],[3,8],0]],[]]
+[[6,7,10,[]],[4,[7,10,[3,3,2,4,2],[9,4,3,1],[5,8,0]],[[0,9,10],9,[2],[5,10],5]],[10,3,8,0,[10,6]]]
+
+[[[]]]
+[[0,[]],[9],[],[[[1,3,6]],[[1]],6,0]]
+
+[[[],[]],[1,[7,[7,10,0,10],[7,6],4,[5,8,7,3]],9,[[9,2,3,5]],[[1,5,1],0]],[5,[[]],[[2,9,2,0,10],5,4]]]
+[[[],[4,[0,0,4,4,2],1],[6,[],[7,3,1,10,6]]],[[9,4,[9,9,8,5],9]],[[0,[3],[4,4],[4],[]],10,[3,[3,3],[6,2,3,2,1],[]],10,7]]
+
+[[1,1]]
+[[4,[]],[[[1,0,0,3]],4,[[7,1,0,10,3]],[],[[7,2,2,0]]],[[[8]],2,7],[[[6,8,3,3,6],[1,9,0,8,9],[6,7,0]]],[]]
+
+[[3,[3,9,[4,7,5,8]],4,[],2],[[[3,0],[5,5,4,7]]],[[[7,4,1,9,5],5],[[0,5,1,5,9],0],[[10,9,10,10]],5,8],[[[1,1],[],[]],[[],[3,5,0,2]]],[[4,[2],5,10],[],1,[],[2,[8,1,0],[]]]]
+[[3,0,[9],[[],2,[7,5],[9,2,9,3],5],5],[6,8,0,1,8]]
+
+[[[5,[8,6,2,3]],[[3]],9,2],[],[[],9,[5]]]
+[[10,[8,9,[],9,0],5,10],[1,9,9,[[4,0,4,10,8],10,[9,5,8,1,4]],[[10,7]]],[[],8,[0],[[2,8],4,[2,0,3]],1],[10,10,8,3,6]]
+
+[[3,5,1,[2]],[],[],[5]]
+[[2],[8,9,10,[9,[],6,4,[5,7]]],[3],[1],[]]
+
+[[5,4,10,[],[[8],[2,5,6,0,1],[5,8,6,8],8]],[5],[3,5,5,2],[[8,10,[4,3],0],[[4,9],8],9,5,[8,[0,6,6,5,8],[]]],[]]
+[[[[1,9,2],6,6,9],[[],[6,8,1],[9,8,6,9]],2],[[[8,9],4,9,[2,7,7,10],[]],2,5,7],[7,[[7,3,1],[7,1,0],[]]],[8,[],[2,9,10,[]],3],[6,3,[0,1,8],9]]
+
+[[8,[8,[9,10,5,9]],[[6],9,[5,3,7,8,2]],1,3],[8,5],[[[4,4,7,5],10],0,[6,[0],[],10,4],3]]
+[[[[4,0,0]],8,10],[[3,1,6],[5,4],0,[[3,2,4,4,1]]]]
+
+[[],[[[6,6,7],1,[],[1,7]]],[7]]
+[[[1,[9,4,10],[]],0,[[],[],[],4],5]]
+
+[[[2,[6,4],[7,9,9,0]],10]]
+[[4],[],[[[1,1,8],[],[0,7],[6,6,6]],1,7],[[[6,10,2],2,[7,5,4],0,[9]],0,5,5],[4]]
+
+[[],[7],[0,[7,8,1,[],[3,8,0,3,9]],[6,[10,4,1]],[0,10,2,1]],[]]
+[[],[4,8,2,[2],4],[],[[[7,7,5],[8,2,10],[4,7],9],6],[[[7],[],8],[],[[2,5],5,[9,4,1,1,2],1],[]]]
+
+[[[0,3,[9,7,3,4],[],[0,10]],[]],[[8,6,8],1,6],[6,[[],[8]],0,[10]],[[],[[2,10],2,[7,5,9,4],[6]]],[]]
+[[9,2,6,[[2,8,8],[10,9,0,10,1],2],[[0,1,8]]],[6,[[10,9],6],0,[1,6],[]],[[9,4,[],[6,3,1,3],[5,6,7,7,8]]]]
+
+[[[0,5],[[6,2,3]]],[[3,[3,5,6]],6,[8,6,10,10]]]
+[[],[6,2,1],[3,[]]]
+
+[[5,[3]],[6,[0,[],6],9],[[9,9,6,[4,2,2]]],[[[3],[9,4,3,1]]],[1,[3,[4,8,9,10],6,9],[[],3,[6,9,8],[]]]]
+[[[0,2,3,[8],[4,5]],0],[[[4,0,7,5,3],4,3,10],[6,[2,4,4,1],[8,9],10],[3],4,[]],[0,6,10,10,[6,1]],[[7,[8,4,1,8]],10,[[6,7,6,9],9,1],[],6],[1,10,10]]
+
+[[5,8],[6,[[10,6,10,1,0],2,6,[1,10,2],4],3,0],[7],[4,10,[10,[2,2,3,1],6,[8,3,0,2],[9,10,9,5,9]]],[]]
+[[9,1,[[3,9,2,1,4],3,2],[[],[2,5,7,9,7],9,0,[7,8]]],[]]
+
+[[4,[[5],[8,1,2],[0]]],[[[2,9,3],7,[1,6,2,2]],2],[],[[3],[[10,10],[7,6,7]]],[[[6,4]],[0]]]
+[[[9,[],8,[5,4,5],[7,8,9]],0,8,9]]
+
+[[[0,10,[6,7],[8]],[5,10,[6],4],7,1,2],[],[],[],[10,[],2,8,4]]
+[[[4]],[],[[],5,7,10],[5,2]]
+
+[[[[1,9],[3],[5,5,4,4],[2],5]],[2,[[],[0,9,4,4,5],[10,10]],[1,[],[10],4]],[[8,[5,9,8,3,1],3,4,3],[[0,3,0,3,8],[0],[2,3,9,1,2],[0,6,1,9]],[9]],[[[],2,[7],3],[[7],0,[7,9,1,4]],3,[[9,4,6,4,4],[1,8],9,[4]],[[]]],[4]]
+[[2,[],[10],6,3]]
+
+[[4]]
+[[[4,[4,0,5,7],2],[],[9,[1]],2,10],[[0,8,7],8,7,10],[],[3]]
+
+[[7],[],[5,[[0],[],[4,5,2,3,0],[6,4],[5,9,2,4,1]]],[]]
+[[],[9,[8,[5,7,7,3],3,[7,0,3,10,0],7]]]
+
+[[[6],[8,7,5,[4,4,9,0,9],[]],[[0,10,6,6]],1,[]],[[[],[]]],[3,2],[]]
+[[[]],[[[2,3,0,7],8],1,0],[0,10,0,[3,4,5,[4]],9],[0],[[[3,7],1,2,10],[[4,10],0,5,1],[]]]
+
+[[[[4,0,5,6],[7,4],9,1]]]
+[[9,[[6,3,6,0],0,[1,6,0,0],[8,0,0]]],[2,5,[],[[7],8,[8,8],4,1]],[[],[[4,7,8],[],[9,4],4,[]]],[[[10,5,3,9,2],7,3],[7,[9,0,8,10],[9,6]],[5],8,[[],6,[10],[7],2]],[]]
+
+[[[4,[1,10],[6,3,9],5],9],[]]
+[[10,[],3,[],[[0,1,10],[3,2,1,3,3],[10,4]]],[]]
+
+[[[],[[9,9],4,[9,7,2]]],[3,8,0],[10,[3,[10],3]]]
+[[8,[2,[2,6],1]],[[6,6]],[[[0],4,5],[[3,9],1]],[[[5,7,8],0,[]],[[9,5]],4,[[2,10,0,5,9]],[[],6,9,[],[3,10,10,2]]]]
+
+[[],[[[5],[4,3,2,10],[],0]],[9,[],[7,10,[6,5,8,5],9,7]],[[7,0,[7,3]]],[]]
+[[7,[],3,[[],[4,0,0],5,[2,5]],9],[[6,[9],[],[],[4,10]],[[3],[0,4,6],4],[[5,2,2,5],7,[10,8,4,10,3]],[2,[0,7,3,4,7],1,[3,2,8,2]]],[6,5,[[10,5,6,9],6,[8],[1,9,10],7]]]
+
+[[[[3,2,2],[0,8],[3,2],6,9],[1,[8,10,6],[8,9,5,0,5]]],[1,7,[[4,3],[0,7],[8,6,5],6],[6,6,[2],[8],[7]],[]],[[4,[4,9,3,10,7],[5,0]],3,2,[6,3,0,[]],[[7,7,3],[0,0]]],[[]],[]]
+[[7],[],[[9,5,[5,7],0],[[2],0,[2,10],0,4]],[7,0,[[8,5,5,7]]],[]]
+
+[[[9,[5,0,7],10,[6,1,10],[6]],[[1,10,0,0,4],2,[2],6,4]],[[],[[10,5],[7]]]]
+[[8,[[2,5],7],[[4,4,2],4],6,[]],[[],7,10],[[[4,3,9,6,0],[2]],8]]
+
+[[8],[[],9,3],[9,9,[[2,5,7,0,3],10,2]]]
+[[0,[],[[5,2,2,1],[4],[6],4,[5,4,10]],4,3],[4,9],[[[0,8,1,0,0]],[[6,6,2],[4,4,0],[],[6]],6]]
+
+[[[2,[],7,7,9]],[10,[[8,10,7],[7,9,2,0],7,[5],[3]],3],[3,6,8]]
+[[1,[[4],[7,5,3,1],[9,8,8,2],10],[],[10],3]]
+
+[[],[9]]
+[[2,4,10],[[],8,10,[7,3,5],[8,[10,2,3],4,2]],[1,9,[0,4,[3],[6]],[[8,10,1,4],[],4],[2]],[[]]]
+
+[[[[],0],3],[[2,3]],[[9,10,[3,7,0],3,[9]],8,7,10],[[[7,3,1]]]]
+[[4,8],[9,9],[3,1,[[10,0,2,10],6],[],[2,3,[6,0,9],9]],[3,5,3,[[6,9],[2,9,1]],[[6,4,9,3,4],0,[7],[2,7],[9]]]]
+
+[[5,[8,[5,4,7,8],[1,1,6,5,10]],[7]],[[2]],[[0,[1,8,8,10,3]],[],1],[[2,9,3],10,[0,8,[7,3,0,1]],1]]
+[[[[4,0,5]],9],[[10,4,7,7],4],[0,[[7,9,6,9],9,10,0],[8,1],0,[8,[4,1],10,[2,9,10,7]]],[[],[6,[1],[5],5,7],[[5,8],9],10,2],[[8,9,1,[4,6]],[],[[],[10,4,2],4,4],[9,[2,4]],3]]
+
+[7,10,0,6]
+[7,10,0,6,1]
+
+[[8,[[0,4,2,1]],[8,3],[[],3]],[4,[[]],[6]]]
+[[[7,[1,10,1]],[[6,5,9,1],[3,3],[6,2,3,6,2]],[9,[9],8,6,1]],[[[7],[1],[0,7,2,7],7,5],0,1],[3,[[1,7],2,[8,5,6,10,2],7,[9,6,7,9]]],[7,3,1,[4,1],3],[[]]]
+
+[[[0,1],10,9]]
+[[2,[[10,0,2],3,[1,1,4],[1]],7,[[],[2,6,10,3,6],[3]]],[[6,[],[0,8,0,1,8]],9,3,10],[10,3,7,9]]
+
+[[[1,4,[2,2]],[9,[8,6,10],5],[9]],[[[0,4,3]],8,[[9,9,0],[1,2,10]],6,8],[]]
+[[10,0,[],[],3],[9,[2,10,5,[1,4,3]],4,1]]
+
+[[3,10,[3,[9,2],[3]],5]]
+[[4,[8,[0],[5,1,5]],0,[5,[5,8,2,3,9],[]]]]
+
+[[],[[6,[1,7,9],[],10],7],[],[[3,[],[9,9,6,0,4]],[[7,5,7,2,10],0,[6,10,3],[6,2],[6,6,1,1]],[[1,3,9],[4,7,6,7],6,3,[4]]],[[7,[3]],7]]
+[[[[10],[9,9,10,1,0],[10,6,9,8,4],4]],[1],[6,[[10,9,6,9,10],4],[[6,7,2,1],[],[4,1,4,1],[]],[5,1],[[2,5],9]],[],[]]
+
+[[],[[[1,9,9],9,[5,5,5]],[],9,8]]
+[[[10,5,[2,9,2,1,7]]],[],[[3,8,9,[],[9,9,5]],7,[]],[[7]]]
+
+[[[[]],3,0,8,[10,[10,6,9,8,3],7,5]],[[[6],5,[9,1,2],[3,4,0,4]],9],[10,[],[2,2,[9,10,5,6]]]]
+[[2,3]]
+
+[[1,9,[8,[4],[4,2,0,0],[10,7,1,10],[8,10,10]]],[6,3,8,2,9],[7,[1,1,[4,3],[]],[],9,4]]
+[[0,10,7,[],5]]
+
+[[[[4,8,1,4],[]],10,0],[],[],[3]]
+[[1,[[3,8],[3,4,6,6],[],[6,10]],5,[4,[6,5,10]],9],[7,[],[[2],[],4],3,2],[5,5],[4]]
+
+[[[[0],3],5,1,6],[[],[[4],9,4,[9]],7,[2,4,[3,0,4,5,5]]],[2],[6,[6,8,[],3],[],6,[[5,8,0,6],10,[1,5,9,4]]],[]]
+[[4,10,[8,[],[0,5,10,2,6],8],4],[],[[9,10,3],7]]
+
+[[[6,[5,3],[3],1,[2,4,9,4]]],[],[[[1,2,2],5,1]],[8,[8,[7,2,7],[9],7,8],2,[0,1],6]]
+[[[[6,9,0,0]],3,[5],9,[[8,1,5,4,10],6,[]]],[3],[[[1,5,1,2],8,1],[8],[3,[4,4,8,3,3],[0],[7,7,0,3],9]]]
+
+[[7],[1,1,0],[[2],[[1,0,6,8,6],[3,4,8,10,9],2,[6]],10],[[[8,8,9,0],[],3],[1],[9,1,[6,0]]]]
+[[],[2,5,2,4,5],[1,6],[[2,[],[6,4,2],9],4,[5,[5,4,1,3,8],0],[2,[9],1,[],6]],[]]
+
+[[3,6,8,[]],[]]
+[[[[8,7],4,[]],3,[3,[0],[5,4]],7],[[],[4,6,[6,4,9,4,2],0],10,[8,8,2,0]],[[[3,0,6,10],[8,9]],[[3,7],[7,9,6,5,9]],[]]]
+
+[[[8,2,[9,5,1,2,2],[0,10,0,5,7],[1,8]],8],[4,[],[7,[],1,[],0],[[5],3],7],[1,[[],[4,2,8,1]],8,4]]
+[[7],[[5,6]],[6,[2,8,[],2,[6,3]]],[[[1,1],2],6,[[6,10,7],1,[8]],[[],10,2]],[]]
+
+[[],[8]]
+[[],[[[9],6],0,8,[3,[],9,[],1],[1,6]]]
+
+[[[8,[6,0,9,10]],[[6,1,8,3,1],[9,4,10,1,5],[2,7,5,3,4],[2]],10,7,[5,[8,3]]],[4,10,[[4],[]]]]
+[[[[5,8,0,9,7],6,5],[],1,[]],[1,[],[[0,7],[1,10],[3],[0,0,10,7],0],[[9,8,1],[]],[[6,1,10,6],[4,9,4],[8],0]],[2,9,[4],1]]
+
+[[9,[8,2,0,[7,10,9,7]]],[8,[[0,10,9],0],[8,[7,0,0,2]]],[],[[]]]
+[[2,[[3,2,7]],[0,[6,6,0,4,5]],[10,[3,6]],[]],[0,10,[],[7],[[7],5]]]
+
+[[9,[[3],6,[10,4],6,[9]]]]
+[[[[5,1,2,10,3],[7,7,1,8]],3],[9,[],[[3,7,6]],6],[[[4,8,10,3],0]],[[8],[[1,4]],[5,[6,7,7,3]],7,9]]
+
+[[[10,[8,1,2],2,1],2,[3,[6,2],[10],[7,10],4]]]
+[[[9,8],7,[[0,6,9],[8,1],[8]],[7,[],0]],[9,0,[[1,2],4,8,[],[]],[1],9],[[]],[]]
+
+[[2,3,[9],[[8,1,1,10,4],[2,3,9,2,7],1,4]],[],[[2,6,6,[4,5,2,8,3],9],0,[[1,9],6,[6,6,0,5,10]],9],[[5,[],7,7,4],[5],6]]
+[[[4,0,[3,6,3,5],0],4,[],[7,[4,1,3,3],5,[4,4,4,2],[10,8]],1],[]]
+
+[[],[0,[[],[0],1,5]],[5,[5,1,[5,6,8,4,0],7,[4]],[0,[]],0],[8,1,2,10],[2,[9,[7,8],3],[9,10,3,[10,3,8]]]]
+[[[1,0,8,5],4],[],[]]
+
+[[1,[10,[7],[],[7,7,7,1],6]],[8,[4,[0,7]]],[[]],[[],[[6,4,2,8,6],7,[9,0,3,6]],9]]
+[[],[10,2,[],3,0]]
+
+[[6,[[2,10,10]]],[[[],[]]],[1,9,2,3,[[5,3,9],6]],[10,[[5],9,[8,0,4],[8,6,4,6]]]]
+[[],[[6,[2,2],9,0],7,[[7,4,2,1,4],6,[0,10,5,10]],1,[[7,9,5,7,1],5,[],4,10]]]
+
+[[9,6],[[9,[7,0,1,7,7],[]],[1,[7],[9,3,9,3]],0,[[]]],[9,6],[]]
+[[[[],0,[3,2,1,2,1]],10,[5]]]
+
+[[],[7],[[6,4,0,7,[6,4,0]],2,1,[[7,3],8,[2,2,10],7],5],[]]
+[[],[7,8,[[10,5],[10,0,10,4,5],4,[10,3,6,4],[]],8],[],[3],[2,8]]
+
+[[[[5],8,[],9],[[1,5,8,9],[8,2,5,2,10]],[],8,4],[1,4,9],[],[[4,7,3,0]],[[8],[3,[8,10,8,9],4,1],[[9]],[5,1,[],[7,5,2]],[5]]]
+[[6,7,[3],[]],[[[1],[10,1],5,4],3,[[0,8,10]],10]]
+
+[[2,3,[0,[0,1,10,1,8]],[[6,0,4,10],[3],6,3],10]]
+[[7,5,[[5,5],9,[4,3],[4,8,7,8],5],8,[3,3,7,[]]],[1,[[6,9],[4,0,4,2,3],1,[1]],3,[],[6,5]],[[8]],[[[0,8],[0,8,4,5],2]],[4,[[],[7,9],[6,0,7]],10]]
+
+[[[6],[[9,9,2,6],2,7,1,1],[],[7,[9,4],[7,5,10,3,1],[2,1,5,7],8]],[[3],[[2,8,1,10,2],1,[4,6],[5]],[2,[0,5,1,5,2]],[]]]
+[[3,7,[]],[8,8],[[6,3,5,[6]],10,[8],10],[[3,[3,10],10,[],[3,8]],0,[0,2]],[1,6]]
+
+[[7,1,[10,[],[8]],[5,2,[1],[0,0,1,4]],3],[5,[0,0],10,[7,5,[],3]],[[[0,5,5],4],10,[9,[4],[10,3,7,1]],[[8,10,1,10,1],2,4,[9,3],[2,9,0]]],[[[0],[3,8,9,5],0,[4,2]],8,9,[[4,0],4,[1]]],[[4]]]
+[[[[0],2]],[[9,[5],[6,4,0],[8,7,5,5,5],3],[[8,3],[],10,10]],[3,6,8],[9,[3,[2]],2,[10,[3,5,2,10],8,3],1]]
+
+[[9,5,2],[],[5,[[4,6],5,3,3,7]],[[7,5,[],[5,10]],[],[],[[8,9,1],1]]]
+[[0],[[[]],7,1,2,4],[[[1,2,10,1,8],[7,10,9]],[],[[]],0],[10,9]]
+
+[[1,[[10],2,5,8]],[],[],[5,[],6],[]]
+[[[[3,3,8],4,4],9,[7]],[]]
+
+[[[4,[0,0],6,4],3,[[3,8]]],[[[1,3,7,0]]],[[[]],1,[[10,1,3,8],[5,8],3,[6,5,4,4]]],[[0,1,3,[8,6],[1,0,10]],4,[],[[6,8,6,4],[4,0,8],[],0,7]],[[[],7,[],8],9,[],3]]
+[[[6,[4],10,[1,2,6,10,6]]],[[[6,5],6,[2],1]],[[[6]],[1],[[9,5,5,2],8,5,8],[1,[]],[]],[7,[[2,8,0,4,5],4,7,[7,3,4,5,7],[]],4],[[7,2,5,5,5],[[6,1,5,5,10],[4,10,6,3,8],[2,8,6,0,1]],[[1,1],4]]]
+
+[[0]]
+[[[[],[7,3],[6,7,9]]]]
+
+[[],[5,4,7],[[[6,1,10],2,[5,7,9,5],[]],[0,[1,10],[8,4,5,0,7],[9],[10,0,5,5,9]],[[4],[],[],[6]],[7],1]]
+[[[[],0],[2],2],[],[[8,[0,5],7,[7,6,0,6],[3,0,3]],1,10,9],[9,8,[6],7],[]]
+
+[[9,[0,[4,8],[7,4,2,6,6]]],[[9,[6,5,3,6],10,5,4]]]
+[[[2,[4],[7],5],[[3,2,5,10,9],3,[10,5,8,4],3]],[]]
+
+[[],[],[9,[[8,7,6,6],7,0],[4],5],[[[5,7,4,0],1]]]
+[[[1,6],5,[],[1,[10]]],[0,[[9,8,10,8,10],0,7],5,[[5,3,8,10],[7,9,2,0,0],8],[0,[6,0],4,[0,7]]],[[7,[5],3,6]]]
+
+[[1],[9,[[2,9]],[[2,1,1]],9,[]],[9,[8,[8,2,6,3,1]],1,0]]
+[[[5,1,0,0],[5,7,5,0,[]],3,8]]
+
+[[[],8,8,6],[[5,[],[9,8,2,9]]],[],[3],[3]]
+[[4,1,[2,5]]]
+
+[[[[7,8,8,3],7,10],[[7,0,4,4],0],10]]
+[[8,5],[4],[10],[5,7,[0,[8,7,2,3]],[]]]
+
+[[10]]
+[[[[2],8]],[],[],[1,3,[[3,4],[],[1,1,2,9]],[8,0,[9,0],3,[3,5,6]],1],[[8]]]
+
+[[[[5],[4,6],[0,8,10,0,7]]],[[3,[6],10,2],[],5],[],[]]
+[[[[2,1,2,9,9]],[[9],[1,4,4],8,[4,5,4,6],7],[[7,9,5],[5,2,0,4]],5],[[9],[[4,2],[1,7,5,9]],4,10,[2]],[2,6,2,7,[[9],[0],1,10,[3]]],[2,1,2,10]]
+
+[[[[5,0]],3,[8,2,10],[[7,6,2,9],9,5,[7,2,8,10,9]],0],[[[3,7],7,[]],6],[5],[1,3,3,[[3,9,8],[1,3,7,6],1,[8,0,8],8],[[2,3],[6,1],[8],8,4]]]
+[[[8,[1,8,3,9,6]],2,[10],[9,[0,0],[],0]],[[[4,0,8],0,6,8,[1,4]]],[7,2,[0,6,[4,8,0]],1,5],[2],[[[2,3]],9]]
+
+[[3,[5],8]]
+[[5],[[7,[7,2,8],[5,2,6,7],9,7],0,[],5],[[],2,3,[[8,9,2,0,8]]]]
+
+[[[[10,10],[6,10,10]],[],[3]],[10,1,[[],6,[3,9,0,1],[4,9],5]],[]]
+[[[0,[8]],[5,0,[3,8,6,5,1]],10,[9,[3,9,9,7,3],2,[1,0]]],[3,3,[[4,10]],3,[[0,7,4],5,[],[6,5,5,3,2]]],[[6,3,[],4,[10,1,0,0,1]],8],[[],[],8],[6,[7,[]],[]]]
+
+[[[4,0,[6,10,8,1,2]],[],7,1,[6,[0],8,[6,8,8,10,5]]],[[2],1],[[],4],[0,[9,[10,9],1,9]]]
+[[5,10],[[],7],[[6,[1,9,10,0,9],3,[]],5,[[7,7,3,2,7],[]],[],7]]
+
+[[2,1,9,3]]
+[[[]],[8,[[2],3,[10],[]]]]
+
+[[[9,7],[3,[]],4],[10,[9],[],[[5,7,0],[4,9,5,5,5],[5,2,0,5],3],[[],5,[1,6,0,2],[],[]]],[[],[0],[[6]],10,4]]
+[[9,10,[6,7,8],5]]
+
+[[[[9,5,4,8],[],[4,3,8,4,4],2],[1,3,5],[[],1],[8],[]],[5],[0,8,4,[9,4,3,5,[3,8,10,4,6]]],[[3,1],10,7,6],[2]]
+[[4,2,[[1,8,2,7],1,4,10,5]],[5,[[5],2,[0,6,6,5],1,[7]],0,7,[[7,3,3]]],[[5,8,[0]],5,[],5],[[]],[[],[3,4,[5,8,0],[3,8,10]],5,1,3]]
+
+[[8,4,8,9],[[[7,6,6,3],6,2,5,[5,7,6]],[],0],[[[5,7,10],0],[[5,4],3],7,2],[]]
+[[5],[[4,[10,6],0,6,[5,8,5,1,1]],9,5,7,[7,4,6,10,7]],[1,[4]],[3,[1],5,[3,[2,8,10],4,8]],[9,[[5,0],1,[4,0,6],[7,0]]]]
+
+[[[[10,8,8,5,2],3,[0,1,8,7,9],6],7,1],[],[[1,8,1],[4,[8],[6,9],5]],[[4],[[1,9],[9,2],[4],[10,10],[10,1]],9,2],[]]
+[[[5,[]]],[[[3],[10,1,0,1,7],[9,10,7]],10,5,6],[],[[8,[2,5,7,7],8]],[7,[[4],[8,8,6],9],[[10,6,8]],1,[]]]
+
+[[],[[[1,6,1,5],[2,5,5,3],[],0,5],[],[5],8]]
+[[[[8,3,3,3,1],[3,8,0,8,10],[6,10],[]],[8,[9],[4,3,9,8],[]],3,[],[[8,0]]]]
+
+[[[[0,7,2,9]],[5,[5,4,7],9,[9,8,2,4]],10,[[7,3,2],4,[8,3,0,10,1],[1,5]],7],[1,10,1],[]]
+[[[3],[10,[],[1,0,5]],[[9,8,8,8]]],[[7,9,2,1,[]],[4],[3,[10,0,3,0],7,[6]],10,[4,6,[2]]],[[[0],[],[10],1],6]]
+
+[[8,[[]],0,0,9],[0,0,3,[],[[9,7,2],[3,7,7,2],[7,6,4],6,5]]]
+[[],[6,8,[4,7],[2,10,[4],[1],[6,1,5]],7],[8]]
+
+[[3,[[1,0,8,5],5,[],[4],[]],5,[3,6,10,[],7],9],[4,[6,[4,4,5]],[]]]
+[[0],[0,[5,4,5,8,6],3],[10,6,[]],[5,5,10,6,10],[10,[0]]]
+
+[[]]
+[[],[2],[8,7]]
+
+[[],[[],7,[5],2,3]]
+[[[5,[9,5,10],6,[10,6],4]],[[[4,9,10,9,1],[8,2,4],5,[10,10,5],7],[2,9,2,6]]]
+
+[[],[]]
+[[3,2,[[3,3],10,7],3],[],[[],[]],[[[8,10,10,4,8],9,[4,8,3,0,4]],[8]]]
+
+[[[0,[9,3,10,2,4],4]]]
+[[],[2],[[9,6,5,[3,5,8,4],[9,9,3,6]],[8,[4,1,3],[]],0,0],[[7,2,[3,9,6,0],3,[1,3,10,0,3]],10,[[7,0,4,10],9,3],[[7],[7,6,6,4,10],[10,5,2,5],[4,1,10,8]]],[9,[[3]],[1,[9,6,10],[6,2]],[0,7]]]
+
+[[3,[[],9,6,5,6],[]],[[[6],7],6],[5],[4,[4,0,[5]]]]
+[[],[3,[],[8,[10,4,7]],[[10,3,4,1,10],4,5,8]],[[[6,4,2,8],[],5]],[5,0]]
+
+[[4,[[],[]],[]],[]]
+[[5,6,0],[[2,0],[[8]],8,9],[1,6,2]]
+
+[[[10,[],3,[8,1],[2,0,1,3,7]],3,[[1,6,4,2],[8,9,3,7],[1],[4,6,1,6]],7,[[0,1,7],[7]]],[[4,[4,0,6,1],7],2,5,10,[[7,10,4,3],1,5,[],5]],[[[2,6],[6],[6],[9,6,1],9],[[3,6,2,4],9,4,4],9,5]]
+[[6,[],8]]
+
+[[],[[[],[9,10,3,0],4,10]]]
+[[3,8,1],[],[9,6,2,1],[10,2,3,[[],1],[[1]]]]
+
+[[10,[],[[],1,8,3,[9]],[[],2]]]
+[[[[9,10]],1],[[7,6,6,[2,2,0],[3,1,10,0]],6,[]],[9,[[3,9,8,5],[4],1],[[8,10,8],4,[2,1,1]],6]]
+
+[[],[[]],[[7],7,6,0,[]],[[[1,0,6],3,10,6],[[3,2],[5,6,7],3,[],[2,4,0,2]]],[]]
+[[[[4,4,3,7],[2,5,3],8,10],0],[],[6],[[[1,9],[],[4,6,5,4],[10,2,10,9,2],3],6,[3,7,[3,8],[7]]]]
+
+[[9,5],[0],[[4,[],[]],[8,[]]],[8,[9]]]
+[[[[3,8,6,0],[9,9,9,3,0],1,9,6],9,[0,1,8],[6,[7,8]]],[5,9,4],[[[5,8,2]],[1,[],1,7,6],9,[7,7,2]],[],[]]
+
+[[[[5,4,8,7,4],8,2,7,10],4,[0,6,[6,9,2,6]]],[],[[1,[5]]],[5,6,9,1]]
+[[],[6,4],[[[3,0,2]],[8,1,[6,7,5,5],2],[7,5,6],[],10],[4,[[],6,[]]]]
+
+[[[[],3],9],[[0,4,[2,2,2]]],[],[[2,9,6,[9,9,2]],2],[[6,4,6,5],6,6]]
+[[],[[[],[],4,2],0,7],[[[9,7,6,10],9]]]
+
+[[7,[[8,2,6],[7,6,10,8],[4,6],[0,7,3,1],7],7,[[7],[],[9,0,5,2],[8]],[4,[9,8,10]]],[[10],[1,8,0,[]],[7,[8],8,7],[[3,2,1,3],9],[[10,0,8,10,7],0,[2,0,4,1]]],[[3,[6,0,2],[1,10],7],5,7,1,[]]]
+[[5,0],[8,[[10],[]],[9,10],[7,[9,4,0,5,0],6,4,[3]],[6]],[],[[0,[],[3,1,1],[],[9,9]]],[]]
+
+[[0],[0,[7,7,[3,5,2],3,[0,1,9,8]],[[10],[10,4,5,5,6]],[[4,9,4,8],2,[3],[7,5,2,7]]]]
+[[[[9,4,1],[4,10]]],[2,[4],[],[[],[3,2,5],7,4],[6]]]
+
+[[7,[[],8,[8,2,8,2],[3,1,3,10]]],[5,[],2,5,7],[2,[[]]],[],[[[],[2,6,8]],9,[2,2,3],[3]]]
+[[4],[[]]]
+
+[[[0,4],[6,1],8],[],[2],[]]
+[[],[[[2,4],[8],0]]]
+
+[[3,[7,[6],2,4]],[7,[[]]],[6,7,8,6,0],[],[]]
+[[],[9,0,1,[2,6,[3],[8,4,8,0,8],[2,1,4,7,1]]]]
+
+[[[0],0,0,[]],[],[[3,8,7],4,[[8,6,5],[1,9,8]],[],2]]
+[[3],[5,1,[1,[4,7,3,5,7],[7,1,5,3],[9,4,3]]],[1,[3,[4,7,10,8],[6,6,4,3,7],[4,1,7],8]],[7,[6,[0,2,8,10,10]]]]
+
+[[9,[],[]],[[9,[4,2,10,5,0],0],1,10,[1,[2,0,5,2],[6,1],[2],4],5],[4,[10,[1,6,6,9,10],[5],[5,2]],2,[[4,4,6]]],[1,[],10,7],[10,[4,4,[0,6,10,6,0],4],1,3,[3,9,[5]]]]
+[[[[2],[],7,[6],[9,8,5,5]],[[3,6],5,9,[7,3,6],[]],10],[10,[[8],[4,7,10,4,3]]]]
+
+[[4],[1]]
+[[[],7,[[],[9,4]]],[[6,[7,1,0],[7,0,3],5],7,4,7,9],[[3,[4,10]],8,9,1,[1,[0,9,0,9]]]]
+
+[[4,[[8]]]]
+[[2],[[[]]]]
+
+[[8,8,3],[]]
+[[4,10,[10,0],9,4],[[],[[9,5,8,8,7],3,[3,8,2]],[[10],[7,8,2],[3],[2,8,7]]],[],[1,4,[9,8,5],6],[[8,1,[9,7,6],[8,10,10,0,9]],[],8]]
+
+[[2,[[1,10,8,10],3,10,0,[0,10,5]],3],[3,[[8],[3,0,3,7]]]]
+[[],[[[2,10,3,7,9],6,[3,10,4],[7]]],[],[10,[2,[]],1,8,1]]
+
+[[3],[5,3,2,[[7],1,[5,9,0,9,4],[4,8,1,1],7]],[[1],2,[1,[10,6,7,10],9],5,7],[],[]]
+[[[0,[],10],[8,[],2]],[[[0,4,8,2],10,1,8],[5,2,3,[8,4,8,5,4],[0,5]],[7,8,3],[6,1,[10,8]]],[6,[],2],[]]
+
+[[],[7,[[1],7,0],[6,3,[9,9]],4]]
+[[],[4,[],[[6,6,3],9]]]
+
+[[9,[5,[9,8,2],9],0,9],[[[9,4,2]],2,2],[5,[],0,[[0,8,10,6],2],[[2,7],[9,5],9]]]
+[[7,[[6,4,2,4,3],[9,3,7]],2,1,9]]
+
+[[3]]
+[[6,[[6,0,8],[3,3,5,8],[]],[[4],[10,1,7,9],7,[]],8],[2,2],[[[3,0,7],[2,1,10,1,9],4,9]],[4],[9]]
+
+[[[],7,5,6,[]],[9,[[3,2],0,[1,3,9,8,5]],3,10,3],[7,8,[7],[8],2],[[],[[7],4]]]
+[[[[6,2],3,7,[6,5,3,0],5],2,0,[[5]]],[6,4,3],[],[]]
+
+[[7,[[1,3,0,1,3],[3,1,1,2,2]],5,10,[0,10,2,5]]]
+[[[],1,1,[]],[],[[],[1],[2],0,[[0,7,7,2,2],[2,6,8,1]]]]
+
+[[5,10,7,9]]
+[[3],[9,8,[[9,8,0],9,[7],5,[]],7],[[[2,6,10,7],1]],[3,[5,[7,1,10,0,10],6,9],10,4],[[4,8,[7,4,8,4,4],[],[3]],7,6]]
+
+[[[[1],[4,6]],[1,3,5]],[],[8,0],[[5,1,6,2],[],[[],1,[4,9]],[3,[10,9,5,5],[0,0,0]],4],[3]]
+[[9],[[[4,3,6,0,3],3,[],[0,10,3,4],5],5,3,[[7]]],[]]
+
+[[5,3,5]]
+[[],[4,[[1],[7],4,[],2],[],[[2,4,4,3,3],0,3,8]],[5,[],[[],5,1,4,2]]]
+
+[[2,[[6],1],1],[[[7,5,5],7,9,9],6,[1,4,10]]]
+[[[[0,8,8,1],[8,8,10],[5],[8,8,10,2],2],9,5,[7,1],3],[4,[4,[9,1,1,3,10]]],[1,[],[2,[9,0,4,3,10]],[5]],[[],10,7]]
+
+[[[0,[1,4,6,4,10],10],[1],6,2],[10,0,7,[4,[9],4,8,5],[10,[9,6,7,5,2],[1,6,6,2]]],[[2,[1,4],[6,5,3],4],[[6,7,7,8],[9,2,8,4]],9,7]]
+[[[5,[2,0,0,8],[8,5]],[[3],9,[9,0,0,0],[1],9],[2],[[],2,1,9]],[],[[9,5,7],6,[6],[10,[2,9,4],[],[]],9],[2]]
+
+[[5,[0,[10,4,0,1,5],[8,4],9,[6]],[[4,5,10,5,7],[],[2,5,9,7],[5,3,2,6],[6,3,1]],6,[]],[0],[2]]
+[[[],0,6],[[7,[5],[7],[7]],[[0,5]],[[8,0,10],[0,2,4,8,2]],10,[[]]],[[],[5],[[],10,1,4]],[6,[[2,5],[1],8,5],[[],[0,4,0,10],[10,6]],[2,8,[],10],10],[8,[10,[7,3,2],[10,3]],1,1]]
+
+[[[],[],[[]],0],[0,10,[9],[[0,5,1]]]]
+[]
+
+[[[10,[4,3,9],[7]],0,[9,3,0,7],9],[[]],[[[9,2,7],[6,10,8,9,10],10,8,[9,1,2,9,1]],[[10,4],[8,9,4]],5,[[9,1,6,2,10],[0,6,0,2],[4,7,8,2],[5,10,5,10,8]],[[0,3,1,9,1],[2,0,4],[7,9],[0,5,1,0,6]]],[5,5],[9]]
+[[[[6],2,[3,0],[0,5,5],7],[4,[0,9,9,0]],[10,[6,7]],9,[1,[1,0,7,2],[4,2,6,7,3],[5,9,3]]],[],[[[10],[10],[]],[[9,1,9]],[1,10,[]],5],[2,5,[7,[3,8],[]]],[]]
+
+[[[[4,4,2,3],[8,4,0,4,2],[],[9,1,7]],[],[[6,7,8,4,6],4,8]],[8,[],7],[]]
+[[5,5,[[3,10,1],4,8,[4,1,10,0,1]],8,[[9,2,1,6],8,[9,7,8,3,8],[3,6,10,1]]],[[[5,0,10,6],[0],[7,2,0],[1,1,1,2,3]],[0,[0,7,10,4],8,[10,9],[]]],[10],[[[10,7],[0,1,4],[0,6,5,3]]],[]]
+
+[[[[10,6,4,9,9],[3,3,9,5,4],[9,6,1,7,6]],8,[]],[5,[[],[0,6],[9,8,6],7],10,[8]],[3,7,[6]]]
+[[8],[],[[0,[2,4],[7]],[[8,3],9,[6]],[4,1],[6,2,10,1],[7,7,[2,1,2,4]]]]
+
+[[[[9,5],9,[8,1],[0,3,6,9],[6]],[[0,10,2,2],6]],[[[9,5,5]]],[6],[3,[],9,[[5,4,8,6,6],[10,6,6],[],9],1],[3,0,[[],9,[4],2]]]
+[[5,[],[[]]],[[10,[],[8,8,6,9],[1,4],[5,2,7,9,6]],2,9],[],[[],2,5,[5,6,1,8],0]]
index faa0216..9e999b3 100644 (file)
@@ -120,8 +120,8 @@ pub fn day11() -> String {
     let monkeys = day11::parse(&fs::read_to_string("data/day11.input").unwrap());
     format!(
         "part1: {}, part2: {}",
-        day11::run(&mut monkeys.clone(), 20, 3),
-        day11::run(&mut monkeys.clone(), 10000, 1)
+        day11::run::<3>(&mut monkeys.clone(), 20),
+        day11::run::<1>(&mut monkeys.clone(), 10000)
     )
 }
 
@@ -133,3 +133,12 @@ pub fn day12() -> String {
         day12::nb_steps(&heightmap, day12::Path::EndTo0Elevation)
     )
 }
+
+pub fn day13() -> String {
+    let signals = day13::parse(&fs::read_to_string("data/day13.input").unwrap());
+    format!(
+        "part1: {}, part2: {}",
+        day13::sum_indices_signals_in_the_right_order(&signals),
+        day13::product_indices_special_signals(&signals)
+    )
+}
index dc7720e..85ca7e3 100644 (file)
@@ -1,4 +1,7 @@
-use std::{env, time::Instant};
+use std::time::Instant;
+
+use clap::Parser;
+use rayon::prelude::*;
 
 mod day01;
 mod day02;
@@ -12,8 +15,19 @@ mod day09;
 mod day10;
 mod day11;
 mod day12;
+mod day13;
 mod days;
 
+#[derive(Parser, Debug)]
+#[command(author = "Greg Burri", version = "1.0", about = "Advent of Code 2022")]
+struct Args {
+    #[arg(index(1), exclusive(true))]
+    day: Option<usize>,
+
+    #[arg(short, long)]
+    parallel: bool,
+}
+
 fn main() {
     println!("https://adventofcode.com/2022");
 
@@ -30,27 +44,35 @@ fn main() {
         days::day10,
         days::day11,
         days::day12,
+        days::day13,
     ];
 
-    let args: Vec<String> = env::args().skip(1).collect();
+    let args = Args::parse();
 
-    // No argument -> execute all day problems.
-    if args.is_empty() {
-        let now = Instant::now();
-        for i in 1..=days.len() {
-            do_day(&days, i)
+    match args.day {
+        Some(day) => {
+            if day >= 1 && day <= days.len() {
+                do_day(&days, day)
+            } else {
+                println!("Unknown day: {}", day)
+            }
         }
-        println!(
-            "Time to execute all days: {}",
-            format_micros(now.elapsed().as_micros())
-        );
-    } else {
-        for arg in args {
-            match arg.parse::<usize>() {
-                Ok(day) if day >= 1 && day <= days.len() => do_day(&days, day),
-                Ok(day) => println!("Unknown day: {}", day),
-                Err(error) => println!("Unable to parse day number: \"{}\", error: {}", arg, error),
+        // No argument -> execute all day problems.
+        None => {
+            let now = Instant::now();
+
+            if args.parallel {
+                (1..=days.len())
+                    .into_par_iter()
+                    .for_each(|d| do_day(&days, d));
+            } else {
+                (1..=days.len()).for_each(|d| do_day(&days, d));
             }
+
+            println!(
+                "Time to execute all days: {}",
+                format_micros(now.elapsed().as_micros())
+            );
         }
     }
 }