summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-12-18 00:51:34 -0500
committerJesse Luehrs <doy@tozt.net>2022-12-18 00:51:34 -0500
commit6a25cc7799fbe482b4d943e46332f18f483c788b (patch)
tree8ebc4ec984ca108da6706c278f5c86206d3701fa
parenta8dcdf90118b210ff751e76e1e332bbde87575d7 (diff)
downloadadvent-of-code-6a25cc7799fbe482b4d943e46332f18f483c788b.tar.gz
advent-of-code-6a25cc7799fbe482b4d943e46332f18f483c788b.zip
day 18
-rw-r--r--benches/2022.rs5
-rw-r--r--data/2022/18.txt2740
-rw-r--r--src/bin/2022/day18.rs130
-rw-r--r--src/bin/2022/main.rs2
4 files changed, 2877 insertions, 0 deletions
diff --git a/benches/2022.rs b/benches/2022.rs
index 274ee25..68b4da4 100644
--- a/benches/2022.rs
+++ b/benches/2022.rs
@@ -35,6 +35,8 @@ mod day15;
mod day16;
#[path = "../src/bin/2022/day17.rs"]
mod day17;
+#[path = "../src/bin/2022/day18.rs"]
+mod day18;
// NEXT MOD
day!(2022, 1, day1);
@@ -54,6 +56,7 @@ day!(2022, 14, day14);
day!(2022, 15, day15);
day!(2022, 16, day16);
day!(2022, 17, day17);
+day!(2022, 18, day18);
// NEXT DAY
fn bench_2022(c: &mut criterion::Criterion) {
@@ -76,6 +79,7 @@ fn bench_2022(c: &mut criterion::Criterion) {
day_combined!(2022, 15, day15);
day_combined!(2022, 16, day16);
day_combined!(2022, 17, day17);
+ day_combined!(2022, 18, day18);
// NEXT DAY COMBINED
})
});
@@ -101,5 +105,6 @@ criterion::criterion_main!(
bench_2022day15,
bench_2022day16,
bench_2022day17,
+ bench_2022day18,
// NEXT GROUP
);
diff --git a/data/2022/18.txt b/data/2022/18.txt
new file mode 100644
index 0000000..37f25ed
--- /dev/null
+++ b/data/2022/18.txt
@@ -0,0 +1,2740 @@
+18,15,10
+12,7,16
+14,2,8
+14,14,18
+5,7,4
+4,11,4
+10,17,6
+18,10,9
+18,11,13
+15,4,15
+17,11,9
+11,5,19
+6,2,10
+2,15,11
+5,7,14
+10,14,19
+15,17,6
+3,12,10
+12,2,9
+14,15,17
+5,15,7
+13,15,17
+18,14,9
+12,10,1
+1,10,13
+4,13,16
+15,14,3
+7,7,6
+10,3,14
+8,14,17
+20,8,12
+18,6,8
+4,6,13
+4,15,10
+4,7,10
+12,14,4
+14,13,2
+13,19,9
+9,16,16
+7,10,3
+18,9,15
+3,15,8
+13,17,6
+11,15,16
+12,17,15
+15,15,16
+6,9,18
+8,9,2
+8,10,3
+17,5,8
+7,7,4
+14,10,19
+12,1,14
+10,7,18
+4,9,17
+20,7,10
+12,13,4
+7,12,19
+10,3,13
+16,8,5
+6,8,3
+15,17,7
+7,3,16
+2,13,12
+2,11,11
+13,16,17
+5,6,15
+11,18,6
+13,18,11
+3,6,14
+10,19,9
+17,5,13
+4,9,7
+11,16,15
+12,18,14
+8,3,8
+8,4,6
+18,6,9
+18,13,15
+18,11,12
+19,9,14
+11,18,11
+14,15,4
+8,16,4
+12,17,4
+15,15,5
+19,13,7
+5,11,18
+19,10,10
+7,18,14
+19,9,15
+5,7,13
+8,13,1
+8,7,3
+15,10,19
+5,7,12
+8,17,15
+2,11,6
+17,6,12
+7,4,11
+3,10,6
+15,6,18
+17,15,6
+11,4,14
+12,1,13
+17,16,9
+2,15,10
+19,9,12
+9,18,14
+17,11,16
+14,16,4
+11,9,18
+2,9,10
+13,13,2
+7,3,13
+16,12,3
+2,14,8
+6,15,5
+6,4,9
+17,9,6
+13,16,5
+16,10,5
+11,18,10
+10,3,5
+14,6,3
+4,10,6
+18,14,10
+4,16,13
+13,12,19
+6,7,4
+16,7,4
+11,7,18
+14,18,8
+11,2,9
+2,6,8
+13,4,6
+10,9,20
+11,13,18
+11,18,8
+14,13,18
+8,8,2
+11,8,4
+6,15,4
+7,8,4
+16,7,13
+13,4,15
+7,5,6
+6,12,19
+13,9,3
+3,9,5
+10,4,10
+6,4,6
+12,2,15
+14,15,15
+17,14,7
+13,16,14
+16,7,16
+14,8,3
+15,9,4
+3,8,15
+5,13,5
+6,4,13
+9,17,9
+6,17,5
+6,9,4
+6,4,11
+5,5,15
+14,4,11
+3,7,13
+6,11,18
+10,3,12
+7,5,7
+2,14,9
+11,9,3
+9,14,2
+11,8,19
+18,15,13
+6,2,8
+9,18,10
+8,13,2
+12,3,13
+17,15,13
+13,4,7
+18,13,16
+16,16,12
+19,7,9
+15,18,10
+11,3,6
+8,17,6
+18,13,7
+9,2,13
+15,6,13
+3,15,12
+2,5,8
+17,8,17
+10,5,17
+11,10,20
+4,10,13
+18,9,11
+15,16,10
+4,7,11
+15,7,7
+9,11,2
+15,7,17
+19,12,7
+9,15,19
+11,14,19
+10,6,18
+7,2,14
+17,5,15
+4,13,15
+5,6,13
+14,2,9
+5,15,15
+11,1,11
+17,10,18
+6,5,11
+2,6,7
+7,16,15
+18,13,5
+13,19,14
+14,11,3
+14,5,15
+19,12,13
+4,12,16
+9,5,16
+6,14,18
+8,18,14
+16,15,14
+12,1,11
+8,2,10
+12,5,4
+15,4,12
+15,9,3
+14,3,15
+2,9,7
+8,6,17
+11,5,16
+5,5,10
+12,2,12
+15,16,13
+8,15,18
+14,17,16
+1,12,11
+9,17,13
+18,8,14
+20,13,9
+2,7,11
+7,9,18
+8,13,20
+6,11,3
+15,3,14
+6,14,16
+15,19,11
+9,16,5
+13,7,5
+4,13,12
+18,14,6
+17,8,8
+11,17,17
+2,6,11
+3,8,16
+6,16,5
+16,6,15
+7,18,16
+7,19,7
+9,2,5
+1,8,9
+9,11,3
+3,5,12
+6,8,4
+11,8,3
+11,18,15
+4,8,9
+7,7,17
+7,14,4
+17,14,6
+13,15,4
+13,11,4
+17,6,14
+15,13,17
+7,17,3
+5,14,16
+14,3,14
+13,3,16
+13,5,4
+11,1,15
+13,2,10
+16,16,16
+18,12,8
+18,9,6
+14,4,15
+5,14,13
+6,3,14
+4,16,8
+19,13,14
+13,3,8
+7,16,16
+11,6,3
+15,17,14
+11,8,17
+14,11,18
+15,4,6
+14,4,16
+12,2,13
+9,10,19
+13,17,16
+4,14,12
+7,12,16
+16,15,16
+14,19,11
+19,13,8
+3,13,9
+7,15,16
+7,18,6
+17,9,15
+10,4,14
+17,5,12
+10,11,18
+4,8,6
+18,10,13
+16,14,4
+16,8,3
+20,12,7
+2,13,11
+17,16,8
+17,10,5
+11,19,14
+7,8,19
+7,18,10
+15,16,8
+3,13,13
+9,11,1
+6,19,12
+14,18,11
+17,3,9
+17,10,16
+1,10,10
+4,13,13
+12,8,17
+5,12,4
+14,14,19
+3,14,11
+5,6,6
+15,10,18
+12,15,4
+5,14,14
+18,6,7
+4,16,15
+13,15,18
+16,17,9
+15,17,9
+15,18,9
+8,14,5
+3,11,15
+10,10,19
+2,12,13
+9,10,4
+16,11,4
+4,4,9
+17,15,15
+7,4,8
+12,7,3
+6,12,17
+8,3,11
+17,15,7
+5,18,13
+7,17,6
+6,7,3
+9,16,17
+11,3,5
+11,3,13
+16,5,14
+12,1,9
+12,10,19
+11,2,15
+11,11,18
+11,3,11
+12,2,6
+19,11,16
+8,14,6
+12,6,5
+16,14,8
+13,11,19
+12,16,19
+15,12,3
+9,7,2
+14,6,4
+15,12,6
+3,11,14
+13,19,8
+7,17,15
+7,3,10
+2,14,12
+11,14,17
+9,13,1
+6,17,10
+4,15,13
+5,6,12
+14,16,9
+14,10,17
+9,3,15
+5,16,8
+5,6,17
+4,15,15
+7,14,15
+15,14,18
+8,9,17
+16,4,12
+2,13,10
+15,2,12
+13,19,7
+12,4,5
+5,11,4
+19,13,6
+12,20,11
+9,20,8
+12,9,2
+9,12,18
+9,3,14
+6,19,9
+11,20,8
+4,4,8
+16,11,2
+12,8,18
+18,16,15
+6,4,15
+4,8,4
+18,15,8
+5,10,4
+5,5,13
+10,20,12
+7,3,8
+16,18,10
+6,11,4
+16,3,15
+3,7,9
+11,6,17
+10,10,18
+17,13,5
+17,11,15
+16,9,3
+1,8,12
+15,12,2
+15,3,7
+11,9,19
+18,14,7
+2,11,7
+9,18,5
+5,6,16
+10,4,17
+10,9,1
+16,6,9
+16,5,12
+16,6,14
+9,17,18
+3,9,7
+10,18,11
+7,9,2
+17,7,13
+9,10,18
+4,5,14
+8,19,12
+11,4,16
+10,19,12
+8,17,8
+4,14,13
+14,6,17
+13,9,18
+2,8,10
+6,15,6
+12,13,19
+5,3,14
+9,15,4
+18,10,15
+11,5,4
+16,12,18
+15,14,17
+12,15,5
+13,10,18
+9,4,16
+4,5,10
+3,5,10
+12,18,11
+8,7,17
+17,6,8
+6,15,12
+9,8,2
+6,18,9
+12,18,8
+4,7,16
+18,11,8
+9,15,3
+8,19,6
+9,18,7
+18,6,10
+10,17,15
+4,8,8
+8,13,4
+4,15,12
+8,8,17
+15,3,12
+16,13,8
+9,11,19
+8,5,17
+7,15,17
+11,5,17
+16,9,17
+4,9,13
+15,5,16
+9,17,4
+10,6,3
+8,5,3
+8,10,19
+12,3,12
+12,3,14
+19,14,7
+11,14,4
+18,16,8
+14,6,16
+15,10,17
+6,10,18
+7,3,11
+3,9,14
+12,14,18
+12,7,19
+3,12,6
+14,17,15
+17,10,6
+17,9,7
+14,9,2
+10,18,6
+3,13,16
+3,14,8
+4,6,7
+7,6,4
+8,19,9
+7,11,16
+15,11,18
+11,16,16
+12,2,8
+6,8,16
+18,14,14
+17,9,16
+9,16,4
+4,15,9
+18,14,13
+18,16,12
+7,4,7
+16,5,15
+8,18,5
+7,14,3
+7,16,4
+13,9,2
+6,7,5
+16,3,11
+6,17,9
+2,12,8
+12,11,18
+11,18,18
+6,9,3
+7,6,7
+17,9,10
+3,15,9
+18,7,11
+4,7,6
+9,17,5
+15,5,5
+18,6,14
+10,2,10
+9,6,4
+8,14,19
+3,14,13
+18,6,11
+17,9,8
+17,5,10
+18,13,10
+5,16,9
+9,8,3
+5,9,17
+10,17,7
+10,13,19
+4,16,6
+4,14,7
+6,5,17
+10,3,11
+13,17,7
+13,3,6
+6,6,5
+18,5,12
+5,17,12
+16,4,11
+5,15,6
+16,16,9
+8,6,19
+12,19,11
+10,4,15
+18,7,15
+15,5,17
+8,5,8
+2,9,12
+15,11,16
+4,6,9
+16,11,17
+16,13,19
+17,15,8
+6,14,4
+12,3,9
+4,16,12
+8,2,12
+3,6,9
+16,12,4
+3,5,13
+16,15,13
+7,15,6
+19,8,12
+7,1,9
+15,5,8
+16,16,13
+5,3,9
+2,10,9
+6,12,3
+10,4,16
+10,15,6
+5,5,5
+13,2,11
+2,9,6
+14,9,16
+7,9,19
+19,9,6
+16,13,16
+17,13,4
+15,5,11
+16,7,5
+1,9,12
+2,10,10
+4,6,15
+11,18,9
+11,3,17
+5,8,4
+19,14,11
+2,10,11
+10,7,4
+15,4,11
+18,8,9
+17,8,6
+5,13,4
+12,4,7
+15,18,12
+13,7,18
+14,15,16
+16,6,7
+16,4,6
+14,15,3
+5,18,8
+16,10,18
+19,14,9
+13,4,17
+6,10,16
+7,9,16
+12,15,18
+5,11,17
+5,11,3
+18,8,8
+17,5,14
+13,3,15
+4,7,4
+17,18,10
+15,14,16
+16,5,10
+17,11,17
+3,8,6
+12,13,1
+10,17,9
+6,10,3
+6,4,10
+5,17,8
+9,17,14
+18,14,11
+2,6,10
+17,12,7
+11,17,16
+8,10,18
+8,17,11
+3,13,5
+8,16,5
+16,17,12
+8,16,18
+11,19,12
+10,7,16
+3,11,7
+8,16,12
+8,17,5
+4,15,11
+3,11,10
+4,18,8
+3,6,10
+15,5,4
+3,12,15
+5,4,6
+10,8,1
+17,7,15
+8,18,12
+2,7,9
+16,18,13
+11,6,18
+9,13,19
+3,15,11
+11,7,17
+8,15,3
+17,5,5
+5,15,9
+17,12,4
+8,9,19
+18,15,11
+13,18,12
+8,3,6
+7,7,19
+11,0,9
+6,2,12
+13,10,2
+1,12,8
+4,13,4
+6,13,18
+9,2,9
+8,17,14
+3,6,7
+11,9,2
+16,17,8
+13,3,9
+11,3,7
+12,16,5
+10,3,15
+17,4,12
+5,6,14
+4,9,6
+10,16,17
+20,6,8
+5,15,8
+13,6,19
+12,4,14
+10,1,13
+12,10,0
+13,3,12
+9,19,14
+4,10,17
+2,8,9
+11,3,12
+13,13,3
+6,6,17
+8,17,9
+6,5,9
+5,15,16
+12,15,17
+7,8,18
+4,6,6
+13,4,14
+3,8,7
+9,4,6
+8,10,4
+18,10,14
+11,14,1
+13,18,16
+18,10,17
+12,13,3
+18,9,14
+18,8,12
+4,8,10
+16,17,7
+6,17,12
+19,12,14
+8,3,7
+12,3,10
+10,17,16
+8,15,17
+15,9,17
+5,9,15
+7,9,3
+11,12,19
+5,5,6
+5,15,5
+18,12,10
+11,13,1
+7,17,9
+17,5,9
+12,17,17
+18,4,9
+7,16,3
+5,17,4
+2,9,11
+11,19,8
+7,11,19
+12,16,17
+2,14,11
+5,6,7
+19,10,15
+17,7,6
+6,12,2
+17,18,13
+11,11,19
+18,14,15
+16,4,13
+11,17,15
+8,15,4
+2,9,13
+8,12,2
+12,12,1
+14,18,10
+10,2,14
+15,18,11
+13,17,9
+13,16,18
+9,6,16
+8,18,16
+16,14,5
+11,2,7
+9,5,5
+16,16,11
+7,5,5
+13,8,2
+2,7,13
+5,14,5
+18,5,5
+5,17,16
+15,3,6
+5,10,18
+16,5,9
+4,7,13
+17,16,13
+7,12,2
+5,16,14
+15,14,15
+15,17,15
+17,17,8
+17,11,7
+3,9,8
+7,3,12
+7,4,4
+12,4,17
+19,15,9
+13,15,16
+8,4,5
+8,3,13
+15,18,7
+9,12,4
+7,10,20
+12,15,8
+17,14,16
+13,7,6
+8,3,16
+12,7,18
+12,7,4
+4,11,14
+17,8,7
+3,13,11
+7,16,14
+12,17,7
+14,5,4
+9,13,2
+11,4,15
+8,7,15
+16,8,17
+19,10,11
+14,4,5
+4,7,5
+14,10,4
+15,4,7
+6,10,17
+5,7,3
+8,3,5
+9,1,12
+16,12,10
+11,4,7
+15,15,6
+10,13,3
+16,7,6
+12,6,19
+8,2,8
+12,6,14
+10,9,2
+8,9,4
+4,16,7
+15,3,9
+18,8,17
+10,19,15
+4,13,5
+12,15,19
+13,16,16
+17,8,10
+16,5,13
+9,19,11
+15,13,3
+11,12,3
+6,18,7
+2,16,7
+13,5,12
+2,12,9
+4,14,6
+8,15,15
+11,1,8
+17,7,8
+7,17,7
+9,14,3
+10,14,18
+8,1,14
+6,18,13
+10,2,7
+12,18,12
+17,4,8
+15,12,4
+13,8,3
+6,7,17
+9,10,20
+5,13,15
+14,18,13
+12,15,15
+3,13,12
+7,15,5
+14,16,17
+6,2,9
+8,3,10
+11,7,3
+15,6,6
+13,19,10
+3,8,11
+3,6,13
+14,18,9
+17,5,7
+5,16,10
+12,5,17
+7,11,3
+8,7,2
+11,16,17
+7,18,11
+17,10,15
+11,3,10
+19,14,6
+9,15,17
+17,14,8
+18,7,5
+6,5,6
+13,10,1
+8,4,12
+14,3,8
+3,5,9
+4,8,16
+9,10,21
+6,16,6
+9,7,17
+5,5,12
+18,14,8
+5,3,12
+11,1,7
+3,14,10
+15,17,5
+15,19,10
+6,5,15
+12,14,5
+3,10,15
+18,13,17
+1,7,12
+6,8,17
+18,12,9
+10,5,7
+14,3,10
+11,18,5
+1,9,9
+17,15,5
+19,7,7
+11,7,19
+15,5,7
+7,6,17
+9,15,2
+13,12,20
+4,15,5
+6,17,8
+5,9,4
+3,6,11
+17,4,13
+10,11,3
+18,11,6
+10,19,10
+18,15,9
+5,16,6
+16,15,5
+15,2,7
+19,9,11
+9,20,11
+8,18,15
+9,1,11
+1,10,8
+19,11,14
+5,18,9
+16,7,15
+3,14,9
+16,13,5
+9,2,10
+11,15,3
+7,8,3
+8,19,10
+17,12,3
+4,16,16
+14,5,5
+18,11,16
+6,3,16
+12,5,3
+4,4,11
+13,13,19
+5,7,17
+12,18,15
+6,12,5
+8,5,15
+4,12,5
+16,16,15
+18,9,3
+7,15,3
+5,5,7
+11,19,11
+19,14,12
+14,3,16
+15,17,12
+8,20,12
+18,16,10
+17,9,14
+10,6,17
+15,3,8
+13,2,13
+10,18,16
+15,11,2
+9,7,18
+15,7,3
+14,12,3
+17,13,7
+3,7,7
+5,9,3
+6,15,10
+16,3,13
+10,1,14
+4,13,7
+4,17,13
+18,5,7
+16,15,8
+1,12,14
+4,14,5
+10,3,8
+20,12,12
+17,8,5
+3,11,5
+9,7,1
+6,3,13
+14,18,14
+5,10,19
+14,4,6
+13,17,17
+9,6,17
+4,12,4
+15,8,17
+12,6,3
+2,8,8
+16,17,11
+10,18,7
+8,17,12
+13,3,10
+5,4,8
+4,7,12
+16,11,5
+15,12,18
+6,16,14
+7,13,4
+12,16,4
+13,19,11
+3,9,16
+5,13,6
+17,4,14
+18,13,14
+15,6,17
+3,13,8
+8,4,7
+1,9,11
+19,9,8
+9,19,7
+3,16,12
+10,3,9
+19,12,8
+12,13,2
+4,11,10
+11,9,20
+12,10,2
+13,11,2
+19,9,7
+5,18,14
+4,13,8
+6,16,16
+17,5,11
+15,5,13
+1,13,12
+1,11,12
+13,14,17
+11,17,7
+18,9,12
+15,4,5
+6,7,6
+10,16,4
+4,16,9
+17,15,12
+16,6,5
+4,14,11
+1,10,9
+15,9,18
+13,6,18
+13,12,1
+5,7,16
+19,12,12
+18,15,15
+17,12,5
+8,12,19
+15,16,16
+4,9,15
+17,9,4
+5,4,12
+11,17,4
+18,15,6
+12,17,6
+18,14,16
+6,7,16
+14,14,3
+9,1,9
+7,6,3
+8,1,9
+9,1,10
+14,4,4
+6,14,3
+5,16,5
+15,12,17
+6,9,2
+9,3,6
+2,12,7
+16,13,3
+10,4,13
+14,17,5
+12,4,16
+10,18,13
+6,10,5
+3,8,9
+12,18,6
+11,2,10
+3,13,6
+8,2,7
+8,8,3
+1,13,11
+5,3,13
+7,13,5
+12,6,4
+2,12,11
+4,8,5
+14,16,18
+5,14,15
+16,9,4
+4,14,17
+9,19,8
+13,6,16
+14,15,11
+11,2,12
+13,8,17
+11,18,14
+11,4,3
+8,14,3
+20,10,14
+14,8,4
+16,9,5
+15,8,3
+15,10,4
+14,3,7
+10,10,2
+12,15,3
+18,9,7
+11,16,18
+5,3,10
+17,14,14
+5,14,10
+5,18,10
+14,13,17
+9,20,9
+13,10,21
+11,3,15
+2,11,13
+1,13,8
+14,16,16
+9,4,8
+7,6,19
+8,16,3
+17,7,7
+12,18,9
+10,14,2
+6,4,5
+15,18,6
+15,19,8
+12,19,8
+15,20,9
+9,18,12
+9,14,18
+17,6,9
+7,8,2
+9,3,9
+4,5,9
+8,18,9
+3,13,14
+10,14,3
+16,10,16
+2,15,13
+13,8,19
+8,11,19
+18,11,14
+16,6,12
+9,4,4
+12,9,17
+18,11,11
+17,12,15
+8,16,7
+19,8,15
+6,6,4
+9,6,18
+14,5,18
+4,14,8
+8,19,7
+18,11,15
+5,16,16
+5,10,17
+11,5,18
+4,12,15
+14,16,5
+7,3,15
+14,4,14
+11,13,3
+19,7,13
+19,11,11
+2,12,16
+16,4,7
+17,14,11
+8,17,16
+3,13,7
+2,12,10
+13,14,6
+14,7,19
+18,13,13
+17,17,13
+10,19,8
+10,10,3
+17,16,11
+3,17,11
+14,18,6
+15,3,13
+16,16,14
+13,10,4
+6,11,16
+3,7,14
+15,14,5
+17,14,17
+11,18,7
+19,10,14
+3,9,6
+3,11,12
+13,3,14
+15,14,14
+12,16,16
+2,12,15
+14,9,18
+12,2,11
+13,18,9
+19,14,13
+11,13,17
+9,17,15
+8,8,18
+10,18,15
+9,8,1
+18,8,7
+13,17,8
+14,3,6
+15,10,2
+12,12,20
+8,18,13
+7,2,11
+17,7,11
+8,16,19
+10,1,6
+3,16,8
+15,13,6
+7,17,5
+16,16,6
+11,20,10
+10,12,3
+19,10,9
+12,14,2
+7,15,4
+9,10,2
+16,11,6
+6,6,12
+7,4,15
+17,10,17
+12,10,18
+17,16,7
+19,5,8
+20,9,11
+7,4,14
+19,8,7
+17,14,13
+14,15,5
+13,17,13
+9,17,16
+13,11,18
+3,9,11
+19,8,9
+18,6,15
+19,11,8
+15,13,4
+11,10,18
+9,18,11
+3,12,9
+10,8,3
+10,18,8
+12,12,2
+12,5,12
+10,17,13
+9,4,17
+2,8,11
+11,4,9
+9,16,2
+14,12,1
+2,11,8
+14,17,7
+15,7,5
+4,17,11
+16,16,8
+15,7,18
+15,5,9
+6,11,17
+4,11,17
+10,19,11
+18,17,11
+6,5,16
+14,3,13
+17,13,14
+19,13,10
+6,10,2
+15,10,16
+7,10,1
+9,4,13
+16,14,16
+10,7,1
+13,18,8
+5,18,11
+9,4,5
+9,5,17
+14,17,13
+5,9,5
+19,13,9
+5,3,8
+10,12,19
+13,8,4
+17,16,14
+16,9,6
+19,7,11
+10,6,4
+19,15,11
+18,10,4
+12,4,4
+17,9,5
+3,10,5
+13,2,7
+6,18,15
+18,9,13
+4,11,16
+17,6,5
+11,12,4
+16,12,5
+8,12,3
+2,8,14
+8,13,3
+10,2,12
+5,17,14
+6,13,17
+13,17,4
+8,13,18
+16,15,11
+6,3,9
+9,4,7
+7,18,7
+17,10,7
+11,16,2
+11,19,13
+15,2,14
+18,13,11
+12,6,18
+17,13,15
+10,4,6
+2,7,7
+12,2,7
+16,10,3
+14,4,10
+16,7,8
+13,20,8
+16,13,4
+20,10,10
+7,6,18
+11,1,10
+11,11,2
+14,8,2
+4,10,9
+6,8,7
+6,5,12
+16,14,9
+8,4,17
+8,20,9
+15,4,8
+16,6,6
+3,9,10
+9,19,9
+7,2,12
+7,18,12
+9,1,7
+9,12,1
+12,1,12
+17,12,18
+11,7,2
+1,11,9
+15,14,2
+5,10,16
+8,12,18
+11,15,4
+9,16,15
+6,12,18
+15,19,9
+4,15,8
+9,18,6
+9,12,20
+11,18,4
+9,2,12
+13,18,10
+4,6,16
+4,15,7
+14,5,7
+18,8,16
+12,11,3
+17,12,9
+3,6,12
+4,3,9
+15,17,11
+14,3,9
+11,19,16
+12,6,16
+19,15,10
+7,14,18
+8,9,18
+10,2,9
+15,13,14
+13,16,12
+12,2,10
+3,8,5
+10,5,5
+16,15,4
+14,7,5
+4,8,17
+15,4,16
+13,9,4
+18,13,8
+8,17,7
+10,11,1
+4,6,11
+13,12,5
+9,15,18
+4,5,8
+7,18,9
+16,6,10
+1,15,13
+20,11,12
+6,3,10
+17,14,5
+4,12,8
+7,4,13
+5,5,14
+4,7,14
+5,5,11
+4,15,14
+4,16,14
+9,4,11
+11,11,1
+13,18,14
+11,12,18
+13,5,16
+17,14,10
+3,15,6
+3,16,11
+12,8,20
+13,6,5
+17,11,6
+12,17,10
+12,2,14
+17,13,16
+4,12,18
+7,5,4
+4,16,10
+9,19,13
+13,2,14
+17,12,17
+17,6,16
+16,6,16
+2,7,10
+11,6,4
+7,19,10
+3,16,10
+8,5,5
+12,11,2
+3,14,7
+15,15,17
+5,12,6
+6,8,8
+6,13,3
+10,12,2
+18,12,14
+12,18,13
+8,18,11
+6,13,16
+5,10,14
+13,3,5
+18,16,6
+3,8,10
+7,3,6
+17,10,4
+13,14,2
+13,4,16
+9,3,7
+15,11,3
+5,9,6
+14,12,4
+8,14,20
+13,11,3
+15,16,5
+20,9,10
+8,10,17
+8,8,19
+2,14,13
+3,12,16
+7,19,9
+4,4,10
+16,8,6
+12,13,18
+5,18,7
+7,16,12
+15,2,9
+14,18,7
+6,13,14
+16,15,6
+12,18,10
+10,6,5
+9,10,1
+7,11,2
+17,7,4
+4,10,16
+17,13,6
+17,13,8
+9,5,18
+13,16,19
+18,11,5
+12,3,17
+10,21,12
+13,17,5
+3,10,14
+16,10,17
+18,15,12
+12,3,5
+10,19,13
+19,10,12
+8,16,11
+2,11,10
+10,1,11
+15,17,17
+19,6,9
+6,17,16
+8,18,8
+17,16,12
+13,5,17
+16,9,14
+5,12,3
+5,8,17
+9,6,2
+6,18,12
+4,5,12
+4,10,8
+16,5,6
+12,17,9
+12,11,20
+15,12,5
+13,9,17
+9,17,6
+16,3,10
+9,10,3
+2,11,9
+18,14,12
+7,8,1
+19,8,14
+6,5,13
+14,13,3
+9,6,3
+12,18,7
+18,10,7
+20,10,7
+17,7,10
+4,5,15
+14,11,17
+11,13,2
+3,15,13
+13,8,16
+15,3,10
+15,11,20
+7,13,18
+14,16,15
+18,8,15
+6,14,14
+17,13,12
+19,11,7
+3,10,11
+7,9,17
+10,3,6
+8,3,9
+19,10,6
+8,7,18
+3,7,12
+7,14,16
+16,18,7
+18,5,13
+18,17,13
+7,14,2
+11,16,9
+13,18,15
+14,17,14
+13,18,13
+9,3,11
+4,18,11
+10,14,5
+10,19,5
+9,8,19
+19,13,12
+11,16,5
+8,18,7
+9,18,16
+10,4,18
+5,19,10
+13,7,3
+5,14,4
+7,17,12
+8,5,6
+3,16,9
+13,8,15
+12,14,3
+11,16,4
+17,9,18
+17,8,4
+19,10,13
+5,14,6
+11,19,10
+14,12,5
+9,6,19
+19,12,9
+18,16,11
+17,15,11
+15,18,14
+4,4,7
+3,9,12
+8,8,20
+6,14,17
+7,4,6
+15,2,10
+3,4,11
+12,10,3
+18,13,12
+17,8,16
+8,14,15
+5,2,10
+1,8,8
+15,17,13
+14,19,10
+16,8,16
+19,9,10
+11,2,14
+19,4,10
+14,8,17
+10,8,17
+3,10,16
+3,11,16
+19,12,11
+15,8,16
+8,9,3
+2,7,8
+4,17,14
+14,8,19
+15,5,10
+13,10,5
+13,18,4
+12,17,16
+12,3,7
+1,15,12
+13,17,11
+10,18,9
+7,15,18
+11,1,12
+3,9,15
+5,9,16
+17,12,16
+9,4,15
+13,15,3
+14,6,18
+4,6,8
+3,5,11
+13,6,17
+7,19,15
+4,14,14
+14,12,18
+20,10,11
+5,15,14
+15,6,7
+10,3,7
+10,7,19
+13,4,4
+16,11,18
+13,12,3
+12,3,6
+7,16,7
+6,6,15
+7,5,17
+16,3,9
+7,18,13
+7,11,17
+18,13,6
+5,16,7
+10,13,2
+5,8,18
+3,11,9
+2,7,12
+15,4,9
+19,12,15
+18,15,16
+7,16,13
+5,16,12
+18,8,11
+8,14,18
+20,14,9
+5,6,5
+4,3,10
+5,9,14
+5,11,6
+17,6,11
+16,18,14
+8,14,4
+2,12,14
+18,7,12
+14,13,4
+17,16,16
+8,13,15
+3,8,8
+1,11,8
+9,18,13
+3,13,10
+9,8,16
+10,9,18
+17,17,10
+12,5,6
+19,8,8
+11,17,6
+10,13,18
+5,15,17
+15,16,14
+18,7,8
+11,20,9
+3,9,9
+19,12,5
+13,17,15
+5,8,5
+17,8,15
+19,9,16
+5,2,9
+6,18,8
+8,15,9
+10,10,4
+14,3,12
+3,7,15
+15,3,11
+14,9,1
+15,15,11
+20,11,9
+10,4,8
+13,7,2
+3,11,6
+7,6,13
+12,11,19
+10,17,17
+11,3,14
+17,6,10
+10,17,12
+18,7,9
+16,12,17
+3,10,9
+15,7,16
+12,12,17
+19,8,13
+6,18,10
+17,9,11
+16,16,10
+6,4,8
+11,13,19
+12,3,18
+7,14,6
+9,2,14
+10,2,8
+17,4,9
+18,17,9
+4,11,7
+10,6,19
+5,4,7
+14,6,5
+6,5,5
+7,13,17
+14,8,18
+17,15,14
+3,10,10
+16,17,13
+10,17,4
+11,14,3
+8,6,4
+8,2,14
+7,7,18
+2,13,14
+5,16,13
+9,13,18
+6,5,14
+20,12,9
+9,19,12
+10,15,4
+19,15,7
+15,15,15
+10,5,4
+4,7,8
+6,4,14
+13,13,5
+16,5,8
+9,2,7
+4,9,16
+10,5,19
+6,17,6
+17,12,6
+20,10,9
+9,2,11
+2,9,5
+6,4,7
+13,8,18
+16,11,15
+14,10,18
+16,15,15
+11,4,6
+16,5,4
+4,16,11
+9,9,2
+9,3,10
+8,4,14
+3,12,13
+13,4,11
+11,12,2
+7,2,13
+6,18,14
+1,11,13
+13,16,6
+14,17,6
+5,17,13
+13,3,7
+8,2,11
+3,10,7
+7,4,17
+13,13,17
+7,13,2
+14,11,2
+6,15,11
+7,19,11
+18,12,5
+7,12,3
+14,16,10
+17,15,16
+13,5,11
+14,2,14
+6,3,8
+12,9,18
+3,4,12
+2,10,14
+17,10,12
+4,17,10
+14,17,10
+5,4,10
+17,10,14
+19,14,10
+19,11,13
+11,16,19
+11,4,5
+9,9,3
+12,20,10
+5,18,12
+18,5,9
+6,16,10
+10,2,11
+2,9,9
+6,5,7
+9,1,13
+4,10,18
+2,10,13
+12,18,16
+4,6,14
+10,11,2
+4,10,5
+10,15,16
+9,17,7
+12,16,3
+7,13,3
+6,13,19
+4,13,17
+18,16,9
+18,7,7
+10,9,19
+2,11,14
+15,9,6
+9,7,3
+17,8,13
+3,16,13
+6,12,4
+13,7,4
+15,8,18
+15,13,19
+19,8,10
+1,9,14
+10,20,14
+4,8,7
+17,8,14
+10,18,5
+15,14,12
+4,3,12
+13,16,4
+11,2,13
+9,13,4
+11,3,16
+5,10,15
+6,17,15
+8,17,13
+2,8,15
+3,9,13
+12,12,3
+17,4,6
+3,13,15
+13,5,5
+16,4,10
+18,12,6
+17,13,17
+9,7,19
+2,13,6
+4,6,10
+13,7,19
+9,5,4
+10,0,10
+11,19,7
+9,12,19
+7,17,16
+16,18,9
+17,17,9
+20,9,8
+8,11,0
+6,15,18
+10,16,18
+8,15,2
+17,4,10
+15,18,8
+12,5,16
+19,15,12
+5,17,10
+5,13,17
+11,14,2
+7,4,5
+10,15,17
+14,7,17
+3,9,17
+8,16,17
+7,19,8
+6,14,13
+9,5,3
+20,11,10
+12,5,18
+14,3,11
+16,7,17
+6,6,16
+17,4,11
+13,19,13
+4,13,9
+11,6,16
+14,1,13
+10,2,5
+4,6,5
+3,12,5
+14,18,12
+8,17,18
+4,9,4
+14,2,11
+12,9,3
+7,3,7
+6,15,16
+17,3,10
+15,11,19
+13,3,13
+9,16,3
+15,11,17
+10,16,16
+2,9,8
+16,4,9
+19,7,12
+14,16,14
+2,10,16
+11,17,8
+7,20,8
+16,10,19
+11,4,11
+15,5,6
+13,14,19
+12,9,19
+13,18,6
+12,17,5
+19,5,9
+3,15,14
+18,10,6
+12,4,3
+6,6,14
+13,5,3
+9,9,1
+19,13,13
+8,18,6
+7,17,10
+5,4,15
+9,18,15
+4,8,11
+14,15,12
+14,19,15
+9,16,18
+5,5,8
+9,3,16
+11,17,18
+6,9,20
+5,10,5
+9,19,6
+3,12,14
+11,4,8
+9,9,18
+11,10,19
+16,10,4
+7,11,1
+15,9,2
+7,11,18
+13,2,12
+18,11,4
+16,8,15
+19,13,15
+12,12,19
+15,10,3
+8,4,15
+7,5,9
+8,2,9
+6,9,5
+18,12,7
+14,18,15
+18,13,9
+16,15,3
+7,3,14
+12,8,3
+15,6,16
+9,0,11
+19,11,10
+4,14,15
+5,14,18
+4,12,6
+12,8,19
+2,12,12
+6,18,5
+7,2,10
+16,14,14
+7,8,5
+8,15,19
+6,15,17
+16,11,12
+13,19,12
+11,20,14
+9,19,10
+16,12,15
+5,14,8
+13,5,6
+7,19,12
+13,12,2
+8,8,4
+15,16,3
+12,18,18
+7,16,11
+12,10,5
+18,6,12
+14,6,15
+10,10,20
+8,2,6
+10,17,5
+6,19,8
+11,12,1
+20,11,14
+2,7,15
+18,5,14
+1,8,11
+16,5,16
+17,6,7
+6,16,15
+14,10,2
+5,14,17
+12,17,14
+10,7,17
+9,11,20
+13,12,17
+15,13,18
+10,3,16
+9,5,15
+14,8,20
+15,15,7
+18,7,13
+2,10,6
+15,8,5
+8,10,1
+13,11,17
+10,4,7
+4,11,6
+5,15,4
+14,4,7
+15,8,15
+15,4,13
+6,6,6
+15,8,4
+9,20,12
+6,12,16
+8,1,10
+14,11,1
+9,20,14
+11,8,2
+11,17,13
+2,11,15
+8,6,3
+15,11,5
+16,8,7
+2,14,10
+2,8,7
+17,16,10
+11,18,12
+10,6,16
+3,6,15
+12,4,13
+16,5,7
+18,16,7
+16,17,17
+3,15,7
+16,10,2
+12,15,16
+10,14,17
+15,7,6
+13,17,14
+18,7,14
+13,9,19
+10,15,5
+7,8,17
+12,14,17
+15,6,15
+8,19,13
+18,8,13
+2,15,9
+5,15,13
+10,18,4
+19,11,12
+5,17,9
+15,12,19
+13,15,13
+14,13,16
+11,17,5
+12,3,8
+6,13,5
+19,16,13
+13,15,6
+18,6,13
+6,10,4
+8,2,13
+3,12,11
+11,17,3
+14,1,11
+16,3,12
+3,17,9
+16,5,11
+6,11,19
+2,15,12
+7,6,6
+7,14,17
+8,6,18
+9,3,13
+19,6,12
+2,9,15
+11,5,7
+3,7,6
+18,10,16
+14,18,5
+5,10,3
+20,15,11
+4,5,11
+4,4,15
+17,7,9
+10,2,6
+3,8,13
+14,14,16
+15,4,10
+14,17,9
+7,12,18
+13,20,13
+9,17,11
+6,17,11
+5,5,17
+17,6,6
+8,19,11
+5,4,5
+10,10,1
+4,14,16
+11,15,19
+5,5,16
+4,6,17
+5,8,16
+16,14,13
+4,11,15
+11,19,5
+7,9,14
+13,6,4
+15,8,6
+15,15,9
+5,4,9
+11,15,17
+10,18,14
+15,2,8
+19,7,10
+4,12,7
+6,3,11
+17,14,4
+2,8,13
+10,2,15
+9,2,6
+15,14,7
+5,3,15
+13,18,7
+15,16,9
+16,8,4
+8,1,12
+13,4,12
+15,7,4
+7,18,5
+9,15,16
+7,20,10
+15,13,2
+3,15,10
+8,16,16
+13,12,18
+8,3,14
+16,15,7
+15,16,4
+4,18,12
+17,8,3
+6,16,17
+18,12,12
+10,16,6
+3,7,8
+7,10,18
+3,14,6
+1,10,12
+3,7,11
+4,6,12
+13,2,9
+13,14,3
+20,10,12
+16,8,19
+6,19,13
+10,4,9
+2,15,8
+6,19,10
+11,6,5
+18,10,12
+13,1,13
+16,14,17
+5,13,13
+12,6,11
+7,17,8
+13,4,5
+4,18,13
+6,13,4
+5,7,8
+12,13,16
+17,14,12
+16,13,17
+12,20,12
+9,13,20
+12,19,14
+5,7,5
+4,15,6
+15,4,14
+9,3,5
+8,10,20
+12,19,10
+3,5,7
+14,15,8
+7,4,10
+5,13,3
+5,17,6
+6,7,18
+8,6,15
+10,18,12
+4,3,8
+10,19,6
+16,4,15
+17,11,11
+2,14,15
+10,18,10
+16,6,3
+13,3,4
+11,5,6
+10,4,5
+12,11,1
+15,18,13
+18,12,18
+9,12,2
+5,4,11
+19,7,14
+4,10,14
+13,14,18
+19,8,11
+5,6,9
+13,7,17
+4,7,15
+13,11,16
+7,18,8
+17,17,7
+10,5,3
+16,16,5
+11,10,1
+11,21,12
+4,4,12
+7,14,5
+9,4,3
+14,4,13
+18,8,6
+17,3,11
+15,8,19
+9,8,4
+12,19,7
+13,6,3
+5,9,8
+2,13,8
+16,14,15
+20,14,7
+8,11,4
+4,17,12
+16,5,5
+20,11,8
+20,9,7
+6,5,10
+5,7,19
+14,11,16
+9,9,19
+16,18,12
+9,8,18
+19,11,9
+5,12,16
+17,17,11
+5,7,6
+3,7,10
+6,8,18
+13,3,11
+10,15,18
+8,12,5
+5,6,4
+5,8,13
+11,11,21
+15,13,16
+7,7,3
+5,6,10
+11,5,5
+3,12,7
+17,13,13
+16,14,7
+6,16,11
+19,12,6
+16,17,6
+10,8,20
+16,15,12
+11,2,8
+15,14,6
+13,10,20
+7,10,17
+13,10,3
+13,9,1
+17,12,13
+5,17,11
+11,10,3
+16,9,18
+11,13,20
+13,2,8
+6,4,16
+13,20,10
+3,10,12
+15,7,14
+4,9,5
+11,15,18
+12,18,4
+18,12,15
+17,9,17
+16,14,3
+3,8,12
+15,19,14
+6,3,7
+3,6,6
+14,5,14
+8,1,11
+17,6,15
+15,9,19
+11,2,6
+14,16,6
+9,7,4
+10,19,7
+9,17,8
+10,16,5
+11,9,4
+15,7,15
+17,12,14
+5,17,7
+3,11,4
+18,15,14
+16,10,15
+4,8,12
+8,3,17
+4,7,7
+20,8,11
+6,17,7
+6,6,7
+10,1,12
+11,14,18
+16,18,11
+12,5,7
+14,10,5
+17,11,5
+7,4,16
+15,6,5
+11,3,8
+15,16,17
+14,17,4
+14,7,20
+11,19,6
+8,5,7
+15,16,7
+5,16,15
+18,12,17
+20,9,13
+11,5,3
+3,11,8
+20,13,8
+19,6,8
+15,18,16
+7,4,3
+11,7,6
+5,13,14
+12,3,15
+9,10,17
+17,4,7
+14,14,15
+16,4,8
+11,6,2
+13,8,5
+2,13,9
+15,6,4
+7,7,15
+9,12,3
+5,12,15
+8,12,17
+5,8,3
+7,19,14
+11,18,13
+12,19,6
+10,11,20
+16,19,11
+2,6,6
+8,4,8
+4,8,14
+11,4,4
+6,14,15
+11,4,17
+14,19,12
+14,18,16
+14,4,17
+8,4,3
+8,1,8
+14,2,12
+6,16,12
+6,6,8
+12,8,5
+7,5,15
+10,6,2
+11,15,2
+18,10,5
+11,17,14
+9,3,8
+5,6,8
+19,6,14
+3,14,14
+8,5,16
+12,6,17
+12,18,5
+20,13,12
+15,16,6
+19,11,4
+20,15,13
+1,6,13
+12,16,7
+16,13,7
+7,10,19
+16,17,14
+2,5,7
+18,9,16
+8,4,13
+9,17,10
+13,5,7
+9,14,17
+6,18,11
+10,19,14
+14,11,19
+14,16,13
+11,19,9
+4,10,4
+19,13,11
+15,19,12
+10,12,20
+14,16,3
+2,13,7
+10,14,4
+14,9,19
+5,12,7
+11,11,20
+2,10,12
+14,5,16
+3,5,14
+10,8,2
+1,9,8
+16,6,13
+9,13,17
+16,6,17
+4,17,7
+13,15,2
+2,5,12
+3,16,6
+5,2,12
+15,19,13
+10,14,6
+8,18,18
+15,5,15
+14,10,1
+4,12,12
+8,11,17
+4,9,12
+9,17,3
+14,16,8
+1,12,12
+14,17,8
+20,12,11
+9,18,8
+4,5,5
+4,11,13
+3,14,15
+12,8,4
+16,13,15
+10,5,18
+7,13,19
+7,6,16
+14,4,8
+6,8,5
+5,4,13
+15,5,12
+19,10,7
+13,10,17
+4,11,3
+10,4,4
+6,15,7
+6,9,17
+1,9,13
+5,12,17
+5,7,15
+17,10,8
+17,8,12
+14,14,4
+8,5,18
+14,8,16
+17,16,15
+2,17,8
+5,16,11
+18,17,10
+20,9,14
+2,8,12
+6,16,4
+16,9,16
+6,19,14
+15,11,4
+20,10,13
+5,15,12
+11,1,13
+1,14,11
+13,1,10
+11,9,17
+15,3,15
+9,17,17
+5,13,16
+12,19,9
+1,14,10
+12,6,2
+18,12,16
+9,4,18
+19,10,16
+6,14,2
+10,13,20
+3,8,14
+8,12,1
+7,16,10
+8,12,20
+14,7,4
+18,9,9
+8,3,15
+10,8,19
+19,16,12
+5,8,7
+20,12,8
+13,4,13
+8,14,16
+15,20,13
+16,17,15
+17,7,16
+14,10,3
+14,5,12
+4,14,9
+6,2,14
+5,13,7
+16,15,18
+7,15,14
+18,5,10
+6,9,16
+14,12,19
+10,16,3
+14,16,12
+14,16,7
+11,2,16
+20,8,9
+20,11,11
+11,4,18
+12,8,1
+15,16,11
+8,16,15
+8,9,1
+8,7,20
+8,10,2
+14,17,11
+11,15,15
+14,16,11
+8,5,12
+16,8,14
+7,2,9
+17,18,11
+3,10,13
+18,14,5
+8,15,6
+6,19,11
+12,14,19
+12,19,12
+14,4,12
+1,11,11
+13,6,6
+17,11,13
+7,17,4
+15,9,16
+18,11,10
+14,7,18
+19,9,13
+17,17,12
+8,7,4
+14,20,9
+17,8,11
+19,11,15
+10,15,3
+15,6,3
+10,5,13
+16,12,19
+8,19,8
+18,5,11
+9,13,0
+3,12,8
+10,9,0
+18,10,8
+19,9,9
+2,12,6
+10,21,8
+10,7,5
+4,8,13
+10,12,21
+9,13,6
+1,6,10
+8,11,16
+9,7,16
+1,14,8
+12,8,2
+11,20,12
+15,17,8
+4,10,12
+11,10,2
+20,12,10
+13,4,10
+17,16,5
+14,14,17
+12,9,20
+16,4,14
+14,5,6
+16,4,16
+9,20,10
+3,12,12
+14,12,2
+11,16,3
+17,7,14
+16,10,11
+19,15,13
+4,10,11
+2,6,9
+12,4,6
+17,9,9
+13,9,20
diff --git a/src/bin/2022/day18.rs b/src/bin/2022/day18.rs
new file mode 100644
index 0000000..35944f1
--- /dev/null
+++ b/src/bin/2022/day18.rs
@@ -0,0 +1,130 @@
+#![allow(dead_code)]
+#![allow(unused_variables)]
+
+use advent_of_code::prelude::*;
+
+pub fn parse(fh: File) -> Result<Vec<(i64, i64, i64)>> {
+ Ok(parse::raw_lines(fh)
+ .map(|s| {
+ let mut parts = s.split(',');
+ (
+ parts.next().unwrap().parse().unwrap(),
+ parts.next().unwrap().parse().unwrap(),
+ parts.next().unwrap().parse().unwrap(),
+ )
+ })
+ .collect())
+}
+
+pub fn part1(points: Vec<(i64, i64, i64)>) -> Result<i64> {
+ let mut total = 0;
+ for p in &points {
+ let mut area = 6;
+ for neighbor in [
+ (p.0 - 1, p.1, p.2),
+ (p.0 + 1, p.1, p.2),
+ (p.0, p.1 - 1, p.2),
+ (p.0, p.1 + 1, p.2),
+ (p.0, p.1, p.2 - 1),
+ (p.0, p.1, p.2 + 1),
+ ] {
+ if points.contains(&neighbor) {
+ area -= 1;
+ }
+ }
+ total += area;
+ }
+ Ok(total)
+}
+
+pub fn part2(points: Vec<(i64, i64, i64)>) -> Result<i64> {
+ let mut all_neighbors = HashSet::new();
+ for p in &points {
+ for neighbor in [
+ (p.0 - 1, p.1, p.2),
+ (p.0 + 1, p.1, p.2),
+ (p.0, p.1 - 1, p.2),
+ (p.0, p.1 + 1, p.2),
+ (p.0, p.1, p.2 - 1),
+ (p.0, p.1, p.2 + 1),
+ ] {
+ if !points.contains(&neighbor) {
+ all_neighbors.insert(neighbor);
+ }
+ }
+ }
+
+ let bounds = (
+ (points.iter().map(|p| p.0).min().unwrap() - 1)
+ ..=(points.iter().map(|p| p.0).max().unwrap() + 1),
+ (points.iter().map(|p| p.1).min().unwrap() - 1)
+ ..=(points.iter().map(|p| p.1).max().unwrap() + 1),
+ (points.iter().map(|p| p.2).min().unwrap() - 1)
+ ..=(points.iter().map(|p| p.2).max().unwrap() + 1),
+ );
+ let mut visited = HashSet::new();
+ let mut to_visit =
+ vec![(*bounds.0.start(), *bounds.1.start(), *bounds.2.start())];
+ while let Some(p) = to_visit.pop() {
+ visited.insert(p);
+ let neighbors = [
+ (p.0 - 1, p.1, p.2),
+ (p.0 + 1, p.1, p.2),
+ (p.0, p.1 - 1, p.2),
+ (p.0, p.1 + 1, p.2),
+ (p.0, p.1, p.2 - 1),
+ (p.0, p.1, p.2 + 1),
+ ];
+ to_visit.extend(
+ neighbors
+ .iter()
+ .filter(|p| in_bounds(**p, &bounds))
+ .filter(|p| !visited.contains(p))
+ .filter(|p| !points.contains(p)),
+ )
+ }
+
+ let mut total = 0;
+ for p in &points {
+ let mut area = 6;
+ for neighbor in [
+ (p.0 - 1, p.1, p.2),
+ (p.0 + 1, p.1, p.2),
+ (p.0, p.1 - 1, p.2),
+ (p.0, p.1 + 1, p.2),
+ (p.0, p.1, p.2 - 1),
+ (p.0, p.1, p.2 + 1),
+ ] {
+ if points.contains(&neighbor) || !visited.contains(&neighbor) {
+ area -= 1;
+ }
+ }
+ total += area;
+ }
+ Ok(total)
+}
+
+fn in_bounds(
+ p: (i64, i64, i64),
+ bounds: &(
+ std::ops::RangeInclusive<i64>,
+ std::ops::RangeInclusive<i64>,
+ std::ops::RangeInclusive<i64>,
+ ),
+) -> bool {
+ bounds.0.contains(&p.0)
+ && bounds.1.contains(&p.1)
+ && bounds.2.contains(&p.2)
+}
+
+#[test]
+fn test() {
+ assert_eq!(
+ part1(parse(parse::data(2022, 18).unwrap()).unwrap()).unwrap(),
+ 4608
+ );
+ assert_eq!(
+ part2(parse(parse::data(2022, 18).unwrap()).unwrap()).unwrap(),
+ 2652
+ );
+}
diff --git a/src/bin/2022/main.rs b/src/bin/2022/main.rs
index 744516a..6c02180 100644
--- a/src/bin/2022/main.rs
+++ b/src/bin/2022/main.rs
@@ -28,6 +28,7 @@ mod day14;
mod day15;
mod day16;
mod day17;
+mod day18;
// NEXT MOD
#[paw::main]
@@ -51,6 +52,7 @@ fn main(opt: Opt) -> Result<()> {
15 => advent_of_code::day!(2022, opt.day, opt.puzzle, day15),
16 => advent_of_code::day!(2022, opt.day, opt.puzzle, day16),
17 => advent_of_code::day!(2022, opt.day, opt.puzzle, day17),
+ 18 => advent_of_code::day!(2022, opt.day, opt.puzzle, day18),
// NEXT PART
_ => panic!("unknown day {}", opt.day),
}