Advent of Code solutions
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

basic day 4

Rain 1f211ccf 31fad2c1

+296
+7
2025/rust/4/Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "day4" 7 + version = "0.1.0"
+6
2025/rust/4/Cargo.toml
··· 1 + [package] 2 + name = "day4" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [dependencies]
+135
2025/rust/4/input.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 + .@.@@.@@..@@@.@@..@@@@..@.@@.@@@@@@@.@.@@.@...@...@@@.@..@@@@.@.@@@...@@@@@@@..@..@@@@@@@@@@.@@.@@@.@@@@.@.@@...@..@@@.@@@.@...@@@.@@.@
+148
2025/rust/4/src/main.rs
··· 1 + fn parse(input: &str) -> Vec<Vec<bool>> { 2 + input 3 + .trim_end() 4 + .lines() 5 + .map(|line| { 6 + line.trim() 7 + .chars() 8 + .map(|c| match c { 9 + '@' => true, 10 + '.' => false, 11 + _ => panic!("uh oh!"), 12 + }) 13 + .collect() 14 + }) 15 + .collect() 16 + } 17 + 18 + fn part1(paper: Vec<Vec<bool>>) -> usize { 19 + let mut total_rolls = 0; 20 + 21 + for (rowi, row) in paper.iter().enumerate() { 22 + for (rolli, roll) in row.iter().enumerate() { 23 + if !roll { 24 + continue; 25 + } 26 + 27 + let mut counter = 0; 28 + 29 + if rowi >= 1 { 30 + let above_row = paper.get(rowi - 1).unwrap(); 31 + let range = ((rolli as isize - 1).max(0) as usize)..=(rolli + 1).min(row.len() - 1); 32 + 33 + counter += above_row.get(range).unwrap().iter().filter(|&&b| b).count(); 34 + } 35 + 36 + if rowi < paper.len() - 1 { 37 + let below_row = paper.get(rowi + 1).unwrap(); 38 + let range = ((rolli as isize - 1).max(0) as usize)..=(rolli + 1).min(row.len() - 1); 39 + 40 + counter += below_row.get(range).unwrap().iter().filter(|&&b| b).count(); 41 + } 42 + 43 + counter += *row.get(rolli.wrapping_sub(1)).unwrap_or(&false) as usize; 44 + counter += *row.get(rolli + 1).unwrap_or(&false) as usize; 45 + 46 + if counter < 4 { 47 + total_rolls += 1; 48 + } 49 + } 50 + } 51 + 52 + total_rolls 53 + } 54 + 55 + fn part2(mut paper: Vec<Vec<bool>>) -> usize { 56 + let mut total_rolls = 0; 57 + 58 + loop { 59 + let mut subtotal_rolls = 0; 60 + for (rowi, row) in paper.clone().iter().enumerate() { 61 + for (rolli, roll) in row.iter().enumerate() { 62 + if !*roll { 63 + continue; 64 + } 65 + 66 + let mut counter = 0; 67 + 68 + if rowi >= 1 { 69 + let above_row = paper.get(rowi - 1).unwrap(); 70 + let range = 71 + ((rolli as isize - 1).max(0) as usize)..=(rolli + 1).min(row.len() - 1); 72 + 73 + counter += above_row.get(range).unwrap().iter().filter(|&&b| b).count(); 74 + } 75 + 76 + if rowi < paper.len() - 1 { 77 + let below_row = paper.get(rowi + 1).unwrap(); 78 + let range = 79 + ((rolli as isize - 1).max(0) as usize)..=(rolli + 1).min(row.len() - 1); 80 + 81 + counter += below_row.get(range).unwrap().iter().filter(|&&b| b).count(); 82 + } 83 + 84 + counter += *row.get(rolli.wrapping_sub(1)).unwrap_or(&false) as usize; 85 + counter += *row.get(rolli + 1).unwrap_or(&false) as usize; 86 + 87 + if counter < 4 { 88 + paper[rowi][rolli] = false; 89 + subtotal_rolls += 1; 90 + } 91 + } 92 + } 93 + 94 + if subtotal_rolls == 0 { 95 + break; 96 + } else { 97 + total_rolls += subtotal_rolls; 98 + } 99 + } 100 + 101 + total_rolls 102 + } 103 + 104 + fn main() { 105 + let file_contents = include_str!("../input.txt"); 106 + let parsed = parse(file_contents); 107 + 108 + println!("Part 1 Results: {}", part1(parsed.clone())); 109 + println!("Part 2 Results: {}", part2(parsed)); 110 + } 111 + 112 + mod tests { 113 + #[test] 114 + fn part1() { 115 + let paper = super::parse( 116 + "..@@.@@@@. 117 + @@@.@.@.@@ 118 + @@@@@.@.@@ 119 + @.@@@@..@. 120 + @@.@@@@.@@ 121 + .@@@@@@@.@ 122 + .@.@.@.@@@ 123 + @.@@@.@@@@ 124 + .@@@@@@@@. 125 + @.@.@@@.@.", 126 + ); 127 + 128 + assert_eq!(super::part1(paper), 13); 129 + } 130 + 131 + #[test] 132 + fn part2() { 133 + let paper = super::parse( 134 + "..@@.@@@@. 135 + @@@.@.@.@@ 136 + @@@@@.@.@@ 137 + @.@@@@..@. 138 + @@.@@@@.@@ 139 + .@@@@@@@.@ 140 + .@.@.@.@@@ 141 + @.@@@.@@@@ 142 + .@@@@@@@@. 143 + @.@.@@@.@.", 144 + ); 145 + 146 + assert_eq!(super::part2(paper), 43); 147 + } 148 + }