From b32c6103cbef9f1c581ebfe521e21fe86bbf7978 Mon Sep 17 00:00:00 2001 From: Nat Lasseter Date: Fri, 9 Dec 2022 12:04:12 +0000 Subject: Day 09 --- day09/input | 2000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ day09/part1.rb | 80 +++ day09/part2.rb | 93 +++ day09/test | 8 + day09/test2 | 8 + 5 files changed, 2189 insertions(+) create mode 100644 day09/input create mode 100644 day09/part1.rb create mode 100644 day09/part2.rb create mode 100644 day09/test create mode 100644 day09/test2 diff --git a/day09/input b/day09/input new file mode 100644 index 0000000..376a293 --- /dev/null +++ b/day09/input @@ -0,0 +1,2000 @@ +L 2 +D 2 +U 1 +R 1 +U 2 +D 1 +L 1 +D 1 +R 2 +D 2 +U 1 +R 2 +U 2 +R 2 +U 2 +L 2 +U 2 +L 2 +U 1 +D 1 +L 1 +R 1 +U 2 +R 2 +D 1 +U 2 +L 1 +U 2 +L 2 +D 2 +R 1 +U 2 +R 2 +U 1 +D 1 +L 1 +U 2 +L 2 +D 1 +U 1 +R 2 +D 2 +R 1 +D 1 +L 1 +R 2 +U 1 +L 1 +D 2 +U 2 +D 1 +L 1 +R 1 +U 1 +D 1 +R 2 +D 2 +R 1 +D 2 +L 1 +D 2 +L 1 +U 2 +R 1 +L 1 +U 2 +L 2 +D 2 +R 2 +L 1 +U 2 +R 1 +U 2 +R 2 +L 2 +D 2 +R 1 +L 1 +D 1 +L 1 +U 2 +L 2 +D 2 +L 2 +U 1 +R 2 +U 1 +R 2 +D 2 +U 1 +R 1 +U 2 +R 2 +L 1 +U 2 +L 1 +U 2 +L 1 +U 1 +R 2 +U 2 +L 1 +D 2 +U 1 +L 2 +U 2 +D 2 +U 1 +D 1 +R 1 +D 2 +U 2 +R 2 +L 2 +R 2 +U 1 +L 2 +R 3 +D 2 +L 1 +R 1 +D 3 +U 3 +R 2 +L 3 +U 1 +L 3 +U 2 +L 2 +U 3 +D 2 +R 1 +U 1 +R 3 +U 2 +D 2 +U 3 +D 3 +L 2 +U 2 +L 3 +U 1 +R 1 +D 3 +L 1 +R 2 +U 1 +L 2 +D 1 +U 2 +L 2 +U 1 +D 1 +U 1 +R 3 +U 3 +R 2 +U 1 +D 1 +U 2 +D 1 +R 1 +U 3 +R 1 +U 3 +R 1 +U 2 +D 1 +L 1 +D 1 +L 1 +D 1 +U 1 +L 2 +R 2 +U 2 +L 3 +U 1 +D 1 +R 3 +U 1 +L 2 +R 1 +D 1 +R 3 +D 2 +U 2 +D 1 +R 1 +U 1 +D 1 +U 1 +D 3 +U 1 +L 3 +D 1 +R 2 +U 2 +R 2 +U 1 +R 2 +D 2 +L 3 +U 1 +D 1 +L 3 +U 3 +R 1 +U 3 +D 3 +L 3 +D 3 +L 2 +R 2 +U 2 +R 1 +U 2 +D 2 +U 2 +L 2 +R 1 +U 3 +R 4 +L 2 +R 4 +D 2 +R 2 +L 2 +R 2 +D 1 +U 2 +D 3 +R 1 +U 1 +D 4 +R 4 +L 1 +U 1 +D 2 +L 2 +R 3 +U 2 +L 3 +R 4 +U 3 +L 3 +D 4 +R 3 +L 2 +U 3 +D 1 +L 2 +U 3 +L 1 +D 2 +R 1 +D 4 +L 2 +R 4 +U 4 +L 2 +R 2 +D 4 +L 3 +U 3 +L 2 +U 2 +L 4 +D 2 +R 4 +D 1 +L 4 +U 4 +R 1 +U 4 +D 2 +R 2 +U 3 +L 1 +R 4 +U 3 +R 3 +U 4 +L 2 +D 3 +L 4 +R 2 +L 4 +D 4 +U 1 +L 2 +D 4 +R 1 +U 3 +R 1 +U 4 +L 1 +D 4 +U 2 +L 4 +U 1 +R 2 +U 4 +L 2 +D 3 +L 2 +U 4 +D 2 +L 3 +D 1 +U 4 +D 1 +L 4 +U 3 +R 3 +L 2 +R 2 +U 2 +D 2 +L 1 +U 4 +R 2 +L 3 +R 1 +U 4 +L 2 +U 4 +L 2 +U 3 +L 2 +R 3 +U 3 +L 2 +D 4 +R 3 +U 2 +L 3 +D 3 +R 4 +U 1 +R 3 +D 5 +U 1 +L 1 +R 5 +D 2 +L 3 +U 5 +D 3 +L 3 +D 1 +U 3 +R 2 +U 5 +L 2 +D 2 +L 5 +U 2 +D 5 +R 1 +U 1 +R 5 +L 4 +D 4 +R 2 +U 5 +D 5 +L 1 +R 2 +U 4 +L 2 +D 1 +L 5 +D 1 +R 3 +L 2 +R 4 +D 1 +R 4 +U 4 +L 1 +U 2 +D 5 +U 4 +L 3 +D 3 +R 3 +D 5 +L 2 +U 5 +R 3 +L 5 +R 4 +U 4 +R 3 +L 2 +D 4 +L 2 +U 1 +R 3 +L 2 +R 3 +L 5 +U 1 +L 2 +R 1 +D 3 +R 4 +L 2 +D 2 +R 4 +D 3 +L 5 +D 2 +L 4 +R 3 +L 3 +D 2 +R 5 +U 4 +R 4 +U 3 +L 4 +U 1 +R 4 +D 4 +U 1 +L 3 +U 1 +L 1 +R 4 +D 1 +U 3 +D 2 +R 3 +L 3 +U 2 +R 4 +D 4 +L 1 +R 5 +U 1 +L 2 +U 2 +R 4 +U 4 +R 2 +D 2 +U 3 +L 5 +D 4 +L 5 +D 1 +L 2 +D 4 +R 6 +L 3 +D 5 +R 3 +L 5 +R 5 +D 1 +R 3 +L 5 +R 5 +L 6 +R 4 +L 2 +R 5 +D 3 +U 1 +R 4 +D 2 +R 2 +L 6 +U 2 +R 5 +U 5 +L 3 +R 6 +L 6 +D 3 +L 1 +R 1 +L 1 +D 5 +L 4 +U 3 +D 5 +L 1 +U 6 +R 5 +D 6 +U 1 +D 5 +L 3 +D 5 +R 6 +U 2 +D 1 +L 4 +D 5 +R 2 +U 5 +R 4 +L 1 +R 2 +L 1 +R 2 +L 6 +U 2 +D 3 +R 5 +D 3 +L 4 +R 4 +D 1 +R 6 +D 1 +R 4 +L 3 +D 6 +L 5 +D 2 +R 1 +L 3 +R 2 +L 6 +D 4 +U 5 +R 6 +U 3 +D 2 +R 4 +L 6 +U 4 +L 2 +U 2 +L 1 +U 5 +D 1 +L 2 +U 1 +D 2 +L 1 +R 4 +U 4 +L 4 +D 4 +R 3 +D 6 +L 2 +U 4 +R 1 +L 2 +U 3 +L 6 +U 6 +R 3 +D 7 +U 4 +R 6 +L 6 +D 7 +L 5 +U 1 +R 2 +U 7 +D 5 +L 7 +R 2 +U 3 +R 7 +D 5 +L 2 +U 2 +R 3 +U 5 +R 3 +D 4 +R 4 +U 3 +L 6 +R 2 +D 7 +U 6 +D 1 +U 3 +R 3 +D 4 +R 6 +U 4 +L 3 +D 3 +R 4 +L 2 +D 1 +R 3 +U 6 +R 5 +U 3 +L 5 +R 5 +D 4 +U 3 +L 7 +U 7 +D 3 +U 1 +D 1 +U 1 +D 3 +L 5 +R 4 +U 6 +R 7 +D 2 +L 3 +R 2 +U 3 +D 2 +L 5 +D 7 +R 6 +D 1 +U 5 +D 7 +U 6 +D 4 +L 6 +D 4 +L 2 +D 7 +R 6 +L 3 +D 2 +L 3 +D 2 +U 6 +L 1 +R 2 +U 5 +L 5 +R 2 +U 6 +R 3 +L 7 +R 4 +D 7 +L 7 +D 6 +L 4 +D 2 +R 6 +L 1 +D 3 +U 6 +D 7 +U 1 +L 5 +D 7 +U 3 +R 3 +L 7 +D 2 +L 7 +U 5 +D 4 +R 3 +D 8 +R 7 +U 1 +R 8 +U 4 +D 5 +R 6 +L 5 +D 5 +L 7 +R 7 +U 4 +D 2 +L 7 +U 8 +D 6 +L 5 +D 2 +L 6 +U 6 +R 5 +U 5 +L 6 +U 5 +L 3 +U 4 +D 7 +R 3 +L 4 +R 7 +D 1 +R 5 +D 2 +R 8 +L 8 +U 8 +L 6 +U 5 +L 1 +U 6 +R 2 +U 4 +L 5 +R 2 +D 8 +L 1 +U 4 +R 6 +U 1 +L 4 +R 7 +L 8 +R 5 +U 5 +R 3 +L 3 +U 2 +D 8 +L 8 +R 4 +U 3 +D 3 +L 1 +R 8 +U 3 +L 8 +D 8 +U 7 +D 8 +L 3 +U 5 +D 7 +L 7 +U 5 +L 3 +R 6 +D 7 +R 1 +D 7 +L 5 +U 3 +D 5 +U 1 +L 2 +D 4 +U 5 +R 1 +L 6 +U 3 +L 1 +D 6 +R 1 +L 1 +R 3 +L 4 +U 6 +R 3 +U 8 +L 2 +U 3 +R 1 +D 5 +R 2 +U 2 +D 8 +L 3 +D 2 +R 8 +D 1 +L 3 +U 1 +D 8 +U 1 +L 2 +D 4 +R 3 +L 4 +D 3 +L 2 +D 4 +L 6 +U 6 +D 9 +U 5 +R 9 +D 1 +R 8 +L 9 +R 7 +D 5 +U 1 +L 1 +R 8 +U 3 +R 4 +L 2 +R 1 +D 6 +U 5 +D 6 +L 9 +R 2 +D 2 +R 8 +D 2 +R 3 +U 1 +L 1 +U 1 +L 1 +U 3 +D 9 +R 2 +U 1 +D 1 +R 6 +D 7 +L 9 +U 4 +L 7 +U 8 +D 8 +L 3 +D 9 +L 4 +D 8 +U 9 +L 9 +D 7 +U 7 +D 2 +L 4 +D 5 +L 5 +U 6 +D 8 +L 5 +U 9 +L 4 +U 3 +D 4 +R 9 +U 4 +D 7 +L 6 +R 7 +L 5 +U 5 +L 8 +D 3 +L 5 +U 7 +D 6 +U 3 +R 1 +D 8 +U 3 +L 8 +U 9 +R 1 +U 1 +L 3 +R 6 +U 5 +R 7 +U 4 +R 4 +L 8 +U 4 +L 9 +R 7 +D 6 +R 8 +U 9 +D 8 +L 3 +R 7 +U 1 +L 9 +R 2 +L 3 +D 6 +R 9 +D 1 +L 3 +D 4 +U 2 +D 9 +R 9 +U 3 +R 2 +D 3 +U 7 +L 4 +D 6 +R 3 +D 8 +U 4 +R 8 +U 6 +R 5 +L 5 +U 2 +D 1 +R 5 +U 9 +D 3 +L 5 +R 8 +U 2 +D 9 +R 5 +U 4 +L 7 +U 4 +D 6 +U 7 +D 1 +L 6 +U 7 +D 6 +L 3 +D 8 +U 1 +L 1 +U 9 +L 2 +U 4 +D 2 +R 8 +U 3 +R 8 +L 4 +U 3 +L 7 +U 7 +D 7 +R 7 +L 2 +U 6 +R 1 +U 7 +D 6 +L 1 +R 5 +L 7 +R 1 +D 7 +U 9 +D 9 +L 1 +D 10 +U 10 +L 2 +R 9 +L 1 +R 3 +U 8 +L 1 +R 2 +L 2 +U 2 +D 1 +U 5 +R 5 +D 7 +L 6 +D 2 +L 10 +U 10 +D 4 +L 10 +R 10 +U 5 +L 7 +R 10 +D 1 +L 8 +D 3 +U 7 +R 2 +D 7 +U 4 +L 3 +R 4 +L 10 +U 3 +L 5 +R 4 +D 3 +R 9 +L 9 +R 6 +U 5 +L 5 +R 11 +U 6 +L 11 +R 9 +D 5 +U 7 +L 8 +R 5 +U 11 +D 6 +L 9 +D 5 +L 2 +D 2 +R 4 +L 1 +D 10 +L 9 +R 6 +D 2 +L 11 +D 4 +R 5 +D 2 +R 8 +D 3 +L 1 +R 11 +D 1 +L 11 +D 7 +L 5 +U 7 +D 4 +L 7 +U 11 +L 3 +U 7 +L 2 +D 6 +R 1 +D 3 +R 1 +L 1 +D 11 +L 6 +U 1 +R 9 +U 8 +D 8 +L 2 +R 6 +U 10 +R 7 +L 5 +U 1 +R 4 +L 2 +D 11 +L 10 +U 7 +L 10 +D 1 +R 6 +U 2 +D 7 +R 7 +D 2 +R 10 +U 8 +D 5 +U 2 +L 11 +R 9 +D 7 +U 3 +R 6 +U 6 +D 7 +U 6 +L 2 +R 11 +L 10 +D 7 +U 10 +D 3 +R 10 +L 4 +D 8 +R 5 +L 5 +D 9 +U 8 +R 3 +D 10 +R 11 +U 5 +D 11 +L 2 +D 8 +L 7 +U 4 +D 5 +U 9 +D 3 +U 11 +D 4 +L 1 +U 4 +L 3 +R 7 +L 12 +D 10 +U 8 +L 6 +D 11 +U 5 +L 2 +D 6 +L 5 +U 8 +L 4 +U 6 +R 9 +D 2 +L 6 +U 12 +R 2 +L 10 +R 7 +U 7 +L 5 +R 6 +U 5 +R 7 +D 6 +R 4 +U 6 +L 4 +U 4 +L 4 +U 3 +D 3 +L 9 +D 12 +R 10 +U 3 +L 1 +U 4 +L 8 +R 4 +D 6 +L 2 +D 7 +L 9 +U 3 +L 11 +R 9 +D 8 +L 1 +D 11 +R 8 +L 6 +U 7 +R 5 +U 3 +D 4 +R 4 +U 5 +L 6 +U 10 +D 2 +R 8 +U 7 +D 4 +L 11 +R 9 +U 9 +D 12 +U 8 +R 4 +U 5 +D 11 +L 5 +R 5 +D 2 +L 12 +U 4 +L 1 +R 9 +L 5 +D 1 +R 2 +L 2 +D 7 +L 12 +D 2 +R 7 +U 10 +L 1 +U 2 +L 8 +D 5 +L 7 +U 8 +L 8 +U 10 +D 7 +R 8 +D 7 +R 9 +L 7 +D 1 +R 3 +D 4 +R 11 +D 3 +L 5 +D 7 +U 8 +L 2 +D 10 +L 12 +R 7 +U 13 +R 4 +U 10 +L 10 +D 6 +U 7 +D 12 +U 2 +D 8 +L 1 +R 5 +D 9 +L 1 +R 11 +L 2 +D 7 +L 13 +U 1 +L 8 +D 2 +U 12 +L 6 +R 10 +L 10 +R 9 +U 3 +R 1 +L 10 +D 2 +L 4 +D 8 +U 7 +L 11 +D 8 +U 1 +D 1 +L 2 +D 2 +L 5 +U 6 +D 1 +U 6 +R 2 +L 2 +D 5 +U 2 +R 10 +L 4 +D 3 +L 11 +D 11 +U 4 +D 4 +R 12 +D 11 +U 2 +R 11 +U 3 +R 8 +U 8 +L 5 +R 12 +U 1 +L 10 +R 11 +L 3 +U 6 +D 2 +R 7 +D 13 +L 11 +R 8 +L 8 +R 1 +L 5 +D 13 +R 8 +L 12 +D 13 +R 10 +U 5 +D 13 +U 6 +L 2 +D 2 +U 7 +D 4 +L 4 +R 5 +L 12 +U 6 +D 8 +U 7 +D 12 +R 11 +L 11 +D 9 +R 4 +D 3 +L 5 +R 6 +D 9 +R 3 +U 10 +R 10 +U 3 +D 11 +L 3 +D 5 +R 14 +U 7 +R 3 +D 1 +L 4 +U 6 +D 6 +R 10 +L 12 +R 10 +L 4 +U 10 +R 8 +D 14 +L 6 +U 7 +D 4 +L 9 +R 10 +D 10 +L 4 +R 6 +U 8 +D 10 +L 12 +U 11 +L 7 +R 1 +U 1 +R 12 +U 7 +D 3 +U 4 +R 3 +D 6 +U 2 +R 2 +U 14 +D 10 +R 5 +L 12 +U 5 +D 6 +R 7 +L 13 +D 11 +R 6 +D 11 +R 6 +D 6 +U 10 +L 14 +D 4 +R 14 +D 7 +U 12 +L 3 +U 2 +D 3 +R 1 +D 3 +U 2 +D 13 +L 14 +R 13 +U 3 +D 12 +L 14 +U 12 +D 6 +R 2 +U 6 +L 11 +D 3 +L 7 +D 7 +R 11 +D 11 +R 10 +L 2 +U 12 +L 14 +U 11 +R 12 +L 4 +D 2 +R 13 +L 1 +U 7 +L 2 +D 7 +L 14 +R 11 +U 1 +L 7 +U 11 +L 6 +U 1 +D 11 +L 14 +R 4 +L 1 +D 14 +U 7 +L 6 +R 3 +L 2 +U 10 +D 3 +R 4 +U 7 +R 11 +U 7 +R 13 +U 2 +L 12 +R 9 +L 15 +R 4 +U 5 +D 7 +L 10 +R 9 +D 5 +L 14 +U 9 +R 3 +L 15 +R 5 +L 10 +D 5 +U 3 +D 9 +U 13 +D 15 +R 10 +L 9 +R 9 +U 4 +D 2 +L 3 +R 5 +L 11 +R 7 +L 15 +D 12 +L 13 +D 4 +R 2 +U 14 +D 9 +L 1 +D 1 +L 6 +U 9 +D 14 +U 2 +L 1 +R 10 +U 14 +R 4 +D 11 +R 6 +D 11 +U 9 +R 2 +L 6 +R 10 +L 4 +D 7 +R 11 +U 5 +L 2 +D 5 +U 6 +R 8 +U 4 +R 9 +D 15 +R 8 +L 10 +U 5 +L 4 +U 7 +L 3 +U 5 +R 2 +U 13 +L 9 +U 4 +D 13 +R 1 +D 15 +U 4 +L 7 +D 12 +L 8 +U 6 +L 10 +U 13 +R 12 +D 13 +U 6 +D 13 +U 2 +L 13 +U 7 +L 8 +U 6 +D 2 +U 13 +L 2 +D 13 +R 3 +D 2 +L 11 +D 13 +U 1 +D 12 +L 9 +U 2 +R 9 +U 16 +D 6 +L 16 +D 15 +R 7 +U 3 +D 11 +L 8 +U 3 +L 15 +R 7 +D 14 +L 8 +R 7 +U 12 +R 11 +U 2 +R 13 +D 9 +L 4 +U 14 +L 6 +D 7 +L 10 +U 14 +D 8 +L 6 +D 3 +L 6 +D 12 +U 13 +R 9 +L 6 +U 9 +R 9 +D 13 +R 13 +U 13 +L 4 +D 1 +R 8 +L 1 +R 15 +U 15 +R 14 +D 9 +L 5 +D 2 +L 14 +U 14 +L 15 +R 10 +U 11 +L 7 +R 12 +U 7 +L 7 +D 9 +U 1 +L 11 +R 11 +D 13 +U 7 +R 7 +U 7 +R 8 +D 12 +U 11 +D 14 +U 16 +L 5 +R 8 +D 2 +L 10 +D 14 +R 16 +D 13 +U 14 +L 6 +R 11 +D 4 +R 15 +D 2 +R 3 +L 2 +U 8 +L 4 +D 5 +U 3 +L 11 +U 7 +R 14 +U 4 +L 5 +D 10 +U 16 +L 1 +U 5 +R 11 +D 16 +U 5 +D 11 +R 5 +D 9 +R 3 +U 13 +D 6 +L 10 +D 2 +U 4 +D 7 +U 1 +R 10 +D 6 +U 12 +L 2 +D 8 +U 5 +L 5 +U 7 +L 3 +U 16 +D 12 +L 12 +R 16 +L 5 +R 17 +L 7 +U 17 +D 15 +R 14 +L 7 +U 16 +R 7 +D 7 +R 14 +D 6 +L 7 +U 6 +R 5 +D 14 +L 8 +R 3 +L 1 +U 12 +L 8 +D 11 +R 3 +D 11 +L 16 +R 4 +U 2 +R 17 +U 10 +R 3 +U 13 +R 6 +D 16 +U 15 +R 3 +U 7 +D 6 +U 2 +L 12 +D 11 +L 6 +D 9 +R 7 +U 10 +R 14 +D 10 +R 10 +D 17 +R 9 +L 11 +R 7 +D 14 +L 10 +U 17 +R 5 +D 12 +U 11 +D 11 +R 7 +D 12 +U 10 +D 10 +U 8 +D 11 +R 8 +U 9 +L 17 +D 15 +R 2 +D 14 +L 10 +U 2 +L 9 +R 15 +L 8 +D 9 +L 7 +R 10 +D 6 +L 15 +U 1 +L 11 +R 14 +L 7 +R 17 +U 17 +L 8 +U 16 +D 4 +R 9 +L 13 +R 5 +L 1 +D 14 +U 7 +L 8 +R 10 +U 10 +D 16 +U 6 +R 13 +D 12 +U 10 +L 3 +U 2 +R 7 +D 12 +R 16 +D 1 +L 14 +R 9 +D 18 +R 1 +L 17 +R 9 +U 16 +L 5 +U 12 +R 7 +D 6 +L 17 +U 3 +R 5 +U 13 +D 9 +U 12 +L 13 +D 5 +R 1 +U 7 +L 4 +R 13 +D 1 +L 15 +U 11 +L 5 +D 2 +R 12 +D 12 +U 5 +L 1 +R 5 +U 3 +R 5 +L 9 +R 15 +U 3 +D 18 +L 10 +R 2 +D 7 +R 13 +L 8 +R 5 +L 2 +R 15 +D 12 +L 14 +U 15 +L 8 +U 13 +R 13 +L 15 +R 16 +D 10 +L 15 +U 1 +R 1 +D 3 +U 17 +D 2 +L 5 +R 17 +U 6 +R 10 +L 3 +D 11 +R 13 +D 5 +U 3 +D 9 +U 10 +R 12 +D 10 +R 15 +U 11 +L 6 +R 3 +U 4 +D 7 +R 12 +L 5 +R 7 +D 17 +L 14 +U 9 +D 7 +U 2 +R 1 +D 13 +R 3 +D 12 +L 3 +U 17 +D 1 +U 6 +L 8 +U 17 +D 1 +R 6 +L 8 +R 8 +U 5 +L 12 +D 8 +R 5 +L 11 +U 17 +L 3 +U 11 +L 1 +R 15 +D 15 +L 10 +D 10 +L 19 +R 11 +L 4 +D 11 +L 13 +U 4 +D 6 +L 3 +U 11 +R 3 +L 9 +D 4 +U 10 +L 14 +D 10 +R 11 +L 1 +R 1 +D 8 +R 19 +D 6 +L 16 +D 1 +U 13 +R 19 +U 19 +D 3 +R 8 +D 16 +R 2 +D 2 +L 19 +D 7 +R 2 +U 4 +L 5 +R 2 +U 9 +L 5 +D 13 +L 5 +R 14 +L 13 +D 5 +U 10 +R 12 +L 11 +D 18 +U 7 +L 12 +R 11 +D 16 +U 15 +L 12 +R 12 +D 1 +R 2 +D 6 +L 15 +D 8 +R 19 +U 9 +R 12 +L 10 +R 3 +D 19 +R 15 +U 12 +R 6 +L 3 +D 17 +R 2 +U 11 +D 12 +L 15 +D 16 +R 18 +D 16 +U 12 +R 16 +U 17 +R 15 +L 10 +R 4 +D 12 +L 5 +R 11 +L 1 +U 11 +R 3 +D 5 diff --git a/day09/part1.rb b/day09/part1.rb new file mode 100644 index 0000000..58debcd --- /dev/null +++ b/day09/part1.rb @@ -0,0 +1,80 @@ +class Pos + def initialize(x = 0, y = 0) + @x = x + @y = y + end + + attr_reader :x, :y + + def move(dir) + case dir + when "U" + @y += 1 + when "D" + @y -= 1 + when "R" + @x += 1 + when "L" + @x -= 1 + end + end + + def follow(head) + if head.x == @x - 1 && head.y == @y + 2 + @x -= 1 + @y += 1 + elsif head.x == @x && head.y == @y + 2 + @y += 1 + elsif head.x == @x + 1 && head.y == @y + 2 + @x += 1 + @y += 1 + + elsif head.x == @x + 2 && head.y == @y + 1 + @x += 1 + @y += 1 + elsif head.x == @x + 2 && head.y == @y + @x += 1 + elsif head.x == @x + 2 && head.y == @y - 1 + @x += 1 + @y -= 1 + + elsif head.x == @x + 1 && head.y == @y - 2 + @x += 1 + @y -= 1 + elsif head.x == @x && head.y == @y - 2 + @y -= 1 + elsif head.x == @x - 1 && head.y == @y - 2 + @x -= 1 + @y -= 1 + + elsif head.x == @x - 2 && head.y == @y - 1 + @x -= 1 + @y -= 1 + elsif head.x == @x - 2 && head.y == @y + @x -= 1 + elsif head.x == @x - 2 && head.y == @y + 1 + @x -= 1 + @y += 1 + end + end + + def coord + [@x, @y] + end +end + +moves = $stdin.readlines.map(&:strip).map(&:split) + +head = Pos.new +tail = Pos.new +visited = [tail.coord] + +moves.each do |dir, dist| + dist.to_i.times do + head.move(dir) + tail.follow(head) + visited << tail.coord + end +end + +puts visited.uniq.count diff --git a/day09/part2.rb b/day09/part2.rb new file mode 100644 index 0000000..30fe1db --- /dev/null +++ b/day09/part2.rb @@ -0,0 +1,93 @@ +class Pos + def initialize(x = 0, y = 0) + @x = x + @y = y + end + + attr_reader :x, :y + + def move(dir) + case dir + when "U" + @y += 1 + when "D" + @y -= 1 + when "R" + @x += 1 + when "L" + @x -= 1 + end + end + + def follow(head) + if head.x == @x - 2 && head.y == @y + 2 + @x -= 1 + @y += 1 + elsif head.x == @x - 1 && head.y == @y + 2 + @x -= 1 + @y += 1 + elsif head.x == @x && head.y == @y + 2 + @y += 1 + elsif head.x == @x + 1 && head.y == @y + 2 + @x += 1 + @y += 1 + + elsif head.x == @x + 2 && head.y == @y + 2 + @x += 1 + @y += 1 + elsif head.x == @x + 2 && head.y == @y + 1 + @x += 1 + @y += 1 + elsif head.x == @x + 2 && head.y == @y + @x += 1 + elsif head.x == @x + 2 && head.y == @y - 1 + @x += 1 + @y -= 1 + + elsif head.x == @x + 2 && head.y == @y - 2 + @x += 1 + @y -= 1 + elsif head.x == @x + 1 && head.y == @y - 2 + @x += 1 + @y -= 1 + elsif head.x == @x && head.y == @y - 2 + @y -= 1 + elsif head.x == @x - 1 && head.y == @y - 2 + @x -= 1 + @y -= 1 + + elsif head.x == @x - 2 && head.y == @y - 2 + @x -= 1 + @y -= 1 + elsif head.x == @x - 2 && head.y == @y - 1 + @x -= 1 + @y -= 1 + elsif head.x == @x - 2 && head.y == @y + @x -= 1 + elsif head.x == @x - 2 && head.y == @y + 1 + @x -= 1 + @y += 1 + end + end + + def coord + [@x, @y] + end +end + +moves = $stdin.readlines.map(&:strip).map(&:split) + +rope = Array.new(10) { Pos.new } +visited = [rope[-1].coord] + +moves.each do |dir, dist| + dist.to_i.times do + rope[0].move(dir) + (rope.length - 1).times do |i| + rope[i+1].follow(rope[i]) + end + visited << rope[-1].coord + end +end + +puts visited.uniq.count diff --git a/day09/test b/day09/test new file mode 100644 index 0000000..9874df2 --- /dev/null +++ b/day09/test @@ -0,0 +1,8 @@ +R 4 +U 4 +L 3 +D 1 +R 4 +D 1 +L 5 +R 2 diff --git a/day09/test2 b/day09/test2 new file mode 100644 index 0000000..60bd43b --- /dev/null +++ b/day09/test2 @@ -0,0 +1,8 @@ +R 5 +U 8 +L 8 +D 3 +R 17 +D 10 +L 25 +U 20 -- cgit v1.2.1