mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-27 13:50:32 +01:00
Compare commits
29 Commits
2022/day-0
...
a713d8690a
| Author | SHA1 | Date | |
|---|---|---|---|
| a713d8690a | |||
| f8fcc8ebba | |||
| 1f9915e79d | |||
| 96c411126c | |||
| 9aad6fe511 | |||
| 84110350ff | |||
| 0f64ec4e8f | |||
| 065fa9cda8 | |||
| 7de23c3b24 | |||
| c66fb86ef9 | |||
| 64757031fb | |||
| f48a02c81c | |||
| 4b18a733c9 | |||
| 796c638300 | |||
| f8c6f4e01f | |||
| e2d1ec8c91 | |||
| d92e77cb88 | |||
| a4b5390f80 | |||
| 6d9defce42 | |||
| 92db6e56c9 | |||
| 6a51f123ab | |||
| 9a63adc355 | |||
| a7188186c3 | |||
| a79eb70581 | |||
| fbfcfa65fb | |||
| 20b2fe7684 | |||
| e45aaad1c4 | |||
| a44420cbe7 | |||
| 44b7b6b1b2 |
@@ -6,10 +6,13 @@ edition = "2021"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
ahash = "0.8.2"
|
||||
anyhow = "1.0.66"
|
||||
clap = { version = "4.0.19", features = ["derive"] }
|
||||
itertools = "0.10.5"
|
||||
ndarray = "0.15.6"
|
||||
nom = "7.1.1"
|
||||
strength_reduce = "0.2.4"
|
||||
|
||||
[dev-dependencies]
|
||||
criterion = "0.4.0"
|
||||
|
||||
@@ -10,34 +10,31 @@ use criterion::Criterion;
|
||||
/// Number of days we have an implementation to benchmark
|
||||
const DAYS_IMPLEMENTED: u8 = 25;
|
||||
|
||||
fn read_input(day: u8) -> Vec<u8> {
|
||||
fn read_input(day: u8) -> std::io::Result<Vec<u8>> {
|
||||
let input_path = format!("inputs/{:02}.txt", day);
|
||||
|
||||
let mut buffer = Vec::new();
|
||||
File::open(input_path)
|
||||
.expect("Failed to open input file")
|
||||
.read_to_end(&mut buffer)
|
||||
.expect("Failed to read input file");
|
||||
File::open(input_path)?.read_to_end(&mut buffer)?;
|
||||
|
||||
buffer
|
||||
Ok(buffer)
|
||||
}
|
||||
|
||||
pub fn benchmark_days(c: &mut Criterion) {
|
||||
for day in 1..=DAYS_IMPLEMENTED {
|
||||
let input = read_input(day);
|
||||
if let Ok(input) = read_input(day) {
|
||||
let part1 = get_implementation(day, false).unwrap();
|
||||
|
||||
let part1 = get_implementation(day, false).unwrap();
|
||||
|
||||
c.bench_with_input(BenchmarkId::new("part1", day), &input, |b, i| {
|
||||
b.iter(|| part1(i));
|
||||
});
|
||||
|
||||
if day < 25 {
|
||||
let part2 = get_implementation(day, true).unwrap();
|
||||
|
||||
c.bench_with_input(BenchmarkId::new("part2", day), &input, |b, i| {
|
||||
b.iter(|| part2(i));
|
||||
c.bench_with_input(BenchmarkId::new("part1", day), &input, |b, i| {
|
||||
b.iter(|| part1(i));
|
||||
});
|
||||
|
||||
if day < 25 {
|
||||
let part2 = get_implementation(day, true).unwrap();
|
||||
|
||||
c.bench_with_input(BenchmarkId::new("part2", day), &input, |b, i| {
|
||||
b.iter(|| part2(i));
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2000
2022/inputs/09.txt
Normal file
2000
2022/inputs/09.txt
Normal file
File diff suppressed because it is too large
Load Diff
140
2022/inputs/10.txt
Normal file
140
2022/inputs/10.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
noop
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx -12
|
||||
addx 18
|
||||
addx -1
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx -5
|
||||
addx 7
|
||||
noop
|
||||
addx -36
|
||||
addx 18
|
||||
addx -16
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 13
|
||||
addx -6
|
||||
addx -4
|
||||
addx 5
|
||||
addx 2
|
||||
addx 4
|
||||
addx -3
|
||||
addx 2
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
addx 5
|
||||
addx -40
|
||||
addx 25
|
||||
addx -22
|
||||
addx 25
|
||||
addx -21
|
||||
addx 5
|
||||
addx 3
|
||||
noop
|
||||
addx 2
|
||||
addx 19
|
||||
addx -10
|
||||
addx -4
|
||||
noop
|
||||
addx -4
|
||||
addx 7
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx -26
|
||||
addx 27
|
||||
addx -36
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 4
|
||||
addx 6
|
||||
noop
|
||||
addx 12
|
||||
addx -11
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 5
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx -38
|
||||
noop
|
||||
addx 9
|
||||
addx -4
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx 10
|
||||
addx -9
|
||||
addx 2
|
||||
noop
|
||||
addx -9
|
||||
addx 14
|
||||
addx 5
|
||||
addx 2
|
||||
addx -24
|
||||
addx 25
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx -30
|
||||
addx 31
|
||||
addx -38
|
||||
addx 7
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
addx 21
|
||||
addx -16
|
||||
addx 8
|
||||
addx -4
|
||||
addx 2
|
||||
addx 3
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx -2
|
||||
addx 5
|
||||
addx 3
|
||||
addx -1
|
||||
addx -1
|
||||
addx 4
|
||||
addx 5
|
||||
addx -38
|
||||
noop
|
||||
55
2022/inputs/11.txt
Normal file
55
2022/inputs/11.txt
Normal file
@@ -0,0 +1,55 @@
|
||||
Monkey 0:
|
||||
Starting items: 84, 66, 62, 69, 88, 91, 91
|
||||
Operation: new = old * 11
|
||||
Test: divisible by 2
|
||||
If true: throw to monkey 4
|
||||
If false: throw to monkey 7
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 98, 50, 76, 99
|
||||
Operation: new = old * old
|
||||
Test: divisible by 7
|
||||
If true: throw to monkey 3
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 72, 56, 94
|
||||
Operation: new = old + 1
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 4
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 55, 88, 90, 77, 60, 67
|
||||
Operation: new = old + 2
|
||||
Test: divisible by 3
|
||||
If true: throw to monkey 6
|
||||
If false: throw to monkey 5
|
||||
|
||||
Monkey 4:
|
||||
Starting items: 69, 72, 63, 60, 72, 52, 63, 78
|
||||
Operation: new = old * 13
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 7
|
||||
|
||||
Monkey 5:
|
||||
Starting items: 89, 73
|
||||
Operation: new = old + 5
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 6:
|
||||
Starting items: 78, 68, 98, 88, 66
|
||||
Operation: new = old + 6
|
||||
Test: divisible by 11
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 5
|
||||
|
||||
Monkey 7:
|
||||
Starting items: 70
|
||||
Operation: new = old + 7
|
||||
Test: divisible by 5
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 3
|
||||
41
2022/inputs/12.txt
Normal file
41
2022/inputs/12.txt
Normal file
@@ -0,0 +1,41 @@
|
||||
abcccccccaaaaaccccaaaaaaaccccccccccccccccccccccccccccccccccccaaaaa
|
||||
abaacccaaaaaaccccccaaaaaaaaaaaaaccccccccccccccccccccccccccccaaaaaa
|
||||
abaacccaaaaaaaccccaaaaaaaaaaaaaacccccccccccccaacccccccccccccaaaaaa
|
||||
abaacccccaaaaaacaaaaaaaaaaaaaaaacccccccccccccaacccccccccccccacacaa
|
||||
abaccccccaaccaacaaaaaaaaaacccaacccccccccccccaaacccccccccccccccccaa
|
||||
abcccccccaaaacccaaaaaaaaacccccccccccccaaacccaaacccccccccccccccccaa
|
||||
abccccccccaaaccccccccaaaacccccccccccccaaaaacaaaccacacccccccccccccc
|
||||
abccccccccaaacaaacccccaaacccccccccccccaaaaaaajjjjjkkkcccccaacccccc
|
||||
abcccccaaaaaaaaaacccccaaccccccccccciiiiiijjjjjjjjjkkkcaaaaaacccccc
|
||||
abcccccaaaaaaaaacccccccccccccccccciiiiiiijjjjjjjrrkkkkaaaaaaaacccc
|
||||
abcccccccaaaaaccccccccccccccccccciiiiiiiijjjjrrrrrppkkkaaaaaaacccc
|
||||
abcccaaccaaaaaacccccccccccaacaaciiiiqqqqqrrrrrrrrpppkkkaaaaaaacccc
|
||||
abccaaaaaaaaaaaaccccacccccaaaaaciiiqqqqqqrrrrrruuppppkkaaaaacccccc
|
||||
abcccaaaaaaacaaaacaaacccccaaaaaahiiqqqqtttrrruuuuupppkkaaaaacccccc
|
||||
abcaaaaaaaccccaaaaaaacccccaaaaaahhqqqtttttuuuuuuuuuppkkkccaacccccc
|
||||
abcaaaaaaaaccccaaaaaacccccaaaaaahhqqqtttttuuuuxxuuuppkklcccccccccc
|
||||
abcaaaaaaaacaaaaaaaaaaacccccaaachhhqqtttxxxuuxxyyuuppllllccccccccc
|
||||
abcccaaacaccaaaaaaaaaaaccccccccchhhqqtttxxxxxxxyuupppplllccccccccc
|
||||
abaacaacccccaaaaaaaaaaaccccccccchhhqqtttxxxxxxyyvvvpppplllcccccccc
|
||||
abaacccccccccaaaaaaacccccccccccchhhpppttxxxxxyyyvvvvpqqqlllccccccc
|
||||
SbaaccccccaaaaaaaaaaccccccccccchhhppptttxxxEzzyyyyvvvqqqlllccccccc
|
||||
abaaaaccccaaaaaaaaacccccccccccchhhpppsssxxxyyyyyyyyvvvqqqlllcccccc
|
||||
abaaaacccccaaaaaaaacccccccccccgggpppsssxxyyyyyyyyyvvvvqqqlllcccccc
|
||||
abaaacccaaaacaaaaaaaccccccccccgggpppsswwwwwwyyyvvvvvvqqqllllcccccc
|
||||
abaaccccaaaacaaccaaaacccccccccgggppssswwwwwwyyywvvvvqqqqmmmccccccc
|
||||
abaaccccaaaacaaccaaaaccaaaccccggpppssssswwswwyywvqqqqqqmmmmccccccc
|
||||
abcccccccaaacccccaaacccaaacaccgggpppssssssswwwwwwrqqmmmmmccccccccc
|
||||
abcccccccccccccccccccaacaaaaacgggppooosssssrwwwwrrrmmmmmcccccccccc
|
||||
abcccccccccccccccccccaaaaaaaacggggoooooooorrrwwwrrnmmmdddccaaccccc
|
||||
abaccccccccccccaacccccaaaaaccccggggoooooooorrrrrrrnmmddddcaaaccccc
|
||||
abaccccccccaaaaaaccccccaaaaaccccggfffffooooorrrrrnnndddddaaaaccccc
|
||||
abaacccccccaaaaaacccccaaaaaacccccffffffffoonrrrrrnnndddaaaaaaacccc
|
||||
abaaccccccccaaaaaaaccacaaaacccccccccffffffonnnnnnnndddaaaaaaaacccc
|
||||
abccccccccccaaaaaaaaaaaaaaaccccccccccccfffennnnnnnddddccaaaccccccc
|
||||
abcccccccccaaaaaaacaaaaaaaaaacccccccccccffeennnnnedddccccaaccccccc
|
||||
abcccccccccaaaaaaccaaaaaaaaaaaccccccccccaeeeeeeeeeedcccccccccccccc
|
||||
abccccccccccccaaaccaaaaaaaaaaaccccccccccaaaeeeeeeeecccccccccccccaa
|
||||
abcccccccaaccccccccaaaaaaaacccccccccccccaaaceeeeecccccccccccccccaa
|
||||
abaaccaaaaaaccccccccaaaaaaaacccccccccccccaccccaaacccccccccccaaacaa
|
||||
abaaccaaaaacccccaaaaaaaaaaacccccccccccccccccccccacccccccccccaaaaaa
|
||||
abaccaaaaaaaaccaaaaaaaaaaaaaacccccccccccccccccccccccccccccccaaaaaa
|
||||
449
2022/inputs/13.txt
Normal file
449
2022/inputs/13.txt
Normal file
@@ -0,0 +1,449 @@
|
||||
[[[],[],8,3],[10]]
|
||||
[[[[7],[0,4,6,1]],[[2,1,5,3,6],[]],[3,[10,9,1],2,[10,6,10],7],2,7],[5,[3],7,10,[8,[4,7,1,7,8],[],1,[8,6]]],[5,7,[[5,5,7,2,10],[8,7,10,4,7],[9,4,9,9,1]],[[8],8,5,[7,3,4,6,1],1]]]
|
||||
|
||||
[[[5,5,[0,7,6,6,0]],[],0,9],[[[0,7,3,10,5],5],7],[10,[],1,[],5]]
|
||||
[[4],[2,[10,[5,7,8,7,0]],[4,8,[1,2],[5]],3,9],[[[3,3,3,5,4],5,[],7,[7,3,10,4,0]],9,[3]],[2,0,6,[9,5],8],[[4,[9,8,6],[],5],3,[7,7,[3,3,6],7,[9,4,0,10,6]],10,[]]]
|
||||
|
||||
[[2],[3,[[],[1]],[],[0,[10,7]]],[[]],[7,[6],8,[9,0],[2]]]
|
||||
[[[[],7,8]]]
|
||||
|
||||
[[],[[],8,5],[4,9,[[8,4,7,6,9],[4]],3,[[0,3,4,3,1]]],[3,5,[[0,6,4],5,[1,5,6],6,[8,7,1,7]]],[1]]
|
||||
[[8]]
|
||||
|
||||
[[],[[3,3,[7,0,9],1],3],[[[10,7,6],8,0,0],10],[[3,4],[0,10,[1,6,1,5,1],[]]],[[[10,10],[9,7,3]],2]]
|
||||
[[10,0,4,[1,1,[4,10,5,7],10]],[[],[3,5,[5,5],[],[1,0,4,9]],0],[[]]]
|
||||
|
||||
[[[[10,7,1],0],[7,[4,9,3],[0],[]],[],8],[[[6,3,2],[4,6,0]],[4,2,[0,2]]],[[],1,6,2,[2,[10,10,4,9],0,[7,1,0,7,6]]],[9,3]]
|
||||
[[[[4,4,2,2],[5,0]]],[5]]
|
||||
|
||||
[[],[[5,6,[],[7]]],[7]]
|
||||
[[10,6,9],[[9,4],[5,4,4,[2,2,8],5],10,[[]],9],[]]
|
||||
|
||||
[[[],[2,6,[],[4],[0,5,6,7,4]],4,9,3],[],[[[6],7,9],[],9],[[[1,5,0,4],4,[2,9,3,3,7]],1],[10,2,2,[[0,6,8,4],[9,3,8,5],3,5,3]]]
|
||||
[[],[3],[[[],[],[10,1,2],[],[1]],0,9,[]]]
|
||||
|
||||
[[0,[6,[10,0,0,4],[6,6]],[],7,[8,[2,6,8,6,10],5,7,0]]]
|
||||
[[[6,[7,6,9]],8,[4,1,[4,7,2]]],[[],8],[[2,[0],0,8],1,8,[6,4,1,[3,3],6],[[9,8,4,1],[5,7],9]],[[[3],5],2,5],[9,[[8],3]]]
|
||||
|
||||
[[],[2,[4,[6,2,10,7,7],[]]],[7,[7,[1,7]],[[9,2,8,10,8]]],[5,[[0,10,10]],[1],1,[[],10,0,[]]]]
|
||||
[[[[1],[7,10]],5,9,[[],[1,8,7],0,[2],6]],[],[[7,[],6,[],6],[[1],8,0],[[3,0],[0,7],[2,0,3,6],[9,6,0]],[[0,1,7]]],[0,[7,[1],1],4,10]]
|
||||
|
||||
[[7,7,[[],[7]],1,[0,10]],[10,4,8,6,5],[7],[[[2,4,8,7]],[[10,1,6],[6],[5,5,6,8],7,[0,5,2,3,4]]]]
|
||||
[[[8],[[4,7],[8,10,0,10,8]],0,8,3],[[9],[8],[[1,2],5,0,[7,0],[1,3,10,8]],[0,4,[3,10,0]],[10,[],[]]]]
|
||||
|
||||
[[],[8,[9],9,3,7]]
|
||||
[[6,8,[5,4,[],[8],3]],[],[8,[4,[9,3,7,1],[7,1,9,5,7],[7,4,5],2],[9]]]
|
||||
|
||||
[[[[0,7],1,2,[7],10]],[6,7,6,[[3,7,2,7],[10]],[2,[9,9,5,7],[0,4,4],[5,8,2]]],[2,2,8,2],[[]]]
|
||||
[[],[10,[[0,10,1],7,0,9],6],[[4,6,[1,7,9],7,[5,3]]],[2,[[10,10],[8,0,3,8,2],[6]],2,7],[[6,3,4,1,[4,7,7,2]],0,[[1,3]],[[0,9,3,6],0,[5,6,6,0],10]]]
|
||||
|
||||
[[[3],0],[1,1,4]]
|
||||
[[6,[8,[2,5,2],[6],2],[1,8]],[3,3,7,[[2,10,1,5],[]],1],[[9,[8,6,7,3],[9,9,6]]],[[[],[9],9,6,2],1,[8,10,2],[],3]]
|
||||
|
||||
[[[[1],[3],7,[8,0,7],6],3],[],[8]]
|
||||
[[6,7,[4,[8,2,1,5],8]]]
|
||||
|
||||
[[8,[[],9,[4,6]]],[9,[10,[8,7,4,1,2],[3,3,2,10,7]]],[4,[[4,5,2],8,3,[3,4,10,5]],10,10,[[1,10,4,10]]],[[8],[[5],[6,1,0],2,10,2],3]]
|
||||
[[[10,5],[[0],[7,9,3],[2,7,5,2]],[7,10,[8],6],[[6,6,4,5,9],[3],4]]]
|
||||
|
||||
[[3,6],[1,[],3,9,[]]]
|
||||
[[9,[],6,[],[[3,8],[6],7]],[[],[0,9,5,[9,1,9]]],[[9,10,[8,3,7]]]]
|
||||
|
||||
[[],[1]]
|
||||
[[0,[],[5,[],5],[[]],2],[5,7,9],[1]]
|
||||
|
||||
[[[[9,9,2,9],[0,6,4,5,2],[8,2,2]],[0,7,4]],[5,9,[0]],[[10,[9,5,10,4],5,0]]]
|
||||
[[[[9,6]],[],[[9],10,7,4,[9,0]],5]]
|
||||
|
||||
[[[[7,2,1,6,6],9,[1,7,8],8],[5,[3,8,8]],[[5,0],[2,1],[3,0],5,[7,7]],[[],[4,6],[4,6,5,4]]]]
|
||||
[[7,7]]
|
||||
|
||||
[[9,1,[[5,10,6,7],[4,6,5,10,1]],[[4,7,9],5,[6]]],[4,[2,[2,2,5,3]]],[[3,[4]],[],2]]
|
||||
[[7,[0,8,0,[10,8,10]],[1],5]]
|
||||
|
||||
[[3,6,6,5],[8,[[4,5,6],5,[8,3,0,1],[10,5,2],[5,0,7]],[],4,[[0],[]]],[2,[4,[6,5,6,9,0],[],[3,0,2,9,8],[10,4,9,5,1]],7],[[[7,3,5,2,7],[2,2,5,6,9],[6],0],[8,8,7,[2,1,3,9]]]]
|
||||
[[[8,7,[7,4,8]],[]],[],[],[],[2,[[1,8,5,0]]]]
|
||||
|
||||
[3,3,5,9]
|
||||
[3,3,5,9,6]
|
||||
|
||||
[[],[[[],[3,4,0],9,[],1],0,2,[0,[5,2,6,8],[9,4,8,8]]],[[[10,6],[5,6,4,3],[],5,[4]]],[0],[]]
|
||||
[[[5,9,7],2,[[2,0,7],[2]],10],[[[9,6],[3],4,[],[9]],0,[[9,5]]],[1,[[10,4,6,9],5,3],1,[10,[9,7,0],[8]]],[[0,[9,7,5,10,4]],0,0,2],[[[]],7,2]]
|
||||
|
||||
[[[1,6,2,5,4],7,[8,8,9,9,[6]],[[],7,[],[10]]],[[[1,0,0,5,5],8,5],[[],1]]]
|
||||
[[5],[],[[[7,4,8],9,8],2],[10]]
|
||||
|
||||
[[10,1],[[[0]],[]],[[5,[9,1,0],[],8,4],1]]
|
||||
[[[[10,0],6,[8,6,7],1,2]],[[[7,3,8],[],[],3,[4,0,6]],[10,[6],9],[[9,1],[],[5,1,3],[],2]],[[1,[2,8,6,6],[6,9],[3,8],[4,10,8]]]]
|
||||
|
||||
[[[4,10,8,6],5],[8,[[3,4],[2,0,1,10,9],6,[4,10,10,8]],[9,[2,9,7]],[7,[0,9,6,1,0],6,5]],[]]
|
||||
[[3,[[1,10,1,1,8],8,[7,6,0],[6,10,5,3],[2,3,2,2,6]]],[]]
|
||||
|
||||
[[[],[[1,6,3,8,9],[7,0,2,4,3],[4,5,3,6],3,[2,2,10,9,0]],3]]
|
||||
[[],[[[8,8,10],[10,2,7,8],[1,0,7,4],[2,8,8,2],9],8,10,10,1],[[[3,2,6],[0,2,9,9,10]],[6,[],4,0,[5,4]],[[4,1],0,[],3,5],7,2],[]]
|
||||
|
||||
[[[0,[7,1,6,4],[2,3,4]],[],[]],[[1,[8,4,2,9],8,9],6,[8,10]],[5,[[3,10]],5,[]]]
|
||||
[[0,10,[],1],[],[4,8],[],[]]
|
||||
|
||||
[[[5,3,[0,10,1,1],[],[]]],[6,8,[]],[4,2,[2,0,[1],1]],[],[[[4,8,0],[0,7,9,8,6]],[[0,0],[9,10,3]],[[2,4,2],0,2,10],6,[5,[4],[4,2],[2,4,4,0,10]]]]
|
||||
[[[[1,9],[10,2,9,2,3],[8,7,4,8,4]],2,[7],[[0,1,5,2],5,5,10,10]],[[1,10,4]],[5,[],[[3,1,3,6],[7,1,9,1],[0,3,8],6,3]]]
|
||||
|
||||
[[2,[]],[[[9,0],[3,9,6,10,9],3,3,5]]]
|
||||
[[[0,1,[3,9],9]],[[7,[1,10,3,3,3],2,5],2,8],[10,10,[[0,3,8,0],10,[2,4,0,4],3],[[2,6,4,3,1],4,[8,9],[]],[[],[1,5]]]]
|
||||
|
||||
[[[],9]]
|
||||
[[],[0,5],[[4,8,[10],3,[8,9,4,4,4]]]]
|
||||
|
||||
[[[6,[3,1,1,4]]],[0,[9,[9],6],[[],9,[],0,[6]]],[8,[0,9],[2,10],9],[[8,[1,10],[9,0],[6],9],[4,[],[10,10]],[[4,2,8,8,10]]],[[7,[4],[3,8,0,3,0]],1,[8,[2,8,5,2],[0]],[10,[2,0,2,4,6],2],[1]]]
|
||||
[[[7,[],5,[8,8,10]],4,[1]],[[7,10,0],3,[7,[3,10],[3,8,5,0,7]]],[6,[[2,5],8,10,[2,8,5,1],[4,7,2,4,0]],2]]
|
||||
|
||||
[[4,0,10,1,[[1,6],2,9,10]],[[[3],[3,0,8,9,7],[5,6]],[[4,2,10,8],[1,9,10,6],6],6,[[5],4,[],[],1]]]
|
||||
[[4,[],[8,3],9],[[],[0,8,[6,9,6],[10,6]],4]]
|
||||
|
||||
[[5,9],[1,5,6]]
|
||||
[[3,[8,[0,5,7,4,2],[4,4],[7,10,3,1]],0,4],[[7,[0,8,6]],[[3],[7,9],[],[3,6,4]],2,4]]
|
||||
|
||||
[[10,[]]]
|
||||
[[],[7,[[0],[10,4,0,1]],3,[[7,0],[1,3],8,[6,0,3,1],1],[10,5,10,9,[]]],[3,6,4,5,3]]
|
||||
|
||||
[[],[[[2,8,1,9,8],[7,0,1,10],[9,0,4,7,6],5],4,[]],[]]
|
||||
[[0,5,5],[2],[[]],[7,[[1,0],[4,9],5]]]
|
||||
|
||||
[[10,5],[],[4,[],3,0],[3,3,9,[]],[]]
|
||||
[[],[[[8],[1],7],4,2,[1]],[1,10,5,[2,3]],[[8],[[5,6,6,3,0],[2,1]],3],[2,7,[10,[],[0]]]]
|
||||
|
||||
[[[3,5,[5],[8,8,3,7],9]],[],[0,[],0,3,7],[1]]
|
||||
[[2],[[[9,9],[0,7],8,[]],5]]
|
||||
|
||||
[[4,8,6],[[5,10],[[2],8,[],4],[[10,7,6,5,10],[3,8,7],[3,1,0,2],[8,8,7,1,5],8]],[6,8,0,[[8],4,[1,0,0],2],[[2,7,6,10,1]]],[1,[0,5]],[2,[],[],4,[[4,5,9],[5],4,[1,1,9]]]]
|
||||
[[[4,8,4,[5,0,8],10],0,[[10,2]],4,0],[[5],4,5,[[2],[5,6],[1,2],5,6]],[[[3,5,2,8],[7]],[3,[6],[1,4,6,5],[3,0,6,8,2]],9,2,7]]
|
||||
|
||||
[[],[],[7,2],[[]]]
|
||||
[[6,[[8,6,4,9,0]]],[[5,[9,6,2,4],[],2],5,7,[[1],10,[0],[8,5,4]]]]
|
||||
|
||||
[[],[[[7,8,4,9]],[2,[10,5]]]]
|
||||
[[0,2,2],[[[8,6,0,9],[],6,8,[6,1,5]],4,4]]
|
||||
|
||||
[[7,7,[4,[2,7,6,8,4],[5,9],8,[6]],[1,1,0,2],1]]
|
||||
[[[6,1],[],[]],[[5,9,[0]],[[2,7,6],4,[5,10,1,5],[],7]],[[2,[9,0,9,10]]],[6]]
|
||||
|
||||
[[3,[3,3,6,[8,0],[6,4]],2,0,[[5,0,4,1],1,[0,7,6,6,7]]]]
|
||||
[[],[5]]
|
||||
|
||||
[[[[1,10,1,5],[2,1,0,4,10],[4]],[[0,6,3],[4,1,6],9,7],[[7],[5,6,8],5,4,[10]],1,[0,[9,4],9]]]
|
||||
[[],[3,[],5],[]]
|
||||
|
||||
[[],[[],[3,5,0,7],[1],2,10],[3,[],0,[[9,0],[0,0,2,5,9],[1,6,2,6]]]]
|
||||
[[5,[7,7,[1]],[[],3,[2,8,7],[3,9,6]]],[0,[[7,10,1,3,8],5,[5,4,3,1,9],[2]],2,[[5,10]]]]
|
||||
|
||||
[[[[10,3,8],8,3,2,[7]],2,[[5,5,2,4],7],6],[7,0,[6,[4,9,9,5],[3,1,6,2,6],5],[1,4,2,9],[8,8,[10,4,10,9],[3],[2]]],[]]
|
||||
[[],[[4,6,[7,6]],[],[]],[[[],0,2,[7,4,0,9],[4]],[],0],[]]
|
||||
|
||||
[[5,6,[10,[8,10],[],10,[10,0]],[1,[8,4,6,2]]],[],[[[8,10,10,1]],[],[4,[10,9,7],10]],[[],[[1,10,4,0],[]],[6,9,[4,2,4],7,0],[7,[4],[8,0,7,8,4],[3,5,5,3]]]]
|
||||
[[[],[[10,0,3,2]],7]]
|
||||
|
||||
[[[[],1,[8,5,9]],2,[[1],[9,3,1,2,2],5,2,[]],9,[3,[],[2,1,7],8,[0,1]]],[[[1,6,1,6,5],[2,10,2,1,7],[0,6,0,4,2]],[],3],[8,10],[[[10,2,7],2,7,[]],5],[[6,1],[8,[],[3],[4]],6,8]]
|
||||
[[[],10,6,7,[4,9,[9],6]],[[]],[[],[6],8,0],[[[10],[8,8,3,8],8],[7,[]],[]]]
|
||||
|
||||
[[[[10,0,8,1],[7,6,6],[6,9,9,0,10],[7,4,3]],[[9,10,3,4]]],[[1,[0,3]]],[5,1,2,[9,[],[0,4,10,10]],9],[[9]],[7,6,8,0]]
|
||||
[[[[4],3,2,[]],[9,[],4,6,[5,1]],2,[]],[[6,[6,10],[],[],[6,6,10]],7,[5,7],[[9],4,[6,10,0,3],[]]],[[2,[1,8]],3,[9,[0,6,10]],[],3]]
|
||||
|
||||
[[7],[7,[[7,8],[0,7,1,4]]],[10],[10]]
|
||||
[[],[],[[[9,3,4,2],[4,5],1,[8,0,7,8,4]],6]]
|
||||
|
||||
[[[4,[],[0,0,3,6],2],9,[],7,0],[[],9,[],[],[0,0,1,1,[5,5]]],[3,10,[8],2,[5,[],5,[2,3],5]],[[[10,4,9],[10,9,10,0],[4,7],[10,2]],3,[0,2],10,1]]
|
||||
[[[],6,[],[2,5]],[[[7],[6,6],0,5],[4,4,[8],2,[0]],8,[4],1],[],[8,1,9,[10,[9,7,2,0]],[]],[10]]
|
||||
|
||||
[[8,[],2],[[[3,9,5,9,2],[2,3,10,6]],[5,[6,5,10,1],[7,9],[2,10,3,7,10],[4,0,9]],9,0],[1,[[7,6,1,4]],10,9],[],[[[3,8,7,7,6],[2,9,4,5],[10,1,5]],3,[6,8]]]
|
||||
[[5]]
|
||||
|
||||
[[8,0,3],[[[],[2,5,7],3,7,[5,10]],[8,5],0],[7,[[3],[9],0,9],[],[[],8]]]
|
||||
[[8,[4,[2,6],2]],[],[[[5,3,7,8,6],[2,9],2,[],[9,4,8]],5],[9,[[7,10,3,10,1]],10,9,0],[[3,7,[0,5],3,3],0]]
|
||||
|
||||
[[],[],[1]]
|
||||
[[[2,[9,8,0,1,7]],[9,10]],[10,[[],[9,5],10],7,2,1]]
|
||||
|
||||
[[4,[7,8,7,[5,5,1,1],0]],[[1,[9],[0,3,0,8],[5,2],1],1],[[[4,5,3],[3,10,3]],5,5,[[8,0]]],[[[],5,[0],3,7]],[[2,[5,4,1,3],[0,7,4,10,2],1,7]]]
|
||||
[[0,[[4,0,8,0]],[[2,2,9,4,2],[],[5,4,3,1],6]],[],[8,8,10,10,3],[[2]],[[9,4,10]]]
|
||||
|
||||
[[5,[2,0],10],[9,7,[[],8,[8,1,2]]],[[],[[5,10,7,4],[3,1],[7]],7],[7,8,10,2],[[],[]]]
|
||||
[[[7,2],10,2]]
|
||||
|
||||
[[1],[[5,2],[[10,3,3,8,7],[],2,5]],[],[[[7,4,8],0,[1],8,6]]]
|
||||
[[7,10,[9,[0,5],0,[8],0],4,[[6],0]],[],[],[[0,2,[7,4,9]],[3,6,8,[1]],10]]
|
||||
|
||||
[[[6,3],[[7],[1,6,3,5],3,[]],[[10,1,1,5],3,[]]],[[[3,4,6,0],[1],[1,10,4]],[],5]]
|
||||
[[],[[],[5],[[]],3,6]]
|
||||
|
||||
[[4,[1,0],[[10,2],4,[6,1,0],[4,4,3]],[[10,9,4],4,4,[1,9],[7,0,0]],[]],[[8,3,[8,10],4]],[[1,[],0,9,4],3,5,[]]]
|
||||
[[[[7,10,0],8],5,[4]],[],[[6,[10],[6,10,7,5,9],7]],[]]
|
||||
|
||||
[[],[2,7,[5,[5,7],[3,8,4,3,7],[]]]]
|
||||
[[],[7,9]]
|
||||
|
||||
[[3,[],[[5,9,7,2,3]],3,3],[[],9,[4,[7,6,9,5,8],7],9,2],[],[[7,[8,9,7,5],3,[5,2,5,9,1],[7,4,3,10]]]]
|
||||
[[[[8,5,6,0,0],[9,7],9],[[1],3,1,4,0]]]
|
||||
|
||||
[[2],[0,1,0,4,[10,[1,8,7,5],[2,9,3],5]],[0]]
|
||||
[[],[[[9,2,9,0,0],[2,9,1,9],[8,4,4]],[[6,5,8],0,[0]],[10,8,[9,9,4,6],8]]]
|
||||
|
||||
[[[4]],[5,[9,[6],[0,2],[],0],[[3,4],[3,6],[7,3]],[[9,7,4,7,6],[8,4,1],[8]],[]],[],[6,2,[[5],9,10],8,0]]
|
||||
[[7],[5]]
|
||||
|
||||
[[5],[[[8,4,7,2,8],[8,7,3],6,[],6],1,[5,[6,5]],7,7],[[10],[],7,[8],[0]]]
|
||||
[[[]],[6],[[],8,7,[3],[4]]]
|
||||
|
||||
[]
|
||||
[[],[[[6,8,0,8],[],8],[[5,1],7,8],1,10,[8]],[3,5,[[9,6,3]]],[[2],3,[[4,9],3,6,2,[1,0,8,5,4]],7]]
|
||||
|
||||
[[[8,[7,9,7,4],4],3,[7]],[[[10,2]],4,4,[4,[7,4],[4],1],5]]
|
||||
[[[],[[8,3,5,2,7]],[[],5],[],[9,2]],[5,[5,5,[5]],[]],[0,9,9,[]],[[5,4]],[]]
|
||||
|
||||
[[0,1,[1],10,4],[[[10,1,8]],9,0],[3,[0,2],0],[9,0,10],[]]
|
||||
[[[[2,1,0,0,4],[],0]],[],[0]]
|
||||
|
||||
[[7,7,10,[]],[3,[],[[6,10,7,4],0,9,[0]],[[10,2,7,6],[9],8,4,[3,5,6,0]]]]
|
||||
[[],[4,[9,6,6,[0,3,1]]]]
|
||||
|
||||
[[0,4,[[0,8,6,4],4,7,10],[8,[10],2,8],2],[6,[[6,3,6]],4,10],[2,6],[],[[],[[2,7,1,1],[10,4,7,1],[6,10,4,0]],6]]
|
||||
[[[2]],[[[9,4,5,2],5,7,[],[]]],[10,8],[3,8,[6,[0,10,10,0,2]],[[5,6,6,10],7]]]
|
||||
|
||||
[[8,[[7,6],[8,1,7]],[],5,2]]
|
||||
[[6,7,[2,7,[7,1,8,5,1],1,5],9]]
|
||||
|
||||
[[1,[],1],[],[7,[[2,10],8,[8],[10,1,9,4,10],[1,9,5]],[[9,4,9],[2,2,1,3,4],0,[8,3]],7]]
|
||||
[[[4,[10,9,9,2],3,9,4],[1,10,4,8,4],6,4],[7,1,[3,3,9]]]
|
||||
|
||||
[[[[2],[6,7,4,1],[9,3],1,[5,0,9,4]]],[[[2,5,0,0,1],[3,3],[9,1],9,1],9]]
|
||||
[[],[[1,[3,6,7,4,10],[7,2,6,0,6],[7],6],5,5],[[[5]],2],[[[3,9,4,9,4]]]]
|
||||
|
||||
[[[3,[3,0,9],9],[[10,9,1,8]],[6,8,[6,7,5,10,4]]],[[[],2,[],[9,3,8],8],[5,0,2,[],[0,9,4,3]],[[],1,8,1,0],[]],[[[4,7,8,6,2],6,9,[1]]],[4]]
|
||||
[[[[],8,10,[6,6]],0,0,[10,[],[0,2,8,3,7],[7,5]],[[0,4,0],3,10,2]],[4,[],0,[],6],[[[7,8,0],[7,5,7],[10,4,3],[1,5,2],9]]]
|
||||
|
||||
[[],[[[6,10],7,1,0,[]],[[9],[8,9,9,10,8],0,8],2]]
|
||||
[[10,0,4,[[0,2,10],[9,2,4,7,7],[5],[9]],[[3,2],[2,9,10],[3]]],[2,1],[10,[5,[2,8,2,4],6,4],4]]
|
||||
|
||||
[[8,[[4],[2,9,10,6],0,4,6],[[7,5,3,0],[9],4,[7,5,10,10]],[]],[]]
|
||||
[[[[]],1,[[],[10,7,2,1],[6]],6]]
|
||||
|
||||
[[[[1,6,7,3],3],[1,[7,0,6],7,4,[7]],[2,5],0],[[],[[4,5,3,4],5],[7]]]
|
||||
[[5],[[],[],5,[[8,3,3]],[[],3,8,9]],[[0,[0,2,9],[2]],[[8],4],[[0,3]],[[6,4,4,3,2]],[[0],[],[0,9,10,1],8,8]],[2,[[],[7,7,0]],[[5,7],[8,2,8,1,5]],[[9,2,6],[1,5,9,1]]],[[[2],[]],[8,7,5,[2]],[[2,1,8,1],5,4,6,[0,5,6]]]]
|
||||
|
||||
[[],[1,6,10,1],[[8,9,[3,8]],10,7,[[0,8,6,7,10],[7],[1,0],2],9],[[[4,1,0,10],1,4,[8]],0,[4,10,9]],[8]]
|
||||
[[[[4,8,9,3],6],5,[],5],[]]
|
||||
|
||||
[[[10]],[[],8],[[[6],7,9,[6,6],10],[8,4]]]
|
||||
[[8,5,3,[],2],[8,[8,[0,0],5]]]
|
||||
|
||||
[[[1,0,[],[8,8,3,2],0],2,2,[10,[7],[2],7]],[10]]
|
||||
[[1],[0,[[6,7],[1,10,7,6],[1,8,7,4],10,5],5],[[4,0,[7,0],[8,3,8,6]],[[2,4,10,8,6],3],8,[]],[[4,[9],[7,4,10],[4]],[3,[6,6],[],5],9,[]],[[[6],[2,1,1,3,5],[2,9,3]],6,[[1],[5,7,5]],[[4,3],[8,2,6,4,6],0,5,[5,8]]]]
|
||||
|
||||
[[],[[6,[1,0,0,9],1,6],[[4,9],0,1,7,[2,2,10,7,3]],1]]
|
||||
[[],[[[4],1,10],[],4,[[9,4],0],[[9],[10,1,10],10,2]],[8,7]]
|
||||
|
||||
[[[],7,[[8,4,9,2],[2],4,9]],[[[0],5,[],10,[]],[3,[1,9,9,2],[9,10,0,0]],[7,9,[8,7],2],[9]],[9,[[9,4,6,8,10],8]],[[[0],5],10]]
|
||||
[[7],[0,6,[[6],[],3,[3,8,6,2,8],6]],[9,6,0]]
|
||||
|
||||
[[[[4,4,7],[6,7,2,2],[]],1,[[],7,0]],[[5],[2,2,[3]],[6,2,4,[]],[[3,8],1,[8,6,0,10,5],[8,10,6,1]],3],[8]]
|
||||
[[0],[[10,[],[10,4,7,3,10]],[[5,9],7,5,8],9],[9,0,5,1],[]]
|
||||
|
||||
[[0,0,[[6,10,1,5],[8,0,4],10,[10,9,1,5]]],[[4,[2,1,1,5,4],[5],[]]],[3,7,0,[],10]]
|
||||
[[3],[4,5],[6,[4,5,[]],5,4]]
|
||||
|
||||
[[[[6],6],10],[]]
|
||||
[[[],7,[[4,3],[7,3],1],[4,[7,6,6,3,9],[2,2,0,8],2]],[1,5,[[5]],[[0,2,5,2]]],[[[4,8,10,0,3],[6,1,8,1,4]]],[],[1,[[],[],2]]]
|
||||
|
||||
[[9,[]],[7,[[3,0,2],[],10,6,[10,7,8,4,6]]]]
|
||||
[[7,6]]
|
||||
|
||||
[[8],[2],[6,1],[6,[4],[],[4,8,[5,2],5]]]
|
||||
[[],[[[1,9,0,1]],3,5,[6,[3,4,3],5,[6,3,7],[2]]],[5,[[3],0],5,[],5],[7,[[9],10],4,9],[]]
|
||||
|
||||
[[[9,[8,5,4,8]]],[3,[7,[6],3],2,[5]],[[[1,8],[6,6,5]],6]]
|
||||
[[2,[[2]]],[10,6,3],[[[10,4],0],[],[5],[],[0,[10],[1],[1,2,7]]]]
|
||||
|
||||
[[[[],[],6,[10]],[],7],[3,[10,9,2,[]]],[5,[[10,10,2,7,0],6,[]],[8,[0,7]],[[0],1,[9,10],4,2],[]],[]]
|
||||
[[[9,[5,4,6,9,5],[10]],[[5,9],0,6,5,10],[5,[2],[4,9,4,9,0],[5,4],[0,1,3,6]],3,[[3,9,7],[6,10,0,0]]],[[7,8,10]]]
|
||||
|
||||
[[[3,[4,0,0,9,8]],2,0,[6,[5,7]]],[[9],[],4,0],[6,2,[9],[10,[5,4,9,10],6,4]],[9],[6,6,[[7],[6]],[[8,0],5,10]]]
|
||||
[[],[8,1,0],[5],[9,5,[6,[6,10,6]]],[]]
|
||||
|
||||
[[8,7,[5,1,[4,1,3],[8,1,0,8,2]],3,0],[[[0,1,3,1,1],[9,7,2,4],4,6,4]],[10,5,7,4]]
|
||||
[[7,[]]]
|
||||
|
||||
[[0,7],[],[],[0,2],[0,2,[5,5,[4,6,3,10,0],0],[[5,1],[8,0],[5,7,5,0],2,4],[8,[],[10,2,3,4,8]]]]
|
||||
[[[8],[2,10,6],9,2,[5,[],5,[6,0,4,5,7],5]],[7,1]]
|
||||
|
||||
[[[],[[9,7,1,3],[6,3,2,7,6]],[7,[6,9,5,0,9],3],5,[]],[],[[[3],[0,7,1,7]],[0,[10,6,2,10,4],[5,8,0,6,7],0,[]],6,9],[[[4,6,0,0,2],7,[9,7,7,7,0],8],6,[[],[0,3]],8],[[9,[1,10],2],4,[[0,4,10],[4,7,8]],[[2,0,0,9,8],[4,2,9],[5,10],1,[8,4]],3]]
|
||||
[[]]
|
||||
|
||||
[[[[6]],4,8,[],6]]
|
||||
[[],[1,9,[[],9,[10,7,10,9,9],6,[0,10,1,4]]],[3,[8],2,9],[5,[4,7],[4,[8]],5,6],[[0],[10],[]]]
|
||||
|
||||
[[[[5,1,10,5],[2,10,6],1,0,1],[[1],3,[],2,7],4,4,6]]
|
||||
[[3,[[7,3,0,6],7,[1,4,5]],[[4,7],[0,6,10,2,9],[],[4,2,1,9,7]],[9,10,[10],1,9],[]],[8,[],[3]],[[[3,2,6,1,0],4,[4,9],[3,1],3],[],[[0,4],[4,2]]]]
|
||||
|
||||
[[7,5,1,10],[2],[]]
|
||||
[[],[[],7,[],9,[[0,9,4],[8,0]]]]
|
||||
|
||||
[[3,9,0],[[[9,0,7,4],[1,6],9],10,[3],9,[0,[4,7,4]]]]
|
||||
[[5,3,[1,[8],0,9],1],[[[8],8,8,8,[6,7]],4,0,[4,0,9,[3,8,8,8],10]],[[[],7,[8,8,1,5]],8,3,4]]
|
||||
|
||||
[[[9,[8],[10,3,10],7],4,3,6,[8]],[[]],[8,[10,10,[]],[4,[6,9,3,10,6],8,10,2]]]
|
||||
[[[[3],[5,0,9],[],2,[4,1]],[7,8,3],[10,[1,4]],[[0,7],[6,4],7,[10,0,0,1]]],[[[5,2],1,[10],10,[3,5,6]],[[],[0,6,2],[0,10,0,1,3]],[[],[1,7]],[1]],[],[],[9,[7],2,[[4,5,4,0],[8,1,1]]]]
|
||||
|
||||
[[[],3],[3,[],4],[5,4,6,[]]]
|
||||
[[2,[8,2,[4]],5,[5,[9,1],[10,6,10]],9],[10,[5,8,[],[5],[]]],[[],1,[1,[7,6,5,0,4],[6],[5,5,10,5,2]],0]]
|
||||
|
||||
[3,9,10,6,3]
|
||||
[3,9,10,6]
|
||||
|
||||
[[1]]
|
||||
[[[[],[],[10,8,6]]]]
|
||||
|
||||
[[[5],[10,[3,10,4,1],7],5,[3],[]]]
|
||||
[[],[[7],[[7,8,5],[6,10,4],9,[0,10,6]]],[[[8]],[5,[],[2],[6,5,0]],[[10,1],10,[],[9,1]],[5,4,[4],[],10],[5,[7],[10],[2,10]]]]
|
||||
|
||||
[[2,9,[[9,7],[],[4,6,3],[0,6,10,2,10]],[[6,1,1,1,4]]],[10,4]]
|
||||
[[[],[6,8,1]],[[[7]],5,6,[0,2,2,6],[]],[3],[[4],4,5],[1,[[9,10],[1,5],4,[6,7]],0,6]]
|
||||
|
||||
[[[7,9],5],[2,[5,9,7,[7,2,9]],[9,[8,7]]],[3,[[],10,4,[7],3]],[1,[[],5,0],5],[[],[[],5,0,4],2]]
|
||||
[[[[4,3,0,10,3],[6,1,10],4,8],[8,[],[8,0],10,[]]],[],[1,9,4],[10,8,[5,[9,8]],3]]
|
||||
|
||||
[[6,8,[[1,4,10],0,7,[10,5,10]],[[10,8,9]]],[9,[9]],[9,[3,1,[],[1,1],8],7]]
|
||||
[[],[5,8],[7,[7],[[3,6,2],6,0,[2,7],[6]],[10,[2,10,8,6],[2],[],[8,10,10,3,4]],[[8,5,8,8,10],7,1,[10,10,8],[3,5,4,3,3]]],[[[],5,10,[1]],4]]
|
||||
|
||||
[[4],[10,6]]
|
||||
[[0,10,4,[9,10]],[],[1,8],[9,7,[2,[5,4],[10],[7,1]],0]]
|
||||
|
||||
[[[],[5,[4,10,2],4,[10,8,10]],[]],[],[4,[4,6]],[[],[2]]]
|
||||
[[1,5,[[4,2,5],[],[1,9,4,7],[10,6,2,3]],[[9,2,0]],0]]
|
||||
|
||||
[[2,[8,7,[9,0,0,9],[0,8]]],[],[[3,6],[[1,8,0,5,6],5,2],0,6]]
|
||||
[[[3],[[1,6,1,10,0],[7],[9,2,0,5,9],[1,10,5,8],[8,6,2,6,5]],5,1],[]]
|
||||
|
||||
[[[1],8,3,7,10]]
|
||||
[[[[1],[9,2,0,6],6,[5,4,7],[1,9,4]],7,0,[]],[2,4],[[9,9,[10,5,5],6],3,0,[[1,8],[],10,0],10]]
|
||||
|
||||
[[10,4,[8,[3,6,1,1],7,10],[],[[2,6,6]]]]
|
||||
[[2,4],[[[2,0,8],[2,0,6,8,3]]],[[[5,1],9,[0,4,6,4,4],8,1],[1],9,[],5],[6,4,[[1,5,7],3],[[9]]],[]]
|
||||
|
||||
[[],[[[],4,[9,2,9]],[[4,6,3,6]],[1,8,2],7],[[[3,1,5,5],[]],9,6],[0,4,1,6,0]]
|
||||
[[[[0,10,1],[2]],2]]
|
||||
|
||||
[[[3],[[],4],1,8,2],[[2,[6,10,1,8,0]],0,[8,[],[10,9,7],[]],2],[[[4,4,2,6],[],7],3,8,10,3],[]]
|
||||
[[1,[6,3,[8,6,4,4],7],[7,8,[3]],1,2]]
|
||||
|
||||
[[2,[0,8],9],[[[0,3,0,4,8],[2],[10,4,1,4]],[],[5],8,5],[0,[6],10,2,[1]]]
|
||||
[[9,10,2,[[0,7,5,0],2,[2,10,9,8]],[[6]]]]
|
||||
|
||||
[[[4,3]]]
|
||||
[[[[8,9,3,3],[],[10,1,3,1,8],8,7]]]
|
||||
|
||||
[[[9,[0,1,7,3,4],9,9],[],[8]],[[0,[9],[3,6,3,0],7],[9,4,0,[8,1,2,8],8],[2,8,[4,5]],[8,0,[9,9,7]]],[[0,[8,6,7,7,4],2],[7,[1,2,7],[7]],9,[[4,3,4,2],[1,7,3,1],9],[7,[5],[9,5,10]]],[]]
|
||||
[[8,[0,[3,0],4],6,[[8,6,5,3],[4,7],0]],[[3,[7,0,7,2,6]],[[0,0],[],[0,5,0,9,8]]],[]]
|
||||
|
||||
[[4,7,[7],6,[8,[]]],[]]
|
||||
[[],[[9,[10]],[10]],[9,1,5,[0,7],[9,6,[6,0,4],[10]]],[[[4],[1,0],1],9,3],[[[9],1,[],[7,0],2],3,[[5,10,9],0,3,[7,9,10,5,0],6],[6,3,[],6,[3,3,6]],[[9],[2,1,7]]]]
|
||||
|
||||
[[[[0,5,8,5],[5,5,6,3,6],[]]],[5,4,[],[],[[6,4,3,4]]],[[[9,3],[]]],[]]
|
||||
[[[7,[3,6,3,8,2]],6,7,9],[6]]
|
||||
|
||||
[[5,[[1],[7,4,10,4],4,[8,3,0,2],[]],5,[9,[8,2,10,4,3],5,6,3],6],[[],[3,7,[5,1,2,1]]],[[[2,3,8,5],[0,4,4],10],2,[[1,4,2],5,8,2,3]]]
|
||||
[[[[8,6,8,2],[1,8,4,4],7,[5,4,10,7,4]],[[7,2,5]]],[3,10,[6,[1],[]]],[6,[],3],[[[7,0,0],9,4,3]],[0,[1,[],8],7,3]]
|
||||
|
||||
[[[1,6,[7,1,3]],[[8],[8,8,9,1,1]],[[6,6,1,3],[2]]],[[],8,[],3],[],[6],[6]]
|
||||
[[[[],[],7],[[9,8,7],3],4]]
|
||||
|
||||
[[],[9]]
|
||||
[[10,[[10,9,9,1,9]],[[5,5,7,0,4]],9,1],[],[[],5,[6,[3],[1],[1,8],[6,3,3,6]],2],[[[3,1,4,3,2]]],[3,[2,[10]]]]
|
||||
|
||||
[[1],[[[0,0,10],[9,1,1,1,4],[7,0,5,3],[2,2],8],[[0,4,6,9,5],8],[6,[6,8],7,[],[8,0,6]],[],[[],7]]]
|
||||
[[],[[[6,1,9,8,5]],[[1,0,1,4],2,[],3]],[0,2,0,[[8,5,7,4,6],[5],4,[6,5,6,2,0]],10],[6,7]]
|
||||
|
||||
[[[],3,6,[4,1,[5,0,5,3],[3,0],5],[1,1,2]],[3,2,[[1,3,7,9],[5]],6],[6,[],5,2],[3]]
|
||||
[[[[0,4,5,0],9,3,10,3],[[4,3,4,9,10],[6,1],[8,10,10,4,3],0]]]
|
||||
|
||||
[[3,6,4,7],[5,8,0,[[0,6]]],[],[]]
|
||||
[[[[],[3,1,0,7,2],3,[10,3,0,2,8]],3],[0,9,0],[[[8,8,0,9,0],[6,0,5]],[[3,4,9],7]],[],[0]]
|
||||
|
||||
[[],[[0,1,[4,1,4,2],[6,5,3],[]],1,[9,3,[10,4,5,0,4]],[[5,7],2],[[8,7]]],[8,4,9]]
|
||||
[[8,[7,[10],[2,8,10,9,3],[6,5],3]],[5,5,[[3],[]],6,[1,0,7,8]],[7,[6,5]],[],[10,5,4,[2,0,4,[6,10,4,4],[3,3]],8]]
|
||||
|
||||
[[[6],[10,[0,2,5,10,9],2],[[],[0],9,[1,0,5,8]]],[3,[[4],[3],3,[1,4,2,0,0],[]],[[8,3,6,10,7],1],[2,2,5,[6],[0,7]]]]
|
||||
[[7],[1,3,[1,2,2],2,3],[5]]
|
||||
|
||||
[[[[]],0,[[4,6,4]],0],[],[3,[],[1],[10]],[[1,[2,5]],[[7],[6,10,6,6,6],6],[[0,8,5],[4,0,9]]]]
|
||||
[[5,8,2,[0,3]],[6,[[6,4],[7,10,9,10,3],2],2,6],[1,[9,[6,4,1,2],8,[10,2,5,9,8],[]],[]],[],[[[8,2,3],9,[5,6,3,3],4,[4,10]],7]]
|
||||
|
||||
[[8,[2,0],[10],2,3],[[3]],[[9,[10,9,9,5,7],2],[[],9,[6,8,5]],[10],8,[]]]
|
||||
[[7,10,[2,[0,6,4,0,5]],[4]],[[],[],4],[7,[5,10,2,[0,7,3,9,7]],[[7,2,1,3,5],[7,5,3,1,6],3]],[[[1],6]]]
|
||||
|
||||
[[],[[7,[],[5,7]],1,7]]
|
||||
[[7,5,4,9],[[5],[[8,2],[1,5],3,4,1],[7,10,4,[],0]]]
|
||||
|
||||
[[[8,6,[6,3]]],[9,[],[[5,6,0]],[2,[1,10,10,6]]]]
|
||||
[[0,0,[[1,1,10,1,3],2,[7,0,6],3]],[],[0,2],[[3],3,5]]
|
||||
|
||||
[[[4,7,[10]],[1,4]],[[2,[4,1,6,0,4]],2,[[],[]],9],[6],[[],[9],7,5],[9,10,[7,[6,0,5,1,3]],2,[]]]
|
||||
[[4,[],[[5,4],[6,2,3,4],8,[4,3],7],[9,3,3,0],[[],1,6,2,9]]]
|
||||
|
||||
[[5],[6,[]],[]]
|
||||
[[],[[1,5,[7,0],[2,7,6,1],10]],[]]
|
||||
|
||||
[[5,10,3]]
|
||||
[[[7,1],[1,[7,5,9,7]],[0,[7,1,7,9,1],[9,2,9,9,1],5,[9]],[[]],[]],[0,[[9,0,3],[3],1,[1],1],9,[10,6,[],[10,9,1,10,10],[2,2,8]]],[[1,7,4],6]]
|
||||
|
||||
[[],[]]
|
||||
[[[[6,3,9],[5,5,8,10,4],[7,4,9,1,3]],1,6],[[[8,2,4,5],[],[1,7,7]],0]]
|
||||
|
||||
[[0,10,[[4,0],4]],[9,[],[4,9,[10,5,8]],7],[10,[]]]
|
||||
[[],[[],7]]
|
||||
|
||||
[[[6,5],2,8,7,[[6,2,10,1],1,[2,5,10,7],1,[2,10,7,5]]],[6,9,8],[4,[],[[1,8]],1,[7,[1,0,6,8],[8]]],[[],6,1,[7,[],0,[6,7,8,10,5]]],[[],[],[7,9,[5,10,6,3],[2,10,3],8],7,[9,[0,10],[8,2,6,0,1],[10,1]]]]
|
||||
[[[9,[0,9,10,7,4]],6,[6,[8,5,9,6,8],[4,10,6],4,[]],[4,9,7,2,7]],[4],[[],[[4,2,5]],[4,[7],[9,5,8,7,7],[],[10,9,6]]],[10,[],10,[4]],[6,1,3,[[2,1],[1,9,7,3],5,[2,3,5,4,9],6],1]]
|
||||
|
||||
[[6],[8,5,[4,[1,10]]]]
|
||||
[[1,7,5,9],[],[],[0,9,1],[0,[2,6,10,[10,7,3,5,3]]]]
|
||||
|
||||
[[3],[1],[]]
|
||||
[[0],[8,[[6,7,6],3,7,[4,5,6,10,1],0]],[[[4],[6,0],0,[8],[8,1]],[[1],4,8]],[8]]
|
||||
|
||||
[[[[2,3],5],[[4,2,4,10,3],[4,0,9,4,2],4],[2,[1,5,2,6,7],8,[0,5,1,4,8]],[[3,6,7,10],[6,7,4,7],[9,4,10]],[[9],[4,2]]],[]]
|
||||
[[[7,8,[8,2,10,2],[],[2]],3,9,0,1],[[[5]],0,7,[[7],2]],[[2,[],[8,5,4,1],9],5,6,[[1,2,8,0],4],[]],[2,[9,[],[10,10],8,[]],1]]
|
||||
|
||||
[[],[],[[[5],[9],5,7],5,[]],[[3,[1,2,6,3],9,[3,2,7],0]],[[[5,9],5,[8,1,7]],[1,1,[7,7,8,10]]]]
|
||||
[[[[10,0],[0,7,2]],3,[0,3,2,[7,1,9]],[[10],0,[5]],[[2,8,0,5],[7,3],4,10]],[9,[[]],[[],[1,4,4],7,[0,1,6,7,2],[6,9,0,4,4]],[9,[9]],[6,[4,5,0,8],1,[8,3,1,10],[9]]],[7,[[]],[5,[1,9,6]]]]
|
||||
|
||||
[[4]]
|
||||
[[5],[[2,[10,7,10,9,10],0]]]
|
||||
|
||||
[[[],[[1,8,6,1,6],[3,2,1],2,[10,3,7,1,4],0],3,[3]],[9]]
|
||||
[[],[],[[8],[[],5,[1,8,7],9,1],[[7,1,2,4,3],7,[5,7,1,6,6],8,2],10],[4,[6,[8,8,6,7]],1,[[],[5,10,3,2,7]]],[1,[],[1,[0],7,[9,0]]]]
|
||||
|
||||
[[8],[2,[[9,2,9,9,10],[3,5,3,4]]],[10,[[10,7,10,0]],10,[[2,6],[4,9,6],[3,4,5,0,2],[]],7]]
|
||||
[[4],[3],[],[10]]
|
||||
|
||||
[[[[0],7,[1,1,10,2,0]],2,[[10,5,10]]],[[[6],[4,4,6]],[3,[]],9,[[8,3,3],[6],[9,5,7,7],8],10],[]]
|
||||
[[6],[[[3,10]],[]],[8,10,[],9]]
|
||||
|
||||
[[5,5,[],9]]
|
||||
[[[[5,6,6,3]],2,[[4],0,7,2]],[[],[[10,5],[],[5],[8,1,0,3,2],3],[[7,3,0],5,0,4,[9,1]]]]
|
||||
|
||||
[[],[[2],7,4],[2,9,10],[[[],[7,4,4,7,3]],[]]]
|
||||
[[9],[]]
|
||||
|
||||
[[[10,5,4,1,8],7,[5],[8]]]
|
||||
[[0,10,[]],[],[0,6,[7,[4],[],[9]]],[4]]
|
||||
|
||||
[[[8],[10],9,9]]
|
||||
[[3,[[1,0,5,1,5]]]]
|
||||
|
||||
[[[4,5,10],[7,[10,3,1],[2,6],10],[[6,0,8,9,6],4,[]],[]],[9,[],10]]
|
||||
[[],[7],[10,10,[6]],[[[2,4],[6,2,2],0],6],[[[2,3,0,0,2],[6,5,7,2],2,4],6,6]]
|
||||
|
||||
[[1],[[]],[[[9,1,9,5],[6],[9,3,5,2,6],9,[]],6,[],[[2],9,[8,3,1,3,1],[3,10,6]],[[0,9,1,8,2]]]]
|
||||
[[[8],[[7],[7],5],5,5],[4,[[5,9,10],[]],[[4,7,5,1]],[[10,1,7]],4],[5,[[4,8,4],7,0],[2],[],[8,0,[5,8],[8,5,7,2,8],4]]]
|
||||
|
||||
[[[0,[3,3,10],[],[0,9],5]],[[4,[],[7,2,5],[0,7],[0,10]]],[],[[[1,8]],[[9,7]],5,[[9,1,0,1],5,5,5,[10]],[[9,4,6,6],4,4,[2,6,9,4,7]]],[4]]
|
||||
[[[[10,8,4,0],[9,10,1]],[],[],[[9,8,4,6],2,9],4],[[2,[6,7,8],10,[],[10,4,3,9]],[5,[9]],5,[6,[10],[7,3,6]],[]],[],[[[5,7],[9,7,7,6,9],[9,10,5],8],[[],3,[0,5,0]],3,6,6],[9,[7]]]
|
||||
147
2022/inputs/14.txt
Normal file
147
2022/inputs/14.txt
Normal file
@@ -0,0 +1,147 @@
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
527,102 -> 527,106 -> 523,106 -> 523,111 -> 540,111 -> 540,106 -> 533,106 -> 533,102
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
541,165 -> 541,166 -> 551,166 -> 551,165
|
||||
506,68 -> 506,70 -> 502,70 -> 502,77 -> 513,77 -> 513,70 -> 512,70 -> 512,68
|
||||
541,165 -> 541,166 -> 551,166 -> 551,165
|
||||
565,161 -> 569,161
|
||||
483,51 -> 483,52 -> 500,52 -> 500,51
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
538,114 -> 538,116 -> 536,116 -> 536,122 -> 552,122 -> 552,116 -> 544,116 -> 544,114
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
499,13 -> 499,15 -> 495,15 -> 495,22 -> 506,22 -> 506,15 -> 501,15 -> 501,13
|
||||
506,84 -> 510,84
|
||||
499,13 -> 499,15 -> 495,15 -> 495,22 -> 506,22 -> 506,15 -> 501,15 -> 501,13
|
||||
512,80 -> 516,80
|
||||
499,13 -> 499,15 -> 495,15 -> 495,22 -> 506,22 -> 506,15 -> 501,15 -> 501,13
|
||||
512,84 -> 516,84
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
538,114 -> 538,116 -> 536,116 -> 536,122 -> 552,122 -> 552,116 -> 544,116 -> 544,114
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
506,68 -> 506,70 -> 502,70 -> 502,77 -> 513,77 -> 513,70 -> 512,70 -> 512,68
|
||||
509,82 -> 513,82
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
538,114 -> 538,116 -> 536,116 -> 536,122 -> 552,122 -> 552,116 -> 544,116 -> 544,114
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
553,161 -> 557,161
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
554,133 -> 558,133
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
551,136 -> 555,136
|
||||
563,136 -> 567,136
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
527,102 -> 527,106 -> 523,106 -> 523,111 -> 540,111 -> 540,106 -> 533,106 -> 533,102
|
||||
499,13 -> 499,15 -> 495,15 -> 495,22 -> 506,22 -> 506,15 -> 501,15 -> 501,13
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
499,13 -> 499,15 -> 495,15 -> 495,22 -> 506,22 -> 506,15 -> 501,15 -> 501,13
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
517,95 -> 522,95
|
||||
503,86 -> 507,86
|
||||
506,68 -> 506,70 -> 502,70 -> 502,77 -> 513,77 -> 513,70 -> 512,70 -> 512,68
|
||||
559,155 -> 563,155
|
||||
521,86 -> 525,86
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
519,98 -> 519,99 -> 529,99 -> 529,98
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
527,102 -> 527,106 -> 523,106 -> 523,111 -> 540,111 -> 540,106 -> 533,106 -> 533,102
|
||||
483,51 -> 483,52 -> 500,52 -> 500,51
|
||||
515,86 -> 519,86
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
483,51 -> 483,52 -> 500,52 -> 500,51
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
519,98 -> 519,99 -> 529,99 -> 529,98
|
||||
506,68 -> 506,70 -> 502,70 -> 502,77 -> 513,77 -> 513,70 -> 512,70 -> 512,68
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
527,102 -> 527,106 -> 523,106 -> 523,111 -> 540,111 -> 540,106 -> 533,106 -> 533,102
|
||||
519,98 -> 519,99 -> 529,99 -> 529,98
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
557,130 -> 561,130
|
||||
518,84 -> 522,84
|
||||
545,127 -> 558,127
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
556,152 -> 560,152
|
||||
506,68 -> 506,70 -> 502,70 -> 502,77 -> 513,77 -> 513,70 -> 512,70 -> 512,68
|
||||
559,161 -> 563,161
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
541,165 -> 541,166 -> 551,166 -> 551,165
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
538,114 -> 538,116 -> 536,116 -> 536,122 -> 552,122 -> 552,116 -> 544,116 -> 544,114
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
527,102 -> 527,106 -> 523,106 -> 523,111 -> 540,111 -> 540,106 -> 533,106 -> 533,102
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
509,86 -> 513,86
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
484,48 -> 484,43 -> 484,48 -> 486,48 -> 486,38 -> 486,48 -> 488,48 -> 488,43 -> 488,48 -> 490,48 -> 490,45 -> 490,48 -> 492,48 -> 492,40 -> 492,48
|
||||
520,92 -> 525,92
|
||||
556,158 -> 560,158
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
553,155 -> 557,155
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
538,114 -> 538,116 -> 536,116 -> 536,122 -> 552,122 -> 552,116 -> 544,116 -> 544,114
|
||||
538,114 -> 538,116 -> 536,116 -> 536,122 -> 552,122 -> 552,116 -> 544,116 -> 544,114
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
499,13 -> 499,15 -> 495,15 -> 495,22 -> 506,22 -> 506,15 -> 501,15 -> 501,13
|
||||
562,158 -> 566,158
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
550,158 -> 554,158
|
||||
515,82 -> 519,82
|
||||
557,136 -> 561,136
|
||||
506,68 -> 506,70 -> 502,70 -> 502,77 -> 513,77 -> 513,70 -> 512,70 -> 512,68
|
||||
547,161 -> 551,161
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
531,95 -> 536,95
|
||||
527,102 -> 527,106 -> 523,106 -> 523,111 -> 540,111 -> 540,106 -> 533,106 -> 533,102
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
527,92 -> 532,92
|
||||
523,89 -> 528,89
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
499,13 -> 499,15 -> 495,15 -> 495,22 -> 506,22 -> 506,15 -> 501,15 -> 501,13
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
541,149 -> 541,141 -> 541,149 -> 543,149 -> 543,144 -> 543,149 -> 545,149 -> 545,144 -> 545,149 -> 547,149 -> 547,148 -> 547,149 -> 549,149 -> 549,144 -> 549,149 -> 551,149 -> 551,141 -> 551,149 -> 553,149 -> 553,147 -> 553,149 -> 555,149 -> 555,146 -> 555,149 -> 557,149 -> 557,147 -> 557,149
|
||||
527,102 -> 527,106 -> 523,106 -> 523,111 -> 540,111 -> 540,106 -> 533,106 -> 533,102
|
||||
490,35 -> 490,31 -> 490,35 -> 492,35 -> 492,31 -> 492,35 -> 494,35 -> 494,29 -> 494,35 -> 496,35 -> 496,26 -> 496,35
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
560,133 -> 564,133
|
||||
506,68 -> 506,70 -> 502,70 -> 502,77 -> 513,77 -> 513,70 -> 512,70 -> 512,68
|
||||
538,114 -> 538,116 -> 536,116 -> 536,122 -> 552,122 -> 552,116 -> 544,116 -> 544,114
|
||||
524,95 -> 529,95
|
||||
492,65 -> 492,64 -> 492,65 -> 494,65 -> 494,59 -> 494,65 -> 496,65 -> 496,64 -> 496,65 -> 498,65 -> 498,62 -> 498,65 -> 500,65 -> 500,63 -> 500,65 -> 502,65 -> 502,59 -> 502,65 -> 504,65 -> 504,64 -> 504,65 -> 506,65 -> 506,63 -> 506,65 -> 508,65 -> 508,63 -> 508,65
|
||||
24
2022/inputs/15.txt
Normal file
24
2022/inputs/15.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
Sensor at x=3988693, y=3986119: closest beacon is at x=3979063, y=3856315
|
||||
Sensor at x=1129181, y=241785: closest beacon is at x=1973630, y=-98830
|
||||
Sensor at x=2761889, y=2453622: closest beacon is at x=2803715, y=2643139
|
||||
Sensor at x=3805407, y=3099635: closest beacon is at x=3744251, y=2600851
|
||||
Sensor at x=3835655, y=3999745: closest beacon is at x=3979063, y=3856315
|
||||
Sensor at x=3468377, y=3661078: closest beacon is at x=3979063, y=3856315
|
||||
Sensor at x=1807102, y=3829998: closest beacon is at x=2445544, y=3467698
|
||||
Sensor at x=2774374, y=551040: closest beacon is at x=1973630, y=-98830
|
||||
Sensor at x=2004588, y=2577348: closest beacon is at x=2803715, y=2643139
|
||||
Sensor at x=2949255, y=3611925: closest beacon is at x=2445544, y=3467698
|
||||
Sensor at x=2645982, y=3991988: closest beacon is at x=2445544, y=3467698
|
||||
Sensor at x=3444780, y=2880445: closest beacon is at x=3744251, y=2600851
|
||||
Sensor at x=3926452, y=2231046: closest beacon is at x=3744251, y=2600851
|
||||
Sensor at x=3052632, y=2882560: closest beacon is at x=2803715, y=2643139
|
||||
Sensor at x=3994992, y=2720288: closest beacon is at x=3744251, y=2600851
|
||||
Sensor at x=3368581, y=1443706: closest beacon is at x=3744251, y=2600851
|
||||
Sensor at x=2161363, y=1856161: closest beacon is at x=1163688, y=2000000
|
||||
Sensor at x=3994153, y=3414445: closest beacon is at x=3979063, y=3856315
|
||||
Sensor at x=2541906, y=2965730: closest beacon is at x=2803715, y=2643139
|
||||
Sensor at x=600169, y=3131140: closest beacon is at x=1163688, y=2000000
|
||||
Sensor at x=163617, y=1082438: closest beacon is at x=1163688, y=2000000
|
||||
Sensor at x=3728368, y=140105: closest beacon is at x=3732654, y=-724773
|
||||
Sensor at x=1187681, y=2105247: closest beacon is at x=1163688, y=2000000
|
||||
Sensor at x=2327144, y=3342616: closest beacon is at x=2445544, y=3467698
|
||||
50
2022/inputs/16.txt
Normal file
50
2022/inputs/16.txt
Normal file
@@ -0,0 +1,50 @@
|
||||
Valve QJ has flow rate=11; tunnels lead to valves HB, GL
|
||||
Valve VZ has flow rate=10; tunnel leads to valve NE
|
||||
Valve TX has flow rate=19; tunnels lead to valves MG, OQ, HM
|
||||
Valve ZI has flow rate=5; tunnels lead to valves BY, ON, RU, LF, JR
|
||||
Valve IH has flow rate=0; tunnels lead to valves YB, QS
|
||||
Valve QS has flow rate=22; tunnel leads to valve IH
|
||||
Valve QB has flow rate=0; tunnels lead to valves QX, ES
|
||||
Valve NX has flow rate=0; tunnels lead to valves UH, OP
|
||||
Valve PJ has flow rate=0; tunnels lead to valves OC, UH
|
||||
Valve OR has flow rate=6; tunnels lead to valves QH, BH, HB, JD
|
||||
Valve OC has flow rate=7; tunnels lead to valves IZ, JR, TA, ZH, PJ
|
||||
Valve UC has flow rate=0; tunnels lead to valves AA, BY
|
||||
Valve QX has flow rate=0; tunnels lead to valves AA, QB
|
||||
Valve IZ has flow rate=0; tunnels lead to valves OC, SX
|
||||
Valve AG has flow rate=13; tunnels lead to valves NW, GL, SM
|
||||
Valve ON has flow rate=0; tunnels lead to valves MO, ZI
|
||||
Valve XT has flow rate=18; tunnels lead to valves QZ, PG
|
||||
Valve AX has flow rate=0; tunnels lead to valves UH, MO
|
||||
Valve JD has flow rate=0; tunnels lead to valves OR, SM
|
||||
Valve HM has flow rate=0; tunnels lead to valves TX, QH
|
||||
Valve LF has flow rate=0; tunnels lead to valves ZI, UH
|
||||
Valve QH has flow rate=0; tunnels lead to valves OR, HM
|
||||
Valve RT has flow rate=21; tunnel leads to valve PG
|
||||
Valve NE has flow rate=0; tunnels lead to valves VZ, TA
|
||||
Valve OQ has flow rate=0; tunnels lead to valves TX, GE
|
||||
Valve AA has flow rate=0; tunnels lead to valves QZ, UC, OP, QX, EH
|
||||
Valve UH has flow rate=17; tunnels lead to valves PJ, NX, AX, LF
|
||||
Valve GE has flow rate=0; tunnels lead to valves YB, OQ
|
||||
Valve EH has flow rate=0; tunnels lead to valves AA, MO
|
||||
Valve MG has flow rate=0; tunnels lead to valves TX, NW
|
||||
Valve YB has flow rate=20; tunnels lead to valves IH, GE, XG
|
||||
Valve MO has flow rate=15; tunnels lead to valves EH, ON, AX, ZH, CB
|
||||
Valve JR has flow rate=0; tunnels lead to valves ZI, OC
|
||||
Valve GL has flow rate=0; tunnels lead to valves AG, QJ
|
||||
Valve SM has flow rate=0; tunnels lead to valves JD, AG
|
||||
Valve HB has flow rate=0; tunnels lead to valves OR, QJ
|
||||
Valve TA has flow rate=0; tunnels lead to valves OC, NE
|
||||
Valve PG has flow rate=0; tunnels lead to valves RT, XT
|
||||
Valve XG has flow rate=0; tunnels lead to valves CB, YB
|
||||
Valve ES has flow rate=9; tunnels lead to valves QB, FL
|
||||
Valve BH has flow rate=0; tunnels lead to valves RU, OR
|
||||
Valve FL has flow rate=0; tunnels lead to valves SX, ES
|
||||
Valve CB has flow rate=0; tunnels lead to valves MO, XG
|
||||
Valve QZ has flow rate=0; tunnels lead to valves AA, XT
|
||||
Valve BY has flow rate=0; tunnels lead to valves UC, ZI
|
||||
Valve ZH has flow rate=0; tunnels lead to valves MO, OC
|
||||
Valve OP has flow rate=0; tunnels lead to valves NX, AA
|
||||
Valve NW has flow rate=0; tunnels lead to valves MG, AG
|
||||
Valve RU has flow rate=0; tunnels lead to valves ZI, BH
|
||||
Valve SX has flow rate=16; tunnels lead to valves IZ, FL
|
||||
2893
2022/inputs/18.txt
Normal file
2893
2022/inputs/18.txt
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,12 @@
|
||||
//! Common helper utilities to all days
|
||||
|
||||
use std::cmp::Ordering;
|
||||
use std::ops::Add;
|
||||
use std::ops::Div;
|
||||
use std::ops::Index;
|
||||
use std::ops::IndexMut;
|
||||
use std::ops::Sub;
|
||||
|
||||
use anyhow::Result;
|
||||
use nom::combinator::map;
|
||||
use nom::error::ErrorKind;
|
||||
@@ -116,3 +123,106 @@ where
|
||||
(b, a)
|
||||
}
|
||||
}
|
||||
|
||||
/// Some magic to get two mutable references into the same slice
|
||||
pub fn get_both<T>(slice: &mut [T], first: usize, second: usize) -> (&mut T, &mut T) {
|
||||
match first.cmp(&second) {
|
||||
Ordering::Greater => {
|
||||
let (begin, end) = slice.split_at_mut(first);
|
||||
(&mut end[0], &mut begin[second])
|
||||
}
|
||||
Ordering::Less => {
|
||||
let (begin, end) = slice.split_at_mut(second);
|
||||
(&mut begin[first], &mut end[0])
|
||||
}
|
||||
Ordering::Equal => panic!("Tried to get the same index twice {first}"),
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
pub struct IndexSet(Vec<u32>);
|
||||
|
||||
impl IndexSet {
|
||||
pub fn with_capacity(capacity: usize) -> Self {
|
||||
Self(Vec::with_capacity(
|
||||
capacity / std::mem::size_of::<u32>() / 8,
|
||||
))
|
||||
}
|
||||
|
||||
fn ensure_item(&mut self, item: usize) -> &mut u32 {
|
||||
if self.0.len() <= item {
|
||||
self.0.resize(item + 1, 0);
|
||||
}
|
||||
|
||||
&mut self.0[item]
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn index(index: usize) -> (usize, u8) {
|
||||
const PER_ENTRY: usize = 8 * std::mem::size_of::<u32>();
|
||||
|
||||
(index / PER_ENTRY, (index % PER_ENTRY) as u8)
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, index: usize) -> bool {
|
||||
let (entry, pos) = Self::index(index);
|
||||
|
||||
let item = self.ensure_item(entry);
|
||||
|
||||
if *item & (1 << pos) != 0 {
|
||||
false
|
||||
} else {
|
||||
*item |= 1 << pos;
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
|
||||
pub struct Vec2(pub [i32; 2]);
|
||||
|
||||
impl Vec2 {
|
||||
pub fn l1(self) -> i32 {
|
||||
self.0.into_iter().map(i32::abs).sum()
|
||||
}
|
||||
}
|
||||
|
||||
impl Add<Self> for Vec2 {
|
||||
type Output = Self;
|
||||
|
||||
fn add(self, rhs: Self) -> Self::Output {
|
||||
Self([self[0] + rhs[0], self[1] + rhs[1]])
|
||||
}
|
||||
}
|
||||
|
||||
impl Sub<Self> for Vec2 {
|
||||
type Output = Self;
|
||||
|
||||
fn sub(self, rhs: Self) -> Self::Output {
|
||||
Self([self[0] - rhs[0], self[1] - rhs[1]])
|
||||
}
|
||||
}
|
||||
|
||||
impl Div<i32> for Vec2 {
|
||||
type Output = Self;
|
||||
|
||||
fn div(self, rhs: i32) -> Self::Output {
|
||||
Self(self.0.map(|v| v / rhs))
|
||||
}
|
||||
}
|
||||
|
||||
impl Index<usize> for Vec2 {
|
||||
type Output = i32;
|
||||
|
||||
#[inline]
|
||||
fn index(&self, index: usize) -> &Self::Output {
|
||||
&self.0[index]
|
||||
}
|
||||
}
|
||||
|
||||
impl IndexMut<usize> for Vec2 {
|
||||
#[inline]
|
||||
fn index_mut(&mut self, index: usize) -> &mut Self::Output {
|
||||
&mut self.0[index]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
use std::cmp::Ordering;
|
||||
|
||||
use anyhow::Result;
|
||||
use nom::branch::alt;
|
||||
use nom::bytes::complete::tag;
|
||||
@@ -8,6 +6,7 @@ use nom::bytes::complete::take_until;
|
||||
use nom::character::complete::newline;
|
||||
use nom::combinator::map;
|
||||
use nom::combinator::opt;
|
||||
use nom::combinator::value;
|
||||
use nom::multi::fold_many1;
|
||||
use nom::multi::many1;
|
||||
use nom::sequence::delimited;
|
||||
@@ -17,6 +16,7 @@ use nom::sequence::tuple;
|
||||
use nom::IResult;
|
||||
|
||||
use crate::common::enumerate;
|
||||
use crate::common::get_both;
|
||||
use crate::common::parse_input;
|
||||
|
||||
type Move = (usize, usize, usize);
|
||||
@@ -32,7 +32,7 @@ fn parse_row<'a>(input: &'a [u8], stacks: &mut OwnedStacks) -> IResult<&'a [u8],
|
||||
Some(v[0])
|
||||
}),
|
||||
// Or an empty stack into a None
|
||||
map(tag(" "), |_| None),
|
||||
value(None, tag(" ")),
|
||||
)),
|
||||
opt(tag(" ")),
|
||||
)),
|
||||
@@ -91,21 +91,6 @@ fn parse_task(input: &[u8]) -> IResult<&[u8], (OwnedStacks, Vec<Move>)> {
|
||||
Ok((input, (stacks, moves)))
|
||||
}
|
||||
|
||||
/// Some magic to get two mutable references into the same slice
|
||||
fn get_both(stacks: &mut [Vec<u8>], from: usize, to: usize) -> (&mut Vec<u8>, &mut Vec<u8>) {
|
||||
match from.cmp(&to) {
|
||||
Ordering::Greater => {
|
||||
let (begin, end) = stacks.split_at_mut(from);
|
||||
(&mut end[0], &mut begin[to])
|
||||
}
|
||||
Ordering::Less => {
|
||||
let (begin, end) = stacks.split_at_mut(to);
|
||||
(&mut begin[from], &mut end[0])
|
||||
}
|
||||
Ordering::Equal => panic!("Tried to stack from and to {from}"),
|
||||
}
|
||||
}
|
||||
|
||||
fn compute_answer(stacks: &mut [Vec<u8>]) -> Result<String> {
|
||||
let mut result = String::with_capacity(stacks.len());
|
||||
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
use std::cmp::Ordering;
|
||||
|
||||
use anyhow::Context;
|
||||
use anyhow::Result;
|
||||
|
||||
@@ -65,39 +63,19 @@ pub fn part1(input: &[u8]) -> Result<String> {
|
||||
fn scenery<'a>(
|
||||
values: impl IntoIterator<Item = &'a u8>,
|
||||
visible: impl IntoIterator<Item = &'a mut usize>,
|
||||
tree_stack: &mut Vec<(usize, u8)>,
|
||||
) {
|
||||
tree_stack.clear();
|
||||
let mut last_seen = [0; 10];
|
||||
|
||||
for (i, (&val, score)) in values.into_iter().zip(visible).enumerate() {
|
||||
scenery_helper(i, tree_stack, val, score);
|
||||
}
|
||||
}
|
||||
let val = val - b'0';
|
||||
let visible = i - last_seen[val as usize];
|
||||
|
||||
fn scenery_helper(i: usize, tree_stack: &mut Vec<(usize, u8)>, val: u8, score: &mut usize) {
|
||||
if i > 0 {
|
||||
let mut first = 0;
|
||||
|
||||
while let Some((pos, other)) = tree_stack.pop() {
|
||||
match other.cmp(&val) {
|
||||
Ordering::Less => (),
|
||||
Ordering::Equal => {
|
||||
first = pos;
|
||||
break;
|
||||
}
|
||||
Ordering::Greater => {
|
||||
tree_stack.push((pos, other));
|
||||
first = pos;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if i > 0 {
|
||||
*score *= visible;
|
||||
last_seen[..=(val as usize)].fill(i);
|
||||
} else {
|
||||
*score = 0;
|
||||
}
|
||||
|
||||
tree_stack.push((i, val));
|
||||
|
||||
*score *= i - first;
|
||||
} else {
|
||||
*score = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,18 +88,15 @@ pub fn part2(input: &[u8]) -> Result<String> {
|
||||
|
||||
let mut score = vec![1; width * height];
|
||||
|
||||
let mut tree_stack = Vec::with_capacity(10);
|
||||
|
||||
// Horizontal striping
|
||||
for (y, row) in input.chunks_exact(width + 1).enumerate() {
|
||||
// First, left to right
|
||||
scenery(&row[..width], &mut score[(y * width)..], &mut tree_stack);
|
||||
scenery(&row[..width], &mut score[(y * width)..]);
|
||||
|
||||
// Then right to left
|
||||
scenery(
|
||||
row[..width].iter().rev(),
|
||||
score[(y * width)..(y * width + width)].iter_mut().rev(),
|
||||
&mut tree_stack,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -131,14 +106,12 @@ pub fn part2(input: &[u8]) -> Result<String> {
|
||||
scenery(
|
||||
input[x..].iter().step_by(width + 1),
|
||||
score[x..].iter_mut().step_by(width),
|
||||
&mut tree_stack,
|
||||
);
|
||||
|
||||
// Bottom to top
|
||||
scenery(
|
||||
input[x..].iter().step_by(width + 1).rev(),
|
||||
score[x..].iter_mut().step_by(width).rev(),
|
||||
&mut tree_stack,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,122 @@
|
||||
use ahash::AHashSet;
|
||||
use anyhow::Result;
|
||||
use nom::bytes::complete::tag;
|
||||
use nom::bytes::complete::take;
|
||||
use nom::character::complete::newline;
|
||||
use nom::combinator::map_res;
|
||||
use nom::multi::many0;
|
||||
use nom::sequence::separated_pair;
|
||||
use nom::sequence::terminated;
|
||||
use nom::IResult;
|
||||
|
||||
pub fn part1(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
use crate::common::parse_input;
|
||||
use crate::common::Vec2;
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
enum Direction {
|
||||
Up,
|
||||
Left,
|
||||
Right,
|
||||
Down,
|
||||
}
|
||||
|
||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
impl Direction {
|
||||
fn vec_for(self) -> Vec2 {
|
||||
Vec2(match self {
|
||||
Direction::Up => [0, -1],
|
||||
Direction::Left => [1, 0],
|
||||
Direction::Right => [-1, 0],
|
||||
Direction::Down => [0, 1],
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<u8> for Direction {
|
||||
type Error = anyhow::Error;
|
||||
|
||||
fn try_from(value: u8) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
b'U' => Ok(Direction::Up),
|
||||
b'L' => Ok(Direction::Left),
|
||||
b'R' => Ok(Direction::Right),
|
||||
b'D' => Ok(Direction::Down),
|
||||
b => anyhow::bail!("Invalid direction '{b}'"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_moves(input: &[u8]) -> IResult<&[u8], Vec<(Direction, u32)>> {
|
||||
many0(terminated(
|
||||
separated_pair(
|
||||
map_res(take(1usize), |bs: &[u8]| Direction::try_from(bs[0])),
|
||||
tag(" "),
|
||||
nom::character::complete::u32,
|
||||
),
|
||||
newline,
|
||||
))(input)
|
||||
}
|
||||
|
||||
fn part_generic<const N: usize>(input: &[u8]) -> Result<String> {
|
||||
let moves = parse_input(input, parse_moves)?;
|
||||
|
||||
let mut head_pos = Vec2([0, 0]);
|
||||
let mut tails = [head_pos; N];
|
||||
|
||||
let mut visited = AHashSet::new();
|
||||
visited.insert(head_pos);
|
||||
|
||||
for (direction, steps) in moves {
|
||||
let step = direction.vec_for();
|
||||
|
||||
for _ in 0..steps {
|
||||
head_pos = head_pos + step;
|
||||
|
||||
let mut ref_pos = head_pos;
|
||||
|
||||
for tail_pos in &mut tails {
|
||||
let delta = ref_pos - *tail_pos;
|
||||
|
||||
if delta[0].abs() <= 1 && delta[1].abs() <= 1 {
|
||||
break;
|
||||
}
|
||||
|
||||
let step = Vec2([delta[0].signum(), delta[1].signum()]);
|
||||
|
||||
*tail_pos = *tail_pos + step;
|
||||
|
||||
ref_pos = *tail_pos;
|
||||
}
|
||||
|
||||
visited.insert(*tails.last().unwrap());
|
||||
}
|
||||
}
|
||||
|
||||
Ok(visited.len().to_string())
|
||||
}
|
||||
|
||||
pub fn part1(input: &[u8]) -> Result<String> {
|
||||
part_generic::<1>(input)
|
||||
}
|
||||
|
||||
pub fn part2(input: &[u8]) -> Result<String> {
|
||||
part_generic::<9>(input)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const SAMPLE: &[u8] = include_bytes!("samples/09.txt");
|
||||
const SAMPLE_LARGE: &[u8] = include_bytes!("samples/09.large.txt");
|
||||
|
||||
#[test]
|
||||
fn sample_part1() {
|
||||
assert_eq!(part1(SAMPLE).unwrap(), "13");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part2() {
|
||||
assert_eq!(part2(SAMPLE).unwrap(), "1");
|
||||
assert_eq!(part2(SAMPLE_LARGE).unwrap(), "36");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,131 @@
|
||||
use anyhow::Result;
|
||||
use nom::branch::alt;
|
||||
use nom::bytes::complete::tag;
|
||||
use nom::character::complete::newline;
|
||||
use nom::combinator::iterator;
|
||||
use nom::combinator::map;
|
||||
use nom::combinator::value;
|
||||
use nom::sequence::preceded;
|
||||
use nom::sequence::terminated;
|
||||
use nom::IResult;
|
||||
|
||||
pub fn part1(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
#[derive(Copy, Clone)]
|
||||
enum Instruction {
|
||||
AddX(i32),
|
||||
Noop,
|
||||
}
|
||||
|
||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
impl Instruction {
|
||||
#[inline]
|
||||
pub fn cycles(self) -> i32 {
|
||||
match self {
|
||||
Instruction::AddX(_) => 2,
|
||||
Instruction::Noop => 1,
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn execute(self, x: &mut i32, cycle: &mut i32) {
|
||||
*cycle += self.cycles();
|
||||
|
||||
if let Instruction::AddX(v) = self {
|
||||
*x += v;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_instruction(input: &[u8]) -> IResult<&[u8], Instruction> {
|
||||
terminated(
|
||||
alt((
|
||||
value(Instruction::Noop, tag("noop")),
|
||||
map(preceded(tag("addx "), nom::character::complete::i32), |v| {
|
||||
Instruction::AddX(v)
|
||||
}),
|
||||
)),
|
||||
newline,
|
||||
)(input)
|
||||
}
|
||||
|
||||
pub fn part1(input: &[u8]) -> Result<String> {
|
||||
let mut x = 1;
|
||||
// Count from one like a scrub
|
||||
let mut cycle = 1;
|
||||
|
||||
let mut input_it = iterator(input, parse_instruction);
|
||||
|
||||
let mut total = 0;
|
||||
|
||||
for instruction in &mut input_it {
|
||||
let old_cycle = cycle;
|
||||
let old_x = x;
|
||||
|
||||
instruction.execute(&mut x, &mut cycle);
|
||||
|
||||
if old_cycle % 40 < 20 && cycle % 40 >= 20 {
|
||||
let to_report = if cycle % 40 == 20 { x } else { old_x };
|
||||
|
||||
let checkpoint = cycle / 20 * 20;
|
||||
total += to_report * checkpoint;
|
||||
}
|
||||
|
||||
if cycle >= 220 {
|
||||
return Ok(total.to_string());
|
||||
}
|
||||
}
|
||||
|
||||
anyhow::bail!("out of instructions")
|
||||
}
|
||||
|
||||
pub fn part2(input: &[u8]) -> Result<String> {
|
||||
let mut x = 1;
|
||||
let mut input_it = iterator(input, parse_instruction);
|
||||
let mut input_it = (&mut input_it).peekable();
|
||||
|
||||
let mut output = String::with_capacity(6 * (40 + 1));
|
||||
|
||||
let mut cpu_cycle = 0;
|
||||
|
||||
for crt_cycle in 1..=240 {
|
||||
if let Some(instruction) = input_it.next_if(|i| cpu_cycle + i.cycles() < crt_cycle) {
|
||||
instruction.execute(&mut x, &mut cpu_cycle);
|
||||
}
|
||||
|
||||
let beam_pos = (crt_cycle + 39) % 40;
|
||||
|
||||
if (beam_pos - x).abs() <= 1 {
|
||||
output.push('#');
|
||||
} else {
|
||||
output.push(' ');
|
||||
}
|
||||
|
||||
if crt_cycle % 40 == 0 {
|
||||
output.push('\n');
|
||||
}
|
||||
}
|
||||
|
||||
Ok(output)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const SAMPLE: &[u8] = include_bytes!("samples/10.txt");
|
||||
|
||||
#[test]
|
||||
fn sample_part1() {
|
||||
assert_eq!(part1(SAMPLE).unwrap(), "13140");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part2() {
|
||||
let answer = "## ## ## ## ## ## ## ## ## ##
|
||||
### ### ### ### ### ### ###
|
||||
#### #### #### #### ####
|
||||
##### ##### ##### #####
|
||||
###### ###### ###### ####
|
||||
####### ####### ####### \n";
|
||||
|
||||
assert_eq!(part2(SAMPLE).unwrap(), answer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,189 @@
|
||||
use anyhow::Result;
|
||||
use nom::branch::alt;
|
||||
use nom::bytes::complete::tag;
|
||||
use nom::bytes::complete::take;
|
||||
use nom::character::complete::digit1;
|
||||
use nom::character::complete::newline;
|
||||
use nom::combinator::map;
|
||||
use nom::combinator::map_res;
|
||||
use nom::combinator::value;
|
||||
use nom::multi::separated_list0;
|
||||
use nom::multi::separated_list1;
|
||||
use nom::sequence::delimited;
|
||||
use nom::sequence::preceded;
|
||||
use nom::sequence::separated_pair;
|
||||
use nom::sequence::tuple;
|
||||
use nom::IResult;
|
||||
use strength_reduce::StrengthReducedU64;
|
||||
|
||||
pub fn part1(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
use crate::common::parse_input;
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
enum Operation {
|
||||
Mul(u64),
|
||||
Add(u64),
|
||||
Square,
|
||||
}
|
||||
|
||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
impl Operation {
|
||||
fn transform(self, worry: u64) -> u64 {
|
||||
match self {
|
||||
Operation::Mul(val) => worry * val,
|
||||
Operation::Add(val) => worry + val,
|
||||
Operation::Square => worry * worry,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Monkey {
|
||||
items: Vec<u64>,
|
||||
operation: Operation,
|
||||
test_mod: StrengthReducedU64,
|
||||
targets: [usize; 2],
|
||||
inspected: usize,
|
||||
}
|
||||
|
||||
impl Monkey {
|
||||
fn handle_items(&mut self, drains: &mut [Vec<u64>; 2]) {
|
||||
self.inspected += self.items.len();
|
||||
|
||||
for item in self.items.drain(..) {
|
||||
let mut new_val = self.operation.transform(item);
|
||||
// Miraculously get less worried
|
||||
new_val /= 3;
|
||||
|
||||
drains[(new_val % self.test_mod == 0) as usize].push(new_val);
|
||||
}
|
||||
}
|
||||
|
||||
fn handle_items2(&mut self, drains: &mut [Vec<u64>], mod_base: StrengthReducedU64) {
|
||||
self.inspected += self.items.len();
|
||||
|
||||
for item in self.items.drain(..) {
|
||||
let mut new_val = self.operation.transform(item);
|
||||
// Modular arithmetic is a good way to get less worried
|
||||
new_val = new_val % mod_base;
|
||||
|
||||
drains[(new_val % self.test_mod == 0) as usize].push(new_val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_operation(input: &[u8]) -> IResult<&[u8], Operation> {
|
||||
preceded(
|
||||
tag("new = old "),
|
||||
alt((
|
||||
map_res(
|
||||
separated_pair(take(1usize), tag(" "), nom::character::complete::u64),
|
||||
|(op, val): (&[u8], u64)| match op[0] {
|
||||
b'*' => Ok(Operation::Mul(val)),
|
||||
b'+' => Ok(Operation::Add(val)),
|
||||
_ => Err(anyhow::anyhow!("Invalid operation {op:?}")),
|
||||
},
|
||||
),
|
||||
value(Operation::Square, tag("* old")),
|
||||
)),
|
||||
)(input)
|
||||
}
|
||||
|
||||
fn parse_monkey(input: &[u8]) -> IResult<&[u8], Monkey> {
|
||||
use nom::character::complete::u64;
|
||||
|
||||
map(
|
||||
preceded(
|
||||
// Skip the useless header line
|
||||
tuple((tag("Monkey "), digit1, tag(":\n"))),
|
||||
// Parse the actual interesting bits of the monkey
|
||||
tuple((
|
||||
// Parse the starting items
|
||||
delimited(
|
||||
tag(" Starting items: "),
|
||||
separated_list1(tag(", "), u64),
|
||||
newline,
|
||||
),
|
||||
// Parse operation
|
||||
delimited(tag(" Operation: "), parse_operation, newline),
|
||||
// Parse the test
|
||||
delimited(tag(" Test: divisible by "), u64, newline),
|
||||
// Parse both cases
|
||||
delimited(tag(" If true: throw to monkey "), u64, newline),
|
||||
delimited(tag(" If false: throw to monkey "), u64, newline),
|
||||
)),
|
||||
),
|
||||
|(items, operation, test_mod, if_true, if_false)| Monkey {
|
||||
items,
|
||||
operation,
|
||||
test_mod: StrengthReducedU64::new(test_mod),
|
||||
targets: [if_false as usize, if_true as usize],
|
||||
inspected: 0,
|
||||
},
|
||||
)(input)
|
||||
}
|
||||
|
||||
fn parse_monkeys(input: &[u8]) -> IResult<&[u8], Vec<Monkey>> {
|
||||
separated_list0(newline, parse_monkey)(input)
|
||||
}
|
||||
|
||||
fn format_result(mut monkeys: Vec<Monkey>) -> Result<String> {
|
||||
monkeys.sort_by(|a, b| b.inspected.cmp(&a.inspected));
|
||||
|
||||
let result: usize = monkeys[0].inspected * monkeys[1].inspected;
|
||||
|
||||
Ok(result.to_string())
|
||||
}
|
||||
|
||||
pub fn part1(input: &[u8]) -> Result<String> {
|
||||
let mut monkeys = parse_input(input, parse_monkeys)?;
|
||||
let mut drains = [Vec::new(), Vec::new()];
|
||||
|
||||
for _ in 0..20 {
|
||||
for i in 0..monkeys.len() {
|
||||
monkeys[i].handle_items(&mut drains);
|
||||
|
||||
for (j, drain) in drains.iter_mut().enumerate() {
|
||||
let target = monkeys[i].targets[j];
|
||||
monkeys[target].items.append(drain);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
format_result(monkeys)
|
||||
}
|
||||
|
||||
pub fn part2(input: &[u8]) -> Result<String> {
|
||||
let mut monkeys = parse_input(input, parse_monkeys)?;
|
||||
let mut drains = [Vec::new(), Vec::new()];
|
||||
|
||||
let mod_base = StrengthReducedU64::new(monkeys.iter().map(|m| m.test_mod.get()).product());
|
||||
|
||||
for _ in 0..10000 {
|
||||
for i in 0..monkeys.len() {
|
||||
monkeys[i].handle_items2(&mut drains, mod_base);
|
||||
|
||||
for (j, drain) in drains.iter_mut().enumerate() {
|
||||
let target = monkeys[i].targets[j];
|
||||
monkeys[target].items.append(drain);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
format_result(monkeys)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const SAMPLE: &[u8] = include_bytes!("samples/11.txt");
|
||||
|
||||
#[test]
|
||||
fn sample_part1() {
|
||||
assert_eq!(part1(SAMPLE).unwrap(), "10605");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part2() {
|
||||
assert_eq!(part2(SAMPLE).unwrap(), "2713310158");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,109 @@
|
||||
use std::collections::VecDeque;
|
||||
|
||||
use anyhow::Context;
|
||||
use anyhow::Result;
|
||||
|
||||
pub fn part1(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
use crate::common::IndexSet;
|
||||
|
||||
fn can_travel(from: u8, to: u8) -> bool {
|
||||
match (from, to) {
|
||||
(b'S', b'a'..=b'b') => true,
|
||||
(b'y'..=b'z', b'E') => true,
|
||||
(b'a'..=b'z', b'a'..=b'z') => to <= from || to - from == 1,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
fn parts_common(
|
||||
input: &[u8],
|
||||
starting_symbol: u8,
|
||||
// Neither of these functions needs to be generic closures; function pointers would do as well.
|
||||
// However, doing so causes the compiler not to inline them which in turn hurts performance by
|
||||
// about 25%. I would have hoped the reduced code size would make up for it, but it seems that
|
||||
// doesn't quite work for this particular benchmark.
|
||||
is_end: impl Fn(u8) -> bool,
|
||||
accessible: impl Fn(u8, u8) -> bool,
|
||||
) -> Result<String> {
|
||||
let width = input
|
||||
.iter()
|
||||
.position(|&c| c == b'\n')
|
||||
.context("No newlines in input")?
|
||||
+ 1;
|
||||
|
||||
let starting_pos = input
|
||||
.iter()
|
||||
.position(|&c| c == starting_symbol)
|
||||
.context("Could not find starting position")?;
|
||||
|
||||
let mut visited = IndexSet::with_capacity(input.len());
|
||||
|
||||
let mut todo = VecDeque::new();
|
||||
todo.push_back((0, starting_pos));
|
||||
|
||||
while let Some((dist, pos)) = todo.pop_front() {
|
||||
// Implementing an early exit doesn't appear to be helpful; the additional branching appears
|
||||
// to throw off the performance by 35%. Instead, we can simply wait for the destination to
|
||||
// pop off of the todo queue.
|
||||
//
|
||||
// For reference, by the time we find the exit, the queue is roughly two dozen entries long,
|
||||
// so the potential benefits of skipping it are minimal compared to the additional branching
|
||||
// code involved.
|
||||
if is_end(input[pos]) {
|
||||
return Ok(dist.to_string());
|
||||
}
|
||||
|
||||
let mut add_todo = |new: usize| {
|
||||
if accessible(input[pos], input[new]) && visited.insert(new) {
|
||||
todo.push_back((dist + 1, new));
|
||||
}
|
||||
};
|
||||
|
||||
if pos % width != 0 {
|
||||
add_todo(pos - 1);
|
||||
}
|
||||
|
||||
if pos % width != width - 1 {
|
||||
add_todo(pos + 1)
|
||||
}
|
||||
|
||||
if pos >= width {
|
||||
add_todo(pos - width);
|
||||
}
|
||||
|
||||
if pos + width < input.len() {
|
||||
add_todo(pos + width);
|
||||
}
|
||||
}
|
||||
|
||||
anyhow::bail!("Did not find a valid route")
|
||||
}
|
||||
|
||||
pub fn part1(input: &[u8]) -> Result<String> {
|
||||
parts_common(input, b'S', |b| b == b'E', can_travel)
|
||||
}
|
||||
|
||||
pub fn part2(input: &[u8]) -> Result<String> {
|
||||
parts_common(
|
||||
input,
|
||||
b'E',
|
||||
|b| b == b'a' || b == b'S',
|
||||
|a, b| can_travel(b, a),
|
||||
)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const SAMPLE: &[u8] = include_bytes!("samples/12.txt");
|
||||
|
||||
#[test]
|
||||
fn sample_part1() {
|
||||
assert_eq!(part1(SAMPLE).unwrap(), "31")
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part2() {
|
||||
assert_eq!(part2(SAMPLE).unwrap(), "29")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,148 @@
|
||||
use std::cmp::Ordering;
|
||||
|
||||
use anyhow::Context;
|
||||
use anyhow::Result;
|
||||
use nom::branch::alt;
|
||||
use nom::bytes::complete::tag;
|
||||
use nom::character::complete::multispace1;
|
||||
use nom::character::complete::newline;
|
||||
use nom::combinator::iterator;
|
||||
use nom::combinator::map;
|
||||
use nom::multi::many0;
|
||||
use nom::multi::separated_list0;
|
||||
use nom::sequence::delimited;
|
||||
use nom::sequence::pair;
|
||||
use nom::sequence::terminated;
|
||||
use nom::IResult;
|
||||
|
||||
pub fn part1(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
use crate::common::parse_input;
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||
enum Signal {
|
||||
Number(u32),
|
||||
List(Vec<Signal>),
|
||||
}
|
||||
|
||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
impl Ord for Signal {
|
||||
fn cmp(&self, other: &Self) -> Ordering {
|
||||
fn list_cmp(a: &[Signal], b: &[Signal]) -> Ordering {
|
||||
a.cmp(b)
|
||||
}
|
||||
|
||||
match (self, other) {
|
||||
(Signal::Number(first), Signal::Number(second)) => first.cmp(second),
|
||||
(Signal::Number(first), Signal::List(second)) => {
|
||||
list_cmp(&[Signal::Number(*first)], second)
|
||||
}
|
||||
(Signal::List(first), Signal::Number(second)) => {
|
||||
list_cmp(first, &[Signal::Number(*second)])
|
||||
}
|
||||
(Signal::List(first), Signal::List(second)) => list_cmp(first, second),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd for Signal {
|
||||
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||
Some(self.cmp(other))
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u32> for Signal {
|
||||
fn from(val: u32) -> Self {
|
||||
Signal::Number(val)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> From<Vec<T>> for Signal
|
||||
where
|
||||
Signal: From<T>,
|
||||
{
|
||||
fn from(vec: Vec<T>) -> Self {
|
||||
Signal::List(vec.into_iter().map(Signal::from).collect())
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_signal(input: &[u8]) -> IResult<&[u8], Signal> {
|
||||
alt((
|
||||
map(nom::character::complete::u32, Signal::Number),
|
||||
map(
|
||||
delimited(tag("["), separated_list0(tag(","), parse_signal), tag("]")),
|
||||
Signal::List,
|
||||
),
|
||||
))(input)
|
||||
}
|
||||
|
||||
fn parse_signal_pair(input: &[u8]) -> IResult<&[u8], (Signal, Signal)> {
|
||||
pair(
|
||||
terminated(parse_signal, newline),
|
||||
terminated(parse_signal, multispace1),
|
||||
)(input)
|
||||
}
|
||||
|
||||
pub fn part1(input: &[u8]) -> Result<String> {
|
||||
let mut iterator = iterator(input, parse_signal_pair);
|
||||
|
||||
let result: usize = (&mut iterator)
|
||||
.enumerate()
|
||||
.filter_map(|(i, (first, second))| (first < second).then_some(i + 1))
|
||||
.sum();
|
||||
|
||||
Ok(result.to_string())
|
||||
}
|
||||
|
||||
fn parse_signals(input: &[u8]) -> IResult<&[u8], Vec<Signal>> {
|
||||
many0(terminated(parse_signal, multispace1))(input)
|
||||
}
|
||||
|
||||
pub fn part2(input: &[u8]) -> Result<String> {
|
||||
let marker1 = Signal::from(vec![vec![2]]);
|
||||
let marker2 = Signal::from(vec![vec![6]]);
|
||||
|
||||
let mut signals = parse_input(input, parse_signals)?;
|
||||
|
||||
signals.push(marker1.clone());
|
||||
signals.push(marker2.clone());
|
||||
|
||||
signals.sort_unstable();
|
||||
|
||||
let pos1 = signals
|
||||
.iter()
|
||||
.position(|v| v == &marker1)
|
||||
.context("Cannot find marker 1")?
|
||||
+ 1;
|
||||
|
||||
let pos2 = pos1
|
||||
+ signals[pos1..]
|
||||
.iter()
|
||||
.position(|v| v == &marker2)
|
||||
.context("Cannot find marker 2")?
|
||||
+ 1;
|
||||
|
||||
Ok((pos1 * pos2).to_string())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const SAMPLE: &[u8] = include_bytes!("samples/13.txt");
|
||||
|
||||
#[test]
|
||||
fn test_parse_signal() {
|
||||
assert_eq!(
|
||||
parse_signal(b"[1,1,3,1,1]").unwrap(),
|
||||
(&[][..], Signal::from(vec![1, 1, 3, 1, 1]))
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part1() {
|
||||
assert_eq!(part1(SAMPLE).unwrap(), "13");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part2() {
|
||||
assert_eq!(part2(SAMPLE).unwrap(), "140");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,155 @@
|
||||
use anyhow::Result;
|
||||
use nom::branch::alt;
|
||||
use nom::bytes::complete::tag;
|
||||
use nom::character::complete::newline;
|
||||
use nom::combinator::map_res;
|
||||
use nom::combinator::opt;
|
||||
use nom::sequence::separated_pair;
|
||||
use nom::sequence::terminated;
|
||||
use nom::IResult;
|
||||
|
||||
pub fn part1(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
use crate::common::parse_input;
|
||||
use crate::common::reduce_many1;
|
||||
use crate::common::IndexSet;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Cave {
|
||||
width: usize,
|
||||
height: usize,
|
||||
occupied: IndexSet,
|
||||
floor: usize,
|
||||
}
|
||||
|
||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
impl Cave {
|
||||
pub fn insert(&mut self, x: usize, y: usize) -> bool {
|
||||
// Note: we're indexing column major for better cache locality
|
||||
self.occupied.insert(self.floor * x + y)
|
||||
}
|
||||
|
||||
pub fn drop(&mut self, x: usize, y: usize, total: &mut usize) -> bool {
|
||||
if x >= self.width || y >= self.height {
|
||||
return false;
|
||||
} else if !self.insert(x, y) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// x + usize::MAX is used to compute x - 1 because usize - isize doesn't exist in stable yet.
|
||||
let supported = [0, usize::MAX, 1]
|
||||
.into_iter()
|
||||
.all(|dx| self.drop(x.wrapping_add(dx), y + 1, total));
|
||||
|
||||
if supported {
|
||||
*total += 1;
|
||||
}
|
||||
|
||||
supported
|
||||
}
|
||||
|
||||
fn drop2(&mut self, x: usize, y: usize, total: &mut usize) {
|
||||
if y >= self.floor || !self.insert(x, y) {
|
||||
return;
|
||||
}
|
||||
|
||||
*total += 1;
|
||||
|
||||
for dx in [0, usize::MAX, 1] {
|
||||
self.drop2(x.wrapping_add(dx), y + 1, total);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_pair(input: &[u8]) -> IResult<&[u8], (usize, usize)> {
|
||||
fn parse_usize(input: &[u8]) -> IResult<&[u8], usize> {
|
||||
map_res(nom::character::complete::u32, usize::try_from)(input)
|
||||
}
|
||||
|
||||
separated_pair(parse_usize, tag(","), parse_usize)(input)
|
||||
}
|
||||
|
||||
fn find_dimensions(input: &[u8]) -> IResult<&[u8], (usize, usize)> {
|
||||
reduce_many1(
|
||||
terminated(parse_pair, alt((tag(" -> "), tag("\n")))), // Somehow this cant be `newline` because type deduction goes awry
|
||||
|(width, height), (x, y)| (width.max(x + 1), height.max(y + 1)),
|
||||
)(input)
|
||||
}
|
||||
|
||||
fn parse_cave(input: &[u8]) -> IResult<&[u8], Cave> {
|
||||
let (width, height) = find_dimensions(input)?.1;
|
||||
|
||||
let floor = height + 1;
|
||||
|
||||
// Assume parsing went somewhat right
|
||||
debug_assert_ne!(width, 0);
|
||||
debug_assert_ne!(height, 0);
|
||||
|
||||
let mut cave = Cave {
|
||||
width,
|
||||
height,
|
||||
occupied: IndexSet::with_capacity(width * floor),
|
||||
floor,
|
||||
};
|
||||
|
||||
let mut input = input;
|
||||
|
||||
while input != &b""[..] {
|
||||
let new_input = terminated(
|
||||
reduce_many1(
|
||||
terminated(parse_pair, opt(tag(" -> "))),
|
||||
|(x_old, y_old), (x_prime, y_prime)| {
|
||||
if x_prime == x_old {
|
||||
for y in (y_old.min(y_prime))..=(y_old.max(y_prime)) {
|
||||
cave.insert(x_old, y);
|
||||
}
|
||||
} else {
|
||||
for x in (x_old.min(x_prime))..=(x_old.max(x_prime)) {
|
||||
cave.insert(x, y_old);
|
||||
}
|
||||
}
|
||||
(x_prime, y_prime)
|
||||
},
|
||||
),
|
||||
newline,
|
||||
)(input)?
|
||||
.0;
|
||||
|
||||
input = new_input;
|
||||
}
|
||||
|
||||
Ok((input, cave))
|
||||
}
|
||||
|
||||
pub fn part1(input: &[u8]) -> Result<String> {
|
||||
let mut cave = parse_input(input, parse_cave)?;
|
||||
|
||||
let mut total = 0;
|
||||
|
||||
cave.drop(500, 0, &mut total);
|
||||
|
||||
Ok(total.to_string())
|
||||
}
|
||||
|
||||
pub fn part2(input: &[u8]) -> Result<String> {
|
||||
let mut cave = parse_input(input, parse_cave)?;
|
||||
|
||||
let mut total = 0;
|
||||
cave.drop2(500, 0, &mut total);
|
||||
|
||||
Ok(total.to_string())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const SAMPLE: &[u8] = include_bytes!("samples/14.txt");
|
||||
|
||||
#[test]
|
||||
fn sample_part1() {
|
||||
assert_eq!(part1(SAMPLE).unwrap(), "24");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part2() {
|
||||
assert_eq!(part2(SAMPLE).unwrap(), "93")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,178 @@
|
||||
use std::cmp::Reverse;
|
||||
use std::collections::BinaryHeap;
|
||||
|
||||
use ahash::AHashSet;
|
||||
use anyhow::Result;
|
||||
use nom::bytes::complete::tag;
|
||||
use nom::character::complete::newline;
|
||||
use nom::combinator::map;
|
||||
use nom::multi::many0;
|
||||
use nom::sequence::pair;
|
||||
use nom::sequence::preceded;
|
||||
use nom::sequence::terminated;
|
||||
use nom::IResult;
|
||||
|
||||
pub fn part1(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
use crate::common::parse_input;
|
||||
use crate::common::Vec2;
|
||||
|
||||
struct Beacon {
|
||||
pos: Vec2,
|
||||
closest: Vec2,
|
||||
range: i32,
|
||||
}
|
||||
|
||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
impl Beacon {
|
||||
pub fn can_contain_unseen(&self, lower: Vec2, upper: Vec2) -> bool {
|
||||
let corners = [
|
||||
lower,
|
||||
upper,
|
||||
Vec2([lower[0], upper[1]]),
|
||||
Vec2([upper[0], lower[1]]),
|
||||
];
|
||||
|
||||
corners
|
||||
.into_iter()
|
||||
.any(|c| (c - self.pos).l1() > self.range)
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_pos(input: &[u8]) -> IResult<&[u8], Vec2> {
|
||||
use nom::character::complete::i32;
|
||||
map(
|
||||
pair(preceded(tag("x="), i32), preceded(tag(", y="), i32)),
|
||||
|(x, y)| Vec2([x, y]),
|
||||
)(input)
|
||||
}
|
||||
|
||||
fn parse_beacons(input: &[u8]) -> IResult<&[u8], Vec<Beacon>> {
|
||||
let parse_beacon = map(
|
||||
pair(
|
||||
preceded(tag("Sensor at "), parse_pos),
|
||||
preceded(tag(": closest beacon is at "), parse_pos),
|
||||
),
|
||||
|(pos, closest)| Beacon {
|
||||
pos,
|
||||
closest,
|
||||
range: (pos - closest).l1(),
|
||||
},
|
||||
);
|
||||
|
||||
many0(terminated(parse_beacon, newline))(input)
|
||||
}
|
||||
|
||||
fn part1_generic<const Y: i32>(input: &[u8]) -> Result<String> {
|
||||
let beacons = parse_input(input, parse_beacons)?;
|
||||
|
||||
let mut not_blocking_yet = BinaryHeap::new();
|
||||
let mut blocking = BinaryHeap::new();
|
||||
|
||||
let mut total = 0;
|
||||
|
||||
let mut on_line = AHashSet::new();
|
||||
|
||||
for beacon in beacons {
|
||||
let horizontal_distance = beacon.range - (beacon.pos[1] - Y).abs();
|
||||
|
||||
if horizontal_distance >= 0 {
|
||||
not_blocking_yet.push(Reverse((
|
||||
beacon.pos[0] - horizontal_distance,
|
||||
beacon.pos[0] + horizontal_distance + 1,
|
||||
)))
|
||||
}
|
||||
|
||||
// Beacons can be beacons, so we should uncount them
|
||||
if beacon.closest[1] == Y {
|
||||
on_line.insert(beacon.closest);
|
||||
}
|
||||
}
|
||||
|
||||
while let Some(Reverse((block_from, mut block_until))) = not_blocking_yet.pop() {
|
||||
blocking.push(Reverse(block_until));
|
||||
|
||||
while let Some(Reverse(block_end)) = blocking.pop() {
|
||||
block_until = block_until.max(block_end);
|
||||
|
||||
while matches!(not_blocking_yet.peek(), Some(Reverse((block_from, _))) if block_from < &block_end)
|
||||
{
|
||||
let Reverse((_, additional_block_until)) = not_blocking_yet.pop().unwrap();
|
||||
blocking.push(Reverse(additional_block_until));
|
||||
}
|
||||
}
|
||||
|
||||
total += block_until - block_from;
|
||||
}
|
||||
|
||||
total -= on_line.len() as i32;
|
||||
|
||||
Ok(total.to_string())
|
||||
}
|
||||
|
||||
pub fn part1(input: &[u8]) -> Result<String> {
|
||||
part1_generic::<2000000>(input)
|
||||
}
|
||||
|
||||
fn part2_generic<const MAX: i32>(input: &[u8]) -> Result<String> {
|
||||
let beacons = parse_input(input, parse_beacons)?;
|
||||
|
||||
fn find_unseen<const MAX: i32>(beacons: &[Beacon]) -> Result<Vec2> {
|
||||
let mut todo = vec![(Vec2([0, 0]), Vec2([MAX, MAX]))];
|
||||
|
||||
while let Some((lower, upper)) = todo.pop() {
|
||||
if lower == upper {
|
||||
if beacons
|
||||
.iter()
|
||||
.all(|beacon| (beacon.pos - lower).l1() > beacon.range)
|
||||
{
|
||||
return Ok(lower);
|
||||
}
|
||||
} else {
|
||||
let mid = (lower + upper) / 2;
|
||||
|
||||
let quads = [
|
||||
(lower, mid),
|
||||
(Vec2([lower[0], mid[1] + 1]), Vec2([mid[0], upper[1]])),
|
||||
(Vec2([mid[0] + 1, lower[1]]), Vec2([upper[0], mid[1]])),
|
||||
(Vec2([mid[0] + 1, mid[1] + 1]), upper),
|
||||
];
|
||||
|
||||
for (lower_new, upper_new) in quads {
|
||||
if lower_new[0] > upper_new[0] || lower_new[1] > upper_new[1] {
|
||||
// Empty quad in quad tree, skip
|
||||
} else if beacons
|
||||
.iter()
|
||||
.all(|beacon| beacon.can_contain_unseen(lower_new, upper_new))
|
||||
{
|
||||
todo.push((lower_new, upper_new));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
anyhow::bail!("Did not find position")
|
||||
}
|
||||
|
||||
let Vec2([x, y]) = find_unseen::<MAX>(&beacons)?;
|
||||
|
||||
Ok((i64::from(x) * 4000000 + i64::from(y)).to_string())
|
||||
}
|
||||
|
||||
pub fn part2(input: &[u8]) -> Result<String> {
|
||||
part2_generic::<4000000>(input)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const SAMPLE: &[u8] = include_bytes!("samples/15.txt");
|
||||
|
||||
#[test]
|
||||
fn sample_part1() {
|
||||
assert_eq!(part1_generic::<10>(SAMPLE).unwrap(), "26");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part2() {
|
||||
assert_eq!(part2_generic::<20>(SAMPLE).unwrap(), "56000011");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,166 @@
|
||||
use std::ops::Deref;
|
||||
|
||||
use ahash::AHashMap;
|
||||
use anyhow::Result;
|
||||
use ndarray::Array2;
|
||||
use nom::branch::alt;
|
||||
use nom::bytes::complete::tag;
|
||||
use nom::character::complete::alpha1;
|
||||
use nom::character::complete::newline;
|
||||
use nom::combinator::into;
|
||||
use nom::multi::many1;
|
||||
use nom::multi::separated_list1;
|
||||
use nom::sequence::preceded;
|
||||
use nom::sequence::terminated;
|
||||
use nom::sequence::tuple;
|
||||
use nom::IResult;
|
||||
|
||||
pub fn part1(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
use crate::common::parse_input;
|
||||
|
||||
type ParsedValve<'a> = (&'a [u8], u16, Vec<&'a [u8]>);
|
||||
|
||||
type ParsedNetwork<'a> = Vec<ParsedValve<'a>>;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct SimpleNetwork {
|
||||
valves: Vec<SimpleValve>,
|
||||
start: usize,
|
||||
useful: usize,
|
||||
}
|
||||
|
||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
impl Deref for SimpleNetwork {
|
||||
type Target = [SimpleValve];
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&self.valves
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct SimpleValve {
|
||||
connected: Vec<usize>,
|
||||
flow: u16,
|
||||
}
|
||||
|
||||
impl From<ParsedNetwork<'_>> for SimpleNetwork {
|
||||
fn from(mut parsed: ParsedNetwork) -> Self {
|
||||
// Make sure the positive numbers are in the front
|
||||
parsed.sort_by(|a, b| b.1.cmp(&a.1));
|
||||
|
||||
let mapping: AHashMap<_, _> = parsed
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(index, (name, _, _))| (*name, index))
|
||||
.collect();
|
||||
|
||||
let useful = parsed.iter().filter(|(_, flow, _)| *flow > 0).count();
|
||||
|
||||
Self {
|
||||
valves: parsed
|
||||
.into_iter()
|
||||
.map(|(_, flow, connected)| {
|
||||
let connected = connected.into_iter().map(|name| mapping[&name]).collect();
|
||||
|
||||
SimpleValve { flow, connected }
|
||||
})
|
||||
.collect(),
|
||||
start: mapping[&b"AA"[..]],
|
||||
useful,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_network(input: &[u8]) -> IResult<&[u8], ParsedNetwork> {
|
||||
let parse_network = terminated(
|
||||
tuple((
|
||||
// Parse the name of the valve
|
||||
preceded(tag("Valve "), alpha1),
|
||||
// Parse the flow of the valve
|
||||
preceded(tag(" has flow rate="), nom::character::complete::u16),
|
||||
// Parse the connections
|
||||
preceded(
|
||||
// Did you really have to distinguish plural
|
||||
alt((
|
||||
tag("; tunnels lead to valves "),
|
||||
tag("; tunnel leads to valve "),
|
||||
)),
|
||||
separated_list1(tag(", "), alpha1),
|
||||
),
|
||||
)),
|
||||
newline,
|
||||
);
|
||||
|
||||
many1(parse_network)(input)
|
||||
}
|
||||
|
||||
pub fn part1(input: &[u8]) -> Result<String> {
|
||||
let network: SimpleNetwork = parse_input(input, into(parse_network))?;
|
||||
|
||||
let (valves_available, dp) = run_optimization(&network, 30);
|
||||
|
||||
Ok(dp[(network.start, valves_available)].to_string())
|
||||
}
|
||||
|
||||
fn run_optimization(network: &SimpleNetwork, time: usize) -> (usize, Array2<u16>) {
|
||||
let valves_available = (1 << network.useful) - 1;
|
||||
let mut cur = Array2::zeros((network.len(), valves_available + 1));
|
||||
let mut prev = cur.clone();
|
||||
|
||||
for time_remaining in 1..time {
|
||||
for pos in 0..network.len() {
|
||||
let bit = 1 << pos;
|
||||
for open_valves in 0..=valves_available {
|
||||
let optimal = if (bit & open_valves) != 0 && time_remaining > 2 {
|
||||
prev[(pos, open_valves - bit)] + time_remaining as u16 * network[pos].flow
|
||||
} else {
|
||||
0
|
||||
};
|
||||
|
||||
cur[(pos, open_valves)] = network[pos]
|
||||
.connected
|
||||
.iter()
|
||||
.map(|&other| prev[(other, open_valves)])
|
||||
.fold(optimal, Ord::max);
|
||||
}
|
||||
}
|
||||
|
||||
std::mem::swap(&mut prev, &mut cur);
|
||||
}
|
||||
(valves_available, prev)
|
||||
}
|
||||
|
||||
pub fn part2(input: &[u8]) -> Result<String> {
|
||||
let network: SimpleNetwork = parse_input(input, into(parse_network))?;
|
||||
|
||||
let (valves_available, dp) = run_optimization(&network, 26);
|
||||
|
||||
// Find the minimum of all combinations of your work/elephant's work
|
||||
let best = (0..=valves_available)
|
||||
.map(|my_valves| {
|
||||
let elephant_valves = valves_available - my_valves;
|
||||
|
||||
dp[(network.start, my_valves)] + dp[(network.start, elephant_valves)]
|
||||
})
|
||||
.max()
|
||||
.unwrap_or(0);
|
||||
|
||||
// Guesses: 1802 (too low)
|
||||
Ok(best.to_string())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const SAMPLE: &[u8] = include_bytes!("samples/16.txt");
|
||||
|
||||
#[test]
|
||||
fn sample_part1() {
|
||||
assert_eq!(part1(SAMPLE).unwrap(), "1651");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part2() {
|
||||
assert_eq!(part2(SAMPLE).unwrap(), "1707");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,148 @@
|
||||
use ahash::AHashMap;
|
||||
use ahash::AHashSet;
|
||||
use anyhow::Context;
|
||||
use anyhow::Result;
|
||||
use nom::bytes::complete::tag;
|
||||
use nom::character::complete::newline;
|
||||
use nom::combinator::map;
|
||||
use nom::multi::fold_many1;
|
||||
use nom::sequence::preceded;
|
||||
use nom::sequence::terminated;
|
||||
use nom::sequence::tuple;
|
||||
use nom::IResult;
|
||||
|
||||
pub fn part1(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
use crate::common::parse_input;
|
||||
|
||||
fn parse_voxels(input: &[u8]) -> IResult<&[u8], AHashSet<[u8; 3]>> {
|
||||
use nom::character::complete::u8;
|
||||
|
||||
fold_many1(
|
||||
terminated(
|
||||
map(
|
||||
tuple((u8, preceded(tag(","), u8), preceded(tag(","), u8))),
|
||||
|(x, y, z)| [x, y, z],
|
||||
),
|
||||
newline,
|
||||
),
|
||||
AHashSet::new,
|
||||
|mut set, coord| {
|
||||
set.insert(coord);
|
||||
set
|
||||
},
|
||||
)(input)
|
||||
}
|
||||
|
||||
pub fn part2(_input: &[u8]) -> Result<String> {
|
||||
anyhow::bail!("not implemented")
|
||||
pub fn part1(input: &[u8]) -> Result<String> {
|
||||
let voxels = parse_input(input, parse_voxels)?;
|
||||
|
||||
let mut faces = 0;
|
||||
|
||||
for &voxel in &voxels {
|
||||
for axis in 0..3 {
|
||||
for offset in [-1, 1] {
|
||||
let mut to_search = voxel;
|
||||
to_search[axis] = to_search[axis].wrapping_add_signed(offset);
|
||||
|
||||
if !voxels.contains(&to_search) {
|
||||
faces += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(faces.to_string())
|
||||
}
|
||||
|
||||
pub fn part2(input: &[u8]) -> Result<String> {
|
||||
let voxels = parse_input(input, parse_voxels)?;
|
||||
let max = voxels
|
||||
.iter()
|
||||
.copied()
|
||||
.flatten()
|
||||
.max()
|
||||
.context("No voxels?")?;
|
||||
|
||||
let mut outside = AHashMap::new();
|
||||
let mut outside_candidates = AHashSet::new();
|
||||
let mut todo = Vec::new();
|
||||
|
||||
let mut is_outside = |voxel: [u8; 3]| {
|
||||
if let Some(&state) = outside.get(&voxel) {
|
||||
return state;
|
||||
}
|
||||
|
||||
let mut is_outside = false;
|
||||
|
||||
todo.push(voxel);
|
||||
outside_candidates.insert(voxel);
|
||||
|
||||
'outer: while let Some(voxel) = todo.pop() {
|
||||
for axis in 0..3 {
|
||||
for offset in [-1, 1] {
|
||||
let mut to_search = voxel;
|
||||
if let Some(new_coord) = to_search[axis].checked_add_signed(offset) {
|
||||
to_search[axis] = new_coord;
|
||||
|
||||
if voxels.contains(&to_search) {
|
||||
// Filled voxels cannot lead outside
|
||||
continue;
|
||||
} else if new_coord >= max {
|
||||
is_outside = true;
|
||||
break 'outer;
|
||||
} else if let Some(&state) = outside.get(&to_search) {
|
||||
is_outside = state;
|
||||
break 'outer;
|
||||
} else if outside_candidates.insert(to_search) {
|
||||
todo.push(to_search);
|
||||
}
|
||||
} else {
|
||||
// Managed to get below zero, which is outside
|
||||
is_outside = true;
|
||||
break 'outer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let map = |voxel| (voxel, is_outside);
|
||||
|
||||
outside.extend(todo.drain(..).map(map));
|
||||
outside.extend(outside_candidates.drain().map(map));
|
||||
|
||||
is_outside
|
||||
};
|
||||
|
||||
let mut faces = 0;
|
||||
|
||||
for &voxel in &voxels {
|
||||
for axis in 0..3 {
|
||||
for offset in [-1, 1] {
|
||||
let mut to_search = voxel;
|
||||
to_search[axis] = to_search[axis].wrapping_add_signed(offset);
|
||||
|
||||
if !voxels.contains(&to_search) && is_outside(to_search) {
|
||||
faces += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(faces.to_string())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const SAMPLE: &[u8] = include_bytes!("samples/18.txt");
|
||||
|
||||
#[test]
|
||||
fn sample_part1() {
|
||||
assert_eq!(part1(SAMPLE).unwrap(), "64");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sample_part2() {
|
||||
assert_eq!(part2(SAMPLE).unwrap(), "58");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,6 +56,6 @@ fn main() -> Result<()> {
|
||||
eprintln!("Execution time: {:?}", Instant::now().duration_since(begin));
|
||||
}
|
||||
|
||||
println!("{}", result);
|
||||
println!("{result}");
|
||||
Ok(())
|
||||
}
|
||||
|
||||
8
2022/src/samples/09.large.txt
Normal file
8
2022/src/samples/09.large.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
R 5
|
||||
U 8
|
||||
L 8
|
||||
D 3
|
||||
R 17
|
||||
D 10
|
||||
L 25
|
||||
U 20
|
||||
8
2022/src/samples/09.txt
Normal file
8
2022/src/samples/09.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
R 4
|
||||
U 4
|
||||
L 3
|
||||
D 1
|
||||
R 4
|
||||
D 1
|
||||
L 5
|
||||
R 2
|
||||
146
2022/src/samples/10.txt
Normal file
146
2022/src/samples/10.txt
Normal file
@@ -0,0 +1,146 @@
|
||||
addx 15
|
||||
addx -11
|
||||
addx 6
|
||||
addx -3
|
||||
addx 5
|
||||
addx -1
|
||||
addx -8
|
||||
addx 13
|
||||
addx 4
|
||||
noop
|
||||
addx -1
|
||||
addx 5
|
||||
addx -1
|
||||
addx 5
|
||||
addx -1
|
||||
addx 5
|
||||
addx -1
|
||||
addx 5
|
||||
addx -1
|
||||
addx -35
|
||||
addx 1
|
||||
addx 24
|
||||
addx -19
|
||||
addx 1
|
||||
addx 16
|
||||
addx -11
|
||||
noop
|
||||
noop
|
||||
addx 21
|
||||
addx -15
|
||||
noop
|
||||
noop
|
||||
addx -3
|
||||
addx 9
|
||||
addx 1
|
||||
addx -3
|
||||
addx 8
|
||||
addx 1
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx -36
|
||||
noop
|
||||
addx 1
|
||||
addx 7
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 2
|
||||
addx 6
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx 1
|
||||
noop
|
||||
addx -13
|
||||
addx 13
|
||||
addx 7
|
||||
noop
|
||||
addx 1
|
||||
addx -33
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 8
|
||||
noop
|
||||
addx -1
|
||||
addx 2
|
||||
addx 1
|
||||
noop
|
||||
addx 17
|
||||
addx -9
|
||||
addx 1
|
||||
addx 1
|
||||
addx -3
|
||||
addx 11
|
||||
noop
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx -13
|
||||
addx -19
|
||||
addx 1
|
||||
addx 3
|
||||
addx 26
|
||||
addx -30
|
||||
addx 12
|
||||
addx -1
|
||||
addx 3
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx -9
|
||||
addx 18
|
||||
addx 1
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
addx 9
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx -1
|
||||
addx 2
|
||||
addx -37
|
||||
addx 1
|
||||
addx 3
|
||||
noop
|
||||
addx 15
|
||||
addx -21
|
||||
addx 22
|
||||
addx -6
|
||||
addx 1
|
||||
noop
|
||||
addx 2
|
||||
addx 1
|
||||
noop
|
||||
addx -10
|
||||
noop
|
||||
noop
|
||||
addx 20
|
||||
addx 1
|
||||
addx 2
|
||||
addx 2
|
||||
addx -6
|
||||
addx -11
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
27
2022/src/samples/11.txt
Normal file
27
2022/src/samples/11.txt
Normal file
@@ -0,0 +1,27 @@
|
||||
Monkey 0:
|
||||
Starting items: 79, 98
|
||||
Operation: new = old * 19
|
||||
Test: divisible by 23
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 3
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 54, 65, 75, 74
|
||||
Operation: new = old + 6
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 79, 60, 97
|
||||
Operation: new = old * old
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 3
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 74
|
||||
Operation: new = old + 3
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 0
|
||||
If false: throw to monkey 1
|
||||
5
2022/src/samples/12.txt
Normal file
5
2022/src/samples/12.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
Sabqponm
|
||||
abcryxxl
|
||||
accszExk
|
||||
acctuvwj
|
||||
abdefghi
|
||||
23
2022/src/samples/13.txt
Normal file
23
2022/src/samples/13.txt
Normal 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]
|
||||
2
2022/src/samples/14.txt
Normal file
2
2022/src/samples/14.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
498,4 -> 498,6 -> 496,6
|
||||
503,4 -> 502,4 -> 502,9 -> 494,9
|
||||
14
2022/src/samples/15.txt
Normal file
14
2022/src/samples/15.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
Sensor at x=2, y=18: closest beacon is at x=-2, y=15
|
||||
Sensor at x=9, y=16: closest beacon is at x=10, y=16
|
||||
Sensor at x=13, y=2: closest beacon is at x=15, y=3
|
||||
Sensor at x=12, y=14: closest beacon is at x=10, y=16
|
||||
Sensor at x=10, y=20: closest beacon is at x=10, y=16
|
||||
Sensor at x=14, y=17: closest beacon is at x=10, y=16
|
||||
Sensor at x=8, y=7: closest beacon is at x=2, y=10
|
||||
Sensor at x=2, y=0: closest beacon is at x=2, y=10
|
||||
Sensor at x=0, y=11: closest beacon is at x=2, y=10
|
||||
Sensor at x=20, y=14: closest beacon is at x=25, y=17
|
||||
Sensor at x=17, y=20: closest beacon is at x=21, y=22
|
||||
Sensor at x=16, y=7: closest beacon is at x=15, y=3
|
||||
Sensor at x=14, y=3: closest beacon is at x=15, y=3
|
||||
Sensor at x=20, y=1: closest beacon is at x=15, y=3
|
||||
10
2022/src/samples/16.txt
Normal file
10
2022/src/samples/16.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
Valve AA has flow rate=0; tunnels lead to valves DD, II, BB
|
||||
Valve BB has flow rate=13; tunnels lead to valves CC, AA
|
||||
Valve CC has flow rate=2; tunnels lead to valves DD, BB
|
||||
Valve DD has flow rate=20; tunnels lead to valves CC, AA, EE
|
||||
Valve EE has flow rate=3; tunnels lead to valves FF, DD
|
||||
Valve FF has flow rate=0; tunnels lead to valves EE, GG
|
||||
Valve GG has flow rate=0; tunnels lead to valves FF, HH
|
||||
Valve HH has flow rate=22; tunnel leads to valve GG
|
||||
Valve II has flow rate=0; tunnels lead to valves AA, JJ
|
||||
Valve JJ has flow rate=21; tunnel leads to valve II
|
||||
13
2022/src/samples/18.txt
Normal file
13
2022/src/samples/18.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
2,2,2
|
||||
1,2,2
|
||||
3,2,2
|
||||
2,1,2
|
||||
2,3,2
|
||||
2,2,1
|
||||
2,2,3
|
||||
2,2,4
|
||||
2,2,6
|
||||
1,2,5
|
||||
3,2,5
|
||||
2,1,5
|
||||
2,3,5
|
||||
Reference in New Issue
Block a user