From 7be570c4a6e86fb7060f0bc06910ca57003dfe90 Mon Sep 17 00:00:00 2001 From: Orfeas <38209077+0xfea5@users.noreply.github.com> Date: Sat, 8 Jun 2024 13:50:47 +0300 Subject: Update file names and init.sh --- day09/example.txt | 8 + day09/input.txt | 2000 ++++++++++++++++++++++++++++++++++++++++++++++++++++ day09/solution.nim | 61 ++ 3 files changed, 2069 insertions(+) create mode 100644 day09/example.txt create mode 100644 day09/input.txt create mode 100644 day09/solution.nim (limited to 'day09') diff --git a/day09/example.txt b/day09/example.txt new file mode 100644 index 0000000..60bd43b --- /dev/null +++ b/day09/example.txt @@ -0,0 +1,8 @@ +R 5 +U 8 +L 8 +D 3 +R 17 +D 10 +L 25 +U 20 diff --git a/day09/input.txt b/day09/input.txt new file mode 100644 index 0000000..06c4a9b --- /dev/null +++ b/day09/input.txt @@ -0,0 +1,2000 @@ +L 2 +R 2 +U 1 +R 2 +U 2 +D 2 +U 1 +L 1 +U 1 +L 1 +D 1 +U 1 +L 1 +R 1 +L 2 +D 2 +R 1 +L 2 +D 2 +L 2 +U 1 +D 2 +R 1 +D 1 +U 1 +D 1 +U 2 +L 1 +U 2 +R 1 +D 2 +L 1 +D 1 +U 1 +L 1 +R 1 +L 1 +U 2 +L 1 +U 1 +L 2 +R 2 +D 2 +U 2 +R 1 +U 1 +D 2 +L 1 +U 1 +D 2 +U 1 +L 2 +U 1 +D 2 +U 2 +L 1 +D 2 +L 1 +U 1 +D 1 +U 1 +D 2 +R 2 +U 1 +L 1 +R 2 +D 2 +R 1 +L 1 +R 1 +D 1 +U 1 +L 2 +U 1 +L 1 +R 1 +D 2 +U 1 +L 1 +D 2 +R 2 +D 1 +U 1 +R 2 +U 1 +D 1 +R 2 +D 1 +R 1 +U 2 +D 1 +L 2 +U 2 +R 1 +L 1 +R 2 +U 2 +L 2 +U 2 +D 1 +U 1 +D 2 +R 2 +U 2 +R 1 +D 1 +R 2 +U 2 +D 2 +U 1 +R 1 +U 2 +D 3 +R 1 +L 1 +D 3 +U 3 +L 3 +D 2 +U 3 +D 1 +R 2 +D 2 +L 1 +U 3 +R 1 +U 1 +R 3 +D 1 +L 3 +R 1 +U 1 +L 2 +D 2 +L 1 +U 2 +D 1 +L 2 +D 1 +U 1 +R 2 +D 2 +U 2 +D 1 +L 1 +R 2 +U 3 +D 3 +U 2 +L 1 +D 1 +U 2 +R 3 +U 1 +D 1 +U 3 +R 2 +U 3 +D 2 +U 1 +R 1 +U 2 +R 2 +U 1 +L 1 +U 3 +L 2 +R 1 +U 2 +D 3 +L 1 +U 3 +D 3 +U 3 +L 1 +D 2 +L 2 +R 2 +D 3 +R 3 +D 2 +R 2 +D 3 +U 3 +R 1 +D 3 +U 2 +R 3 +D 2 +R 3 +U 1 +R 2 +D 2 +U 3 +D 3 +R 1 +U 3 +D 1 +U 3 +D 3 +R 2 +U 2 +D 1 +R 3 +D 2 +U 3 +L 1 +R 3 +L 2 +U 1 +L 2 +U 1 +R 1 +U 2 +R 3 +D 2 +U 1 +L 3 +D 2 +L 2 +D 3 +R 1 +U 1 +R 1 +D 1 +L 3 +D 2 +L 3 +D 4 +R 2 +D 4 +L 1 +D 4 +U 2 +R 2 +U 3 +L 4 +D 1 +R 1 +L 4 +U 1 +D 3 +L 2 +R 3 +U 1 +R 2 +U 4 +D 1 +L 2 +R 2 +D 4 +L 2 +D 2 +R 1 +D 2 +L 1 +U 4 +L 3 +U 3 +R 4 +L 3 +U 2 +D 3 +U 2 +D 1 +L 2 +R 1 +L 1 +R 1 +D 3 +L 2 +D 3 +U 2 +L 2 +R 1 +L 2 +D 2 +R 1 +U 3 +D 2 +L 1 +D 2 +U 1 +L 1 +R 1 +D 3 +U 2 +L 4 +U 3 +R 4 +L 2 +D 4 +R 3 +D 4 +U 3 +R 3 +D 3 +R 1 +U 1 +D 2 +U 4 +D 4 +U 3 +D 1 +L 4 +R 2 +L 2 +U 3 +R 2 +D 1 +R 3 +D 1 +L 3 +R 2 +D 1 +L 3 +U 3 +R 4 +U 1 +L 2 +D 3 +R 2 +U 2 +D 4 +U 4 +D 4 +R 3 +D 1 +U 4 +D 3 +R 4 +U 1 +D 2 +L 5 +R 3 +U 1 +L 1 +D 4 +R 3 +U 1 +R 3 +D 5 +R 5 +D 2 +U 2 +L 5 +R 2 +U 1 +L 4 +R 4 +U 3 +D 3 +U 1 +R 4 +U 4 +R 4 +U 3 +D 1 +L 1 +U 2 +R 3 +L 5 +R 3 +D 1 +R 2 +U 1 +L 2 +D 5 +L 2 +D 2 +U 4 +D 2 +R 3 +L 5 +U 4 +D 1 +L 3 +D 4 +L 1 +D 4 +R 2 +D 2 +R 3 +U 2 +D 1 +R 1 +D 4 +R 1 +D 5 +U 4 +D 4 +R 1 +U 2 +D 2 +L 2 +R 1 +L 1 +D 5 +R 4 +D 2 +U 3 +L 1 +U 3 +L 4 +D 5 +R 4 +U 3 +D 1 +U 4 +L 2 +D 5 +L 4 +R 4 +U 4 +L 3 +U 5 +L 1 +R 2 +L 1 +R 1 +L 4 +R 3 +D 3 +U 3 +L 3 +D 4 +R 1 +L 2 +D 4 +U 3 +L 5 +D 1 +L 2 +U 2 +R 2 +L 3 +R 4 +D 4 +U 3 +D 5 +L 3 +U 2 +L 2 +U 2 +R 4 +L 1 +R 6 +D 3 +R 6 +U 1 +L 3 +R 4 +U 3 +L 6 +R 1 +D 3 +R 4 +D 3 +L 1 +U 1 +D 3 +R 2 +L 4 +U 2 +L 2 +U 4 +D 3 +L 5 +D 4 +L 4 +R 2 +D 4 +L 2 +R 5 +U 3 +D 2 +L 1 +R 5 +D 1 +U 1 +R 6 +L 1 +U 4 +D 2 +R 4 +D 5 +R 3 +U 5 +D 1 +R 1 +D 1 +U 6 +R 3 +U 6 +L 3 +R 6 +D 1 +U 1 +D 4 +U 1 +R 1 +D 2 +U 5 +L 5 +U 1 +L 5 +R 5 +U 3 +R 5 +U 4 +L 4 +U 3 +D 5 +R 6 +L 1 +U 3 +R 6 +L 1 +U 6 +R 1 +L 1 +D 3 +L 5 +R 6 +U 2 +R 5 +U 5 +D 5 +R 3 +U 2 +L 6 +D 5 +L 4 +U 5 +D 3 +U 4 +R 3 +D 6 +U 4 +R 4 +U 5 +L 3 +U 5 +R 4 +L 4 +U 3 +L 1 +R 6 +L 4 +U 6 +D 1 +R 4 +U 4 +L 5 +U 3 +D 6 +L 3 +U 1 +L 3 +R 5 +L 5 +R 7 +D 3 +L 4 +R 7 +U 1 +D 2 +R 7 +U 6 +L 2 +D 7 +L 4 +U 4 +L 7 +D 4 +R 7 +D 1 +U 7 +R 4 +D 7 +U 4 +D 4 +R 3 +L 4 +U 3 +L 6 +D 4 +U 1 +R 1 +U 1 +L 7 +D 1 +U 3 +L 3 +R 5 +U 6 +R 5 +U 5 +L 1 +U 5 +R 7 +D 1 +L 6 +R 2 +L 5 +U 3 +D 2 +U 1 +L 2 +R 7 +U 3 +D 6 +U 3 +D 7 +U 2 +D 1 +U 5 +D 2 +L 2 +U 5 +R 1 +D 5 +U 6 +D 5 +U 5 +L 1 +R 7 +L 4 +U 3 +L 7 +R 2 +L 7 +R 5 +D 3 +L 5 +R 2 +U 6 +L 3 +D 6 +U 5 +L 1 +D 7 +U 3 +L 2 +U 7 +D 7 +R 2 +L 1 +U 7 +L 1 +U 3 +R 6 +D 6 +R 6 +D 7 +L 5 +D 4 +U 4 +D 5 +R 5 +D 2 +R 7 +L 4 +U 7 +R 2 +U 3 +L 2 +R 6 +U 8 +R 6 +D 6 +L 7 +D 6 +L 1 +D 4 +U 1 +D 8 +U 8 +L 5 +R 8 +D 1 +R 6 +U 5 +R 3 +L 4 +D 5 +L 2 +D 8 +U 3 +L 7 +U 4 +D 8 +R 6 +U 4 +L 7 +D 8 +L 3 +U 7 +R 1 +U 2 +R 5 +D 2 +R 2 +U 6 +D 1 +R 6 +L 8 +U 5 +R 7 +U 1 +R 5 +L 7 +D 4 +L 7 +U 8 +L 8 +R 4 +L 1 +D 6 +L 6 +U 7 +L 5 +D 1 +U 3 +R 8 +D 2 +R 3 +L 7 +U 5 +R 6 +L 2 +D 2 +R 5 +L 4 +D 1 +U 4 +L 4 +R 7 +U 6 +D 7 +R 1 +L 8 +D 3 +L 7 +U 3 +R 3 +U 1 +D 7 +R 7 +L 7 +U 7 +L 5 +D 1 +R 8 +U 3 +D 1 +U 6 +R 7 +D 6 +L 3 +D 5 +R 8 +L 1 +U 3 +R 2 +U 1 +R 2 +D 5 +R 4 +L 1 +D 4 +U 5 +R 8 +U 2 +L 4 +R 6 +D 1 +U 7 +D 8 +R 1 +L 1 +U 4 +L 2 +U 7 +D 2 +R 7 +D 9 +U 7 +L 1 +D 8 +R 3 +L 1 +R 3 +U 5 +L 5 +D 7 +U 3 +R 4 +U 5 +L 2 +R 2 +D 7 +R 2 +U 4 +L 9 +R 7 +U 6 +R 4 +U 8 +L 2 +R 7 +U 5 +L 6 +R 7 +U 7 +L 4 +D 2 +L 1 +D 4 +R 5 +U 2 +L 3 +R 9 +U 8 +D 5 +L 3 +U 1 +L 2 +D 5 +L 7 +D 7 +U 1 +L 2 +D 8 +R 9 +L 5 +D 8 +U 1 +L 7 +U 9 +R 1 +L 1 +D 3 +R 3 +U 6 +L 4 +R 6 +L 1 +R 6 +U 2 +R 9 +D 3 +R 6 +U 5 +R 9 +L 7 +D 6 +L 9 +D 8 +R 4 +L 3 +U 2 +R 7 +L 5 +D 7 +U 8 +R 5 +L 2 +D 8 +L 4 +R 3 +D 1 +U 3 +D 3 +U 3 +D 3 +R 2 +L 5 +R 9 +L 5 +U 9 +R 3 +D 9 +L 4 +U 3 +L 2 +R 1 +D 1 +R 6 +D 4 +L 6 +R 1 +D 8 +L 3 +R 2 +D 7 +U 2 +L 4 +R 10 +L 9 +R 4 +L 2 +U 10 +R 5 +D 4 +L 7 +U 5 +L 7 +U 7 +D 6 +U 7 +R 5 +L 5 +D 5 +R 10 +D 4 +L 3 +D 4 +U 8 +L 5 +U 5 +L 8 +R 3 +U 5 +D 6 +L 2 +R 1 +L 7 +U 8 +R 2 +L 5 +R 1 +D 2 +U 1 +L 1 +R 5 +U 6 +D 6 +R 2 +U 8 +L 1 +D 8 +L 5 +R 10 +U 7 +R 9 +D 4 +L 4 +U 6 +D 3 +R 3 +L 5 +R 3 +U 6 +R 10 +U 5 +L 6 +R 2 +D 9 +U 2 +D 4 +U 3 +D 2 +U 7 +L 1 +R 3 +L 10 +U 7 +R 7 +U 2 +R 5 +L 3 +D 4 +R 1 +D 3 +L 3 +R 6 +D 6 +R 3 +L 9 +R 3 +L 1 +D 8 +R 9 +U 2 +D 6 +U 2 +L 9 +U 8 +D 2 +L 1 +U 2 +D 10 +U 7 +R 8 +D 4 +L 7 +U 1 +D 1 +U 1 +L 5 +D 5 +L 10 +R 9 +U 5 +L 8 +D 2 +R 2 +L 8 +D 8 +L 11 +U 5 +L 11 +D 9 +L 10 +U 1 +D 9 +R 5 +U 4 +D 2 +R 3 +L 7 +D 7 +L 9 +R 3 +L 3 +U 7 +R 1 +U 4 +R 7 +D 10 +L 8 +U 2 +L 6 +R 1 +U 10 +D 3 +U 2 +L 4 +D 5 +R 6 +L 7 +R 8 +L 4 +U 1 +D 11 +U 5 +R 4 +L 9 +R 8 +L 2 +R 4 +U 10 +D 4 +R 7 +D 3 +U 6 +D 6 +U 3 +L 11 +R 4 +D 6 +U 9 +R 10 +D 8 +U 3 +R 2 +U 7 +D 5 +R 10 +U 5 +R 3 +U 9 +L 2 +D 3 +U 1 +L 10 +U 2 +L 3 +U 10 +L 6 +D 4 +L 1 +D 1 +U 3 +L 10 +R 6 +L 1 +U 2 +R 1 +L 9 +D 4 +L 11 +U 6 +D 3 +L 9 +U 7 +D 3 +U 3 +R 8 +U 11 +R 2 +D 1 +U 3 +R 2 +L 7 +D 5 +R 10 +U 1 +D 10 +L 1 +U 10 +D 11 +U 5 +R 6 +D 6 +R 10 +L 9 +D 3 +U 4 +L 12 +D 7 +R 9 +U 4 +D 10 +L 11 +U 1 +R 3 +U 6 +L 11 +U 10 +R 3 +U 4 +L 9 +U 4 +L 12 +U 4 +D 2 +L 12 +D 12 +L 5 +U 9 +R 7 +D 12 +L 2 +U 3 +R 7 +D 9 +L 2 +R 9 +D 10 +U 6 +R 10 +D 8 +R 8 +L 9 +U 11 +R 5 +D 7 +U 3 +R 7 +U 10 +R 5 +D 4 +U 3 +D 6 +R 11 +U 9 +L 3 +D 5 +R 6 +L 11 +D 5 +R 2 +D 2 +R 8 +D 1 +U 5 +L 3 +U 8 +L 10 +D 7 +R 12 +D 7 +L 8 +D 5 +U 9 +D 10 +L 4 +R 6 +L 9 +R 10 +L 11 +U 8 +D 8 +R 2 +L 5 +U 9 +R 1 +L 12 +D 6 +R 11 +L 4 +R 6 +U 12 +D 5 +U 4 +L 7 +D 2 +R 5 +U 5 +D 7 +R 10 +L 9 +U 4 +D 11 +U 12 +D 6 +U 4 +L 3 +U 4 +R 11 +D 7 +L 11 +R 9 +U 2 +R 7 +D 5 +U 13 +L 10 +U 9 +L 9 +U 4 +D 8 +R 7 +L 8 +U 3 +L 1 +U 6 +D 11 +U 11 +D 12 +L 13 +U 13 +R 8 +D 4 +U 6 +D 3 +U 9 +R 11 +D 6 +R 9 +D 1 +U 8 +D 9 +R 2 +U 3 +R 13 +D 7 +U 6 +D 10 +U 13 +D 4 +U 1 +R 10 +D 9 +U 8 +D 7 +U 7 +L 13 +R 10 +L 8 +D 7 +U 9 +R 8 +L 8 +U 3 +D 5 +L 1 +U 5 +D 9 +R 2 +D 8 +L 7 +U 2 +R 11 +U 9 +D 7 +L 2 +D 9 +R 8 +L 12 +R 4 +D 7 +U 2 +L 8 +U 12 +D 11 +R 9 +U 9 +R 13 +U 3 +L 9 +U 9 +R 5 +U 10 +R 13 +U 6 +D 4 +U 2 +R 7 +D 3 +R 1 +L 4 +R 9 +L 3 +D 6 +L 9 +R 6 +D 1 +L 6 +D 5 +U 10 +R 2 +L 1 +R 1 +L 1 +U 9 +D 5 +U 2 +D 12 +L 9 +U 1 +L 14 +U 9 +L 11 +R 11 +L 3 +D 5 +U 5 +D 8 +L 9 +U 12 +R 11 +L 1 +D 9 +R 9 +L 7 +D 7 +U 4 +D 5 +L 11 +D 9 +R 13 +D 3 +R 9 +D 6 +U 12 +L 2 +D 10 +L 6 +U 12 +R 2 +D 9 +R 2 +D 12 +R 14 +U 3 +R 3 +D 12 +R 13 +U 1 +D 11 +L 1 +D 9 +U 11 +R 9 +D 10 +L 7 +D 13 +R 10 +D 2 +U 7 +L 7 +R 14 +D 10 +R 9 +D 13 +L 7 +U 5 +R 4 +D 4 +R 3 +U 8 +D 8 +R 4 +U 14 +R 8 +U 12 +D 6 +L 11 +D 12 +U 13 +L 13 +U 8 +L 2 +R 7 +U 1 +L 14 +R 1 +D 1 +L 9 +U 1 +R 8 +U 7 +D 13 +U 1 +D 5 +L 8 +R 13 +L 1 +U 14 +L 11 +D 7 +R 7 +L 8 +U 8 +D 9 +U 14 +L 1 +U 7 +D 7 +L 12 +D 7 +L 4 +U 14 +R 2 +D 3 +U 9 +L 9 +D 13 +U 9 +D 5 +U 11 +D 6 +U 10 +L 10 +R 8 +D 11 +L 3 +R 6 +D 10 +R 11 +L 3 +D 15 +R 6 +D 12 +U 4 +R 5 +L 15 +D 9 +L 5 +U 12 +R 2 +D 14 +U 10 +L 1 +U 14 +L 5 +D 12 +U 11 +D 6 +L 12 +R 2 +D 9 +L 15 +D 6 +L 3 +U 6 +L 8 +R 6 +L 11 +U 12 +L 2 +R 12 +U 15 +D 15 +U 1 +L 4 +R 3 +D 9 +U 9 +D 2 +U 2 +R 6 +U 1 +L 4 +R 5 +L 8 +R 2 +U 6 +D 13 +R 12 +L 13 +D 3 +L 9 +U 5 +R 5 +D 3 +R 8 +L 7 +R 12 +L 11 +U 9 +L 4 +D 9 +U 13 +R 15 +D 13 +U 12 +R 1 +L 14 +R 5 +L 8 +U 6 +D 5 +U 6 +D 7 +U 14 +D 4 +R 6 +L 7 +U 4 +L 12 +D 7 +U 11 +L 3 +R 4 +U 4 +L 9 +U 10 +R 9 +D 15 +R 9 +D 6 +L 4 +U 2 +L 5 +R 9 +L 8 +R 2 +D 5 +U 8 +D 11 +L 10 +R 1 +U 10 +L 10 +U 8 +L 8 +R 16 +U 9 +D 5 +L 8 +D 3 +L 5 +R 3 +U 7 +R 9 +U 3 +D 5 +U 11 +R 5 +L 7 +D 3 +R 15 +U 8 +R 12 +U 1 +D 1 +R 12 +L 15 +D 5 +R 5 +U 12 +R 11 +L 7 +U 13 +L 9 +R 14 +U 13 +D 15 +R 15 +D 9 +U 3 +L 15 +D 15 +U 8 +L 2 +U 4 +D 5 +L 10 +R 5 +D 15 +U 15 +L 11 +U 7 +L 3 +D 6 +L 9 +D 9 +U 11 +L 9 +U 2 +R 14 +L 13 +U 8 +D 13 +R 5 +U 5 +L 5 +U 15 +D 8 +U 15 +R 3 +U 12 +L 3 +D 9 +U 12 +D 10 +R 6 +L 16 +D 14 +L 10 +R 11 +U 9 +R 3 +U 15 +L 10 +U 14 +L 1 +D 13 +R 4 +U 8 +R 10 +D 2 +U 1 +L 2 +D 9 +R 10 +L 15 +D 7 +R 5 +D 12 +L 1 +R 8 +D 14 +U 4 +D 11 +R 12 +L 3 +D 6 +U 6 +D 12 +L 15 +U 4 +L 3 +R 10 +L 9 +D 5 +R 17 +U 12 +R 2 +L 2 +D 15 +U 4 +R 4 +L 17 +R 8 +U 12 +R 1 +L 3 +D 1 +R 7 +L 13 +U 14 +D 1 +U 5 +L 2 +R 5 +L 9 +U 6 +D 5 +R 14 +U 11 +D 7 +L 10 +D 10 +L 17 +R 2 +U 9 +D 7 +L 15 +R 8 +D 16 +L 15 +D 8 +L 4 +U 4 +D 5 +R 4 +D 15 +L 8 +D 11 +L 5 +U 5 +D 4 +R 14 +U 16 +R 8 +L 2 +R 16 +L 5 +U 15 +D 13 +L 5 +U 5 +D 6 +R 1 +L 4 +R 4 +U 6 +D 11 +L 8 +R 9 +U 8 +R 10 +U 1 +L 13 +R 10 +L 8 +D 11 +U 9 +L 7 +U 5 +L 15 +D 5 +R 3 +D 16 +L 2 +U 12 +R 15 +U 9 +L 13 +U 15 +L 4 +U 3 +R 3 +L 13 +D 5 +U 16 +R 5 +D 5 +U 9 +L 7 +U 10 +D 1 +R 2 +U 14 +L 13 +U 1 +L 12 +U 10 +D 3 +U 1 +R 14 +D 14 +U 16 +R 6 +U 14 +D 5 +L 18 +D 18 +U 8 +L 2 +R 5 +D 17 +U 18 +R 2 +L 10 +D 6 +R 17 +L 10 +U 1 +R 8 +L 14 +U 10 +R 7 +L 16 +U 9 +D 13 +U 2 +L 1 +D 14 +U 15 +R 15 +D 2 +R 13 +D 3 +R 9 +D 18 +R 16 +L 1 +R 3 +U 1 +R 1 +U 16 +D 17 +U 1 +D 11 +R 11 +D 1 +U 5 +R 1 +L 1 +R 10 +D 5 +R 1 +D 15 +R 14 +L 5 +U 12 +L 8 +R 6 +D 8 +L 5 +D 11 +L 14 +D 5 +R 15 +L 16 +R 12 +L 10 +D 8 +L 3 +R 1 +D 10 +U 13 +D 7 +U 10 +L 13 +D 8 +R 7 +L 13 +R 4 +L 9 +U 6 +D 14 +L 16 +D 18 +R 13 +U 13 +L 17 +R 5 +U 9 +R 11 +D 18 +R 16 +L 4 +D 8 +R 18 +L 14 +R 11 +D 14 +R 2 +D 6 +L 12 +D 3 +U 3 +L 4 +D 7 +L 4 +D 6 +L 12 +D 9 +L 2 +R 16 +L 12 +U 4 +L 12 +U 4 +R 17 +L 8 +U 8 +R 11 +U 14 +D 15 +L 19 +R 1 +L 16 +R 3 +U 15 +R 5 +L 1 +D 17 +L 13 +U 14 +D 9 +U 3 +L 7 +R 11 +D 7 +R 15 +L 6 +U 17 +R 17 +D 17 +U 18 +L 1 +R 8 +L 7 +D 9 +L 5 +D 1 +R 2 +D 16 +U 18 +D 7 +U 13 +L 10 +U 15 +R 18 +U 7 +L 9 +R 6 +U 18 +R 9 +D 8 +L 6 +R 7 +L 11 +U 12 +R 7 +D 4 +U 8 +R 16 +U 17 +D 4 +U 10 +L 19 +D 14 +L 12 +R 18 +D 4 +R 9 +U 12 +R 14 +U 9 +L 16 +D 14 +U 7 +R 14 +L 19 +U 16 +L 18 +U 1 +R 19 +D 7 +R 6 +U 12 +L 16 +R 16 +U 16 +L 6 +R 18 +L 19 +U 10 +D 15 +U 7 +D 1 +U 7 +L 12 +U 4 +R 5 +U 12 +R 18 +D 15 +U 4 +L 8 +U 18 +D 18 +L 3 +R 19 +L 15 +R 11 +U 1 +R 6 +L 8 +R 1 +L 3 diff --git a/day09/solution.nim b/day09/solution.nim new file mode 100644 index 0000000..ef25492 --- /dev/null +++ b/day09/solution.nim @@ -0,0 +1,61 @@ +import strutils +import sequtils +import sets + +type Move = tuple[Direction: char, Distance: int] +type Position = tuple[r: int, c: int] + +proc parse(content: seq[string]): seq[Move] = + let moves = map(content, + proc (line: string): Move = + let temp = line.split(" ") + (temp[0][0], temp[1].parseInt()) + ) + return moves + +proc move(rope: var seq[Position], uniqPositions: var HashSet[Position]): void = + for i in 1 ..< rope.len(): + # rope[i-1] = leader + # rope[i] = follower + let roffset = rope[i-1].r - rope[i].r + let coffset = rope[i-1].c - rope[i].c + + if roffset in [2, -2]: + rope[i].r += int(roffset/2) + if coffset in [-1, 1]: + rope[i].c = rope[i-1].c + + if coffset in [2, -2]: + rope[i].c += int(coffset/2) + if roffset in [-1, 1]: + rope[i].r = rope[i-1].r + + uniqPositions.incl(rope[rope.len()-1]) + +proc emulate(moves: seq[Move], len = 2): int = + var rope = newSeq[Position](len) + var uniqPositions: HashSet[Position] + init(uniqPositions) + echo rope + for move in moves: + for i in 1 .. move.Distance: + case move.Direction: + of 'U': + rope[0].r -= 1 + of 'R': + rope[0].c += 1 + of 'D': + rope[0].r += 1 + of 'L': + rope[0].c -= 1 + else: + assert(false) + move(rope, uniqPositions) + + return len(uniqPositions) + +let content = readFile("./input.txt").strip().splitLines() +let moves = parse(content) + +echo emulate(moves) +echo emulate(moves, 10) -- cgit v1.2.3