From 25d4e0298d6734ec5a6a8c86d1f46fa1df182e74 Mon Sep 17 00:00:00 2001 From: Joscha Date: Fri, 9 Dec 2022 13:35:06 +0100 Subject: [PATCH] [rs] Solve 2022_09 part 1 --- inputs/2022/2022_09.input | 2000 +++++++++++++++++++++++++++ inputs/2022/2022_09.solution | 2 + rs/src/main.rs | 2 + rs/src/y2022.rs | 1 + rs/src/y2022/d09.rs | 60 + sample_inputs/2022/2022_09.input | 8 + sample_inputs/2022/2022_09.solution | 2 + 7 files changed, 2075 insertions(+) create mode 100644 inputs/2022/2022_09.input create mode 100644 inputs/2022/2022_09.solution create mode 100644 rs/src/y2022/d09.rs create mode 100644 sample_inputs/2022/2022_09.input create mode 100644 sample_inputs/2022/2022_09.solution diff --git a/inputs/2022/2022_09.input b/inputs/2022/2022_09.input new file mode 100644 index 0000000..73cfe58 --- /dev/null +++ b/inputs/2022/2022_09.input @@ -0,0 +1,2000 @@ +D 2 +U 2 +L 2 +D 2 +L 2 +D 2 +L 1 +D 2 +U 1 +L 1 +D 1 +R 1 +D 1 +L 2 +D 1 +U 2 +D 2 +R 2 +D 1 +U 2 +L 2 +D 1 +R 1 +D 1 +R 2 +U 2 +L 2 +U 2 +D 1 +U 2 +R 2 +L 2 +R 2 +D 2 +L 1 +R 2 +D 2 +R 2 +D 1 +R 2 +D 2 +R 2 +L 1 +R 1 +U 2 +D 2 +R 2 +D 1 +L 2 +D 1 +L 1 +U 2 +L 1 +U 2 +R 2 +D 1 +L 1 +D 2 +L 1 +D 1 +R 1 +D 2 +R 2 +D 2 +L 2 +D 2 +U 2 +L 1 +R 2 +L 1 +D 2 +L 2 +D 2 +U 2 +L 1 +R 2 +U 2 +D 2 +R 1 +L 2 +D 1 +R 2 +D 2 +L 1 +R 1 +L 2 +D 1 +R 1 +D 1 +L 1 +U 2 +R 1 +U 1 +L 1 +U 1 +L 2 +U 2 +L 2 +U 2 +R 1 +L 2 +D 2 +R 1 +D 1 +U 2 +D 1 +U 1 +L 1 +R 1 +D 2 +R 1 +D 2 +U 1 +D 2 +L 1 +R 2 +U 2 +D 3 +U 1 +R 1 +U 1 +D 1 +R 1 +L 2 +D 3 +U 3 +L 3 +U 2 +R 2 +U 1 +D 2 +U 1 +R 3 +D 1 +R 2 +U 1 +D 2 +U 2 +L 2 +U 1 +D 1 +L 2 +U 3 +R 3 +D 3 +R 1 +U 1 +L 3 +R 1 +D 1 +L 1 +U 1 +R 3 +U 2 +D 1 +U 1 +L 2 +U 3 +L 2 +D 3 +L 2 +R 3 +D 3 +R 3 +L 2 +R 3 +U 3 +D 1 +U 2 +L 3 +U 2 +L 1 +U 1 +D 1 +L 1 +D 2 +U 2 +L 1 +U 1 +L 3 +U 2 +D 3 +R 1 +U 1 +R 3 +L 3 +R 2 +U 1 +L 3 +D 2 +U 1 +D 3 +R 2 +U 3 +L 1 +R 2 +D 2 +L 1 +R 3 +L 3 +D 3 +R 3 +L 2 +U 2 +R 3 +D 2 +L 2 +U 1 +R 2 +U 2 +R 3 +L 2 +D 1 +R 1 +D 3 +L 3 +U 1 +R 2 +L 3 +D 1 +R 3 +U 2 +D 4 +L 2 +D 2 +L 2 +R 3 +U 2 +D 1 +R 3 +L 2 +U 3 +R 3 +U 3 +L 4 +R 3 +D 3 +U 1 +D 2 +R 1 +U 1 +L 2 +D 1 +R 2 +U 4 +R 3 +U 3 +L 4 +U 3 +R 2 +L 1 +R 4 +L 2 +U 4 +L 1 +D 1 +L 1 +U 2 +L 1 +U 3 +L 1 +U 1 +R 1 +U 1 +R 2 +L 4 +D 3 +R 4 +D 2 +U 2 +L 2 +D 1 +R 2 +L 4 +U 4 +R 3 +D 3 +L 2 +R 3 +L 2 +D 4 +R 4 +L 1 +R 3 +U 3 +R 4 +L 4 +U 3 +R 2 +D 3 +L 3 +D 1 +U 2 +D 1 +L 4 +D 3 +R 4 +L 4 +U 3 +R 2 +U 1 +D 3 +R 3 +D 4 +U 3 +L 3 +D 4 +L 2 +U 2 +L 2 +D 2 +U 2 +L 2 +D 3 +R 4 +U 2 +D 3 +R 2 +D 4 +U 2 +R 2 +D 3 +L 2 +U 1 +L 4 +R 2 +L 4 +D 3 +L 1 +D 1 +U 2 +L 1 +R 4 +L 4 +R 2 +L 3 +R 5 +D 5 +L 4 +U 2 +R 2 +U 3 +D 4 +L 2 +U 3 +D 2 +R 2 +D 1 +R 5 +D 1 +R 2 +U 5 +R 3 +D 5 +L 2 +R 5 +L 4 +R 2 +U 3 +L 3 +D 2 +L 1 +D 5 +L 1 +R 1 +U 2 +R 4 +L 5 +R 2 +D 2 +U 1 +L 3 +D 2 +R 2 +U 4 +D 5 +R 4 +U 3 +R 1 +D 2 +R 4 +L 3 +D 4 +L 4 +R 4 +D 4 +L 5 +R 5 +D 2 +R 2 +L 1 +D 5 +L 3 +R 3 +U 4 +R 1 +U 3 +L 4 +D 5 +R 3 +D 4 +U 5 +L 5 +R 5 +U 3 +L 2 +D 4 +U 1 +R 4 +U 2 +D 2 +U 2 +L 1 +U 2 +D 1 +U 4 +R 3 +U 1 +R 2 +L 5 +D 3 +R 1 +U 3 +L 2 +U 5 +D 5 +U 3 +D 4 +R 1 +U 5 +L 4 +U 5 +R 3 +D 5 +U 1 +D 1 +L 1 +U 2 +L 3 +R 1 +U 2 +D 5 +R 5 +U 1 +L 1 +R 6 +D 1 +L 6 +D 2 +U 6 +R 4 +D 3 +R 1 +U 1 +L 3 +U 6 +D 4 +R 4 +D 4 +R 5 +D 6 +L 5 +U 3 +R 6 +U 6 +D 2 +U 4 +L 5 +D 3 +L 2 +R 6 +D 5 +R 2 +U 1 +R 6 +L 3 +R 4 +U 5 +L 1 +D 2 +U 5 +R 4 +D 6 +R 6 +D 1 +U 2 +R 5 +D 6 +R 3 +U 3 +L 3 +R 1 +L 4 +R 1 +D 5 +U 5 +L 6 +U 3 +D 3 +R 6 +D 6 +R 1 +D 4 +L 2 +D 5 +R 4 +U 2 +R 5 +L 1 +D 6 +U 6 +R 5 +U 4 +D 4 +U 6 +L 6 +D 1 +L 6 +R 1 +D 3 +R 4 +L 5 +D 2 +L 5 +R 2 +U 5 +D 3 +R 6 +U 1 +D 1 +R 6 +U 6 +D 1 +L 4 +D 4 +L 1 +U 5 +R 2 +L 3 +U 5 +R 4 +L 6 +R 5 +D 5 +L 4 +R 6 +U 3 +R 3 +D 3 +R 5 +U 3 +R 4 +U 3 +L 4 +U 4 +L 5 +R 6 +U 5 +D 1 +U 4 +L 7 +D 7 +U 5 +R 3 +D 4 +R 4 +D 3 +L 1 +U 4 +L 2 +D 4 +R 4 +U 7 +L 7 +U 4 +D 7 +U 6 +D 3 +U 6 +L 6 +R 1 +D 1 +R 3 +D 5 +U 1 +L 5 +R 5 +U 3 +L 7 +R 6 +D 7 +U 3 +L 2 +U 1 +R 3 +L 2 +U 1 +R 7 +U 1 +D 7 +U 4 +R 6 +U 2 +R 3 +U 6 +D 2 +L 4 +D 2 +L 2 +U 2 +L 2 +D 6 +R 2 +D 1 +U 4 +D 4 +U 4 +R 2 +U 3 +R 2 +D 1 +R 1 +L 7 +R 2 +D 6 +L 6 +D 2 +L 6 +R 3 +L 5 +D 7 +U 3 +R 5 +D 1 +U 7 +D 7 +U 4 +R 5 +D 1 +U 7 +L 6 +D 7 +U 5 +L 5 +U 4 +R 4 +U 7 +D 3 +R 7 +U 2 +R 2 +L 4 +R 6 +U 5 +R 6 +L 5 +U 1 +D 7 +U 1 +D 1 +L 6 +D 6 +U 2 +L 3 +U 6 +L 6 +R 6 +U 5 +L 4 +R 1 +L 1 +D 4 +L 5 +D 3 +L 4 +R 6 +L 6 +D 6 +U 5 +D 1 +R 2 +D 6 +R 6 +U 8 +L 8 +U 7 +D 7 +R 3 +U 4 +R 4 +U 8 +D 4 +R 6 +D 1 +L 6 +D 6 +R 8 +U 1 +D 2 +R 3 +D 8 +U 4 +R 3 +U 7 +R 3 +D 6 +L 8 +D 3 +L 7 +R 1 +L 7 +D 5 +U 3 +D 7 +U 4 +D 7 +L 7 +D 2 +U 7 +R 5 +U 5 +L 4 +D 3 +R 6 +U 1 +L 3 +D 3 +R 2 +U 3 +D 2 +R 3 +D 3 +R 3 +L 3 +D 6 +U 2 +L 2 +R 5 +U 4 +D 2 +U 5 +L 3 +R 1 +U 5 +D 1 +U 5 +L 3 +D 6 +R 6 +D 1 +U 4 +L 2 +D 5 +U 2 +L 8 +U 6 +D 6 +R 7 +L 3 +D 3 +L 1 +R 2 +D 5 +L 1 +D 3 +L 3 +R 8 +L 3 +D 7 +R 4 +U 3 +R 1 +L 7 +D 1 +U 1 +R 4 +L 2 +U 2 +L 5 +D 4 +R 8 +U 3 +R 7 +L 9 +R 5 +U 8 +R 9 +U 1 +D 2 +U 5 +L 5 +R 5 +U 3 +R 1 +U 7 +D 2 +R 2 +L 4 +D 7 +U 4 +R 3 +D 6 +R 9 +L 1 +D 1 +U 2 +R 8 +D 4 +L 2 +U 7 +D 9 +U 8 +D 4 +R 1 +L 3 +R 6 +D 6 +R 1 +L 2 +R 9 +U 7 +R 4 +U 2 +D 6 +L 5 +U 5 +R 2 +L 5 +R 1 +D 6 +R 1 +D 5 +L 4 +U 1 +D 8 +L 9 +R 1 +U 6 +D 3 +L 7 +U 7 +R 5 +D 8 +U 2 +D 8 +U 4 +L 2 +R 4 +D 4 +L 6 +R 4 +L 5 +U 7 +R 8 +L 6 +D 9 +L 2 +R 4 +L 6 +U 3 +L 6 +R 9 +U 7 +D 3 +R 1 +D 1 +R 6 +D 8 +L 5 +R 8 +U 9 +D 9 +U 2 +R 7 +U 9 +R 4 +L 6 +U 9 +R 2 +D 9 +U 7 +R 2 +U 9 +R 2 +L 2 +R 8 +L 9 +R 3 +D 4 +R 10 +U 10 +D 7 +R 7 +D 4 +R 8 +D 9 +U 7 +L 8 +D 10 +U 10 +R 4 +U 6 +D 4 +L 9 +R 9 +L 10 +D 3 +L 6 +D 2 +L 5 +U 1 +R 4 +D 3 +U 7 +L 1 +R 6 +L 10 +U 2 +R 4 +D 5 +U 7 +R 2 +U 3 +R 3 +L 2 +R 9 +U 8 +D 8 +R 10 +U 9 +R 6 +U 5 +L 2 +D 10 +U 4 +R 4 +L 5 +U 10 +R 6 +L 1 +R 10 +D 9 +L 7 +D 3 +L 3 +R 5 +D 3 +L 2 +R 1 +L 3 +R 2 +D 2 +U 4 +L 3 +D 5 +R 6 +D 1 +U 8 +L 6 +D 10 +R 6 +U 5 +L 1 +D 8 +U 1 +R 2 +D 6 +U 8 +D 10 +L 2 +D 1 +R 7 +L 2 +D 4 +U 10 +L 7 +D 10 +U 2 +D 7 +U 1 +R 5 +D 8 +R 4 +D 9 +R 6 +L 6 +R 7 +L 2 +R 5 +D 6 +L 2 +D 1 +L 9 +U 4 +D 10 +R 10 +U 7 +D 10 +U 7 +L 8 +U 9 +L 2 +D 7 +R 4 +D 10 +R 1 +L 5 +U 11 +L 2 +R 9 +L 6 +U 10 +D 1 +L 8 +U 4 +R 3 +U 1 +R 6 +D 6 +L 1 +R 9 +L 5 +R 8 +U 6 +D 2 +U 10 +D 2 +L 4 +U 7 +D 10 +L 7 +D 8 +L 8 +D 5 +L 8 +U 10 +D 7 +U 1 +L 9 +R 2 +U 6 +L 5 +R 2 +D 5 +L 3 +D 6 +L 2 +D 6 +L 2 +R 9 +D 7 +R 1 +L 7 +R 9 +D 11 +R 8 +U 1 +L 7 +R 3 +L 2 +U 4 +R 1 +D 10 +L 3 +R 9 +U 10 +R 1 +D 7 +R 6 +D 11 +U 2 +L 9 +R 10 +L 4 +R 6 +U 5 +L 1 +U 10 +D 6 +U 2 +L 11 +U 4 +R 3 +D 9 +U 1 +D 9 +L 9 +D 9 +U 5 +D 4 +U 2 +D 3 +L 8 +R 5 +D 7 +R 8 +D 4 +L 2 +U 4 +D 1 +L 9 +D 3 +R 7 +U 4 +L 2 +R 8 +L 2 +U 10 +D 9 +R 7 +U 8 +D 4 +U 3 +D 10 +L 3 +R 4 +L 5 +R 9 +L 8 +R 10 +U 5 +D 10 +R 3 +U 8 +R 2 +U 4 +D 1 +R 9 +L 2 +U 6 +L 1 +R 6 +D 9 +L 8 +U 8 +D 6 +L 7 +U 6 +D 1 +R 3 +D 6 +R 2 +D 7 +R 2 +D 11 +L 7 +U 9 +R 8 +L 10 +U 1 +R 11 +L 5 +D 1 +R 4 +D 9 +L 12 +U 2 +R 10 +D 2 +L 8 +R 2 +L 4 +R 1 +U 5 +R 8 +U 3 +D 12 +U 12 +L 11 +R 6 +L 1 +R 3 +L 9 +D 6 +L 10 +D 6 +U 4 +L 9 +U 5 +D 9 +R 9 +D 12 +R 4 +D 9 +L 4 +R 2 +L 9 +R 4 +D 3 +U 10 +L 8 +U 11 +D 12 +L 4 +D 2 +U 11 +L 9 +R 3 +U 6 +D 3 +L 12 +U 9 +D 2 +L 6 +R 3 +U 2 +D 3 +R 5 +L 10 +U 5 +D 2 +L 12 +R 8 +U 9 +R 4 +D 8 +R 3 +D 9 +L 11 +D 8 +U 10 +L 12 +R 4 +L 8 +R 7 +U 7 +L 9 +R 1 +D 5 +R 11 +U 2 +D 8 +L 11 +U 5 +R 2 +U 1 +L 5 +U 10 +D 2 +L 3 +U 5 +L 11 +U 3 +D 3 +U 11 +L 13 +D 7 +U 4 +L 12 +U 10 +L 13 +R 4 +L 12 +U 12 +D 4 +U 6 +D 5 +R 5 +U 13 +R 7 +D 2 +U 9 +L 7 +R 7 +D 2 +U 12 +D 5 +L 11 +D 13 +L 10 +D 10 +U 7 +D 13 +U 7 +R 9 +L 7 +R 1 +L 6 +R 9 +D 8 +U 7 +L 12 +D 9 +U 4 +D 13 +R 2 +L 8 +R 10 +D 8 +L 2 +D 5 +R 8 +D 2 +R 8 +D 4 +L 9 +R 4 +U 4 +L 13 +D 2 +L 3 +R 6 +U 5 +L 9 +U 9 +R 10 +L 11 +U 11 +D 13 +U 4 +L 2 +D 13 +R 9 +L 13 +D 9 +U 9 +D 5 +U 11 +L 8 +R 7 +U 11 +D 3 +L 5 +R 12 +D 2 +R 5 +L 10 +U 10 +D 10 +R 8 +L 2 +R 3 +U 9 +D 7 +U 14 +L 6 +D 11 +R 12 +L 13 +U 2 +L 11 +R 13 +D 13 +L 3 +R 3 +L 10 +R 11 +D 12 +R 8 +U 14 +D 4 +U 4 +L 12 +R 8 +L 10 +R 4 +U 12 +D 5 +L 3 +U 1 +D 7 +R 12 +L 4 +R 9 +U 5 +R 11 +D 12 +R 14 +L 7 +U 2 +L 7 +U 1 +D 8 +R 3 +U 7 +R 2 +L 2 +R 7 +D 3 +U 3 +R 5 +L 11 +U 13 +D 14 +L 7 +D 5 +R 11 +L 1 +U 5 +D 11 +U 2 +D 8 +L 10 +D 8 +R 5 +L 2 +U 11 +L 4 +R 7 +D 2 +L 4 +R 5 +L 6 +U 12 +L 9 +D 4 +R 8 +U 4 +L 2 +R 12 +D 11 +R 12 +U 10 +R 12 +U 9 +L 1 +U 4 +L 9 +U 13 +R 10 +L 9 +U 11 +R 6 +D 9 +L 1 +D 14 +R 1 +D 12 +U 5 +D 3 +U 13 +R 2 +L 9 +R 8 +D 7 +L 13 +R 11 +D 12 +L 6 +R 11 +L 8 +U 9 +D 5 +U 10 +R 8 +L 12 +D 6 +R 8 +U 5 +D 13 +R 3 +U 12 +L 1 +U 13 +D 4 +L 10 +U 7 +L 10 +U 13 +D 4 +R 13 +D 5 +R 15 +D 8 +U 13 +L 6 +U 14 +L 4 +R 11 +U 13 +D 8 +U 11 +D 2 +R 13 +L 14 +R 6 +L 3 +R 13 +L 11 +R 14 +L 6 +U 14 +D 2 +R 1 +L 6 +U 5 +D 13 +L 7 +R 6 +U 11 +R 10 +D 5 +U 11 +D 2 +L 3 +U 4 +L 2 +U 5 +R 14 +U 9 +D 9 +U 12 +R 15 +L 11 +R 15 +L 9 +R 14 +U 7 +D 11 +R 14 +D 14 +L 4 +U 4 +D 10 +R 10 +D 9 +L 14 +R 14 +D 11 +L 7 +R 9 +L 14 +U 11 +D 12 +L 13 +D 11 +U 4 +D 10 +U 14 +D 8 +U 12 +R 15 +U 1 +D 1 +U 11 +D 10 +L 6 +D 11 +U 11 +R 10 +L 7 +U 5 +L 13 +R 8 +U 9 +L 8 +U 12 +D 2 +R 11 +U 6 +R 5 +L 2 +U 9 +L 3 +R 3 +D 6 +L 15 +U 15 +L 10 +D 4 +U 13 +R 4 +U 7 +R 14 +U 13 +L 8 +R 14 +U 5 +L 7 +R 5 +D 4 +L 4 +U 12 +L 10 +D 9 +R 10 +U 9 +L 5 +D 16 +R 10 +D 7 +U 4 +R 14 +D 13 +R 10 +L 15 +D 16 +R 15 +L 4 +D 2 +L 6 +R 16 +U 5 +R 9 +U 16 +R 4 +U 11 +D 5 +U 2 +D 3 +L 11 +D 4 +L 4 +U 1 +L 7 +U 12 +R 15 +U 16 +R 12 +D 8 +R 3 +U 16 +L 4 +R 4 +D 12 +L 5 +R 6 +D 16 +L 13 +D 3 +L 13 +R 4 +L 6 +D 12 +U 12 +L 9 +D 2 +U 16 +D 10 +L 1 +U 3 +D 1 +L 8 +D 3 +L 7 +R 7 +L 3 +D 11 +U 13 +R 13 +U 12 +L 16 +D 1 +R 14 +L 11 +R 3 +D 13 +U 10 +R 14 +U 2 +L 1 +D 1 +U 9 +D 5 +U 9 +L 7 +U 7 +L 6 +D 16 +U 16 +L 7 +U 11 +D 16 +U 7 +D 15 +R 7 +L 15 +D 4 +R 14 +D 10 +U 16 +L 10 +U 10 +D 16 +L 12 +U 10 +R 6 +L 1 +U 7 +D 3 +L 1 +R 6 +D 1 +R 12 +U 1 +D 3 +U 10 +R 17 +L 2 +R 13 +L 4 +D 3 +U 9 +R 8 +U 3 +D 4 +L 17 +R 4 +L 9 +U 5 +D 16 +R 9 +U 17 +D 17 +U 5 +L 7 +U 9 +D 10 +R 14 +D 2 +U 2 +D 16 +L 2 +D 16 +U 17 +D 13 +U 4 +R 16 +D 12 +L 17 +R 10 +L 13 +R 17 +U 4 +D 17 +U 10 +R 12 +U 16 +D 6 +U 1 +L 1 +U 17 +R 6 +D 11 +L 3 +U 7 +L 12 +R 8 +U 16 +D 2 +U 12 +D 7 +U 9 +R 6 +U 7 +D 17 +U 6 +L 3 +U 7 +R 12 +L 16 +U 3 +R 12 +U 2 +D 3 +R 16 +L 4 +U 5 +L 8 +D 3 +R 9 +D 13 +R 2 +L 14 +R 2 +U 13 +R 14 +D 2 +U 16 +L 16 +D 11 +U 4 +L 3 +R 9 +U 12 +L 15 +U 8 +R 11 +L 16 +R 5 +U 6 +R 8 +U 16 +D 16 +L 3 +U 11 +R 9 +U 12 +D 18 +L 13 +D 3 +R 4 +L 10 +R 15 +U 13 +D 15 +U 12 +D 3 +L 1 +U 16 +L 3 +U 17 +L 10 +D 11 +R 16 +L 13 +R 18 +U 18 +R 7 +D 13 +R 15 +U 12 +R 1 +L 9 +U 16 +R 11 +L 11 +U 7 +R 14 +L 16 +U 3 +D 11 +U 17 +D 14 +U 14 +R 7 +U 4 +R 13 +U 4 +D 18 +U 14 +L 4 +R 5 +L 3 +R 14 +U 12 +D 17 +U 13 +D 8 +U 9 +L 1 +R 15 +U 3 +L 11 +R 5 +L 1 +D 14 +R 10 +U 16 +R 2 +U 17 +D 1 +L 5 +U 15 +R 4 +D 13 +R 5 +D 7 +L 3 +U 14 +R 7 +D 9 +L 9 +R 4 +U 6 +L 8 +U 3 +L 5 +D 4 +R 14 +L 13 +D 4 +U 13 +R 17 +L 14 +D 16 +R 1 +L 2 +D 8 +R 11 +L 10 +U 12 +R 4 +U 9 +L 4 +D 13 +L 10 +R 8 +L 1 +U 12 +L 16 +U 12 +D 9 +R 13 +L 2 +R 5 +L 1 +D 18 +U 6 +D 13 +U 17 +R 7 +U 5 +R 5 +L 12 +R 2 +U 4 +L 7 +U 11 +D 17 +L 7 +U 9 +D 1 +U 8 +L 15 +U 2 +D 9 +U 9 +D 10 +U 12 +R 19 +D 16 +L 10 +U 14 +L 18 +R 5 +U 6 +L 4 +U 18 +L 14 +R 2 +U 13 +D 18 +L 2 +U 6 +L 10 +D 9 +L 3 +D 1 +R 6 +U 7 +D 12 +U 1 +R 15 +U 7 +L 8 +R 8 +L 16 +U 8 +R 8 +U 11 +R 19 +U 2 +L 6 +R 1 +D 16 +U 3 +L 7 +D 10 +R 14 +D 11 +R 8 +U 14 +L 6 +D 14 +R 7 +U 18 +D 19 +R 4 +U 10 +R 14 +U 3 +L 12 +D 7 +U 18 +D 10 +L 8 +D 9 +L 6 +U 12 +R 1 +L 16 +R 2 +U 15 +R 14 +U 7 +L 6 +R 10 +D 18 +R 14 +U 3 +R 4 +D 17 +L 10 +U 19 +R 4 +D 12 +U 2 +D 18 +R 4 diff --git a/inputs/2022/2022_09.solution b/inputs/2022/2022_09.solution new file mode 100644 index 0000000..ab11824 --- /dev/null +++ b/inputs/2022/2022_09.solution @@ -0,0 +1,2 @@ +Part 1: 6311 +Part 2: ??? diff --git a/rs/src/main.rs b/rs/src/main.rs index f9fc26b..bd9cfb9 100644 --- a/rs/src/main.rs +++ b/rs/src/main.rs @@ -48,6 +48,7 @@ days! { Y2022D06: "2022_06", Y2022D07: "2022_07", Y2022D08: "2022_08", + Y2022D09: "2022_09", } #[derive(Parser)] @@ -79,6 +80,7 @@ fn main() -> io::Result<()> { Day::Y2022D06 => y2022::d06::solve(input), Day::Y2022D07 => y2022::d07::solve(input), Day::Y2022D08 => y2022::d08::solve(input), + Day::Y2022D09 => y2022::d09::solve(input), } eprintln!() } diff --git a/rs/src/y2022.rs b/rs/src/y2022.rs index f2b2b4e..297c7bd 100644 --- a/rs/src/y2022.rs +++ b/rs/src/y2022.rs @@ -6,3 +6,4 @@ pub mod d05; pub mod d06; pub mod d07; pub mod d08; +pub mod d09; diff --git a/rs/src/y2022/d09.rs b/rs/src/y2022/d09.rs new file mode 100644 index 0000000..ae78faa --- /dev/null +++ b/rs/src/y2022/d09.rs @@ -0,0 +1,60 @@ +use std::collections::HashSet; + +#[derive(Clone, Copy, PartialEq, Eq)] +enum Direction { + Left, + Right, + Down, + Up, +} + +impl Direction { + fn from_str(s: &str) -> Option { + match s { + "L" => Some(Self::Left), + "R" => Some(Self::Right), + "D" => Some(Self::Down), + "U" => Some(Self::Up), + _ => None, + } + } + + fn move_head(self, head: (i32, i32)) -> (i32, i32) { + match self { + Self::Left => (head.0 - 1, head.1), + Self::Right => (head.0 + 1, head.1), + Self::Down => (head.0, head.1 - 1), + Self::Up => (head.0, head.1 + 1), + } + } + + fn move_tail(self, anchor: (i32, i32), tail: (i32, i32)) -> (i32, i32) { + match self { + Self::Left if tail.0 > anchor.0 + 1 => (anchor.0 + 1, anchor.1), + Self::Right if tail.0 < anchor.0 - 1 => (anchor.0 - 1, anchor.1), + Self::Down if tail.1 > anchor.1 + 1 => (anchor.0, anchor.1 + 1), + Self::Up if tail.1 < anchor.1 - 1 => (anchor.0, anchor.1 - 1), + _ => tail, + } + } +} + +pub fn solve(input: String) { + // +x points right, +y points up + let mut head = (0, 0); + let mut tail = (0, 0); + let mut tail_trail = HashSet::new(); + + for line in input.lines() { + let (dir, amount) = line.split_once(' ').unwrap(); + let dir = Direction::from_str(dir).unwrap(); + let amount = amount.parse::().unwrap(); + for _ in 0..amount { + head = dir.move_head(head); + tail = dir.move_tail(head, tail); + tail_trail.insert(tail); + } + } + + println!("Part 1: {}", tail_trail.len()); +} diff --git a/sample_inputs/2022/2022_09.input b/sample_inputs/2022/2022_09.input new file mode 100644 index 0000000..9874df2 --- /dev/null +++ b/sample_inputs/2022/2022_09.input @@ -0,0 +1,8 @@ +R 4 +U 4 +L 3 +D 1 +R 4 +D 1 +L 5 +R 2 diff --git a/sample_inputs/2022/2022_09.solution b/sample_inputs/2022/2022_09.solution new file mode 100644 index 0000000..e16442d --- /dev/null +++ b/sample_inputs/2022/2022_09.solution @@ -0,0 +1,2 @@ +Part 1: 13 +Part 2: ???