From 3550a4a8b3e1991ea50197ab1940d9a693245845 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Fri, 9 Dec 2022 10:40:45 +0100 Subject: [PATCH 1/4] 2022: d09: ex1: add input --- 2022/d09/ex1/input | 2000 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2000 insertions(+) create mode 100644 2022/d09/ex1/input diff --git a/2022/d09/ex1/input b/2022/d09/ex1/input new file mode 100644 index 0000000..72de61f --- /dev/null +++ b/2022/d09/ex1/input @@ -0,0 +1,2000 @@ +U 1 +L 2 +U 2 +D 2 +L 2 +U 1 +D 1 +U 2 +D 1 +U 2 +D 1 +R 2 +U 2 +L 1 +U 2 +D 2 +R 1 +U 1 +R 2 +L 1 +R 2 +D 2 +R 2 +D 2 +U 1 +R 1 +D 2 +L 2 +D 1 +R 2 +D 2 +R 1 +L 2 +R 1 +L 2 +R 1 +U 1 +D 2 +L 1 +D 1 +R 1 +U 1 +D 2 +L 1 +U 1 +L 2 +R 1 +D 2 +U 1 +L 1 +D 1 +L 1 +R 2 +D 1 +L 1 +R 1 +L 2 +D 2 +U 2 +D 1 +R 2 +U 1 +L 1 +U 2 +L 1 +U 2 +R 2 +U 1 +D 1 +L 2 +R 2 +D 2 +L 1 +D 2 +R 2 +D 1 +L 1 +D 2 +L 1 +R 1 +L 1 +R 2 +U 1 +R 1 +D 1 +R 1 +D 2 +R 2 +D 2 +U 1 +L 1 +D 1 +R 1 +L 2 +D 1 +U 2 +D 1 +R 1 +D 2 +U 2 +D 1 +R 1 +D 1 +R 1 +U 2 +L 1 +U 1 +R 1 +L 2 +R 1 +L 1 +D 2 +L 2 +R 1 +D 3 +L 3 +U 1 +R 2 +U 1 +R 2 +L 1 +D 1 +L 3 +U 2 +L 3 +D 1 +U 2 +L 3 +U 1 +R 2 +L 1 +R 1 +L 2 +D 2 +R 3 +L 1 +U 1 +L 1 +R 1 +U 1 +D 3 +L 3 +D 2 +R 2 +L 2 +D 1 +U 2 +L 2 +U 1 +R 3 +D 3 +L 3 +R 2 +D 3 +L 3 +U 1 +D 3 +L 2 +R 2 +D 3 +R 2 +L 1 +U 3 +D 2 +R 2 +D 3 +U 1 +D 3 +R 3 +D 2 +U 1 +L 2 +D 2 +U 2 +R 1 +L 3 +U 2 +R 2 +U 1 +R 2 +D 1 +R 2 +D 3 +U 1 +L 1 +U 2 +L 1 +D 2 +R 1 +U 1 +D 1 +R 3 +U 3 +R 1 +U 1 +L 3 +D 2 +R 2 +U 1 +R 2 +D 2 +R 3 +L 2 +U 2 +R 1 +L 3 +U 2 +R 1 +D 3 +L 2 +U 2 +R 3 +U 3 +L 1 +R 3 +D 3 +L 2 +R 3 +D 2 +R 3 +U 3 +R 1 +U 2 +D 4 +L 3 +D 2 +L 4 +R 2 +D 4 +L 1 +R 3 +L 1 +D 4 +U 4 +D 1 +R 4 +U 2 +D 2 +R 1 +U 2 +D 1 +L 3 +D 2 +U 2 +L 1 +R 3 +L 3 +U 3 +L 2 +R 1 +D 2 +R 3 +L 2 +D 4 +U 2 +L 3 +R 3 +L 3 +U 4 +D 4 +L 1 +U 3 +R 4 +L 4 +D 4 +U 3 +R 4 +L 2 +D 1 +U 1 +L 4 +D 3 +U 3 +R 2 +D 3 +U 4 +L 2 +R 1 +L 2 +R 2 +U 3 +L 1 +D 4 +U 1 +L 4 +R 3 +L 3 +R 2 +D 4 +U 4 +L 4 +D 3 +R 1 +D 3 +R 4 +L 4 +R 2 +L 2 +D 2 +R 2 +L 2 +U 3 +R 3 +D 2 +R 4 +L 1 +R 2 +U 4 +L 2 +R 1 +U 2 +R 3 +D 2 +U 1 +R 4 +L 3 +U 3 +D 4 +U 1 +L 1 +R 1 +D 2 +R 1 +D 1 +L 2 +D 4 +U 4 +L 4 +U 3 +D 4 +U 4 +D 3 +U 3 +L 5 +U 4 +L 4 +U 5 +D 1 +L 5 +U 2 +D 4 +U 5 +L 4 +U 2 +D 4 +R 3 +L 5 +U 2 +L 1 +U 5 +L 4 +D 2 +U 5 +R 3 +D 2 +U 3 +L 3 +R 3 +D 5 +U 4 +D 5 +U 4 +R 1 +L 1 +U 3 +L 3 +R 4 +L 1 +U 2 +D 3 +U 5 +L 3 +R 5 +D 3 +U 4 +L 1 +U 3 +R 2 +L 2 +U 5 +D 3 +L 5 +D 1 +R 3 +L 5 +R 1 +D 2 +U 3 +D 2 +L 4 +D 4 +R 5 +L 5 +U 1 +L 5 +R 3 +L 3 +U 4 +R 3 +L 3 +R 1 +L 2 +D 1 +U 3 +L 5 +R 1 +L 5 +U 3 +R 4 +U 4 +D 3 +U 2 +L 5 +D 3 +L 3 +R 2 +D 2 +U 3 +D 3 +R 2 +D 3 +L 1 +R 1 +U 1 +L 3 +R 2 +U 3 +R 1 +D 5 +U 5 +L 5 +D 2 +U 4 +D 3 +U 3 +L 4 +D 3 +U 2 +R 1 +D 4 +L 3 +U 5 +D 2 +L 5 +R 4 +D 3 +L 4 +D 3 +R 4 +D 5 +R 2 +L 3 +D 5 +U 3 +R 4 +U 6 +L 5 +D 3 +U 4 +L 1 +U 5 +R 5 +D 3 +U 5 +D 5 +R 2 +D 2 +U 4 +D 2 +U 3 +R 6 +U 4 +L 2 +R 2 +U 3 +L 1 +U 5 +R 6 +L 1 +D 5 +R 5 +D 5 +L 2 +U 3 +L 4 +R 2 +U 3 +L 2 +U 2 +D 4 +L 4 +R 5 +L 6 +D 2 +L 4 +R 2 +D 4 +L 1 +D 6 +R 2 +U 5 +D 2 +L 6 +U 5 +L 4 +U 1 +D 3 +U 1 +L 5 +U 2 +R 6 +D 5 +U 4 +L 5 +U 1 +L 5 +U 2 +R 5 +U 2 +R 4 +D 4 +R 1 +D 6 +R 5 +L 5 +U 6 +D 2 +R 1 +L 4 +U 3 +D 6 +R 4 +L 3 +R 6 +U 2 +R 1 +U 4 +R 5 +U 1 +D 4 +U 1 +L 3 +D 2 +L 2 +D 2 +L 2 +U 6 +D 4 +L 5 +D 2 +U 1 +L 5 +D 2 +R 3 +L 2 +D 2 +U 4 +L 4 +U 6 +L 1 +R 7 +L 4 +U 1 +L 1 +U 6 +L 1 +D 2 +L 5 +R 3 +U 6 +L 6 +U 2 +D 4 +L 2 +R 6 +L 3 +D 4 +L 1 +R 6 +D 4 +U 2 +D 4 +R 2 +D 1 +U 3 +R 6 +U 4 +D 2 +L 6 +R 5 +L 3 +U 1 +L 3 +U 3 +L 7 +R 1 +L 4 +D 5 +U 6 +L 3 +U 2 +L 1 +D 2 +R 4 +D 7 +R 1 +D 5 +L 1 +D 2 +U 2 +R 1 +L 1 +U 2 +D 2 +R 4 +D 7 +L 7 +D 1 +L 4 +R 7 +U 3 +L 4 +R 3 +U 2 +R 5 +U 5 +L 5 +U 2 +L 7 +R 4 +U 2 +L 5 +R 4 +U 7 +L 7 +R 5 +L 6 +D 4 +L 1 +D 6 +L 5 +R 5 +L 7 +R 5 +D 4 +U 4 +L 5 +U 7 +D 6 +U 3 +L 5 +U 4 +D 1 +L 1 +D 7 +R 3 +D 7 +U 3 +D 7 +R 4 +U 5 +L 7 +R 4 +L 5 +R 1 +D 4 +L 3 +U 1 +R 3 +L 1 +U 4 +R 3 +L 5 +D 2 +R 2 +L 4 +D 4 +L 7 +R 7 +U 2 +D 7 +L 5 +U 3 +L 4 +U 7 +R 6 +D 3 +L 2 +R 7 +L 5 +U 6 +D 6 +L 2 +D 2 +L 5 +D 7 +U 5 +L 3 +D 4 +U 4 +L 4 +R 2 +D 8 +L 3 +R 2 +D 4 +L 4 +U 7 +R 8 +D 6 +R 7 +U 1 +R 6 +U 6 +R 4 +D 8 +L 3 +R 3 +D 2 +U 5 +D 8 +L 3 +D 5 +L 7 +R 5 +L 1 +D 4 +L 7 +U 7 +L 8 +D 7 +L 5 +U 3 +R 4 +U 3 +L 7 +R 8 +D 6 +R 2 +D 3 +R 1 +D 6 +U 8 +D 6 +L 2 +R 8 +D 4 +U 3 +D 5 +U 2 +L 3 +U 1 +R 7 +U 6 +D 5 +R 5 +U 4 +L 1 +D 3 +U 7 +L 8 +U 5 +D 5 +U 4 +D 3 +L 5 +D 5 +R 5 +D 3 +R 4 +U 4 +R 8 +L 4 +D 4 +L 2 +D 4 +R 7 +L 8 +R 7 +L 1 +D 3 +U 6 +R 5 +D 1 +U 4 +R 7 +U 1 +R 2 +L 8 +U 8 +D 2 +L 9 +U 9 +D 4 +U 8 +D 3 +R 1 +U 3 +D 1 +R 7 +L 2 +U 4 +L 4 +U 9 +L 7 +U 2 +L 4 +D 5 +R 8 +L 5 +R 4 +U 2 +L 5 +U 2 +D 1 +L 9 +R 5 +D 6 +U 3 +D 5 +U 2 +L 1 +R 7 +U 1 +L 7 +U 1 +L 5 +D 6 +R 6 +D 7 +U 6 +D 7 +L 7 +D 2 +L 6 +D 4 +U 7 +D 4 +L 8 +D 5 +R 7 +L 9 +D 9 +U 3 +D 2 +U 9 +R 4 +D 3 +U 9 +R 4 +D 6 +L 2 +D 1 +L 5 +U 2 +L 5 +D 1 +R 7 +L 9 +R 6 +D 8 +L 2 +R 5 +D 6 +L 9 +U 8 +R 2 +D 4 +R 5 +U 3 +D 4 +R 6 +D 5 +U 9 +D 6 +L 3 +D 6 +R 6 +D 5 +R 7 +U 5 +L 2 +U 2 +D 5 +U 4 +D 8 +R 6 +U 8 +D 2 +R 9 +U 6 +L 1 +U 6 +L 5 +U 10 +D 2 +U 6 +R 10 +L 7 +U 4 +R 2 +D 1 +U 3 +D 6 +L 10 +U 4 +L 5 +D 10 +R 1 +L 5 +R 5 +U 6 +R 1 +D 7 +L 7 +D 4 +L 4 +D 10 +U 1 +R 9 +L 7 +D 7 +L 6 +D 7 +U 7 +R 5 +L 6 +U 3 +L 1 +D 4 +L 1 +D 3 +U 10 +D 10 +L 3 +R 6 +U 4 +D 2 +L 4 +U 1 +R 9 +D 8 +U 7 +R 10 +U 10 +L 4 +U 1 +L 9 +R 7 +L 8 +R 10 +D 6 +U 1 +R 1 +D 10 +R 4 +L 6 +D 2 +U 9 +R 6 +L 4 +U 10 +R 10 +U 4 +D 8 +U 8 +L 9 +R 9 +D 7 +L 1 +D 6 +L 7 +U 4 +L 6 +R 9 +D 6 +L 5 +D 5 +L 5 +U 6 +R 1 +D 4 +R 6 +L 5 +U 9 +R 3 +D 3 +L 10 +D 6 +U 5 +D 6 +R 6 +D 7 +R 3 +D 2 +L 2 +D 9 +U 1 +D 1 +L 1 +D 3 +U 3 +R 4 +U 1 +L 9 +U 9 +R 4 +D 10 +U 2 +L 4 +U 3 +D 1 +R 10 +U 7 +R 5 +D 6 +L 2 +U 5 +L 5 +U 5 +L 4 +D 8 +R 7 +L 5 +R 6 +U 4 +L 7 +D 4 +R 9 +D 7 +R 7 +L 2 +D 8 +L 9 +D 2 +L 7 +U 10 +R 3 +U 5 +R 3 +D 9 +U 9 +D 11 +U 6 +R 3 +U 11 +D 11 +L 11 +U 6 +D 10 +R 9 +U 11 +R 6 +L 4 +R 5 +L 11 +D 9 +L 10 +R 4 +D 11 +R 2 +L 6 +R 3 +U 4 +L 10 +U 6 +D 9 +L 5 +U 3 +R 2 +U 5 +L 7 +U 1 +L 10 +U 9 +R 3 +D 5 +R 9 +U 6 +D 9 +L 6 +R 10 +D 10 +R 8 +D 7 +L 3 +D 4 +L 6 +R 2 +D 11 +U 5 +D 7 +L 1 +U 11 +L 11 +U 3 +D 2 +L 9 +R 8 +L 11 +R 2 +D 9 +U 3 +L 9 +U 6 +D 2 +L 10 +U 8 +L 5 +R 3 +U 3 +R 1 +L 7 +R 10 +L 2 +R 7 +U 5 +D 12 +L 11 +R 2 +L 10 +U 2 +D 3 +R 3 +U 6 +D 1 +L 8 +R 4 +L 5 +U 10 +R 12 +U 9 +R 12 +L 12 +R 6 +U 11 +D 1 +R 9 +U 2 +R 11 +L 1 +R 12 +U 10 +L 9 +U 12 +R 10 +U 12 +D 12 +U 2 +D 11 +L 12 +R 9 +U 3 +D 4 +L 6 +U 3 +R 10 +D 2 +U 11 +L 4 +R 11 +U 11 +R 1 +D 10 +R 6 +U 8 +L 3 +D 6 +R 1 +U 9 +L 3 +U 5 +D 4 +R 12 +U 11 +D 2 +U 10 +L 4 +D 9 +L 4 +U 10 +D 1 +R 1 +L 5 +R 2 +D 12 +R 5 +U 3 +L 11 +D 10 +L 11 +R 7 +L 10 +U 6 +R 12 +D 3 +R 10 +U 1 +L 2 +D 1 +R 1 +L 12 +U 4 +L 3 +R 6 +L 3 +D 6 +U 7 +R 10 +U 6 +D 6 +R 5 +D 10 +R 10 +D 8 +L 10 +U 11 +R 9 +L 4 +R 8 +U 1 +D 3 +U 7 +L 3 +U 10 +R 12 +U 10 +D 10 +U 9 +D 7 +R 4 +D 2 +R 9 +U 13 +R 6 +L 4 +R 9 +L 11 +U 6 +L 12 +D 9 +R 13 +L 2 +U 7 +D 10 +L 13 +D 4 +U 6 +L 8 +U 13 +R 3 +D 2 +L 3 +R 1 +U 1 +D 7 +L 5 +D 6 +R 1 +D 3 +R 5 +L 1 +D 3 +U 11 +L 1 +D 13 +R 5 +D 2 +L 8 +D 10 +R 1 +L 2 +D 2 +L 12 +R 11 +D 13 +R 7 +D 12 +L 2 +D 5 +L 9 +D 8 +L 3 +D 2 +U 4 +D 8 +R 7 +D 8 +U 8 +R 2 +U 10 +D 7 +L 9 +U 1 +L 10 +R 4 +U 1 +L 5 +R 5 +D 10 +R 2 +L 6 +R 4 +D 10 +L 7 +R 11 +L 11 +U 7 +L 1 +D 5 +U 4 +D 6 +R 4 +U 6 +D 7 +L 2 +D 1 +R 11 +U 11 +D 12 +U 4 +D 13 +R 3 +L 4 +R 3 +L 8 +R 4 +U 7 +L 2 +R 8 +L 13 +D 6 +U 11 +L 12 +U 1 +D 3 +U 7 +L 4 +R 5 +U 7 +D 1 +L 9 +U 2 +R 4 +D 9 +U 8 +R 2 +D 9 +L 8 +D 13 +U 13 +D 1 +U 9 +D 5 +L 1 +U 12 +D 2 +R 9 +L 7 +R 1 +L 3 +R 2 +D 12 +L 11 +D 4 +R 11 +U 5 +L 13 +R 2 +U 12 +L 9 +R 10 +U 3 +D 10 +R 8 +D 12 +U 6 +R 7 +D 11 +L 10 +U 14 +L 9 +U 12 +D 4 +U 3 +D 10 +R 6 +D 5 +R 1 +D 10 +U 13 +L 9 +R 7 +U 14 +D 10 +U 7 +D 13 +L 14 +D 14 +U 6 +D 14 +L 8 +R 2 +D 7 +U 14 +R 6 +L 14 +U 14 +R 6 +D 7 +R 7 +D 3 +U 10 +D 10 +R 7 +U 11 +R 3 +L 2 +R 12 +L 13 +R 3 +U 4 +D 1 +L 7 +U 9 +R 9 +U 9 +L 11 +U 7 +D 6 +R 7 +L 3 +D 5 +U 14 +R 8 +D 7 +L 6 +U 6 +R 11 +D 9 +R 6 +D 5 +L 5 +D 1 +L 10 +R 8 +L 15 +U 1 +D 14 +L 1 +R 5 +D 5 +L 3 +U 6 +R 6 +L 4 +D 3 +L 3 +D 4 +U 7 +L 10 +D 8 +R 13 +D 9 +R 15 +D 6 +U 10 +D 14 +L 10 +U 12 +D 13 +U 8 +L 13 +U 11 +D 13 +L 8 +R 12 +U 12 +D 14 +U 15 +L 1 +R 14 +U 15 +L 14 +U 4 +D 2 +L 2 +R 6 +D 15 +U 2 +R 5 +L 7 +U 8 +D 12 +R 2 +U 2 +R 11 +L 3 +U 15 +R 15 +D 1 +U 9 +R 5 +U 1 +R 15 +U 7 +D 8 +R 6 +U 7 +R 1 +U 5 +R 15 +U 9 +L 6 +U 10 +R 10 +D 2 +U 14 +D 13 +R 11 +L 14 +D 6 +U 6 +D 6 +U 10 +D 1 +U 10 +L 11 +D 13 +U 2 +L 14 +D 9 +R 14 +U 9 +L 8 +D 11 +U 3 +L 5 +U 8 +L 1 +U 12 +L 6 +R 5 +D 8 +R 5 +D 9 +U 14 +R 13 +U 6 +L 9 +R 7 +L 5 +U 9 +L 8 +D 9 +L 3 +R 4 +L 8 +D 1 +L 4 +R 6 +U 8 +L 5 +R 12 +U 7 +R 5 +D 8 +U 6 +R 11 +U 1 +D 9 +L 7 +R 10 +L 4 +R 1 +D 11 +R 1 +U 16 +L 6 +R 7 +D 3 +R 4 +U 13 +R 12 +D 1 +L 5 +D 2 +U 4 +D 11 +L 13 +D 4 +U 2 +D 14 +L 3 +U 1 +D 13 +R 14 +U 6 +R 8 +L 16 +U 9 +D 7 +U 15 +D 15 +L 11 +R 15 +L 4 +D 5 +U 3 +L 3 +D 8 +L 6 +U 15 +L 11 +R 14 +D 8 +U 10 +D 6 +R 1 +L 16 +D 16 +L 3 +U 10 +R 5 +L 16 +R 2 +U 15 +R 10 +U 11 +R 15 +D 16 +L 3 +U 15 +L 10 +R 12 +U 13 +R 3 +L 13 +D 15 +U 4 +R 8 +U 6 +L 10 +R 12 +U 1 +L 15 +D 5 +L 1 +U 9 +D 1 +R 16 +L 7 +U 13 +L 13 +U 6 +L 1 +R 14 +L 11 +U 16 +R 15 +L 10 +D 9 +R 9 +D 6 +U 16 +R 4 +U 1 +L 3 +R 16 +L 3 +U 6 +D 15 +R 13 +D 11 +U 15 +R 3 +L 15 +D 14 +U 10 +R 7 +U 4 +R 13 +L 11 +R 13 +L 11 +R 3 +L 5 +U 12 +L 9 +U 8 +D 2 +U 17 +D 3 +R 17 +U 14 +L 9 +R 10 +D 6 +L 5 +R 14 +L 8 +U 2 +D 16 +R 15 +D 12 +U 3 +L 4 +R 12 +U 16 +D 14 +L 12 +R 8 +D 4 +R 9 +U 12 +R 15 +U 6 +L 3 +D 17 +R 3 +U 6 +L 2 +R 2 +U 2 +D 17 +L 4 +R 8 +U 17 +R 16 +L 17 +U 5 +D 11 +U 8 +L 7 +U 3 +R 1 +D 15 +U 14 +L 4 +D 9 +U 15 +R 13 +L 2 +U 4 +R 17 +U 2 +L 13 +R 4 +U 8 +R 15 +U 8 +D 13 +U 10 +D 7 +U 7 +D 17 +R 16 +L 10 +U 10 +L 8 +R 9 +L 8 +R 1 +D 10 +U 17 +D 13 +U 10 +D 13 +L 14 +R 17 +D 5 +L 1 +U 17 +D 17 +L 13 +U 12 +R 10 +D 12 +R 15 +L 15 +U 11 +L 14 +D 15 +U 12 +D 7 +U 15 +L 1 +U 2 +R 18 +L 15 +U 7 +L 8 +R 3 +D 14 +R 7 +D 7 +U 6 +R 10 +L 9 +R 9 +D 17 +R 11 +D 4 +L 16 +U 12 +R 10 +L 4 +D 7 +U 18 +L 11 +U 3 +L 13 +U 5 +R 11 +D 16 +U 14 +D 1 +R 18 +D 4 +L 7 +U 2 +D 9 +L 5 +R 14 +U 18 +R 2 +U 7 +R 8 +U 9 +L 6 +R 12 +U 15 +R 1 +L 7 +D 3 +U 10 +R 5 +U 2 +L 8 +R 13 +L 14 +D 10 +L 10 +U 12 +R 5 +L 13 +D 8 +U 5 +D 17 +L 8 +D 8 +L 7 +U 5 +D 16 +R 9 +D 6 +U 11 +D 16 +U 15 +D 6 +L 4 +R 16 +D 8 +L 11 +U 13 +R 14 +L 12 +D 2 +U 16 +D 1 +L 12 +D 10 +R 1 +D 17 +L 8 +U 13 +R 10 +U 9 +D 4 +R 1 +U 17 +L 5 +D 15 +U 9 +R 15 +U 18 +L 15 +D 18 +U 15 +D 1 +L 9 +R 6 +L 15 +R 3 +D 19 +L 5 +D 10 +L 18 +D 11 +L 14 +D 11 +U 19 +D 5 +R 9 +L 18 +R 11 +D 3 +L 7 +R 4 +D 13 +L 9 +R 14 +D 14 +L 8 +U 10 +L 11 +U 4 +D 13 +R 13 +L 7 +R 7 +D 18 +U 2 +L 17 +D 16 +R 3 +U 12 +L 13 +U 5 +L 1 +U 9 +R 6 +D 14 +U 6 +R 3 +U 6 +R 7 +D 8 +U 11 +L 11 +R 7 +U 17 +D 2 +L 12 +U 18 +L 3 +U 14 +L 6 +R 10 +L 16 +U 19 +D 9 +R 13 +U 5 +R 5 +D 15 +R 1 +L 1 +U 5 +D 16 +L 5 +R 15 +L 14 +D 5 +R 9 +U 12 +L 9 +U 7 +R 16 +D 16 +R 10 +D 15 +R 16 +L 2 +U 13 +L 5 +D 19 +R 18 +D 19 +R 16 +D 12 +R 15 +D 12 +U 5 +L 3 +R 14 +D 7 +U 11 +R 10 +L 18 +D 9 +U 2 +D 19 +U 8 +D 19 +U 18 +R 11 +D 2 +R 8 +D 14 From 4652591b7cbbd393518932158c941a73ff3b0621 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Fri, 9 Dec 2022 10:40:51 +0100 Subject: [PATCH 2/4] 2022: d09: ex1: add solution --- 2022/d09/ex1/ex1.py | 96 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 2022/d09/ex1/ex1.py diff --git a/2022/d09/ex1/ex1.py b/2022/d09/ex1/ex1.py new file mode 100755 index 0000000..f98312e --- /dev/null +++ b/2022/d09/ex1/ex1.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +import dataclasses +import enum +import sys +from typing import NamedTuple + + +def sign(n: int) -> int: + if n > 0: + return 1 + elif n < 0: + return -1 + return 0 + + +class Direction(enum.Enum): + UP = "U" + DOWN = "D" + LEFT = "L" + RIGHT = "R" + + +@dataclasses.dataclass +class Move: + dir: Direction + len: int + + @classmethod + def from_input(cls, line: str) -> "Move": + d, l = line.split() + return cls(Direction(d), int(l)) + + +class Point(NamedTuple): + x: int + y: int + + def move(self, direction: Direction) -> "Point": + match direction: + case Direction.UP: + dx, dy = 1, 0 + case Direction.DOWN: + dx, dy = -1, 0 + case Direction.LEFT: + dx, dy = 0, -1 + case Direction.RIGHT: + dx, dy = 0, 1 + return Point(self.x + dx, self.y + dy) + + +@dataclasses.dataclass +class Rope: + points: list[Point] = dataclasses.field(init=False) + _tail_positions: set[Point] = dataclasses.field(init=False) + + def __init__(self, *, length: int = 2) -> None: + assert length > 0 + self.points = [Point(0, 0)] * length + self._tail_positions = {self.points[-1]} + + def move(self, move: Move) -> None: + for _ in range(move.len): + self.points[0] = self.points[0].move(move.dir) + for i in range(1, len(self.points)): + self.points[i] = self.__move_tail(self.points[i - 1], self.points[i]) + self._tail_positions.add(self.points[-1]) + + @staticmethod + def __move_tail(head: Point, tail: Point) -> Point: + delta_x, delta_y = head.x - tail.x, head.y - tail.y + + if abs(delta_x) <= 1 and abs(delta_y) <= 1: + return tail + + dx, dy = sign(delta_x), sign(delta_y) + return Point(tail.x + dx, tail.y + dy) + + +def solve(input: list[str]) -> int: + moves = map(Move.from_input, input) + rope = Rope(length=2) + + for move in moves: + rope.move(move) + + return len(rope._tail_positions) + + +def main() -> None: + input = sys.stdin.read().splitlines() + print(solve(input)) + + +if __name__ == "__main__": + main() From 1086e92f809e670be0cd5f7e01776b0cb4b46943 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Fri, 9 Dec 2022 10:40:58 +0100 Subject: [PATCH 3/4] 2022: d09: ex2: add input --- 2022/d09/ex2/input | 2000 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2000 insertions(+) create mode 100644 2022/d09/ex2/input diff --git a/2022/d09/ex2/input b/2022/d09/ex2/input new file mode 100644 index 0000000..72de61f --- /dev/null +++ b/2022/d09/ex2/input @@ -0,0 +1,2000 @@ +U 1 +L 2 +U 2 +D 2 +L 2 +U 1 +D 1 +U 2 +D 1 +U 2 +D 1 +R 2 +U 2 +L 1 +U 2 +D 2 +R 1 +U 1 +R 2 +L 1 +R 2 +D 2 +R 2 +D 2 +U 1 +R 1 +D 2 +L 2 +D 1 +R 2 +D 2 +R 1 +L 2 +R 1 +L 2 +R 1 +U 1 +D 2 +L 1 +D 1 +R 1 +U 1 +D 2 +L 1 +U 1 +L 2 +R 1 +D 2 +U 1 +L 1 +D 1 +L 1 +R 2 +D 1 +L 1 +R 1 +L 2 +D 2 +U 2 +D 1 +R 2 +U 1 +L 1 +U 2 +L 1 +U 2 +R 2 +U 1 +D 1 +L 2 +R 2 +D 2 +L 1 +D 2 +R 2 +D 1 +L 1 +D 2 +L 1 +R 1 +L 1 +R 2 +U 1 +R 1 +D 1 +R 1 +D 2 +R 2 +D 2 +U 1 +L 1 +D 1 +R 1 +L 2 +D 1 +U 2 +D 1 +R 1 +D 2 +U 2 +D 1 +R 1 +D 1 +R 1 +U 2 +L 1 +U 1 +R 1 +L 2 +R 1 +L 1 +D 2 +L 2 +R 1 +D 3 +L 3 +U 1 +R 2 +U 1 +R 2 +L 1 +D 1 +L 3 +U 2 +L 3 +D 1 +U 2 +L 3 +U 1 +R 2 +L 1 +R 1 +L 2 +D 2 +R 3 +L 1 +U 1 +L 1 +R 1 +U 1 +D 3 +L 3 +D 2 +R 2 +L 2 +D 1 +U 2 +L 2 +U 1 +R 3 +D 3 +L 3 +R 2 +D 3 +L 3 +U 1 +D 3 +L 2 +R 2 +D 3 +R 2 +L 1 +U 3 +D 2 +R 2 +D 3 +U 1 +D 3 +R 3 +D 2 +U 1 +L 2 +D 2 +U 2 +R 1 +L 3 +U 2 +R 2 +U 1 +R 2 +D 1 +R 2 +D 3 +U 1 +L 1 +U 2 +L 1 +D 2 +R 1 +U 1 +D 1 +R 3 +U 3 +R 1 +U 1 +L 3 +D 2 +R 2 +U 1 +R 2 +D 2 +R 3 +L 2 +U 2 +R 1 +L 3 +U 2 +R 1 +D 3 +L 2 +U 2 +R 3 +U 3 +L 1 +R 3 +D 3 +L 2 +R 3 +D 2 +R 3 +U 3 +R 1 +U 2 +D 4 +L 3 +D 2 +L 4 +R 2 +D 4 +L 1 +R 3 +L 1 +D 4 +U 4 +D 1 +R 4 +U 2 +D 2 +R 1 +U 2 +D 1 +L 3 +D 2 +U 2 +L 1 +R 3 +L 3 +U 3 +L 2 +R 1 +D 2 +R 3 +L 2 +D 4 +U 2 +L 3 +R 3 +L 3 +U 4 +D 4 +L 1 +U 3 +R 4 +L 4 +D 4 +U 3 +R 4 +L 2 +D 1 +U 1 +L 4 +D 3 +U 3 +R 2 +D 3 +U 4 +L 2 +R 1 +L 2 +R 2 +U 3 +L 1 +D 4 +U 1 +L 4 +R 3 +L 3 +R 2 +D 4 +U 4 +L 4 +D 3 +R 1 +D 3 +R 4 +L 4 +R 2 +L 2 +D 2 +R 2 +L 2 +U 3 +R 3 +D 2 +R 4 +L 1 +R 2 +U 4 +L 2 +R 1 +U 2 +R 3 +D 2 +U 1 +R 4 +L 3 +U 3 +D 4 +U 1 +L 1 +R 1 +D 2 +R 1 +D 1 +L 2 +D 4 +U 4 +L 4 +U 3 +D 4 +U 4 +D 3 +U 3 +L 5 +U 4 +L 4 +U 5 +D 1 +L 5 +U 2 +D 4 +U 5 +L 4 +U 2 +D 4 +R 3 +L 5 +U 2 +L 1 +U 5 +L 4 +D 2 +U 5 +R 3 +D 2 +U 3 +L 3 +R 3 +D 5 +U 4 +D 5 +U 4 +R 1 +L 1 +U 3 +L 3 +R 4 +L 1 +U 2 +D 3 +U 5 +L 3 +R 5 +D 3 +U 4 +L 1 +U 3 +R 2 +L 2 +U 5 +D 3 +L 5 +D 1 +R 3 +L 5 +R 1 +D 2 +U 3 +D 2 +L 4 +D 4 +R 5 +L 5 +U 1 +L 5 +R 3 +L 3 +U 4 +R 3 +L 3 +R 1 +L 2 +D 1 +U 3 +L 5 +R 1 +L 5 +U 3 +R 4 +U 4 +D 3 +U 2 +L 5 +D 3 +L 3 +R 2 +D 2 +U 3 +D 3 +R 2 +D 3 +L 1 +R 1 +U 1 +L 3 +R 2 +U 3 +R 1 +D 5 +U 5 +L 5 +D 2 +U 4 +D 3 +U 3 +L 4 +D 3 +U 2 +R 1 +D 4 +L 3 +U 5 +D 2 +L 5 +R 4 +D 3 +L 4 +D 3 +R 4 +D 5 +R 2 +L 3 +D 5 +U 3 +R 4 +U 6 +L 5 +D 3 +U 4 +L 1 +U 5 +R 5 +D 3 +U 5 +D 5 +R 2 +D 2 +U 4 +D 2 +U 3 +R 6 +U 4 +L 2 +R 2 +U 3 +L 1 +U 5 +R 6 +L 1 +D 5 +R 5 +D 5 +L 2 +U 3 +L 4 +R 2 +U 3 +L 2 +U 2 +D 4 +L 4 +R 5 +L 6 +D 2 +L 4 +R 2 +D 4 +L 1 +D 6 +R 2 +U 5 +D 2 +L 6 +U 5 +L 4 +U 1 +D 3 +U 1 +L 5 +U 2 +R 6 +D 5 +U 4 +L 5 +U 1 +L 5 +U 2 +R 5 +U 2 +R 4 +D 4 +R 1 +D 6 +R 5 +L 5 +U 6 +D 2 +R 1 +L 4 +U 3 +D 6 +R 4 +L 3 +R 6 +U 2 +R 1 +U 4 +R 5 +U 1 +D 4 +U 1 +L 3 +D 2 +L 2 +D 2 +L 2 +U 6 +D 4 +L 5 +D 2 +U 1 +L 5 +D 2 +R 3 +L 2 +D 2 +U 4 +L 4 +U 6 +L 1 +R 7 +L 4 +U 1 +L 1 +U 6 +L 1 +D 2 +L 5 +R 3 +U 6 +L 6 +U 2 +D 4 +L 2 +R 6 +L 3 +D 4 +L 1 +R 6 +D 4 +U 2 +D 4 +R 2 +D 1 +U 3 +R 6 +U 4 +D 2 +L 6 +R 5 +L 3 +U 1 +L 3 +U 3 +L 7 +R 1 +L 4 +D 5 +U 6 +L 3 +U 2 +L 1 +D 2 +R 4 +D 7 +R 1 +D 5 +L 1 +D 2 +U 2 +R 1 +L 1 +U 2 +D 2 +R 4 +D 7 +L 7 +D 1 +L 4 +R 7 +U 3 +L 4 +R 3 +U 2 +R 5 +U 5 +L 5 +U 2 +L 7 +R 4 +U 2 +L 5 +R 4 +U 7 +L 7 +R 5 +L 6 +D 4 +L 1 +D 6 +L 5 +R 5 +L 7 +R 5 +D 4 +U 4 +L 5 +U 7 +D 6 +U 3 +L 5 +U 4 +D 1 +L 1 +D 7 +R 3 +D 7 +U 3 +D 7 +R 4 +U 5 +L 7 +R 4 +L 5 +R 1 +D 4 +L 3 +U 1 +R 3 +L 1 +U 4 +R 3 +L 5 +D 2 +R 2 +L 4 +D 4 +L 7 +R 7 +U 2 +D 7 +L 5 +U 3 +L 4 +U 7 +R 6 +D 3 +L 2 +R 7 +L 5 +U 6 +D 6 +L 2 +D 2 +L 5 +D 7 +U 5 +L 3 +D 4 +U 4 +L 4 +R 2 +D 8 +L 3 +R 2 +D 4 +L 4 +U 7 +R 8 +D 6 +R 7 +U 1 +R 6 +U 6 +R 4 +D 8 +L 3 +R 3 +D 2 +U 5 +D 8 +L 3 +D 5 +L 7 +R 5 +L 1 +D 4 +L 7 +U 7 +L 8 +D 7 +L 5 +U 3 +R 4 +U 3 +L 7 +R 8 +D 6 +R 2 +D 3 +R 1 +D 6 +U 8 +D 6 +L 2 +R 8 +D 4 +U 3 +D 5 +U 2 +L 3 +U 1 +R 7 +U 6 +D 5 +R 5 +U 4 +L 1 +D 3 +U 7 +L 8 +U 5 +D 5 +U 4 +D 3 +L 5 +D 5 +R 5 +D 3 +R 4 +U 4 +R 8 +L 4 +D 4 +L 2 +D 4 +R 7 +L 8 +R 7 +L 1 +D 3 +U 6 +R 5 +D 1 +U 4 +R 7 +U 1 +R 2 +L 8 +U 8 +D 2 +L 9 +U 9 +D 4 +U 8 +D 3 +R 1 +U 3 +D 1 +R 7 +L 2 +U 4 +L 4 +U 9 +L 7 +U 2 +L 4 +D 5 +R 8 +L 5 +R 4 +U 2 +L 5 +U 2 +D 1 +L 9 +R 5 +D 6 +U 3 +D 5 +U 2 +L 1 +R 7 +U 1 +L 7 +U 1 +L 5 +D 6 +R 6 +D 7 +U 6 +D 7 +L 7 +D 2 +L 6 +D 4 +U 7 +D 4 +L 8 +D 5 +R 7 +L 9 +D 9 +U 3 +D 2 +U 9 +R 4 +D 3 +U 9 +R 4 +D 6 +L 2 +D 1 +L 5 +U 2 +L 5 +D 1 +R 7 +L 9 +R 6 +D 8 +L 2 +R 5 +D 6 +L 9 +U 8 +R 2 +D 4 +R 5 +U 3 +D 4 +R 6 +D 5 +U 9 +D 6 +L 3 +D 6 +R 6 +D 5 +R 7 +U 5 +L 2 +U 2 +D 5 +U 4 +D 8 +R 6 +U 8 +D 2 +R 9 +U 6 +L 1 +U 6 +L 5 +U 10 +D 2 +U 6 +R 10 +L 7 +U 4 +R 2 +D 1 +U 3 +D 6 +L 10 +U 4 +L 5 +D 10 +R 1 +L 5 +R 5 +U 6 +R 1 +D 7 +L 7 +D 4 +L 4 +D 10 +U 1 +R 9 +L 7 +D 7 +L 6 +D 7 +U 7 +R 5 +L 6 +U 3 +L 1 +D 4 +L 1 +D 3 +U 10 +D 10 +L 3 +R 6 +U 4 +D 2 +L 4 +U 1 +R 9 +D 8 +U 7 +R 10 +U 10 +L 4 +U 1 +L 9 +R 7 +L 8 +R 10 +D 6 +U 1 +R 1 +D 10 +R 4 +L 6 +D 2 +U 9 +R 6 +L 4 +U 10 +R 10 +U 4 +D 8 +U 8 +L 9 +R 9 +D 7 +L 1 +D 6 +L 7 +U 4 +L 6 +R 9 +D 6 +L 5 +D 5 +L 5 +U 6 +R 1 +D 4 +R 6 +L 5 +U 9 +R 3 +D 3 +L 10 +D 6 +U 5 +D 6 +R 6 +D 7 +R 3 +D 2 +L 2 +D 9 +U 1 +D 1 +L 1 +D 3 +U 3 +R 4 +U 1 +L 9 +U 9 +R 4 +D 10 +U 2 +L 4 +U 3 +D 1 +R 10 +U 7 +R 5 +D 6 +L 2 +U 5 +L 5 +U 5 +L 4 +D 8 +R 7 +L 5 +R 6 +U 4 +L 7 +D 4 +R 9 +D 7 +R 7 +L 2 +D 8 +L 9 +D 2 +L 7 +U 10 +R 3 +U 5 +R 3 +D 9 +U 9 +D 11 +U 6 +R 3 +U 11 +D 11 +L 11 +U 6 +D 10 +R 9 +U 11 +R 6 +L 4 +R 5 +L 11 +D 9 +L 10 +R 4 +D 11 +R 2 +L 6 +R 3 +U 4 +L 10 +U 6 +D 9 +L 5 +U 3 +R 2 +U 5 +L 7 +U 1 +L 10 +U 9 +R 3 +D 5 +R 9 +U 6 +D 9 +L 6 +R 10 +D 10 +R 8 +D 7 +L 3 +D 4 +L 6 +R 2 +D 11 +U 5 +D 7 +L 1 +U 11 +L 11 +U 3 +D 2 +L 9 +R 8 +L 11 +R 2 +D 9 +U 3 +L 9 +U 6 +D 2 +L 10 +U 8 +L 5 +R 3 +U 3 +R 1 +L 7 +R 10 +L 2 +R 7 +U 5 +D 12 +L 11 +R 2 +L 10 +U 2 +D 3 +R 3 +U 6 +D 1 +L 8 +R 4 +L 5 +U 10 +R 12 +U 9 +R 12 +L 12 +R 6 +U 11 +D 1 +R 9 +U 2 +R 11 +L 1 +R 12 +U 10 +L 9 +U 12 +R 10 +U 12 +D 12 +U 2 +D 11 +L 12 +R 9 +U 3 +D 4 +L 6 +U 3 +R 10 +D 2 +U 11 +L 4 +R 11 +U 11 +R 1 +D 10 +R 6 +U 8 +L 3 +D 6 +R 1 +U 9 +L 3 +U 5 +D 4 +R 12 +U 11 +D 2 +U 10 +L 4 +D 9 +L 4 +U 10 +D 1 +R 1 +L 5 +R 2 +D 12 +R 5 +U 3 +L 11 +D 10 +L 11 +R 7 +L 10 +U 6 +R 12 +D 3 +R 10 +U 1 +L 2 +D 1 +R 1 +L 12 +U 4 +L 3 +R 6 +L 3 +D 6 +U 7 +R 10 +U 6 +D 6 +R 5 +D 10 +R 10 +D 8 +L 10 +U 11 +R 9 +L 4 +R 8 +U 1 +D 3 +U 7 +L 3 +U 10 +R 12 +U 10 +D 10 +U 9 +D 7 +R 4 +D 2 +R 9 +U 13 +R 6 +L 4 +R 9 +L 11 +U 6 +L 12 +D 9 +R 13 +L 2 +U 7 +D 10 +L 13 +D 4 +U 6 +L 8 +U 13 +R 3 +D 2 +L 3 +R 1 +U 1 +D 7 +L 5 +D 6 +R 1 +D 3 +R 5 +L 1 +D 3 +U 11 +L 1 +D 13 +R 5 +D 2 +L 8 +D 10 +R 1 +L 2 +D 2 +L 12 +R 11 +D 13 +R 7 +D 12 +L 2 +D 5 +L 9 +D 8 +L 3 +D 2 +U 4 +D 8 +R 7 +D 8 +U 8 +R 2 +U 10 +D 7 +L 9 +U 1 +L 10 +R 4 +U 1 +L 5 +R 5 +D 10 +R 2 +L 6 +R 4 +D 10 +L 7 +R 11 +L 11 +U 7 +L 1 +D 5 +U 4 +D 6 +R 4 +U 6 +D 7 +L 2 +D 1 +R 11 +U 11 +D 12 +U 4 +D 13 +R 3 +L 4 +R 3 +L 8 +R 4 +U 7 +L 2 +R 8 +L 13 +D 6 +U 11 +L 12 +U 1 +D 3 +U 7 +L 4 +R 5 +U 7 +D 1 +L 9 +U 2 +R 4 +D 9 +U 8 +R 2 +D 9 +L 8 +D 13 +U 13 +D 1 +U 9 +D 5 +L 1 +U 12 +D 2 +R 9 +L 7 +R 1 +L 3 +R 2 +D 12 +L 11 +D 4 +R 11 +U 5 +L 13 +R 2 +U 12 +L 9 +R 10 +U 3 +D 10 +R 8 +D 12 +U 6 +R 7 +D 11 +L 10 +U 14 +L 9 +U 12 +D 4 +U 3 +D 10 +R 6 +D 5 +R 1 +D 10 +U 13 +L 9 +R 7 +U 14 +D 10 +U 7 +D 13 +L 14 +D 14 +U 6 +D 14 +L 8 +R 2 +D 7 +U 14 +R 6 +L 14 +U 14 +R 6 +D 7 +R 7 +D 3 +U 10 +D 10 +R 7 +U 11 +R 3 +L 2 +R 12 +L 13 +R 3 +U 4 +D 1 +L 7 +U 9 +R 9 +U 9 +L 11 +U 7 +D 6 +R 7 +L 3 +D 5 +U 14 +R 8 +D 7 +L 6 +U 6 +R 11 +D 9 +R 6 +D 5 +L 5 +D 1 +L 10 +R 8 +L 15 +U 1 +D 14 +L 1 +R 5 +D 5 +L 3 +U 6 +R 6 +L 4 +D 3 +L 3 +D 4 +U 7 +L 10 +D 8 +R 13 +D 9 +R 15 +D 6 +U 10 +D 14 +L 10 +U 12 +D 13 +U 8 +L 13 +U 11 +D 13 +L 8 +R 12 +U 12 +D 14 +U 15 +L 1 +R 14 +U 15 +L 14 +U 4 +D 2 +L 2 +R 6 +D 15 +U 2 +R 5 +L 7 +U 8 +D 12 +R 2 +U 2 +R 11 +L 3 +U 15 +R 15 +D 1 +U 9 +R 5 +U 1 +R 15 +U 7 +D 8 +R 6 +U 7 +R 1 +U 5 +R 15 +U 9 +L 6 +U 10 +R 10 +D 2 +U 14 +D 13 +R 11 +L 14 +D 6 +U 6 +D 6 +U 10 +D 1 +U 10 +L 11 +D 13 +U 2 +L 14 +D 9 +R 14 +U 9 +L 8 +D 11 +U 3 +L 5 +U 8 +L 1 +U 12 +L 6 +R 5 +D 8 +R 5 +D 9 +U 14 +R 13 +U 6 +L 9 +R 7 +L 5 +U 9 +L 8 +D 9 +L 3 +R 4 +L 8 +D 1 +L 4 +R 6 +U 8 +L 5 +R 12 +U 7 +R 5 +D 8 +U 6 +R 11 +U 1 +D 9 +L 7 +R 10 +L 4 +R 1 +D 11 +R 1 +U 16 +L 6 +R 7 +D 3 +R 4 +U 13 +R 12 +D 1 +L 5 +D 2 +U 4 +D 11 +L 13 +D 4 +U 2 +D 14 +L 3 +U 1 +D 13 +R 14 +U 6 +R 8 +L 16 +U 9 +D 7 +U 15 +D 15 +L 11 +R 15 +L 4 +D 5 +U 3 +L 3 +D 8 +L 6 +U 15 +L 11 +R 14 +D 8 +U 10 +D 6 +R 1 +L 16 +D 16 +L 3 +U 10 +R 5 +L 16 +R 2 +U 15 +R 10 +U 11 +R 15 +D 16 +L 3 +U 15 +L 10 +R 12 +U 13 +R 3 +L 13 +D 15 +U 4 +R 8 +U 6 +L 10 +R 12 +U 1 +L 15 +D 5 +L 1 +U 9 +D 1 +R 16 +L 7 +U 13 +L 13 +U 6 +L 1 +R 14 +L 11 +U 16 +R 15 +L 10 +D 9 +R 9 +D 6 +U 16 +R 4 +U 1 +L 3 +R 16 +L 3 +U 6 +D 15 +R 13 +D 11 +U 15 +R 3 +L 15 +D 14 +U 10 +R 7 +U 4 +R 13 +L 11 +R 13 +L 11 +R 3 +L 5 +U 12 +L 9 +U 8 +D 2 +U 17 +D 3 +R 17 +U 14 +L 9 +R 10 +D 6 +L 5 +R 14 +L 8 +U 2 +D 16 +R 15 +D 12 +U 3 +L 4 +R 12 +U 16 +D 14 +L 12 +R 8 +D 4 +R 9 +U 12 +R 15 +U 6 +L 3 +D 17 +R 3 +U 6 +L 2 +R 2 +U 2 +D 17 +L 4 +R 8 +U 17 +R 16 +L 17 +U 5 +D 11 +U 8 +L 7 +U 3 +R 1 +D 15 +U 14 +L 4 +D 9 +U 15 +R 13 +L 2 +U 4 +R 17 +U 2 +L 13 +R 4 +U 8 +R 15 +U 8 +D 13 +U 10 +D 7 +U 7 +D 17 +R 16 +L 10 +U 10 +L 8 +R 9 +L 8 +R 1 +D 10 +U 17 +D 13 +U 10 +D 13 +L 14 +R 17 +D 5 +L 1 +U 17 +D 17 +L 13 +U 12 +R 10 +D 12 +R 15 +L 15 +U 11 +L 14 +D 15 +U 12 +D 7 +U 15 +L 1 +U 2 +R 18 +L 15 +U 7 +L 8 +R 3 +D 14 +R 7 +D 7 +U 6 +R 10 +L 9 +R 9 +D 17 +R 11 +D 4 +L 16 +U 12 +R 10 +L 4 +D 7 +U 18 +L 11 +U 3 +L 13 +U 5 +R 11 +D 16 +U 14 +D 1 +R 18 +D 4 +L 7 +U 2 +D 9 +L 5 +R 14 +U 18 +R 2 +U 7 +R 8 +U 9 +L 6 +R 12 +U 15 +R 1 +L 7 +D 3 +U 10 +R 5 +U 2 +L 8 +R 13 +L 14 +D 10 +L 10 +U 12 +R 5 +L 13 +D 8 +U 5 +D 17 +L 8 +D 8 +L 7 +U 5 +D 16 +R 9 +D 6 +U 11 +D 16 +U 15 +D 6 +L 4 +R 16 +D 8 +L 11 +U 13 +R 14 +L 12 +D 2 +U 16 +D 1 +L 12 +D 10 +R 1 +D 17 +L 8 +U 13 +R 10 +U 9 +D 4 +R 1 +U 17 +L 5 +D 15 +U 9 +R 15 +U 18 +L 15 +D 18 +U 15 +D 1 +L 9 +R 6 +L 15 +R 3 +D 19 +L 5 +D 10 +L 18 +D 11 +L 14 +D 11 +U 19 +D 5 +R 9 +L 18 +R 11 +D 3 +L 7 +R 4 +D 13 +L 9 +R 14 +D 14 +L 8 +U 10 +L 11 +U 4 +D 13 +R 13 +L 7 +R 7 +D 18 +U 2 +L 17 +D 16 +R 3 +U 12 +L 13 +U 5 +L 1 +U 9 +R 6 +D 14 +U 6 +R 3 +U 6 +R 7 +D 8 +U 11 +L 11 +R 7 +U 17 +D 2 +L 12 +U 18 +L 3 +U 14 +L 6 +R 10 +L 16 +U 19 +D 9 +R 13 +U 5 +R 5 +D 15 +R 1 +L 1 +U 5 +D 16 +L 5 +R 15 +L 14 +D 5 +R 9 +U 12 +L 9 +U 7 +R 16 +D 16 +R 10 +D 15 +R 16 +L 2 +U 13 +L 5 +D 19 +R 18 +D 19 +R 16 +D 12 +R 15 +D 12 +U 5 +L 3 +R 14 +D 7 +U 11 +R 10 +L 18 +D 9 +U 2 +D 19 +U 8 +D 19 +U 18 +R 11 +D 2 +R 8 +D 14 From 39917c0e4b368bb0e8b448121b0ce8c7c690d655 Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Fri, 9 Dec 2022 10:41:04 +0100 Subject: [PATCH 4/4] 2022: d09: ex2: add solution --- 2022/d09/ex2/ex2.py | 96 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 2022/d09/ex2/ex2.py diff --git a/2022/d09/ex2/ex2.py b/2022/d09/ex2/ex2.py new file mode 100755 index 0000000..75124a1 --- /dev/null +++ b/2022/d09/ex2/ex2.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python + +import dataclasses +import enum +import sys +from typing import NamedTuple + + +def sign(n: int) -> int: + if n > 0: + return 1 + elif n < 0: + return -1 + return 0 + + +class Direction(enum.Enum): + UP = "U" + DOWN = "D" + LEFT = "L" + RIGHT = "R" + + +@dataclasses.dataclass +class Move: + dir: Direction + len: int + + @classmethod + def from_input(cls, line: str) -> "Move": + d, l = line.split() + return cls(Direction(d), int(l)) + + +class Point(NamedTuple): + x: int + y: int + + def move(self, direction: Direction) -> "Point": + match direction: + case Direction.UP: + dx, dy = 1, 0 + case Direction.DOWN: + dx, dy = -1, 0 + case Direction.LEFT: + dx, dy = 0, -1 + case Direction.RIGHT: + dx, dy = 0, 1 + return Point(self.x + dx, self.y + dy) + + +@dataclasses.dataclass +class Rope: + points: list[Point] = dataclasses.field(init=False) + _tail_positions: set[Point] = dataclasses.field(init=False) + + def __init__(self, *, length: int = 2) -> None: + assert length > 0 + self.points = [Point(0, 0)] * length + self._tail_positions = {self.points[-1]} + + def move(self, move: Move) -> None: + for _ in range(move.len): + self.points[0] = self.points[0].move(move.dir) + for i in range(1, len(self.points)): + self.points[i] = self.__move_tail(self.points[i - 1], self.points[i]) + self._tail_positions.add(self.points[-1]) + + @staticmethod + def __move_tail(head: Point, tail: Point) -> Point: + delta_x, delta_y = head.x - tail.x, head.y - tail.y + + if abs(delta_x) <= 1 and abs(delta_y) <= 1: + return tail + + dx, dy = sign(delta_x), sign(delta_y) + return Point(tail.x + dx, tail.y + dy) + + +def solve(input: list[str]) -> int: + moves = map(Move.from_input, input) + rope = Rope(length=10) + + for move in moves: + rope.move(move) + + return len(rope._tail_positions) + + +def main() -> None: + input = sys.stdin.read().splitlines() + print(solve(input)) + + +if __name__ == "__main__": + main()