From 826bdd6db330db83353d3317af418afd4e8aa29c Mon Sep 17 00:00:00 2001 From: Philippe Zwietering Date: Tue, 10 Jan 2023 16:38:39 +0100 Subject: [PATCH] Finished day 14 advent of code --- advent_of_code/2022/14/Cargo.lock | 32 ++++++ advent_of_code/2022/14/Cargo.toml | 9 ++ advent_of_code/2022/14/input.txt | 173 +++++++++++++++++++++++++++++ advent_of_code/2022/14/src/main.rs | 150 +++++++++++++++++++++++++ advent_of_code/2022/14/test.txt | 2 + 5 files changed, 366 insertions(+) create mode 100644 advent_of_code/2022/14/Cargo.lock create mode 100644 advent_of_code/2022/14/Cargo.toml create mode 100644 advent_of_code/2022/14/input.txt create mode 100644 advent_of_code/2022/14/src/main.rs create mode 100644 advent_of_code/2022/14/test.txt diff --git a/advent_of_code/2022/14/Cargo.lock b/advent_of_code/2022/14/Cargo.lock new file mode 100644 index 0000000..b8ae363 --- /dev/null +++ b/advent_of_code/2022/14/Cargo.lock @@ -0,0 +1,32 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "main" +version = "0.1.0" +dependencies = [ + "nom", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "nom" +version = "7.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5507769c4919c998e69e49c839d9dc6e693ede4cc4290d6ad8b41d4f09c548c" +dependencies = [ + "memchr", + "minimal-lexical", +] diff --git a/advent_of_code/2022/14/Cargo.toml b/advent_of_code/2022/14/Cargo.toml new file mode 100644 index 0000000..200567e --- /dev/null +++ b/advent_of_code/2022/14/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "main" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +nom = "7.1.2" diff --git a/advent_of_code/2022/14/input.txt b/advent_of_code/2022/14/input.txt new file mode 100644 index 0000000..5a0adf8 --- /dev/null +++ b/advent_of_code/2022/14/input.txt @@ -0,0 +1,173 @@ +504,28 -> 509,28 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +500,26 -> 505,26 +494,30 -> 499,30 +525,159 -> 529,159 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +484,40 -> 484,42 -> 479,42 -> 479,49 -> 496,49 -> 496,42 -> 489,42 -> 489,40 +484,40 -> 484,42 -> 479,42 -> 479,49 -> 496,49 -> 496,42 -> 489,42 -> 489,40 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +484,40 -> 484,42 -> 479,42 -> 479,49 -> 496,49 -> 496,42 -> 489,42 -> 489,40 +513,36 -> 513,37 -> 525,37 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +489,86 -> 493,86 +516,162 -> 520,162 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +479,89 -> 479,91 -> 478,91 -> 478,95 -> 486,95 -> 486,91 -> 483,91 -> 483,89 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +522,156 -> 526,156 +482,65 -> 482,67 -> 475,67 -> 475,70 -> 495,70 -> 495,67 -> 488,67 -> 488,65 +485,98 -> 485,101 -> 478,101 -> 478,108 -> 493,108 -> 493,101 -> 489,101 -> 489,98 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +484,40 -> 484,42 -> 479,42 -> 479,49 -> 496,49 -> 496,42 -> 489,42 -> 489,40 +482,65 -> 482,67 -> 475,67 -> 475,70 -> 495,70 -> 495,67 -> 488,67 -> 488,65 +502,132 -> 506,132 +516,34 -> 521,34 +482,65 -> 482,67 -> 475,67 -> 475,70 -> 495,70 -> 495,67 -> 488,67 -> 488,65 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +508,128 -> 512,128 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +495,80 -> 499,80 +484,40 -> 484,42 -> 479,42 -> 479,49 -> 496,49 -> 496,42 -> 489,42 -> 489,40 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +497,28 -> 502,28 +534,156 -> 538,156 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +528,156 -> 532,156 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +498,83 -> 502,83 +537,159 -> 541,159 +485,98 -> 485,101 -> 478,101 -> 478,108 -> 493,108 -> 493,101 -> 489,101 -> 489,98 +482,65 -> 482,67 -> 475,67 -> 475,70 -> 495,70 -> 495,67 -> 488,67 -> 488,65 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +485,98 -> 485,101 -> 478,101 -> 478,108 -> 493,108 -> 493,101 -> 489,101 -> 489,98 +528,150 -> 532,150 +522,162 -> 526,162 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +505,32 -> 510,32 +498,32 -> 503,32 +495,34 -> 500,34 +484,40 -> 484,42 -> 479,42 -> 479,49 -> 496,49 -> 496,42 -> 489,42 -> 489,40 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +495,73 -> 495,74 -> 497,74 -> 497,73 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +479,89 -> 479,91 -> 478,91 -> 478,95 -> 486,95 -> 486,91 -> 483,91 -> 483,89 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +479,89 -> 479,91 -> 478,91 -> 478,95 -> 486,95 -> 486,91 -> 483,91 -> 483,89 +479,89 -> 479,91 -> 478,91 -> 478,95 -> 486,95 -> 486,91 -> 483,91 -> 483,89 +514,132 -> 518,132 +479,89 -> 479,91 -> 478,91 -> 478,95 -> 486,95 -> 486,91 -> 483,91 -> 483,89 +479,89 -> 479,91 -> 478,91 -> 478,95 -> 486,95 -> 486,91 -> 483,91 -> 483,89 +513,36 -> 513,37 -> 525,37 +505,134 -> 509,134 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +489,80 -> 493,80 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +501,30 -> 506,30 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +509,34 -> 514,34 +511,134 -> 515,134 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +501,86 -> 505,86 +488,34 -> 493,34 +491,32 -> 496,32 +510,166 -> 510,167 -> 516,167 -> 516,166 +479,89 -> 479,91 -> 478,91 -> 478,95 -> 486,95 -> 486,91 -> 483,91 -> 483,89 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +488,112 -> 501,112 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +502,34 -> 507,34 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +485,98 -> 485,101 -> 478,101 -> 478,108 -> 493,108 -> 493,101 -> 489,101 -> 489,98 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +499,134 -> 503,134 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +531,159 -> 535,159 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +534,162 -> 538,162 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +485,98 -> 485,101 -> 478,101 -> 478,108 -> 493,108 -> 493,101 -> 489,101 -> 489,98 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +525,153 -> 529,153 +531,153 -> 535,153 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +492,77 -> 496,77 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +486,83 -> 490,83 +492,83 -> 496,83 +495,73 -> 495,74 -> 497,74 -> 497,73 +528,162 -> 532,162 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +510,166 -> 510,167 -> 516,167 -> 516,166 +511,130 -> 515,130 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +512,32 -> 517,32 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +519,159 -> 523,159 +485,98 -> 485,101 -> 478,101 -> 478,108 -> 493,108 -> 493,101 -> 489,101 -> 489,98 +540,162 -> 544,162 +482,65 -> 482,67 -> 475,67 -> 475,70 -> 495,70 -> 495,67 -> 488,67 -> 488,65 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +508,132 -> 512,132 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +495,86 -> 499,86 +495,73 -> 495,74 -> 497,74 -> 497,73 +485,98 -> 485,101 -> 478,101 -> 478,108 -> 493,108 -> 493,101 -> 489,101 -> 489,98 +484,40 -> 484,42 -> 479,42 -> 479,49 -> 496,49 -> 496,42 -> 489,42 -> 489,40 +510,166 -> 510,167 -> 516,167 -> 516,166 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +483,86 -> 487,86 +482,65 -> 482,67 -> 475,67 -> 475,70 -> 495,70 -> 495,67 -> 488,67 -> 488,65 +482,65 -> 482,67 -> 475,67 -> 475,70 -> 495,70 -> 495,67 -> 488,67 -> 488,65 +496,23 -> 496,18 -> 496,23 -> 498,23 -> 498,14 -> 498,23 -> 500,23 -> 500,22 -> 500,23 -> 502,23 -> 502,15 -> 502,23 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 +513,147 -> 513,137 -> 513,147 -> 515,147 -> 515,140 -> 515,147 -> 517,147 -> 517,140 -> 517,147 -> 519,147 -> 519,140 -> 519,147 -> 521,147 -> 521,140 -> 521,147 -> 523,147 -> 523,141 -> 523,147 -> 525,147 -> 525,143 -> 525,147 -> 527,147 -> 527,146 -> 527,147 -> 529,147 -> 529,142 -> 529,147 +517,134 -> 521,134 +508,30 -> 513,30 +505,130 -> 509,130 +493,125 -> 493,119 -> 493,125 -> 495,125 -> 495,123 -> 495,125 -> 497,125 -> 497,124 -> 497,125 -> 499,125 -> 499,120 -> 499,125 -> 501,125 -> 501,122 -> 501,125 -> 503,125 -> 503,118 -> 503,125 -> 505,125 -> 505,121 -> 505,125 -> 507,125 -> 507,116 -> 507,125 -> 509,125 -> 509,119 -> 509,125 +470,62 -> 470,60 -> 470,62 -> 472,62 -> 472,54 -> 472,62 -> 474,62 -> 474,54 -> 474,62 -> 476,62 -> 476,56 -> 476,62 -> 478,62 -> 478,60 -> 478,62 -> 480,62 -> 480,61 -> 480,62 -> 482,62 -> 482,60 -> 482,62 -> 484,62 -> 484,60 -> 484,62 diff --git a/advent_of_code/2022/14/src/main.rs b/advent_of_code/2022/14/src/main.rs new file mode 100644 index 0000000..5406060 --- /dev/null +++ b/advent_of_code/2022/14/src/main.rs @@ -0,0 +1,150 @@ +use std::{cmp::min, cmp::max, collections::{HashSet, HashMap}}; +use nom::{ + IResult, + multi::separated_list1, + character::complete::{self, multispace1}, + sequence::separated_pair, + bytes::complete::tag, +}; + +fn parse_input(input: &str) -> IResult<&str, Vec>> { + let (input, result) = separated_list1( + multispace1, + separated_list1( + tag(" -> "), + separated_pair(complete::u32, tag(","), complete::u32) + ) + )(input)?; + + Ok((input, result)) +} + +fn print_coords(coords: &Vec>) { + for line in coords { + for (c1, c2) in line { + print!("{c1},{c2} -> "); + } + println!(); + } +} + +fn coords_to_map(coords: &Vec>) -> (HashSet<(u32, u32)>, u32) { + let mut result = HashSet::new(); + let mut lowest_tile = 0; + + for rock in coords { + for i in 0..rock.len() - 1 { + let start = rock[i]; + let end = rock[i+1]; + + lowest_tile = max(max(lowest_tile, start.1), end.1); + + if start.0 == end.0 { + let x = start.0; + + let y_start = min(start.1, end.1); + let y_end = max(start.1, end.1); + + for y in y_start..=y_end { + result.insert((x, y)); + } + } else { + let y = start.1; + + let x_start = min(start.0, end.0); + let x_end = max(start.0, end.0); + + for x in x_start..=x_end { + result.insert((x,y)); + } + } + } + } + + (result, lowest_tile) +} + +fn fill_cave(cave_map: &mut HashSet<(u32, u32)>, lowest_tile: u32) -> bool { + let mut cur = (500, 0); + + loop { + if cur.1 > lowest_tile { + return false; + } + + if !cave_map.contains(&(cur.0, cur.1 + 1)) { + cur = (cur.0, cur.1 + 1); + continue; + } + else if !cave_map.contains(&(cur.0 - 1, cur.1 + 1)) { + cur = (cur.0 - 1, cur.1 + 1); + continue; + } + else if !cave_map.contains(&(cur.0 + 1, cur.1 + 1)) { + cur = (cur.0 + 1, cur.1 + 1); + continue; + } + else { + cave_map.insert(cur); + return true; + } + } +} + +fn fill_cave_with_floor(cave_map: &mut HashSet<(u32, u32)>, lowest_tile: u32) -> (u32, u32) { + let mut cur = (500, 0); + + loop { + if cur.1 == lowest_tile + 1 { + cave_map.insert(cur); + return cur; + } + else if !cave_map.contains(&(cur.0, cur.1 + 1)) { + cur = (cur.0, cur.1 + 1); + continue; + } + else if !cave_map.contains(&(cur.0 - 1, cur.1 + 1)) { + cur = (cur.0 - 1, cur.1 + 1); + continue; + } + else if !cave_map.contains(&(cur.0 + 1, cur.1 + 1)) { + cur = (cur.0 + 1, cur.1 + 1); + continue; + } + else { + cave_map.insert(cur); + return cur; + } + } +} + +fn main() { + let input_text = include_str!("../input.txt"); + let (_rest, coord_lines) = parse_input(input_text).unwrap(); + + // Test parsing + // print_coords(&coord_lines); + + let (mut cave_map, lowest_tile) = coords_to_map(&coord_lines); + + let mut units_of_sand = 0; + loop { + if !fill_cave(&mut cave_map, lowest_tile) { + break; + } + units_of_sand += 1; + } + + println!("Units of sand needed: {units_of_sand}"); + + units_of_sand = 1; + let (mut cave_map, _) = coords_to_map(&coord_lines); + loop { + if fill_cave_with_floor(&mut cave_map, lowest_tile) == (500, 0) { + break; + } + units_of_sand += 1; + } + + println!("Units of sand needed with infinite length floor: {units_of_sand}"); +} diff --git a/advent_of_code/2022/14/test.txt b/advent_of_code/2022/14/test.txt new file mode 100644 index 0000000..1926028 --- /dev/null +++ b/advent_of_code/2022/14/test.txt @@ -0,0 +1,2 @@ +498,4 -> 498,6 -> 496,6 +503,4 -> 502,4 -> 502,9 -> 494,9 \ No newline at end of file