Advent of Code solutions

Update

bwc9876.dev 4922020e 4b8d262e

verified
+122 -153
+75 -142
Cargo.lock
··· 21 21 22 22 [[package]] 23 23 name = "aho-corasick" 24 - version = "1.1.3" 24 + version = "1.1.4" 25 25 source = "registry+https://github.com/rust-lang/crates.io-index" 26 - checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 26 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 27 27 dependencies = [ 28 28 "memchr", 29 29 ] 30 30 31 31 [[package]] 32 32 name = "bumpalo" 33 - version = "3.16.0" 33 + version = "3.19.0" 34 34 source = "registry+https://github.com/rust-lang/crates.io-index" 35 - checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 35 + checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 36 36 37 37 [[package]] 38 38 name = "cfg-if" 39 - version = "1.0.0" 39 + version = "1.0.4" 40 40 source = "registry+https://github.com/rust-lang/crates.io-index" 41 - checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 41 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 42 42 43 43 [[package]] 44 44 name = "console" 45 - version = "0.15.10" 45 + version = "0.16.1" 46 46 source = "registry+https://github.com/rust-lang/crates.io-index" 47 - checksum = "ea3c6ecd8059b57859df5c69830340ed3c41d30e3da0c1cbed90a96ac853041b" 47 + checksum = "b430743a6eb14e9764d4260d4c0d8123087d504eeb9c48f2b2a5e810dd369df4" 48 48 dependencies = [ 49 49 "encode_unicode", 50 50 "libc", ··· 80 80 81 81 [[package]] 82 82 name = "either" 83 - version = "1.13.0" 83 + version = "1.15.0" 84 84 source = "registry+https://github.com/rust-lang/crates.io-index" 85 - checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 85 + checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 86 86 87 87 [[package]] 88 88 name = "encode_unicode" ··· 92 92 93 93 [[package]] 94 94 name = "indicatif" 95 - version = "0.17.9" 95 + version = "0.18.3" 96 96 source = "registry+https://github.com/rust-lang/crates.io-index" 97 - checksum = "cbf675b85ed934d3c67b5c5469701eec7db22689d0a2139d856e0925fa28b281" 97 + checksum = "9375e112e4b463ec1b1c6c011953545c65a30164fbab5b581df32b3abf0dcb88" 98 98 dependencies = [ 99 99 "console", 100 - "number_prefix", 101 100 "portable-atomic", 102 101 "unicode-width", 102 + "unit-prefix", 103 103 "web-time", 104 104 ] 105 105 106 106 [[package]] 107 107 name = "js-sys" 108 - version = "0.3.76" 108 + version = "0.3.82" 109 109 source = "registry+https://github.com/rust-lang/crates.io-index" 110 - checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" 110 + checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" 111 111 dependencies = [ 112 112 "once_cell", 113 113 "wasm-bindgen", ··· 115 115 116 116 [[package]] 117 117 name = "libc" 118 - version = "0.2.169" 119 - source = "registry+https://github.com/rust-lang/crates.io-index" 120 - checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" 121 - 122 - [[package]] 123 - name = "log" 124 - version = "0.4.22" 118 + version = "0.2.177" 125 119 source = "registry+https://github.com/rust-lang/crates.io-index" 126 - checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 120 + checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" 127 121 128 122 [[package]] 129 123 name = "macros" ··· 134 128 135 129 [[package]] 136 130 name = "memchr" 137 - version = "2.7.4" 131 + version = "2.7.6" 138 132 source = "registry+https://github.com/rust-lang/crates.io-index" 139 - checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 140 - 141 - [[package]] 142 - name = "number_prefix" 143 - version = "0.4.0" 144 - source = "registry+https://github.com/rust-lang/crates.io-index" 145 - checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" 133 + checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 146 134 147 135 [[package]] 148 136 name = "once_cell" 149 - version = "1.20.2" 137 + version = "1.21.3" 150 138 source = "registry+https://github.com/rust-lang/crates.io-index" 151 - checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 139 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 152 140 153 141 [[package]] 154 142 name = "portable-atomic" 155 - version = "1.10.0" 143 + version = "1.11.1" 156 144 source = "registry+https://github.com/rust-lang/crates.io-index" 157 - checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" 145 + checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 158 146 159 147 [[package]] 160 148 name = "proc-macro2" 161 - version = "1.0.92" 149 + version = "1.0.103" 162 150 source = "registry+https://github.com/rust-lang/crates.io-index" 163 - checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" 151 + checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" 164 152 dependencies = [ 165 153 "unicode-ident", 166 154 ] 167 155 168 156 [[package]] 169 157 name = "quote" 170 - version = "1.0.37" 158 + version = "1.0.42" 171 159 source = "registry+https://github.com/rust-lang/crates.io-index" 172 - checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 160 + checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" 173 161 dependencies = [ 174 162 "proc-macro2", 175 163 ] 176 164 177 165 [[package]] 178 166 name = "rayon" 179 - version = "1.10.0" 167 + version = "1.11.0" 180 168 source = "registry+https://github.com/rust-lang/crates.io-index" 181 - checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 169 + checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" 182 170 dependencies = [ 183 171 "either", 184 172 "rayon-core", ··· 186 174 187 175 [[package]] 188 176 name = "rayon-core" 189 - version = "1.12.1" 177 + version = "1.13.0" 190 178 source = "registry+https://github.com/rust-lang/crates.io-index" 191 - checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 179 + checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" 192 180 dependencies = [ 193 181 "crossbeam-deque", 194 182 "crossbeam-utils", ··· 196 184 197 185 [[package]] 198 186 name = "regex" 199 - version = "1.11.1" 187 + version = "1.12.2" 200 188 source = "registry+https://github.com/rust-lang/crates.io-index" 201 - checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 189 + checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 202 190 dependencies = [ 203 191 "aho-corasick", 204 192 "memchr", ··· 208 196 209 197 [[package]] 210 198 name = "regex-automata" 211 - version = "0.4.9" 199 + version = "0.4.13" 212 200 source = "registry+https://github.com/rust-lang/crates.io-index" 213 - checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 201 + checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 214 202 dependencies = [ 215 203 "aho-corasick", 216 204 "memchr", ··· 219 207 220 208 [[package]] 221 209 name = "regex-syntax" 222 - version = "0.8.5" 210 + version = "0.8.8" 223 211 source = "registry+https://github.com/rust-lang/crates.io-index" 224 - checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 212 + checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" 213 + 214 + [[package]] 215 + name = "rustversion" 216 + version = "1.0.22" 217 + source = "registry+https://github.com/rust-lang/crates.io-index" 218 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 225 219 226 220 [[package]] 227 221 name = "syn" 228 - version = "2.0.91" 222 + version = "2.0.111" 229 223 source = "registry+https://github.com/rust-lang/crates.io-index" 230 - checksum = "d53cbcb5a243bd33b7858b1d7f4aca2153490815872d86d955d6ea29f743c035" 224 + checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" 231 225 dependencies = [ 232 226 "proc-macro2", 233 227 "quote", ··· 236 230 237 231 [[package]] 238 232 name = "unicode-ident" 239 - version = "1.0.14" 233 + version = "1.0.22" 240 234 source = "registry+https://github.com/rust-lang/crates.io-index" 241 - checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" 235 + checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" 242 236 243 237 [[package]] 244 238 name = "unicode-width" 245 - version = "0.2.0" 239 + version = "0.2.2" 240 + source = "registry+https://github.com/rust-lang/crates.io-index" 241 + checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 242 + 243 + [[package]] 244 + name = "unit-prefix" 245 + version = "0.5.2" 246 246 source = "registry+https://github.com/rust-lang/crates.io-index" 247 - checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" 247 + checksum = "81e544489bf3d8ef66c953931f56617f423cd4b5494be343d9b9d3dda037b9a3" 248 248 249 249 [[package]] 250 250 name = "utils" ··· 252 252 253 253 [[package]] 254 254 name = "wasm-bindgen" 255 - version = "0.2.99" 255 + version = "0.2.105" 256 256 source = "registry+https://github.com/rust-lang/crates.io-index" 257 - checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" 257 + checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" 258 258 dependencies = [ 259 259 "cfg-if", 260 260 "once_cell", 261 + "rustversion", 261 262 "wasm-bindgen-macro", 262 - ] 263 - 264 - [[package]] 265 - name = "wasm-bindgen-backend" 266 - version = "0.2.99" 267 - source = "registry+https://github.com/rust-lang/crates.io-index" 268 - checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" 269 - dependencies = [ 270 - "bumpalo", 271 - "log", 272 - "proc-macro2", 273 - "quote", 274 - "syn", 275 263 "wasm-bindgen-shared", 276 264 ] 277 265 278 266 [[package]] 279 267 name = "wasm-bindgen-macro" 280 - version = "0.2.99" 268 + version = "0.2.105" 281 269 source = "registry+https://github.com/rust-lang/crates.io-index" 282 - checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" 270 + checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" 283 271 dependencies = [ 284 272 "quote", 285 273 "wasm-bindgen-macro-support", ··· 287 275 288 276 [[package]] 289 277 name = "wasm-bindgen-macro-support" 290 - version = "0.2.99" 278 + version = "0.2.105" 291 279 source = "registry+https://github.com/rust-lang/crates.io-index" 292 - checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" 280 + checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" 293 281 dependencies = [ 282 + "bumpalo", 294 283 "proc-macro2", 295 284 "quote", 296 285 "syn", 297 - "wasm-bindgen-backend", 298 286 "wasm-bindgen-shared", 299 287 ] 300 288 301 289 [[package]] 302 290 name = "wasm-bindgen-shared" 303 - version = "0.2.99" 291 + version = "0.2.105" 304 292 source = "registry+https://github.com/rust-lang/crates.io-index" 305 - checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" 293 + checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" 294 + dependencies = [ 295 + "unicode-ident", 296 + ] 306 297 307 298 [[package]] 308 299 name = "web-time" ··· 315 306 ] 316 307 317 308 [[package]] 318 - name = "windows-sys" 319 - version = "0.59.0" 309 + name = "windows-link" 310 + version = "0.2.1" 320 311 source = "registry+https://github.com/rust-lang/crates.io-index" 321 - checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 322 - dependencies = [ 323 - "windows-targets", 324 - ] 312 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 325 313 326 314 [[package]] 327 - name = "windows-targets" 328 - version = "0.52.6" 315 + name = "windows-sys" 316 + version = "0.61.2" 329 317 source = "registry+https://github.com/rust-lang/crates.io-index" 330 - checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 318 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 331 319 dependencies = [ 332 - "windows_aarch64_gnullvm", 333 - "windows_aarch64_msvc", 334 - "windows_i686_gnu", 335 - "windows_i686_gnullvm", 336 - "windows_i686_msvc", 337 - "windows_x86_64_gnu", 338 - "windows_x86_64_gnullvm", 339 - "windows_x86_64_msvc", 320 + "windows-link", 340 321 ] 341 - 342 - [[package]] 343 - name = "windows_aarch64_gnullvm" 344 - version = "0.52.6" 345 - source = "registry+https://github.com/rust-lang/crates.io-index" 346 - checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 347 - 348 - [[package]] 349 - name = "windows_aarch64_msvc" 350 - version = "0.52.6" 351 - source = "registry+https://github.com/rust-lang/crates.io-index" 352 - checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 353 - 354 - [[package]] 355 - name = "windows_i686_gnu" 356 - version = "0.52.6" 357 - source = "registry+https://github.com/rust-lang/crates.io-index" 358 - checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 359 - 360 - [[package]] 361 - name = "windows_i686_gnullvm" 362 - version = "0.52.6" 363 - source = "registry+https://github.com/rust-lang/crates.io-index" 364 - checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 365 - 366 - [[package]] 367 - name = "windows_i686_msvc" 368 - version = "0.52.6" 369 - source = "registry+https://github.com/rust-lang/crates.io-index" 370 - checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 371 - 372 - [[package]] 373 - name = "windows_x86_64_gnu" 374 - version = "0.52.6" 375 - source = "registry+https://github.com/rust-lang/crates.io-index" 376 - checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 377 - 378 - [[package]] 379 - name = "windows_x86_64_gnullvm" 380 - version = "0.52.6" 381 - source = "registry+https://github.com/rust-lang/crates.io-index" 382 - checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 383 - 384 - [[package]] 385 - name = "windows_x86_64_msvc" 386 - version = "0.52.6" 387 - source = "registry+https://github.com/rust-lang/crates.io-index" 388 - checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 389 322 390 323 [[package]] 391 324 name = "y_2024"
+3 -3
advent_core/Cargo.toml
··· 1 1 [package] 2 2 name = "advent_core" 3 3 version = "0.1.0" 4 - edition = "2021" 4 + edition = "2024" 5 5 6 6 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 7 8 8 [dependencies] 9 - indicatif = "0.17.9" 10 - regex = "1.10.2" 9 + indicatif = "0.18.3" 10 + regex = "1.12.2"
+2 -2
utils/src/grid.rs
··· 579 579 580 580 /// Create a new cursor for this grid facing in the specified direction at the specified 581 581 /// position 582 - pub fn cursor<D: Movement>(&self, pos: Position, dir: D) -> GridCursor<T, D> { 582 + pub fn cursor<D: Movement>(&self, pos: Position, dir: D) -> GridCursor<'_, T, D> { 583 583 GridCursor::new(self, pos, dir) 584 584 } 585 585 } ··· 590 590 .find_map(|(p, t)| if t == tile { Some(p) } else { None }) 591 591 } 592 592 593 - pub fn cursor_at_tile<D: Movement>(&self, tile: &T, dir: D) -> Option<GridCursor<T, D>> { 593 + pub fn cursor_at_tile<D: Movement>(&self, tile: &T, dir: D) -> Option<GridCursor<'_, T, D>> { 594 594 self.find_tile(tile).map(|pos| self.cursor(pos, dir)) 595 595 } 596 596 }
+2
utils/src/lib.rs
··· 1 + #![allow(unused)] 2 + 1 3 pub mod day_utils; 2 4 pub mod dir; 3 5 pub mod geom;
+37
utils/src/num.rs
··· 47 47 (num / div, num % div) 48 48 } 49 49 50 + /// Get the digit at the (starting from the right) given index 51 + pub fn digit_at(num: usize, idx: usize) -> usize { 52 + let div = 10_usize.pow(idx as u32); 53 + num / div % 10 54 + } 55 + 56 + /// Iterator (from right to left) 57 + struct Digits { 58 + num: usize, 59 + size: usize, 60 + curr_digit: usize, 61 + } 62 + 63 + impl Digits { 64 + pub fn new(num: usize) -> Self { 65 + Self { 66 + num, 67 + size: num_digits(num), 68 + curr_digit: 0, 69 + } 70 + } 71 + } 72 + 73 + impl Iterator for Digits { 74 + type Item = usize; 75 + 76 + fn next(&mut self) -> Option<Self::Item> { 77 + if self.curr_digit == self.size - 1 { 78 + None 79 + } else { 80 + let res = Some(digit_at(self.num, self.curr_digit)); 81 + self.curr_digit += 1; 82 + res 83 + } 84 + } 85 + } 86 + 50 87 /// Split the given number once in the middle, see [[split_num_at]] for caveats. 51 88 /// 52 89 /// # Examples
+3 -3
years/2024/Cargo.toml
··· 2 2 [package] 3 3 name = "y_2024" 4 4 version = "0.1.0" 5 - edition = "2021" 5 + edition = "2024" 6 6 7 7 [dependencies] 8 8 advent_core = { path = "../../advent_core" } 9 9 macros = { path = "../../macros" } 10 - rayon = "1.10.0" 11 - regex = "1.11.1" 10 + rayon = "1.11.0" 11 + regex = "1.12.2" 12 12 utils = { path = "../../utils" }
-1
years/2024/src/lib.rs
··· 1 - #![feature(let_chains)] 2 1 #![feature(iter_intersperse)] 3 2 4 3 use macros::year;
-2
years/2024/src/main.rs
··· 1 - #![feature(let_chains)] 2 - 3 1 use macros::year_runner; 4 2 5 3 year_runner!(2024);