From 1b28bf18482405fb4ec78528d0c5b258a3d99fa2 Mon Sep 17 00:00:00 2001 From: Patrick Auernig Date: Wed, 14 Dec 2022 22:26:40 +0100 Subject: [PATCH] Add solution for 2022 day 13 part 1 --- 2022/Cargo.lock | 29 +++ 2022/Cargo.toml | 1 + 2022/README.md | 2 +- 2022/day-13/Cargo.toml | 13 + 2022/day-13/Justfile | 5 + 2022/day-13/inputs/puzzle.txt | 449 ++++++++++++++++++++++++++++++++ 2022/day-13/inputs/test.txt | 23 ++ 2022/day-13/src/bin/part_one.rs | 91 +++++++ 2022/day-13/src/lib.rs | 70 +++++ README.md | 2 +- 10 files changed, 683 insertions(+), 2 deletions(-) create mode 100644 2022/day-13/Cargo.toml create mode 100644 2022/day-13/Justfile create mode 100644 2022/day-13/inputs/puzzle.txt create mode 100644 2022/day-13/inputs/test.txt create mode 100644 2022/day-13/src/bin/part_one.rs create mode 100644 2022/day-13/src/lib.rs diff --git a/2022/Cargo.lock b/2022/Cargo.lock index c3ef457..b081d2f 100644 --- a/2022/Cargo.lock +++ b/2022/Cargo.lock @@ -63,6 +63,13 @@ dependencies = [ "petgraph", ] +[[package]] +name = "aoc-2022-13" +version = "0.1.0" +dependencies = [ + "nom", +] + [[package]] name = "autocfg" version = "1.1.0" @@ -106,6 +113,28 @@ dependencies = [ "either", ] +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "nom" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "petgraph" version = "0.6.2" diff --git a/2022/Cargo.toml b/2022/Cargo.toml index 28bd8c9..8922b6d 100644 --- a/2022/Cargo.toml +++ b/2022/Cargo.toml @@ -12,6 +12,7 @@ members = [ "./day-10", "./day-11", "./day-12", + "./day-13", ] diff --git a/2022/README.md b/2022/README.md index 5b02890..5ff430b 100644 --- a/2022/README.md +++ b/2022/README.md @@ -16,7 +16,7 @@ | [10] | ✓ | ✓ | [Rust] | | [11] | ✓ | | [Rust] | | [12] | ✓ | ✓ | [Rust] | -| [13] | | | | +| [13] | ✓ | | [Rust] | | [14] | | | | | [15] | | | | | [16] | | | | diff --git a/2022/day-13/Cargo.toml b/2022/day-13/Cargo.toml new file mode 100644 index 0000000..963e1bb --- /dev/null +++ b/2022/day-13/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "aoc-2022-13" +version = "0.1.0" +edition = "2021" + + +[lib] +test = false +doctest = false + + +[dependencies] +nom = "7.1" diff --git a/2022/day-13/Justfile b/2022/day-13/Justfile new file mode 100644 index 0000000..7d08527 --- /dev/null +++ b/2022/day-13/Justfile @@ -0,0 +1,5 @@ +@part PART INPUT_FILE="inputs/puzzle.txt": + cargo --quiet run --bin part_{{PART}} -- {{INPUT_FILE}} + +clean: + cargo clean diff --git a/2022/day-13/inputs/puzzle.txt b/2022/day-13/inputs/puzzle.txt new file mode 100644 index 0000000..06dc527 --- /dev/null +++ b/2022/day-13/inputs/puzzle.txt @@ -0,0 +1,449 @@ +[[[[2]],[2,[3],[9,3],10],8],[[9,[5,7,5,5],6,8],[[],7,7,2]],[[]]] +[[[0,[5,6,5],[0,4,1]],[],[3],[]],[5,0,1],[1,3,6,[1,[7,4]],10],[]] + +[[[],[[1,1],9]],[],[[10,[1,6,3,8,6]],8,[2],10]] +[[[6,[2],6,5,[4,10,5,8,9]],[3,[10,4,0],1]],[7,[[2,10,7,9,3],[10,6],2,6],[7,[1],[3,5],[3,8,5,8,2],[]],2],[9],[[9,[0],[0,6,3,7],2,6],[1,1],4,2],[]] + +[[[[8,0],8],4,[[4,8,8,10],1,[3],4]],[2],[]] +[[7,[0,[1,0],3,[2,7,1,3,8]],[6,0,4,0],6,6]] + +[[[[5,9],[4,9,2,10,5],0,[7,9,3]]],[3,[6],[4,[5,4,6],[5,4,0,5]],[[5,5,7],[10,6,5,8],[9,0,6,3,1],2],[9,[1,8,3,5,10],[0,5],3]],[6,8,[[5,9],0,5,[7]]],[[]],[[9,[],[1,8,8,0,4],[0,4,1]],0,[[],9],[]]] +[[10],[[[],[3],4],[6]],[[10,5,[],[],5]]] + +[[[3,8],[0,8,[],6]]] +[[],[[6],6,[5]]] + +[[0,9,4,3],[[[4,5,4]]]] +[[0,[[9,0,5],6],[3,3,[10,0,1],3,4]],[0],[2,2,5,3],[[6],9,0,8,[[9,6,4]]],[6]] + +[[[[5,2,5],10,6,1,8],1,[[],3,[8],[9,1,1,4,1]],[]],[2,[[8,6,1],[3]],[[],[9,9]]]] +[[[5,8],2]] + +[[[0,[8,2,6],[5,7,1],[10,3,7]],7,[0,9,8],[1,8],[]],[[],[9]],[[1,[9],10,8,7],[],2,[[4,5,4,10],9],8],[[[],3,3]],[[],[[],[7,10,3,5],1,[0]]]] +[[2,[3,9,[4,1,10],3,[]],7,8]] + +[[],[5,[[9,2,5,1,8],[],9,[7]]]] +[[[9,10,[3,10,10,8,2],2],8,[[3],8,[2,2,1,3]]]] + +[[2,7,[6,3],[]]] +[[[5,8],8,[],[1,[7,8,3,8,4]],9],[[],1,[[2,7],1,[8,10,6,9,5]],10,[[],7,[]]],[],[10,10,4,0,6]] + +[[[[3,0,0,6],[1,3,1,0,3],[8],6,5]],[2,8,[8]],[9,[[5,8],9,[0,2],1,8],[]],[10,1,[0,[],9]]] +[[4,[[10,7,10],4,[]],[[1,7]],[[],8,[10,10],[8,4],[2,5,4,5,0]]],[[[5,9,2,7],10,3],[],8,[1],[[0,3,9,8],[],7,[],9]],[10,5,1],[8,[2,3,[2,9,1,4,3]],0],[[],5,[5,[8,8,2],10,2]]] + +[[],[6,[4,[9],1],[7,0]],[1,[],[[5,7]],[7]]] +[[[5,[8,5,2,7,5]],[[3,6,9],[6,7],7]]] + +[[2,0]] +[[[7,2,[],1,2]],[],[[],2,[[0,6,0,6,8]]]] + +[[0,2,[],7]] +[[4],[],[7],[9,[[4,7,5],9,6,3,[7]],4,[]],[7,1,[4],[[7],[9,7,10,1],[1,9]],3]] + +[[[[0,4,5,7],9,2],8,[5],4],[[10,3],[[4,10],[5,3,5,6],4],[[8],2,[4,0,2,8],[7,1,4,2,3],[9,3]],[0,[5,6,7],10,[0,3],[9,6,7,9]],[5,4,[2,10,7,10,7],6]],[[],2],[[8,1,8]],[[[],5,7,0]]] +[[0,[[],3,[10,10,3,8],1,4],6,[],1],[[[],7],[],[10,3,[],[9],[2,4,4,10]],5,6]] + +[[[],[],[[0]]],[[2]],[[1,5,3,[0,5],[6]],10,1,[[],[9,2,8],[2,6,0,6],7],[[6,6],8]]] +[[[2,[3,2,10],[3,3],3],10,[],[[],[6,7,6,5],5,7,[3,6]]]] + +[[],[[[4,0,3,2],0,[8],1,3]]] +[[6],[],[[[7,10,0,1],[0,8],5,[9,0,9,3],[9,8,9,5,7]],[],[[],[9],5,7,[5,0,8]]],[[[6,6,5,5],6,[2,2],0],[3,[10,6,3,4,9]],9,8],[]] + +[[[],1,3],[[[6,8,3,6,4],8,2,0],9]] +[[],[8,[]],[[[10],[9,8,5,7],8]],[[[1,5,4],4,[9,6,10,5],0],[[7,5,7,0],6],1,9]] + +[[1],[[7,[]],9],[[],0]] +[[[[9],7,4],1,[],1,6],[8,3,5,[],[[3],8,[4,3,3,3,3]]],[5,[2,[5],[8],10,[7,5]],[9,[3,2,1],6],8,7]] + +[[[],[],0,9],[[0,[6],9,8,0],[[],6,3,[],0]],[[10,4],[[]],[[6,6,0]],6,[[2,1]]],[[],8,[[2,5,0,10],[8,10,4,6,4],9,[1],9],7,[[4,7],2,2,7,3]]] +[[1],[8,0,[8,[10],[],0,6],7,5],[],[[],[3,[8,0,4,7,9],4,[1,3,2],[7,3,0,8]],[[6],[]],4,[[3,7,7,9,2],1,6,1]]] + +[[[[0],3,7,1],[0,6,[6],[3,9,7,8]],3,2],[],[[],[10,[10],10,1]],[[[9],[0,4,7,8],3,[10]],6,4],[5,4]] +[[[1,3,[8,2,1,10,6],0,6],7],[7,9,7,2],[]] + +[[[[5,6,3,5],3,[10,4,8,6]],4,1,9,0],[[4,9,10,[5]]],[4]] +[[0,[1,[7]],[[],10,3,[5,6,3],[1,6,6,3,6]],[[]]],[[[],[7]],[9,9,[10,1,5,10],[]],[[0,9,9,5,9],10,4,[10,0,8]],[[]]]] + +[[],[],[10],[[5,6,8]],[[[7,5],[7,8,2]],3,5,4,[9,[1,0,8,7],[2],9]]] +[[],[[6],4,9,6],[[1,[4],2],7,1,[[5,3,5,0],10,6,9]],[]] + +[7,6,8,4,7] +[7,6,8,4] + +[[6,[6],4,[[],[1,9],3,0],10],[[[],[9,6,2]],[[4,4],9]],[]] +[[3,2,4,6,[1,3,9,10,[8,3,9]]],[3,[7,[7,8,2,6],1,[1,5,1]],4],[[[4],9,8],[[10],5,[10,10,4,3],4,5],10,[[2,10,3,9],[10],10,[5,1,10,6,9]]],[],[4,0,[]]] + +[[5,[[5,0,0,9]],[8,[5],4]],[3,[[2,2]],[],4,[[9,2,8,1,8],[5,3,1,8],3]],[[[1,7,3,2],9],[0]]] +[[[[1,2,0,1],6,[5,7],[9,7],1],[9,3],[1,[]],10]] + +[[10,9,[[5,2,7,9],[4,2,9,6,2]],3],[]] +[[],[[4,7],[[7,3],10,2],3,8],[[2,1,1,9],[7],3,0,10],[8,5,0]] + +[[[],[[4,1],10,[5]],1,[8,[6,8,8],[9,0,0,2],[5,8,3]]],[],[2,[[10,8],[1,1],8,[6,7,2],0],[],9,3],[[[6,3,2,4,7]],10,0]] +[[],[4,[[5,5,3,9],5,9,[],[2,3]]]] + +[[[1,10,[6,6,5],10]],[10,6,[10,5,10]],[[],[0,6,[5,0],[]],9,[],0],[1,3,9]] +[[],[[1,2,6,[4]],10,5,[],2],[]] + +[[[8,[8,10],[1,5,4,3],1]],[[4,[4,7,8,2,0],[],[7,0,2,3,3]],10,5],[[[3,9,6,1,6],9,6],[2,10],6,[9,7,2,[3,4,4]],3],[],[8,4]] +[[2,2,[]],[[[2],9,[2,3,2],2],[[4,0,3],[4,3,0],0,0]]] + +[[10,6,10,6]] +[[[1]]] + +[[0,6,[6]],[9,[7,4],[[3],[9,6,10,4,3],0,[],[]]],[[0,5,[4,0,8],6,4],[0,[],4,[5,8,8,5]],6,6],[[[8,1,8,8],[2,9],[1],[7],4],0,1],[[],1,4,3]] +[[1],[[[4,8],[],[5,3,10,1,2]],[8,[6,8,5,1],0,[5,0],7]],[4,5],[[5,10],10],[10,8]] + +[[[]],[8],[[[10],9],[[5,5,5,5,6],[3],3,4],6,[],[7,[0,5,4],9,6,3]],[[3,7,4,[3,4],7],[],0,0,[1,10,10]]] +[[10],[7,2,[8,5,[4,10,1,9],[]]]] + +[[[[7,7]],[0,3,8,9,2]],[2,[[6,0],10],[[],2]],[[],10,2,9],[6,9,[10,[9,0],[0,9,3,2],10],8,6],[0]] +[[[8,[7,6]],10,10],[],[],[[2],10,8,2]] + +[[1],[[6,8,10,4,5]],[[3,[9,5],[],[]],7,8],[4,5,[[0,6,1,9],[7,3]],[[7,3,2,7],5,9,2,0]]] +[[[0,0]]] + +[[5],[]] +[[[[0,2,2,8,5],0,[10,7,5,7,9],[10]],10,3,4,3],[[[5],0],4],[10,9,0,9,[[3,10],[3,8,2,5,1],[3,1,2],0,10]]] + +[[8,4],[9],[2,3,[[1,1],[5,6,2,8],3,8],8,6],[3,[[7,2],[4],5,8,[]],3,[],[[8,1,5,9],[7],[],[7,3],10]],[]] +[[[5,[10,8],6,[5,10],[]]],[[]],[5,[[6,3],[],1,[4],3],[6,6,[0,6,4,3,0],[0,10,10,2,8],4]],[5,[[8,1],[2,1,7],0,[9,10,0]],2,[[7,2],[9,3,7,8],[3,10,5,1]]]] + +[[9,7],[[8,[5],1,[2,10,2,4]],2]] +[[0,4,0,10,4],[],[[[1,2,4,9],[5,6,5],[5],3]],[9,6,[[],7,3,[]],8,6],[7,6,3]] + +[[1,8,9,8,1],[8,6,[4,[6,10],[6,0,9,3]],4],[],[[[],2,[],[4]],[[1,1,10,8],10,3,[]]]] +[[9,0],[]] + +[[[[2]],0],[9,[1,10],4,[],[[9,5,9,1],[10,4,0,10]]]] +[[5,[[],[2,9,4,5],7,7],9],[[[8,5,1,2],7,4,[9,1,5,9],[7,5,3,9]],2,[[2],[8]],8,[[5,1,7,10],1]]] + +[[[[1,0,7,6],[]],1,5],[[0,3,[2,8,0,6],6],[],[9,8,[6,7],[3],[0,5,6,3,10]],7],[9],[],[[],6]] +[[1,3,[]],[8,9,9,[[10,5,9,2],[0,1,1,10],[3,9,9,5]]],[8,[[6,5],8,[4],[0,9]]],[[0,2,[2,1,2,2,4],8,8],[[],[9,5,1,10,1]]],[]] + +[[2,5,[[9,9,1,1,4],[4]],0],[6,0],[[[0,9,2,2,10]],[9,[5,0,7],5,[]]],[9,4,[[7,4,6,10],[],[6,1,2,3]],10]] +[[3,10,[1,[7,9],[6,3,7,2,10]],6,[[2,8,8,6]]],[[2,9,[],[8,2],[]]]] + +[[3,[7,[7,4,9],[6,9,2,6],[6,2],[2,6,4,9,7]],4,[]],[[],6,8,3]] +[[[[6,3],10],0,3],[[[3,0],[],[8,1]],[[],6,0,[2,6,6,0]],1]] + +[[[[9,4,0,9,9]]],[],[1],[[[5,10,1,10,9],9,[3],[],[1,5,9]],0,[[10],3,10,10],8]] +[[8,7]] + +[[[[4,3,0,5,9],[6,1,0,10,9]],[8,1],9]] +[[7,2,3],[],[7],[[7,[],[6,4,0]],3,[[5]],[10,[6],[9,8,4],10,[1]],7],[5,9,10]] + +[[1,[5,[8,8]],10],[1,[],[[7,2,10,8],7]],[3,1],[10,[[5,7],[10,1,9,5],10],10],[[1,[]],10,3,[[0,1]]]] +[[[[],[0,6,4,9]],[[],[10,6,2],7,3,[8]],[[2,4,8],6,[7,9,5],10],10,[8,[7,9],8]]] + +[[8,2,[],6,7],[[[8,5,10,2]],[8],4],[[0,8],0,[]],[[[],[],8,[2],[1]]]] +[[3,[[]]]] + +[[5,[[1,4,5,7,0],5,10],7],[0,[],[5,[],[]]],[[5]]] +[[3,[[10],2,[9,7,2,1,6]],[[2,7,2,10],2,6,6,[]]],[1,0,3,[[1,5,5,7,5]]],[[[0,0,7,1]]]] + +[[],[],[3],[]] +[[[[8,8,5,1,9]],5,1,[[0,7],[5,5,3,9],1,0]]] + +[[[[5],4],8]] +[[[[10,1,10,1],[8,8,6,10,2]],[]],[],[[]],[[[0,5,9],[8,3,9],[],[2],10]]] + +[[3,[1],[[1,7,8,7,0]],5,[8,8,5,3]],[0,0,[[5],[4,0,6]]]] +[[1,[[],9],0,[1],5],[[5,[9],[9,7,6,0,9],2,[]],[[6,2]],[]]] + +[[[7]],[[3],4,[[0,2,8,10,7]],7,3]] +[[0,9,7],[5,[],[]]] + +[[[[0,2,4,5,7],[5,4,0],[5],2],9,[[7,9,5],[0],0,9],4,6],[[],10,[]]] +[[6],[],[[6,[1,8,5,3]],[2,[1,10,3,4,7],10,0,7]],[1,[10,5,[1,1],[2,10,3,0,8]],[[0,10,0,10,9],[],[6,2,8]]],[[[9,4]]]] + +[[[],0,0,10],[[9,1,[0,8,3,0]],6]] +[[6,10,[[2,6],1,[]]],[[],4]] + +[[[6]],[[[9]],[[9,5,3,4],0],0,1,3],[5,0,[8,6,10,7,3]],[[2,[5,1,2],[2,6,1]],0,8]] +[[0],[],[[3],[10,[],4,[],[6,6,5]],8,3,3]] + +[[],[10,9],[2,[[6,1,5],5],9,[8,4,1,2,[10,8]],0],[[],5,[[]],[],5],[[[]],[]]] +[[[1,[9],2]],[[[6,0,10,1,0],10,[5,4,8,4,6],5]],[]] + +[[[0,[1,8,2,1],[5]],[],2,4],[[10,7],3,[6]],[5,[[7,2],[4,1,9,9],10,7,[3,5]],2,2]] +[[3,[[]],9,[],[[],[8],[],[4]]]] + +[[[],[5,3],8]] +[[[[],[8,4,5,3],5,9]],[[[1],[3,9,9],[7,8,3],3],1,[[10,4,3,10,0],[8],[],[0,2],2],[1,[1,10,8]],[8,1,7,[6,5,3],[7]]]] + +[[[[8],2],8,[4,4,[1,8],[6],4]],[2,[2,4,[9,5,3,9]],7,[[2,6],[5,10,0,3,2]]],[[[],[],9,[9,2,3,0,9]],[[0,7,3],[],9],[],[2,[0,2],[9],5,10]],[[3,0,7,[],5],[[10],6],7,[],[[9,5,0],7,1,0,[2,6]]],[]] +[[],[],[6,[],5,9],[0],[[[],[0],[0],[8,5,7,5]],4,[],[[10],0,9,8,4],4]] + +[[[[5,0,10]]],[0,7]] +[[[],[[8,9,3,9],[8,1,5,2,8],[5,0,1,0],[2,0]],[7,[7,10,9,6],[0],[4,9,0],[7]],[[],[1,6,2,9],1]],[[9,8,[6,2,2,7,7],[4]],4],[[[4,9,5,5,5],5,0,[]],1,8,[[0],5]],[[[6,10],10,0,[4,5,6],2],[],[[0,8],7,1,[0,6,0],9],[[5,3,3],[2,9],9,[6,8],[5,6,2]],0],[]] + +[[10,7,[],0],[[[10,8,8,10,2],10,0,[3,3]],6,4],[[[7,3,3]],[],[[4,10,4]],1,3],[[[0],[7]],2],[[7,4],7]] +[[[[2,4,7,2],8,1,[8,7,5]]],[[],[1,[1,1,8,2],[6,1,4,3]],[3,10,9],10],[[[],[9,8,5,3,6],8,8],7,[[1,0,9,2,0],7,6],[[3,10,2,9,6],5]]] + +[[],[3,[9],[[2,3,6,6],[],1,4,7]],[[2,1]]] +[[[[],[2,10,6,3],5,[]],[[]]],[1,0,3],[[[10,2,1]],[4,10,[8,10,8]]]] + +[[6,[[0,6,3,2]],2,[[9,7],0,[3,7,9,5],[]]],[[[7],8],[[10],[3],2]],[8,6,[1],7,10],[[9,[2,9,5,2]],5,[[5,1,5,8,6],9,[],10],8,1]] +[[[[5,10,5],5,5],0,[]],[3,[],[],[2,1,[],[3,5,9]],[0,[0,7]]]] + +[[7,[[7]],3,[[9,0,8,5],[9,9,10],[3,2,1,8],[10,3]],8]] +[[10,[[2,7,2,0],0],6,8,[[6,5,2,6,10],[1,2,7,4],3,5]],[4,[5,8]]] + +[[5,[],[[1,5,3]],10,9],[[],[],[],4],[]] +[[],[[10,0,7,10],[1,7,7,2,7],[],0,[[8,3],[10,6,9,2,6],[0,5,5,10,7],[4,5],3]]] + +[[],[[4],6,[[1]]],[10,9,[[4,9,9,2,6],[3,1],[7,5,0],[7,8,7,3,7],3],[9,[3,7,0,9],9,5,5],3],[[],7,[5]],[9,[],[3,[8,2,10]]]] +[[],[6,[9,10,8,[6,0,5],[9,8,8]],[]]] + +[[[2,[8,2,3,1,0]],[]],[[4,0,[8],[8,7],5]],[1,0],[8,6,3],[0,[6,[8,6,9,2,6],4],[[0],6,[]],[]]] +[[],[[1,[5,9],[3,9],8,[10,7,4,4]],6,5,[[5,4]]],[[0,[4],[7,8,1,0,7]],[4,[1,0,10,0,7],[3,3,0,5],7],8,[[9,5,7,2,8],[6]],[10,1,[6,7]]]] + +[[[3,[8,3,10,4,2],4,[1,10,1],2],7,[2,[7,1,7,9]]],[[[8,1,5,10,0]],9,0,[],[[0,6,4],[3,4,2,0,1],5]],[7],[],[[[3,10,7],[0,7],[4,5,6,4,4],[]],6,[9,[0,3,6]],[[],[],[0],[2,10,9,4,5],5]]] +[[0,4,[4,[],4,10,3],6,[8]]] + +[[4],[[5,4,6],[]]] +[[[0,9,[]],10,10],[[7,5,4],6,0,[5,[2,7]],[[3],[1,2,6,5],10]],[9,7],[9,0]] + +[[[[],2,4,[7,1,2,10]]],[[[6]],[[5,8,1,4,0],[7,2,9],1],10,2,[4,4,8]]] +[[[3],[7,2],2,[7,[9,6,4,2],[10]]],[[2,[8,9,0,4]],[]],[9]] + +[[],[8]] +[[]] + +[[[[9,0,6,10]]]] +[[[[2,0,5],[1,9,1,5],[],[5,4]],[[9]],[[],6,5,3,4],9,[9,0,2]],[10,9,[1,5,4]]] + +[[],[],[7,[[5,2,7,5],[9,2,1,0,4]],[[5,1,6,6,7],[0,1,7,3]],6,[]]] +[[],[2,[[7,5,7],5,[6,1,5],[1,8,8,0]],1,0],[2,[2,[]],7,[2,[3,2,1,0,3]],9],[6],[[5],[[10,4,10,4],5,6,[4,2,9,7,5],[0,5]]]] + +[[3,7,[[8,1,6,8,4]],[3,[0,10,9,3]]],[[[8],[9,1],[5,8,1,0]],[],[[2],7,[5,0,7],2,2],7],[10,5]] +[[[3,[]],2,[[0,9,4,0,2],[5],5],8,2],[[]],[2,5,2,3,4]] + +[[4,[[1,9,1,6,3],7,0,4],[]],[[0,3,1,[4]]],[[6,[2,0],[2],[8,7,8,9,9]]],[10,1],[[[6,8],0,[5]]]] +[[0,[9,[8,9,2,6],7,0],3],[[[0,2,7,10]],[]]] + +[[3,3,10,7,5],[]] +[[7,8,5,5],[2,10,7,[[9,3,3],[8,7,2,3,6],[]],10],[[5,[6,1,4,8,6],6,7],5,5,0],[2,[[2,0],8,2],2]] + +[[],[[[3,2,6],4],[9],[0,10,[6],[6,6],7],8,8]] +[[],[[[5,3,7,9],[2,10,5,5,9]],[5],[4,[]],3,9],[[[1,7,6,5],[],9,[1,7],[1,10,5]],9,3,[0,5,[2,9,3,1,10],4,[2,0,3,5]]]] + +[[],[9,[1,1],[0,10],5,7],[6,[[7,8,8],[1,5],[8,9],0,1]],[5]] +[[],[[0,[0,0,5,0],6,0],1,2,[1,[6],7,2,0],[[6,3,7,5],[0,0,7,10]]]] + +[[8],[4],[[0,[7],1,1,[10,9,5]]],[],[]] +[[8,0,[7,10,7,[]]],[[3,[4],[6,5,3],2],1,[[2],[8,3],[2,0,1,0,1],[7,9,9,4,9]]]] + +[[[]],[[[3,4,1],[10,0,2,3,0],[],10,[9]]],[4]] +[[[[1,7,3,2,1],[0,7,9,5,4],6],[]],[[4,4,8,[2,6,8]],[6,[1],9],[[8,8,9,10,2],[6,0,8],[],3,8]],[6],[[[8],5],[0],[[4,4,10,1],4,[6,2,6,6,8],7,[2]],[6,5,[7],[3,8,3,10,9],9],[[8],10,2,1,[3,8,6,7]]],[]] + +[[[[9,6,10,1],[8],9],[7,[7,1,7,1],5],0,[[],1,[6],[8]],[4,[1],[4,0,3]]],[10]] +[[5,2,[]]] + +[[],[[],1],[[[5]],[[4,4,3],[10],4,3,[9,4,7,3,8]],1,[[3,0,9,5],3,[6,1,3],8,1],[[8,9,9,5,3],[4],[],[2,3,4],[1,10,8,7,7]]],[[[7,2,2,4],[5,3,2,8],3,[6,10,8,10]]]] +[[[],0],[[],7,[[4,5,4],[9,4],[0]],[[7,2,9],[10,2,8,8,5],2,[4,10,8],[7,0,8,8,3]],[]],[3,10],[2],[[6,3,[4,3]]]] + +[[[3,0],[5,[],3,[],8]],[]] +[[[3,[6],[3],6,[9]],10,8],[0,[[7,9,10],7,[]],9,2],[[[8,0,8,9,0],[0],[2,6,7]],[5,1,0],[[4,5,1,9,10],[7,3,9,3,1]],1,2],[0,[[],[2],5],3,1,2]] + +[[[]],[6,[6,[4,7,1],[7,6,8],2,1],1]] +[[10,[],[[],[7,9],2]],[[3,[5,4],7],1,1,[[3,8],9,2,[3,8,9,1,10]]]] + +[[],[],[9,10],[[[4,10,9,9,10],0,0],2,1,3,8],[[[2,4],6],4,10]] +[[[3]],[10,[6]],[],[[2,[5],9,5,7],[[2,1],[5],9],10,8,[1,9,[],[10,1,2,0,2],0]],[]] + +[[],[[1,2,9,3],[9,9,7,[6,2,7,2,1],[6,8,6,6,2]]],[10,0],[[1,8,6,5],7,[],4,[[],8,[1]]]] +[[1,[7],[[],7,[3,4,2,7,3]]],[9,[5,8],[7,9],1],[4,[4,6],[],8,3],[]] + +[[4,3,4],[[],[[6,3,3,6],3,[]],[],6,[[2],[3,6,10,0,2],[9,5,0],9,2]],[9,[8],2,[[2,0,3],7,9,[10,0,5,5,4],9],8],[10],[5]] +[[7,[8,[7],[6,6,4,3],[],[]],[0,7,[7,3,9,0,3],8],[],[[2,7,10],0,5,[4,9,9,9]]],[[5,[0,7,7,10],[5,9],[3,5,1]],6,1]] + +[[[8,[4,3,2,1],[9,3,1,8,2],[0,8]]],[[6,[4]],[[4],[5],[4,1,4,9]],[10,[6,5,3,5],3],[[7,4],4,[],[7,3,9,2,0]],[6,0,7,[4,4,7],7]],[[[4,4,2,10],[1,9,2,10,8],3,[10,4,2,9,9],[7,2,7,1,8]],7,[10,[6,6]],[[10],3],[]],[[[],3,2,[7,9],[3]],[[],[]],4,1,[]],[[[4,3,5,0],[6,0]],2,[[7,7],7,[1,6,10,1]],[9,9,6,0],[3,8,[5,8,2],6]]] +[[],[2,2,[2,[0,9,7,4,9]]]] + +[[[3],10,[0,3,9,4]],[[],[],[2,[3,3,7,8,2],4,[7]],3,7],[10,5,[[4],[5,0,8,1]],[4,6,9]],[5],[2,8,[6,2,5,[],4],10]] +[[9,2,2],[[[10,8],8,7]],[1,[2,[2],[3,3,2],0,6],[8,[0,6,10]],[[7,8,3,8],9,2],[6,[0,0],2,[1,3,10]]],[10,[1,4,[7],[5]],0,[4]],[]] + +[[8,[[3,7,9]],10,7],[[],[],[[8,2],5,[6,3,8,10,9]]]] +[[1,5,[7,10,[4,8],10,[]],1,[[0,9,3,2,2],[9,10,6,5,2],6]],[],[],[]] + +[[[[6]],9]] +[[1,[6,5],2],[3,[[8,6,6,3],6,[1,4,3,4]]]] + +[[7,[[4,1,6,4,2]],7,[[3,8],[],[4,6,10]]],[7,[[7,4,9,7],5,[6,7,1,3,4],[8,2,10,10]],9,1,2]] +[[3,3],[[7,[10,6,5,5,0]],9,[1,[],0]],[5]] + +[[],[[1,[7,0,5]],[],6,10],[[[5,10,7,2,10],8,[4,5,6,9,1],6,[10,9,2]],[0,[10,2,6],[7],9]]] +[[],[8,2,7,[1,[6],[0,2],3],[]],[0,[2,8,8,7],[],6,3]] + +[[],[[4,5],[1,2,9,2],[1],1],[[],[3,3,7,0,9],[6,[10,8],[8,8,5]],[[4,8,3,1],[7],[4,2],0,9]],[[5,8,[6,10],[8,8,10]],[[7,2],[7,3,3],6,1],10,5,[[],[4,1],[8,0,2,10]]],[]] +[[[],4,[1],8]] + +[[7,2,3],[[3,[10,10,2],[2,7,7,1,0],[0,6]],[2,[3,2,7,3,7],0,10,0],2,[[3,7,0],7,[9,5,0,6],5]],[[[4,8,8,10,2],[4,8,2,1,8],[6],8,4],[],[1,3,8,4],0,[[7,6,5,2],8,[8,0,2],8]],[[9,[9],[2,8,10,2],5,[8,3,0,9]]],[8,[],[5,[0,0,5,9],[4,0,2],[]],0,10]] +[] + +[[[0],[7]],[[7,[]],8,[[2,1,10,3],0,[]],[0,0]],[7,[[3,2,0]],1],[8,[[8],[1,3],[0,8,5,0],[],[0,6]],[[3,0,5],[3,2,2,7],0,5]]] +[[[[],4,6],6,[[3],[9,5,5,0],[4,0,3,1]]],[[4,10,7,[],[1,2,9]],9,[[6,2,5]],1],[[[10,7],[4,3,4,6]],5,[[10,1,9,2,10]],1]] + +[[[7,[6,1],6,[4,2,5,2,5],2],2,[0,[0,8,3,2,1],7]]] +[[[7,0,2],[],[3],9,[6,[4,4],[2,2],[4]]],[[]],[[[],5,2],[1,[6,3,3,6,6]],[[],[5,10,9,7]]],[10,2,0,[[6,6,9]],[9,0,9]]] + +[[[[1,5,2],7,[9,10,7,3,6],9],[9,[],[6,9]],[[],[3]]],[[],[[]],[[0,2],3,[6,5,3,7],2],[6],6],[9,[[7],5],0],[0,1,0,[5,[10,1,9,9,5],[0],[4,2,10,3],[3]],1],[]] +[[[3,1,9,4],[[2,9,5],[9],9,[]],[[],[10,4],5,[3]],[[4,0,1]],[9,4,10,[1],8]],[8,[[8,10],10,[9,4]],[[6],[8,6,9]],[[],4,[0,10,4,3,5],[6,5,3,0,6],[4,8,3,3]]],[0,[0,[],9]],[8,3,7]] + +[[6,[[9,4,8,6],6,7],[[4,7,7,0,4],7,[3,2,9,10],9]]] +[[3,10,5,[]],[]] + +[[3,[[9],[1,5]],[6,3,[9,5,6,10,2],4],[10],4],[[[3,1,7,10],[1,5,9,10,0],[7,10],2],[4,[0]],5,6,[8,[3,5,1],[8,6,5,4],10]]] +[[2,7,1,10],[[],[[3,6],10,4],10,6],[[0,6],[8,1],[[]]],[],[[[],[3,7,6],[5],[2,3,8],5],[5,7]]] + +[[[1,[],[9,1,6,0,6],6,1],1,9,4,4],[[2],[3],7,[[7,7,3]],8],[[9,[8,2,7,9,0],[7,2,8,10]],[[]]]] +[[5,[4,[],[9],6],3,[1,[8]],1],[10,[6,0,[0,1,10,3,8],[9,8,0,4]],0,2,8],[1,3,[]]] + +[[10,0,[10,[8,6]],[9,9,[10,4]]],[3],[[[4,1],[7,5,5,7],3,10,[]]],[4]] +[[0,2,[[4,0,6],[3,0,10,9,0]],[[0,3],8,[7],[0]]],[7,8,6],[],[10,2,[[5,5,2,9]]],[[9,6,5]]] + +[[],[1,9]] +[[[2,10],7,8,[[4,8,6],0,8,[7,5,8],[3,1,10]]],[]] + +[[],[4]] +[[[4,1,6,7],7,2,5]] + +[[],[4,[[2,0,3,10],[],2,10,0],[3,4],[6,[5,9,10,8],[],[]]],[7,7,4]] +[[[[],[5,7,2,5],[10,7],[6,2,9,2],[7,9,10]]],[9,[0,10,6,3,[8,1,1]],[[0],[1],[0,7,7,3,0],[],5]]] + +[[4,10,0,[[7,5,3,9],1,8,4,[]],[[8,3,1],4,[10,1,5],[9],0]],[4,[4],[10,[10,2]],4,9]] +[[[[],[6,3,1,4],2,6,[1]]],[[1,2,8]],[],[3,2,[[1,0,10,1,6],4,8,3,2],[[10,0,3,7,1],[7]]],[[[8,1,6,0],[]],5,[[6,6],[5,6],6],2,6]] + +[[[0,6,[6,2,4,1,5],3]],[[[10,9,0],7,[10,5,0,9,2],[],4],[],5,10,1],[4],[[],[],0,6,2],[]] +[[[0,0,4],1,[10,5,[8,10,5,0,10],10]]] + +[[[[1,1,8],[4,3,10,4],10,[1,6,2,7,1]],[],[[9,2],[6,3,2,6],[2],2,[5,3]]],[5],[10]] +[[[[2,2,4,10],3,10],[[4,9],0,6,3],[[6,3,1,8,10],9,8],7,[[8,1,0,2,5],[4],1,[0,9,1,1,10],[7,0,6,10,1]]],[],[[[3,9],[5,7],[4,2,3,3],[6,7,10,8,8]],6,[6,[2,6],0],[4,2],0],[[[0,9,3,6,10],[6,8,4,8,10],10,4,[8]],[1,[],[10,10,4,7,10],[0,0,9,1]]]] + +[[[[8,6,8],[9,2],8,[6,6],[6,6,4,1,0]],[[5,8,10,3],1,7,3],10],[[0,[1,6,1],[7],[2,0,6]],[],[3,[2],[7,8],[2,10,5,7,10]],[10,[4,5,5]]],[[[5,6,4,10],[],[1]],[[8],[7,7]]]] +[[1],[[[7],[],[8,3],[0,10,4,4],[0,6,2]]],[[3,[10,6,10,8,1]],[3,5,[4,5,9,3],[9,7,5,6]],3,2],[7,[[]],7,4]] + +[0,5,2,6] +[0,5,2,6,9] + +[[[[]]],[8,7,1,[10,9],4]] +[[[6,6],[0,[],0],[6,0,1,10]],[[[9],9,[1,4,10],6],0,[]],[[]],[2,[9],10]] + +[[[[6],[],0,10],[[6,2,7,4,6],[9],6,10],[[10,2],[1,4,2,3],[9,6],0],[],[10,1,10]],[[[1,2,6,10,0],[]],[],10,8,[2,[3,7,10,10],[6,7,6,10],[8,8,0,7,1]]],[[5,4],8,6,[2,[2],0]]] +[[7],[8,2,3]] + +[[[[8,4,4],7,[10,5,10,6],7,[9,2,0,3,4]],[6,0,[6,9,3],9,[]]],[5,7,[[7,10],9,6,[1,10]]],[[[],[4,4,2],6,[8,7,0]],[0,[5]],5,4],[]] +[[[10],0,[6,[2,0,4,6],2,8,8],1]] + +[[],[[2,[],[],8],[[4,6,7],9,[2],[2,1,2,2,1],[3,5]]],[],[[[1,0,9,2,3]],[[2,4,4,3,4],[6]]],[3,2,1,7,4]] +[[[[8],0,2,[9,5,3],9],0],[5,[6,[2,10,7,6],4,8],[7,5,[3,7,2,9,4]],[[6,1,1],[3],4,[0,9,5,10,0],3],5],[1,[0,0,4,6],10]] + +[[[7,[],3,0,10],4,2,[4,7,8,[1],9]]] +[[5,1],[[[0,3,0,10],8,0,7,2],0,[[6,5]]],[[[9,1,0,10],[8],0,[9]],[4,1,[7,2,1,7,8]]],[]] + +[[2,10,[],[],4],[0,[[4,1,8,3,10],2,[8,4,5,7,4]],[]],[],[[],[[3],[3],[],[3,4,1,1],8],10,3,[]],[1,6]] +[[10,[[9],[8],[10],[4,8,3,7,6]]],[[1,[10,7,2]]],[5,[],[[2,6,7],[6,2,2,1,10],3,6,2]],[5,6]] + +[[],[10,[2,[3],[10,10],3,[9,1]],[[8],[1]],[[1,0],7,5,[6,9,1,8],[6,10,1]],[[9,4,4],5,0,[]]],[3,[7,10,7,[5,1,8,5,4],9],2,[0,[1,8,3,1,0],[4,4,3,10],0,7]]] +[[3,8,9,[[0,8,5,2,7],[],6]],[[],1,[[0],6,1,[5,9,3,6],5]],[],[[7,1,[],[5,0],[0,4,6,4]]]] + +[[1,[]],[[7,[7,3,2,1,0]],[3],[4],[6]],[2,8,2,6],[[],[1,10,2,[5,8,0,6,9]],[[5,0]]]] +[[[[10,3,6,0],[8,0,10,1],[5,4,0,10,2],10],7,0],[4,[],4,6],[6,1,[6,0]]] + +[[9,0]] +[[[]]] + +[[7,[3,[3,7,9]],0],[[8,[4,0,10],10],[8,9]],[6,6,7,2],[[[4,4,8,4,2],6],[],[[2],[4,3],10,[2,9,2,0]],7,2]] +[[],[[[2,9,3,4,9],[5,8,9,3],[6],4],2,[[],1,[5,9],7]],[[],9,4],[[9],[[0,3,0,8],[],10,3,8],[[9,2,2,6,7],0,8]]] + +[[[6],[8,[5,4,3,3,5]],[],[[],[8],[4,2,0,1,0],[9,10,10,3]]],[[[8],[1,4,3],2,[7],6],[1,[]],[8,1,9,5,[]],[[5],8]],[[7,7,8,8],[3,[6,10],4],4,[2,3],[]],[[],10]] +[[3],[[[3,7,1,1],8,9,[9,6,7],4],7],[1,[5,[3],[0,0,0,3,3]],9,4],[[],[[5,6,4,2],[3,10,8,6]],[],1]] + +[[2,[[2,5,6,6,8],[],[9,2,8,10,10],8],[],3,[[],10,6,[2]]],[[]]] +[[9,7,10,2,[[4,8,5,8],[2,4,6]]],[6],[[9,6],[]],[]] + +[[],[[0,8,1],[[5],[5,0,4]],[],[[6,10,1,1],3]],[[8,[3,8,7],[0,4]]],[[[4,2,2],[],[0]],5],[[],[[7,0,6,1,8],[3,10]],7]] +[[4,[5],4,0,3],[],[[[3,4,9,7,4],2,[3,8,5],7,[8,0,2,4,9]]],[9,[[6,8,8,10,9],[10],[9],[5],1],10],[2]] + +[[1],[0],[[8]],[1,6,2],[8,[3,3,[3],[],2],1,5]] +[[10,8,[6,[10,7,1,2],5],7],[[4,5],[[2,8],[1,5,4,7]]],[],[6,7,2,9]] + +[[[],[]],[8],[[[5,5],0],[[0,3,1,7],9,[8,8,7,3]],0,[]]] +[[[6],4,8,[[5]],1]] + +[[[3,6,[],[3,3,4,4]],[[6],7,9,[3,6,6]],[8,7,[4,9,7,8],[6]]],[]] +[[[[2],[6,5,9,3,3],4,[9]]],[[],[[4,10,8],3,[2,0,6,9]],5,1]] + +[[[[],[4,2],1,[9,9],[10,2,5,2,10]],[],3],[[[10,4,2,3,3],[],3,9,[6]],10,4],[5,[[8,8],[],9],9,[[7,8],3,[],3]],[[4,[3,8],10,7],[],[9],7,[5,[],5,1,[0,3,5,10,10]]],[[[9,4],[3,1,2,8],10],[[6,4,5]]]] +[[9]] + +[[[10,[1],[10,4,0]],[8,6,1],0],[[[7,6]]],[0,10,[2,[1,0,5]]],[9,[]],[[[4,3,8,0],0,7,[10,0,9],2],[8,1,1,[7,9,6]]]] +[[9,5,0,5],[[[],8,[2,2,5,6,4],[1,7,8,7],[4,7,8]]],[4,[[2,2,0,8]],[[7,8],8,[7,6,2,8,6],[2,2,0,6,2]],[4,[7,5,4],[10,1],6,[4]],[3]],[],[4,10,[2,[9,3,8]]]] + +[[],[5,2,8],[2,5,9],[[[3,2],4,[2,6],[8,5]],7,[7],[]],[[9,[1,2,3,5,6]],2,7,10,8]] +[[],[],[[],[[9,6,8,4,8],5,8],8,[7,[10,5,1,1,4],2,[6,0,8,8,3]],[8,[],[1,2]]]] + +[[9,4],[[[2,5],4,10,[5,6]]],[[5,8,[],[0,4,3,2],5],[[],[2,6,10,8],[],[1,4,9],9],9,[[4,4,8,4]],[[4,5,10],[1,9]]],[[0],10,[10,[],5,[8]]]] +[[3,[6,6,7,10,[8,0]],2],[],[[9,4,[0,4,5,4,8],[7,0]]],[2,8]] + +[[6,[[]],7,[],2],[[[5,8,0,7],[10,1,0],9],[5,[4],0],[[0,7,6,9,1],[],[4],5],[1,8]],[]] +[[[[0,3,7,3,8],10,[4,4,0]]],[7,7,[[2,3],[5,6],3],10,10],[4,9,[7,[7,4]]]] + +[[[5],2]] +[[[],[[7],[5,1,2]],[5,7,3,[10,8],10],1,[0,5]],[2,[[4,10,3,0,6]],6,[],[[4,2,0,1],9,[],[7,8,2,9,3],1]],[0,9,7],[[[1],8,2,0,[1,3]],[6,5]]] + +[[[4,7,[9]]]] +[[9],[[[6,5,2,2,7],1],[5]],[]] + +[[],[3],[[[],[10,4,6,3,3],10,[0,8],9],[1],[],[]]] +[[3],[1]] + +[[[[],[1,3],[1,1,3],0],[[2,3,5],[2]],[[2,7],[]],[2,[5,0],[8,7],2],7]] +[[10,[]],[0,2,4,5],[[[],0,4,[6,6,5],10],[5,9,3,[]],[[8,9],[9,10,2,2]],[10,[3,4],[1],[9,10]],6],[0,3,10]] + +[[0],[[[1],[5],[4]],[4,0,10,2],[7,7,[],[10]],[[8,8,8,3,7],0,[6,5,2],2,7],8],[[[0,0,3,7],3],[[3,3,2,2]]]] +[[8],[1],[8],[[],[8],[]],[[],1]] + +[[8,6,3,[[4,4,0]]],[[5],4,[[7,5,1,5],7,8],0],[5,2,2,[[8,5],[3,8,4,9,5],6,[3,7,4],[]],5],[3,[9,9,0]]] +[[[5,[5,1,5]],10,8],[5,10]] + +[[0,[],0],[[[4],6,8,8],[[8,7,2],2,[10]],[4],9]] +[[[1,[10,2,2,1,5],7,1,[4]],2,10,8]] + +[[[1,8,5,[],6],[[7,7,9,7],[8,7,5,7,6],[9,5,10,6]],[[9,4,9,0,0],[2,3]],[],[1,5,0,[],[10,0,10]]],[[7,[7,0],6],[]]] +[[7],[0],[[0,2,10],5],[4,[[4,2],8,0,[3,5,4,7]],7,7]] + +[[[[9,1,4]]],[[[1,5,7,6],[1,2]]],[0,[[],[1],4,[5,4,5,0,7]],1,5,2]] +[[[],[],[[6,4,2],[4,0,1],10,4,7]],[5],[[],9,8,[[6,9,8,1,1]]],[],[4,[9]]] + +[[[]],[],[],[5]] +[[8],[],[[8],4,[6,1],[6]],[[[3,10,5]],[]]] + +[[[9]],[6,4]] +[[[1,[9,5,3,6,7],[0,10],[6],1]],[[[],5,[5,8,1]]],[3,1,[[10,6,5],[8,8,5,10,4]],[]],[1,1,[[9,5],8,3,1,[8,5,2,2]]],[]] + +[[],[[[7,10,8]],[[8,3],10,1,5,2]]] +[[[[3],[2]],[[10,0,8,3],[9],8],0,0],[10],[5,4,[[],[10,3,1,7],[],8],7],[0,[[],[5,9],[9,4],4,[3,1]],7],[[],3,[[10],8,9,[10,10,2]]]] + +[[7,[8,10,9,[10,3,4,6],4],1,0,[0]]] +[[[[10,10,9,8],1,[7,10,10,5],[9,5,8,7,4],[10,7,4,8,3]],10,9,[[6],[8,9,8],8]],[[9],[],[4,1]],[5,[],[[],[9,6,8,1,3]],[[4,4,0,7],4,[2,0,9,6]]]] + +[[2,[3,[],9],[[],[5,4,2,7,8]],2]] +[[[],[0,[5],[2,4],[],7]],[8,[6,9,[6],[],[8,4,6]],[[8,1,4],3,[6],6,2],[7],5]] + +[[3,1,[[6,4,0,1,9],3,0,[]]],[1,5,[9,[6]],0],[4,3]] +[[],[10],[7]] + +[[3,[8,6,[1],5],7],[[],6]] +[[],[]] + +[[[9,8,9,[0,2,10,2],10],[1,5,[0,5,7,8]],1,[9,[6,10,10]],[[5,2],0]],[1],[],[10]] +[[6,4,3],[10,[[5,6,0,3,5],[]],[5,[5,3,10],0],[]],[6,[9],[10,[5],7,[3,4,10,9,1]],[3],6],[[[4,3],3,1,[7,0,1,6,8],[4,8]],[],[1,[8,1,5,9,5],[3,4,4]],[6,6,5],8]] + +[[8,0]] +[[],[[[10,9,4,8],[10,0,6,6,6],[6,2,4,10,9],4]],[[9,9,5,[]],[9,7,[10,7]]],[[[8,0,10,9,5],7],6]] + +[[[0],[[0,2,7],[3],6],4]] +[[[4,5,[6,9,5,3,8],6,[5,2,1,2,2]],0,3,1,[]],[[],9,[]]] \ No newline at end of file diff --git a/2022/day-13/inputs/test.txt b/2022/day-13/inputs/test.txt new file mode 100644 index 0000000..27c8912 --- /dev/null +++ b/2022/day-13/inputs/test.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 diff --git a/2022/day-13/src/bin/part_one.rs b/2022/day-13/src/bin/part_one.rs new file mode 100644 index 0000000..d632849 --- /dev/null +++ b/2022/day-13/src/bin/part_one.rs @@ -0,0 +1,91 @@ +use std::{env, io}; + +use aoc_2022_13::{parse_input, Pair, Segment}; + +fn main() -> io::Result<()> { + let infile_path = env::args().nth(1).expect("input file"); + + let result = solve(&infile_path)?; + + println!("{result}"); + + Ok(()) +} + +fn solve(path: &str) -> io::Result { + let pairs = parse_input(path)?; + let result = pairs + .iter() + .enumerate() + .filter_map(|(i, pair)| match is_in_right_order(&pair) { + Ordered::Yes => Some(i + 1), + _ => None, + }) + .sum::(); + + Ok(result as u32) +} + +#[derive(Debug)] +enum Ordered { + Undecided, + Yes, + No, +} + +fn is_in_right_order((left, right): &Pair) -> Ordered { + test_segment(left, right) +} + +fn test_segment(left: &Segment, right: &Segment) -> Ordered { + match (left, right) { + (Segment::Num(lval), Segment::Num(rval)) => test_segment_num(*lval, *rval), + (Segment::List(lval), Segment::List(rval)) => test_segment_list(lval, rval), + (Segment::List(lval), rval @ Segment::Num(_)) => test_segment_list(lval, &[rval.clone()]), + (lval @ Segment::Num(_), Segment::List(rval)) => test_segment_list(&[lval.clone()], rval), + } +} + +fn test_segment_list(left: &[Segment], right: &[Segment]) -> Ordered { + let mut left = left.iter(); + let mut right = right.iter(); + + loop { + match (left.next(), right.next()) { + (Some(lval), Some(rval)) => match test_segment(lval, rval) { + Ordered::Undecided => (), + ord => return ord, + }, + (None, Some(_)) => return Ordered::Yes, + (Some(_), None) => return Ordered::No, + (None, None) => return Ordered::Undecided, + } + } +} + +fn test_segment_num(left: u32, right: u32) -> Ordered { + if left < right { + Ordered::Yes + } else if left == right { + Ordered::Undecided + } else { + Ordered::No + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn sample() { + let result = solve("inputs/test.txt").unwrap(); + assert_eq!(13, result); + } + + #[test] + fn puzzle() { + let result = solve("inputs/puzzle.txt").unwrap(); + assert_eq!(5938, result); + } +} diff --git a/2022/day-13/src/lib.rs b/2022/day-13/src/lib.rs new file mode 100644 index 0000000..04023d9 --- /dev/null +++ b/2022/day-13/src/lib.rs @@ -0,0 +1,70 @@ +use std::{ + fmt, + fs::File, + io::{self, Read}, + path::Path, +}; + +pub type Pair = (Segment, Segment); + +#[derive(Clone)] +pub enum Segment { + Num(u32), + List(Vec), +} + +impl fmt::Debug for Segment { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Num(num) => write!(f, "{:?}", num), + Self::List(elems) => f.debug_list().entries(elems).finish(), + } + } +} + +pub fn parse_input

(path: P) -> io::Result> +where + P: AsRef, +{ + let mut file = File::open(path)?; + let mut buf = String::new(); + file.read_to_string(&mut buf)?; + + let (_, pairs) = parse::pairs(&buf).expect("parsing failed"); + + Ok(pairs) +} + +mod parse { + use super::{Pair, Segment}; + + use nom::{ + branch::alt, + bytes::complete::tag, + character::{self, complete::newline}, + multi::{separated_list0, separated_list1}, + sequence::{delimited, separated_pair}, + IResult, + }; + + pub(super) fn pairs(input: &str) -> IResult<&str, Vec> { + separated_list1(tag("\n\n"), pair)(input) + } + + fn pair(input: &str) -> IResult<&str, Pair> { + separated_pair(segment, newline, segment)(input) + } + + fn segment(input: &str) -> IResult<&str, Segment> { + alt((list, num))(input) + } + + fn list(input: &str) -> IResult<&str, Segment> { + delimited(tag("["), separated_list0(tag(","), segment), tag("]"))(input) + .map(|(rem, lst)| (rem, Segment::List(lst))) + } + + fn num(input: &str) -> IResult<&str, Segment> { + character::complete::u32(input).map(|(rem, num)| (rem, Segment::Num(num))) + } +} diff --git a/README.md b/README.md index 1520508..1952ea5 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,4 @@ - [2019](2019/README.md) (0% completed) - [2020](2020/README.md) (20% completed) - [2021](2021/README.md) (68% completed) -- [2022](2022/README.md) (46% completed) +- [2022](2022/README.md) (48% completed)