diff --git a/input/14 b/input/14 new file mode 100644 index 0000000..71a071e --- /dev/null +++ b/input/14 @@ -0,0 +1,152 @@ +498,13 -> 498,17 -> 491,17 -> 491,21 -> 507,21 -> 507,17 -> 502,17 -> 502,13 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +498,13 -> 498,17 -> 491,17 -> 491,21 -> 507,21 -> 507,17 -> 502,17 -> 502,13 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +468,113 -> 472,113 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +438,152 -> 442,152 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +474,117 -> 478,117 +495,39 -> 511,39 -> 511,38 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +471,93 -> 483,93 -> 483,92 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +498,13 -> 498,17 -> 491,17 -> 491,21 -> 507,21 -> 507,17 -> 502,17 -> 502,13 +441,150 -> 445,150 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +456,125 -> 456,128 -> 453,128 -> 453,134 -> 462,134 -> 462,128 -> 460,128 -> 460,125 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +471,93 -> 483,93 -> 483,92 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +456,125 -> 456,128 -> 453,128 -> 453,134 -> 462,134 -> 462,128 -> 460,128 -> 460,125 +503,64 -> 503,67 -> 496,67 -> 496,71 -> 512,71 -> 512,67 -> 508,67 -> 508,64 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +456,125 -> 456,128 -> 453,128 -> 453,134 -> 462,134 -> 462,128 -> 460,128 -> 460,125 +493,78 -> 497,78 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +483,48 -> 487,48 +484,81 -> 484,84 -> 481,84 -> 481,88 -> 492,88 -> 492,84 -> 488,84 -> 488,81 +498,13 -> 498,17 -> 491,17 -> 491,21 -> 507,21 -> 507,17 -> 502,17 -> 502,13 +465,115 -> 469,115 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +462,117 -> 466,117 +471,115 -> 475,115 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +456,125 -> 456,128 -> 453,128 -> 453,134 -> 462,134 -> 462,128 -> 460,128 -> 460,125 +498,13 -> 498,17 -> 491,17 -> 491,21 -> 507,21 -> 507,17 -> 502,17 -> 502,13 +499,78 -> 503,78 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +503,64 -> 503,67 -> 496,67 -> 496,71 -> 512,71 -> 512,67 -> 508,67 -> 508,64 +450,156 -> 454,156 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +498,13 -> 498,17 -> 491,17 -> 491,21 -> 507,21 -> 507,17 -> 502,17 -> 502,13 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +495,48 -> 499,48 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +498,46 -> 502,46 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +487,78 -> 491,78 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +495,44 -> 499,44 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +486,46 -> 490,46 +483,97 -> 492,97 -> 492,96 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +468,117 -> 472,117 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +484,81 -> 484,84 -> 481,84 -> 481,88 -> 492,88 -> 492,84 -> 488,84 -> 488,81 +444,152 -> 448,152 +489,48 -> 493,48 +492,42 -> 496,42 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +484,81 -> 484,84 -> 481,84 -> 481,88 -> 492,88 -> 492,84 -> 488,84 -> 488,81 +496,76 -> 500,76 +503,64 -> 503,67 -> 496,67 -> 496,71 -> 512,71 -> 512,67 -> 508,67 -> 508,64 +503,64 -> 503,67 -> 496,67 -> 496,71 -> 512,71 -> 512,67 -> 508,67 -> 508,64 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +456,125 -> 456,128 -> 453,128 -> 453,134 -> 462,134 -> 462,128 -> 460,128 -> 460,125 +435,154 -> 439,154 +503,64 -> 503,67 -> 496,67 -> 496,71 -> 512,71 -> 512,67 -> 508,67 -> 508,64 +441,154 -> 445,154 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +447,154 -> 451,154 +459,121 -> 459,122 -> 470,122 -> 470,121 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +495,39 -> 511,39 -> 511,38 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +493,74 -> 497,74 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +484,81 -> 484,84 -> 481,84 -> 481,88 -> 492,88 -> 492,84 -> 488,84 -> 488,81 +492,46 -> 496,46 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +444,156 -> 448,156 +459,121 -> 459,122 -> 470,122 -> 470,121 +459,121 -> 459,122 -> 470,122 -> 470,121 +438,156 -> 442,156 +490,76 -> 494,76 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +432,156 -> 436,156 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +456,125 -> 456,128 -> 453,128 -> 453,134 -> 462,134 -> 462,128 -> 460,128 -> 460,125 +489,44 -> 493,44 +483,97 -> 492,97 -> 492,96 +503,64 -> 503,67 -> 496,67 -> 496,71 -> 512,71 -> 512,67 -> 508,67 -> 508,64 +484,81 -> 484,84 -> 481,84 -> 481,88 -> 492,88 -> 492,84 -> 488,84 -> 488,81 +484,81 -> 484,84 -> 481,84 -> 481,88 -> 492,88 -> 492,84 -> 488,84 -> 488,81 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +484,81 -> 484,84 -> 481,84 -> 481,88 -> 492,88 -> 492,84 -> 488,84 -> 488,81 +456,125 -> 456,128 -> 453,128 -> 453,134 -> 462,134 -> 462,128 -> 460,128 -> 460,125 +506,61 -> 506,57 -> 506,61 -> 508,61 -> 508,56 -> 508,61 -> 510,61 -> 510,55 -> 510,61 -> 512,61 -> 512,56 -> 512,61 -> 514,61 -> 514,56 -> 514,61 -> 516,61 -> 516,60 -> 516,61 -> 518,61 -> 518,55 -> 518,61 +503,64 -> 503,67 -> 496,67 -> 496,71 -> 512,71 -> 512,67 -> 508,67 -> 508,64 +502,34 -> 502,33 -> 502,34 -> 504,34 -> 504,31 -> 504,34 -> 506,34 -> 506,27 -> 506,34 -> 508,34 -> 508,25 -> 508,34 -> 510,34 -> 510,32 -> 510,34 -> 512,34 -> 512,33 -> 512,34 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 +474,110 -> 474,103 -> 474,110 -> 476,110 -> 476,103 -> 476,110 -> 478,110 -> 478,108 -> 478,110 -> 480,110 -> 480,100 -> 480,110 -> 482,110 -> 482,103 -> 482,110 -> 484,110 -> 484,104 -> 484,110 -> 486,110 -> 486,103 -> 486,110 -> 488,110 -> 488,101 -> 488,110 +498,13 -> 498,17 -> 491,17 -> 491,21 -> 507,21 -> 507,17 -> 502,17 -> 502,13 +501,48 -> 505,48 +444,147 -> 444,142 -> 444,147 -> 446,147 -> 446,142 -> 446,147 -> 448,147 -> 448,140 -> 448,147 -> 450,147 -> 450,137 -> 450,147 -> 452,147 -> 452,138 -> 452,147 -> 454,147 -> 454,142 -> 454,147 -> 456,147 -> 456,145 -> 456,147 -> 458,147 -> 458,140 -> 458,147 diff --git a/input/14-test b/input/14-test new file mode 100644 index 0000000..1926028 --- /dev/null +++ b/input/14-test @@ -0,0 +1,2 @@ +498,4 -> 498,6 -> 496,6 +503,4 -> 502,4 -> 502,9 -> 494,9 \ No newline at end of file diff --git a/src/bin/14.rs b/src/bin/14.rs new file mode 100644 index 0000000..379c224 --- /dev/null +++ b/src/bin/14.rs @@ -0,0 +1,95 @@ +use std::collections::HashSet; + +use aoc2022::*; +use itertools::Itertools; + +const INPUT: &str = include_str!("../../input/14"); + +fn main() { + solved_level_1(Cave::from_input(false).simulate()); + solved_level_2(Cave::from_input(true).simulate()); +} + +struct Cave { + floor: Option, + cells: HashSet<(i64, i64)>, +} + +impl Cave { + fn from_input(floor: bool) -> Self { + let mut cells = HashSet::new(); + for line in INPUT.lines() { + let pairs = line + .split(" -> ") + .flat_map(|pair| pair.split(',')) + .map(|n| n.parse::().unwrap()) + .tuples() + .tuple_windows(); + for ((x1, y1), (x2, y2)) in pairs { + for x in x1.min(x2)..=x1.max(x2) { + for y in y1.min(y2)..=y1.max(y2) { + cells.insert((x, y)); + } + } + } + } + + let floor = floor.then(|| cells.iter().map(|(_, y)| *y).max().unwrap() + 2); + + Self { floor, cells } + } + + fn simulate(&mut self) -> usize { + let max_y = self.cells.iter().copied().map(|(_, y)| y).max().unwrap(); + + for count in 0.. { + let mut x = 500; + let mut y = 0; + loop { + // End of level 1: Sand falls into the void. + if y > max_y + 10 { + return count; + } + + // Check for free places + let left = self.is_free(x - 1, y + 1); + let down = self.is_free(x, y + 1); + let right = self.is_free(x + 1, y + 1); + + match (left, down, right) { + (false, false, false) => { + self.cells.insert((x, y)); + + // End of level 2: The source has been filled. + if (x, y) == (500, 0) { + return count + 1; + } + + break; + } + (_, true, _) => y += 1, + (true, false, _) => { + y += 1; + x -= 1; + } + (false, false, true) => { + y += 1; + x += 1; + } + } + } + } + + unreachable!(); + } + + fn is_free(&self, x: i64, y: i64) -> bool { + if let Some(floor) = self.floor { + if y >= floor { + return false; + } + } + + self.cells.get(&(x, y)).is_none() + } +}