diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2022-12-09 15:16:03 +0100 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2022-12-09 15:16:03 +0100 |
| commit | b276dec893d7b28f8005d522720c5f4c3176997f (patch) | |
| tree | 355a20e17d3b86d5bfe39f6be005cb8c858231d9 | |
| parent | d509a258e2170ba59f80ac629a66851a3c0d58a5 (diff) | |
day9
| -rw-r--r-- | inputs/day9 | 2000 | ||||
| -rw-r--r-- | src/bin/day9.rs | 156 |
2 files changed, 2156 insertions, 0 deletions
diff --git a/inputs/day9 b/inputs/day9 new file mode 100644 index 0000000..0739d8d --- /dev/null +++ b/inputs/day9 @@ -0,0 +1,2000 @@ +L 1 +D 2 +R 1 +L 1 +R 2 +L 1 +U 2 +L 2 +D 1 +L 2 +U 2 +R 2 +D 2 +L 1 +D 2 +U 2 +L 2 +R 2 +L 1 +U 2 +D 2 +U 2 +D 2 +L 1 +R 2 +L 2 +D 2 +R 1 +D 1 +R 2 +U 1 +R 2 +L 2 +R 1 +U 2 +R 1 +D 1 +U 1 +L 2 +R 1 +D 2 +U 1 +R 1 +U 2 +L 1 +R 2 +U 1 +R 2 +L 2 +R 1 +D 2 +R 1 +D 1 +U 2 +R 1 +D 1 +U 1 +D 2 +L 1 +U 1 +D 1 +R 2 +D 2 +R 1 +D 2 +L 2 +D 2 +U 1 +L 1 +D 1 +L 1 +R 2 +U 2 +L 2 +D 2 +L 2 +D 1 +U 2 +D 2 +L 2 +R 1 +D 1 +L 1 +U 1 +L 1 +U 2 +L 1 +U 1 +D 1 +R 1 +L 1 +R 2 +D 1 +L 2 +D 2 +R 1 +D 2 +R 1 +D 1 +R 2 +L 2 +U 1 +D 2 +L 2 +U 2 +D 2 +R 1 +D 1 +U 2 +R 2 +U 2 +D 3 +L 1 +U 2 +R 2 +D 1 +U 1 +L 1 +U 3 +L 3 +U 2 +L 3 +U 3 +L 3 +D 3 +R 1 +U 3 +R 3 +U 3 +D 2 +R 2 +U 2 +R 3 +L 3 +U 1 +R 1 +D 3 +L 1 +U 1 +R 3 +U 3 +D 1 +L 3 +R 1 +U 3 +D 2 +U 2 +D 2 +R 1 +U 2 +L 2 +U 3 +L 1 +U 3 +D 3 +U 3 +L 2 +R 3 +D 1 +L 1 +R 3 +L 2 +D 3 +U 3 +R 2 +L 1 +R 2 +D 3 +U 3 +R 2 +U 3 +L 1 +R 2 +U 3 +D 2 +U 3 +L 3 +R 3 +D 3 +U 1 +D 1 +U 2 +R 2 +U 3 +D 3 +U 2 +D 2 +L 2 +D 2 +L 2 +R 1 +U 2 +D 2 +L 2 +R 1 +D 3 +L 3 +D 2 +L 3 +D 3 +L 2 +D 2 +L 2 +D 2 +U 2 +L 3 +D 3 +L 2 +U 2 +D 2 +R 3 +D 2 +U 3 +L 1 +R 1 +D 2 +U 3 +R 1 +U 2 +D 2 +R 2 +U 3 +R 2 +U 1 +L 1 +D 2 +R 4 +D 1 +U 4 +D 2 +U 3 +R 1 +D 2 +R 3 +L 2 +D 3 +L 3 +R 1 +D 1 +U 2 +R 1 +L 2 +R 2 +D 1 +L 1 +D 1 +L 4 +D 3 +R 1 +U 3 +R 2 +U 1 +R 1 +D 2 +L 2 +D 2 +U 3 +L 4 +D 4 +R 4 +L 2 +U 1 +R 2 +L 2 +U 4 +D 1 +R 4 +L 3 +R 4 +U 1 +D 2 +L 2 +R 2 +D 1 +L 2 +U 1 +D 3 +R 2 +U 2 +L 3 +D 4 +U 3 +R 4 +L 4 +R 1 +U 1 +D 2 +L 3 +D 1 +U 4 +R 2 +D 4 +L 2 +D 3 +L 2 +D 2 +L 1 +U 3 +L 4 +U 3 +D 4 +L 3 +D 1 +R 2 +D 2 +U 4 +L 4 +U 3 +L 4 +D 2 +R 3 +U 1 +L 2 +R 2 +D 2 +U 4 +L 2 +U 4 +D 1 +U 2 +R 4 +L 2 +U 4 +L 4 +U 2 +D 2 +U 4 +L 2 +U 3 +D 2 +L 3 +U 1 +L 2 +R 3 +D 2 +R 5 +L 5 +D 3 +R 4 +D 2 +R 4 +U 4 +R 5 +D 5 +R 5 +L 4 +U 2 +D 2 +R 2 +U 4 +R 2 +L 4 +R 3 +U 2 +R 5 +D 3 +L 4 +R 2 +L 3 +U 4 +R 2 +D 4 +R 2 +L 4 +D 4 +R 3 +D 5 +U 1 +L 2 +R 5 +L 5 +U 5 +D 1 +U 1 +L 3 +D 1 +U 5 +D 2 +R 3 +U 4 +R 4 +U 3 +L 5 +U 5 +D 5 +R 1 +D 3 +L 5 +R 5 +U 2 +D 2 +U 4 +D 3 +R 5 +U 5 +L 3 +U 3 +L 2 +U 4 +L 2 +R 4 +D 3 +L 4 +U 3 +D 1 +L 1 +D 4 +U 4 +D 1 +R 2 +L 5 +D 1 +U 4 +R 2 +D 3 +R 1 +D 1 +L 4 +D 2 +L 4 +R 3 +U 5 +L 1 +D 1 +L 5 +U 5 +R 5 +U 4 +D 5 +U 3 +D 5 +R 2 +U 2 +R 4 +D 1 +U 4 +R 3 +D 2 +U 3 +R 3 +L 1 +R 2 +D 4 +L 5 +D 6 +L 2 +D 3 +R 3 +U 3 +L 3 +R 3 +U 5 +R 4 +D 3 +R 5 +L 4 +D 6 +U 3 +R 2 +L 4 +D 3 +L 3 +R 3 +U 5 +R 1 +D 6 +L 5 +D 3 +U 2 +R 3 +D 3 +R 3 +U 1 +L 5 +R 6 +D 2 +U 4 +R 5 +U 1 +D 2 +U 5 +R 3 +L 4 +D 3 +L 6 +U 6 +R 2 +U 6 +L 3 +D 1 +R 2 +U 2 +R 3 +U 6 +L 4 +D 3 +R 2 +U 2 +L 3 +R 6 +U 3 +R 6 +L 2 +U 3 +R 3 +D 2 +R 6 +D 2 +L 4 +U 6 +D 2 +U 6 +L 1 +D 1 +L 5 +D 3 +R 6 +L 5 +R 6 +D 2 +R 4 +L 1 +U 4 +L 5 +U 5 +D 5 +R 6 +L 5 +U 5 +R 2 +D 6 +U 3 +R 2 +D 3 +U 3 +L 4 +D 5 +R 3 +U 5 +D 3 +R 3 +L 6 +R 3 +D 1 +U 2 +L 4 +D 4 +U 2 +L 4 +U 6 +D 5 +L 6 +U 5 +D 1 +U 6 +D 5 +U 2 +R 7 +U 6 +R 2 +D 2 +R 7 +D 4 +L 7 +U 5 +L 2 +U 4 +D 2 +R 2 +L 2 +D 3 +U 3 +D 6 +L 7 +R 5 +D 5 +L 7 +U 1 +D 5 +L 6 +U 1 +R 1 +D 7 +U 5 +D 4 +L 2 +U 1 +D 2 +U 6 +D 5 +U 1 +R 1 +L 3 +D 3 +U 3 +L 5 +D 5 +U 3 +R 6 +L 6 +R 1 +U 2 +D 3 +L 2 +U 6 +D 3 +R 3 +U 2 +D 1 +L 4 +U 2 +L 7 +U 4 +R 2 +D 6 +L 4 +D 6 +L 1 +D 3 +L 6 +D 4 +R 6 +U 3 +D 1 +L 4 +R 6 +U 5 +R 5 +U 5 +R 3 +L 6 +U 1 +D 2 +U 3 +D 1 +L 7 +D 6 +U 4 +D 5 +L 6 +U 7 +L 2 +U 4 +L 6 +R 6 +U 3 +D 4 +R 6 +U 1 +D 5 +R 5 +U 6 +R 4 +U 2 +D 2 +U 2 +R 3 +L 6 +U 6 +R 2 +L 2 +R 6 +L 1 +D 6 +R 2 +D 2 +L 8 +U 6 +R 7 +L 7 +D 3 +L 3 +R 8 +U 2 +L 7 +D 4 +R 5 +D 4 +R 1 +U 5 +D 2 +R 6 +L 7 +U 2 +L 4 +R 1 +D 2 +U 4 +D 3 +R 2 +U 1 +L 5 +U 5 +L 5 +R 7 +D 6 +R 2 +D 7 +R 1 +L 6 +R 8 +D 7 +R 3 +U 6 +L 7 +R 7 +U 8 +L 4 +D 4 +U 6 +L 5 +R 2 +L 2 +R 7 +D 8 +L 7 +D 2 +R 1 +U 1 +R 6 +D 5 +U 8 +R 5 +L 1 +R 7 +U 1 +L 7 +D 5 +L 6 +R 5 +L 3 +U 7 +L 8 +R 6 +U 6 +R 4 +U 1 +R 8 +U 1 +D 1 +U 8 +D 7 +R 1 +L 8 +R 1 +L 6 +D 8 +L 6 +U 7 +R 8 +D 4 +U 6 +R 7 +L 8 +U 4 +L 4 +D 6 +R 5 +L 1 +U 2 +D 1 +L 3 +D 7 +R 6 +L 3 +R 5 +L 1 +D 5 +L 3 +R 5 +U 5 +R 7 +U 6 +D 6 +U 2 +R 8 +D 3 +L 7 +D 5 +U 9 +R 5 +L 9 +D 5 +R 2 +U 6 +L 5 +U 9 +L 7 +D 3 +L 6 +U 3 +R 5 +D 7 +R 3 +L 5 +R 2 +L 6 +R 9 +L 8 +D 4 +L 6 +U 8 +L 8 +D 4 +R 2 +U 1 +D 6 +U 6 +R 3 +L 8 +U 2 +L 8 +D 9 +R 9 +L 1 +D 3 +R 6 +D 6 +L 9 +D 3 +R 9 +L 2 +D 8 +U 2 +R 8 +L 3 +D 9 +L 6 +D 9 +U 3 +D 9 +R 5 +L 2 +D 7 +L 6 +U 2 +L 8 +D 9 +L 5 +R 7 +L 3 +D 7 +U 4 +L 8 +R 9 +L 5 +R 7 +D 7 +R 6 +D 6 +L 6 +R 8 +L 6 +D 4 +R 5 +D 2 +L 5 +U 2 +D 8 +R 9 +L 3 +U 1 +L 6 +D 1 +R 9 +L 4 +U 1 +R 4 +L 1 +D 3 +R 5 +D 9 +L 4 +D 3 +U 9 +D 7 +L 5 +R 3 +L 7 +R 8 +L 1 +U 6 +L 8 +D 8 +R 6 +L 1 +U 1 +D 7 +R 10 +U 3 +D 4 +U 5 +D 3 +R 7 +U 8 +D 3 +U 8 +D 9 +L 10 +D 5 +L 7 +U 3 +D 3 +U 5 +R 5 +U 7 +L 2 +D 6 +U 6 +R 6 +U 9 +R 9 +L 5 +R 1 +L 4 +D 3 +U 4 +D 8 +U 3 +R 7 +D 1 +U 5 +L 6 +R 4 +U 2 +L 8 +U 10 +D 8 +U 8 +R 6 +L 1 +U 9 +R 9 +D 10 +U 8 +L 9 +D 5 +U 9 +D 9 +U 6 +D 10 +L 9 +R 4 +D 3 +R 10 +D 6 +R 8 +D 1 +U 4 +L 1 +D 6 +R 1 +L 1 +D 7 +R 1 +L 4 +R 5 +U 9 +R 5 +U 1 +R 9 +D 3 +U 4 +D 6 +L 3 +U 10 +D 3 +U 10 +R 10 +D 7 +L 5 +R 4 +D 4 +L 1 +R 7 +L 4 +R 5 +D 2 +L 9 +D 9 +L 5 +D 8 +R 1 +D 3 +L 8 +D 4 +L 8 +U 8 +L 7 +D 7 +U 4 +D 7 +R 10 +U 2 +R 7 +D 4 +L 6 +D 4 +U 3 +L 4 +U 8 +D 7 +L 9 +R 4 +D 9 +U 10 +L 7 +U 11 +R 5 +U 2 +D 4 +U 10 +L 3 +R 5 +U 8 +D 10 +L 7 +D 7 +R 2 +D 5 +U 6 +L 1 +U 11 +R 6 +D 9 +U 1 +L 4 +U 2 +D 1 +L 3 +D 6 +L 8 +U 9 +D 9 +L 5 +D 3 +R 2 +L 11 +D 9 +U 9 +R 10 +U 7 +D 11 +R 4 +L 11 +U 6 +R 2 +U 6 +D 1 +U 8 +L 11 +R 5 +L 11 +U 10 +R 2 +L 3 +D 8 +U 7 +R 11 +L 9 +U 7 +D 8 +R 2 +L 2 +R 5 +L 10 +R 4 +D 3 +R 5 +L 7 +D 2 +U 7 +R 2 +U 10 +L 1 +D 1 +U 2 +R 2 +D 1 +R 10 +L 6 +U 8 +R 3 +D 8 +U 10 +D 5 +R 3 +U 1 +L 2 +D 5 +R 11 +U 2 +R 11 +L 9 +U 1 +R 5 +L 6 +U 5 +D 1 +U 11 +D 1 +R 7 +L 9 +U 5 +D 11 +L 9 +U 1 +L 4 +D 1 +R 3 +D 10 +U 9 +L 3 +R 11 +L 9 +R 12 +U 8 +D 9 +L 12 +D 1 +U 10 +R 11 +U 9 +R 8 +U 11 +R 8 +U 6 +D 7 +R 7 +U 10 +L 10 +U 4 +L 10 +R 2 +D 6 +L 10 +D 10 +R 10 +U 1 +L 7 +D 8 +L 12 +R 9 +U 9 +L 10 +R 11 +D 12 +R 6 +U 10 +R 3 +D 12 +U 12 +R 1 +D 3 +R 5 +U 8 +D 2 +U 4 +D 12 +L 3 +D 11 +U 9 +L 2 +R 7 +L 5 +U 2 +R 5 +L 5 +U 1 +L 4 +R 12 +L 11 +R 8 +D 4 +U 5 +R 5 +U 9 +R 7 +L 6 +R 7 +L 1 +U 6 +D 6 +L 3 +U 1 +L 4 +U 6 +R 5 +L 9 +U 12 +D 11 +R 11 +U 11 +D 7 +U 3 +L 12 +U 7 +L 2 +D 3 +U 10 +D 2 +U 6 +L 9 +R 2 +D 12 +R 11 +U 12 +L 1 +D 9 +R 4 +D 4 +U 5 +D 12 +R 9 +U 6 +L 8 +D 5 +U 6 +D 10 +R 3 +L 1 +U 4 +R 2 +L 8 +U 9 +L 6 +D 1 +L 6 +U 5 +R 6 +D 4 +L 7 +U 2 +R 12 +U 12 +R 13 +U 6 +R 7 +D 12 +R 3 +U 3 +D 10 +U 12 +R 11 +D 3 +U 11 +L 6 +R 5 +D 7 +L 10 +D 5 +L 7 +U 8 +L 3 +U 5 +R 1 +L 1 +R 1 +D 10 +L 2 +R 1 +U 9 +L 10 +U 13 +R 3 +D 9 +R 6 +D 1 +R 7 +U 8 +D 7 +U 13 +R 3 +U 11 +L 13 +R 8 +L 13 +D 6 +L 8 +U 6 +D 10 +R 3 +D 9 +R 11 +U 1 +L 11 +U 5 +R 6 +U 6 +D 10 +R 5 +L 1 +R 6 +U 11 +L 8 +R 3 +D 7 +U 4 +R 5 +D 8 +U 7 +L 6 +U 6 +L 9 +U 10 +R 5 +L 7 +R 5 +L 13 +U 7 +D 1 +L 7 +U 2 +R 9 +L 8 +U 5 +L 13 +R 11 +D 4 +R 6 +U 13 +D 13 +L 9 +R 8 +D 12 +R 6 +D 1 +L 12 +R 8 +U 1 +L 7 +R 13 +D 13 +L 13 +U 7 +D 7 +L 4 +U 13 +R 7 +U 14 +D 11 +R 7 +U 3 +L 9 +U 8 +L 3 +R 14 +D 2 +U 4 +R 1 +L 13 +U 2 +D 5 +U 2 +R 7 +U 14 +D 10 +L 1 +D 7 +L 2 +U 14 +L 14 +R 12 +U 2 +D 5 +L 10 +U 3 +R 11 +D 12 +R 14 +U 7 +R 10 +D 9 +L 13 +D 13 +R 12 +D 14 +R 3 +D 4 +U 8 +L 11 +U 9 +L 5 +U 1 +R 12 +D 6 +U 1 +R 1 +L 5 +U 5 +L 1 +D 5 +U 4 +D 13 +U 7 +R 5 +D 11 +U 9 +R 3 +D 11 +L 9 +D 8 +R 8 +U 8 +L 6 +R 3 +D 5 +L 10 +U 1 +L 4 +R 13 +L 5 +D 8 +L 5 +U 11 +L 8 +R 12 +L 6 +R 12 +U 5 +D 12 +R 12 +D 4 +U 9 +L 4 +R 11 +L 2 +R 11 +U 12 +D 14 +L 2 +U 5 +L 7 +D 8 +U 12 +D 4 +R 4 +L 13 +D 9 +U 11 +R 1 +D 2 +U 8 +D 10 +U 8 +L 6 +U 9 +R 8 +L 12 +U 9 +R 3 +U 14 +R 3 +U 9 +L 11 +U 2 +L 10 +D 6 +U 2 +L 4 +D 12 +L 8 +R 15 +D 11 +L 9 +R 6 +U 9 +R 11 +U 7 +R 13 +L 9 +D 9 +U 2 +R 9 +U 11 +R 15 +U 4 +L 4 +U 6 +D 3 +R 10 +L 5 +U 8 +D 6 +R 6 +D 6 +U 10 +L 7 +R 9 +D 6 +U 12 +R 15 +L 8 +D 9 +U 15 +D 6 +L 14 +D 2 +R 15 +U 14 +D 15 +U 13 +R 1 +U 11 +R 8 +U 13 +D 6 +L 2 +R 1 +U 7 +R 6 +D 13 +U 13 +R 15 +D 15 +R 1 +U 14 +D 9 +U 5 +L 6 +R 9 +L 13 +D 6 +U 2 +R 7 +D 3 +L 10 +R 7 +L 2 +U 4 +D 1 +L 9 +U 9 +R 7 +U 3 +D 7 +U 1 +R 12 +L 11 +R 7 +L 14 +R 3 +L 15 +R 15 +U 5 +R 12 +D 9 +R 5 +U 12 +L 12 +U 6 +L 4 +R 2 +U 2 +L 5 +D 3 +R 12 +D 8 +U 16 +D 16 +L 11 +D 7 +U 15 +R 13 +U 5 +D 6 +L 12 +D 2 +L 16 +D 16 +L 8 +U 9 +R 12 +D 16 +U 2 +R 1 +L 12 +U 9 +D 15 +U 16 +L 14 +D 4 +U 5 +L 2 +R 5 +D 9 +L 4 +R 13 +L 2 +U 2 +R 4 +L 15 +R 13 +D 11 +R 13 +L 13 +U 14 +R 8 +U 5 +D 10 +L 2 +U 15 +D 3 +L 8 +U 2 +L 14 +U 3 +R 16 +U 4 +D 1 +R 5 +L 3 +R 1 +L 16 +D 16 +L 12 +U 14 +R 12 +U 8 +R 1 +L 1 +R 9 +U 9 +R 12 +L 1 +U 9 +L 14 +U 11 +L 8 +U 10 +L 7 +U 1 +L 11 +R 2 +D 12 +U 3 +R 2 +L 14 +D 1 +L 12 +R 16 +D 16 +R 8 +L 15 +R 3 +L 10 +D 14 +R 9 +U 2 +D 4 +U 7 +D 2 +R 11 +D 6 +U 2 +R 4 +L 2 +R 6 +L 11 +R 9 +L 1 +R 8 +D 3 +R 4 +U 14 +D 7 +L 11 +R 14 +L 8 +D 9 +L 6 +D 15 +R 4 +D 9 +U 7 +R 6 +L 13 +D 11 +R 10 +L 17 +R 17 +D 17 +R 7 +U 15 +D 14 +R 6 +U 14 +R 5 +U 17 +R 7 +L 17 +U 14 +L 14 +R 13 +U 4 +R 14 +U 10 +L 16 +U 8 +R 2 +U 4 +D 16 +U 4 +L 14 +R 7 +D 13 +U 10 +L 10 +R 3 +L 6 +D 7 +R 13 +L 6 +U 7 +R 16 +L 10 +U 6 +L 6 +U 11 +D 6 +U 5 +L 4 +U 17 +R 6 +L 3 +D 5 +R 4 +U 1 +L 14 +R 10 +L 4 +U 9 +R 7 +D 2 +R 6 +U 12 +D 15 +R 15 +L 13 +U 5 +L 12 +D 3 +U 15 +L 9 +U 3 +D 12 +R 15 +U 7 +L 7 +R 11 +L 14 +R 2 +D 6 +R 6 +D 9 +R 2 +L 12 +R 2 +U 12 +R 8 +L 2 +U 12 +R 2 +D 17 +L 8 +D 1 +U 16 +D 1 +R 5 +L 9 +U 4 +L 1 +U 9 +L 11 +R 9 +D 7 +R 16 +D 12 +R 3 +U 7 +L 4 +R 7 +L 8 +D 9 +U 10 +D 7 +U 10 +D 5 +U 14 +D 5 +U 11 +R 15 +U 8 +D 12 +U 8 +L 18 +U 16 +D 16 +U 3 +R 5 +D 2 +U 10 +L 17 +R 5 +U 15 +R 9 +D 5 +U 9 +L 12 +D 17 +R 14 +L 4 +R 14 +L 17 +D 9 +L 10 +D 17 +R 1 +U 2 +R 7 +U 13 +R 1 +U 17 +R 4 +L 3 +D 14 +U 11 +L 15 +R 6 +U 4 +D 8 +L 17 +D 3 +R 13 +U 10 +R 4 +U 5 +R 3 +U 16 +D 6 +L 5 +R 18 +L 11 +D 16 +U 7 +R 7 +U 1 +R 14 +U 14 +R 4 +D 3 +R 12 +D 13 +U 5 +D 8 +R 17 +L 9 +D 4 +L 13 +U 8 +R 13 +D 5 +U 17 +L 11 +U 13 +D 9 +L 8 +R 14 +L 15 +D 10 +R 11 +D 8 +L 10 +U 3 +L 3 +R 12 +L 9 +R 17 +U 10 +L 17 +U 13 +L 12 +U 1 +D 2 +R 1 +L 16 +R 11 +D 15 +L 8 +R 10 +L 12 +U 3 +L 17 +U 7 +R 6 +U 16 +R 1 +L 3 +R 5 +L 11 +R 4 +D 10 +L 1 +R 4 +U 12 +L 18 +R 8 +L 7 +R 16 +U 19 +R 10 +U 11 +D 12 +R 6 +U 17 +L 16 +D 19 +L 9 +U 1 +R 12 +U 12 +R 15 +D 4 +L 15 +R 4 +L 9 +R 15 +L 10 +R 7 +L 16 +U 16 +L 19 +U 5 +L 4 +U 12 +L 6 +U 5 +R 17 +U 11 +R 6 +U 15 +L 9 +D 4 +R 2 +L 7 +R 16 +L 13 +U 19 +R 4 +U 13 +L 18 +D 19 +U 15 +R 13 +L 11 +U 18 +D 2 +U 9 +D 18 +L 13 +D 13 +L 11 +U 3 +D 11 +U 16 +R 14 +D 6 +L 12 +D 9 +R 2 +D 14 +L 12 +R 15 +D 2 +R 11 +U 7 +D 9 +L 16 +R 12 +L 12 +D 14 +U 2 +D 12 +R 8 +U 9 +D 10 +U 12 +L 17 +U 19 +L 4 +U 15 +R 12 +L 11 +D 12 +L 8 +U 3 +R 7 +L 2 +D 4 +U 17 diff --git a/src/bin/day9.rs b/src/bin/day9.rs new file mode 100644 index 0000000..b4c834e --- /dev/null +++ b/src/bin/day9.rs @@ -0,0 +1,156 @@ +use std::collections::HashSet; + +static DAY: u8 = 9; + +fn main() { + let input = advent::read_lines(DAY); + println!("{DAY}a: {}", tail_positions(&input, 2)); + println!("{DAY}b: {}", tail_positions(&input, 10)); +} + +enum Direction { + Up, + Down, + Left, + Right, +} + +impl Direction { + fn new(input: &str) -> Direction { + match input { + "U" => Direction::Up, + "D" => Direction::Down, + "L" => Direction::Left, + "R" => Direction::Right, + _ => unimplemented!(), + } + } +} + +struct Movement { + direction: Direction, + distance: isize, +} + +impl Movement { + fn new(input: &str) -> Movement { + let mut it = input.split_whitespace(); + let direction = Direction::new(it.next().unwrap()); + let distance = it.next().unwrap().parse().unwrap(); + Movement { direction, distance } + } +} + +#[derive(Copy,Clone,PartialEq,Eq,Hash)] +struct Position { + x: isize, + y: isize, +} + +impl Position { + fn is_adjacent(&self, other: &Position) -> bool { + let dx = self.x.abs_diff(other.x); + let dy = self.y.abs_diff(other.y); + dx <= 1 && dy <= 1 + } + + fn step(&mut self, direction: &Direction) { + match direction { + Direction::Up => self.y += 1, + Direction::Down => self.y -= 1, + Direction::Left => self.x -= 1, + Direction::Right => self.x += 1, + } + } + + fn follow(&mut self, other: &Position) { + if self.is_adjacent(other) { + return; + } + + if self.x == other.x { + if self.y > other.y { + self.y -= 1; + } else { + self.y += 1; + } + return; + } + + if self.y == other.y { + if self.x > other.x { + self.x -= 1; + } else { + self.x += 1; + } + return; + } + + if self.x > other.x { + self.x -= 1; + } else { + self.x += 1; + } + if self.y > other.y { + self.y -= 1; + } else { + self.y += 1; + } + } +} + +fn tail_positions(input: &[String], knot_count: usize) -> usize { + let movements = input.iter() + .map(|x| Movement::new(x)) + .collect::<Vec<_>>(); + + let mut visited = HashSet::new(); + let mut knots = vec![Position { x: 0, y: 0 }; knot_count]; + visited.insert(knots[0]); + for movement in movements { + for _ in 0 .. movement.distance { + knots[0].step(&movement.direction); + for idx in 1 .. knot_count { + let new_pos = knots[idx-1]; + knots[idx].follow(&new_pos); + } + visited.insert(knots[knot_count-1]); + } + } + visited.len() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + let input = [ + "R 4", + "U 4", + "L 3", + "D 1", + "R 4", + "D 1", + "L 5", + "R 2", + ].iter().map(|&x| String::from(x)).collect::<Vec<_>>(); + + assert_eq!(tail_positions(&input, 2), 13); + assert_eq!(tail_positions(&input, 10), 1); + + let input = [ + "R 5", + "U 8", + "L 8", + "D 3", + "R 17", + "D 10", + "L 25", + "U 20", + ].iter().map(|&x| String::from(x)).collect::<Vec<_>>(); + + assert_eq!(tail_positions(&input, 10), 36); + } +} |
