From 2b48797e6371ab4ba467270fb6269c4851761d3a Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Fri, 9 Dec 2022 01:21:32 -0500 Subject: [PATCH] Day 9 --- input/09.txt | 2000 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/09.rkt | 47 ++ 2 files changed, 2047 insertions(+) create mode 100644 input/09.txt create mode 100644 src/09.rkt diff --git a/input/09.txt b/input/09.txt new file mode 100644 index 0000000..a32621b --- /dev/null +++ b/input/09.txt @@ -0,0 +1,2000 @@ +L 1 +R 1 +U 1 +R 1 +L 1 +U 2 +L 2 +R 1 +U 2 +D 2 +R 2 +D 2 +R 1 +U 1 +R 2 +L 1 +D 1 +L 2 +R 1 +D 1 +R 1 +U 1 +D 1 +R 1 +D 1 +R 1 +D 2 +L 2 +D 1 +R 2 +L 1 +R 2 +U 2 +R 1 +U 1 +D 2 +U 1 +R 1 +D 1 +R 2 +D 1 +L 2 +R 1 +U 1 +L 1 +U 1 +D 1 +U 1 +D 1 +L 1 +D 1 +R 1 +D 2 +L 1 +D 1 +L 1 +D 1 +R 1 +U 1 +D 2 +R 1 +D 1 +L 2 +D 2 +U 1 +L 1 +U 1 +L 1 +R 2 +U 1 +L 1 +D 1 +R 2 +L 2 +U 1 +D 2 +R 1 +U 1 +R 2 +L 2 +U 1 +L 2 +R 2 +D 1 +L 1 +R 1 +D 2 +L 2 +U 1 +L 2 +R 1 +U 2 +D 1 +U 2 +D 2 +L 2 +D 1 +R 1 +L 2 +R 2 +L 2 +R 2 +L 2 +R 2 +L 1 +U 1 +R 2 +U 1 +D 1 +R 2 +D 2 +R 2 +D 2 +L 2 +R 2 +U 3 +R 1 +U 3 +D 3 +U 1 +L 2 +D 2 +R 3 +D 1 +R 3 +U 1 +L 3 +R 3 +L 1 +U 3 +R 3 +U 3 +R 3 +U 2 +L 2 +D 2 +R 3 +U 2 +L 2 +U 3 +L 2 +R 1 +U 3 +R 2 +U 3 +L 2 +R 2 +U 1 +L 3 +R 3 +L 3 +R 2 +L 3 +D 3 +L 2 +D 1 +R 1 +D 3 +U 3 +R 3 +D 2 +L 2 +D 2 +R 1 +D 1 +U 3 +R 1 +U 2 +L 3 +U 3 +L 2 +D 1 +L 3 +R 2 +D 2 +L 2 +D 3 +L 3 +U 1 +D 3 +U 3 +L 3 +R 2 +D 2 +R 3 +D 2 +R 3 +U 2 +R 1 +L 2 +R 2 +L 1 +D 3 +U 2 +L 2 +U 3 +L 1 +D 1 +L 2 +R 3 +L 1 +D 2 +U 1 +D 3 +U 1 +D 3 +L 1 +U 1 +R 3 +L 2 +U 3 +L 3 +U 1 +L 2 +D 1 +R 2 +L 1 +R 2 +L 2 +D 3 +U 2 +D 2 +U 3 +L 4 +D 4 +R 3 +D 4 +R 1 +L 2 +U 2 +R 1 +U 4 +D 4 +U 4 +D 4 +R 4 +L 2 +U 3 +D 1 +R 4 +D 2 +L 2 +D 1 +L 4 +R 3 +U 2 +D 4 +U 3 +R 3 +L 1 +R 1 +L 2 +D 4 +U 2 +R 1 +L 3 +D 3 +R 4 +U 2 +L 1 +D 3 +R 4 +D 2 +U 3 +D 1 +L 2 +D 2 +R 2 +D 3 +R 2 +U 2 +R 1 +L 1 +U 2 +D 2 +U 3 +D 1 +U 3 +D 1 +R 4 +D 2 +U 1 +L 3 +D 4 +R 3 +D 4 +U 2 +D 1 +R 2 +U 3 +L 3 +D 1 +U 2 +L 3 +D 1 +L 3 +D 1 +U 1 +D 4 +R 1 +D 4 +L 2 +R 3 +D 4 +R 2 +L 3 +D 4 +U 3 +L 4 +U 1 +L 3 +R 1 +L 1 +D 2 +L 1 +U 2 +D 3 +L 1 +R 4 +L 1 +D 2 +U 2 +L 3 +U 3 +L 1 +R 4 +U 3 +D 3 +R 1 +L 2 +R 4 +U 2 +L 3 +U 4 +L 2 +R 4 +D 5 +U 1 +R 2 +D 5 +L 5 +R 1 +D 3 +U 3 +L 3 +U 5 +R 1 +D 1 +R 3 +U 3 +D 1 +R 1 +L 4 +R 1 +L 3 +U 4 +L 3 +R 5 +D 3 +R 2 +U 1 +R 2 +D 2 +L 4 +R 2 +U 1 +L 3 +D 4 +R 4 +L 1 +R 3 +U 3 +D 2 +R 3 +D 3 +U 1 +L 5 +U 1 +L 5 +R 5 +D 1 +U 1 +R 5 +D 4 +L 1 +R 4 +L 5 +D 5 +L 2 +D 1 +L 3 +D 5 +L 4 +R 4 +D 1 +U 1 +D 4 +U 1 +R 4 +L 2 +D 4 +U 1 +L 3 +R 3 +L 3 +R 3 +D 2 +R 3 +L 5 +R 1 +L 1 +R 3 +D 5 +U 5 +L 3 +U 3 +L 5 +D 3 +L 2 +U 5 +D 5 +U 5 +D 4 +U 4 +R 5 +U 3 +D 5 +R 1 +L 4 +U 1 +L 4 +R 2 +D 1 +U 4 +L 5 +D 2 +R 1 +U 1 +R 3 +U 1 +R 4 +U 4 +L 1 +R 2 +U 5 +D 2 +L 5 +U 4 +D 2 +R 1 +D 1 +U 6 +D 5 +L 4 +U 5 +R 1 +L 3 +D 2 +R 3 +U 6 +L 2 +R 6 +D 1 +R 5 +D 1 +L 1 +R 2 +L 4 +R 3 +L 4 +D 6 +R 5 +U 1 +L 4 +D 2 +L 2 +D 3 +L 2 +D 5 +R 4 +D 3 +L 2 +D 4 +R 1 +U 5 +L 5 +U 5 +D 2 +L 3 +D 4 +L 3 +U 4 +L 4 +U 6 +D 6 +U 4 +R 2 +D 3 +U 1 +R 4 +D 3 +R 1 +D 2 +R 3 +L 2 +D 2 +L 4 +D 5 +L 5 +R 2 +L 1 +R 2 +D 2 +R 4 +U 4 +R 5 +L 4 +D 1 +L 6 +R 4 +D 2 +R 6 +L 6 +D 3 +R 2 +D 2 +U 4 +R 2 +U 2 +L 2 +R 5 +D 5 +U 6 +D 6 +L 5 +R 1 +U 3 +L 1 +D 1 +U 2 +R 5 +L 2 +D 2 +U 4 +R 2 +D 2 +U 1 +D 2 +R 3 +L 6 +U 1 +D 6 +R 3 +D 6 +R 1 +D 7 +R 7 +L 4 +R 4 +D 5 +U 6 +R 2 +L 3 +R 5 +L 5 +U 6 +D 3 +U 5 +D 3 +U 5 +R 7 +L 5 +U 7 +L 6 +U 5 +D 1 +L 7 +U 6 +L 3 +D 1 +L 6 +U 4 +D 1 +U 1 +R 1 +L 3 +D 6 +L 6 +R 3 +D 3 +U 2 +R 1 +D 6 +U 7 +R 6 +L 4 +R 4 +D 7 +R 1 +D 5 +U 6 +D 4 +R 6 +L 2 +U 4 +D 7 +R 5 +D 6 +U 7 +R 6 +D 6 +U 1 +D 4 +L 2 +U 2 +R 7 +U 1 +L 1 +U 1 +L 7 +D 3 +U 5 +D 5 +L 1 +D 4 +L 3 +U 7 +L 6 +R 7 +U 6 +R 1 +L 3 +R 1 +D 3 +L 7 +R 4 +L 3 +D 2 +L 7 +D 2 +R 5 +L 7 +D 6 +L 6 +D 3 +L 3 +D 5 +U 3 +L 5 +R 6 +L 1 +U 5 +R 4 +U 2 +D 3 +R 5 +L 4 +U 5 +D 7 +R 1 +L 3 +U 5 +D 3 +L 6 +R 2 +L 2 +U 6 +R 3 +U 7 +R 3 +D 1 +L 2 +U 7 +L 6 +D 3 +L 8 +R 6 +D 3 +L 5 +R 5 +U 5 +R 8 +D 7 +R 7 +U 8 +L 5 +D 6 +R 6 +L 6 +D 8 +U 1 +R 4 +L 3 +R 6 +L 6 +D 5 +R 4 +D 8 +L 4 +R 4 +D 3 +L 2 +U 6 +L 8 +R 1 +U 5 +L 4 +D 8 +R 6 +D 5 +U 6 +L 5 +R 1 +L 8 +U 7 +R 6 +D 4 +U 2 +D 8 +U 3 +D 7 +R 6 +D 8 +R 8 +U 8 +D 7 +L 3 +D 4 +L 1 +U 4 +R 4 +U 2 +D 6 +R 1 +D 8 +R 2 +D 4 +R 5 +L 1 +R 7 +L 3 +D 1 +U 1 +R 7 +U 5 +D 1 +L 2 +R 8 +D 8 +L 5 +U 8 +D 4 +L 5 +D 3 +U 2 +L 7 +R 2 +L 5 +U 3 +R 3 +U 6 +R 6 +D 4 +R 3 +U 4 +D 5 +U 6 +R 3 +L 4 +R 5 +L 4 +R 8 +U 6 +L 6 +U 1 +L 5 +R 3 +U 1 +D 5 +U 8 +R 1 +L 2 +R 3 +L 8 +U 6 +L 4 +R 3 +L 3 +R 7 +L 9 +D 5 +R 8 +L 5 +U 7 +D 7 +R 6 +L 8 +U 4 +D 5 +R 8 +L 4 +R 8 +U 9 +R 9 +L 8 +D 9 +L 9 +D 6 +R 1 +L 8 +U 4 +L 6 +U 5 +R 9 +L 5 +D 6 +R 9 +D 9 +U 6 +L 1 +U 8 +L 7 +R 9 +U 4 +R 6 +U 1 +R 5 +U 5 +L 4 +R 4 +D 7 +L 6 +U 3 +R 9 +U 1 +L 6 +U 5 +L 5 +U 2 +L 3 +U 2 +D 6 +R 8 +L 5 +U 4 +D 4 +R 4 +D 6 +L 8 +U 9 +R 4 +L 3 +D 1 +U 2 +D 5 +U 3 +D 3 +L 2 +D 3 +L 4 +D 5 +L 9 +D 9 +U 2 +D 8 +R 4 +L 8 +R 9 +D 7 +L 3 +D 2 +R 2 +L 4 +D 7 +R 6 +D 8 +R 9 +L 3 +D 5 +U 1 +L 8 +D 6 +R 9 +U 6 +R 9 +D 6 +L 9 +U 5 +D 10 +L 4 +U 10 +R 3 +U 7 +D 4 +L 3 +R 8 +L 4 +U 10 +R 8 +L 10 +U 8 +R 5 +L 8 +U 6 +L 5 +D 7 +L 6 +U 6 +L 9 +R 8 +U 6 +D 7 +L 10 +R 2 +D 7 +L 8 +U 5 +L 2 +D 2 +U 7 +D 6 +R 7 +D 2 +U 3 +R 10 +D 2 +U 6 +D 6 +L 8 +D 2 +L 2 +D 10 +L 2 +D 1 +L 10 +D 6 +R 6 +L 7 +D 9 +R 2 +D 5 +U 2 +R 4 +L 4 +D 1 +L 3 +R 10 +U 9 +L 4 +D 10 +L 10 +D 4 +U 2 +R 1 +L 4 +D 6 +U 2 +L 6 +R 4 +U 1 +L 9 +R 7 +L 8 +U 5 +R 1 +D 6 +L 4 +U 9 +D 1 +L 5 +R 10 +D 4 +L 6 +U 8 +R 4 +L 5 +D 10 +R 8 +D 8 +R 4 +D 5 +R 7 +L 10 +D 3 +R 1 +L 4 +R 8 +L 10 +D 2 +L 3 +D 6 +L 8 +R 10 +L 2 +D 8 +R 5 +L 8 +D 1 +U 6 +D 11 +U 7 +L 1 +U 6 +R 9 +L 8 +R 5 +U 9 +D 5 +L 10 +U 6 +L 3 +D 4 +U 6 +D 10 +L 2 +D 9 +L 5 +R 8 +D 1 +R 1 +U 1 +D 4 +R 4 +U 6 +L 9 +U 7 +R 11 +L 8 +D 3 +R 9 +L 11 +U 9 +L 4 +D 10 +U 9 +L 7 +R 9 +U 1 +R 8 +U 4 +L 3 +U 2 +D 7 +R 6 +U 1 +D 10 +U 9 +R 6 +L 6 +D 4 +U 3 +L 10 +R 10 +U 6 +R 8 +L 9 +R 2 +D 7 +R 4 +U 6 +R 2 +L 4 +D 1 +L 10 +U 9 +R 11 +U 11 +R 1 +D 5 +L 8 +U 3 +R 1 +U 4 +D 10 +U 6 +L 8 +R 4 +L 7 +R 8 +D 3 +L 9 +U 4 +L 6 +R 2 +D 2 +U 9 +D 6 +R 8 +L 2 +U 7 +L 2 +R 8 +L 7 +D 5 +R 10 +U 5 +L 10 +U 6 +R 8 +U 9 +L 7 +D 11 +U 10 +L 4 +D 5 +R 4 +L 7 +U 5 +D 8 +R 6 +D 9 +L 4 +U 9 +R 6 +D 1 +U 6 +R 8 +U 10 +D 6 +U 10 +L 3 +D 1 +L 1 +R 9 +D 10 +L 10 +U 12 +D 3 +L 2 +U 6 +L 9 +U 2 +R 6 +D 8 +R 11 +L 1 +U 3 +R 1 +U 9 +R 12 +U 3 +D 11 +U 3 +D 10 +U 12 +L 11 +R 9 +U 9 +D 11 +L 8 +D 4 +R 4 +U 4 +D 1 +L 7 +R 10 +L 4 +R 4 +U 11 +D 3 +L 6 +R 10 +L 9 +R 11 +U 6 +D 2 +U 2 +L 3 +D 11 +U 6 +D 12 +L 5 +R 5 +D 6 +R 5 +U 2 +R 8 +L 7 +D 7 +R 3 +D 8 +U 6 +D 1 +U 1 +D 4 +L 3 +D 12 +L 8 +D 8 +U 7 +R 1 +D 10 +L 5 +D 7 +L 1 +U 4 +R 12 +L 8 +U 2 +L 2 +U 1 +L 8 +U 3 +L 12 +R 3 +D 11 +R 1 +U 4 +D 12 +L 3 +U 2 +R 5 +U 2 +R 7 +U 8 +L 5 +R 1 +D 5 +R 12 +D 8 +R 9 +D 7 +L 2 +R 2 +U 9 +D 6 +U 6 +R 2 +D 2 +R 9 +D 4 +R 12 +D 13 +R 9 +L 3 +D 8 +L 13 +U 2 +R 10 +U 12 +D 12 +U 3 +L 6 +D 8 +U 1 +L 12 +D 9 +L 7 +R 2 +D 4 +R 5 +L 7 +R 12 +U 4 +L 7 +D 4 +U 10 +L 2 +D 1 +U 5 +R 5 +U 2 +L 9 +D 10 +L 1 +R 7 +L 6 +D 1 +L 12 +R 6 +U 10 +R 2 +D 10 +R 5 +L 3 +R 8 +D 1 +R 12 +L 7 +U 5 +L 11 +D 4 +U 11 +D 1 +U 11 +L 1 +D 11 +U 11 +D 4 +U 8 +R 5 +D 6 +L 12 +R 5 +D 10 +L 2 +D 5 +R 10 +U 6 +D 6 +R 4 +D 7 +L 2 +D 5 +U 2 +R 9 +L 11 +U 13 +D 9 +L 11 +D 8 +L 2 +D 4 +R 13 +L 5 +U 12 +R 11 +U 5 +L 8 +U 5 +D 7 +U 1 +R 9 +D 4 +U 3 +R 9 +L 3 +D 7 +R 8 +D 7 +L 2 +U 4 +L 12 +U 13 +L 12 +R 8 +L 3 +R 12 +L 4 +U 12 +R 13 +D 10 +L 8 +U 12 +R 5 +L 1 +U 2 +L 3 +U 2 +D 12 +L 12 +U 11 +L 2 +R 6 +U 3 +L 2 +R 7 +U 7 +L 3 +R 8 +L 11 +D 2 +U 1 +R 12 +D 1 +R 4 +L 13 +U 14 +R 14 +D 12 +R 12 +D 11 +L 11 +U 2 +L 6 +D 8 +L 5 +D 7 +R 2 +L 14 +U 12 +R 13 +L 7 +D 2 +U 4 +D 5 +R 5 +L 7 +R 7 +U 1 +R 10 +D 11 +L 7 +U 2 +R 5 +L 11 +U 11 +R 9 +U 9 +R 12 +D 14 +R 5 +L 9 +U 2 +D 12 +L 6 +U 7 +R 5 +L 10 +D 10 +U 4 +D 13 +L 13 +D 3 +R 8 +D 10 +U 12 +L 14 +U 7 +D 6 +R 4 +U 11 +R 2 +L 5 +D 12 +R 4 +L 4 +D 5 +L 12 +U 3 +L 3 +U 7 +R 4 +L 2 +R 7 +L 5 +D 5 +R 9 +L 5 +D 12 +R 3 +U 1 +D 6 +U 2 +R 10 +L 4 +U 12 +R 15 +L 2 +R 3 +D 8 +L 13 +D 3 +R 5 +D 5 +L 5 +U 7 +L 4 +R 10 +D 11 +L 3 +R 1 +U 4 +D 15 +L 8 +U 10 +L 5 +D 1 +R 5 +D 15 +R 3 +U 9 +R 4 +D 3 +L 15 +U 6 +D 10 +U 2 +R 6 +U 10 +L 12 +R 8 +D 12 +R 14 +U 10 +D 1 +L 1 +D 8 +U 3 +R 11 +D 7 +L 5 +D 14 +R 1 +D 8 +R 6 +U 6 +D 1 +U 14 +R 12 +L 5 +U 5 +L 14 +U 1 +D 3 +R 6 +U 4 +R 9 +L 13 +R 2 +U 10 +R 11 +U 7 +D 8 +U 14 +L 4 +R 3 +U 6 +R 2 +D 14 +U 10 +D 13 +U 8 +R 12 +L 12 +U 6 +L 4 +U 5 +D 6 +U 8 +L 12 +D 1 +L 3 +R 4 +L 11 +R 5 +D 3 +U 6 +D 15 +R 14 +U 8 +R 10 +U 15 +R 13 +L 13 +U 4 +D 3 +U 4 +D 1 +U 5 +R 5 +D 4 +R 2 +D 13 +R 7 +D 10 +U 3 +R 15 +D 3 +U 13 +R 16 +U 2 +D 6 +L 13 +R 8 +L 5 +R 1 +U 7 +R 6 +U 6 +R 10 +U 5 +L 14 +R 12 +U 8 +R 13 +U 4 +L 10 +R 16 +L 15 +D 7 +R 14 +D 8 +U 8 +L 15 +R 2 +U 11 +L 6 +R 6 +D 2 +U 9 +D 12 +L 10 +U 7 +R 8 +L 4 +D 5 +R 13 +L 9 +U 15 +D 11 +R 11 +D 8 +L 10 +R 14 +D 3 +R 10 +U 1 +R 11 +L 16 +R 12 +D 15 +L 13 +U 2 +L 11 +U 15 +D 9 +R 1 +D 13 +L 16 +U 9 +D 2 +R 5 +U 9 +R 11 +L 16 +U 5 +R 11 +U 8 +L 15 +U 1 +L 11 +U 3 +L 4 +U 9 +L 5 +U 11 +D 9 +U 4 +L 14 +U 8 +L 16 +D 9 +U 5 +L 14 +R 13 +U 8 +L 4 +R 9 +L 4 +R 7 +D 15 +U 14 +D 8 +U 6 +R 11 +L 15 +D 10 +R 2 +L 12 +R 11 +D 7 +R 11 +L 4 +R 4 +D 4 +R 3 +U 15 +L 6 +R 8 +L 5 +U 13 +D 6 +R 1 +D 15 +L 9 +U 2 +L 13 +R 10 +U 8 +R 15 +D 16 +L 13 +U 13 +L 12 +R 10 +U 16 +L 10 +R 14 +D 17 +R 4 +D 16 +U 17 +R 8 +D 10 +R 11 +L 10 +U 17 +L 11 +U 3 +L 4 +U 2 +D 10 +R 15 +U 1 +R 5 +L 12 +D 4 +R 1 +U 15 +R 13 +L 17 +R 15 +D 4 +L 14 +R 3 +D 1 +U 14 +R 11 +D 12 +L 7 +D 11 +R 12 +U 1 +R 5 +L 11 +D 9 +U 8 +R 1 +U 4 +L 15 +R 12 +U 17 +R 4 +U 14 +L 4 +D 16 +R 9 +U 9 +D 11 +L 7 +D 16 +R 10 +L 10 +R 15 +U 10 +R 6 +L 4 +R 6 +L 12 +U 9 +R 15 +D 12 +L 14 +U 14 +D 6 +U 4 +R 17 +U 2 +L 5 +R 13 +D 15 +U 13 +L 5 +D 3 +L 7 +U 12 +R 13 +D 15 +U 15 +L 17 +U 17 +L 6 +R 2 +U 17 +R 7 +L 15 +U 17 +R 11 +L 2 +U 1 +D 4 +U 2 +R 10 +L 9 +D 18 +U 5 +D 7 +R 18 +L 11 +D 2 +U 13 +D 12 +R 10 +D 2 +R 9 +L 3 +D 9 +R 9 +L 17 +R 4 +L 7 +D 16 +L 5 +R 3 +L 8 +U 7 +R 8 +L 1 +D 12 +U 13 +R 8 +D 18 +U 7 +R 6 +D 7 +L 7 +D 8 +R 16 +L 13 +R 6 +U 1 +L 9 +U 9 +L 12 +D 13 +R 18 +L 7 +D 18 +U 17 +R 18 +D 11 +R 1 +D 4 +U 3 +L 7 +D 17 +R 8 +U 11 +D 7 +L 4 +R 12 +U 10 +L 15 +R 14 +U 16 +D 4 +L 10 +U 6 +D 18 +R 7 +U 13 +R 11 +D 14 +L 5 +U 5 +L 7 +R 15 +L 16 +U 6 +D 9 +L 17 +R 4 +L 16 +D 10 +U 16 +D 17 +R 7 +L 16 +U 6 +L 15 +R 13 +U 8 +L 14 +R 12 +U 5 +D 17 +R 13 +D 12 +U 12 +L 16 +R 8 +U 4 +D 6 +U 10 +D 14 +R 18 +L 17 +U 15 +L 5 +U 7 +D 15 +U 10 +R 18 +L 11 +D 10 +R 12 +U 15 +D 11 +U 7 +D 3 +R 2 +U 5 +R 12 +U 15 +R 12 +U 19 +L 6 +U 18 +D 8 +L 7 +D 2 +R 1 +L 16 +D 5 +L 9 +U 11 +L 6 +U 7 +L 2 +D 18 +L 1 +U 19 +D 15 +U 8 +R 5 +U 13 +L 7 +R 14 +U 2 +D 10 +U 16 +D 3 +R 8 +L 10 +D 17 +U 16 +D 6 +R 18 +D 5 +L 5 +D 4 +L 6 +U 17 +D 7 +R 15 +D 5 +R 18 +L 6 +U 15 +L 3 +U 13 +L 15 +R 5 +D 9 +R 11 +U 15 +L 19 +D 11 +L 8 +D 14 +R 7 +L 16 +D 5 +R 13 +D 5 +L 9 +D 3 +L 3 +R 12 +U 17 +R 8 +L 11 +U 2 +R 9 +L 3 +D 6 +L 9 +U 11 +R 6 +U 19 +R 6 +L 12 +U 5 +R 4 +U 4 +L 16 +R 17 +D 12 +U 11 +R 4 +D 11 +U 4 +R 8 +U 9 +R 12 +U 13 +L 2 +D 9 +L 2 diff --git a/src/09.rkt b/src/09.rkt new file mode 100644 index 0000000..70c8a1e --- /dev/null +++ b/src/09.rkt @@ -0,0 +1,47 @@ +#lang curly-fn racket + +(require "../lib.rkt") + +(define input (map #{string-split %1 " "} (problem-input 9))) + +(define (sign H T) + (cond + [(> H T) 1] + [(= H T) 0] + [(< H T) -1])) + +(define (follow xH yH xT yT) + (if (or (and (= xH xT) (> (abs (- yH yT)) 1)) + (and (= yH yT) (> (abs (- xH xT)) 1)) + (> (+ (abs (- xH xT)) (abs (- yH yT))) 2)) + (values (+ xT (sign xH xT)) (+ yT (sign yH yT))) + (values xT yT))) + +(define (model knots) + (define visited (mutable-set)) + (for/fold ([xH 0] [yH 0] + [xTs (repeat knots '(0))] + [yTs (repeat knots '(0))]) + ([motion input]) + (match-let* ([`(,dir , n) motion] + [n (string->number n)]) + (for/fold ([xH xH] [yH yH] + [xTs xTs] [yTs yTs]) + ([_ (in-range n)]) + (define-values (xH* yH*) + (match dir + ["U" (values xH (add1 yH))] + ["D" (values xH (sub1 yH))] + ["R" (values (add1 xH) yH)] + ["L" (values (sub1 xH) yH)])) + (define-values (xTs* yTs*) + (for/fold ([xTs `(,xH)] [yTs `(,yH)] + #:result (values (rest (reverse xTs)) (rest (reverse yTs)))) + ([xT xTs] [yT yTs]) + (define-values (xT* yT*) (follow (first xTs) (first yTs) xT yT)) + (values (cons xT* xTs) (cons yT* yTs)))) + (set-add! visited (cons (last xTs*) (last yTs*))) + (values xH* yH* xTs* yTs*)))) + (set-count visited)) + +(show-solution (model 1) (model 9)) \ No newline at end of file