diff --git a/09/input b/09/input new file mode 100644 index 0000000..cbc7b08 --- /dev/null +++ b/09/input @@ -0,0 +1,2000 @@ +U 1 +L 1 +D 2 +U 2 +R 2 +D 1 +L 1 +D 2 +R 2 +D 2 +U 1 +L 1 +D 2 +U 1 +D 2 +L 2 +R 1 +U 1 +L 1 +R 1 +U 1 +R 2 +L 1 +D 2 +U 1 +R 1 +L 2 +R 2 +L 2 +R 2 +L 2 +U 1 +L 2 +U 1 +D 2 +L 2 +R 2 +D 2 +L 2 +U 2 +L 1 +U 1 +D 2 +L 1 +D 1 +R 1 +U 1 +L 2 +D 2 +U 2 +L 1 +D 1 +R 2 +D 1 +R 2 +D 1 +R 2 +U 2 +R 2 +L 2 +R 1 +D 1 +U 1 +R 2 +D 1 +U 1 +R 2 +L 2 +U 2 +R 2 +U 1 +D 1 +R 2 +L 1 +U 1 +L 2 +D 1 +R 1 +U 2 +L 1 +D 2 +L 1 +R 2 +D 2 +L 2 +R 2 +U 2 +R 2 +D 2 +L 1 +R 2 +U 1 +R 2 +U 1 +L 1 +R 1 +L 2 +U 2 +L 1 +D 2 +L 2 +U 2 +D 2 +R 2 +D 2 +R 1 +U 2 +L 1 +U 1 +L 2 +R 1 +D 1 +R 1 +L 1 +D 2 +L 2 +R 2 +D 3 +R 2 +D 2 +L 3 +R 1 +L 2 +U 3 +D 1 +U 1 +L 2 +D 2 +L 2 +R 2 +L 1 +U 2 +D 2 +U 2 +D 1 +L 1 +D 1 +R 2 +D 3 +U 3 +D 3 +L 2 +R 2 +U 1 +L 3 +R 2 +U 2 +D 2 +L 3 +D 2 +R 3 +D 3 +U 2 +R 2 +D 2 +U 1 +L 3 +R 3 +U 3 +L 3 +D 3 +L 3 +D 2 +L 1 +R 2 +L 1 +R 2 +D 1 +L 3 +R 2 +D 3 +L 1 +R 1 +L 2 +U 1 +L 2 +R 2 +U 2 +L 1 +D 1 +R 3 +L 1 +R 2 +U 2 +D 1 +R 2 +U 1 +R 3 +U 1 +D 3 +R 3 +L 1 +D 1 +U 1 +D 3 +R 2 +U 1 +R 1 +U 1 +L 3 +D 2 +U 3 +R 2 +D 1 +R 1 +U 2 +L 1 +U 1 +R 3 +U 2 +D 1 +R 2 +U 3 +D 2 +U 1 +R 2 +L 2 +U 3 +L 1 +R 1 +L 2 +D 2 +U 1 +D 2 +R 3 +D 3 +U 4 +R 3 +D 2 +U 4 +L 4 +U 3 +L 1 +U 2 +L 2 +R 3 +U 4 +D 1 +L 1 +D 2 +L 2 +R 1 +L 2 +U 1 +L 3 +D 1 +L 2 +D 3 +R 3 +D 4 +L 2 +U 4 +L 3 +R 4 +D 4 +R 2 +D 2 +L 2 +R 2 +U 4 +L 3 +D 1 +R 1 +L 2 +D 1 +U 1 +L 2 +U 1 +L 1 +U 2 +D 4 +L 4 +U 2 +R 2 +L 2 +R 3 +U 2 +D 3 +U 4 +D 3 +R 2 +L 4 +U 2 +R 2 +U 3 +D 4 +R 4 +L 2 +R 4 +D 4 +U 3 +L 3 +D 4 +L 4 +R 2 +L 1 +R 3 +D 2 +U 4 +R 3 +U 1 +R 2 +U 1 +D 1 +R 1 +L 4 +U 4 +R 1 +D 4 +L 3 +U 1 +D 2 +R 2 +L 2 +D 2 +U 4 +R 3 +L 4 +D 1 +R 1 +U 3 +R 4 +L 2 +R 2 +U 3 +L 4 +R 1 +L 3 +D 3 +R 2 +D 2 +L 2 +D 2 +U 4 +D 5 +L 4 +U 2 +D 3 +L 1 +U 4 +R 5 +D 5 +U 4 +R 5 +L 2 +D 4 +R 2 +L 2 +R 1 +U 1 +D 5 +U 1 +D 2 +R 5 +L 4 +D 4 +R 2 +L 3 +R 3 +L 1 +U 4 +R 2 +L 4 +U 5 +R 5 +D 3 +U 4 +L 2 +U 5 +R 3 +U 5 +L 4 +R 2 +U 2 +R 3 +L 5 +D 2 +R 5 +L 2 +R 5 +D 4 +U 4 +L 5 +U 1 +D 4 +U 5 +L 5 +D 2 +L 2 +D 4 +L 2 +D 2 +R 4 +U 4 +D 2 +L 1 +D 3 +U 3 +R 2 +D 2 +L 5 +D 3 +R 2 +L 2 +U 3 +D 5 +R 1 +L 4 +D 1 +L 5 +R 3 +L 3 +D 3 +L 2 +U 5 +L 5 +R 4 +D 5 +U 2 +R 2 +L 3 +U 1 +D 1 +U 2 +R 3 +U 2 +L 4 +U 4 +L 3 +U 3 +D 3 +R 2 +L 5 +R 5 +U 2 +D 2 +U 4 +D 3 +U 1 +L 1 +D 4 +R 3 +L 1 +D 5 +R 3 +U 1 +L 6 +U 5 +D 4 +R 4 +L 5 +U 2 +D 6 +L 4 +R 2 +U 4 +L 2 +R 1 +U 6 +D 6 +R 1 +L 2 +U 4 +L 2 +D 6 +L 6 +R 3 +L 3 +D 5 +U 6 +D 5 +U 5 +L 6 +R 6 +U 3 +R 6 +U 2 +D 1 +U 3 +R 6 +D 5 +L 3 +R 1 +D 6 +R 3 +D 2 +U 2 +D 3 +L 6 +U 3 +L 3 +U 1 +R 6 +U 2 +D 3 +R 1 +U 3 +R 6 +L 2 +R 4 +L 1 +R 5 +L 1 +R 4 +U 6 +D 3 +U 2 +L 4 +R 1 +L 2 +R 4 +U 5 +R 1 +L 2 +U 1 +R 2 +U 6 +R 1 +D 2 +L 1 +U 2 +D 2 +L 1 +U 1 +R 4 +D 5 +L 4 +D 6 +L 2 +U 3 +D 3 +L 1 +R 3 +D 1 +L 6 +D 1 +U 6 +L 1 +D 6 +U 3 +R 5 +L 2 +R 4 +D 5 +L 4 +D 6 +U 1 +D 6 +L 6 +U 3 +D 3 +U 2 +L 1 +R 5 +U 5 +L 6 +U 5 +R 5 +D 4 +U 7 +R 7 +L 2 +D 3 +R 3 +L 1 +D 6 +R 3 +L 2 +U 2 +D 2 +U 2 +L 7 +R 4 +U 3 +L 3 +R 2 +L 5 +U 3 +R 6 +U 5 +L 7 +U 7 +L 4 +U 5 +L 7 +D 1 +L 1 +D 2 +U 3 +R 5 +D 1 +R 6 +L 3 +U 5 +D 6 +L 4 +D 3 +U 3 +R 3 +U 1 +R 2 +L 7 +D 7 +R 4 +L 6 +D 7 +L 7 +D 2 +U 1 +R 2 +U 3 +L 2 +D 2 +L 5 +D 4 +R 5 +D 7 +U 5 +D 1 +L 4 +U 2 +R 5 +D 6 +L 4 +R 7 +U 6 +D 2 +L 4 +D 4 +L 1 +R 4 +L 1 +R 5 +U 5 +R 5 +L 1 +D 2 +R 1 +U 5 +L 4 +D 2 +U 3 +L 2 +R 5 +U 4 +L 1 +R 5 +L 1 +D 5 +R 7 +L 5 +U 5 +L 7 +U 3 +D 6 +U 2 +L 2 +R 5 +U 7 +D 1 +R 2 +U 4 +R 7 +U 6 +L 3 +U 5 +D 3 +U 5 +D 6 +R 2 +U 8 +R 7 +L 5 +U 1 +D 3 +L 3 +U 6 +L 6 +U 5 +D 7 +U 3 +L 6 +U 1 +D 3 +R 5 +L 2 +R 1 +D 6 +R 2 +L 1 +R 5 +D 3 +L 1 +R 3 +L 6 +D 5 +U 5 +L 5 +D 3 +L 4 +R 7 +D 6 +L 8 +R 6 +U 8 +D 6 +R 3 +U 4 +R 1 +U 6 +R 3 +L 6 +D 2 +U 5 +R 2 +D 5 +U 7 +D 2 +U 2 +R 3 +L 3 +U 4 +R 3 +U 7 +L 2 +D 3 +R 2 +D 4 +L 4 +D 8 +R 2 +U 2 +L 7 +R 8 +U 8 +L 4 +U 3 +R 3 +U 8 +D 2 +U 5 +D 8 +R 8 +L 8 +R 4 +D 8 +L 7 +U 6 +L 4 +D 6 +U 2 +L 4 +U 8 +R 8 +U 6 +D 1 +R 5 +U 5 +L 8 +U 2 +R 3 +U 7 +L 5 +U 5 +L 7 +D 8 +R 7 +U 4 +D 7 +U 4 +L 3 +R 3 +D 5 +U 1 +L 6 +D 3 +U 5 +D 3 +R 1 +U 2 +L 3 +R 8 +U 1 +D 6 +R 6 +U 9 +D 4 +U 4 +D 2 +L 1 +R 2 +L 6 +U 6 +L 1 +R 1 +U 9 +D 1 +R 4 +L 3 +D 8 +U 7 +D 1 +R 7 +L 6 +U 3 +R 2 +L 2 +D 6 +U 5 +D 6 +L 6 +U 8 +L 5 +R 4 +U 6 +L 1 +U 8 +L 4 +R 1 +D 7 +R 9 +U 2 +D 3 +R 6 +L 8 +U 6 +R 4 +D 1 +U 7 +R 1 +D 9 +L 8 +D 9 +R 1 +U 6 +R 7 +D 2 +U 7 +R 4 +D 9 +R 7 +D 2 +U 1 +R 3 +D 4 +L 5 +U 7 +R 7 +D 2 +U 8 +R 8 +L 4 +U 6 +L 3 +D 8 +L 8 +D 9 +R 7 +L 5 +U 5 +R 4 +U 9 +R 3 +U 9 +R 1 +U 2 +R 9 +U 8 +L 8 +U 7 +R 1 +D 9 +U 4 +L 7 +R 3 +U 5 +L 6 +D 1 +L 4 +D 4 +U 6 +R 7 +L 7 +U 3 +L 8 +D 8 +L 7 +U 3 +D 4 +R 8 +D 1 +R 8 +U 10 +L 1 +U 2 +D 4 +U 3 +R 8 +U 3 +D 5 +R 8 +D 10 +R 8 +D 4 +R 9 +D 1 +L 3 +U 7 +R 7 +L 1 +D 8 +R 6 +D 4 +U 5 +L 2 +U 3 +R 7 +U 10 +L 1 +U 7 +R 1 +U 7 +D 2 +L 10 +U 2 +L 4 +D 6 +R 10 +D 4 +U 7 +L 6 +R 4 +U 6 +D 1 +U 6 +D 5 +U 6 +L 4 +D 2 +L 2 +U 7 +R 2 +U 9 +L 9 +D 2 +U 9 +R 9 +U 9 +D 3 +R 5 +D 3 +L 10 +U 3 +D 10 +L 10 +D 1 +U 2 +D 3 +R 8 +L 1 +U 6 +L 2 +R 9 +U 3 +D 5 +L 8 +U 4 +R 8 +D 5 +L 6 +U 7 +D 8 +R 9 +U 9 +R 8 +D 4 +R 5 +U 6 +L 8 +R 2 +D 3 +L 8 +D 6 +R 7 +L 10 +U 9 +R 6 +L 7 +U 8 +R 5 +L 1 +D 1 +R 6 +D 1 +R 9 +L 1 +U 5 +R 3 +D 7 +U 8 +D 6 +L 6 +U 11 +D 8 +L 6 +D 6 +L 7 +R 10 +U 5 +D 7 +R 5 +D 3 +L 4 +R 3 +D 2 +L 6 +U 6 +D 3 +L 4 +D 9 +L 6 +U 9 +L 3 +U 10 +R 5 +U 8 +R 2 +D 3 +L 6 +R 2 +U 6 +R 8 +D 2 +U 2 +R 5 +U 9 +L 5 +D 8 +R 2 +U 1 +R 1 +D 6 +U 4 +R 7 +L 7 +D 7 +U 11 +R 6 +U 11 +D 11 +R 6 +L 2 +D 10 +R 6 +D 5 +R 7 +D 11 +R 2 +U 10 +L 6 +D 4 +R 1 +L 3 +D 9 +U 8 +L 6 +U 1 +L 7 +D 10 +U 1 +L 1 +D 2 +U 3 +L 4 +R 6 +U 11 +R 6 +U 3 +L 8 +D 3 +R 7 +L 3 +D 4 +L 5 +U 8 +L 11 +R 1 +U 1 +L 9 +D 5 +U 3 +R 1 +L 6 +U 1 +L 3 +D 1 +L 8 +U 1 +D 9 +R 7 +U 11 +R 10 +U 8 +R 5 +U 3 +L 7 +R 3 +L 4 +U 6 +D 3 +U 3 +R 3 +D 1 +L 7 +U 5 +D 1 +U 6 +L 8 +D 3 +R 6 +U 10 +R 6 +D 1 +U 7 +R 5 +L 6 +R 5 +D 3 +R 9 +U 11 +L 8 +R 9 +U 5 +R 5 +L 1 +U 7 +L 11 +U 5 +R 3 +U 7 +R 9 +L 11 +D 11 +L 3 +U 11 +L 2 +U 3 +R 5 +D 1 +L 10 +R 8 +L 11 +U 1 +D 11 +L 4 +R 8 +L 9 +D 6 +U 10 +L 1 +R 12 +U 2 +D 8 +L 8 +U 1 +L 12 +D 9 +R 3 +U 3 +D 10 +U 11 +D 9 +U 8 +L 7 +D 10 +L 3 +U 9 +D 5 +R 12 +D 3 +R 9 +L 8 +R 12 +U 11 +D 5 +R 10 +D 8 +L 12 +U 7 +L 1 +R 7 +D 1 +R 12 +L 3 +R 7 +L 1 +R 2 +D 4 +U 3 +L 8 +U 2 +R 8 +U 5 +L 5 +R 7 +L 7 +R 7 +U 8 +R 3 +D 4 +L 7 +U 5 +L 5 +U 1 +D 12 +R 11 +L 5 +D 10 +R 8 +U 12 +L 11 +U 2 +R 2 +D 1 +U 4 +D 1 +U 1 +R 11 +D 1 +L 8 +U 5 +L 11 +D 11 +R 12 +L 6 +R 8 +L 13 +U 7 +R 7 +D 1 +R 13 +D 6 +L 5 +R 10 +U 4 +R 11 +D 6 +U 1 +D 6 +R 1 +U 1 +L 12 +U 8 +R 4 +U 9 +R 12 +D 1 +R 8 +D 2 +U 5 +L 7 +U 12 +L 5 +D 10 +R 8 +D 6 +R 13 +D 7 +U 7 +L 9 +D 12 +U 5 +L 7 +D 4 +U 2 +R 13 +U 11 +L 3 +R 6 +D 5 +R 6 +L 11 +U 6 +D 5 +U 6 +L 2 +D 8 +R 4 +U 4 +L 12 +D 6 +U 8 +D 8 +L 5 +D 12 +R 8 +U 11 +D 8 +L 7 +U 13 +L 11 +R 6 +U 5 +D 9 +L 11 +U 10 +D 13 +R 5 +D 8 +R 7 +D 6 +R 7 +D 2 +L 13 +R 11 +U 1 +D 7 +U 13 +R 9 +U 12 +R 13 +L 2 +U 13 +D 2 +U 6 +L 6 +D 5 +R 5 +L 2 +U 1 +R 4 +U 6 +L 10 +R 12 +L 3 +D 3 +L 8 +D 10 +U 2 +L 11 +U 2 +L 11 +R 8 +U 12 +R 3 +U 5 +L 7 +D 6 +U 6 +L 10 +R 4 +L 1 +U 8 +D 4 +R 13 +L 7 +U 6 +L 9 +U 13 +D 13 +L 8 +U 3 +L 13 +D 14 +L 1 +U 9 +D 1 +U 9 +R 12 +D 7 +L 9 +R 13 +D 12 +U 10 +D 4 +L 13 +R 11 +L 2 +D 9 +R 4 +U 10 +L 2 +D 8 +U 11 +L 14 +R 1 +U 2 +D 9 +U 8 +L 4 +D 14 +U 10 +R 3 +D 12 +U 12 +L 1 +U 1 +D 7 +U 8 +R 9 +D 7 +R 11 +D 11 +R 13 +D 14 +L 5 +D 1 +U 12 +D 7 +U 13 +D 9 +U 6 +R 5 +U 13 +L 4 +D 8 +L 3 +U 8 +D 4 +R 4 +D 2 +L 1 +D 12 +R 11 +U 11 +D 6 +R 12 +U 3 +D 2 +R 6 +D 1 +U 11 +L 7 +D 9 +L 8 +R 1 +U 13 +D 7 +L 9 +U 4 +D 8 +L 12 +D 6 +R 4 +D 5 +U 13 +L 2 +D 11 +R 4 +D 5 +L 4 +U 9 +L 12 +U 10 +D 3 +R 15 +L 3 +D 10 +L 4 +R 2 +D 10 +R 1 +U 10 +L 9 +D 7 +L 5 +R 8 +U 3 +D 9 +R 5 +D 8 +U 5 +D 5 +L 8 +U 2 +R 5 +U 4 +D 6 +R 3 +L 1 +U 15 +R 12 +D 14 +R 12 +U 14 +D 8 +U 10 +R 9 +D 8 +L 10 +R 4 +U 5 +D 15 +U 6 +D 4 +R 7 +D 1 +R 15 +U 15 +D 4 +R 6 +L 1 +R 7 +L 12 +U 3 +R 1 +L 6 +D 6 +R 5 +D 15 +R 1 +U 10 +R 4 +D 13 +L 5 +D 10 +L 7 +R 5 +U 15 +L 11 +U 4 +D 9 +U 12 +R 12 +L 9 +D 10 +U 7 +R 3 +L 10 +R 12 +D 2 +U 8 +L 7 +R 3 +U 1 +D 10 +L 11 +R 12 +L 8 +U 1 +D 12 +L 4 +D 4 +L 6 +D 7 +R 3 +L 7 +U 1 +R 4 +L 1 +U 2 +L 6 +D 4 +L 7 +R 7 +L 15 +U 4 +R 7 +D 8 +U 9 +D 3 +L 5 +U 6 +R 2 +D 10 +L 9 +U 16 +L 15 +U 1 +R 15 +U 13 +L 12 +D 10 +R 1 +D 6 +R 3 +D 1 +L 14 +R 10 +D 2 +R 10 +U 12 +R 10 +L 13 +U 14 +D 11 +U 16 +R 6 +U 4 +R 6 +U 13 +R 5 +D 1 +L 12 +U 14 +D 11 +R 11 +D 7 +L 3 +R 7 +L 9 +U 11 +D 6 +U 14 +D 2 +L 1 +R 16 +L 14 +D 10 +U 4 +R 15 +U 11 +R 10 +D 5 +R 8 +U 13 +D 11 +U 9 +R 8 +D 4 +L 11 +U 8 +R 7 +D 14 +U 8 +D 6 +L 13 +R 2 +L 16 +R 10 +U 7 +L 10 +U 2 +L 13 +U 8 +D 5 +U 3 +R 14 +D 15 +R 10 +D 4 +U 10 +D 15 +R 6 +U 13 +R 1 +U 16 +L 2 +U 6 +L 8 +D 2 +L 11 +U 15 +D 5 +U 1 +R 3 +D 16 +L 3 +R 4 +D 8 +R 10 +L 8 +D 1 +U 2 +R 4 +U 3 +D 16 +U 10 +R 11 +L 11 +R 7 +L 3 +U 17 +D 1 +L 10 +D 6 +L 6 +D 6 +R 8 +U 16 +D 15 +U 12 +L 12 +D 17 +U 9 +R 7 +U 12 +L 6 +D 5 +R 2 +L 17 +U 6 +R 1 +D 13 +R 11 +D 17 +R 5 +L 3 +D 3 +U 4 +D 4 +U 4 +L 11 +R 4 +L 15 +D 7 +U 13 +D 12 +U 1 +L 16 +D 2 +L 12 +R 15 +U 11 +R 15 +D 12 +R 4 +L 3 +R 3 +U 3 +L 13 +U 4 +L 16 +U 7 +D 17 +R 14 +U 11 +D 4 +L 11 +U 9 +D 8 +U 3 +R 10 +U 16 +R 5 +L 10 +D 3 +L 7 +U 9 +R 2 +U 14 +L 8 +R 9 +L 6 +D 14 +L 14 +U 3 +D 9 +L 8 +D 14 +U 6 +L 4 +R 7 +D 4 +L 6 +U 11 +R 8 +D 8 +R 5 +U 17 +R 15 +U 1 +L 17 +D 14 +L 2 +D 3 +L 16 +D 7 +L 16 +R 10 +D 6 +R 11 +U 10 +L 14 +R 2 +U 3 +D 1 +R 16 +L 5 +R 2 +D 15 +U 6 +L 3 +D 9 +R 12 +D 13 +U 17 +R 16 +D 15 +U 3 +D 13 +L 7 +R 12 +U 18 +L 12 +U 7 +L 18 +D 12 +L 17 +D 6 +L 8 +D 16 +L 9 +R 8 +U 9 +D 9 +U 16 +L 10 +U 12 +L 9 +U 10 +R 13 +L 7 +U 17 +L 13 +D 18 +L 6 +R 14 +L 9 +U 1 +R 8 +U 3 +R 13 +D 3 +L 14 +D 8 +L 12 +R 3 +L 11 +R 2 +D 7 +R 14 +L 9 +U 1 +D 5 +U 10 +R 5 +D 8 +U 2 +D 17 +L 16 +D 3 +U 15 +R 17 +D 10 +R 16 +L 3 +U 2 +R 5 +L 7 +U 7 +D 12 +L 8 +R 4 +L 18 +R 13 +L 18 +R 11 +U 1 +D 1 +L 12 +U 15 +L 4 +D 12 +U 13 +L 14 +D 14 +L 12 +D 14 +U 14 +L 6 +R 5 +D 6 +L 13 +U 16 +L 11 +U 7 +R 10 +D 6 +U 17 +L 12 +R 11 +D 11 +U 7 +R 2 +U 9 +R 16 +L 5 +D 16 +R 7 +U 4 +D 19 +L 2 +D 18 +R 1 +U 15 +R 13 +D 5 +R 2 +U 2 +D 12 +L 17 +D 11 +U 8 +R 13 +U 11 +R 2 +U 13 +R 11 +U 19 +L 17 +R 17 +D 16 +R 18 +U 9 +L 13 +D 1 +R 16 +D 13 +R 6 +D 9 +R 7 +U 10 +D 10 +U 8 +R 8 +L 2 +R 17 +D 13 +L 9 +U 19 +D 6 +L 14 +R 9 +L 19 +D 17 +R 17 +D 10 +L 1 +U 15 +D 17 +L 12 +R 10 +L 14 +U 16 +L 17 +U 8 +R 8 +U 4 +R 11 +U 14 +R 2 +L 9 +U 11 +D 14 +U 14 +D 9 +L 10 +U 19 +D 10 +R 5 +D 1 +L 3 +U 14 +R 11 +L 17 +R 7 +D 8 +R 1 +U 2 +R 4 +L 2 +R 13 +U 16 +D 2 +L 2 +R 2 +U 16 +L 3 +D 7 +R 7 +U 2 +L 5 +U 7 +R 17 +U 6 +D 12 +U 17 +D 13 +L 19 +R 19 +L 9 +D 14 +R 15 +L 7 +U 11 +R 2 +D 16 +U 6 +L 12 diff --git a/09/solution.c b/09/solution.c new file mode 100644 index 0000000..1fecfbd --- /dev/null +++ b/09/solution.c @@ -0,0 +1,83 @@ +#include +#include +#include +#include + +typedef struct pos { + int32_t x; + int32_t y; + struct pos *next; +} pos; + +#define TBL_CAP (0x01000193U+1) + +uint32_t fnv1a_32(pos p) +{ + uint32_t h = 0x01000193U * (0x811c9dc5U ^ p.x); + h = 0x01000193U * (h ^ p.y); + + return h % TBL_CAP; +} + +int tbl_get(pos **t, pos p) { + uint32_t idx = fnv1a_32(p); + + pos *itm = t[idx]; + if (!itm) + itm = t[idx] = calloc(1, sizeof(pos)); + else if (itm->x != p.x || itm->y != p.y) { + for (;;) { + if (itm->next) { + if (itm->next->x == p.x && itm->next->y == p.y) + return 0; + itm = itm->next; + } else { + itm = itm->next = calloc(1, sizeof(pos)); + break; + } + } + } else return 0; + + itm->x = p.x; + itm->y = p.y; + + return 1; +} + +int main(void) { + uint32_t S = 0, G = 0; + static pos *vS[TBL_CAP] = {0}; + static pos *vG[TBL_CAP] = {0}; + static pos rope[10] = {0}; + char dir; + int steps; + + while (scanf("%c %i\n", &dir, &steps) == 2) { + for (uint32_t s = 0; s < steps; s++) { + switch (dir) { + case 'U': rope[0].y++; break; + case 'D': rope[0].y--; break; + case 'L': rope[0].x--; break; + case 'R': rope[0].x++; break; + } + + for (int r = 1; r < 10; r++) { + if (rope[r].x != rope[r-1].x || rope[r].y != rope[r-1].y) { + int32_t hdiff = rope[r-1].x - rope[r].x; + int32_t vdiff = rope[r-1].y - rope[r].y; + int diag = abs(hdiff) + abs(vdiff) > 2; + + rope[r].x += (hdiff > 1 || (hdiff > 0 && diag)); + rope[r].x -= (hdiff < -1 || (hdiff < 0 && diag)); + rope[r].y += (vdiff > 1 || (vdiff > 0 && diag)); + rope[r].y -= (vdiff < -1 || (vdiff < 0 && diag)); + } + } + + S += tbl_get(vS, rope[1]); + G += tbl_get(vG, rope[9]); + } + } + + printf("Silver: %u\nGold: %u\n", S, G); +}