diff --git a/2022/d9/.envrc b/2022/d9/.envrc new file mode 100644 index 0000000..8ba04f9 --- /dev/null +++ b/2022/d9/.envrc @@ -0,0 +1,4 @@ +if command -v nix-shell &> /dev/null + then + use flake +fi diff --git a/2022/d9/README.md b/2022/d9/README.md new file mode 100644 index 0000000..6c5483e --- /dev/null +++ b/2022/d9/README.md @@ -0,0 +1 @@ +# Bootstrapping clojure project on diff --git a/2022/d9/data/example.txt b/2022/d9/data/example.txt new file mode 100644 index 0000000..9874df2 --- /dev/null +++ b/2022/d9/data/example.txt @@ -0,0 +1,8 @@ +R 4 +U 4 +L 3 +D 1 +R 4 +D 1 +L 5 +R 2 diff --git a/2022/d9/data/submission.txt b/2022/d9/data/submission.txt new file mode 100644 index 0000000..81f0b8b --- /dev/null +++ b/2022/d9/data/submission.txt @@ -0,0 +1,2000 @@ +U 1 +L 1 +U 2 +R 1 +U 2 +R 2 +L 1 +R 1 +L 1 +D 1 +L 2 +D 2 +U 1 +R 2 +D 1 +L 1 +D 2 +U 2 +R 2 +D 1 +R 1 +D 1 +U 2 +D 2 +U 1 +R 1 +L 1 +D 2 +R 2 +D 1 +R 1 +D 2 +L 1 +D 2 +R 1 +U 2 +R 1 +L 1 +U 2 +R 1 +L 2 +U 1 +R 2 +D 2 +R 2 +D 1 +L 2 +U 1 +R 1 +L 1 +U 2 +L 1 +U 2 +R 2 +D 1 +U 2 +D 1 +R 1 +D 2 +L 2 +U 2 +L 1 +R 1 +D 1 +U 2 +R 1 +L 2 +U 2 +L 2 +U 1 +L 1 +D 1 +U 2 +D 1 +R 1 +L 1 +D 1 +L 2 +D 2 +L 2 +R 1 +U 2 +L 2 +U 2 +D 2 +L 2 +D 2 +U 2 +R 2 +U 2 +R 1 +D 2 +R 2 +L 2 +D 1 +U 1 +L 2 +R 1 +U 1 +L 1 +D 2 +U 2 +D 2 +L 1 +R 1 +L 1 +U 1 +D 2 +U 1 +D 1 +R 2 +U 2 +R 2 +D 1 +U 1 +L 3 +D 3 +R 2 +L 2 +R 2 +L 2 +D 2 +L 3 +D 1 +L 3 +R 3 +L 3 +U 3 +D 3 +U 2 +L 2 +D 1 +U 2 +R 1 +D 1 +R 2 +L 2 +U 1 +R 3 +D 1 +R 2 +L 1 +U 2 +D 1 +U 2 +R 2 +U 1 +L 2 +U 2 +L 1 +D 1 +L 2 +D 3 +L 3 +D 1 +R 3 +U 3 +R 3 +D 1 +L 1 +R 3 +L 3 +D 2 +U 2 +L 3 +D 1 +L 1 +U 3 +L 1 +D 3 +U 1 +R 1 +L 3 +R 2 +U 3 +L 3 +R 1 +L 1 +D 3 +L 2 +D 1 +U 3 +D 1 +L 3 +U 2 +R 3 +U 2 +L 1 +D 2 +U 3 +D 2 +R 1 +U 3 +R 2 +L 3 +D 1 +R 1 +L 2 +D 1 +U 1 +L 3 +D 2 +U 2 +R 1 +L 3 +R 3 +U 1 +L 2 +D 2 +L 1 +U 3 +D 2 +U 1 +R 3 +L 2 +R 2 +L 2 +R 1 +D 1 +U 2 +L 2 +R 3 +L 3 +U 4 +R 3 +D 3 +R 1 +D 4 +R 1 +D 4 +R 1 +D 1 +R 3 +L 4 +D 1 +L 1 +U 1 +D 3 +U 4 +D 2 +L 3 +R 1 +D 3 +U 4 +D 4 +L 2 +R 3 +U 2 +L 1 +D 2 +U 2 +L 2 +R 2 +D 4 +R 4 +L 1 +R 3 +U 2 +D 1 +U 3 +L 2 +D 4 +U 1 +L 1 +D 1 +U 3 +R 4 +L 3 +R 2 +U 2 +R 1 +U 3 +D 1 +U 3 +L 2 +U 2 +L 3 +D 1 +R 3 +L 1 +U 4 +R 1 +L 2 +R 1 +D 2 +R 4 +L 1 +D 1 +L 3 +U 3 +D 2 +U 4 +L 1 +R 4 +L 3 +D 1 +U 2 +L 4 +D 2 +L 3 +R 3 +L 3 +D 2 +U 2 +L 4 +D 4 +U 3 +L 2 +R 1 +U 4 +D 3 +L 4 +D 2 +L 3 +D 2 +L 2 +U 4 +D 4 +R 4 +D 2 +L 1 +U 4 +D 4 +L 1 +R 3 +L 1 +D 1 +L 3 +D 3 +R 4 +L 1 +R 3 +U 3 +R 4 +L 1 +U 3 +R 2 +U 1 +L 5 +R 5 +D 2 +R 1 +U 5 +L 2 +R 1 +U 3 +D 1 +U 4 +L 2 +U 4 +L 2 +R 3 +U 2 +R 2 +U 1 +L 3 +U 2 +D 5 +R 3 +U 1 +R 2 +U 4 +L 1 +D 5 +R 4 +U 3 +D 1 +U 1 +R 2 +U 4 +R 1 +L 3 +D 4 +U 2 +R 1 +L 1 +R 3 +L 5 +R 3 +L 5 +D 1 +R 3 +D 4 +U 2 +D 3 +L 3 +D 2 +L 1 +R 1 +D 4 +L 5 +U 5 +D 1 +L 3 +R 5 +D 5 +U 2 +L 5 +U 1 +L 4 +D 5 +R 5 +U 4 +D 2 +L 1 +D 3 +L 5 +R 3 +D 3 +L 2 +U 5 +R 1 +L 5 +D 5 +R 3 +L 1 +U 3 +D 5 +R 1 +U 1 +R 4 +L 2 +U 3 +R 2 +D 5 +L 1 +U 1 +L 3 +R 3 +D 5 +U 5 +D 4 +R 2 +L 1 +U 3 +L 2 +R 1 +L 1 +R 3 +D 3 +U 1 +L 4 +D 2 +U 4 +L 6 +D 6 +U 2 +R 3 +U 1 +D 5 +L 1 +D 6 +U 2 +R 2 +L 1 +R 4 +D 4 +L 1 +U 4 +L 5 +R 5 +L 2 +U 5 +R 5 +U 1 +D 3 +L 5 +D 1 +R 5 +L 6 +U 3 +D 3 +U 6 +R 4 +L 6 +R 5 +D 5 +R 3 +L 5 +D 1 +L 2 +R 1 +L 4 +U 5 +R 2 +U 3 +D 1 +L 4 +R 3 +L 1 +R 3 +U 3 +R 3 +L 2 +D 2 +L 1 +R 4 +D 1 +L 6 +D 1 +R 1 +U 6 +L 5 +R 3 +L 3 +D 5 +L 1 +D 6 +R 2 +D 3 +U 6 +D 2 +U 5 +L 5 +D 1 +R 4 +D 2 +U 3 +D 5 +L 2 +D 2 +U 4 +R 2 +L 2 +D 5 +L 2 +R 2 +D 5 +R 6 +D 5 +L 1 +U 2 +R 1 +D 4 +L 2 +R 1 +D 4 +L 2 +R 1 +U 5 +R 1 +L 6 +U 4 +R 6 +U 3 +L 5 +U 2 +R 5 +D 2 +U 6 +D 2 +U 6 +L 6 +U 6 +R 2 +U 4 +D 3 +U 6 +L 7 +R 7 +L 7 +R 4 +L 7 +R 1 +L 4 +R 4 +L 2 +D 5 +U 4 +D 2 +R 1 +L 5 +U 2 +R 2 +U 3 +L 6 +U 4 +D 3 +U 5 +R 1 +U 3 +L 2 +D 6 +L 6 +U 3 +L 1 +D 1 +U 1 +L 1 +D 7 +R 1 +U 7 +R 3 +D 7 +R 6 +L 1 +R 5 +L 1 +D 6 +L 1 +D 4 +L 1 +R 3 +D 5 +U 4 +D 4 +U 1 +D 6 +L 4 +D 7 +R 4 +L 2 +U 5 +R 1 +D 2 +L 3 +R 6 +L 1 +D 4 +R 7 +U 4 +D 7 +L 3 +U 4 +D 2 +R 6 +D 3 +R 2 +L 4 +D 2 +R 1 +L 5 +U 1 +R 1 +U 3 +R 6 +D 6 +R 5 +L 5 +R 1 +U 5 +L 5 +D 6 +L 1 +D 1 +L 5 +U 4 +D 3 +R 6 +U 2 +R 3 +D 1 +L 4 +R 3 +L 7 +R 3 +U 1 +D 5 +L 6 +R 7 +D 3 +L 7 +D 5 +L 5 +D 4 +L 1 +D 7 +L 7 +R 5 +L 3 +D 4 +L 6 +R 6 +U 1 +R 3 +D 1 +L 4 +U 7 +L 2 +R 8 +D 8 +R 3 +L 7 +D 2 +R 1 +L 4 +U 4 +L 3 +D 2 +L 4 +U 1 +R 3 +L 1 +D 7 +R 2 +L 4 +U 3 +L 2 +U 6 +L 4 +R 2 +D 2 +R 4 +U 3 +D 5 +U 7 +R 2 +L 3 +D 4 +U 5 +L 5 +U 5 +D 8 +R 3 +L 7 +U 1 +L 8 +U 2 +D 3 +U 1 +L 5 +D 8 +L 2 +D 4 +U 3 +R 4 +U 1 +R 5 +L 8 +R 7 +U 7 +L 5 +U 6 +D 7 +U 1 +R 3 +U 8 +D 6 +L 5 +R 5 +L 2 +U 3 +D 3 +R 5 +D 7 +R 2 +D 8 +L 3 +U 3 +R 7 +D 5 +U 7 +L 7 +U 1 +R 1 +L 6 +R 3 +L 4 +U 2 +R 1 +L 3 +U 6 +R 6 +D 5 +U 2 +D 7 +U 5 +R 5 +D 2 +R 5 +D 7 +U 8 +D 6 +U 8 +R 4 +D 2 +U 1 +L 3 +U 5 +D 7 +L 4 +R 1 +U 7 +D 1 +U 6 +D 3 +L 6 +U 9 +L 9 +U 3 +L 8 +D 9 +U 7 +D 3 +U 8 +L 6 +D 8 +U 3 +D 2 +L 7 +U 2 +L 2 +R 8 +D 1 +L 2 +R 5 +U 8 +R 7 +L 9 +R 9 +U 3 +D 9 +L 2 +D 6 +L 2 +R 3 +D 2 +U 9 +D 6 +U 7 +D 8 +U 9 +R 4 +D 6 +U 6 +L 6 +D 6 +L 4 +U 1 +D 3 +R 3 +D 1 +R 1 +D 9 +U 6 +R 1 +U 4 +D 9 +L 5 +U 4 +D 5 +U 8 +L 2 +D 5 +L 2 +R 4 +D 7 +U 3 +L 5 +R 6 +D 3 +U 5 +L 4 +U 4 +D 8 +R 4 +D 5 +L 1 +D 2 +U 6 +D 4 +L 6 +U 4 +L 9 +R 1 +D 2 +L 5 +U 6 +R 4 +U 9 +D 6 +R 8 +U 6 +L 9 +R 4 +D 3 +R 3 +U 7 +L 3 +R 1 +L 8 +U 7 +D 4 +L 8 +U 5 +D 4 +R 7 +U 5 +L 5 +D 6 +U 4 +R 6 +D 4 +U 10 +L 10 +U 8 +L 9 +D 2 +U 1 +L 1 +D 7 +U 6 +R 5 +D 7 +R 7 +L 6 +R 1 +D 5 +R 6 +L 2 +R 9 +U 6 +L 2 +R 8 +D 5 +L 7 +R 10 +L 4 +R 6 +D 1 +U 1 +L 3 +D 3 +R 7 +U 1 +L 10 +D 3 +L 1 +U 3 +D 2 +U 9 +D 6 +R 8 +D 6 +L 2 +U 8 +D 10 +U 8 +L 4 +D 2 +U 1 +R 3 +L 7 +U 9 +R 9 +U 7 +L 9 +U 1 +D 9 +U 6 +R 7 +L 5 +R 7 +U 6 +D 2 +L 5 +U 7 +D 3 +L 1 +R 3 +L 1 +D 10 +L 10 +D 6 +U 7 +L 1 +R 2 +U 2 +L 9 +R 9 +U 5 +R 2 +D 10 +U 10 +D 6 +L 8 +U 4 +L 6 +U 8 +D 8 +U 1 +L 4 +D 10 +U 6 +D 6 +L 10 +U 1 +D 3 +L 10 +R 2 +U 1 +D 1 +L 8 +D 10 +L 8 +D 4 +L 1 +D 3 +R 4 +D 1 +R 8 +D 9 +U 6 +D 3 +U 3 +L 8 +U 4 +R 10 +D 9 +U 4 +R 6 +L 6 +D 1 +R 8 +D 5 +L 10 +D 7 +U 3 +L 1 +D 5 +U 8 +D 3 +R 11 +U 2 +L 10 +D 1 +R 9 +U 5 +R 11 +U 1 +D 5 +U 8 +R 10 +U 6 +L 6 +R 6 +U 10 +R 1 +L 6 +R 8 +L 6 +D 1 +L 5 +U 5 +R 11 +U 4 +R 9 +U 10 +R 9 +L 3 +U 6 +R 7 +L 10 +U 10 +L 9 +R 4 +U 4 +R 1 +U 6 +L 9 +R 5 +L 9 +D 10 +U 10 +R 3 +D 11 +R 10 +L 2 +R 11 +L 6 +U 1 +R 8 +D 1 +U 4 +R 5 +D 4 +L 5 +U 10 +R 6 +D 6 +U 5 +D 2 +L 2 +D 11 +R 3 +U 11 +L 11 +U 1 +R 9 +U 1 +D 2 +U 5 +R 11 +D 8 +L 9 +D 6 +L 8 +U 7 +L 9 +U 11 +D 3 +L 1 +U 11 +L 5 +D 7 +L 1 +U 10 +L 10 +D 8 +R 7 +D 8 +U 11 +R 12 +L 10 +U 12 +D 5 +R 7 +U 11 +D 12 +U 7 +L 12 +D 7 +L 10 +U 5 +D 4 +R 5 +D 2 +R 3 +U 3 +L 12 +D 9 +L 8 +D 10 +R 9 +U 10 +R 5 +L 4 +U 1 +D 5 +L 8 +U 3 +R 11 +L 4 +D 6 +L 11 +R 11 +U 2 +R 2 +D 1 +L 7 +U 12 +L 12 +R 8 +U 12 +L 8 +U 6 +R 10 +D 2 +L 7 +U 10 +L 9 +D 12 +U 4 +R 7 +U 10 +L 10 +R 3 +U 2 +L 6 +U 12 +D 4 +R 7 +L 5 +R 7 +D 9 +U 1 +D 2 +L 12 +R 11 +D 2 +R 4 +D 5 +R 8 +L 2 +R 8 +L 8 +U 8 +L 1 +U 2 +R 1 +D 1 +U 6 +L 10 +R 12 +D 3 +U 1 +D 10 +U 1 +R 2 +U 12 +R 8 +U 11 +R 11 +D 9 +L 4 +R 11 +L 12 +U 7 +L 1 +U 10 +R 9 +L 3 +U 12 +L 12 +D 6 +R 10 +D 11 +R 3 +D 1 +U 10 +D 3 +R 10 +D 4 +R 8 +L 2 +R 6 +U 8 +R 10 +U 5 +L 9 +R 2 +D 10 +U 1 +D 7 +R 1 +D 13 +R 12 +D 10 +R 11 +L 11 +U 13 +L 2 +D 7 +U 10 +D 2 +R 12 +U 13 +L 8 +D 10 +R 9 +D 6 +U 9 +L 3 +R 5 +L 4 +U 10 +R 9 +U 9 +D 8 +R 12 +L 9 +D 11 +U 8 +R 8 +D 3 +U 9 +D 7 +U 8 +R 1 +U 8 +L 12 +U 13 +L 8 +U 4 +D 7 +U 12 +L 8 +D 11 +U 13 +L 8 +U 9 +L 1 +R 13 +L 10 +R 1 +L 4 +R 9 +L 8 +R 13 +L 5 +U 9 +D 10 +L 2 +R 10 +L 5 +D 1 +L 2 +D 6 +U 4 +L 3 +U 11 +L 3 +R 7 +U 5 +D 10 +U 3 +D 13 +U 11 +R 1 +U 11 +R 4 +L 3 +U 11 +R 11 +L 12 +R 13 +U 10 +R 7 +L 3 +U 3 +R 10 +U 4 +R 4 +L 10 +R 10 +D 8 +L 11 +D 8 +R 8 +U 2 +R 2 +U 13 +L 3 +D 1 +L 11 +R 7 +U 1 +L 6 +U 8 +R 4 +L 12 +U 1 +L 4 +U 14 +D 6 +R 10 +L 12 +D 6 +R 5 +U 6 +L 4 +D 4 +R 12 +U 6 +R 1 +U 4 +L 3 +U 1 +L 4 +D 1 +U 8 +L 9 +D 13 +U 12 +R 2 +D 12 +R 4 +U 8 +R 14 +U 3 +L 1 +D 1 +U 10 +L 6 +U 2 +L 8 +D 5 +R 7 +U 10 +R 2 +U 2 +R 2 +L 7 +U 4 +R 3 +U 3 +L 8 +D 13 +R 12 +L 8 +D 11 +U 7 +L 13 +D 11 +U 13 +D 2 +L 1 +R 4 +L 8 +R 11 +L 4 +R 4 +L 2 +D 3 +R 10 +D 14 +R 8 +L 6 +D 2 +R 4 +L 11 +D 5 +U 9 +L 9 +D 8 +R 3 +U 11 +R 5 +U 6 +L 2 +D 7 +R 6 +D 13 +R 6 +U 14 +L 14 +R 9 +D 8 +U 3 +R 11 +D 13 +R 14 +L 3 +U 6 +D 7 +R 13 +L 7 +R 12 +D 12 +R 12 +U 12 +R 8 +L 1 +U 7 +R 10 +U 7 +L 2 +D 12 +U 8 +D 14 +U 6 +D 15 +R 2 +U 6 +L 14 +U 15 +R 10 +U 4 +R 8 +D 13 +R 5 +D 15 +U 9 +R 2 +U 15 +R 3 +U 6 +D 14 +L 6 +D 13 +R 13 +L 7 +D 15 +U 12 +L 4 +R 7 +D 12 +U 15 +D 12 +R 14 +U 6 +L 9 +D 8 +L 4 +R 13 +L 13 +D 3 +L 12 +D 12 +U 5 +D 15 +L 1 +U 14 +L 7 +U 4 +L 11 +U 11 +L 12 +R 6 +D 1 +L 1 +U 6 +R 9 +U 10 +L 12 +R 6 +U 15 +D 5 +L 9 +D 5 +L 13 +U 11 +D 12 +R 3 +U 2 +R 5 +D 7 +L 9 +D 8 +R 8 +L 11 +D 7 +R 3 +D 14 +L 1 +R 15 +L 1 +U 2 +L 9 +R 7 +U 2 +R 13 +U 6 +R 3 +L 6 +R 15 +L 2 +D 15 +L 2 +R 14 +L 12 +R 14 +D 6 +L 4 +R 1 +L 2 +U 10 +D 4 +U 8 +R 3 +D 8 +U 12 +L 3 +R 12 +L 15 +R 8 +L 2 +D 11 +U 3 +L 1 +D 12 +L 8 +U 9 +L 13 +U 2 +L 13 +U 7 +L 6 +D 12 +U 15 +L 7 +U 1 +D 6 +R 15 +L 3 +U 10 +R 1 +U 4 +R 2 +U 3 +R 3 +L 13 +R 16 +D 1 +L 2 +U 9 +L 3 +D 6 +L 15 +D 11 +L 7 +U 11 +L 3 +U 1 +L 15 +R 5 +U 14 +L 8 +R 16 +D 8 +U 13 +R 4 +U 6 +L 4 +R 12 +L 12 +U 13 +D 5 +R 5 +L 13 +D 15 +R 10 +D 8 +U 12 +R 6 +L 5 +D 3 +U 4 +L 6 +R 3 +L 6 +D 9 +U 4 +L 5 +R 3 +D 16 +R 2 +U 16 +L 9 +U 12 +R 5 +L 14 +D 14 +R 15 +D 6 +L 3 +D 6 +U 9 +D 11 +L 4 +D 2 +L 9 +D 16 +L 7 +R 1 +L 16 +D 16 +U 16 +R 1 +U 13 +D 8 +R 11 +L 2 +R 13 +D 7 +L 14 +R 7 +U 8 +R 5 +L 13 +R 3 +U 13 +R 14 +U 15 +R 2 +D 5 +R 16 +U 15 +D 10 +U 4 +L 16 +U 3 +D 8 +U 17 +L 17 +R 17 +U 6 +D 16 +U 3 +R 1 +L 16 +U 6 +R 17 +L 15 +D 16 +R 11 +D 17 +L 10 +R 11 +U 2 +D 11 +L 3 +R 12 +U 15 +R 10 +D 14 +U 2 +R 12 +D 1 +U 13 +D 15 +U 16 +L 3 +U 10 +D 16 +U 4 +D 3 +R 5 +U 12 +R 17 +D 5 +R 9 +U 13 +R 12 +L 4 +D 8 +U 1 +D 16 +R 7 +D 9 +U 14 +D 5 +L 5 +U 4 +L 5 +R 8 +L 3 +D 5 +L 3 +R 12 +U 7 +R 6 +D 2 +R 4 +D 11 +L 15 +R 2 +U 9 +L 12 +R 17 +L 13 +U 7 +R 1 +D 16 +U 9 +R 17 +D 2 +L 17 +D 10 +R 16 +L 9 +D 5 +R 7 +D 14 +L 10 +U 12 +L 14 +R 7 +D 6 +R 10 +D 9 +R 2 +L 1 +R 3 +U 3 +D 11 +L 16 +D 6 +R 12 +U 9 +D 3 +R 11 +D 16 +L 4 +R 5 +L 11 +R 8 +D 14 +R 13 +U 8 +D 16 +L 5 +R 12 +U 9 +D 18 +L 10 +R 16 +L 18 +D 7 +L 6 +U 6 +R 10 +L 9 +R 3 +D 16 +R 5 +D 5 +R 6 +D 15 +U 15 +L 14 +D 11 +R 12 +D 7 +R 18 +D 10 +U 1 +D 1 +U 6 +D 7 +U 12 +D 3 +L 7 +U 15 +L 8 +R 11 +L 14 +D 5 +U 12 +R 8 +D 2 +U 7 +D 12 +L 15 +D 2 +U 14 +D 11 +U 2 +D 18 +R 16 +U 2 +D 1 +R 16 +D 15 +R 17 +D 13 +L 13 +U 10 +L 11 +U 6 +R 5 +D 14 +R 7 +L 5 +R 14 +D 15 +R 4 +L 9 +D 11 +L 4 +R 9 +U 12 +L 5 +D 10 +R 1 +D 5 +R 1 +L 16 +D 12 +L 8 +U 1 +D 9 +U 14 +L 3 +R 11 +D 4 +L 5 +R 17 +D 1 +L 12 +R 4 +L 15 +R 18 +U 7 +D 4 +R 3 +U 15 +R 10 +L 10 +U 16 +R 15 +L 12 +D 11 +R 13 +D 2 +R 12 +U 17 +R 14 +L 8 +U 1 +L 16 +D 11 +R 13 +D 19 +U 5 +D 19 +L 10 +R 18 +D 8 +R 1 +L 10 +D 6 +U 1 +L 14 +R 13 +L 14 +U 9 +D 6 +L 19 +U 18 +L 6 +R 13 +D 3 +U 8 +R 17 +U 14 +L 10 +R 1 +L 9 +R 3 +U 14 +R 6 +L 5 +D 8 +R 15 +L 12 +R 13 +U 4 +R 1 +L 10 +U 11 +L 3 +U 8 +R 16 +U 1 +D 3 +U 8 +L 1 +D 1 +L 9 +D 2 +U 5 +L 8 +R 1 +U 6 +L 1 +R 13 +U 10 +D 14 +U 2 +L 7 +R 9 +U 1 +R 2 +L 5 +U 17 +R 19 +L 18 +U 19 +D 18 +L 6 +R 15 +U 5 +R 17 +L 9 +U 3 +L 9 +U 10 +L 10 +R 5 +D 14 +U 14 +R 13 +U 16 +D 8 +L 1 +D 15 +R 10 +D 15 +U 9 +D 18 +L 8 +R 8 +L 3 +U 6 +L 12 +R 8 +D 15 +L 17 +U 11 +R 1 +D 2 +R 1 +U 1 +L 10 +D 11 +U 6 +L 10 +U 5 +R 14 diff --git a/2022/d9/flake.lock b/2022/d9/flake.lock new file mode 100644 index 0000000..a62a638 --- /dev/null +++ b/2022/d9/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1670064435, + "narHash": "sha256-+ELoY30UN+Pl3Yn7RWRPabykwebsVK/kYE9JsIsUMxQ=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "61a8a98e6d557e6dd7ed0cdb54c3a3e3bbc5e25c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/2022/d9/flake.nix b/2022/d9/flake.nix new file mode 100644 index 0000000..a0f5e43 --- /dev/null +++ b/2022/d9/flake.nix @@ -0,0 +1,52 @@ +{ + description = "D4 AOC with Lua!"; + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + outputs = { nixpkgs, flake-utils, ... } @ inputs: + flake-utils.lib.eachSystem flake-utils.lib.defaultSystems (sys: + let + overlays = [ ]; + pkgs = import nixpkgs { system = sys; overlays = overlays; }; + shellHookAfter = '' + echo "The input files should be placed under ./data/{submission,example}.txt" + echo "This problem shares one input between two parts" + ''; + py_pkgs = [ pkgs.python310 ]; + in + { + # Jack of all trades + devShell = pkgs.mkShell + { + nativeBuildInputs = py_pkgs ++ ocaml_pkgs; + shellHook = '' + echo "> Default runtime. This contains both ocaml and python3 env" + echo "Run ./run-py.sh for Python's output and ./run-oml.sh for OCaml's output" + '' + shellHookAfter; + }; + devShells = { + # nix develop ./#lua + # lua = pkgs.mkShell { + # nativeBuildInputs = lua_pkgs; + # shellHook = '' + # echo "> Lua runtime" + # echo "Run ./run-lua.sh to see the output of the solution" + # '' + shellHookAfter; + # }; + + # nix develop ./#fennel + + # nix develop ./#python + python = pkgs.mkShell { + nativeBuildInputs = py_pkgs; + shellHook = '' + echo "> Python3 runtime" + echo "Run ./run-py.sh to see the output of the solution" + '' + shellHookAfter; + + }; + }; + } + ); +} diff --git a/2022/d9/run-py.sh b/2022/d9/run-py.sh new file mode 100755 index 0000000..54b6203 --- /dev/null +++ b/2022/d9/run-py.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env sh +echo "example" +python3 ./src/d9.py ./data/example.txt + +echo "submission" +python3 ./src/d9.py ./data/submission.txt + diff --git a/2022/d9/src/d9.py b/2022/d9/src/d9.py new file mode 100644 index 0000000..4d33bc0 --- /dev/null +++ b/2022/d9/src/d9.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +import sys +from typing import Iterable, Generator +from functools import reduce +from itertools import product + +def add_nd(lhs: Iterable[int], rhs: Iterable[int]): + return tuple(l + r for l, r in zip(lhs, rhs)) +def negate_nd(vec: Iterable[int]): + return tuple(-e for e in vec) +def norm_1k_nd(vec: Iterable[int]): + return sum(abs(e) for e in vec) +def norm_infk_nd(vec: Iterable[int]): + return max(abs(e) for e in vec) + + +def dir_to_offset(dir: str): + match dir: + case "U": + return (0, 1) + case "D": + return (0, -1) + case "L": + return (-1, 0) + case "R": + return (1, 0) + case d: + raise RuntimeError(f"Unknown direction {d}") +def sign(e: int): + return 0 if e == 0 else (1 if e > 0 else -1) + +def move_knot(knot: list[tuple[int, int]], offset: Iterable[int]): + knot.append(add_nd(knot[-1], offset)) + return knot + +def part1(commands: list[tuple[str, int]]): + tail_locs: list[tuple[int, int]] = [(0,0)] # keeps track of where tail moved + head_locs : list[tuple[int, int]] = [(0,0)] # keeps track of where head moved + for dir, rep in commands: + for _ in range(rep): + move_knot(head_locs, dir_to_offset(dir)) + offset = add_nd(head_locs[-1], negate_nd(tail_locs[-1])) + # print(f"{offset=}") + match norm_1k_nd(offset), norm_infk_nd(offset): + case (0, _) | (1, _) | (2, 1): + pass # don't need to catchup + case (_, _): + # negate & normalize in inf_k + move_knot(tail_locs, (sign(e) for e in offset)) + case e: + raise RuntimeError(f"Unknown case {e}\n{tail_locs=}\n{head_locs=}") + # print(f"{tail_locs=}") + # print(f"{head_locs=}") + + return len(set(tail_locs)) + +def part2(commands: list[tuple[str, int]]): + KNOTS = 10 + locs = [[(0,0)] for _ in range(KNOTS)] # 10 knots :) + for dir, rep in commands: + for _ in range(rep): + move_knot(locs[0], dir_to_offset(dir)) # move head + for i in range(1, KNOTS): + offset = add_nd(locs[i-1][-1], negate_nd(locs[i][-1])) + match norm_1k_nd(offset), norm_infk_nd(offset): + case (0, _) | (1, _) | (2, 1): + pass # don't need to catchup + case (_, _): + # negate & normalize in inf_k + move_knot(locs[i], (sign(e) for e in offset)) + case e: + raise RuntimeError(f"Unknown case {e}\n{locs[i]=}\n{locs[i-1]=}") + return len(set(locs[-1])) + + + +def main(lines: Iterable[str]): + splited = (line.strip().split() for line in lines) + striped_lines = [(comp[0], int(comp[1])) for comp in splited if len(comp) > 0] + # print(striped_lines) + commands = [(comp[0], int(comp[1])) for comp in striped_lines] + print("part1", part1(commands)) + print("part2", part2(commands)) + pass + +if __name__=="__main__": + with open(sys.argv[1], "r") as f: + main(f)