From d052d031c4a5633b7fc334db35303984798e4391 Mon Sep 17 00:00:00 2001 From: Joel Goncalves Date: Sat, 10 Dec 2022 18:55:17 -0500 Subject: [PATCH] Day 9 solution --- puzzle_inputs/09 | 2000 +++++++++++++++++++++++++++++++++++++++++ puzzle_inputs/09_test | 8 + src/Day09.kt | 125 +++ 3 files changed, 2133 insertions(+) create mode 100644 puzzle_inputs/09 create mode 100644 puzzle_inputs/09_test create mode 100644 src/Day09.kt diff --git a/puzzle_inputs/09 b/puzzle_inputs/09 new file mode 100644 index 0000000..b87df75 --- /dev/null +++ b/puzzle_inputs/09 @@ -0,0 +1,2000 @@ +U 1 +D 2 +U 1 +L 1 +R 1 +L 1 +D 1 +L 2 +U 2 +L 2 +D 2 +L 2 +D 2 +L 1 +R 1 +D 1 +U 1 +D 1 +R 1 +U 2 +D 2 +R 2 +L 2 +R 2 +D 2 +L 2 +D 2 +R 1 +L 2 +D 2 +R 2 +D 1 +R 1 +L 1 +D 1 +U 1 +L 2 +D 2 +R 1 +L 2 +R 1 +U 1 +R 1 +L 1 +R 2 +D 1 +U 1 +D 1 +R 1 +U 2 +R 2 +D 1 +R 2 +D 1 +U 1 +D 1 +R 2 +U 2 +D 1 +U 2 +D 1 +L 1 +D 1 +U 2 +R 1 +L 1 +R 1 +D 2 +U 1 +D 2 +L 1 +R 2 +U 2 +R 1 +D 1 +R 1 +U 1 +R 1 +U 2 +R 2 +L 1 +U 1 +D 2 +U 1 +D 2 +L 2 +D 1 +U 2 +L 1 +U 1 +D 1 +U 1 +L 1 +D 2 +L 2 +R 1 +D 1 +L 2 +D 2 +R 2 +L 1 +D 1 +L 2 +U 2 +L 1 +R 2 +U 1 +D 1 +L 1 +U 2 +L 1 +D 1 +U 3 +D 3 +L 3 +U 2 +R 1 +U 2 +R 1 +U 2 +L 2 +U 3 +R 2 +L 1 +U 1 +D 3 +R 3 +U 1 +D 3 +L 2 +R 1 +L 1 +U 3 +R 3 +D 3 +U 2 +L 3 +D 3 +U 1 +L 1 +U 2 +D 1 +L 3 +D 3 +R 3 +U 1 +L 2 +R 1 +L 3 +U 2 +D 2 +R 3 +D 3 +L 1 +R 2 +D 1 +L 3 +U 1 +D 3 +U 3 +D 1 +U 1 +R 1 +U 2 +L 1 +D 3 +R 3 +D 1 +U 2 +D 2 +L 3 +D 3 +U 1 +D 2 +R 2 +L 1 +D 3 +L 1 +U 2 +L 2 +D 1 +L 3 +R 1 +L 1 +R 3 +U 1 +L 3 +R 2 +L 1 +D 1 +R 3 +D 1 +R 1 +D 1 +L 3 +D 1 +U 2 +R 3 +D 1 +U 1 +R 2 +U 1 +R 3 +L 3 +U 3 +D 2 +R 3 +L 1 +D 2 +R 2 +L 2 +U 1 +L 3 +R 2 +L 2 +U 3 +L 1 +D 1 +U 2 +R 1 +U 3 +R 2 +D 3 +L 3 +U 4 +D 4 +R 3 +L 3 +R 3 +U 2 +R 3 +L 4 +R 2 +U 1 +R 3 +U 3 +R 4 +U 2 +D 3 +L 3 +D 4 +U 3 +D 4 +U 3 +D 2 +R 2 +D 1 +R 4 +U 2 +D 4 +L 3 +D 4 +U 1 +L 2 +R 1 +L 3 +R 1 +L 3 +U 3 +D 3 +U 4 +L 2 +D 4 +L 4 +U 4 +L 3 +D 1 +R 2 +U 4 +R 2 +L 1 +R 3 +D 2 +L 3 +U 2 +R 1 +U 1 +D 3 +L 4 +D 3 +L 3 +D 3 +U 4 +D 3 +R 4 +L 1 +U 2 +R 4 +D 2 +U 3 +L 4 +R 2 +L 1 +D 4 +U 3 +R 2 +L 2 +R 4 +L 4 +D 1 +L 3 +D 4 +L 3 +U 2 +R 2 +D 4 +R 2 +U 2 +D 1 +U 4 +D 2 +R 4 +D 1 +U 1 +D 1 +R 1 +L 1 +R 2 +U 4 +R 4 +D 3 +R 4 +L 1 +D 2 +U 1 +L 3 +U 4 +R 3 +D 4 +L 1 +D 1 +L 4 +D 3 +R 1 +D 4 +L 3 +R 2 +D 3 +L 2 +D 4 +U 2 +L 2 +D 4 +L 2 +U 5 +R 3 +D 2 +U 5 +R 3 +L 3 +R 1 +D 4 +R 1 +D 3 +U 3 +R 2 +D 5 +U 4 +L 1 +D 1 +R 5 +D 5 +U 1 +L 3 +D 2 +L 4 +U 3 +L 2 +U 1 +R 1 +U 2 +D 5 +L 1 +R 4 +L 1 +U 3 +L 5 +U 2 +L 1 +R 1 +L 1 +R 1 +U 5 +D 5 +R 2 +D 4 +L 1 +R 4 +L 3 +U 5 +L 4 +U 3 +R 5 +D 1 +L 3 +R 1 +U 5 +R 2 +L 4 +U 1 +L 2 +U 5 +L 3 +U 1 +R 3 +D 4 +U 1 +R 5 +L 5 +R 1 +D 1 +R 5 +U 1 +R 2 +L 5 +R 2 +L 2 +R 1 +U 5 +D 2 +L 2 +R 4 +L 3 +U 5 +R 2 +L 3 +R 2 +D 1 +R 5 +L 4 +D 2 +U 1 +R 4 +D 3 +R 4 +D 2 +R 2 +D 5 +L 3 +D 1 +U 2 +L 1 +U 5 +D 4 +U 2 +R 5 +U 3 +D 4 +R 2 +U 2 +R 4 +D 6 +L 6 +D 1 +U 2 +D 4 +R 3 +D 6 +R 4 +L 6 +R 4 +D 2 +U 4 +D 3 +U 2 +L 4 +R 6 +U 5 +R 3 +U 1 +L 3 +D 2 +R 5 +D 4 +U 6 +D 4 +R 2 +U 6 +D 6 +U 5 +R 1 +U 4 +R 5 +L 6 +U 2 +D 2 +R 5 +U 3 +L 3 +U 2 +D 4 +L 5 +R 2 +D 5 +L 3 +U 4 +D 3 +U 5 +L 2 +U 3 +L 2 +U 3 +L 3 +U 1 +L 2 +U 1 +L 6 +D 1 +R 4 +D 4 +L 4 +U 4 +D 4 +R 2 +D 1 +U 1 +R 4 +D 2 +R 4 +L 6 +R 5 +U 2 +R 2 +U 1 +R 6 +L 1 +U 6 +R 5 +D 4 +L 2 +U 4 +R 3 +D 5 +L 5 +D 2 +R 6 +U 5 +R 3 +D 1 +L 2 +D 1 +R 4 +L 5 +U 6 +R 4 +D 3 +U 3 +R 1 +D 3 +U 2 +L 1 +U 1 +R 5 +L 4 +D 1 +R 2 +U 1 +L 3 +R 5 +D 5 +U 5 +L 1 +U 2 +R 7 +D 5 +L 7 +D 2 +R 7 +L 2 +D 6 +U 1 +L 5 +U 5 +D 2 +R 4 +U 3 +L 7 +R 5 +L 3 +D 6 +U 2 +D 5 +L 3 +R 4 +U 6 +D 5 +L 5 +U 2 +D 5 +R 4 +U 2 +L 2 +D 5 +U 2 +R 5 +L 4 +R 5 +U 6 +D 3 +U 7 +L 6 +D 4 +U 2 +R 7 +L 5 +D 5 +R 6 +L 1 +D 2 +L 2 +R 2 +U 3 +R 7 +D 1 +U 3 +R 2 +U 3 +R 5 +U 3 +L 7 +D 6 +L 7 +D 5 +L 5 +R 5 +U 2 +L 4 +U 7 +L 2 +D 7 +U 5 +L 4 +R 4 +L 2 +U 5 +L 4 +D 5 +R 7 +U 2 +L 1 +D 6 +R 1 +U 6 +D 1 +L 7 +U 3 +D 2 +L 3 +U 4 +R 4 +L 5 +U 7 +L 1 +D 5 +L 7 +D 1 +R 6 +L 1 +R 5 +L 3 +U 5 +D 2 +U 6 +D 4 +U 1 +R 2 +D 8 +R 8 +D 1 +R 4 +D 6 +L 8 +R 5 +D 5 +R 6 +D 5 +U 1 +L 1 +D 2 +L 4 +R 1 +D 1 +R 7 +L 8 +U 1 +D 8 +U 6 +L 7 +R 4 +U 1 +L 2 +U 1 +L 7 +D 2 +R 8 +L 1 +U 8 +R 8 +D 6 +U 2 +L 8 +D 7 +U 4 +R 8 +L 7 +U 6 +D 6 +U 2 +L 4 +D 3 +L 2 +D 3 +R 7 +U 3 +L 3 +U 3 +D 8 +L 2 +D 3 +L 1 +R 2 +U 8 +L 4 +D 7 +L 8 +R 3 +L 7 +U 2 +R 8 +D 3 +R 7 +U 3 +L 8 +U 5 +D 5 +U 5 +D 8 +U 8 +D 2 +L 4 +U 3 +D 2 +R 6 +U 3 +R 2 +U 4 +R 2 +L 6 +U 7 +R 6 +L 5 +D 6 +L 8 +U 5 +R 3 +L 5 +U 7 +D 7 +L 1 +U 6 +R 7 +D 3 +R 2 +L 7 +R 6 +D 7 +U 4 +D 2 +L 2 +U 3 +R 1 +U 5 +R 6 +D 2 +R 8 +U 7 +L 7 +U 8 +L 4 +R 9 +U 7 +D 6 +L 6 +R 4 +D 9 +L 1 +D 5 +U 2 +L 3 +R 9 +D 2 +U 1 +R 4 +L 8 +R 1 +L 1 +U 4 +R 4 +U 4 +R 3 +D 2 +U 5 +R 8 +D 1 +U 5 +L 4 +D 5 +U 3 +L 1 +D 4 +L 3 +U 8 +R 3 +L 3 +R 9 +U 3 +D 1 +R 4 +U 2 +L 8 +R 7 +L 4 +R 4 +L 7 +U 6 +L 2 +U 9 +R 7 +D 6 +U 5 +L 9 +U 7 +L 5 +D 1 +U 8 +R 4 +D 1 +L 8 +D 8 +L 7 +R 1 +L 7 +R 3 +U 2 +R 5 +D 1 +U 9 +R 1 +L 5 +U 5 +R 6 +L 4 +D 3 +R 9 +D 7 +R 3 +D 2 +R 6 +U 2 +D 5 +L 7 +U 1 +D 8 +R 2 +D 3 +R 3 +L 6 +R 2 +L 7 +D 8 +R 6 +D 6 +R 9 +U 6 +R 9 +D 3 +R 8 +U 7 +L 5 +D 2 +R 5 +U 6 +R 7 +D 7 +U 6 +L 2 +U 6 +R 4 +D 2 +L 9 +U 2 +L 9 +U 9 +R 8 +D 1 +U 9 +R 7 +U 5 +L 3 +D 5 +U 9 +L 2 +R 1 +U 3 +D 4 +L 1 +R 10 +D 9 +U 3 +R 6 +L 1 +D 5 +U 1 +D 10 +U 6 +L 3 +U 7 +D 10 +L 2 +U 10 +D 5 +R 1 +L 1 +R 3 +L 7 +D 4 +L 7 +D 10 +R 8 +L 7 +U 2 +R 6 +U 3 +L 6 +D 4 +R 8 +D 3 +R 8 +D 10 +L 3 +D 5 +L 5 +R 10 +U 6 +L 10 +R 1 +L 7 +D 3 +U 2 +D 6 +R 3 +D 6 +L 4 +R 10 +U 8 +D 4 +L 8 +U 7 +D 3 +L 3 +D 2 +R 8 +U 9 +L 1 +U 8 +D 8 +R 4 +U 9 +D 3 +R 10 +U 3 +L 4 +R 5 +U 3 +R 7 +D 9 +R 4 +U 9 +D 5 +R 8 +L 9 +U 1 +L 8 +R 4 +D 1 +L 4 +D 6 +U 5 +L 4 +R 9 +U 2 +D 7 +R 1 +L 1 +R 7 +D 6 +L 10 +R 10 +D 4 +R 11 +L 8 +U 9 +L 6 +R 4 +U 3 +L 1 +D 7 +L 8 +D 6 +L 3 +R 5 +U 1 +D 9 +U 3 +D 4 +U 11 +D 2 +U 1 +L 4 +R 11 +L 9 +R 6 +U 6 +L 4 +U 11 +L 4 +R 5 +L 10 +R 6 +U 8 +R 8 +L 4 +D 11 +L 11 +R 2 +U 9 +R 6 +D 8 +U 6 +L 1 +R 11 +L 1 +R 1 +D 7 +L 2 +U 11 +D 7 +L 9 +R 7 +U 2 +R 5 +D 10 +R 4 +D 4 +U 2 +R 7 +U 9 +L 10 +U 11 +L 3 +R 10 +D 9 +L 6 +U 10 +L 7 +R 11 +U 5 +D 11 +R 8 +D 1 +U 7 +R 2 +U 8 +D 4 +R 6 +D 4 +U 6 +R 6 +L 7 +U 5 +R 4 +U 5 +R 3 +L 2 +R 5 +D 8 +L 11 +U 2 +R 8 +L 4 +U 11 +R 2 +D 8 +L 3 +D 2 +R 10 +L 2 +R 2 +L 8 +D 8 +L 8 +R 1 +L 1 +U 9 +D 7 +U 6 +R 2 +L 9 +U 11 +D 3 +R 10 +U 5 +R 5 +L 4 +R 10 +L 6 +U 10 +R 2 +U 2 +L 7 +R 10 +L 2 +U 3 +L 9 +U 6 +L 12 +R 8 +U 3 +R 10 +U 12 +L 6 +U 11 +R 2 +D 5 +R 12 +D 10 +R 9 +L 5 +R 9 +L 6 +R 3 +U 4 +R 6 +U 8 +L 3 +U 10 +R 5 +L 3 +U 6 +R 4 +U 10 +R 8 +D 8 +R 3 +L 5 +U 4 +D 9 +U 12 +D 10 +L 10 +R 3 +D 4 +R 2 +D 6 +L 2 +R 3 +L 10 +U 3 +D 6 +L 8 +R 9 +D 4 +L 3 +U 10 +L 11 +R 5 +U 11 +R 11 +D 11 +L 6 +R 5 +D 6 +R 4 +U 9 +R 11 +D 2 +U 9 +L 1 +R 12 +D 8 +R 11 +D 4 +R 3 +U 10 +D 5 +U 9 +R 10 +L 4 +R 9 +L 10 +D 7 +R 8 +L 8 +R 11 +L 3 +U 4 +D 10 +R 2 +L 2 +U 1 +L 12 +U 9 +R 2 +D 7 +R 2 +L 6 +D 8 +L 3 +U 7 +R 6 +D 6 +L 6 +R 5 +L 12 +D 13 +U 9 +L 1 +R 11 +D 4 +U 10 +D 7 +L 8 +U 13 +L 12 +R 3 +L 2 +D 1 +U 4 +D 9 +R 9 +L 12 +D 13 +U 9 +R 8 +L 3 +U 2 +L 1 +U 12 +D 12 +U 5 +L 5 +U 10 +R 3 +D 8 +R 10 +L 9 +R 1 +U 4 +D 12 +R 11 +U 8 +L 9 +U 10 +R 8 +U 13 +D 13 +U 10 +D 5 +R 6 +U 11 +R 4 +U 6 +L 2 +U 13 +L 2 +U 8 +R 13 +U 4 +D 5 +U 3 +R 8 +U 8 +L 6 +U 11 +R 10 +U 8 +D 8 +L 10 +D 9 +U 13 +R 12 +L 10 +R 3 +U 3 +D 10 +R 3 +D 3 +L 6 +R 3 +U 5 +L 3 +R 10 +D 6 +L 10 +D 10 +R 13 +D 1 +R 9 +L 7 +D 12 +U 6 +R 4 +L 1 +U 7 +L 8 +U 7 +L 11 +U 11 +D 1 +U 5 +R 2 +D 1 +L 9 +U 13 +R 10 +L 3 +R 9 +D 10 +R 10 +U 2 +L 4 +R 5 +L 12 +R 7 +D 7 +R 9 +D 6 +L 10 +D 12 +R 10 +D 9 +L 13 +R 13 +L 3 +U 6 +D 8 +L 7 +R 4 +U 7 +L 10 +D 8 +R 12 +L 3 +R 6 +L 14 +R 7 +L 4 +U 8 +D 10 +L 9 +D 10 +R 6 +L 5 +R 8 +U 13 +L 2 +R 13 +L 10 +D 12 +U 4 +R 1 +D 1 +R 10 +L 9 +R 12 +U 10 +D 4 +L 3 +R 7 +D 13 +L 11 +D 3 +U 11 +D 12 +U 4 +R 11 +D 9 +R 3 +D 14 +U 3 +L 10 +D 5 +L 14 +R 13 +L 12 +D 14 +R 2 +U 13 +D 10 +L 13 +U 11 +R 9 +D 4 +L 13 +U 13 +R 5 +L 1 +R 14 +D 4 +U 8 +D 2 +R 2 +U 6 +D 10 +L 1 +U 9 +R 7 +D 2 +L 13 +R 8 +L 12 +R 12 +U 8 +L 14 +D 11 +R 6 +L 5 +R 10 +U 5 +D 12 +L 6 +U 13 +R 3 +D 8 +U 11 +L 7 +D 5 +R 12 +D 8 +R 13 +L 9 +U 4 +D 3 +L 3 +D 15 +L 14 +U 2 +L 10 +R 14 +U 1 +D 11 +L 2 +R 11 +L 12 +R 7 +L 4 +U 15 +D 15 +R 9 +L 9 +R 1 +D 11 +L 1 +U 3 +R 12 +D 7 +U 2 +D 6 +R 1 +D 13 +R 3 +U 10 +D 4 +L 6 +U 8 +L 8 +D 7 +L 6 +U 15 +D 7 +U 1 +D 1 +L 14 +D 3 +U 10 +L 2 +U 14 +D 2 +L 5 +R 3 +U 1 +D 13 +U 13 +D 9 +L 12 +R 5 +L 14 +U 3 +D 11 +R 9 +U 8 +D 5 +R 3 +L 13 +U 2 +L 10 +D 3 +U 2 +L 12 +D 13 +R 14 +U 10 +D 8 +L 8 +R 14 +L 6 +D 14 +L 8 +R 15 +D 10 +R 1 +L 2 +D 6 +L 9 +R 1 +L 4 +D 9 +U 8 +L 1 +R 9 +L 1 +D 5 +L 6 +U 9 +L 6 +R 3 +U 5 +R 12 +D 6 +R 8 +D 3 +U 13 +D 2 +U 2 +L 4 +U 11 +R 4 +L 13 +U 6 +L 12 +U 4 +D 6 +U 11 +D 5 +U 8 +L 10 +D 13 +L 5 +U 15 +L 4 +R 12 +D 1 +L 9 +U 8 +L 4 +U 8 +D 10 +U 12 +L 12 +D 5 +R 10 +D 3 +U 1 +L 6 +R 10 +L 5 +D 8 +U 8 +D 8 +R 6 +U 13 +D 8 +L 16 +R 11 +L 14 +D 15 +R 15 +L 8 +D 1 +U 6 +D 15 +R 9 +L 12 +D 13 +U 9 +D 15 +L 6 +R 9 +U 8 +D 15 +U 7 +L 4 +R 9 +D 2 +R 5 +U 6 +D 14 +L 11 +D 9 +R 2 +U 12 +L 2 +R 15 +U 2 +L 15 +R 9 +U 6 +L 2 +D 4 +U 1 +L 13 +D 5 +R 14 +D 1 +R 13 +U 9 +R 5 +L 4 +U 9 +D 6 +U 7 +R 16 +D 11 +U 8 +R 13 +D 7 +L 12 +D 8 +U 15 +D 11 +U 14 +L 14 +U 10 +L 8 +R 16 +L 3 +U 13 +D 5 +L 2 +R 8 +L 10 +D 6 +R 15 +D 11 +U 3 +D 12 +R 12 +L 15 +U 13 +L 14 +D 2 +R 6 +L 5 +R 2 +U 2 +D 11 +U 14 +L 9 +R 14 +D 17 +R 10 +D 1 +U 11 +L 3 +U 1 +D 17 +L 10 +R 6 +L 14 +U 4 +D 2 +U 17 +L 2 +R 10 +D 14 +L 5 +U 7 +D 7 +R 13 +U 9 +D 9 +U 7 +D 17 +U 15 +D 1 +L 4 +D 11 +L 16 +U 8 +L 6 +R 5 +L 9 +D 14 +L 13 +D 11 +R 3 +L 15 +D 9 +L 10 +D 11 +L 11 +U 2 +L 17 +D 10 +R 13 +L 11 +U 16 +L 8 +U 5 +D 7 +U 11 +D 1 +L 17 +U 12 +L 4 +R 12 +U 4 +R 10 +L 4 +U 11 +D 8 +L 5 +D 6 +U 4 +D 16 +U 6 +D 12 +L 3 +U 3 +L 16 +R 2 +U 14 +R 1 +L 14 +U 11 +L 7 +D 11 +R 2 +D 2 +L 6 +U 10 +L 10 +D 15 +R 12 +D 16 +L 3 +U 15 +R 15 +D 17 +U 17 +L 13 +R 5 +D 12 +L 9 +R 10 +D 4 +L 2 +D 14 +U 8 +R 6 +U 5 +D 1 +L 11 +R 12 +L 17 +U 2 +L 17 +D 2 +R 17 +L 17 +U 3 +D 14 +U 8 +L 14 +D 12 +R 17 +L 18 +D 3 +U 10 +L 7 +U 10 +R 5 +L 15 +D 10 +L 3 +R 12 +D 10 +U 6 +L 17 +D 9 +U 18 +R 7 +U 1 +D 1 +L 9 +U 2 +L 5 +U 9 +L 8 +U 17 +D 17 +L 17 +D 15 +R 13 +U 15 +D 8 +R 13 +D 17 +L 18 +R 5 +D 7 +R 6 +D 1 +R 3 +L 10 +U 10 +D 12 +L 8 +R 11 +U 6 +R 5 +L 9 +R 6 +U 15 +D 4 +R 8 +U 1 +R 18 +L 18 +U 10 +R 17 +D 10 +R 10 +U 16 +R 16 +U 5 +R 7 +D 15 +U 15 +R 2 +U 17 +L 14 +R 1 +U 2 +L 10 +R 17 +L 14 +U 13 +D 1 +L 16 +D 4 +U 9 +L 17 +U 9 +D 9 +L 18 +D 9 +U 5 +L 18 +U 6 +L 5 +U 10 +L 18 +D 13 +R 8 +L 17 +U 9 +L 14 +D 12 +U 2 +D 5 +U 2 +D 17 +L 18 +R 8 +L 7 +R 1 +D 13 +R 11 +D 10 +R 18 +D 2 +U 17 +D 17 +L 4 +R 16 +D 16 +L 2 +D 5 +R 4 +U 9 +R 6 +D 7 +L 13 +U 19 +R 7 +U 17 +L 9 +U 6 +D 1 +L 19 +U 7 +R 6 +L 11 +R 12 +D 6 +L 17 +R 18 +D 17 +L 2 +D 8 +U 15 +D 13 +L 10 +D 10 +L 17 +D 4 +L 12 +U 11 +L 3 +D 6 +U 18 +R 18 +U 16 +L 5 +D 9 +R 17 +L 17 +D 16 +R 12 +D 18 +U 14 +R 1 +U 12 +R 4 +L 6 +U 14 +R 18 +D 6 +U 2 +D 13 +U 15 +L 14 +R 3 +D 7 +L 6 +D 15 +U 17 +L 12 +D 2 +L 12 +R 10 +L 16 +D 15 +L 18 +U 9 +L 7 +U 13 +R 11 +U 9 +L 4 +U 12 +R 14 +D 11 +R 8 +U 4 +L 17 +R 14 +D 15 +R 1 +U 5 +R 3 +L 4 +R 9 +U 1 +D 10 +R 3 +U 16 +D 6 +L 1 +U 15 +D 9 +U 10 +L 11 +U 7 +L 5 +D 19 +L 8 +U 10 +L 19 diff --git a/puzzle_inputs/09_test b/puzzle_inputs/09_test new file mode 100644 index 0000000..c1eba0a --- /dev/null +++ b/puzzle_inputs/09_test @@ -0,0 +1,8 @@ +R 5 +U 8 +L 8 +D 3 +R 17 +D 10 +L 25 +U 20 \ No newline at end of file diff --git a/src/Day09.kt b/src/Day09.kt new file mode 100644 index 0000000..3e13c32 --- /dev/null +++ b/src/Day09.kt @@ -0,0 +1,125 @@ +import java.lang.Integer.max +import kotlin.math.abs +import kotlin.math.min + +enum class StepDirection { U, D, L, R } + +fun main() { + val input = readInput("09") +// val input = readInput("09_test") + + data class Move(val direction: StepDirection, val steps: Int) + + fun retrieveMoves(input: List): List { + return input.map { + val split = it.split(" ") + Move(StepDirection.valueOf(split[0]), split[1].toInt()) + } + } + + fun limit(value: Int) : Int { + return if (value < -1) { + -1 + } else if (value > 1) { + 1 + } else { + value + } + } + + fun nextMove(head: Pair, tail: Pair): Pair { + var xDiff = head.first - tail.first + var yDiff = head.second - tail.second + + return if (abs(xDiff) == 1 && abs(yDiff) == 1) { + Pair(0, 0) + } else if (xDiff == 0 && abs(yDiff) == 1) { + Pair(0, 0) + } else if (yDiff == 0 && abs(xDiff) == 1) { + Pair(0, 0) + } else { + xDiff = limit(xDiff) + yDiff = limit(yDiff) + + Pair(xDiff, yDiff) + } + } + + fun updatePositions(list: MutableList>, direction: StepDirection) { + for (i in 1 until list.size) { + val prev = list[i - 1] + val curr = list[i] + val diff = nextMove(prev, curr) + + val pos = when (direction) { + StepDirection.U -> { + Pair(curr.first + diff.first, curr.second + min(diff.second, 1)) + } + StepDirection.D -> { + Pair(curr.first + diff.first, curr.second + max(diff.second, -1)) + } + StepDirection.L -> { + Pair(curr.first + max(diff.first, -1), curr.second + diff.second) + } + StepDirection.R -> { + Pair(curr.first + min(diff.first, 1), curr.second + diff.second) + } + } + + list[i] = pos + } + } + + fun moveKnots(input: List, knotCount: Int = 2) : Int { + val moves = retrieveMoves(input) + val tailPositions: HashSet> = hashSetOf() + val knotsList = MutableList(knotCount) { + Pair(0, 0) + } + + // starting position + tailPositions.add(Pair(0, 0)) + + moves.forEach { move -> + for (i in 1..move.steps) { + val curr = knotsList[0] + val head = when (move.direction) { + StepDirection.U -> { + Pair(curr.first, curr.second + 1) + } + + StepDirection.D -> { + Pair(curr.first, curr.second - 1) + } + + StepDirection.L -> { + Pair(curr.first - 1, curr.second) + } + + StepDirection.R -> { + Pair(curr.first + 1, curr.second) + } + } + + knotsList[0] = head + updatePositions(knotsList, move.direction) + tailPositions.add(knotsList[knotsList.size - 1]) + + } + } + + return tailPositions.size + } + + + fun part1(input: List): Int { + return moveKnots(input, 2) + } + + fun part2(input: List): Int { + return moveKnots(input, 10) + } + + println(part1(input)) + println(part2(input)) +} \ No newline at end of file