main
mat ess 2022-12-13 21:44:30 -05:00
parent 81bf01201a
commit 462100aba0
5 changed files with 643 additions and 0 deletions

16
Cargo.lock generated
View File

@ -23,6 +23,7 @@ version = "0.1.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"chrono", "chrono",
"itertools",
"pico-args", "pico-args",
] ]
@ -125,6 +126,12 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "either"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
[[package]] [[package]]
name = "iana-time-zone" name = "iana-time-zone"
version = "0.1.53" version = "0.1.53"
@ -149,6 +156,15 @@ dependencies = [
"cxx-build", "cxx-build",
] ]
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]] [[package]]
name = "js-sys" name = "js-sys"
version = "0.3.60" version = "0.3.60"

View File

@ -8,4 +8,5 @@ edition = "2021"
[dependencies] [dependencies]
anyhow = "1.0.66" anyhow = "1.0.66"
chrono = "0.4.23" chrono = "0.4.23"
itertools = "0.10.5"
pico-args = "0.5.0" pico-args = "0.5.0"

23
inputs/13.small.txt Normal file
View File

@ -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]

449
inputs/13.txt Normal file
View File

@ -0,0 +1,449 @@
[[0,[[],[],[10,6],0],[5],5,9],[[5],7]]
[[[[7,10,2,0]],[[5],[10,1,7],[],[],9],[[0,6,2]]],[]]
[[5,[[9,3,4],[6,3,10],[5,9],8],[[6,6,1],5,10,1],8],[[[]],3,[[3,3,7],5,6],3,6],[],[8,[9,[7,10,2,3],9],10,[4,3,2,[7],7]],[5]]
[[[3],[[10,3,2,2],[0,1,1],[1,3],2],[7]],[[8,1,9],9],[2,[7,[10,7,6],8,0,[7,7,10,8,6]],[10,[],5]],[]]
[[7,6,[[]]],[[[],8,5],[6,[1,4,7,9],[0,5,1,10],[6],10],[[8,2],9,10],[4,[2,9,3],1,[4,9,6],10]],[[7,[9],[4,6]],[[5,4],3,[7,10,0,0,1]],3]]
[[6,5],[0,1,[5,[]]]]
[[9],[7,[0,[1,9,4],[4,0,9]]],[],[]]
[[6,[9,2,[],[9,7]],[[5,10],[],[6,0,1]],1],[[[10,1]]],[0],[8,[[],[2,2,2,4],[8,9,0],9],[4],7,0],[[],9]]
[[4,[3,[9,9,7],[0,8,1,7,5],[2],[1,0,7,0]]],[[],8,[],[[9],9,3,9,1]],[],[]]
[[],[9,[],[[],[],[7,4,4,5]]],[],[[],1,6,[1,[3,4,10],2,[6,8,7,9,0]]],[[],[1,[1]],0,9]]
[[[1],10],[[6],10],[[],[7],8,5,8],[[1,8,0,[7,0,8,4,6],8],[],[],[[9,1,9],7,[2,7,8,10],[9,1],[9,6,10]]],[2,7,[7,[9,4,3,2,7],3,8,[1,0,4]],4]]
[[[[],1],[7,7,[0,1,5,0]],2],[[6,6,[9,5,6,9],[],9],[1],5],[[],[[7,7],[7,4],[1,10,4,10],10,0]]]
[[[],[9,[3,2]]],[0,[]]]
[[[3,[6,5],[],4],[[6],9],[1,9,4,[8,2,2,4,6]],9,[[10,7,8],[3,6,1,10,7],[],[3],[10,10,4,5,7]]],[[6,[10],[7,10],4,[10,0,6,9]],4,9,[3,1,[5,3,0,1],[4,6],2],[[10],[6],[8,3],2]],[[[9,6,7],[3,1,1,9],2,[]],[0,[9,5,9,5],0,5,[4]],[[7],3,4,1,[9]],4,[2,2]]]
[[10,4,[[10]],9,[[6],5,6]]]
[[[[],1],3],[1,0,[[1,9]],7],[[2,8,8,9],[7],9,4],[[[9,0,4,1],[6,10,4]],[3,10,8],8]]
[[[9,7,5,4,2]]]
[[2,10,[10,[4,10,0,8],8]],[10,[3]],[5,10,8,[[3],[],[5,0,6],[6,5],1]],[[[7,6,8],[10],[10,3,10]],[[10],[],9,6,0],7]]
[[[],3,4],[2,4],[],[],[[[2,1,4,5,10],[2,9,6]],3,[]]]
[[],[[],9,[]]]
[[0],[[[],8,2,10],[[],[7,8,9,4]]],[2,[[7,10,4,0],1,10],10]]
[[[[0,5,3,8],4],[5],[[0,2,2,8,0],8,7,[4,8,10]],1]]
[[[[7,6,3,6,6],7,7,6,9],[4,[7]],7,[[6,7,6],10,[4,5,10,9]]]]
[[[4,[8]],5,[[],8,4],[9,[4,4,9,1,5],[9]],4],[[[6]]],[10]]
[[6,0,[3,1]]]
[[[[3,3,7,10],[8,7,8,0,4],[6,6,1,0,10]],[4,[8,6,1]],10,5,[[],[3],[]]],[[0,1,8,4],[5],[0]],[],[]]
[[[1]],[9,[7,1,5],[9,3,[1,4,5],5],7],[[],1],[[[2,4,4],[5,10,2,7],0,[3,2,3,0]],[[8,8],[4,5,0,7],[3,5,7,0,1]],[7,10,[],0,[]],6,10]]
[[[]],[5],[],[[6,1,[7,10,0]]],[[6,[9,10,4,9],7,[]],2,[6],[]]]
[[9,9],[10,8],[9]]
[[[[0,6,0],2,[8,10],[5,8,0,5]],[[5,7],1,[],6,0]],[5,6,[[9,4],3,[9,5,0,9,6],1,6],6],[2,[],[[4,5,1,9,2],[],[9,5,7,1]],[3,[5,6,9,10,1]],[[0,7]]],[[]],[10]]
[[0,[]],[],[[[1,9,1],7],[8],[[9]],[[10,9,10,1],[0,0,8,0,1],[10,4,5,6,9],[6,6,5],5]]]
[[[[8,7,8,9,10],[5,1,8,5]],[3,3]]]
[[[[9,2,9],10,[10],[],8],[[7,10,7],8,[4,8],5],[[3,2,7,5,9]],10,[9,[1],5]],[],[2],[],[[],[[],4]]]
[[[7,[0,5,7]],6,[[4,6],2,[7,9],10]],[9,10],[[8,10,1],[],0,[[0,10,3,3],0,0,9],1],[[8],9]]
[[[[2,7,1,2],5,6],[9],8,[]]]
[[[10],[2,3,[6,2]],2],[10],[]]
[[[6,3]],[5],[],[[[0,3,6,1,3],5,7,2,6],3,[1,7,[6,2,7],[7,7]]]]
[[[10,[],4],4,[10,[0,5,1,0,10],10,5],[],10],[[],[2,[4,3],5],5,3],[3,[7],3,[[7]],8]]
[[0,3,[[5,3,10,10]]],[[9,[8],[7,3,2],6]],[1],[[6],3,7]]
[[[[1,4,7,0],[],9,[5,2,4,3],[1,2,5,4,10]],8,0,[4],[]]]
[[10,3,[5,2],[[4,8,4,10,6],[6,6,1,6],8,5,0]],[0,[[1,10],[],2],4,[[4,9,6]],10],[3]]
[[],[[[5,8],[2,10,2,2],[5,9,3,6,10],[8,6,8,4,7]],10],[9,7,[2],[2,9,[3,3,1,10,10],4,[]]]]
[[[4,9],[10,[],[7,3,5,6,2]],2,[[8],0]],[[0,[1,2,5,7],[10,0,3,9,7],[8],7],9,[3,[2,2,3,3,0]],6],[[3,10,6,[7,4]],[2,0,1,5,10]]]
[[3,10,[4]],[8,[8,5]],[0,2,[1]],[[9,[4]],2]]
[[0,1,[9],9,6]]
[[3],[],[],[[5,6,[2],1],0,[8,[3],1,[6]],3,[1,10,[6,9,0]]]]
[[10]]
[[[0,10,[6,1]],7,5,[[8,2,7,3],[2,8,1]]],[0,[[8,1,6,2,0]],[5,[8,0,10,7],[6],2,1]],[7,1,3],[8,[[8,10,10],9],3,8,1]]
[[6,0,10,2]]
[[1,[8,[]],[[8],[3,8,10,1],[10]],2,[1,7,3,[10,1,4],10]]]
[[[6,7,10,[4,8,9,10,8]]]]
[[9,[[],[6,3,6],3,7,[0,3,9,6]],6]]
[[],[[[2,5],[3,3],9]],[]]
[[6,10],[]]
[[],[[3,[7,0,10,5,10],[2]],[8],[[10,9]],6,[]],[2,[[],9,2,10],2,8],[6,9,0]]
[[10,[],[],[[3,7,9,0],6]],[],[[4]],[[1,4,6,4,[10,1,0,2,2]],[[3,5,4]]]]
[[[[10,4,0],[8]],[[5,0,2,9],9,[8,1,10,10,4],10,4]],[8,[7]]]
[[[[7,3],6,[0,7,7],[9,4],[4]],[[7,4,7]]]]
[[[],[9],4],[[2]]]
[[9,[]],[2],[[8,9,5,7],[[],[10]],7,[[8,1,6,3,8],[1],[6,8,10],2,[8,5,7,4,6]],[]]]
[[[[9,2],4],7,[[5,7],[0,2,4,10,7]],9,6],[],[[5],[5,0]],[7,8]]
[[],[10,[[],[],8,[],4],0,[],[]],[[1,[6,9,6,7,6],9,[]],3],[[4,[],[],5],1],[0,[],2,[[9,8,6,7]]]]
[10,7,3,6,3]
[10,7,3,6]
[[[[1],[2,9,3,7,1],[0,2,10]],[4,3,3,9],7]]
[[[[9]]],[5],[[[8,9,5,7,2],5,10],9]]
[[[6],[[0,10,8,6,2],2,1,1,[3,7]],5],[[0,[8,3,4,6,7],[1,8,3,3,3],[5,4,8,9,4],5],2,2],[]]
[[],[1,[[4,8,6,6],[4,10,3]],[[],8,3,[2,4,4,1]],[[4,2],9,[]]],[[[9],[],[9],7],9,[[6,0],[8,1,7,4,0]],[10]],[[0],[9,6,5,[9,0,3],[1]],1,[4,[10,9,10],9],[10]]]
[[0],[]]
[[[9,1,7,10,[6,6]]],[[[6,3,2,2]],[5,9],10,5],[[[0],3],[7,10,0],[6,[2]],[6],[2,[2,4,6],[5,6]]]]
[[6,8],[],[[],9,2,10,[[7,8,8,6]]],[]]
[[3],[[[8,1,9,4,10],[1],[10]],6,10,[[4,6,2,7],0,1,[3,8,6,9,6]]],[],[[[],[5,9,3,9,3],[4,8,5,3],3],[8,8,2,6],[2,10,3]]]
[[[0,[],[6,1,3,1],[]],4,[0]],[2],[6,6,6,[[1,0,2,9]]],[7,7],[[[7]]]]
[[[2,5,5,3,[5,0]],[[6,7],[3],1]],[[[8,10,7,5,1],6,[8,10]]],[6,0,6],[3,[[10]],4,4,9]]
[[],[9,[[8,9,10,0,8],[5,6]],8],[[[8],[4,8,9],10],5,1]]
[[9,2,[[7,9,8,9,6],8]],[[[7,3,1,8],[10],7,[10]],6,[[],5,6,6,1],[0,7,[10,4,3]],7],[[0,9,[],9,[8,6,8]]]]
[[3,4,7,7,0],[[10],5,[[4],[10,7],[8,5,5,7],[8]],[]],[[10,[1,0],0]]]
[[[7,2],[[10,6,8],[7,7,6,0],10,[10]],[10,9,9,4,[0,1,1,4,5]],8,[0,4]],[[],7],[[[7,1]],5],[8,0,2,[[7],[0,3,6,10]],[]],[7,1]]
[[4,2,[10,2,10,7,0],[[7],1]],[6,[],[[3,0]],3,8]]
[[],[[[6,8,0,2,1],[]],[[8,4,6],2,[10,2,10,5,5]],[7,[],[10,6,0,10]],3,[1,4,[6]]],[8,[8,[10,4],10],[9,8,5,1,6]],[[[],4,0],1],[[6,[10]],[[2,5,8,0]],1,8,[[],3]]]
[[[],[[0,7,7,1,10],9],[],[8,1]]]
[[],[[10,2,[2],9,[0,2,5,9,4]],8,10,[1,[7,9],[5],10,[3,7,0,7,8]]],[],[],[[[10,10,2],[],[2,6,6,9,5]],[3,[10,1,6],[9,5,4,3,5]],2,[2,3,3,[4,10,7,3,4]]]]
[[5]]
[[7],[2,[6,[2,4,5,6],2,9,[4]],7,6],[[]],[7,[[10,10,3,7],9,[9],8],5,[],10],[]]
[[4,4]]
[[5,0,9,5],[[],7,[[1,4,9],[10,2,3,9,1],[],[3,8,5,6],0]],[],[1],[[[7],[8,3,10]],1]]
[[],[0],[]]
[[[5],3,[[],[3,10,7]],0],[6,7,4,3,6],[3,5,[[3,1,0,4]]],[[3,[7],[7,1,8,6,1],7,[]]]]
[[[[3,1,0,3,5],3],9],[],[[],[],[[4,3],[6],4,[]]],[[],10],[10,[8]]]
[[9,[6,7,[7,10,4,8]],1],[9,2,[[6,1],[10],5,10,8],[[2,7],5,8,[1,7,1]]],[[],4,[]],[[[1],9,9],[],[8],[[]],3]]
[[[[1,1,8,4],5,[],[7,8,7,5],[]]],[7,[[1,0,7,8,10],[0,5,7,3,6],4,1],9,3,[[4,8,8,1,7],7]],[9,1,[2],10,10],[[[7,7,7]],2]]
[[[]],[10,[3,[],[7,0],[]],5,[]],[0],[]]
[[2,3],[8],[5]]
[[[[9,8,4],0,6,10,[2,0,5]],1,[8,[]]],[[5,6,1]]]
[[6,4,10,1,4],[[[10,7,4,9,7],[7,0,5,7,5],6],7,6,[0]],[[[7,3,10,2],[9,4,1,3],[]],[[4,7,10],9,0,[5],7]],[[8],[[0,10],0,8],0,6]]
[[4,8]]
[[9,[[9,1,2,5,4],0,[4,1,2,0],[]],[1,[3,6,9,9],1,[2,9],[9,5,8,1]],2,4],[8,10,[[3,0],[0,8,1,10],6]],[]]
[[[[3,3,8,8,7],[3,8,2,3],8,[3,1,5,9],[]],[[7,9,4,2,3],6,5]]]
[[1,[2,[2,4,8,8],5,9]],[8],[[[10],[]],1]]
[[[[10],[0,5,1],[4,1,3,8],3,[0,8,5,10]],[[],[8],0,8],3,8],[[8,5,[7,2],[1,1,8,6,1],[0,5,8]],4,2,7],[[],[4,8,[2],6,3],6],[],[1,[[7,3,0,7,10],0,1,4,8]]]
[[[],2,[3,[7,7,4,3],[9,5,3]]],[[[],2,6,[]],8,[3,7],[2],9]]
[[[[1,0],2],[2,3],[],[[6,1],0,[],[10,8,0],[3,0]],1]]
[[[],5]]
[[[4,7,[10,10,5,9,2]],10],[0,[[1,4,1,4],[3,7,2,8,0],6,[],1],[[],[0,4,6]],[]],[[]],[2]]
[[[[5,0,3],3,6]],[6,[0]],[[0,[7,7,7,1],[6,3,7,3],[9,8],3],9,[3,[9,10,7,6,8],[0,3,2,0],8,[5,4]],8,[[9,4],[1,5,4],[0,1,1,4,5],7]],[]]
[[3,0,3],[6,[[0,6,5,6],[3,2,2,4,10]],[[],[8],[9,8,7],2,2]],[[],7],[]]
[[2,9]]
[[[3,[]],3,0],[],[[],[],[3,0,2],[[5,0],[7,8,1,10],[6,5],[2],3]],[[[9,8,2,8]]]]
[[3],[10],[[[8,4,6,5,1],[0,2,4,0],[2,2,1,4,0],2],[5,[3,0,0,1,10],[6,8,3,7,6],7,2]],[[6]]]
[[10,4,[]],[[7,2],[9,[9],[6,3],[9,1,10],5],6,[[],10,[0],[7],[2,7,3]],2],[[1,[],6,[8,5,0,3,2],[8]],[[1,3,2,1,9],[0,10],[3,0],[10]]],[]]
[[2,[],[[2,3],[5],[4]]],[1,[[1,7,9,5,4],1,[],3]],[],[8,0],[]]
[[[],[[6],9],[6,[4,0,6],7,9]]]
[[5,[[],[1,1,9,3,9],[4],9,6],7],[6,[],[10,[9,7,5],[2,2,6,7,6],[0],4],[[]]],[[],9,10,[[],5,[1,5,0,4],9],1]]
[[0,[[],5,5,1,[7,5]],[],0,10],[[[1,5,5,6,7],0,[0,3],[6,4]],0,3,6],[[1,[6,4,2,10,9]],9,3,[8,7,[7,7,1],5,6]],[9,0]]
[[[[7,4],5,[6,6,0]],[1,[8,1,6],9],3,[[0,10],[0,3,8],[7,3,5],9],[]],[9,9,[[1,7,10,0,0],[2,1,1,6,4],[7,1],[],[7,7,5,9,5]]]]
[]
[[[7,6,[1,8,0,7,7],[3,7,8]],[[0,6,6,2,1],1,[5,2,5,2,8]],[[],[5,0],0,6,[9,1,2,0,0]],4,3],[[[10,9]],10,4,[1,[10,7,1,3]]],[2,6,4],[5,1,[[2,5,3,8,7],1,7,[7,2,6,7],1],[0]]]
[[],[3,10],[1,[[],[2]],5,9],[[[3]],8,0,[[0,7,10,9],9],2],[5,5,[[2,3],[7,7,9],9,[4,4,0],5]]]
[[5,5,8,3]]
[[8,4,[[6,1,7,2],[9,9,9]],[[8],1,[],1,0],9],[[[],[9,10,9,2,5],3],6],[[],8],[[[3],[5,10,7]],[],[7,3,0,4],[6]]]
[[]]
[[[2,[4,10],[4,5,5],1],8,0,8],[2,[]],[[[7,5,9,0]]],[[10,9,[3,0,0]],[],6,6,3]]
[[10,8,0,[2],8]]
[[4,1],[[1,[8,6,10,1],[6,6,7,4,4],[],4],4,0]]
[[],[6],[[[2]],7,7],[[],[],[[],[5],[6,6,0,2,9]],4],[0,[],8,[],6]]
[[4],[[5,[2,2,7,10,0],[10,8,6,6,6]],[[],[5,3]],[2,[9,5,2]]]]
[[8,[]],[[[6,2,8,3,3],7,7,0],[[8],3,10,0],6],[4],[[[4,2,2,0],[8],5,2]],[[10,1,6],[[4,2]],10]]
[[[],10,8],[0,9,8,[[7,5],[3,6,7,4]],4],[6,2],[2,[4,[10,8]],1,[3,[9,7,8,3],4]],[[4,[3],[10,7,2,9,10]],0,1,9]]
[[3],[],[[10,10,[3,7,2,9,7],8],4,8,6],[4,[],6]]
[[0,5,[4,5,[],[9,2],[8,2]],[[4,4],3],[6]],[]]
[[3,10,8],[[[1]],[2,[],1,4,[5,7,3]],[10,[7,6,8],3,4],[10,8]],[[],[[2,9],[]],0,8],[8,6,2],[]]
[[5,6,[10,5,[]],[5,5,0]],[[[],9,[8,1,10,4]]]]
[[[[],4,3],[[1,6,1],0,4,3,[]],[[]],[[7,6,2,2,0],8,[0],10],[]],[[[0,1],[]],[[2,1,6]],[6,0],9],[[2,0,3,[10,10,10,3,0]],2,[0,[4,6,7,6],2]],[[[3,2,9],3,6],3,9],[6,[[3,3,6,8],0],8,[]]]
[[10,[4],10,0,1],[[2,[10,10,0],5,8],0,6,7],[1,8,[[10,9,10],9,2],3],[2,10,[0,8],[8,2,1]],[[],[10,6,0,5,[4,6,7,3]],[0,9,2],[2],0]]
[[[5],[5,6]],[0],[9,[4,[5,10],[10,3,8,9],6],1],[0,8],[]]
[[[0,[0,9,9,1,1]],[],1,[10,[]],4],[[5,[],[1,4,6,5],[]],[]],[[3,[],0]],[4,[[],[1,7,8,1]]]]
[[[[9],9,[6,6,7,4],0],7,[[4,1,7,2],0,[10,10]],[[8,4],8,7]],[[],[[4,9,0,6]]],[5,[[],8,[5],10],4,[7,7,[8,10,6,0],8]]]
[[[],4,1,[[6,1]]],[8,[[10,0,4],[5,3,7,2,0],4],9],[[6,[7,6]],5,[9,[4,1,6,10],[2,7,8],9]],[],[0,[[9]],6,[2,10]]]
[[[],6,[],1]]
[[8]]
[[[],[[10,3,5,1,1],[5,4,4,6,1],[],[0,0,7,10],7],[[4,7,2,8,1]],[2,[5,2,7,2,4],[7,0,7,9]],1],[[[1],0,[6]],[[7,0],10,[7,5,9]],[[3,0,2],[4,4],7,3],4,6],[[4,[6,0,3]],9],[4,[8,[8,0,9,8,6]]],[4,[[7,7,4],2,[],5,3],[8,9]]]
[[8,8,1],[[],[[1],[0,7,4]]],[8,[[5,6],7,[4,7,4],[1],3],1,[7],1],[3],[2]]
[[8,[[2]],[[6,2],7]],[]]
[[2,9,2,0],[[3,5,3],5,9,[4,3,5]],[]]
[[[7,[],3,8],[7]],[10]]
[[3,3,4,[[],9,[10,5,1,1,8],6,9]],[]]
[[7,4,3],[[[6,2,5],[5,5,9,8,9],[9,7,6,9,3],[9,1,4,2],7],7],[[10,2,[7,2,3,7,3],[3,9,3,8]],8]]
[[[[7,0,3],3,[5,5,1,2,6],[2,6,5],[9,0,8,8,6]],2],[6,7,[[0],[5,2,0,5,0],6,[0,2,1],[1,7,6,1]]],[[[8,7],1],5]]
[[],[0,10,[[9,3],6],[4,2,[10,4,1]]],[[],[],[4,[6,6,5],1,6,[3]],[2,3,6],[7,[]]]]
[[8],[[2,[5,7,5],7,[2],6],6],[10,[9,1]],[3,5,[[10,9,1,2],[4,4,8],2,8],7],[1]]
[[[[4]]],[[],[7,[8,1,10],[],10]],[[1,6,[10,7,9],2,10],4,7,[[7,3,5,5,6],4,[3,10,5,6,5]]],[[[9,10,1,10],[10,6],[0,1,8,2,6],[],10],[[],7,[3,9,3],[]],[7,[1,0,5,3],[9,1,8,6]],0],[2]]
[[0,[[],8,10,[],8],[[3,9,4,8,8],5,[3,6,9],[4,4,1,6,8],[10,8,9]],[]],[10,[[2,2,4],4],[2,[9,0,9],[9,8,3]],9,[]]]
[[[[3,3,2],2,1,2],[[7,8],[10,2,3,10],4,[]]],[]]
[[[[1,3],8,0],[[3]],[],[10,3],[[]]],[10,[[2,7,8,2,0],[5,7,3,4],[0,5,0]],10,7,4],[[],[10],4,[[9,0,0,3,1],1,0,4]],[[1,[6,7,5,1],9,[6,8],10]]]
[[[5,[4,0],4,[8,2,1,7,3]],7],[5,10,4,9],[8,2,[[],[2,5,0,7],8,3],3,1],[[5,[0,10,10,2],[7,5,6],0,4]],[5,[[1,7,5,9,10],[],[4,4,3]]]]
[[[[8,5,9,6],3],[],[[7,0,2,4,1]],9,6],[4,0,8,3]]
[[],[6,[7,[7,6,4,10,10],[],0,[]],[1],[[1,4,5,9,8],6,[6,4,2],[5,3,7],10]],[6,[2,3,10,[0,6,9,10]],[0],[[10,2],4]],[[[],1,0,[],7],[[0,4],5,[9,3,7,10,1],2],0,4,4]]
[[0,10,8],[[8,9,[1,10,9,3],2,1]]]
[[5,4,4,10],[[]],[4,2,[3,6,10,10,[5,7,9]]],[0,4],[9,7,9,4]]
[[],[1,[[]],1,0,[10,[]]]]
[8,8,4,6]
[8,8,4,6,10]
[[[[6],1,6,4,3],9,[],[[6,3,7],3,[5,2],0,[10,1]]]]
[[7,5,5,7],[],[[8],3,9,8],[[[7,10],[3,1,4,0]],[7,8,[3,1,10],[4],[7]],[[]]]]
[[[[5,4,1,10,8],9,[2,0,2]],[[7]],[[],2,[1,1,5,1,7],9,[5,9,10,1,4]]],[[9,6,3]],[5,[5,7,[],10,[8,1,0]],[[10,5,10],1,10,4,[4]],10],[1,3,9,[[0,7,7,2],9,[4]],[0,[0,2,7,5]]],[2]]
[[[[9,1,2],[8,0],10],10,[[],6]],[7,7,0,4],[[2,[4]],[],[],3,[[3,1,2]]],[[5]],[6,5]]
[[[[1,7,5,3]],0,6,[[3,8,0,9,0],[],[6,7,10]]]]
[[],[],[9,[0,8]],[],[[[0,7,7],[],[2,10,2,7,6]],[[7,8,5],5,[3,1,9,0,8],8],[7,[8,10,6,3],0],[]]]
[[6,4,3,[[7,6,10,3,8],[6,2],1],7],[[[4,5,3,0]],[3,[1,9,10],2,10],6,5],[],[[10],8,[9,7],2,[]]]
[[[[9],4],[3,[7,7,6]],[],7,[10,7]]]
[[2],[[[3,4],2,[9],[5,8,8,0,2]]],[5],[1]]
[[[[2],7],[]]]
[[],[[],1,[6,[9,1,2],[],[6,7],[0,7,4,3,8]],7],[[[1,7,8],9,1,[9,2]],[[5,2,10],[6],4]]]
[[10,[2,6,5,9],[[4,10,0,10,4],[8,3,3,9,7],[5,0],8,9],5,10]]
[[[2,0,[2,1,0,0,5]],10,[],0,10]]
[[[3],5,[5,[4,2,2,8]],1,[6,[]]]]
[[],[],[6],[[],[6,0,[3,8]],5],[6,2,1,6]]
[[5,[],6,9,9],[],[4,9],[2,[10,2],8,0,[8]],[[[5,2,10,8,10]],[6,10,[8,9,5],[],[6]],7]]
[[5,[10,0]],[[7,6,[6,0],7,[4]],[],6,[5,[7,0,6,3]],[4,[],4,[1,1],9]]]
[[],[[[7,8],[2],[9,3,9],8,8],[]],[[[2,2,4],[2],1,1],[4],[6,2,1]],[[[5,1,0,2,0]],[[1,7,5,7],[]],[],4]]
[[[[4,7,2,8]],[[9,3,0,7],5,5],1],[[[2,9,2]]],[[[4,8,8,10,7],4,[10,8,4,3,7]],3],[[[8,1],[10,8,2,7,8],5,[5,8,6,9],[0,9]],5,0],[4]]
[[[8],[[3,2,0,1],[]],[0,[],[7],[4,5,7]],10],[1]]
[[[[10,4,9,6],[5,5,4,5,4],1,[1,1,5],8],[7],7,[0]],[[[2,8,5],[0,5,2]]],[]]
[[],[[[],8,[2,5,3,9]],[],[4],[10,7,8,8,[]],8],[[7,2,[0,0,0,5,1],[10,2,10,5]],6],[[[3,5,3,9],10,[],9],[]],[]]
[[8],[[3,[0,2,8],8,[]],[[3,9,2,4],1,[9,10,6]],[[7,4,6],[3,7,4],[],2],8],[],[2,[2,6]]]
[[],[[[5,6,2,4],[1,9,10,1,10],[1,6,0,7,3]],[[10,1],[4,7,4,0,1],[3,4,4,8,7],[5,10,4,0,8]],9,[2,9]]]
[[[7,8,6,8,[2,3,7,1]]],[9,[5,8]],[4,5],[[[]]],[[[0,4,8,10],3,5,7,2],6,[[],8,7,6],[],[8,1]]]
[[[[],8,[1],[6,3,8,0,3],10],[[],[]],[[7],2,[],6,[]],3],[[2,[],4],7,[[6,4,1,9],[4,4,1,5],[6,7,1,3],[10,1,0,8]]],[[1,0,[]],[[3,5],1],[6,7,4],[3]],[6,[],[10,[8,9,3],1,[5,3]],[[1,3,4,9,8]],[9,10,[5,1],1]]]
[[0,[[7,2,1]],0,[9],9],[[],[]]]
[[6,10,5,9,[[],[0,9],7]]]
[[7,[[4],4,[0,6],[]],[4,3,1,5,1],[6,[10,10,1]],0],[],[[[10,0,10],4,9],7,2,2,7],[[[6,10],[9,4,9],[1,9,10,7],[7],[4,3,3,7]]]]
[[0,9]]
[[[[],5,[],[4,8,1],8]],[0,4,[10,[8,5,10],[7,8]],[[7,3,7],[2,6,6,6],[],[8,1]]],[4,[],[[9,1,2,1,5],[10,4,5,10,3],8]]]
[[10,[4,[6]]],[[2,[0,4,3,4,4],4],0,3]]
[[[],[]],[[3,1,[3,4,10]],[1,[3,3,5,4,8]],10],[2,7,4,[[1,4,2,8],[5,10,0,7],2,[7,2],1]],[[],[]],[[[4,0],8,4],9,6,[[9,2,3,3]]]]
[[[6,5],5],[1,7,6,5],[[10,[0,7]],8,0,5],[[[4,1]],[[],[2,6,7,4,3],6,[9,7],[0,0]],[[6,9,9],[2,4,1,2],0,6],[3]]]
[[1,[[7,10],5,10,5,[3,2,3,7]],[2,10,2,0],10],[[8,9,[4,8],8],[[5,7],[1,4,8,10],1,5,7]]]
[[[5],[9,[8,4,10,3,10],4],9,4],[[2],9],[[4,5,0,[7],[0,1]],[[0],[6,2,3,10]],9,5,[[2,7]]],[[0],[[]],[[]],9,1],[8,[0,[9],[],[2,4],[10,6]],2,7,4]]
[[2,[1],2,2,4],[],[[9],10,[[4,7,10,2,2],[5]],2],[[0,[3,7,8,4],[],10],2,[[],[4,6,2,10,5],[7],5]]]
[[],[10,10]]
[[[],9,[7,[1],2,[],[10,3,6]],2,10]]
[[1],[8,10,[[7,1,6],[6],[],[2]],[]],[]]
[[[[2,6],10,10,[10,8,8],3],9,[[8,9],2,8,[0,2,2],5],4]]
[[2,8,0,0],[[[7,8,8,7,10],[0,0,2,5,0]]],[8,[[10,1],[],[7,0,1,6],5],[[],0],[6,4,0]],[4,[8,[3,2,0,4,5]],[]]]
[[[]]]
[[0,[[5,3,4,4,2],[5,7,7,7,1],[3,1,10,3,5],4,0],[9,7,10,[4,3,4,0,3]],7],[],[[[1,10,9,0,9],8,[2,6,0,10,7],[7],0],5],[[]],[[[6,1,4,9]],6,[[10,8]],4,2]]
[[10,[4,[5,3],4,1],[[0,5,1,1],4,10,[8,6,5,1]],0],[[5,2,[]],4,10,[[]],7]]
[[],[[5,0,0,7],4],[[[]],[1,[]],[6]]]
[[],[[[4,7,7,6,10],5]],[],[5,10,[[3,0],[5,1,9,0,3],9],3]]
[[[],1,2,2,1],[[3,[0]],1]]
[[2,4,[7,1,[2,1,10],10],7]]
[[],[[4,[1,8,10],[0,5],[4,7,6,3,9],1],[1,8,[4,10],8,[6,1,3,1]],[[2,7,5],[7,10,9,2],2],[8],[0]],[10],[[[0,5,5,4]],9,[[8,0,1,0,9],4],[[10],[4,1,2,0]]],[[[4,4,3,1,8],9,3,[5,3]]]]
[[[],[[7,8,8,9],2],[3,9,6],[3,8]],[3,1],[3],[[0,0,2]]]
[[],[[6,8],[[]],[],9,[8,[],7,7,9]],[[7,0,0],[[],[]],[7],[[7,0,6,1,10],8,[1]]],[3,5,[],[[1,10,0],7,[9,7,3,10],2],8]]
[[[0,[5]],4,5,1,[[3,4],1,[5,4,7,5,1],[1,8]]],[7,[1,8,8,[3,2,8],9],[],[9,7,5]],[[],1],[]]
[[[[1,2],[2,10]],9,5],[[[7,1,9,9],5,0,[],7],2,9],[],[2,[3,3,[3,8,0,8,1]]],[1,[[6]],[[7,10,5],6],[]]]
[[6,7,6,[[],[0,4],6,2,[1,6,9]]],[5,[1,[7,5,10]],8]]
[[[3],9],[2,9]]
[[],[8,[[9],7]]]
[[],[[8,10,7,9],8,[[4,6,4]],[[5,1,2],4,[9,3,5,1]],5],[[],5,[[7,5],[]],[3,0,[4,2,8,0]],5],[[4,2,7,6,5],[3,1,5,7,[6]],6],[[9,5],[2,[2,1],[0,9,1],3],[[10,6,1,1],[0,9,7,6,10]]]]
[[],[[6],6,8],[8],[3,[1]]]
[[[6,[],[4,0,10,4]],[7,6,2,[4,1,2]]],[[[6,1,1,7]]],[[10,10,1],[10,4,1,10,[3,2,0,3]],5,[[],[0,10,9,2]]],[]]
[[[],4,[5,[8,10,4],2,4,[7,8,3,4]],8]]
[[9,[5,[4,9],[8],4,[5,10,10,5]]],[5,[[0],[10,4,10,2],[]],5,0]]
[[[0,10,7,1,[4,6,2]],[[9,9],5,[]]],[1,[[10,2,0,7,0]],5,7,[]],[3,[[],8,[],[7,3,4,10,1],[5,6,3]],2],[],[]]
[[1,5],[6,6,7],[],[[[9,9,7,2],7],[0,0],6]]
[[],[[],6],[2],[2,9,0,9]]
[[3,[2,[6],10],[[],[3],8,5],10],[[],[[0,8,2,7,1],[6,5,1],8,[0]],[[8,4,2,8],0],[2],4],[],[10,[4,[4,2,2,1],2,0,2]]]
[[],[],[[],[0,8]],[],[]]
[[[[5,7,7,2],7,5,2,[10,2,0,2,1]],2],[6,10,2,[]]]
[[[1],[8,4],[[3,7,5,2,5],5,4,[0,4,7,0],[1,5]],7,[[9,5,3]]],[[9],[],[[5,1],5,1,6,1],[0,[10],6,8,[]],[[9,5],[8,0],[7]]],[[6,9],[[3],6,[2,1],[0,3]],9,[],4],[4,[7,[5,4]]]]
[[[]],[[1,8,[4,8,7]],7],[[]],[[2,[2,9,5],[2,6]],[[3],[0,10,7,9],[2,4,1,3,6]],9],[[9,9],2]]
[[10,[[2],[7,8,7,7,9],3,[6,4,6],6],[[10,8,2,7],1,[8]]]]
[[[[4,7,4,0,1],6,[9,6,8,1,3]],[[],9,[]],3],[[9,[],5,[],3],[[1],6],3]]
[[10],[],[4],[[],[1,5,[5,5,6,6]],[[1,3,7],[8,6,0,3],[2,9,1]],[]]]
[[2,1,[6,[8],2],[6,[9,2,0,7,3],[8,10],2,[]]]]
[[[[1,5],10,[4],4],7],[[6,3,[4,1]]],[4,4,[],6]]
[[],[0,[[5,6,7,10],0,[6,10,2,4,7],4,[6,10,10]],[1,0,0,[3,7,3,6]],[3,1]],[[[9,3,9]]],[0,[7,8,9,[4,2,4]]],[0,[2,1]]]
[[[1,1,[],10,[6,4]],4],[3,6,9,[[8,9,3,1,7],1,0,7,3]]]
[[[1,[8,8,4,5],[]],[[10,8,3],[3],[7,2,4,6,1],8,[6,10]],2],[0],[4,[2,[5,5,1,8,9],9,8,3],[7,7,9],7]]
[[10,8,7,[8]],[[],[[8,8],3,9,[10,0],3],[8],0,[0,[9,3,3],8]],[[6],3,10,7,[5]],[10],[[],[]]]
[[[3,9],8],[[[3,3,2,8,8],10,9],6],[[[4,2,4],[3,1,5,4,2],4,1,1],3,4]]
[[],[6],[4,[[1,2,0],[2,10],10],8]]
[[[7,2,7,0,2],[[4,4,0,1],6,[],[2,8,1]]],[[0]],[[6,[9,6,9,3]]],[[3,[1,5],[8,9,2,9],7],[[],[4],10],1,[[4,7],0,10,6],[]]]
[[8,2,[[0,7,3,0,0],3,2],[[],[10],[],[1]],[8,[],[6,6,2,5,5],[6,9]]]]
[[[9,[7,0,1,8],[],2,[]],[5,2,[2,7,1,9,10],5,[0,7,8]]],[5,1,[[6,10,5,5],[0],4,0,[2,5]],0,6],[7,7,[3,2,1]],[[[9]],9,[[],[3,6,8,5,10]]]]
[[[[9,1,5,10],9,5,[1]],[[8,2,3],[4],[8],[4,4,5,9,5]],8,5,9],[5,[3,[2,4,5],3,8,2],[[3,0],1,[9],[10,1]]],[],[2],[]]
[[[[2,1,5,9],5,[5,0,5,9,1],8,4],6,1,4]]
[[[[0,5,0],0,1],[]],[[[6,6],8,[1,4],7,[7,4,2]],[],[[7],9,10,[0,10]],[4,4,[]]],[[[0,5,0],6],0],[10],[[4,[10,0],[7],3,[1,1,9,10]],6,[],3,[[0,8,8,2,5],[4,6],[],10,9]]]
[[[]],[[[0,3,7,5,8],6,6],10,[[],[7,8,10,3,9]],1,[]]]
[[2,[],[5,[9],10]],[5,[[]],3,[5,3],2],[[[],0],[8,[5,10],8,1]]]
[[[1,7,[0,4,1,2],[10],9],[[3,9,2,10],0,[],[8,0,5,7,0]]]]
[[5,[],[],8]]
[[5,[6,[]],[[3,0,4,4],[4,1],[1,3,2,5],10,2],[[]],[]],[],[2]]
[[2,3,4,[[6,1,5],0],10]]
[[],[]]
[[10,[],5,4,[[1,5],1,[5],0]]]
[[1,[[2],9,[]]],[[],3],[3,8,[6,1]],[[1],[10],7,8,3]]
[[[5],[0,6,[5,7,9],6],[]]]
[[[],[4],10,[[]]],[2,[[10,9,1],[],[]],[[],7,10,[7]]],[[3]],[[[4,2,5],1,[3,6,0,1,3]],0,[[4,4],[5,8]]],[0,[[6,2,10],7,4,[],[]],[8],2,[10,6,[8,4,2]]]]
[[7,[5,7,2,[8,0,2,0,3],[7,5]],[]],[],[[[],[5,6,3]],[[5,4,1]]]]
[[[2,[9,5,3]],1],[[[10,9,5,2],5,6,[],[]],8,5,9],[7,[[],5]]]
[[[10,[3,10,0,8]]],[[[],8],1]]
[[4],[[]],[[[],1,[7,3,1,4,0]],[[8,1,7,3],[3,8,3,7,6],[7,0,1],[]],[10,10,4,[],[6]]]]
[[7,[[1]]],[],[9,4,[],[[5,9],[5],[3,4,4,2,4],10,[7,0,6,1,6]]],[[],2]]
[[7],[6,[6,0,[5,8,5,2],10,[9,8,10,8]],0],[[7,[3],[0,4],[7,0,6,7]],[[8,6,2,9],4],7],[5,[[2,8,8,6,1]]]]
[[],[10,[9,[],5,8,3],[[10,0],[2,2,9,8,10],[5,7],[2],2]],[[[3,10,6,1,4],[5,6],[],6,[6,8,6,0]]],[],[]]
[[8,10,[6,[],2,4,6],0,[[0,5,6,3],5]],[[8,1],2,[],[[6,10,7,4,4],[8],[8,5,10]],[3,5,9,6]],[[9,[6]],[[10,4,2],3,4]],[[3],3],[[],5]]
[[[[0,4,0,1,5],[0,10,6,10],[10,4,10],[0,2,5],[0,10,6,8]],[5,7],[[7,7,10,10],[3,0,2],7,[]]],[3,[]]]
[[[],0],[0,[[8,10],3,0,10]],[5,[[5,3,5,7],1]]]
[[2,[6],8,7,1],[[[10,9],[9,10,6],5,[8]],6,[9,[1,9],[1,9,4,8],6],[[9,0,8,4],[7,2,8]]],[3],[[[5,1,1]],[9,[0,1,3],1,[8,5]],7,8],[4,[[6,6],2,4,[9,1]]]]
[[9,[8],[],2,2],[0],[4,[2,1,[6],[],10],[[1,5,8,0,10],1,[1,8,10]],[10,1,[4],[8,5,8,5,5],4]],[10,[],0],[6]]
[[[[1,1,10],8,1,[8]],[7,6,4,3],4],[[[3,2,4],7],[10],9,[[0,2,1,0,3],10,2],[[],[9,0,2,4,8],1,7,0]],[[[0,0,0],[],8,[7,7,7],9],[]]]
[[1,[[],[2,3,4,3],3,[5,0,4,3,7],1]],[0],[],[6],[[[8,6,0,3,9],9,8,[10,3,10,10,6]],[3,[6,3,5],[4,0,7]],8,0,[6,4,[6,6,4,8,4],[6,7,10,1,3],9]]]
[[8],[],[[[3,7,7,7,7],4]],[2,[7,[],3,5]]]
[[[[],3,9,[10,3,8,10],[]],10,1,4],[3,[5,[0,9,8],[3,4,0,1]],[[1,6,1,7],1,[5,4],5],[]],[[4,[6,9],[3,10,9,0,5]],[[],5,[1,6,9,3],6,[5,10,6,10]],[3,[0],[6,8,6,0]]],[4,7],[[[2],[8,5,9,1,5],[2,8,3]],3,[0,[9,3,1,4,9],[6]],10]]
[[8,[],[3],3,5],[6,1,2],[],[],[[[4,6,10,1,3],1,1,6],3,[],[[0,2],5,[],[5]],[[9,7,0,8]]]]
[[10,[]],[[[],5],[4,[6,2,10,8,9],[8,4,3,10],[8,3,8,0,5]],5,[[],[2,0,10,2,5]],7],[3,[],[5,6,4],9,0]]
[[[[1,7,5,1,4],[5]],0,[[5,6,6,7],[5],[4,2,8,6,6]]]]
[[6,[[4],10],[]],[],[[3,5,[2,2,1,7],[1,8,5,1]],[0,6,[6,6,10]],0,9,5],[[]],[[[6,4,8],1,[7,7,7,0]]]]
[[[],[],8,10,2],[]]
[[],[8,[[4,8,2,9,3],[4,0]]]]
[[[[],0],[[],10,8,9]],[[6,5,3,[3,7,3]]],[[[5,0,2,3,9],9,8],[0,3,[3,2,5],9],2,3],[[2,8,0,[4,2],2],2,[[8,3,10,0],[3,0]],0]]
[[6,[[5,4,4]],3,7,0],[[[5,0,10,9],6,1,[10,9,5],[4,4]],[5,[1,6,9,10],[],0,[]],[],9],[1,[[5,10],10]],[3,[],[[2,10],[7,5]]],[[1,[0,7,8]],[[6,0,5]],8,8]]
[[4,6]]
[[[[1],[5,0,2,7,4],[3,0,1,2]],0,[10,[10,2],9,[9,6,1,7],5],[[10,0,4,4],[4],3]],[6,2],[1,[5,9],9,9]]
[[[2,[8,9,3],4,2],[5,4,[],[3,3]],2,8],[],[[[8,5,6,7],[10,0],[7,2,5,5,4],6,[3]]],[0,[0,[]],[[4,7,9],4,[3,3,8,2,8],8],[10,[],[4]],5],[[[7,10],7,[0,3,8],[4,4,8,7]],[[2,0,5,1,5],0,6,[4,1,8,4,5],7],3,[6],[8,[],2]]]
[[10,[1,[3,8,7,5],[2,3,3],[3,3,3]],[7,1,[],[5,8,7,9]]],[[4],[8,1,4,[2,3,9]],4,[8,8,[8,10],[9,7,6]]],[1,[10,1],5],[[],[[5],[]],[[10,10,5,4,10],[9,0,0,8,3],[],[0,4,0,4,9],3],3,[[],[5,0],10,[3,5]]],[[[9,5,1],[4,5],8,1]]]
[[[]],[8,[[10,4,8,4],[1],[6,2],7,9],8],[7,2,[[2,3,0],[5,0]],8],[[2],0,4,6,7]]
[[1,4,[[5,10,6,5],8],1,10],[2],[[[6,9],[3,2,9,7,6],[7,10,3]],[3,[4,3,4]],10,4,2]]
[[[],[3,[]]],[[[7,0,3,3,6]],[3,3]]]
[[0,9,8],[4,9,[3,[2,8,7,2]],4],[8,0],[4,0,7,[]],[]]
[[8,[[2,4,0,2],[5,10,2],9,[3,5]],7,[5,[4,5,6,3],[4,7,10,0],7,1]],[3,7,[2]],[[[9],3,[10,8,0]]],[[4,[],[9,7,0],[5,4],8]],[[],[9,[0,10,1,3],[4,5,8],2,6],9,[1,0,7,[0,1]]]]
[[[[6,5],[7,7],[8,5],1,7]],[4,[0,10,9,4]],[[6,[5],0,7,[10,9,3,6,4]]],[[[0,3],[1,3,3,8,0],2,4],[9],[]],[[[8],0,[4,6,2,4,3],3,[]],[[6,4,10,7],2,1]]]
[[9]]
[[[[8,9],[2],7,3,7]],[[],[[8],[],[3,4,4,2],2,5],2],[3,6,10]]
[[[],2,1,3,[]],[10,[[],[8,1],3,8],[[],[],[4,7,1,6,10],[1,9,1,6]]],[[],9,[1,[1,0],[4],[],7],8],[],[4]]
[[[6,8,9,[10,1,2,2,2],[4,0,4,2]],[[5,8,3,2,7],9,0,1,[8,7,3,6]]],[]]
[[1,[],4,10,[[6]]]]
[[9,[[9,6,10],8]],[6,[5,2,[4,9,2,7],[9,7],10]]]

View File

@ -6,6 +6,7 @@ use std::{cmp::Ordering, fmt::Display};
use anyhow::Error; use anyhow::Error;
use chrono::{Datelike, Local}; use chrono::{Datelike, Local};
use itertools::Itertools;
use pico_args::Arguments; use pico_args::Arguments;
fn main() -> Result<(), Error> { fn main() -> Result<(), Error> {
@ -286,9 +287,162 @@ solutions! {
let map = Map::from_string(input); let map = Map::from_string(input);
map.best_navigate().into() map.best_navigate().into()
}, },
],
[
// day 13 part 1
|input| {
let pairs = Value::make_value_pairs(input);
sum_matching_pairs(pairs).into()
},
// day 13 part 2
|input| {
let values = input.lines().filter(|line| !line.is_empty()).map(Value::from_str).collect_vec();
find_decoder_key(values).into()
},
] ]
} }
fn find_decoder_key(mut values: Vec<Value>) -> u64 {
let (p1, p2) = Value::divider_packets();
values.extend([p1.clone(), p2.clone()]);
values.sort();
let k1 = values.iter().position(|v| *v == p1).unwrap() + 1;
let k2 = values.iter().position(|v| *v == p2).unwrap() + 1;
(k1 * k2) as u64
}
fn sum_matching_pairs(pairs: Vec<(Value, Value)>) -> u64 {
pairs
.iter()
.map(|(left, right)| left.is_ordered(right))
.enumerate()
.filter_map(|(i, ob)| {
if ob.is_some() && ob.unwrap() {
Some(1 + i as u64)
} else {
None
}
})
.sum()
}
fn split_list(input: &str) -> Vec<&str> {
let mut items = vec![];
let mut start = 1;
let mut list_depth = 0;
for i in 1..input.len() {
match &input[i..i + 1] {
"," if list_depth == 0 => {
items.push(&input[start..i]);
start = i + 1;
}
"[" => list_depth += 1,
"]" => list_depth -= 1,
_ => {}
}
}
items.push(&input[start..input.len() - 1]);
items
}
#[derive(Debug, Clone, PartialEq, Eq)]
enum Value {
List(Vec<Value>),
Number(u64),
}
impl PartialOrd for Value {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
if self == other {
Some(Ordering::Equal)
} else if self
.is_ordered(other)
.expect("Bad is_ordered in partial_cmp")
{
Some(Ordering::Less)
} else {
Some(Ordering::Greater)
}
}
}
impl Ord for Value {
fn cmp(&self, other: &Self) -> Ordering {
self.partial_cmp(other).unwrap()
}
}
impl Value {
fn wrap_list(self) -> Value {
Value::List(vec![self])
}
fn divider_packets() -> (Value, Value) {
(
Value::Number(2).wrap_list().wrap_list(),
Value::Number(6).wrap_list().wrap_list(),
)
}
fn make_value_pairs(input: String) -> Vec<(Value, Value)> {
input
.trim()
.split("\n\n")
.map(|pair| {
pair.split('\n')
.filter(|s| !s.is_empty())
.map(Value::from_str)
.next_tuple()
.unwrap()
})
.collect()
}
fn from_str(input: &str) -> Value {
if input.starts_with('[') {
let items = if input == "[]" {
Vec::new()
} else {
split_list(input).into_iter().map(Self::from_str).collect()
};
Value::List(items)
} else {
let n = input.parse::<u64>().expect(input);
Value::Number(n)
}
}
fn is_ordered(&self, right: &Value) -> Option<bool> {
match (self, right) {
(Value::Number(left), Value::Number(right)) => {
if left == right {
None
} else {
Some(left < right)
}
}
(Value::List(left), Value::List(right)) => {
let mut left = left.iter();
let mut right = right.iter();
loop {
match (left.next(), right.next()) {
(None, None) => return None,
(None, Some(_)) => return Some(true),
(Some(_), None) => return Some(false),
(Some(left), Some(right)) => {
if let Some(b) = left.is_ordered(right) {
return Some(b);
}
}
}
}
}
(Value::List(_), Value::Number(_)) => self.is_ordered(&right.clone().wrap_list()),
(Value::Number(_), Value::List(_)) => self.clone().wrap_list().is_ordered(right),
}
}
}
#[derive(Debug)] #[derive(Debug)]
struct Map { struct Map {
map: Vec<Vec<isize>>, map: Vec<Vec<isize>>,