retroactive, to derust my rust

day2 part1

+1062 -1
+6
input/day2.test.txt
··· 1 + 7 6 4 2 1 2 + 1 2 7 8 9 3 + 9 7 6 2 1 4 + 1 3 2 4 5 5 + 8 6 4 4 1 6 + 1 3 6 7 9
+1000
input/day2.txt
··· 1 + 10 11 13 16 15 2 + 3 6 9 10 11 12 12 3 + 43 46 49 52 54 58 4 + 59 60 61 63 65 68 75 5 + 60 62 63 65 63 66 69 71 6 + 80 83 85 88 85 87 84 7 + 30 31 32 31 33 33 8 + 9 11 14 12 16 9 + 38 39 40 43 42 45 50 10 + 58 61 63 63 66 11 + 15 17 18 20 20 21 23 21 12 + 17 19 22 24 25 25 28 28 13 + 60 63 66 67 67 69 73 14 + 42 44 44 45 52 15 + 22 23 27 30 32 34 16 + 22 23 25 26 28 31 35 33 17 + 11 14 16 19 22 26 26 18 + 38 41 44 48 52 19 + 15 17 21 24 26 33 20 + 50 51 54 61 62 65 68 21 + 37 40 42 44 49 50 47 22 + 6 7 8 14 14 23 + 17 20 25 27 31 24 + 68 69 70 73 76 81 87 25 + 83 81 82 83 85 87 90 92 26 + 52 51 54 56 58 57 27 + 93 90 91 92 92 28 + 12 9 10 12 14 15 16 20 29 + 26 24 26 27 33 30 + 17 15 14 17 19 31 + 99 96 97 96 97 99 98 32 + 9 7 5 8 8 33 + 59 58 61 63 62 64 68 34 + 24 23 25 28 26 28 35 35 + 93 90 92 94 94 95 36 + 72 69 72 73 76 77 77 75 37 + 46 45 47 47 49 49 38 + 61 60 63 64 64 66 70 39 + 35 32 35 36 37 37 40 47 40 + 6 3 6 9 13 15 16 41 + 29 28 31 33 35 36 40 38 42 + 22 21 25 26 26 43 + 51 50 51 54 58 60 64 44 + 83 82 86 88 95 45 + 79 76 83 86 89 46 + 19 17 23 25 26 25 47 + 19 18 21 28 30 31 31 48 + 72 70 72 73 74 77 82 86 49 + 40 39 40 47 53 50 + 7 7 9 12 15 18 19 51 + 57 57 59 62 63 65 63 52 + 57 57 59 62 65 66 66 53 + 26 26 29 31 33 34 38 54 + 44 44 47 50 52 59 55 + 19 19 21 20 22 25 27 56 + 76 76 79 77 74 57 + 61 61 64 63 65 65 58 + 80 80 81 83 85 83 87 59 + 63 63 66 67 65 71 60 + 48 48 48 50 51 53 56 58 61 + 17 17 17 18 17 62 + 66 66 68 68 68 63 + 78 78 79 79 83 64 + 1 1 3 4 7 8 8 13 65 + 14 14 18 20 21 66 + 22 22 25 27 31 28 67 + 32 32 34 38 38 68 + 49 49 51 52 54 56 60 64 69 + 85 85 89 91 93 94 99 70 + 28 28 29 30 35 38 39 71 + 10 10 11 18 20 22 25 24 72 + 87 87 90 96 96 73 + 47 47 48 51 58 62 74 + 7 7 8 9 11 12 18 25 75 + 70 74 75 77 79 82 76 + 27 31 32 33 34 35 37 34 77 + 45 49 52 55 57 60 62 62 78 + 39 43 44 47 50 51 55 79 + 42 46 49 50 53 54 59 80 + 5 9 12 10 12 81 + 69 73 74 73 74 75 72 82 + 76 80 82 84 81 84 84 83 + 29 33 31 33 35 39 84 + 49 53 54 55 56 57 54 59 85 + 42 46 46 47 50 52 86 + 65 69 69 72 70 87 + 72 76 76 78 80 82 83 83 88 + 45 49 52 53 53 57 89 + 37 41 42 45 45 50 90 + 56 60 62 63 67 68 91 + 35 39 40 43 46 49 53 51 92 + 7 11 15 17 20 21 24 24 93 + 2 6 7 9 13 17 94 + 43 47 50 52 56 59 64 95 + 12 16 19 22 28 30 33 96 + 43 47 48 53 54 57 55 97 + 83 87 88 95 95 98 + 57 61 63 64 66 73 75 79 99 + 57 61 64 69 71 76 100 + 86 93 95 96 97 99 101 + 30 35 37 39 38 102 + 11 17 19 20 20 103 + 20 26 29 32 36 104 + 68 73 74 77 80 87 105 + 37 42 44 43 46 49 50 51 106 + 48 55 58 56 57 58 57 107 + 36 42 39 42 43 44 44 108 + 20 25 28 25 27 29 31 35 109 + 14 20 23 21 22 23 25 32 110 + 77 82 83 83 84 86 88 91 111 + 30 36 37 40 40 42 43 42 112 + 15 21 22 25 27 27 28 28 113 + 46 52 55 55 56 58 62 114 + 15 22 23 23 24 27 34 115 + 22 29 30 34 37 116 + 5 11 14 18 20 18 117 + 7 12 16 18 21 22 22 118 + 39 45 47 51 54 56 58 62 119 + 57 63 67 70 71 76 120 + 72 79 84 86 87 90 121 + 80 85 92 93 96 93 122 + 72 78 83 84 84 123 + 46 52 55 57 58 64 68 124 + 69 75 78 80 87 93 125 + 89 88 85 82 80 77 74 75 126 + 14 13 11 9 8 5 2 2 127 + 93 91 88 86 83 79 128 + 39 37 35 34 32 30 28 21 129 + 52 51 52 49 47 45 130 + 96 95 94 93 90 88 91 93 131 + 35 34 36 35 34 33 33 132 + 39 37 38 37 34 32 31 27 133 + 24 23 24 22 16 134 + 60 57 57 54 53 52 50 48 135 + 36 35 34 33 33 32 31 34 136 + 76 74 71 71 71 137 + 32 29 28 26 23 23 19 138 + 91 88 86 86 83 77 139 + 42 41 39 35 33 140 + 27 24 22 18 19 141 + 19 16 15 13 10 6 6 142 + 50 49 45 43 41 38 34 143 + 48 46 45 41 34 144 + 83 80 78 77 71 68 145 + 46 44 38 37 39 146 + 39 38 37 31 29 27 27 147 + 21 19 18 16 15 9 5 148 + 81 79 78 71 69 66 63 56 149 + 69 71 68 67 66 65 150 + 11 12 11 10 7 10 151 + 83 84 83 81 78 77 75 75 152 + 19 20 18 15 14 12 11 7 153 + 80 81 80 77 75 69 154 + 17 19 20 17 16 15 155 + 45 48 47 44 41 44 41 42 156 + 40 43 41 44 44 157 + 56 57 59 57 53 158 + 93 96 99 96 93 91 88 83 159 + 79 80 78 75 73 73 72 160 + 4 7 4 4 3 4 161 + 65 66 65 65 62 60 58 58 162 + 43 45 44 44 40 163 + 81 83 82 82 81 76 164 + 92 95 91 89 88 87 165 + 30 31 27 24 26 166 + 20 22 21 18 15 11 11 167 + 31 32 31 27 26 24 21 17 168 + 43 46 45 44 42 40 36 31 169 + 47 50 48 47 46 40 37 36 170 + 23 26 24 22 16 15 12 13 171 + 86 88 86 84 81 80 75 75 172 + 88 90 88 87 82 80 76 173 + 83 85 80 77 75 70 174 + 13 13 12 10 8 5 3 1 175 + 48 48 46 44 41 43 176 + 86 86 83 81 78 78 177 + 82 82 81 80 77 73 178 + 23 23 20 19 18 16 14 7 179 + 76 76 75 73 71 73 71 180 + 41 41 39 38 35 37 39 181 + 98 98 96 94 92 93 93 182 + 49 49 48 51 47 183 + 79 79 81 80 77 75 72 67 184 + 37 37 36 35 35 32 185 + 18 18 17 15 15 13 15 186 + 6 6 6 4 4 187 + 35 35 34 33 33 29 188 + 71 71 70 70 69 67 62 189 + 91 91 89 85 82 79 77 190 + 62 62 60 56 58 191 + 16 16 14 11 7 7 192 + 88 88 86 82 78 193 + 88 88 86 85 81 78 73 194 + 21 21 19 18 11 8 195 + 12 12 6 4 6 196 + 79 79 74 71 71 197 + 65 65 60 59 55 198 + 45 45 43 40 38 33 28 199 + 44 40 37 36 34 33 32 31 200 + 15 11 8 7 9 201 + 83 79 77 74 74 202 + 68 64 62 60 59 55 203 + 77 73 71 68 67 64 61 55 204 + 56 52 50 49 47 49 48 205 + 74 70 67 70 68 66 68 206 + 56 52 54 52 49 47 47 207 + 31 27 25 26 23 21 20 16 208 + 89 85 83 86 81 209 + 38 34 34 31 28 26 24 210 + 48 44 43 40 38 38 40 211 + 23 19 19 17 16 15 15 212 + 93 89 88 87 86 86 82 213 + 91 87 85 85 82 77 214 + 58 54 50 48 46 44 41 215 + 90 86 82 80 77 76 77 216 + 83 79 77 73 73 217 + 52 48 47 43 39 218 + 38 34 30 27 21 219 + 98 94 93 92 85 82 220 + 63 59 53 51 52 221 + 69 65 63 61 56 55 55 222 + 84 80 75 74 70 223 + 68 64 58 55 54 49 224 + 28 23 22 19 17 16 225 + 27 20 19 16 14 17 226 + 78 73 72 69 66 66 227 + 23 18 16 13 11 8 7 3 228 + 29 22 19 18 15 12 10 3 229 + 26 21 23 21 18 15 13 12 230 + 48 43 44 41 38 35 36 231 + 20 15 12 10 7 9 9 232 + 37 30 28 25 23 25 21 233 + 24 18 19 16 14 7 234 + 38 31 30 30 29 26 235 + 11 5 5 2 4 236 + 74 67 64 63 62 62 60 60 237 + 95 90 88 87 87 84 80 238 + 36 29 26 25 25 22 19 13 239 + 70 64 60 59 57 56 240 + 93 87 83 80 78 77 78 241 + 77 72 68 65 65 242 + 65 58 54 53 50 48 44 243 + 91 84 80 77 75 74 69 244 + 84 77 76 71 69 68 245 + 74 67 65 59 61 246 + 58 52 50 45 45 247 + 49 43 41 40 34 33 31 27 248 + 78 71 70 63 58 249 + 32 33 36 39 37 250 + 29 30 32 35 36 37 38 38 251 + 5 7 9 10 13 17 252 + 36 37 39 41 42 44 50 253 + 62 64 65 66 69 68 71 254 + 27 29 26 29 31 34 32 255 + 34 37 39 40 43 41 41 256 + 36 39 42 43 45 44 45 49 257 + 78 80 81 80 82 83 89 258 + 7 9 12 12 13 16 18 259 + 32 35 36 36 38 35 260 + 10 11 11 13 13 261 + 43 44 44 46 48 52 262 + 49 51 53 55 56 56 63 263 + 14 16 18 20 24 27 28 29 264 + 64 65 69 70 72 73 76 73 265 + 63 66 69 70 72 76 76 266 + 33 35 39 40 41 42 46 267 + 13 15 18 21 25 32 268 + 31 33 35 36 39 44 47 269 + 56 57 62 65 66 69 66 270 + 18 21 22 23 28 28 271 + 67 68 69 72 78 82 272 + 81 83 84 89 92 99 273 + 54 51 54 55 57 58 274 + 56 54 57 59 61 62 61 275 + 62 61 63 66 67 68 68 276 + 40 37 38 40 43 46 48 52 277 + 37 34 37 38 39 42 45 52 278 + 6 4 6 9 7 8 10 279 + 31 30 32 31 28 280 + 94 92 93 96 98 97 99 99 281 + 70 69 72 71 75 282 + 18 15 17 16 23 283 + 75 72 72 75 78 81 284 + 33 30 32 32 35 36 35 285 + 51 50 52 53 53 53 286 + 53 51 54 54 58 287 + 37 34 34 35 38 45 288 + 17 14 17 21 23 24 26 289 + 71 69 72 74 78 80 82 80 290 + 15 13 17 19 19 291 + 80 78 80 84 86 90 292 + 25 22 26 29 34 293 + 83 82 88 89 92 95 96 294 + 53 51 52 53 54 60 59 295 + 35 34 39 40 41 41 296 + 65 62 67 70 73 76 79 83 297 + 82 80 82 83 88 91 97 298 + 65 65 67 69 70 73 74 75 299 + 22 22 23 25 27 26 300 + 69 69 72 75 78 81 82 82 301 + 40 40 43 44 46 49 50 54 302 + 81 81 84 87 89 96 303 + 4 4 7 4 7 10 304 + 73 73 70 73 70 305 + 86 86 87 86 86 306 + 72 72 74 73 77 307 + 7 7 9 10 7 9 11 16 308 + 54 54 57 57 58 309 + 53 53 56 57 59 62 62 59 310 + 74 74 76 76 76 311 + 80 80 82 83 83 86 90 312 + 2 2 2 4 9 313 + 88 88 90 93 97 98 99 314 + 32 32 36 37 34 315 + 72 72 74 78 78 316 + 32 32 36 37 40 41 42 46 317 + 12 12 15 19 21 26 318 + 3 3 9 10 11 13 319 + 23 23 30 32 30 320 + 58 58 65 67 69 69 321 + 39 39 42 43 49 50 51 55 322 + 9 9 10 17 19 22 27 323 + 82 86 89 92 93 96 324 + 34 38 40 42 44 46 45 325 + 22 26 28 29 29 326 + 52 56 59 62 65 66 70 327 + 61 65 68 71 74 75 77 83 328 + 38 42 39 41 44 47 50 329 + 63 67 68 70 68 71 68 330 + 33 37 38 36 38 38 331 + 3 7 10 12 11 14 18 332 + 21 25 27 25 27 32 333 + 45 49 49 50 52 55 334 + 27 31 33 33 34 31 335 + 8 12 13 13 15 17 17 336 + 6 10 10 11 14 16 20 337 + 65 69 72 72 75 76 82 338 + 86 90 94 96 99 339 + 47 51 55 57 60 62 59 340 + 63 67 69 72 74 78 79 79 341 + 13 17 18 22 23 27 342 + 58 62 65 66 67 71 78 343 + 66 70 72 74 76 78 83 84 344 + 27 31 32 37 40 38 345 + 57 61 63 68 68 346 + 27 31 34 36 42 43 47 347 + 38 42 43 44 46 49 55 60 348 + 4 9 11 12 14 16 349 + 20 26 27 29 32 30 350 + 75 81 84 86 87 90 90 351 + 16 22 23 26 30 352 + 9 15 16 19 22 25 28 34 353 + 26 33 32 35 38 354 + 1 8 10 12 9 6 355 + 6 12 15 13 14 16 19 19 356 + 80 85 88 89 91 93 90 94 357 + 59 65 68 69 67 73 358 + 8 14 16 18 19 21 21 24 359 + 85 90 91 92 92 93 92 360 + 32 38 38 41 43 46 47 47 361 + 53 60 61 62 62 64 67 71 362 + 67 73 75 78 78 81 88 363 + 61 67 70 74 77 78 79 80 364 + 67 74 78 79 81 80 365 + 24 29 31 35 38 38 366 + 7 12 16 19 23 367 + 13 19 20 24 27 28 29 35 368 + 53 60 63 70 72 369 + 69 75 78 79 86 88 86 370 + 3 10 12 13 20 20 371 + 31 36 39 41 46 50 372 + 64 71 77 79 82 84 90 373 + 83 80 77 74 75 374 + 99 97 94 92 89 86 83 83 375 + 59 57 55 53 49 376 + 77 75 74 73 67 377 + 10 8 5 4 2 4 3 1 378 + 37 34 33 36 35 34 36 379 + 55 52 51 53 53 380 + 30 27 24 23 24 23 21 17 381 + 84 83 86 85 78 382 + 36 34 33 33 31 383 + 19 16 16 14 13 14 384 + 80 78 76 76 76 385 + 70 68 66 64 64 61 60 56 386 + 84 81 80 79 79 73 387 + 93 91 88 84 83 388 + 63 61 57 56 53 52 50 51 389 + 85 84 80 77 77 390 + 85 84 82 81 77 74 70 391 + 21 20 16 15 12 9 2 392 + 41 39 38 32 31 28 393 + 82 81 80 74 76 394 + 64 61 55 54 53 50 50 395 + 39 36 31 28 26 22 396 + 78 75 68 65 60 397 + 96 97 95 92 89 88 86 84 398 + 97 98 96 94 97 399 + 86 89 87 84 84 400 + 58 61 58 56 52 401 + 72 73 72 70 69 68 67 60 402 + 33 34 35 32 29 28 403 + 62 65 63 61 60 59 61 63 404 + 33 36 39 36 34 31 31 405 + 48 50 49 52 50 46 406 + 17 20 22 20 19 12 407 + 65 66 65 64 64 62 59 408 + 84 85 84 84 85 409 + 31 32 31 28 26 26 26 410 + 63 66 64 61 61 58 57 53 411 + 66 69 68 66 66 60 412 + 20 23 19 16 15 413 + 85 86 83 81 77 74 75 414 + 49 50 48 44 44 415 + 54 57 53 51 47 416 + 45 46 42 39 38 36 29 417 + 29 32 30 29 24 21 18 17 418 + 19 22 21 16 15 13 14 419 + 76 77 72 71 68 65 64 64 420 + 86 87 85 83 77 76 72 421 + 62 63 61 60 57 54 47 41 422 + 36 36 35 33 32 30 28 25 423 + 98 98 96 93 96 424 + 72 72 71 68 67 65 62 62 425 + 29 29 26 23 21 19 17 13 426 + 41 41 39 37 36 29 427 + 36 36 33 30 27 29 28 428 + 77 77 78 75 72 71 73 429 + 56 56 53 52 49 48 50 50 430 + 75 75 77 74 70 431 + 78 78 79 77 74 73 71 66 432 + 30 30 29 26 25 22 22 19 433 + 43 43 43 41 38 36 37 434 + 18 18 18 17 16 15 13 13 435 + 55 55 52 51 48 48 44 436 + 65 65 63 63 62 60 54 437 + 58 58 54 51 50 438 + 51 51 50 46 49 439 + 63 63 62 59 57 53 53 440 + 68 68 64 61 58 55 54 50 441 + 32 32 30 27 26 22 21 15 442 + 66 66 60 57 54 51 49 47 443 + 84 84 81 78 72 75 444 + 81 81 75 74 74 445 + 49 49 46 44 42 41 35 31 446 + 41 41 39 38 32 30 23 447 + 98 94 91 88 86 85 83 448 + 66 62 60 58 59 449 + 66 62 59 58 58 450 + 63 59 58 55 54 53 50 46 451 + 69 65 62 59 58 55 48 452 + 37 33 36 34 31 453 + 53 49 48 46 44 47 49 454 + 97 93 92 94 91 89 86 86 455 + 76 72 71 70 73 72 68 456 + 39 35 33 31 34 27 457 + 70 66 65 65 64 458 + 89 85 84 83 82 80 80 81 459 + 77 73 70 68 68 68 460 + 66 62 59 58 58 57 53 461 + 43 39 36 36 33 32 25 462 + 79 75 72 70 66 65 463 + 71 67 65 62 58 56 53 55 464 + 82 78 75 71 71 465 + 40 36 32 31 29 28 27 23 466 + 91 87 86 83 82 78 72 467 + 76 72 70 69 64 63 60 57 468 + 69 65 60 57 59 469 + 24 20 18 17 14 8 8 470 + 43 39 37 34 32 31 24 20 471 + 74 70 63 62 60 54 472 + 21 16 13 12 11 10 8 473 + 79 73 72 69 66 63 60 61 474 + 30 25 23 21 19 19 475 + 63 57 55 52 49 47 46 42 476 + 26 19 18 17 16 14 7 477 + 60 54 56 53 52 49 478 + 42 37 36 39 38 37 35 36 479 + 81 76 79 77 74 74 480 + 27 20 19 18 15 12 15 11 481 + 58 53 52 53 50 44 482 + 17 12 10 9 8 7 7 5 483 + 26 21 20 20 21 484 + 99 93 90 87 87 84 82 82 485 + 31 24 21 18 15 12 12 8 486 + 36 31 29 27 26 26 19 487 + 32 27 26 22 20 18 488 + 75 68 64 61 59 62 489 + 22 15 13 9 9 490 + 64 58 57 53 49 491 + 47 42 40 36 33 30 28 23 492 + 19 12 10 4 3 493 + 20 14 11 10 9 7 1 4 494 + 16 10 5 4 2 2 495 + 88 83 78 75 71 496 + 98 92 87 86 83 81 75 497 + 70 72 74 77 75 498 + 36 38 40 43 46 46 499 + 40 42 44 45 47 48 49 53 500 + 73 75 77 80 82 89 501 + 67 69 67 68 71 502 + 80 83 85 87 89 87 84 503 + 71 73 74 71 74 74 504 + 31 34 36 33 34 35 39 505 + 77 80 79 82 83 84 90 506 + 19 22 25 25 27 28 507 + 74 76 77 77 78 79 82 79 508 + 91 94 94 95 95 509 + 66 69 70 71 71 72 76 510 + 44 47 49 52 52 58 511 + 4 6 7 11 14 16 18 512 + 80 81 85 87 89 88 513 + 81 84 86 90 93 93 514 + 5 8 10 12 14 18 22 515 + 15 16 20 21 26 516 + 16 19 24 26 27 517 + 81 83 86 88 93 94 91 518 + 61 62 63 66 71 74 74 519 + 13 14 16 23 27 520 + 46 47 53 54 57 63 521 + 34 33 36 38 41 43 46 48 522 + 50 47 49 52 55 56 58 57 523 + 10 9 10 12 12 524 + 36 33 34 35 37 39 40 44 525 + 68 66 67 69 71 74 80 526 + 83 80 81 79 80 81 527 + 78 76 78 79 78 80 83 80 528 + 56 53 56 54 57 57 529 + 31 28 29 31 30 34 530 + 62 59 56 58 63 531 + 6 5 7 7 9 532 + 22 19 21 23 23 24 21 533 + 31 28 30 33 34 36 36 36 534 + 65 64 65 68 68 70 71 75 535 + 7 6 8 11 11 12 13 18 536 + 60 58 59 61 63 65 69 72 537 + 48 46 47 49 53 51 538 + 78 77 81 84 86 88 88 539 + 15 13 15 16 19 23 27 540 + 48 46 50 52 54 55 58 63 541 + 18 16 18 19 25 27 29 542 + 71 68 69 72 73 80 82 80 543 + 68 66 68 70 77 77 544 + 75 74 76 79 85 86 90 545 + 69 67 70 72 74 81 83 89 546 + 66 66 67 70 72 73 547 + 6 6 9 11 10 548 + 15 15 16 19 19 549 + 53 53 54 57 58 62 550 + 79 79 82 85 91 551 + 25 25 23 25 28 29 552 + 1 1 3 1 4 1 553 + 80 80 81 82 80 82 85 85 554 + 36 36 38 41 40 41 45 555 + 8 8 10 13 16 13 16 21 556 + 7 7 7 10 12 13 15 18 557 + 39 39 41 43 43 46 48 45 558 + 10 10 13 13 14 17 17 559 + 71 71 72 74 76 76 80 560 + 53 53 56 59 59 65 561 + 19 19 23 26 28 29 32 562 + 67 67 68 69 71 75 74 563 + 62 62 65 69 71 73 74 74 564 + 42 42 46 48 49 51 55 565 + 47 47 51 53 56 58 63 566 + 54 54 61 64 65 567 + 77 77 84 85 87 84 568 + 15 15 20 23 24 25 25 569 + 87 87 94 95 99 570 + 17 17 22 24 29 571 + 42 46 47 49 51 54 55 57 572 + 54 58 59 62 59 573 + 60 64 66 67 69 71 73 73 574 + 6 10 11 14 15 18 22 575 + 46 50 52 55 58 61 68 576 + 13 17 20 23 22 25 28 577 + 35 39 40 43 46 45 44 578 + 24 28 31 29 32 32 579 + 24 28 30 31 30 33 36 40 580 + 75 79 80 81 78 79 85 581 + 23 27 27 29 30 582 + 47 51 52 52 53 51 583 + 34 38 38 41 43 44 46 46 584 + 61 65 66 66 70 585 + 86 90 91 91 97 586 + 5 9 11 13 15 18 22 24 587 + 70 74 77 81 83 81 588 + 5 9 12 16 19 19 589 + 61 65 66 70 72 75 79 590 + 59 63 67 70 73 78 591 + 12 16 18 24 27 592 + 19 23 25 26 28 33 36 33 593 + 78 82 87 89 91 91 594 + 76 80 83 88 92 595 + 8 12 14 21 28 596 + 24 29 30 32 33 34 36 597 + 51 58 60 61 62 63 61 598 + 38 45 47 50 50 599 + 57 63 64 66 67 68 72 600 + 6 12 14 15 18 20 26 601 + 5 10 9 12 14 602 + 50 55 52 53 51 603 + 16 21 18 20 23 25 25 604 + 9 14 11 14 18 605 + 72 79 80 82 80 81 82 87 606 + 85 91 92 92 93 94 607 + 85 91 91 93 92 608 + 3 8 10 10 11 11 609 + 12 19 19 21 25 610 + 40 47 48 51 52 54 54 61 611 + 78 83 84 88 90 92 93 95 612 + 48 54 57 61 58 613 + 76 81 82 85 89 89 614 + 56 63 64 65 68 72 76 615 + 64 71 72 75 76 80 85 616 + 38 45 50 53 54 56 617 + 56 61 62 67 69 70 67 618 + 45 51 54 59 60 62 64 64 619 + 2 8 11 18 19 23 620 + 60 67 70 71 73 80 82 89 621 + 65 63 61 59 60 622 + 85 82 79 76 73 71 69 69 623 + 18 17 14 11 8 6 5 1 624 + 20 18 16 15 13 12 7 625 + 61 60 58 56 53 54 51 626 + 54 51 54 52 51 52 627 + 14 12 11 8 11 8 7 7 628 + 81 78 77 76 78 75 72 68 629 + 17 15 13 12 15 10 630 + 44 43 41 39 39 38 37 631 + 63 61 58 57 57 55 56 632 + 82 80 79 77 75 73 73 73 633 + 98 95 92 92 88 634 + 54 52 52 51 49 46 41 635 + 16 15 14 12 8 6 5 636 + 44 41 37 36 37 637 + 39 36 34 32 28 27 24 24 638 + 94 92 89 85 84 80 639 + 61 60 56 54 51 49 48 42 640 + 50 48 42 41 39 641 + 92 90 89 87 80 82 642 + 57 54 48 45 44 41 39 39 643 + 67 66 64 59 57 53 644 + 49 47 45 38 36 35 30 645 + 97 98 95 93 90 89 87 86 646 + 24 26 24 21 24 647 + 37 39 37 36 33 30 30 648 + 61 63 60 59 58 54 649 + 63 66 64 62 56 650 + 68 71 70 72 71 70 651 + 88 89 92 91 89 91 652 + 28 29 28 27 30 28 28 653 + 21 22 24 22 20 19 15 654 + 91 92 95 92 85 655 + 68 71 70 69 68 68 66 63 656 + 73 76 73 72 70 67 67 70 657 + 38 41 38 38 37 37 658 + 71 73 72 72 71 68 65 61 659 + 17 19 16 15 15 14 7 660 + 38 40 37 35 34 30 28 27 661 + 11 12 10 8 4 6 662 + 89 92 91 88 84 81 81 663 + 80 81 79 76 72 68 664 + 51 52 50 48 44 39 665 + 35 37 34 27 25 666 + 60 63 61 56 55 58 667 + 47 48 43 42 39 39 668 + 24 26 19 17 13 669 + 68 69 67 62 60 53 670 + 95 95 94 92 89 671 + 80 80 77 76 74 72 70 72 672 + 81 81 78 75 75 673 + 99 99 98 97 96 95 93 89 674 + 16 16 14 13 12 7 675 + 98 98 95 92 90 93 92 676 + 92 92 95 92 89 92 677 + 41 41 38 41 40 40 678 + 50 50 48 50 46 679 + 21 21 22 19 16 14 9 680 + 49 49 49 47 44 41 38 681 + 74 74 72 71 71 72 682 + 10 10 8 6 3 3 2 2 683 + 71 71 69 66 65 65 63 59 684 + 81 81 81 80 75 685 + 20 20 16 14 13 686 + 46 46 42 40 39 38 39 687 + 9 9 8 7 3 3 688 + 76 76 72 71 69 68 67 63 689 + 47 47 46 44 40 39 34 690 + 25 25 22 21 16 14 691 + 78 78 72 71 68 67 70 692 + 26 26 20 17 17 693 + 21 21 14 11 10 6 694 + 63 63 56 55 53 51 50 43 695 + 95 91 90 88 86 84 83 81 696 + 54 50 48 46 43 45 697 + 84 80 78 76 76 698 + 44 40 37 36 34 30 699 + 32 28 26 25 23 18 700 + 29 25 24 23 24 22 21 20 701 + 77 73 70 67 70 68 69 702 + 60 56 58 56 54 53 51 51 703 + 92 88 85 84 86 82 704 + 62 58 55 53 52 54 53 46 705 + 45 41 41 38 37 35 706 + 38 34 31 31 33 707 + 71 67 65 65 65 708 + 27 23 20 18 15 15 11 709 + 82 78 78 75 74 71 70 64 710 + 80 76 74 72 70 66 65 711 + 56 52 51 47 46 43 41 44 712 + 71 67 65 61 61 713 + 81 77 74 73 69 65 714 + 98 94 92 91 88 84 79 715 + 41 37 35 30 27 716 + 88 84 81 80 75 77 717 + 34 30 27 25 24 19 19 718 + 54 50 48 45 43 38 36 32 719 + 64 60 59 54 52 45 720 + 93 88 86 85 82 721 + 54 47 46 43 46 722 + 26 21 19 18 18 723 + 24 18 15 13 12 9 6 2 724 + 73 68 66 63 60 57 54 49 725 + 62 56 55 56 54 51 50 726 + 65 58 56 59 57 54 52 55 727 + 92 87 86 85 82 85 85 728 + 15 9 7 10 6 729 + 73 66 63 62 61 64 59 730 + 77 71 70 67 67 66 63 731 + 65 60 57 55 55 53 56 732 + 76 70 70 68 66 65 62 62 733 + 37 30 28 28 27 25 22 18 734 + 43 38 35 35 32 25 735 + 93 87 83 81 79 76 736 + 72 66 62 61 60 57 60 737 + 78 73 69 67 67 738 + 96 90 87 83 79 739 + 53 46 45 41 35 740 + 74 68 66 61 58 741 + 96 90 84 81 79 76 79 742 + 90 83 82 77 76 76 743 + 98 92 86 83 82 78 744 + 63 58 55 54 52 45 44 38 745 + 66 71 71 72 74 75 77 746 + 6 4 6 10 13 14 14 747 + 42 40 39 36 31 25 748 + 45 44 46 45 44 43 42 38 749 + 37 39 40 43 45 46 46 750 + 15 11 8 7 3 1 3 751 + 53 53 52 51 47 752 + 24 19 18 13 7 753 + 39 35 34 33 30 27 20 754 + 32 32 30 26 29 755 + 75 75 80 83 85 88 88 756 + 26 26 30 32 33 34 37 757 + 46 46 48 47 42 758 + 46 41 39 36 32 31 27 759 + 91 88 86 83 80 73 760 + 71 67 66 63 59 761 + 41 45 47 46 47 50 51 762 + 43 37 35 36 32 763 + 8 9 10 10 12 13 15 20 764 + 28 28 29 30 30 31 34 38 765 + 66 69 66 63 65 66 766 + 98 94 91 87 86 86 767 + 35 34 33 33 32 768 + 9 6 6 7 8 13 769 + 7 10 12 15 17 19 24 24 770 + 52 48 51 49 43 771 + 97 98 91 88 85 83 82 78 772 + 79 79 78 75 70 70 773 + 47 43 40 39 36 32 28 774 + 11 8 7 4 1 1 775 + 37 36 39 39 41 42 45 47 776 + 58 58 58 57 54 53 50 48 777 + 25 25 24 23 18 778 + 49 47 44 38 37 36 34 36 779 + 33 32 37 38 40 42 43 780 + 12 19 24 25 26 781 + 38 40 41 42 45 46 49 55 782 + 64 60 57 56 56 54 51 49 783 + 47 47 49 52 53 60 62 67 784 + 28 31 27 24 21 19 22 785 + 38 45 48 51 51 56 786 + 73 70 70 68 64 787 + 82 82 81 79 77 72 73 788 + 43 45 48 50 53 56 58 59 789 + 60 63 64 67 68 69 72 790 + 72 74 77 79 81 84 791 + 60 57 55 54 52 50 47 792 + 57 54 52 50 47 44 793 + 8 9 11 14 15 794 + 82 79 77 74 71 68 66 795 + 34 31 30 29 26 23 21 796 + 10 13 14 17 18 21 22 23 797 + 79 77 76 73 71 70 798 + 87 89 92 93 96 97 799 + 82 81 80 78 77 76 73 72 800 + 22 19 16 14 13 801 + 79 80 82 83 84 86 88 802 + 76 78 80 82 83 803 + 15 18 19 20 23 24 27 804 + 65 67 68 71 73 75 77 79 805 + 42 41 40 39 38 806 + 33 34 37 38 41 44 46 807 + 69 72 75 76 78 81 808 + 90 87 86 85 83 809 + 57 56 54 53 50 49 47 45 810 + 67 65 62 61 59 56 55 811 + 23 25 27 29 32 33 812 + 70 67 66 63 60 57 55 813 + 90 88 85 83 82 79 76 73 814 + 91 88 86 83 80 79 76 73 815 + 37 35 32 31 28 26 25 22 816 + 22 23 25 27 28 29 32 817 + 96 93 90 89 88 818 + 59 57 56 55 54 819 + 38 37 35 32 31 820 + 11 10 7 6 5 3 821 + 51 50 48 45 42 40 38 35 822 + 69 68 65 64 63 61 59 58 823 + 45 42 39 37 36 34 32 824 + 3 4 7 8 9 825 + 43 46 48 49 50 53 54 55 826 + 35 37 40 43 46 827 + 46 44 41 38 36 33 828 + 15 13 10 7 5 2 829 + 13 11 10 9 8 7 6 830 + 40 43 46 47 48 51 831 + 70 71 74 76 79 832 + 59 58 56 55 52 49 833 + 86 89 91 92 95 97 98 834 + 85 88 90 92 93 835 + 63 62 59 57 55 52 50 836 + 77 74 72 70 68 67 837 + 50 47 45 44 41 38 36 838 + 82 84 85 88 90 91 94 97 839 + 13 15 16 18 20 23 26 28 840 + 61 63 65 68 70 72 75 76 841 + 80 81 82 83 85 842 + 73 71 68 67 66 65 62 843 + 45 48 50 53 56 58 59 62 844 + 9 10 13 16 19 22 23 26 845 + 40 39 36 34 31 30 27 25 846 + 90 88 86 83 82 81 847 + 29 31 33 35 38 41 44 848 + 57 54 53 51 49 46 43 849 + 89 87 85 84 83 82 850 + 43 41 38 35 34 33 31 30 851 + 26 23 22 21 18 16 14 852 + 80 81 82 84 87 853 + 42 43 45 48 50 51 53 55 854 + 15 12 10 8 5 4 855 + 36 34 31 29 28 27 856 + 15 13 12 9 6 3 857 + 54 51 50 49 47 858 + 40 43 46 47 48 51 53 859 + 38 36 33 32 31 28 26 23 860 + 65 64 61 59 57 55 861 + 84 83 81 79 78 77 862 + 12 15 16 18 20 863 + 37 38 40 43 46 48 50 864 + 20 21 22 23 24 25 27 865 + 82 83 84 87 89 866 + 30 32 34 37 39 42 45 48 867 + 87 85 83 80 77 74 868 + 65 66 69 70 71 869 + 76 79 80 83 86 87 870 + 5 8 11 14 15 871 + 6 8 10 13 16 19 872 + 18 15 14 12 10 873 + 71 72 75 77 79 81 82 83 874 + 33 30 28 26 24 22 875 + 67 68 69 71 72 73 876 + 89 90 93 94 97 877 + 25 22 21 19 16 13 878 + 70 68 66 64 63 60 879 + 26 27 29 31 32 35 38 880 + 22 24 26 27 29 32 33 34 881 + 25 27 29 30 33 36 39 882 + 56 53 51 50 48 47 46 883 + 20 22 23 24 26 27 28 884 + 24 27 29 31 34 885 + 86 83 81 78 76 75 72 71 886 + 33 35 36 39 40 41 43 887 + 13 14 16 19 21 23 888 + 64 61 58 56 54 53 51 49 889 + 25 28 31 33 34 36 890 + 79 77 75 72 69 66 65 891 + 85 87 90 92 93 95 96 892 + 40 42 44 47 49 52 54 893 + 39 38 35 34 33 32 29 894 + 29 30 33 35 38 40 42 895 + 96 93 92 90 88 87 85 896 + 50 52 53 54 57 60 897 + 29 28 25 22 19 17 898 + 55 54 53 52 50 48 899 + 27 26 23 20 17 16 900 + 60 63 65 67 70 72 73 75 901 + 31 28 26 24 23 22 902 + 50 47 46 44 43 903 + 30 31 33 36 37 40 43 904 + 79 78 76 74 73 70 67 905 + 51 52 53 56 58 60 61 906 + 83 82 79 76 74 72 71 68 907 + 33 34 35 37 40 42 45 908 + 81 82 85 86 87 90 909 + 94 93 92 91 89 87 85 83 910 + 12 14 16 19 21 23 911 + 3 5 8 11 13 15 17 912 + 82 80 77 75 74 913 + 28 30 31 34 36 38 914 + 83 80 78 77 76 75 74 71 915 + 47 49 52 54 56 59 60 916 + 45 43 40 39 38 35 33 30 917 + 9 7 6 5 4 3 918 + 15 18 21 22 24 27 919 + 19 21 24 27 30 32 33 920 + 30 27 25 22 19 921 + 38 37 34 31 29 27 24 22 922 + 74 77 79 81 82 83 85 86 923 + 81 79 78 77 75 73 924 + 52 51 50 49 47 44 43 925 + 15 12 9 7 4 2 1 926 + 32 29 26 23 21 18 15 927 + 6 7 10 12 13 16 928 + 22 24 25 27 28 31 33 929 + 9 12 15 16 19 21 23 930 + 23 21 20 19 18 15 12 10 931 + 50 52 55 58 59 932 + 2 3 6 8 10 12 15 18 933 + 94 91 88 87 84 934 + 54 52 51 49 48 46 45 935 + 82 85 86 89 90 936 + 21 19 17 15 14 11 937 + 53 56 59 62 64 938 + 3 6 8 11 13 14 939 + 83 85 88 90 92 940 + 60 57 55 54 52 49 48 941 + 77 74 73 70 68 66 63 942 + 22 25 27 30 31 33 34 943 + 31 33 34 35 36 39 944 + 84 83 81 80 79 78 945 + 20 23 26 27 28 31 32 34 946 + 15 16 18 19 22 25 26 947 + 99 97 96 94 92 90 948 + 73 72 70 68 67 66 63 61 949 + 65 63 62 61 58 56 55 52 950 + 78 79 81 84 85 88 91 92 951 + 74 71 68 67 65 952 + 46 49 51 53 56 57 953 + 21 22 23 24 25 26 954 + 33 35 38 40 41 44 47 955 + 88 91 92 93 96 956 + 25 28 30 33 35 957 + 89 92 95 96 97 958 + 92 90 88 85 82 79 78 77 959 + 77 80 81 84 86 89 90 92 960 + 74 76 78 80 81 83 84 961 + 75 74 71 69 68 65 962 + 17 16 13 10 9 963 + 10 12 15 18 19 964 + 47 49 52 54 55 965 + 91 88 87 85 84 966 + 52 51 49 48 46 43 40 37 967 + 86 84 83 81 78 75 968 + 11 13 15 18 20 21 23 25 969 + 94 93 91 88 86 84 81 970 + 71 70 67 65 64 971 + 41 44 45 47 48 972 + 77 80 82 84 87 973 + 98 95 93 92 90 88 974 + 76 79 81 82 84 85 87 90 975 + 52 50 49 47 44 41 39 976 + 84 85 88 89 91 94 97 98 977 + 76 79 80 81 83 84 86 88 978 + 21 23 26 27 29 979 + 94 93 90 87 85 84 81 980 + 76 77 80 83 85 88 90 93 981 + 56 53 50 47 44 43 41 40 982 + 78 81 82 85 87 983 + 86 87 89 90 93 984 + 92 90 89 88 86 85 985 + 45 44 43 42 39 986 + 75 72 71 69 66 64 62 987 + 75 73 71 69 67 65 63 60 988 + 14 16 18 19 20 21 989 + 77 74 72 70 69 67 990 + 46 45 42 41 39 37 36 35 991 + 20 18 16 13 10 7 6 3 992 + 64 66 69 71 72 75 993 + 16 18 21 23 24 25 26 28 994 + 61 59 57 56 54 52 50 995 + 44 45 48 51 54 57 58 60 996 + 25 28 31 32 35 997 + 79 78 76 73 71 70 998 + 64 65 68 71 73 74 999 + 58 60 63 64 67 1000 + 33 35 36 37 39 41
+56 -1
src/lib.rs
··· 26 26 27 27 pub fn day1_part2(input: &str) -> String { 28 28 let (left, right) = day1_preprocess(input); 29 - let similarity_score: u32 = left.into_iter() 29 + let similarity_score: u32 = left 30 + .into_iter() 30 31 .map(|left_location| { 31 32 left_location 32 33 * right ··· 38 39 similarity_score.to_string() 39 40 } 40 41 42 + pub mod day2 { 43 + pub fn day2_part1(input: &str) -> String { 44 + let reports: Vec<Vec<u32>> = input 45 + .lines() 46 + .map(|report| { 47 + report 48 + .split_ascii_whitespace() 49 + .map(|level| level.parse().unwrap()) 50 + .collect() 51 + }) 52 + .collect(); 53 + 54 + reports 55 + .into_iter() 56 + .filter(gradual) 57 + .filter(monotonic) 58 + .count() 59 + .to_string() 60 + } 61 + 62 + fn gradual(report: &Vec<u32>) -> bool { 63 + for i in 1..report.len() { 64 + let diff = report[i].abs_diff(report[i - 1]); 65 + if !(1..=3).contains(&diff) { 66 + return false; 67 + } 68 + } 69 + true 70 + } 71 + 72 + //fails if not gradual 73 + fn monotonic(report: &Vec<u32>) -> bool { 74 + let increasing = report[0] < report[1]; 75 + for i in 1..report.len() { 76 + if increasing { 77 + if report[i] < report[i - 1] { 78 + return false; 79 + } 80 + } else if report[i] > report[i - 1] { 81 + return false; 82 + } 83 + } 84 + true 85 + } 86 + } 87 + 41 88 #[cfg(test)] 42 89 mod tests { 43 90 use super::*; 91 + 92 + #[test] 93 + fn day2_part1_test() { 94 + let test_result = day2::day2_part1(include_str!("../input/day2.test.txt")); 95 + assert_eq!(test_result, "2"); 96 + let result = day2::day2_part1(include_str!("../input/day2.txt")); 97 + assert_eq!(result, "213"); 98 + } 44 99 45 100 #[test] 46 101 fn day1_part1_test() {