From 0bba5e01a3a32a0dc890fc71965742b0ee9fbb65 Mon Sep 17 00:00:00 2001 From: benkyd Date: Fri, 9 Dec 2022 12:30:53 +0000 Subject: [PATCH] day 9, proud of that --- 2022/9.input | 2000 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2022/9.js | 81 ++ 2 files changed, 2081 insertions(+) create mode 100644 2022/9.input create mode 100644 2022/9.js diff --git a/2022/9.input b/2022/9.input new file mode 100644 index 0000000..9968bad --- /dev/null +++ b/2022/9.input @@ -0,0 +1,2000 @@ +L 1 +D 1 +U 2 +R 1 +U 1 +L 2 +D 1 +R 2 +D 2 +R 2 +L 2 +D 2 +L 2 +R 2 +D 1 +R 1 +L 2 +D 1 +U 2 +R 2 +D 1 +L 2 +U 2 +R 2 +D 1 +U 2 +R 2 +U 1 +D 2 +U 1 +R 2 +L 1 +U 1 +L 2 +R 1 +L 1 +R 1 +L 2 +R 1 +D 1 +R 1 +L 1 +D 1 +U 2 +L 2 +D 2 +U 1 +L 1 +U 1 +L 1 +R 1 +D 1 +L 1 +U 2 +D 2 +L 2 +D 1 +R 1 +L 2 +D 1 +R 2 +D 1 +L 2 +U 1 +R 1 +U 2 +D 1 +U 1 +D 2 +R 1 +L 2 +D 1 +U 1 +D 1 +U 1 +L 1 +R 1 +D 1 +R 2 +U 1 +L 1 +U 1 +R 1 +L 2 +R 1 +D 2 +U 1 +R 1 +L 2 +R 1 +L 2 +D 2 +R 2 +U 1 +L 2 +R 2 +U 2 +L 1 +R 2 +U 1 +R 2 +L 1 +U 2 +D 2 +L 2 +U 1 +L 1 +U 2 +L 2 +R 2 +D 1 +R 2 +D 1 +R 2 +D 2 +R 1 +U 1 +R 2 +D 2 +U 2 +L 2 +U 3 +D 2 +L 1 +D 1 +L 3 +U 3 +R 1 +D 2 +R 1 +U 1 +R 1 +L 2 +D 1 +R 1 +D 2 +R 1 +L 2 +D 2 +R 2 +L 1 +R 2 +L 1 +D 1 +U 3 +L 3 +R 1 +D 3 +L 1 +U 3 +R 1 +U 3 +L 1 +R 3 +D 3 +L 3 +U 1 +R 2 +U 1 +R 1 +L 1 +R 2 +U 1 +D 2 +R 3 +D 1 +L 1 +U 2 +R 2 +L 1 +D 3 +R 3 +U 1 +D 3 +L 1 +D 1 +L 2 +U 3 +D 1 +R 1 +U 1 +R 2 +D 3 +U 3 +D 2 +L 1 +R 1 +D 1 +R 1 +D 2 +L 2 +U 2 +R 2 +D 3 +R 1 +L 2 +U 1 +R 1 +U 2 +R 3 +U 2 +L 1 +U 3 +L 2 +D 3 +U 1 +L 1 +D 3 +R 1 +D 3 +U 2 +D 3 +L 1 +D 1 +R 3 +L 1 +D 3 +R 1 +L 1 +D 1 +L 2 +U 3 +L 4 +R 3 +L 2 +R 4 +D 4 +U 4 +L 4 +D 4 +U 3 +R 4 +D 1 +R 2 +D 2 +R 2 +U 2 +R 4 +D 1 +U 1 +R 3 +U 3 +D 4 +R 1 +U 1 +R 3 +L 4 +D 3 +R 4 +U 1 +R 4 +L 3 +U 4 +D 2 +U 2 +L 2 +U 2 +L 4 +D 1 +R 4 +D 3 +L 3 +R 2 +U 4 +D 3 +L 3 +U 1 +R 1 +D 3 +L 3 +U 1 +R 3 +L 2 +R 3 +D 4 +L 4 +R 1 +D 1 +U 3 +D 3 +U 1 +L 2 +D 2 +L 2 +D 2 +U 2 +L 1 +U 4 +R 2 +L 3 +R 2 +D 3 +U 2 +D 1 +L 2 +D 1 +L 2 +D 1 +L 3 +D 1 +R 4 +U 1 +L 4 +U 4 +R 3 +L 3 +U 3 +L 4 +R 3 +U 3 +L 4 +U 4 +L 2 +R 4 +L 4 +D 4 +R 1 +L 4 +U 1 +R 1 +L 1 +R 3 +D 1 +U 2 +L 1 +D 1 +U 2 +L 1 +U 2 +D 2 +U 3 +D 2 +L 3 +R 3 +U 2 +D 1 +R 4 +L 2 +D 2 +R 5 +L 2 +U 4 +R 4 +D 5 +R 4 +D 1 +U 1 +D 4 +L 5 +U 2 +D 3 +R 5 +L 4 +R 1 +D 4 +U 3 +R 5 +U 1 +D 2 +L 3 +U 5 +R 3 +U 1 +R 2 +D 4 +L 4 +U 4 +R 3 +L 1 +R 2 +U 2 +D 4 +L 3 +D 1 +R 4 +L 2 +R 5 +D 2 +U 2 +L 2 +R 3 +L 1 +R 5 +L 2 +R 5 +D 4 +U 5 +L 2 +U 2 +L 1 +U 1 +D 3 +U 5 +R 1 +L 2 +U 4 +R 4 +D 5 +U 1 +R 5 +L 1 +D 3 +L 4 +D 3 +R 2 +D 4 +L 2 +R 1 +D 1 +L 4 +U 4 +D 5 +L 5 +R 5 +L 5 +U 3 +R 1 +U 5 +L 3 +R 3 +D 5 +R 3 +U 4 +D 1 +U 3 +L 1 +R 3 +U 3 +R 2 +D 5 +L 5 +U 4 +R 3 +D 3 +L 1 +D 1 +U 3 +L 3 +R 5 +U 3 +L 2 +D 5 +U 5 +R 5 +U 3 +R 5 +L 6 +D 5 +R 2 +U 4 +D 3 +L 4 +D 4 +R 4 +D 1 +U 1 +R 1 +D 3 +U 1 +R 4 +D 6 +L 3 +U 6 +D 4 +R 6 +D 4 +L 1 +D 1 +R 2 +U 6 +D 1 +R 6 +D 4 +L 2 +D 6 +R 1 +L 3 +R 3 +L 5 +D 6 +R 6 +L 2 +U 1 +R 3 +L 5 +U 6 +R 2 +U 2 +D 3 +L 1 +D 2 +L 5 +R 1 +L 4 +D 3 +R 6 +U 3 +R 3 +D 5 +L 5 +R 5 +D 1 +R 5 +U 1 +R 2 +L 3 +D 2 +R 4 +U 1 +D 1 +R 4 +U 5 +R 6 +L 3 +R 1 +D 4 +L 1 +D 4 +U 1 +R 1 +U 5 +R 2 +D 3 +R 5 +D 5 +R 4 +L 2 +D 4 +R 1 +D 6 +R 4 +U 1 +D 4 +U 5 +R 4 +D 1 +U 3 +R 1 +D 6 +R 5 +U 2 +R 3 +L 3 +D 4 +R 3 +L 2 +U 4 +R 2 +U 1 +L 3 +U 6 +L 5 +R 5 +D 5 +L 2 +U 6 +L 3 +R 5 +U 6 +L 1 +R 1 +D 7 +R 3 +L 4 +R 4 +L 6 +R 2 +U 3 +L 7 +D 4 +R 4 +L 6 +U 4 +L 2 +R 1 +D 2 +L 2 +D 2 +L 4 +R 1 +L 3 +R 5 +D 2 +U 2 +R 1 +D 7 +L 7 +D 7 +U 3 +R 7 +L 4 +U 6 +R 1 +U 5 +D 5 +R 2 +D 4 +R 2 +D 2 +R 6 +L 7 +R 3 +U 5 +R 6 +U 3 +D 2 +L 3 +D 6 +R 7 +U 4 +D 1 +R 3 +U 2 +R 3 +D 6 +L 6 +R 5 +L 6 +R 2 +L 7 +R 5 +L 5 +D 2 +L 1 +R 7 +U 2 +R 5 +U 5 +R 6 +D 4 +R 1 +L 2 +D 4 +L 2 +R 5 +U 4 +L 6 +D 5 +U 6 +L 2 +R 3 +L 3 +U 5 +D 4 +U 2 +D 6 +L 3 +D 1 +L 4 +R 7 +L 2 +U 5 +R 6 +D 1 +R 7 +D 5 +U 2 +L 6 +R 4 +U 2 +L 3 +D 7 +L 6 +R 3 +D 3 +R 7 +L 8 +U 5 +D 8 +R 4 +D 2 +R 3 +L 2 +D 4 +L 6 +U 7 +R 2 +D 3 +U 2 +R 8 +D 5 +U 8 +D 8 +L 6 +R 4 +D 1 +U 1 +D 3 +U 1 +L 5 +U 2 +R 4 +D 6 +R 2 +D 6 +L 2 +R 7 +D 7 +L 6 +D 2 +R 6 +L 4 +U 5 +D 5 +L 3 +R 5 +L 8 +R 8 +U 2 +R 5 +U 1 +D 4 +U 3 +D 1 +U 5 +R 1 +U 3 +L 1 +D 1 +U 6 +D 6 +L 6 +D 1 +L 2 +U 6 +D 7 +L 4 +U 5 +R 7 +L 2 +U 3 +R 8 +U 2 +L 8 +R 2 +L 8 +U 7 +L 5 +U 2 +D 5 +U 2 +L 6 +D 6 +U 8 +D 7 +R 7 +D 1 +L 5 +U 3 +R 4 +U 7 +R 2 +L 2 +D 7 +R 7 +D 3 +R 7 +L 1 +R 8 +L 5 +R 6 +U 5 +D 2 +R 5 +D 7 +R 3 +U 2 +R 5 +D 5 +U 3 +L 7 +R 4 +L 4 +U 8 +R 2 +D 5 +L 5 +U 9 +D 1 +U 8 +R 9 +L 6 +D 9 +L 5 +R 6 +U 6 +L 4 +D 8 +U 6 +R 2 +U 1 +L 9 +U 4 +L 9 +R 1 +L 4 +D 5 +L 6 +U 7 +L 2 +U 9 +R 2 +L 8 +R 4 +L 2 +D 3 +R 6 +L 5 +R 6 +L 4 +D 7 +L 9 +U 7 +D 1 +U 1 +R 2 +U 7 +L 1 +R 9 +U 4 +D 8 +L 2 +U 7 +D 7 +L 2 +R 4 +U 4 +R 8 +D 9 +L 4 +D 6 +R 5 +L 2 +R 8 +L 7 +R 3 +U 2 +D 5 +L 6 +U 5 +L 3 +R 8 +L 1 +R 3 +U 4 +L 4 +U 7 +R 4 +L 3 +R 9 +D 3 +U 5 +R 8 +D 9 +R 1 +L 9 +U 8 +R 3 +D 7 +U 5 +R 4 +L 4 +D 7 +U 4 +L 3 +R 6 +D 2 +U 5 +D 2 +R 3 +D 7 +L 3 +D 8 +L 9 +U 2 +L 9 +U 8 +D 4 +U 6 +D 4 +R 2 +D 2 +R 3 +D 5 +U 2 +R 3 +L 5 +R 2 +U 2 +L 1 +D 10 +U 2 +D 9 +R 5 +L 4 +R 2 +U 1 +R 6 +L 3 +R 9 +D 8 +R 4 +L 1 +D 4 +U 3 +L 5 +U 2 +R 10 +D 9 +L 5 +U 10 +D 7 +U 1 +D 2 +R 9 +U 7 +D 3 +R 6 +U 4 +R 8 +L 10 +D 7 +R 5 +U 7 +D 3 +R 10 +U 7 +D 8 +R 2 +U 6 +R 9 +D 5 +L 2 +D 2 +L 9 +D 9 +L 7 +U 10 +L 8 +D 4 +R 2 +L 10 +U 2 +R 7 +D 6 +L 8 +D 6 +L 4 +R 10 +U 6 +D 6 +L 3 +D 5 +R 1 +U 5 +D 6 +L 1 +D 8 +R 7 +D 2 +U 10 +D 7 +U 3 +D 5 +L 4 +R 9 +U 3 +D 2 +U 3 +D 7 +L 8 +D 8 +L 6 +D 6 +L 5 +U 9 +R 7 +D 2 +L 4 +U 6 +R 3 +L 2 +R 9 +L 10 +D 1 +L 4 +D 6 +R 4 +L 6 +D 4 +L 3 +U 2 +L 4 +U 5 +D 8 +U 1 +L 4 +U 3 +D 1 +R 3 +D 10 +R 11 +L 10 +U 2 +R 6 +L 5 +U 11 +R 11 +L 10 +D 9 +L 6 +R 2 +U 11 +D 1 +L 7 +R 2 +U 1 +L 9 +U 10 +R 6 +U 3 +R 10 +U 6 +L 11 +D 6 +L 1 +D 1 +U 1 +L 2 +R 11 +U 8 +D 9 +U 9 +D 2 +R 7 +U 9 +L 7 +R 5 +U 6 +R 11 +U 5 +L 1 +R 9 +L 1 +D 9 +U 5 +R 7 +U 1 +R 9 +D 7 +L 3 +U 3 +L 3 +D 3 +U 7 +L 4 +R 3 +L 7 +D 5 +L 6 +R 2 +D 2 +U 6 +D 9 +R 1 +U 3 +L 3 +U 4 +D 4 +R 10 +L 5 +U 2 +D 7 +U 1 +D 7 +L 7 +D 5 +R 6 +D 5 +R 1 +U 9 +D 11 +R 9 +D 3 +R 7 +U 8 +D 7 +L 7 +R 2 +L 9 +R 9 +U 3 +D 10 +L 9 +D 7 +R 1 +U 9 +R 3 +D 6 +U 2 +D 10 +U 2 +L 4 +R 2 +U 7 +R 5 +L 5 +R 8 +U 7 +L 7 +U 5 +D 11 +L 5 +D 5 +L 5 +D 10 +L 10 +U 9 +L 9 +U 8 +L 10 +R 9 +U 1 +D 4 +L 2 +R 7 +D 6 +R 9 +L 6 +D 3 +L 3 +R 2 +D 11 +R 7 +D 1 +U 4 +D 4 +L 10 +R 12 +U 8 +L 1 +U 1 +R 9 +D 10 +R 11 +D 11 +U 4 +R 9 +U 7 +R 7 +L 6 +U 12 +L 8 +U 4 +R 7 +L 1 +R 7 +U 3 +D 9 +U 2 +R 4 +L 9 +R 7 +L 12 +D 10 +R 6 +D 7 +L 9 +D 5 +R 11 +L 2 +U 11 +L 1 +U 9 +L 4 +D 3 +U 7 +D 9 +U 2 +L 6 +U 10 +L 3 +U 11 +L 3 +U 5 +R 7 +L 8 +R 1 +L 12 +U 9 +L 6 +U 7 +L 7 +U 5 +L 6 +R 3 +U 10 +L 8 +U 3 +R 10 +D 7 +L 12 +R 11 +D 4 +L 1 +U 1 +R 3 +D 2 +R 5 +U 3 +R 2 +L 8 +U 1 +D 4 +L 12 +R 10 +U 7 +R 8 +U 9 +D 12 +U 4 +L 6 +D 7 +R 5 +U 1 +D 13 +L 10 +R 9 +D 13 +U 13 +R 12 +L 6 +U 4 +R 8 +D 5 +R 2 +D 7 +L 6 +D 2 +L 12 +U 13 +R 10 +U 1 +D 7 +U 11 +R 2 +U 11 +R 7 +U 12 +D 11 +U 12 +R 2 +U 11 +D 7 +R 1 +U 13 +D 1 +U 4 +D 7 +R 11 +L 2 +R 6 +U 2 +D 3 +L 10 +U 1 +L 3 +D 4 +R 12 +L 4 +R 9 +U 7 +R 8 +D 3 +U 11 +L 12 +R 13 +U 12 +D 6 +R 6 +U 10 +D 6 +R 11 +U 9 +D 5 +U 1 +D 3 +R 1 +D 3 +R 6 +U 13 +D 3 +U 13 +D 6 +L 12 +D 8 +L 2 +U 4 +R 5 +U 2 +D 1 +R 9 +L 5 +R 6 +D 10 +U 12 +R 4 +U 11 +L 1 +U 12 +L 2 +R 4 +U 11 +L 1 +D 10 +L 2 +U 7 +D 7 +U 3 +R 5 +D 11 +R 7 +D 7 +U 6 +R 9 +L 4 +D 8 +L 11 +D 5 +U 5 +L 7 +D 8 +R 11 +D 9 +U 1 +L 6 +U 13 +R 8 +L 4 +R 10 +U 5 +D 7 +L 14 +R 10 +U 1 +D 1 +L 13 +R 10 +U 3 +L 3 +U 14 +L 1 +U 14 +D 5 +U 9 +L 9 +R 13 +U 1 +R 5 +D 3 +U 7 +L 4 +R 3 +D 6 +U 12 +L 8 +U 13 +D 8 +U 13 +R 8 +D 13 +L 7 +D 3 +R 8 +D 7 +U 11 +R 8 +U 5 +R 12 +L 9 +D 1 +R 8 +U 4 +D 4 +U 3 +D 8 +L 6 +D 14 +L 11 +U 12 +D 12 +U 10 +R 12 +U 12 +R 8 +L 4 +D 7 +U 2 +L 4 +U 9 +L 10 +R 7 +D 13 +U 12 +R 8 +U 6 +R 4 +U 10 +D 14 +L 4 +D 12 +R 7 +U 8 +L 2 +R 6 +D 8 +U 13 +L 9 +R 1 +D 14 +U 12 +L 9 +D 9 +U 1 +L 12 +R 14 +D 3 +U 4 +R 8 +U 4 +R 4 +L 7 +U 3 +R 4 +L 1 +U 3 +D 12 +R 6 +L 5 +U 8 +L 4 +U 3 +D 9 +R 12 +L 11 +D 12 +U 4 +L 1 +D 12 +U 14 +R 4 +L 1 +D 12 +U 5 +D 4 +U 2 +D 13 +L 7 +R 11 +D 3 +R 5 +U 7 +L 14 +U 13 +D 10 +R 6 +U 8 +L 8 +D 1 +U 14 +L 1 +R 11 +U 6 +D 9 +R 13 +L 14 +R 10 +L 1 +D 14 +R 3 +U 4 +D 5 +U 5 +R 10 +D 15 +R 3 +L 8 +U 3 +R 1 +L 10 +D 8 +R 4 +D 1 +L 9 +R 12 +D 1 +R 8 +L 14 +U 7 +R 6 +L 7 +D 13 +U 9 +L 4 +D 4 +U 2 +D 5 +R 10 +D 12 +R 7 +D 15 +R 7 +L 7 +R 10 +L 1 +D 7 +R 3 +L 3 +R 2 +L 4 +D 5 +R 13 +L 9 +D 4 +L 5 +R 8 +L 8 +D 1 +L 13 +R 2 +L 14 +D 4 +L 6 +R 13 +D 9 +L 15 +U 2 +D 5 +R 15 +L 1 +U 6 +D 12 +L 10 +R 15 +L 2 +R 11 +L 3 +D 12 +R 9 +D 6 +U 10 +D 1 +U 8 +D 15 +L 7 +U 2 +D 12 +L 11 +R 16 +D 6 +R 10 +D 8 +L 13 +R 5 +D 10 +L 11 +U 10 +R 15 +D 2 +L 5 +D 16 +L 13 +U 14 +R 2 +U 3 +R 12 +L 6 +D 7 +U 13 +D 16 +R 13 +L 12 +U 5 +D 16 +R 15 +L 2 +U 8 +D 16 +R 2 +L 11 +R 16 +D 11 +U 4 +R 15 +L 10 +U 11 +R 12 +L 11 +R 2 +U 10 +L 8 +U 13 +L 1 +U 10 +L 6 +R 11 +D 11 +U 8 +L 11 +D 6 +L 15 +U 1 +L 12 +R 12 +L 10 +D 15 +R 7 +L 12 +U 15 +D 6 +L 16 +R 10 +D 6 +R 3 +D 12 +R 7 +U 12 +D 9 +R 16 +U 11 +R 15 +L 7 +U 16 +R 5 +D 5 +R 13 +L 16 +R 9 +U 13 +L 6 +R 11 +D 11 +L 6 +D 6 +R 10 +D 6 +U 16 +D 1 +R 10 +U 12 +D 8 +U 12 +L 3 +U 14 +R 4 +U 3 +D 6 +U 10 +D 10 +R 9 +L 2 +D 11 +R 12 +U 9 +R 14 +D 11 +R 9 +L 6 +U 15 +D 15 +U 16 +R 13 +U 1 +R 10 +L 14 +D 3 +U 11 +D 7 +R 1 +U 2 +R 8 +L 4 +R 11 +U 15 +D 3 +R 9 +L 10 +R 12 +U 16 +L 10 +U 3 +L 3 +U 4 +D 16 +U 11 +D 16 +R 3 +U 9 +D 14 +L 14 +R 12 +L 7 +D 7 +U 2 +D 12 +L 14 +D 1 +R 2 +D 8 +L 1 +U 11 +D 8 +L 5 +U 8 +L 15 +D 3 +U 7 +D 3 +R 16 +D 12 +R 4 +L 3 +D 5 +R 12 +L 7 +R 6 +U 3 +D 12 +U 11 +D 10 +L 15 +U 9 +L 3 +R 4 +U 9 +L 4 +R 9 +U 11 +R 13 +D 8 +U 7 +L 2 +D 1 +R 14 +L 11 +R 11 +L 5 +D 8 +U 11 +L 10 +D 5 +L 3 +R 12 +U 15 +D 5 +U 6 +D 9 +L 12 +D 5 +R 8 +L 5 +U 6 +R 9 +D 11 +U 5 +R 8 +D 17 +L 1 +U 12 +L 14 +D 9 +U 17 +D 11 +R 17 +D 4 +U 1 +D 11 +U 11 +D 17 +L 13 +U 6 +R 14 +L 4 +D 11 +U 7 +D 7 +U 14 +R 12 +D 9 +R 6 +U 4 +L 5 +R 6 +U 12 +D 1 +U 15 +R 5 +U 10 +D 18 +L 7 +U 5 +L 11 +U 7 +R 7 +L 9 +D 3 +R 12 +L 4 +R 16 +D 18 +R 3 +D 18 +U 14 +L 9 +U 5 +R 14 +D 4 +L 15 +D 8 +L 1 +R 2 +D 11 +L 4 +D 5 +R 5 +L 18 +R 5 +U 9 +R 7 +D 15 +R 7 +U 5 +R 4 +U 14 +R 15 +L 16 +D 6 +L 2 +U 14 +L 13 +R 16 +U 9 +R 9 +U 14 +L 7 +U 14 +R 5 +L 14 +R 11 +D 1 +R 7 +U 16 +D 4 +L 17 +U 9 +D 18 +R 4 +L 7 +D 7 +L 12 +U 3 +D 15 +U 8 +R 9 +U 9 +R 15 +U 12 +R 13 +L 11 +U 12 +L 17 +U 18 +L 11 +R 2 +L 4 +D 14 +R 2 +D 8 +U 13 +D 7 +U 14 +L 7 +U 11 +D 15 +U 15 +R 5 +L 3 +U 7 +R 14 +L 14 +U 7 +D 6 +L 7 +D 4 +L 11 +R 11 +L 13 +U 10 +D 9 +R 11 +L 8 +U 6 +L 18 +D 12 +U 1 +D 17 +R 15 +L 19 +D 12 +R 16 +L 11 +R 6 +L 2 +U 4 +L 9 +D 19 +R 12 +L 13 +U 16 +D 8 +U 19 +R 14 +U 2 +R 18 +D 10 +R 1 +L 18 +R 9 +D 3 +R 2 +D 8 +R 8 +U 18 +L 5 +R 11 +D 9 +L 18 +U 10 +D 4 +R 15 +D 6 +U 15 +L 16 +U 12 +R 17 +D 16 +U 9 +D 12 +L 13 +R 6 +U 4 +D 13 +L 10 +R 3 +D 2 +R 13 +D 13 +U 3 +L 2 +U 8 +D 10 +R 17 +L 17 +U 13 +L 3 +U 9 +L 9 +R 5 +U 4 +D 15 +R 15 +D 7 +L 6 +U 3 +D 9 +U 4 +L 4 +R 7 +D 11 +U 19 +R 7 +D 16 +L 19 +U 17 +L 11 +R 7 +L 10 +D 14 +U 13 +D 11 +R 15 +D 14 +R 3 +L 1 +R 18 +D 14 +R 9 +L 2 +D 16 +L 4 \ No newline at end of file diff --git a/2022/9.js b/2022/9.js new file mode 100644 index 0000000..b3f25f2 --- /dev/null +++ b/2022/9.js @@ -0,0 +1,81 @@ +const fs = require('fs'); + +const instructions = fs.readFileSync('9.input').toString().split('\n'); + +const directions = { + U: { x: 0, y: -1 }, + R: { x: 1, y: 0 }, + D: { x: 0, y: 1 }, + L: { x: -1, y: 0 }, +} + +const rope = { + segments: [{x: 0, y: 0}, {x: 0, y: 0}], + tailHistory: new Set(), +} +// add origin +rope.tailHistory.add(JSON.stringify({ x: 0, y: 0 })); + +// we first want a distance vector between the two +// if it is greater than 2 unit lengths, we want +// to move it one closer in the most optimal direction +const integrateTailSegment = (first, second) => { + let dx = first.x - second.x; + let dy = first.y - second.y; + const distance = Math.round(Math.sqrt(dx * dx + dy * dy)); + if (distance <= 1) return second; + // normalise dx, dy to get a direction vector + dx /= distance; + dy /= distance; + const rx = dx > 0 ? Math.round(dx) : Math.floor(dx); + const ry = dy > 0 ? Math.round(dy) : Math.floor(dy); + return { x: second.x + rx, y: second.y + ry }; +} + + +// moves by one, up to the caller to itterate +const processHeadTailMove = (direction) => { + rope.segments[0].x += directions[direction].x; + rope.segments[0].y += directions[direction].y; + rope.segments[1] = integrateTailSegment(rope.segments[0], rope.segments[1]); + rope.tailHistory.add(JSON.stringify(rope.segments[1])); +} + +for (const instruction of instructions) { + const breakdown = instruction.split(' '); + const direction = breakdown[0]; + const distance = parseInt(breakdown[1]); + + for (let i = 0; i < distance; i++) { + processHeadTailMove(direction); + } +} + +console.log(`Part 1: ${Array.from(rope.tailHistory).length}`); + +const processLongRopeMove = (direction) => { + rope.segments[0].x += directions[direction].x; + rope.segments[0].y += directions[direction].y; + + for (let i = 1; i < 10; i++) + rope.segments[i] = integrateTailSegment(rope.segments[i-1], rope.segments[i]); + + rope.tailHistory.add(JSON.stringify(rope.segments[9])); +} + +rope.segments = []; +rope.tailHistory = new Set(); +for (let i = 0; i < 10; i++) + rope.segments.push({x: 0, y: 0}); + +for (const instruction of instructions) { + const breakdown = instruction.split(' '); + const direction = breakdown[0]; + const distance = parseInt(breakdown[1]); + + for (let i = 0; i < distance; i++) { + processLongRopeMove(direction); + } +} + +console.log(`Part 2: ${Array.from(rope.tailHistory).length}`);