From f552ce3ce45720608f8eb96aeff7b779fd1a0c74 Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Tue, 13 Dec 2022 16:13:26 +0100 Subject: [PATCH] Use Clap for arguments parsing Add a -p for processing all days in parallel --- Cargo.toml | 2 + data/day13.input | 449 +++++++++++++++++++++++++++++++++++++++++++++++ src/days.rs | 13 +- src/main.rs | 56 ++++-- 4 files changed, 501 insertions(+), 19 deletions(-) create mode 100644 data/day13.input diff --git a/Cargo.toml b/Cargo.toml index 3e0b2fe..3a6371a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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 index 0000000..3509604 --- /dev/null +++ b/data/day13.input @@ -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]] diff --git a/src/days.rs b/src/days.rs index faa0216..9e999b3 100644 --- a/src/days.rs +++ b/src/days.rs @@ -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) + ) +} diff --git a/src/main.rs b/src/main.rs index dc7720e..85ca7e3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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, + + #[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 = 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::() { - 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()) + ); } } } -- 2.45.2