summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--inputs/day14158
-rw-r--r--src/bin/day14.rs132
2 files changed, 290 insertions, 0 deletions
diff --git a/inputs/day14 b/inputs/day14
new file mode 100644
index 0000000..315be5c
--- /dev/null
+++ b/inputs/day14
@@ -0,0 +1,158 @@
+498,32 -> 503,32
+538,63 -> 538,65 -> 534,65 -> 534,70 -> 551,70 -> 551,65 -> 544,65 -> 544,63
+525,56 -> 530,56
+552,86 -> 557,86
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+594,151 -> 594,154 -> 591,154 -> 591,162 -> 602,162 -> 602,154 -> 598,154 -> 598,151
+504,56 -> 509,56
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+503,52 -> 508,52
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+551,90 -> 551,91 -> 561,91 -> 561,90
+521,59 -> 521,60 -> 540,60 -> 540,59
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+563,107 -> 563,111 -> 556,111 -> 556,117 -> 574,117 -> 574,111 -> 566,111 -> 566,107
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+594,151 -> 594,154 -> 591,154 -> 591,162 -> 602,162 -> 602,154 -> 598,154 -> 598,151
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+558,80 -> 563,80
+594,151 -> 594,154 -> 591,154 -> 591,162 -> 602,162 -> 602,154 -> 598,154 -> 598,151
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+563,107 -> 563,111 -> 556,111 -> 556,117 -> 574,117 -> 574,111 -> 566,111 -> 566,107
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+511,56 -> 516,56
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+518,56 -> 523,56
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+521,59 -> 521,60 -> 540,60 -> 540,59
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+563,107 -> 563,111 -> 556,111 -> 556,117 -> 574,117 -> 574,111 -> 566,111 -> 566,107
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+538,63 -> 538,65 -> 534,65 -> 534,70 -> 551,70 -> 551,65 -> 544,65 -> 544,63
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+594,151 -> 594,154 -> 591,154 -> 591,162 -> 602,162 -> 602,154 -> 598,154 -> 598,151
+563,107 -> 563,111 -> 556,111 -> 556,117 -> 574,117 -> 574,111 -> 566,111 -> 566,107
+594,151 -> 594,154 -> 591,154 -> 591,162 -> 602,162 -> 602,154 -> 598,154 -> 598,151
+572,120 -> 572,123 -> 569,123 -> 569,129 -> 584,129 -> 584,123 -> 577,123 -> 577,120
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+563,107 -> 563,111 -> 556,111 -> 556,117 -> 574,117 -> 574,111 -> 566,111 -> 566,107
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+553,75 -> 557,75
+559,86 -> 564,86
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+581,167 -> 581,168 -> 600,168 -> 600,167
+572,120 -> 572,123 -> 569,123 -> 569,129 -> 584,129 -> 584,123 -> 577,123 -> 577,120
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+584,135 -> 594,135 -> 594,134
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+501,29 -> 506,29
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+514,54 -> 519,54
+562,83 -> 567,83
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+500,54 -> 505,54
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+551,90 -> 551,91 -> 561,91 -> 561,90
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+538,63 -> 538,65 -> 534,65 -> 534,70 -> 551,70 -> 551,65 -> 544,65 -> 544,63
+544,77 -> 548,77
+506,50 -> 511,50
+505,32 -> 510,32
+594,151 -> 594,154 -> 591,154 -> 591,162 -> 602,162 -> 602,154 -> 598,154 -> 598,151
+538,63 -> 538,65 -> 534,65 -> 534,70 -> 551,70 -> 551,65 -> 544,65 -> 544,63
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+497,56 -> 502,56
+566,86 -> 571,86
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+581,167 -> 581,168 -> 600,168 -> 600,167
+572,120 -> 572,123 -> 569,123 -> 569,129 -> 584,129 -> 584,123 -> 577,123 -> 577,120
+563,107 -> 563,111 -> 556,111 -> 556,117 -> 574,117 -> 574,111 -> 566,111 -> 566,107
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+572,120 -> 572,123 -> 569,123 -> 569,129 -> 584,129 -> 584,123 -> 577,123 -> 577,120
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+572,120 -> 572,123 -> 569,123 -> 569,129 -> 584,129 -> 584,123 -> 577,123 -> 577,120
+584,135 -> 594,135 -> 594,134
+572,120 -> 572,123 -> 569,123 -> 569,129 -> 584,129 -> 584,123 -> 577,123 -> 577,120
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+538,63 -> 538,65 -> 534,65 -> 534,70 -> 551,70 -> 551,65 -> 544,65 -> 544,63
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+513,50 -> 518,50
+563,107 -> 563,111 -> 556,111 -> 556,117 -> 574,117 -> 574,111 -> 566,111 -> 566,107
+508,29 -> 513,29
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+521,59 -> 521,60 -> 540,60 -> 540,59
+547,75 -> 551,75
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+538,63 -> 538,65 -> 534,65 -> 534,70 -> 551,70 -> 551,65 -> 544,65 -> 544,63
+594,151 -> 594,154 -> 591,154 -> 591,162 -> 602,162 -> 602,154 -> 598,154 -> 598,151
+504,26 -> 509,26
+521,54 -> 526,54
+550,73 -> 554,73
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+550,77 -> 554,77
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+558,104 -> 558,94 -> 558,104 -> 560,104 -> 560,99 -> 560,104 -> 562,104 -> 562,101 -> 562,104 -> 564,104 -> 564,99 -> 564,104
+510,52 -> 515,52
+492,23 -> 492,15 -> 492,23 -> 494,23 -> 494,22 -> 494,23 -> 496,23 -> 496,14 -> 496,23 -> 498,23 -> 498,21 -> 498,23 -> 500,23 -> 500,18 -> 500,23 -> 502,23 -> 502,22 -> 502,23 -> 504,23 -> 504,18 -> 504,23 -> 506,23 -> 506,21 -> 506,23
+509,48 -> 514,48
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+495,45 -> 495,37 -> 495,45 -> 497,45 -> 497,44 -> 497,45 -> 499,45 -> 499,38 -> 499,45 -> 501,45 -> 501,39 -> 501,45 -> 503,45 -> 503,36 -> 503,45 -> 505,45 -> 505,44 -> 505,45 -> 507,45 -> 507,42 -> 507,45 -> 509,45 -> 509,44 -> 509,45 -> 511,45 -> 511,35 -> 511,45
+556,77 -> 560,77
+572,120 -> 572,123 -> 569,123 -> 569,129 -> 584,129 -> 584,123 -> 577,123 -> 577,120
+574,148 -> 574,140 -> 574,148 -> 576,148 -> 576,138 -> 576,148 -> 578,148 -> 578,139 -> 578,148 -> 580,148 -> 580,146 -> 580,148 -> 582,148 -> 582,145 -> 582,148 -> 584,148 -> 584,139 -> 584,148 -> 586,148 -> 586,138 -> 586,148 -> 588,148 -> 588,141 -> 588,148 -> 590,148 -> 590,138 -> 590,148
+517,52 -> 522,52
+551,90 -> 551,91 -> 561,91 -> 561,90
+507,54 -> 512,54
+581,167 -> 581,168 -> 600,168 -> 600,167
+512,32 -> 517,32
+538,63 -> 538,65 -> 534,65 -> 534,70 -> 551,70 -> 551,65 -> 544,65 -> 544,63
+555,83 -> 560,83
diff --git a/src/bin/day14.rs b/src/bin/day14.rs
new file mode 100644
index 0000000..c6323a3
--- /dev/null
+++ b/src/bin/day14.rs
@@ -0,0 +1,132 @@
+use std::collections::HashMap;
+
+static DAY: u8 = 14;
+
+fn main() {
+ let input = advent::read_lines(DAY);
+ println!("{DAY}a: {}", sand_before_abyss(&input));
+ println!("{DAY}b: {}", sand_to_rest(&input));
+}
+
+#[derive(Debug)]
+enum Material {
+ Rock,
+ Sand,
+}
+
+fn parse_map(input: &[String]) -> HashMap<(isize,isize),Material> {
+ let mut map = HashMap::new();
+
+ for line in input {
+ let mut path = Vec::new();
+ for coord in line.split(" -> ") {
+ let (x,y) = coord.split_once(',').expect("coordinate needs to contain ,");
+ let x = x.parse::<isize>().expect("x coord should be number");
+ let y = y.parse::<isize>().expect("y coord should be number");
+ path.push((x,y));
+ }
+ for pos in path.windows(2) {
+ let (x1, x2) = if pos[0].0 < pos[1].0 {
+ (pos[0].0, pos[1].0)
+ } else {
+ (pos[1].0, pos[0].0)
+ };
+
+ let (y1, y2) = if pos[0].1 < pos[1].1 {
+ (pos[0].1, pos[1].1)
+ } else {
+ (pos[1].1, pos[0].1)
+ };
+
+ for x in x1 ..= x2 {
+ for y in y1 ..= y2 {
+ map.insert((x,y), Material::Rock);
+ }
+ }
+ }
+ }
+ map
+}
+
+fn next_sand_pos(map: &mut HashMap<(isize,isize),Material>, pos: (isize,isize)) -> Option<(isize,isize)> {
+ let next_positions = [
+ (pos.0, pos.1 + 1),
+ (pos.0 - 1, pos.1 + 1),
+ (pos.0 + 1, pos.1 + 1),
+ ];
+ next_positions.iter().find(|next_pos| !map.contains_key(next_pos)).copied()
+}
+
+fn sand_above_abyss(map: &mut HashMap<(isize,isize),Material>, above: isize) -> bool {
+ let mut pos = (500,0);
+
+ while pos.1 <= above {
+ match next_sand_pos(map, pos) {
+ Some(next_pos) => pos = next_pos,
+ None => {
+ map.insert(pos, Material::Sand);
+ break;
+ }
+ }
+ }
+
+ pos.1 <= above
+}
+
+fn sand_at_source(map: &mut HashMap<(isize,isize),Material>, floor: isize) -> bool {
+ let mut pos = (500,0);
+
+ loop {
+ match next_sand_pos(map, pos) {
+ Some(next_pos) => {
+ if next_pos.1 == floor {
+ map.insert(pos, Material::Sand);
+ break;
+ }
+ pos = next_pos;
+ },
+ None => {
+ map.insert(pos, Material::Sand);
+ break;
+ }
+ }
+ }
+
+ pos == (500,0)
+}
+
+fn sand_before_abyss(input: &[String]) -> usize {
+ let mut map = parse_map(input);
+ let lowest_rock = *map.keys().max_by_key(|(_,y)| y).expect("map should have a rock");
+ let mut sand = 0;
+ while sand_above_abyss(&mut map, lowest_rock.1) {
+ sand += 1;
+ }
+ sand
+}
+
+fn sand_to_rest(input: &[String]) -> usize {
+ let mut map = parse_map(input);
+ let floor = map.keys().max_by_key(|(_,y)| y).expect("map should have a rock").1 + 2;
+ let mut sand = 0;
+ while !sand_at_source(&mut map, floor) {
+ sand += 1;
+ }
+ sand + 1
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test() {
+ let input = [
+ "498,4 -> 498,6 -> 496,6",
+ "503,4 -> 502,4 -> 502,9 -> 494,9",
+ ].iter().map(|&x| String::from(x)).collect::<Vec<_>>();
+
+ assert_eq!(sand_before_abyss(&input), 24);
+ assert_eq!(sand_to_rest(&input), 93);
+ }
+}