diff --git a/day14/input.txt b/day14/input.txt new file mode 100644 index 0000000..e46eaa6 --- /dev/null +++ b/day14/input.txt @@ -0,0 +1,183 @@ +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +525,75 -> 525,77 -> 517,77 -> 517,83 -> 532,83 -> 532,77 -> 531,77 -> 531,75 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +513,169 -> 518,169 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +510,34 -> 514,34 +530,86 -> 530,87 -> 543,87 -> 543,86 +517,150 -> 521,150 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +501,177 -> 506,177 +505,115 -> 505,119 -> 502,119 -> 502,126 -> 514,126 -> 514,119 -> 510,119 -> 510,115 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +511,52 -> 516,52 +505,115 -> 505,119 -> 502,119 -> 502,126 -> 514,126 -> 514,119 -> 510,119 -> 510,115 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +504,30 -> 508,30 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +523,150 -> 527,150 +525,175 -> 530,175 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +525,75 -> 525,77 -> 517,77 -> 517,83 -> 532,83 -> 532,77 -> 531,77 -> 531,75 +532,52 -> 537,52 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +525,75 -> 525,77 -> 517,77 -> 517,83 -> 532,83 -> 532,77 -> 531,77 -> 531,75 +505,115 -> 505,119 -> 502,119 -> 502,126 -> 514,126 -> 514,119 -> 510,119 -> 510,115 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +502,103 -> 502,105 -> 498,105 -> 498,112 -> 507,112 -> 507,105 -> 504,105 -> 504,103 +510,30 -> 514,30 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +511,150 -> 515,150 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +514,147 -> 518,147 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +511,175 -> 516,175 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +507,32 -> 511,32 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +505,115 -> 505,119 -> 502,119 -> 502,126 -> 514,126 -> 514,119 -> 510,119 -> 510,115 +508,177 -> 513,177 +502,103 -> 502,105 -> 498,105 -> 498,112 -> 507,112 -> 507,105 -> 504,105 -> 504,103 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +515,177 -> 520,177 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +521,49 -> 526,49 +520,153 -> 524,153 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +507,49 -> 512,49 +518,175 -> 523,175 +505,115 -> 505,119 -> 502,119 -> 502,126 -> 514,126 -> 514,119 -> 510,119 -> 510,115 +514,49 -> 519,49 +521,173 -> 526,173 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +495,32 -> 499,32 +504,34 -> 508,34 +510,171 -> 515,171 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +514,129 -> 514,133 -> 507,133 -> 507,141 -> 518,141 -> 518,133 -> 517,133 -> 517,129 +517,71 -> 517,72 -> 527,72 -> 527,71 +514,129 -> 514,133 -> 507,133 -> 507,141 -> 518,141 -> 518,133 -> 517,133 -> 517,129 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +526,153 -> 530,153 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +525,75 -> 525,77 -> 517,77 -> 517,83 -> 532,83 -> 532,77 -> 531,77 -> 531,75 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +507,68 -> 507,69 -> 523,69 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +513,32 -> 517,32 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +502,103 -> 502,105 -> 498,105 -> 498,112 -> 507,112 -> 507,105 -> 504,105 -> 504,103 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +516,40 -> 521,40 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +520,36 -> 520,37 -> 528,37 -> 528,36 +498,34 -> 502,34 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +514,129 -> 514,133 -> 507,133 -> 507,141 -> 518,141 -> 518,133 -> 517,133 -> 517,129 +498,30 -> 502,30 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +504,175 -> 509,175 +502,103 -> 502,105 -> 498,105 -> 498,112 -> 507,112 -> 507,105 -> 504,105 -> 504,103 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +510,46 -> 515,46 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +520,36 -> 520,37 -> 528,37 -> 528,36 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +514,129 -> 514,133 -> 507,133 -> 507,141 -> 518,141 -> 518,133 -> 517,133 -> 517,129 +516,34 -> 520,34 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +525,75 -> 525,77 -> 517,77 -> 517,83 -> 532,83 -> 532,77 -> 531,77 -> 531,75 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +514,173 -> 519,173 +492,34 -> 496,34 +525,52 -> 530,52 +502,103 -> 502,105 -> 498,105 -> 498,112 -> 507,112 -> 507,105 -> 504,105 -> 504,103 +507,68 -> 507,69 -> 523,69 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +520,36 -> 520,37 -> 528,37 -> 528,36 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +505,115 -> 505,119 -> 502,119 -> 502,126 -> 514,126 -> 514,119 -> 510,119 -> 510,115 +507,173 -> 512,173 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +504,52 -> 509,52 +502,103 -> 502,105 -> 498,105 -> 498,112 -> 507,112 -> 507,105 -> 504,105 -> 504,103 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +517,71 -> 517,72 -> 527,72 -> 527,71 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +524,46 -> 529,46 +508,153 -> 512,153 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +530,86 -> 530,87 -> 543,87 -> 543,86 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +504,26 -> 508,26 +514,129 -> 514,133 -> 507,133 -> 507,141 -> 518,141 -> 518,133 -> 517,133 -> 517,129 +522,177 -> 527,177 +525,75 -> 525,77 -> 517,77 -> 517,83 -> 532,83 -> 532,77 -> 531,77 -> 531,75 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +514,129 -> 514,133 -> 507,133 -> 507,141 -> 518,141 -> 518,133 -> 517,133 -> 517,129 +517,46 -> 522,46 +507,28 -> 511,28 +514,153 -> 518,153 +517,144 -> 521,144 +517,71 -> 517,72 -> 527,72 -> 527,71 +525,75 -> 525,77 -> 517,77 -> 517,83 -> 532,83 -> 532,77 -> 531,77 -> 531,75 +514,129 -> 514,133 -> 507,133 -> 507,141 -> 518,141 -> 518,133 -> 517,133 -> 517,129 +520,147 -> 524,147 +530,86 -> 530,87 -> 543,87 -> 543,86 +518,52 -> 523,52 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +517,171 -> 522,171 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +505,115 -> 505,119 -> 502,119 -> 502,126 -> 514,126 -> 514,119 -> 510,119 -> 510,115 +497,166 -> 497,165 -> 497,166 -> 499,166 -> 499,160 -> 499,166 -> 501,166 -> 501,157 -> 501,166 -> 503,166 -> 503,163 -> 503,166 -> 505,166 -> 505,164 -> 505,166 -> 507,166 -> 507,162 -> 507,166 -> 509,166 -> 509,157 -> 509,166 -> 511,166 -> 511,162 -> 511,166 -> 513,166 -> 513,162 -> 513,166 -> 515,166 -> 515,163 -> 515,166 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +528,49 -> 533,49 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 +529,177 -> 534,177 +501,32 -> 505,32 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +501,28 -> 505,28 +493,23 -> 493,15 -> 493,23 -> 495,23 -> 495,15 -> 495,23 -> 497,23 -> 497,19 -> 497,23 -> 499,23 -> 499,17 -> 499,23 -> 501,23 -> 501,17 -> 501,23 -> 503,23 -> 503,14 -> 503,23 -> 505,23 -> 505,16 -> 505,23 +502,103 -> 502,105 -> 498,105 -> 498,112 -> 507,112 -> 507,105 -> 504,105 -> 504,103 +535,100 -> 535,93 -> 535,100 -> 537,100 -> 537,92 -> 537,100 -> 539,100 -> 539,99 -> 539,100 -> 541,100 -> 541,96 -> 541,100 -> 543,100 -> 543,92 -> 543,100 -> 545,100 -> 545,97 -> 545,100 -> 547,100 -> 547,95 -> 547,100 -> 549,100 -> 549,93 -> 549,100 -> 551,100 -> 551,90 -> 551,100 +513,43 -> 518,43 +520,43 -> 525,43 +505,65 -> 505,58 -> 505,65 -> 507,65 -> 507,55 -> 507,65 -> 509,65 -> 509,60 -> 509,65 -> 511,65 -> 511,56 -> 511,65 -> 513,65 -> 513,62 -> 513,65 diff --git a/day14/sand b/day14/sand new file mode 100755 index 0000000..2e531fa Binary files /dev/null and b/day14/sand differ diff --git a/day14/sand.c b/day14/sand.c new file mode 100644 index 0000000..239bc85 --- /dev/null +++ b/day14/sand.c @@ -0,0 +1,149 @@ +#include +#include +#include + +#define BUFFER_SIZE 512 +#define MAX_ROCK_NUMBER 16*1024 +#define FLOOR_OFFSET 2 +#define EDGE_BUFFER 256 +#define min(a, b) (a <= b ? a : b) +#define max(a, b) (a >= b ? a : b) +// Use this setting to switch between task 1 and task 2 +#define ENABLE_FLOOR 1 + +typedef struct point { + int x; + int y; +} POINT; + +void buildPath(POINT, POINT, POINT*, int*); +POINT nextFall(int, int *[*], POINT); + +int main() { + char buf[BUFFER_SIZE], *p, c; + memset(buf, 0, BUFFER_SIZE); + p = buf; + POINT bedrock[MAX_ROCK_NUMBER], prev, curr; + int bedrock_count = 0; + int maxX = 0, maxY = 0, x, y; + + // Read input + while ((c = getchar()) != EOF) { + *p++ = c; + if (c == '\n') { + p = buf; + sscanf(p, "%i,%i", &x, &y); + prev.x = x; + prev.y = y; + while (*p++ != ' ') {} + while(*p != 0) { + sscanf(p, "-> %i,%i", &x, &y); + if (x > maxX) maxX = x; + if (y > maxY) maxY = y; + curr.x = x; + curr.y = y; + + buildPath(prev, curr, bedrock, &bedrock_count); + + prev.x = x; + prev.y = y; + while (*p++ != ' ') {} + while (*p != ' ' && *p != 0) p++; + p++; + } + + memset(buf, 0, BUFFER_SIZE); + p = buf; + } + } + + POINT source = { .x = 500, .y = 0 }, sand; + + // Allocate memory for the map + int **map = (int**)malloc((maxX + 1 + EDGE_BUFFER) * sizeof(int*)); + for (int i = 0; i < maxX + 1 + EDGE_BUFFER; i++) { + map[i] = (int*)malloc((maxY + FLOOR_OFFSET) * sizeof(int)); + memset(map[i], 0, (maxY + FLOOR_OFFSET) * sizeof(int)); + } + + // Fill in the map with bedrock + for (int i = 0; i < bedrock_count; i++) { + map[bedrock[i].x][bedrock[i].y] = 1; + } + + int fallthrough = 0, sum = 0; + POINT fallPosition; + + // Play until sand falls through + while (!fallthrough) { + // Simulate each sand + sand.x = source.x; + sand.y = source.y; + + do { + fallPosition = nextFall(maxY + FLOOR_OFFSET, map, sand); + + // We fell through the map + if (fallPosition.x == -2) { + fallthrough = 1; + break; + } + + // We hit bedrock + if (fallPosition.x == -1) { + sum += 1; + map[sand.x][sand.y] = 2; + // Source gets clogged + if (sand.x == source.x && sand.y == source.y) { + fallthrough = 1; + } + } + + sand = fallPosition; + } while(fallPosition.x != -1); + } + + printf("%i\n", sum); +} + +void buildPath(POINT prev, POINT curr, POINT* bedrock, int* bedrock_count) { + if (prev.x != curr.x) { + for (int i = min(prev.x, curr.x); i <= max(prev.x, curr.x); i++) { + bedrock[*bedrock_count].x = i; + bedrock[*bedrock_count].y = prev.y; + (*bedrock_count)++; + } + } else if (prev.y != curr.y) { + for (int i = min(prev.y, curr.y); i <= max(prev.y, curr.y); i++) { + bedrock[*bedrock_count].x = prev.x; + bedrock[*bedrock_count].y = i; + (*bedrock_count)++; + } + } +} + +POINT nextFall(int mapHeight, int *map[mapHeight], POINT point) { + POINT end = { .x = -1, .y = -1 }; + + if (point.y == mapHeight - FLOOR_OFFSET && !ENABLE_FLOOR) { + // Fall out of the map + end.x = -2; + end.y = -2; + } else if (ENABLE_FLOOR && point.y == mapHeight - 1) { + // Fall on floor + } else if (map[point.x][point.y+1] == 0) { + // Fall straight down + end.x = point.x; + end.y = point.y + 1; + } else if (map[point.x - 1][point.y + 1] == 0) { + // Fall left down + end.x = point.x - 1; + end.y = point.y + 1; + } else if (map[point.x + 1][point.y + 1] == 0) { + // Fall right down + end.x = point.x + 1; + end.y = point.y + 1; + } + + return end; +}