Advent of Code 2025 - Zig

Day 4

Changed files
+249
inputs
src
+137
inputs/day4.txt
···
··· 1 + ..@....@@.@.@@@@.@..@@@.@..@@.@@..@@..@@@@.@..@.@@@@@.@@@@..@@@.@@.@@@.@..@@@@@@.@@.@@@@.@@.@@.@..@.@@@@...@@@@@.@.@.@@@@@@@...@.@@@@@.@@ 2 + @.@@.@@@@@@@@..@@@@@@@...@.@.@@@@@@@.@...@@@@@@@@@@@@@.@@.@.@@.@@...@@@@.@..@@@@@.@@@@@.....@.@@@..@.@@@@..@.@.@@@.@@..@@..@@@@@@.@.@..@. 3 + .@@@@...@@@@..@.@..@@@@@@.@@.@@.@@@@@@.@@@@@..@..@@@@@@..@.@.@@@@@.@@@@@@.@.@@.@..@@@@@@@@@@..@@@@..@.@.@.@.@@..@@.@.@@@@@@@@@..@.@@..@@. 4 + .@@@@.@.@.@@@..@..@@@@@..@@@@.@.@@@..@@@@.@..@@..@@@.@@@@@.@@@@.@.@.@.@...@@.@@@@.....@...@.@..@@.@@.@@@@.@@...@@.@.@@...@@@@.@@.@@.@@@@@ 5 + @@@@..@@@@.@@@..@..@.@@.@.@@@..@@..@.@.@.@.@@.@.@.@.@@.@@.@..@.@@@.@@..@@..@@@@@@@.@@.@@@@@...@..@@@@@@@..@@@@@@@@.@@@...@.@@@@@@@@@..@@. 6 + @@.@@@.@..@..@@@.@@@@@...@.@@@@@@@@.@@....@.@@@.@@@@.@@@@@..@@.@@@.@@@.@@@@@@@.@@.@@@..@.@@@@@@.@.@@@@@...@@@@@@.@@@@@@@.@@..@@..@@...@@. 7 + .....@@@@@@.@@@@.@.@@@@@.@@@@.@@@@@@@@.@@@@.@.@@..@.@@@@.@@.@..@..@@@@@@@@@@.@@....@@.@...@..@.@@@@@@@@@..@.@@@.@.@@.@@@.@.@@@@.@@@@...@@ 8 + @@.@@@.@.@@@@@@@.@@@@@.@@@@.@.@.@@.@.@.@@@@@@.@.@@@.@@@.@.@@.@.@@@@@@@@@.@.@@@@.@@@@@.....@.@@@@@.@@@@@@@@@@@@@@@...@.....@@@@..@.@@.@@.. 9 + .@.@@@.@@..@@@@@@.@@@@.@@@@@@.@@@.@@@@@@@@..@@@@@@@..@@@@.@@..@@.@.@@@@@@@@@@@..@@@@@.@@@..@@@....@@@.@@...@@@@@@...@@..@@@.@@...@@@@.@@@ 10 + @@@@@...@@@@.@@@@@.@@.@.@.@..@@@@@.@......@@@.@@..@@@@@.@@@@@@@.@...@...@@.@@.@.@@@@..@..@@@@@@@@@@.@@.@@@.@.@@@@.@@.@.@@@@...@@@.@@@@@@. 11 + @@@@.@@..@@@@@@.@.@.@@.@@.@@@@@@@..@@@@@.@@@@.@...@@@@@@@@.@@.@...@@@@@@.@..@@@@@..@..@@@@@@.@@@@..@@.@@.@@@@@@@..@@@.@.@@@@@@@@@.@@@...@ 12 + ..@.@..@@.@@@@.@@@@@.@@.@@.@@@@@.@@.@@@@@@@..@@@@@.@@@@.@@@@.@@@@@@@@@.@@.@@@.@..@@..@@..@.@.@@..@@.@@@@@@@@@@.@@@@@@.@@.@@@@@@@.@@@@@@@. 13 + @@@@@.@@@.@..@..@@...@.@@.@@..@@@@.@@.@@@@@@@@.@@@.@@.@.@.@.@@..@@@@@@@@@@@@.@@.@....@.@@.@..@.@.@@@@.@@@@@@...@@@.@@@@@.@.@.@@@@.@@@.@.@ 14 + .@@@@.@@.@@.@@@@@@@...@@@..@..@@@@@@....@@@@@@..@.@@.@.@@@.@@.@@@..@@..@@@@@@@@@@@@@@@....@.@@@..@@@@@@...@@@@@@@@@.@...@.@.@..@@.@@@.@.. 15 + @@..@@@.@@.@.@@.@.@.@@.@@...@@.@.@.@@@@@@.@..@@.@@.@@@...@..@.@@@....@@@@@@..@..@@@@.@..@..@@@@@@@@@@@.@@@..@@@.@.@.@@@.@@@..@.@@@@@...@@ 16 + @@@@@@..@.@.@@@...@@@@.@.@..@..@@@.@@.@@@@@@..@@@@@.@@.@.@.@@@.@@@@..@.@@@.@@@@@@@@@@@@..@@.@@@..@@@@@@@@@@@@@@@.@@...@.@..@@@@.@@.@@@@.@ 17 + @@@@@@@@@.@@..@@.@@@@@@@@@@@@@@.@@..@@@@.@@.@@@@@@.@@@@.@.@..@@@@@@.@@@.@@@@@@@@@.@@@@.@..@@.@@@@.@@.@@@@@@@@.@@..@@@@.@@@@@.@@@@@@.@.@.. 18 + @.@@@@@@.@@@.@@..@..@@.@@@@..@.@@...@@...@...@@@@@@.@@.@@@@.@.@.@.@@.@@..@.@@@@.@.@.@.@@.@..@@@..@..@.@.@@@....@...@@.@.@@.@.@.@.@..@...@ 19 + @..@.@@@.@@@.@@@.@@@@@@@@..@@.@@@@@@.@@@.@@@.@@@@@...@...@@.@.@@.@.@@@.@@@@.@@@@@@.@@.@@...@.@@@@@@.@.@@.@.@@..@@@.@..@.@@.@@@@@@@@@@.@@@ 20 + @@@@..@.@@@.@@..@@..@.@@..@..@@.@@@@...@@@...@.@@@@..@@@@@@@..@.@@@@@@@@@@@.@..@@..@@.@@@@.@@@@@.@...@.@@.@@@@@.@@@..@@@@@.@@@@@@@@@.@... 21 + @@...@.@@.@@.@@@@@@..@.@@..@@@@.@@.@.@@@@.@@@.@@@@.@@...@.@.@@@@..@@..@@@.@@@@.@@@@@@.@..@.@.@.@@@.@@@@..@....@..@@@.@@.@@.@@@@@@@@.@@@.. 22 + @@.@@@@@@..@@.@@@...@@..@@@@@@@.@..@@@@.@.@@..@.@@@@@@@@@@@@.@@@.@@@.@....@.@.@.@@@.@@@@.@.@@.@.@.@@.@.@@@@.@.@@.@@@@@@@@.@@...@@@@.@@.@. 23 + .@@@@.@.@@...@..@..@...@@@.@...@.@..@@@@@.@@@@..@@@.@@@@@@@@@...@@@..@.@..@@.@@@@@.@..@@@@@@.@@@@@@@@@@..@..@@@@@@@@@@.@@...@@@@.....@.@@ 24 + @@@.@.@@@.@@@@@.@.@..@.@@.@@@.@..@.@@@@.@..@.@@@.@@@.@@.@..@@@@..@@@@.@.@..@@.@..@@@@@.@@@@@@@@@..@@@@@@@@@@@.@@.@@@@.@..@@.@@@@@@@@@@@.. 25 + @.@..@..@@@@.@..@.@.@@@@@@.@.@...@.@@..@@.@@.@@@@@.@@@.@@@@..@@.@.@@.@..@.@@.@...@@@@@@@..@@@@@.@@.@.@@@@.@@..@.@@@@.@@@@@@@@@@@..@@.@..@ 26 + ..@@@..@@..@.@@@@@@@.@@@@@.@@..@@@@@@@.@.@@.@@.@..@.@@@.@@.@@@@..@.@@.@......@@.@@....@..@.@@@..@......@.@.@@.@.@.@.@@@@@@@@.@@@@.@@@@.@@ 27 + @..@@@.@.@@@..@@.@@@@@@@.@@@@@@@.@@..@@..@@@@@..@@@.@@@@@@@@@.@@@@.@..@.@@@@@.@.@@....@@@...@@@.@@@@@@@@@@@@.@@@@@@@@@@.@@....@...@.@@@.@ 28 + ..@.@@@@@.@..@.@.@@@@@@@@@@@.@@@@@@@@@@@@@@.@.@@.@@@@.@@@.@@@@@@@..@@.@@@@.@@.@@@@@@.@@@...@@....@@@.@@.@@.@..@@..@@@@.@.@...@@.@@.@@@@.@ 29 + ..@@.@@.@.@@@.@..@@@@@@@@.@@@@.@@@@@@@.@.@@@@@.@@@.@@@..@.....@.@@@@@@@@@.@..@@@@@..@.@.@@@@@@@@@.@@@.@.@@..@@..@@@..@.@@@@@@@@@@@@.@@@@@ 30 + @.@.@@@@.@.@..@..@..@@.@@@@@@@.@@@@@@@..@.@@@..@.@@@@@@@@...@@..@@@.@.@..@.....@.@@@@.@.@..@@@@@.@@@@@@@@.@@..@@..@@@..@..@.@.@...@@@@@.. 31 + .@@@@.@@@@@@@@@.@@@@.@..@@.@.@@@@@.@.@..@@..@.@@@@..@@@@.@@@@@@@@@@.@@@.@.@@.@@..@@@@@@.@@@@@.@@@@@@@@.@.@.@..@.@...@@@@@@.@@@@@@@@@@@@@@ 32 + @.@@.@@..@..@@@@.@.@..@.@.@@.@.@.@...@.@...@.@.@.@@@@@@@@@.@.@..@@@@@@@.@@.@...@@@.@@.@...@.@.@@@@@@@@@@@@@@@..@@.@@.@.@@.@@.@@@@..@@.@.@ 33 + @@@.@...@.@..@@..@@.@.@.@@@...@..@@@.@.@..@@@@@@..@..@.@@@@@..@@.@@@..@.@@.@@@@.@@.@@....@..@@..@@@@@.@@@@@@@@.@@.@@@@.@@@..@@@@@.@@@.@@@ 34 + @@.@@@@@.@.@@@@.@.@..@@@@@.@@@@@@..@.@@@@@.@.@@.@@@@.@@.@@@@@@@@@.@@@@@...@...@@@@@@.@@.@.@.@@@..@.@..@@@.@.@.@..@..@@.@@@@@@@@.@@@@.@.@@ 35 + ...@@.@..@.....@@@@@.@.@.@@.@@@@..@@@..@@@@@...@@@@.@.@@@.@..@.@@@@.@@..@@@....@@@..@@@@@.@@@@@.@@@.@.@@@@@@..@.@@.@@@@@...@@@@@@@@..@@@. 36 + @@..@...@....@.@@@@.@@@@@...@@@@@.@...@@@@..@..@@..@@.@@.@@.@..@@@@...@@.@@@.@@@.@@.@...@.@@@@.@.@@@@@.@.@.@..@@..@@@@.@....@@@@.@@@@..@. 37 + @@@@....@@@..@.@@@.@.@@@@@@@@@@.@@@..@@.@@@@.@@@@@@@@@@@@@.@@@@@@@@..@@@@@..@@...@@...@.@@.@@@@.@@.@@@@.@.@@@@@@@@.@..@@..@@.@..@@@@@..@@ 38 + @@@.@.@@...@@.@.@.@@@@.@.@@...@@.@.@.@@@@@.@.@@.@@@.@.@@..@@@@@@@@@@@..@@@..@.@....@@.@...@..@@@@.@@@@@@@..@@@@@.@@.@@..@@@.@.@@@@@@@@@@@ 39 + ....@@@@@@..@@@..@.@@@@.@.@@@@@@@@.@.@@.@..@@@@@@.@@.@.@...@.@@..@@.@@..@@@.@@@.@@..@.@@@..@.@@@@@@.@@@@.@@@.@@.@@.@@..@@@@@@@@@@@@@@@.@@ 40 + @.@@.@@@..@@@.@@@@@@.@..@@@.@@@@@@@@.@@....@.@.@@@...@...@@@@.@@.@..@..@@@@@@@@..@@@@@..@.@.@@@..@@@@..@.@@.@@@@@.@@@@.@@.@@@...@...@@@.@ 41 + @@@.@...@.@@@@@@.@@@.@@@@@@@@@@@..@@.@@@..@@.@@.@..@@@@@@.@@.@.@@@.@.@@@@@.@@@@.@@.@@@@@.@.@..@.@@@@@@@..@.@@..@@@@..@@@@@@@@@.@@@.@@@@@@ 42 + .....@.@@@.@.@..@.@@.@.@@.@.@@@.@.@.@..@.@....@@.@..@@@@....@@@@..@@.@@@@@@@@@.@@@@@.@@@@@@@@@@@@@.@@@@.@..@...@@@@..@@@....@@.@....@.@@@ 43 + @@.@@@@@@..@.@@@.@..@..@@@..@@@@.@.@@.@@@..@@@@.@@..@@@@@@@@.@@@.@@@....@@.@@@..@@@@...@@..@@@@.@.@@.@@@@@.@.@..@@@@@...@...@@.@.@.@@@@.@ 44 + @@@.@@@.@....@@@@...@@...@@@@@@@@@@..@.@.@@.@@@@@.@..@@...@@@@@@@@.@@@..@....@.@@.@@@..@@..@@..@.@.@@.@.....@@@@@@.@@.@@@@@@@@.@.@@.@@@@@ 45 + @@.@@@@.@@...@@.@@..@.@..@@@@@@@.@@.@.@.@.@.@@..@.@.@@@@@@.@@@@.@.@.@@@@.@@.@@.@.@....@@@@@..@@.@@@@@@.@.@@.@@@@@@.@@..@.@.@@@@.@@...@@.@ 46 + .@@@.@@@..@.@@@@@...@@.@.@@.@@@@@@@@.@@@@.@@.@@@.@@.@@.@@@@.@@@@@.@.@@@@@@...@@@@@@@@@@@.@.@..@.@....@@@@@@.@....@@.@@@@@@.@@@.@@@@.@.@.@ 47 + @.@...@...@@@@@@..@@@@.@@..@....@@@.@@@.@.@.@.@@.@@@...@@..@@.@...@@@.@@@@@@@.@.@@@.@@..@.@..@@@.@@@...@@@.@.@@@.@.@@.@@.@..@@.@@.@..@@@@ 48 + .@@.@@@@@@@@@.@@@@.@.@@@@.@@@@@...@.@@..@..@@..@@.@@@@.@@@@.@@@@@.@@@....@.@@@@@@@...@@@@@@@@@@@.@@@@@.@@@.@@@@@@@...@@@@..@@@@@.@@.@@@@. 49 + ..@@@.@@.@@.@.@@@.@.@@@.@.@.@@.@@@@@@@@@@..@@@@.@.....@.@@@@@@@@@.@.@@.@@.@.@@.@@@@@@..@@@@.@.@@.@@.@.@.@.@.@@@@@.@@@@@@..@@@..@@@@.@.@@@ 50 + @@@.@@@.@@@@.@@.@.@@@.@@.@@@.@..@@@@.@@..@@@@@.@....@@...@@@.@@.@..@.@..@@@@@@@.@.@.@@@@@..@@.@.@@.@@...@.@@@@@.@@.@@.@.@@.@@@@@.@@@@@@.@ 51 + @@@.@@.@.@@@.@@.@@@@@..@@@@@.@.@@...@@@...@@@@@.@@@@@@@@@@@@@@.@@@.@@@.@.@.@@.@.@@.@@@..@@@@@@@.@..@@.@@.@.@@@.@@.@@.@.@..@.....@@..@@@@@ 52 + @.@.@@@.@@.@@@@@.@@@@@@@@@...@.@@..@@@@@@.@@..@@@.@.@@@@@@.@@@@@...@@.@.@@.@.@@..@..@@.@..@.@@..@@@@@@@@@@@@@@..@..@.@..@.@@..@@.@.@.@@.@ 53 + @@..@.@@..@......@@.@@.@@@.@.@@@@@@@@@.@@.@@@..@@.@@..@..@@.@@@.@@@@@.@..@@@@.@@@.@@..@@@@@.@.@.@@@@..@@@@@@.@@@@@.@@@@.@.@@@@@@@...@.@.. 54 + @@@@@..@@@.@@@..@@@@@.@@@@.@@@@.@.@..@@@.@@@@.@.@.@@.@..@@@@.@@@@..@.@.@@@@@..@.@@.@@@@@@@.@@@..@.@@@@.@@.@.@@.@.@..@@@@@@@@@@..@@@@@@@@@ 55 + @@..@.@..@@@.@@..@@.@@@@@@.@.@.@.@@@..@@@@@@.@@.@@@@..@...@.@@@.@....@@.@.@.@@@@@@@@@...@@.@@@@..@@...@@..@@@.@.@@@..@@@.@.@@@@@@.@@@@.@@ 56 + @@@@@@@@@@.@@@@@@.@@.@..@@@@@@@@@.@.@.@.@@@@@@@@@@....@@@.@..@@@@@@@.@.@..@.@@.@@@@.@@@.@@.@@@@@.@@@@@...@.@.@@..@@..@.@@@@.@@.@@@@.@@@@@ 57 + @@@@@@@@@@@.@@@@@.@@....@@...@.@@@@@@@@@@@@@@..@.@@@@@.@...@@.@.@@@@@@@@.@.@@.@.@@.@@..@@@@@@@@.@@@.@.@@.@@@@.@@@@.@@.@@.@@..@.@@.@@@@@@@ 58 + .@@@.@@.@@@@.@.@@..@.@@@.@..@.@@@@.@@@.@..@@.@@.@.@..@@.@@@@..@@@@@.@.@@@@@.@@@@@..@@.@@.@.@@.@@@@..@@.@@..@@.@@@.@@.@@.@@@@@@@@.@@@@@@@@ 59 + @@@..@@@@.@.@.@@@@@@.@@..@@@.@..@@@@@...@@@.@@@.@@.@@@@@@@.@...@@@.@@.@@...@@@.@@@.@.@@@.@@@.@.@.@@@@@@.@.@@@.@@.@@.@@.@@@...@@.@@@@@.@@. 60 + @@..@@@@@@.@..@@.@.@....@...@@@.@@@@..@@@@@@.@@@@@@.@.@.@@@@....@.@.@@@.@@.@.@@...@@@.@@.@...@@@@@...@.@@@@.@.@@@..@@.@@@.@@@.@@@.@@..@.. 61 + @@@@@.@@.@@@...@@@@.@.@.@.@.@.@@@@.@..@@@@@@.@@@@@@..@@.@@@@@@@@@@@@@.@@.@@.@@@@@...@@@@@@@@...@@@.@.@...@.@@.@@.@.@@@@@.@.@@@@.@@@@@.@.@ 62 + @@@@@@.@@@....@@.@@@.@@@.@@@@@..@..@@.@@@.@@.@@@@@@@@@.@..@@.@@.@@@@@@.@...@..@@.@..@.@@.@@...@.@@..@.@@@.@@@@.......@@.@@@@@@@@@@.@.@@@. 63 + @@.@..@.@@@@@.@@.@@@.@..@@.@@@@.@@@@@.@.@@..@@@.@@@@@@.@@@@.@.@@@@@@@@@@@@.@@@@@@@@@.@@@.@..@..@.@@.@.@..@@@.@@.@.@@@@@.@@@@@@..@.@@.@@.@ 64 + .@....@@.@@.@.@..@.@@@@@@....@.@@.@@.@@.@@.@@@@.@@.@@.@@@..@.@@..@.@.@@@@.@@..@@.@@@@....@@...@@.@@....@@.@@@@.@@@@@@@@@@.@@.@@@.@.@.@..@ 65 + @@@.@.@.@@@.@.@.@.@.@@@@.@@..@@.@..@@.@@@@@@.@@..@..@.@@@@@@@@.@@.@...@@@..@.@@@@@.@@@@..@@@@@@@@.@@.@.@@.@.@@..@.@@@@@@.@..@..@@@.@@.@@@ 66 + ....@@@@.@..@@.@.@@@.@.@@@@@...@@.@@@@.@@@@@@.@@@@@@@..@.@.@@@..@..@@@@@.@@.@@@@@@@@@.@@..@....@@@.@.@.@@.@@@.@..@@..@....@.@@@@@@@.@.@@@ 67 + @@.@@.@@.@@@.@....@...@@@.@@.@@..@.@@.@@...@@.......@@@.@@..@.@@@@.@.@.@@.@.@.@@@@..@@@@@@@..@@@@@@@..@@@@.@@@..@@.@@...@.@@@@@@@@@@.@@.@ 68 + ......@.@@.@.@.@@..@@@@@@@@@@.@.@@@..@@@..@..@@@.@@..@.@..@@@@@@@@.@.@@@@@.@@@@@@@@.@.@.@@..@.@@@@@@@@.@.@@@@@@.@.@.@.@@..@@@@..@@.@.@... 69 + ..@@@.@@...@@@@@@...@.@@@@@.@@@@.@..@@@@.@@@@@@...@@..@@...@.@@@@@@.@@@@@@@@.@@.@@@@@@@.@.@@.@@.@@@.@..@@..@.@.@@@.@@.@@..@@@@@@@@@@.@@@. 70 + ...@@@@@@.@.@@@@@@.@.@...@..@..@@@@.@..@@.@@@@@.@@@@..@@.@@.@@@@@@@@@@....@@.@@@@@@@@@.@.@@@@@@@@@@@@@@@@@@@.@@.@@@.@@....@...@@@..@@@.@@ 71 + .@@@..@@.@@@@@@.@@.@@@@@..@.@.@@@@@@@@.@@@.@....@@@..@@@.@@..@@@@@@@@@...@@@@@@@@...@@@.@@@@@@..@..@@.@@@@@.@.@@@@@@.@@@@@@@..@...@...@@@ 72 + @@@@@@...@@@@@..@@......@@@@@@@..@@@@..@@@@...@.@....@@@@@@@@@@@@@.@@.@@@@@@....@.@@@.@@.@@.@@@@@@..@@@@@@@..@@@.@..@@@@@@@.@@..@@@@@.@.. 73 + @@@.@@@.@@.@.@..@.@.@@.@...@@.@@.@@.@@@.@.@@@@@@@@.@.@.@@@.@@@.@@@.@@@@@.@@.@.@.@..@@@@@@.@.@@@.@@@@..@@.@@.@.@@.@@.@@......@@@@@.@..@@@@ 74 + .@@@..@@@.@@@@..@@.@.@..@.@@@@@@@@@@@..@@...@.@.@.@@.@@@@@.@.@..@.@..@.@.@....@@@@.@@@@@@.@..@....@@.@..@@@@@@@@@..@@@@....@@@@@..@...@@. 75 + @.@@@@.@@@@@@@@@@@.@@@@.@..@@.@@@@@@...@@.@@@@@@..@@@@.@@.@@@@@@@.@.@....@@@@.@..@@@@@@.@@@.@.@...@.@@...@..@@@@...@@@..@...@..@@@@@@@@@@ 76 + .@..@@@@@.@@@.@@@@@..@@@@@@@..@.@@.@@@@.@.@@@@@@@@@@..@@@@@@@@..@@@@@.@@@@@@@..@.@.@@@.@@@@@@@...@@@@@@@@.@.@@@.@.@@.@@@@.@@@@.@@@@.@@@@@ 77 + .@@..@@..@@@.@@.@...@@@.@@@.@@...@@.@@@.@@@@@@.@@@@@..@.@.@@@@@@.@@@..@@@.@..@@.@@@...@..@@@@@@.@@.@@....@.@@..@@@@@@.@@@..@.@.@@@.@..@@. 78 + .@@@@.@@@@@...@@@@@@@@..@.@@@@.@@@.@.@.@@@@.@@@@@..@@@..@.@@.@@.@..@...@@@@...@.@.@@@@@.@.@.@@@@@..@@.@@.@@@@.@..@@@.@.@@@@@.@..@@@.@@@@. 79 + @.@@.@@@.@@.@@@@@@@@@@.@@.@@..@@.@@@@@@.@.@@.@@.@@@.@..@@@@@@@@@@.@@@..@..@@@@....@@@@.@@@@.@.@@.@.@@@@@@.@@.@@.@@....@@.@@.@..@@...@..@@ 80 + @@@@@@..@@@.@@.@.@@..@@.@@@@@..@@@.@...@@@@.@@@...@@@.@.@.@@@@@@.@...@@@.@....@@@@@@@@@@@@@@..@@@.@@..@@@@..@@.@.@..@@@@@@@@@@@@.@.@@@@.@ 81 + .@@.@.@.@@@@..@@.@@@@@@@@@@@.@@@@@@.@@@@@.@...@@.@.@@.@@@@...@@@.@@.@@@@@@@@@@@@.@@@.@@@.@@@@@@...@.@@.@..@@@@.@@@.@@.@.@@@.@@..@.@@@.@@@ 82 + @@@@@@@@@@@@.@.@@..@.@@@.@@@..@.@@@@@..@.@@@...@.@@...@@.@.@@@@@.@.@.@@@@@@..@@@@@...@..@@@@@@.@.@@@..@@@@.@@.@.@@.@@@@@@@.@.@@@@@.@@..@@ 83 + @@@@.@@@@@@..@...@@@.@@@@@@@..@..@..@.@@@@.@@@@@@@@@.@@@@.@..@@@.@.@@@@.@@@@.....@@.@@@.@@.@.@@.@@..@@.@.@.@..@@@@@..@..@.@@@@@@@.@@@@@@. 84 + @@@@@@.@@@..@.@@.@@.@@@...@@@.@@..@.@@.@.@@.@@@@@@.@@.@@..@@@.@@@@@....@.@@..@@@.@@.@@..@.@.@@@@.@@...@@@@..@.@@.@@.@@@@@.@@@.@@.@.@@@@@. 85 + @@@@..@.@@@@.@@@@@.@..@@@@@@@.@@@@..@@.@.@.@.@.@@..@...@@@@.@@@.@@.@..@.@@@@@@@@@@@.@@@@@.@@..@.@..@@..@.@@@..@.@@@.@.@.@@...@@..@.@.@.@@ 86 + @@@@@@@@.@@@@@@.@@@.@@@.@@.@@.@@@.@.@@@@@@@@..@@@@@@...@.@...@@@@@@..@@@..@@@.@@@@@@@@..@.@..@..@@@@.@@@@.@@@@@.@@.@@@@@@..@..@.@..@@.@.. 87 + ..@.@@@@@@.@@@@@.@@.@@@@.@@@@.@@.@@..@..@.@@@..@.@..@@@@@..@..@@@.@.@@@.@@.@@@@..@@@@@.@@@@@.@@@@@.@@@...@@@@@@@..@@@@@.@@@@.@@.@@.@.@@@. 88 + @..@@..@@.@@@@..@@...@@.@@.@@@.@@.@@@@@..@@@@@@.@@@@@@.@@@@@@@@..@@@..@.@@@@@.@@@.@@@.@@..@@...@@@.@@@@....@...@.@@@@@..@@@@@..@.@@@@.@@. 89 + @@@@.@@.@@..@.@.@@@.@@@...@@.@@@.@..@@@@@.@@@@@@.@@.@@@.@.@.@.@..@@@@@..@@@@..@.@.@@..@.@@@@@@@@.@@@@@@@@.@@@@@@@..@@@@.@@@@@@@@@@@@@@@.@ 90 + @@@@.@@@.@@..@.@@.@@@.@..@@@.@......@@.@@@@@....@.@@@.@@@@@.@.@@@.@@@.@....@@@..@@..@.@@.@@.@@.@@..@@@.@@..@@.@@.@@@.@..@@@.@@.@@@@@@@@@. 91 + @@.@@..@@@@.@@..@@@@@.@...@.@@@.@.@@@...@@.@.@...@@.@@@@..@.@..@..@@@.@.@@@.@..@@@.@@@.@...@@..@@.@...@.@@@.@..@.@@@@...@...@@@@..@@@.@@@ 92 + @@@.@.@@.@@@@.@@@@@@...@...@@@..@.@@@@@@@@@@.@@@.@@.@@@..@..@....@@@@@@..@@.@@@@@.@@@@..@@.@..@@..@..@@@@.@..@..@...@@@@.@.@...@@.@@..@@@ 93 + ..@@@..@..@@@.@@@@@@@.@@.@@.@@@.@@@@@@@.@.@@.@@@@@.@.@@..@.@@.@@@@@@.@.@...@@@@...@..@@.@@.@@@@@@.@@@@@@..@@@.@@.@@@@@@@@.@@@@@.@.@@@@.@@ 94 + @@@.@....@.@...@.@.@...@@@@@.@...@@@@..@@@@.@..@@...@@@@@@@..@.@.@@@..@.@@@.@.@@@@@@.@@@@@@@@@@.@@.@@@@@@@@@@.@.@.@@@@..@@@@.@.@@@..@@@@@ 95 + @@@..@...@.@@@@.@@@@@@@@.@@@.@@@@.@..@.@@.@@...@.@@.@@@.@.@.@@..@@....@@@.@.@@.@@@..@@@@@.@@@@@@@@.@@@.@.@@@.@@.@@@.@@@.@@@@.@@.@@@@..@.. 96 + @@@.@.....@@@@@.@@.@..@..@@@.@@@@@.@@..@@@@@@@@@@@@..@@.@.@.@@..@.@@.....@@@.@@@@.@@@@@.@@@..@.@@@.@@.@.@@@@.@@@@@@@.@@.@@..@.@.@@..@@.@@ 97 + .@..@@.@.@@.@.@@@@@@@@@@..@.@@@.@@.@@.@@@.@...@@.@@@@.@@....@@@.@@@..@.@@@@..@@..@..@.@@.@@@.@.@@..@...@@@.@.@@@.@@.@@...@@@@..@.@@@@@@@@ 98 + @@@@@..@..@@.@@@@@.@@....@@@@@@....@@@...@@@.@@@@@@..@.@@...@@@.@.@@....@@@@@.@..@@@@@@.@.@@@@@..@@@.@@.@@@.@@@@@.@@@.@.@@@@.@@@..@@@.@@@ 99 + ...@@.@.@@.@...@@@@@.@@@@@@.@@@@@.@@@@@@@.@..@..@...@@..@.@.@@@@@@@@..@@@@.@..@@@@.@.@@@@@@@..@@@@@@.@@@.....@@@.@.@...@...@@@@@.@@.@@@@@ 100 + .@@..@@.@@@.@@.@..@.@.@@.@..@@@.@...@@@@@@@@@.@@.@.@@@@@@@..@@@.@.@@@@@@@@@@@@@.@..@@.@.@.@@.@@@@.@@@@@@@@@@.@@@@..@@..@@.@@..@.@..@@@..@ 101 + @@.@@@@@@@.@..@@.@@@@.@@@..@..@@@@@@@@@.@@.@..@@@@.@@@@..@@@.@.@@...@.@@@@.@.@@@@..@@@@@@@@@...@@@@@@@...@@@@..@@@@..@@@@.@@@@@@@@.@@@@.@ 102 + ..@...@@@@..@@@@@.@@.@@.@@@.@@..@@@@.@..@@@@@@@@@@@..@@@@@@@@.@@@@@@@@@@.@@@@.@..@@@@.@.@.@@@.@@@...@@@@@@....@@@.@.@@@@...@.@@...@@.@@.@ 103 + ...@@..@.@@..@@.@@@@@@@@..@@@@.@@@@@.@.@@.@@@@@.@@...@@.@.@@@@.@@@@@@@.@.@...@@@.@@.@@@@@.@@.@..@@@.@.@@@.@@@@.@@.@.@@@@@@@@@.@@@@..@.@@. 104 + @@@.@@@@.@@@@@.@.@@@...@@.@@@..@@@@.@.@.@@..@@@@@@@.@...@@..@.@@@@@.....@@@@@...@@@@.@..@@.@@@@@@@..@.@@@.@@@.@@@@.@@@@@@@@.@@@@.@.@.@@@. 105 + ....@@@@@@.@@.@@@.@...@@@.@@...@@@@..@@@@@@@.@@@@@.@@@@@@.@....@@.@@....@@@@@@.@..@@@.@..@@.@.@@@...@@@.@@@.@@.@@.@..@...@@.@@.@@@@.@@@.@ 106 + .@@@@@.@.@@@...@@...@@.@@..@.@.@@@@.@..@@...@@@@@@.@..@..@.@.@@@@.@@.@.@.@..@@@@@@.@@......@.@.@@@@@@@@@@@@@..@@.@@@@@..@@.@....@.@@@@@@. 107 + @..@..@@.@@@@@..@.@@.@@@.@..@@...@@@...@@@@.@..@.@..@.@@@@.....@@@..@@@@.@@@.@@.@@@@.@..@@@@@@@.@@.@@..@.@@..@..@@@@@@@.@@.@.@@@.@@..@@@. 108 + @...@@@@.@@@@.@.@@@@.@@@@..@@@.@@.@@..@@@@@@@.@..@@@.....@@.@..@@@@..@@@@@.@@@@.@..@@@@.@.@.@@@@@@.@@@...@@@@.@.@@.@@@.@@@..@@@...@@@@.@. 109 + @.@@.@..@@@@.@...@@@.@.@@@@@@.@@.@@.@.@@@@@@@.@@@@@@@.@.@.@@@@.@.@..@.@..@@@@.@..@@@@@@@.@@@.@.@.@@.@@@@.@@@@@@.@@.@.@@..@.@..@@@@@...@@@ 110 + @@@.@.@.@@@@@@@@@@...@.@.@@..@@@@.@@..@.@..@@@.@.@@@@.@@@...@....@@@@.@.@..@@@.@@.@.....@@..@.@.@@@@@@....@.@@@@@@@@@.@.@@@@@..@@.@@@.@@. 111 + .@@.@...@@@@...@@@@@.@@@@@.@@@.........@..@..@@.@@@.@..@.@@..@@@@.@.@@@@@@@.@@@@@@@@.@@@..@@.@..@.@@@@@..@@@@@@.@.@@@@.@@@@@.@@@@.@@@@@.. 112 + @.@@@.@.@@@.@@@.@@@..@@.@..@@.@@.@...@@.@.@.@.@...@@@.@.@@.@@..@.@@...@@@@@@@@..@@@@..@@..@..@.@..@@.@@@@..@@@@.@@@@@.@@@.@.@@@@.@@.@.@@. 113 + @.@.@@.@@@@...@@@..@@@...@@@@@..@..@@@@@@@..@@@@.@..@@..@..@@@@..@.@.@@@@@.@@@@@@...@.@@.@.@@@@@..@@.@@.@@..@....@@.@@.@.@@@@.@...@@@@@.@ 114 + .@..@@..@..@@@@@@..@@@.@..@@.@@@.@..@@@@.@@@@.@@.@.@.@@@@@@@@@.@.@...@@@@@@.@@@.@.@@@@@@.@.@....@@.@.@@.....@@..@.@.@@@@@@.@@@@@.@.@@.@@. 115 + @@..@@@@.@@..@@@@..@@@@@.@@@@@@.@@.@@@@@.@.@@@.@@@@@@@@...@@...@.@@@...@@@.@@...@.@@.@@@..@.@@...@.@@@.@.@@@.@..@@@@.@@@@.@@@.@..@..@.@@@ 116 + @@@@..@@@..@@.@..@@@...@.@@@.@.@@@@.@@.@@..@@.@@@@@@.@@.@@@@@..@.@.@@@@.@@@@@@@..@@..@@@.@.@@.@@@@...@@@@@@@@@@@@@...@@.@......@@..@@@@@. 117 + @.@@.@@@...@..@@@.@.@@@@.....@.@.@@.@...@..@@@@@@..@@@..@.@.@@@.@.@@....@.@.@@@@@@..@....@@@@..@@@@@.@@@@@@@@@@.@@.@@@.@@@@@...@....@.@@@ 118 + @@@@@@@@@@@...@.@@@@@@@@@..@@.@@.@@@@.@.@@@.@@@@@.@@...@@@.@@@.@.@@@.@@@@@@@@..@@@@@..@@.@@@..@.@.@@@@@.@@@@.@@.@.@.@@.@@@@..@@@...@..@@@ 119 + @@@...@@@@@.@@@@@.@@@@@.@.@@@@@@@@..@..@@@@@@..@.@.@@.@@.@.@....@@@@@.@@@@.@@.@@@@..@@.....@..@..@@@@@@.@@..@..@..@@@@@.@@.@@@@.@@@.@.@.@ 120 + .@@.@@@@@@.@@@.@@@@@@.@@..@@@@.@@@@@..@.@@..@..@.@@@@@@@@@@@..@.@@@@.@@.@.@@@..@@..@.@..@@@.@@@@@.@@@@@@.@@@@@.@.@..@@..@.@...@@.@@.@..@@ 121 + @.@.@@.@@@.@@@@@.@@@@@@.@....@@.@.....@.@.@@@.@.@.@@@@@..@@.@.@.@@@@@@@@..@@@....@@@@@@@@...@@.@@...@..@@@..@@@@..@@.@.@@@@@@@..@@@@..@.. 122 + @@..@@..@@@.@@@.@.....@@..@...@@.@....@@..@@@@...@@.@@.@@@@@@..@@@..@.@@.@.@@@@..@.@.@@.@@@@....@@@....@@.@@.@@@@@@..@.@@@@@@....@.@@@@@. 123 + @@@@@@.@@@@..@@.@.@@@.@@@@.@@.@@.@.@@@@..@.@@@.@@@@@@@...@@.@@.@.@@..@.@@@.@.@@@@.@.@..@.@..@.@@.@@@@.@..@@..@@@.@@@@@@.@@..@.@.@@@@@@@@@ 124 + @@.@@@@@.@@....@@@@@@.@@..@@@@@@@@.@@@@....@..@.@@@@@@..@@.@.@@@@@@@..@.@.@@..@@@@.@@@@.@@@@.@@..@@..@@.@.@@@.@..@.@.@@.@@@@@..@.@.@.@.@@ 125 + @@..@@@@@@@@@.@@..@@.@@@@@@@@@@@@@.....@@...@@@@..@@@@...@@..@.@@@@...@..@@.@@.@@@..@.@@@@.@...@@@@..@@@@.@..@@.@@@.@@@@@...@@...@@.@.... 126 + @.@@@@@@.@@@@@.@@.@.@@@@....@@@@@@.@@@@.@.@...@..@@.@@@@.@@@.@.@@@@@@@@@.@@@@.@@@@@@..@@@..@@.@.@@@.@.@@@..@..@@@@@@@..@.@@.@@..@@@@@...@ 127 + @@@@@@@@@.@@@..@@@..@.@@@@@@..@@.@@.@@@@@.@...@@..@.@@@.@@..@@@..@@@@@@@..@@@@.@@..@.@@@.@..@..@@@..@@......@@@@@@@@.@@...@...@@@@@@@.@.@ 128 + @@@..@@@@...@@...@@@@@@@@.@@@@@.@@..@.@@..@@@@.@.@@@..@@@@@.@.@@@@@@@.@@....@@@@@@@@..@@@..@.@@..@@@@.@.@.@@@@@@@@@.@@.@@@.@.@@.@@@.@@@.. 129 + .@....@@@.@.@.@.@@@.@@@.@.@..@@@.@....@@@.@@..@.@@@.....@@...@@@.@.@@@@@@@.@@.@@@.@@.@.@@@.@@@@.@..@.@@@@.@.@..@@@@..@@.@@@@@@@@@@.@...@@ 130 + @@.@@@@@@.@@.@@.@@@..@@.@@.@@.@.@..@...@@@@@.@.@@@@.@@.@@.@@@@..@@.@@@.@@@@..@@@@@.@@@..@@.@@@.@.@.....@@@@.@@@@....@@@@@@@..@.@@@@@@...@ 131 + @@@.@@@..@.@@@.@@.@@@@..@.@@@...@@@@@.@@.@@@@...@.@@.@@@..@@@@@@@@...@@.@.@@.@.@@@@.@@.@.@.@.@@@@@@@..@@...@@.@@@@..@.....@.@..@@.@@@@@@@ 132 + .@.@.@@@@@@@.@@@@.@@...@.@@@@.@@@.@@@@.@@..@@..@@.@..@.@@@.@@@@@@@@.@@...@.@.@.@.@@@.@@.@.@.@@.@.@@.@@@@....@@..@.@.@@.@..@@.@@@@@..@@.@@ 133 + ..@.@...@.@@..@@@@@.@.@@@@...@@@@@@@@@.@@@@@.@@.@@.@@@@@.@@@.@@.@.@..@@..@.@@@@@.@.@.@..@@@@@@.@.@.@@.@@@@@@@..@...@@@@@@.@@@..@....@@..@ 134 + @@@..@@.@@......@.@@@@.@.@..@.@@@..@@@.@.@@@.@..@@.@@.@...@@@.@@@@.@@@@@@@@@@.@@@.@..@@.@...@@@@@.@.@@@@.@...@@@..@@@@.@@...@@@@.@...@@.@ 135 + @@@@.@@@@@@@@@@@.@@.@@@@@.@@....@@@@.@@@.@@@.@.@.@..@.@@@@@@..@.@@@.@@@@@@.@@@..@..@@@@@@@@@@....@@@@.@@...@@@@.@@@@@.@@@..@@@@.@.@@@@@@@ 136 + @.@@@.@@@@..@@@@.@.@.@.@@@@@....@@@@.@@...@@@@.@@..@@@.@@..@@.@.......@.@.@.@@@.@..@@@.@.@@@@@@@.@@@@@.@@@.@@.@@@@@@.@.@.@@@@@@@@.@.@@.@. 137 + @@...@@.@@@@.@.@@@@.@@@@@@@@@@.@@@.@...@.@@@@@@@@.@.@@.@.@@@@.@@@.@@@@@@.@@@@.@@@@@..@.@@..@@@@.@@.@@@.@.@@..@@@.@..@@.@.@@..@@.@.@@@.@@@
+10
inputs/day4test.txt
···
··· 1 + ..@@.@@@@. 2 + @@@.@.@.@@ 3 + @@@@@.@.@@ 4 + @.@@@@..@. 5 + @@.@@@@.@@ 6 + .@@@@@@@.@ 7 + .@.@.@.@@@ 8 + @.@@@.@@@@ 9 + .@@@@@@@@. 10 + @.@.@@@.@.
+100
src/day4.zig
···
··· 1 + const std = @import("std"); 2 + const StringTokenIterator = std.mem.TokenIterator(u8, .scalar); 3 + 4 + const MAX_WIDTH = 137; 5 + 6 + const Grid = struct { 7 + data: [MAX_WIDTH][]u8, 8 + maxX: usize, 9 + maxY: usize, 10 + 11 + pub fn isRoll(self: *const Grid, x: isize, y: isize) bool { 12 + if (x < 0 or x >= self.maxX) { 13 + return false; 14 + } 15 + if (y < 0 or y >= self.maxY) { 16 + return false; 17 + } 18 + 19 + return self.data[@intCast(x)][@intCast(y)] == '@'; 20 + } 21 + }; 22 + 23 + fn newGrid(lines: *StringTokenIterator) !Grid { 24 + const line_len = lines.peek().?.len; 25 + var grid: [MAX_WIDTH][]u8 = undefined; 26 + 27 + var i: usize = 0; 28 + while (lines.next()) |line| : (i += 1) { 29 + grid[i] = @constCast(line); 30 + } 31 + 32 + return .{ .data = grid, .maxX = line_len, .maxY = i }; 33 + } 34 + 35 + pub fn run(input: []u8) !void { 36 + var lines = std.mem.tokenizeScalar(u8, input, '\n'); 37 + 38 + const grid = try newGrid(&lines); 39 + 40 + var answer1: u64 = 0; 41 + var answer2: u64 = 0; 42 + 43 + // Need to figure out how to not make this ugly, but too tired 44 + for (0..grid.maxX) |i| { 45 + for (0..grid.maxY) |j| { 46 + if (grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)))) { 47 + var adjacent_count: usize = 0; 48 + 49 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)) - 1)); 50 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)))); 51 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)) - 1)); 52 + 53 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)) - 1)); 54 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)) + 1)); 55 + 56 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)) + 1)); 57 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)))); 58 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)) + 1)); 59 + 60 + if (adjacent_count < 4) { 61 + answer1 += 1; 62 + } 63 + } 64 + } 65 + } 66 + 67 + var removed = true; 68 + 69 + while (removed) { 70 + removed = false; 71 + 72 + for (0..grid.maxX) |i| { 73 + for (0..grid.maxY) |j| { 74 + if (grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)))) { 75 + var adjacent_count: usize = 0; 76 + 77 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)) - 1)); 78 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)))); 79 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)) - 1)); 80 + 81 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)) - 1)); 82 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) - 1, @as(isize, @intCast(j)) + 1)); 83 + 84 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)) + 1)); 85 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)) + 1, @as(isize, @intCast(j)))); 86 + adjacent_count += @intFromBool(grid.isRoll(@as(isize, @intCast(i)), @as(isize, @intCast(j)) + 1)); 87 + 88 + if (adjacent_count < 4) { 89 + answer2 += 1; 90 + grid.data[i][j] = '.'; 91 + removed = true; 92 + } 93 + } 94 + } 95 + } 96 + } 97 + 98 + std.debug.print("Answer P1: {d}\n", .{answer1}); 99 + std.debug.print("Answer P2: {d}\n", .{answer2}); 100 + }
+2
src/main.zig
··· 2 const day1 = @import("./day1.zig"); 3 const day2 = @import("./day2.zig"); 4 const day3 = @import("./day3.zig"); 5 6 pub fn main() !void { 7 var args = std.process.args(); ··· 35 1 => try day1.run(input_content), 36 2 => try day2.run(input_content), 37 3 => try day3.run(input_content), 38 else => {}, 39 } 40 }
··· 2 const day1 = @import("./day1.zig"); 3 const day2 = @import("./day2.zig"); 4 const day3 = @import("./day3.zig"); 5 + const day4 = @import("./day4.zig"); 6 7 pub fn main() !void { 8 var args = std.process.args(); ··· 36 1 => try day1.run(input_content), 37 2 => try day2.run(input_content), 38 3 => try day3.run(input_content), 39 + 4 => try day4.run(input_content), 40 else => {}, 41 } 42 }