diff --git a/2023/Cargo.lock b/2023/Cargo.lock index 5f19374..76ce13a 100644 --- a/2023/Cargo.lock +++ b/2023/Cargo.lock @@ -7,9 +7,7 @@ name = "addr2line" version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" -dependencies = [ - "gimli", -] +dependencies = ["gimli"] [[package]] name = "adler" @@ -35,13 +33,13 @@ version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ - "addr2line", - "cc", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", ] [[package]] @@ -49,18 +47,14 @@ name = "brownstone" version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c5839ee4f953e811bfdcf223f509cb2c6a3e1447959b0bff459405575bc17f22" -dependencies = [ - "arrayvec", -] +dependencies = ["arrayvec"] [[package]] name = "cc" version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" -dependencies = [ - "libc", -] +dependencies = ["libc"] [[package]] name = "cfg-if" @@ -74,13 +68,13 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a667583cca8c4f8436db8de46ea8233c42a7d9ae424a82d338f2e4675229204" dependencies = [ - "backtrace", - "color-spantrace", - "eyre", - "indenter", - "once_cell", - "owo-colors", - "tracing-error", + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", ] [[package]] @@ -88,137 +82,93 @@ name = "color-spantrace" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2" -dependencies = [ - "once_cell", - "owo-colors", - "tracing-core", - "tracing-error", -] +dependencies = ["once_cell", "owo-colors", "tracing-core", "tracing-error"] [[package]] name = "crossbeam-deque" version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] +dependencies = ["cfg-if", "crossbeam-epoch", "crossbeam-utils"] [[package]] name = "crossbeam-epoch" version = "0.9.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", -] +dependencies = ["autocfg", "cfg-if", "crossbeam-utils", "memoffset"] [[package]] name = "crossbeam-utils" version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" -dependencies = [ - "cfg-if", -] +dependencies = ["cfg-if"] [[package]] name = "day-01" version = "0.1.0" -dependencies = [ - "color-eyre", -] +dependencies = ["color-eyre"] [[package]] name = "day-02" version = "0.1.0" -dependencies = [ - "color-eyre", -] +dependencies = ["color-eyre"] [[package]] name = "day-03" version = "0.1.0" -dependencies = [ - "color-eyre", - "itertools", -] +dependencies = ["color-eyre", "itertools"] [[package]] name = "day-04" version = "0.1.0" -dependencies = [ - "color-eyre", -] +dependencies = ["color-eyre"] [[package]] name = "day-05" version = "0.1.0" -dependencies = [ - "color-eyre", - "itertools", - "nom", - "nom-supreme", - "rayon", -] +dependencies = ["color-eyre", "itertools", "nom", "nom-supreme", "rayon"] [[package]] name = "day-06" version = "0.1.0" -dependencies = [ - "color-eyre", -] +dependencies = ["color-eyre"] [[package]] name = "day-07" version = "0.1.0" -dependencies = [ - "color-eyre", - "thiserror", -] +dependencies = ["color-eyre", "thiserror"] [[package]] name = "day-08" version = "0.1.0" -dependencies = [ - "color-eyre", -] +dependencies = ["color-eyre"] [[package]] name = "day-09" version = "0.1.0" -dependencies = [ - "color-eyre", - "itertools", -] +dependencies = ["color-eyre", "itertools"] [[package]] name = "day-11" version = "0.1.0" -dependencies = [ - "color-eyre", -] - -[[package]] -name = "day-13" -version = "0.1.0" -dependencies = [ - "color-eyre", - "itertools", +dependencies = ["color-eyre"] [[package]] name = "day-12" version = "0.1.0" -dependencies = [ - "color-eyre", - "itertools", - "nom", -] +dependencies = ["color-eyre"] + +[[package]] +name = "day-13" +version = "0.1.0" +dependencies = ["color-eyre", "itertools"] + +[[package]] +name = "day-14" +version = "0.1.0" +dependencies = ["color-eyre", "itertools", "nom", "glam"] [[package]] name = "either" @@ -231,10 +181,7 @@ name = "eyre" version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" -dependencies = [ - "indenter", - "once_cell", -] +dependencies = ["indenter", "once_cell"] [[package]] name = "gimli" @@ -242,6 +189,12 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +[[package]] +name = "glam" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" + [[package]] name = "indent_write" version = "2.2.0" @@ -259,9 +212,7 @@ name = "itertools" version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" -dependencies = [ - "either", -] +dependencies = ["either"] [[package]] name = "joinery" @@ -292,9 +243,7 @@ name = "memoffset" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] +dependencies = ["autocfg"] [[package]] name = "minimal-lexical" @@ -307,41 +256,28 @@ name = "miniz_oxide" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" -dependencies = [ - "adler", -] +dependencies = ["adler"] [[package]] name = "nom" version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] +dependencies = ["memchr", "minimal-lexical"] [[package]] name = "nom-supreme" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bd3ae6c901f1959588759ff51c95d24b491ecb9ff91aa9c2ef4acc5b1dcab27" -dependencies = [ - "brownstone", - "indent_write", - "joinery", - "memchr", - "nom", -] +dependencies = ["brownstone", "indent_write", "joinery", "memchr", "nom"] [[package]] name = "object" version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" -dependencies = [ - "memchr", -] +dependencies = ["memchr"] [[package]] name = "once_cell" @@ -366,38 +302,28 @@ name = "proc-macro2" version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" -dependencies = [ - "unicode-ident", -] +dependencies = ["unicode-ident"] [[package]] name = "quote" version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" -dependencies = [ - "proc-macro2", -] +dependencies = ["proc-macro2"] [[package]] name = "rayon" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" -dependencies = [ - "either", - "rayon-core", -] +dependencies = ["either", "rayon-core"] [[package]] name = "rayon-core" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] +dependencies = ["crossbeam-deque", "crossbeam-utils"] [[package]] name = "rustc-demangle" @@ -410,91 +336,63 @@ name = "sharded-slab" version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] +dependencies = ["lazy_static"] [[package]] name = "syn" version = "2.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] +dependencies = ["proc-macro2", "quote", "unicode-ident"] [[package]] name = "thiserror" version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" -dependencies = [ - "thiserror-impl", -] +dependencies = ["thiserror-impl"] [[package]] name = "thiserror-impl" version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +dependencies = ["proc-macro2", "quote", "syn"] [[package]] name = "thread_local" version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] +dependencies = ["cfg-if", "once_cell"] [[package]] name = "tracing" version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" -dependencies = [ - "pin-project-lite", - "tracing-core", -] +dependencies = ["pin-project-lite", "tracing-core"] [[package]] name = "tracing-core" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" -dependencies = [ - "once_cell", - "valuable", -] +dependencies = ["once_cell", "valuable"] [[package]] name = "tracing-error" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" -dependencies = [ - "tracing", - "tracing-subscriber", -] +dependencies = ["tracing", "tracing-subscriber"] [[package]] name = "tracing-subscriber" version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" -dependencies = [ - "sharded-slab", - "thread_local", - "tracing-core", -] +dependencies = ["sharded-slab", "thread_local", "tracing-core"] [[package]] name = "unicode-ident" diff --git a/2023/Cargo.toml b/2023/Cargo.toml index ec1c879..aa8068e 100644 --- a/2023/Cargo.toml +++ b/2023/Cargo.toml @@ -10,3 +10,4 @@ nom = "7.1.3" nom-supreme = "0.8.0" rayon = "1.8.0" thiserror = "1.0.50" +glam = "0.24.2" diff --git a/2023/day-14/Cargo.toml b/2023/day-14/Cargo.toml new file mode 100644 index 0000000..ceaa48f --- /dev/null +++ b/2023/day-14/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "day-14" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +color-eyre.workspace = true +itertools.workspace = true +glam.workspace = true diff --git a/2023/day-14/input.txt b/2023/day-14/input.txt new file mode 100644 index 0000000..8ef0b86 --- /dev/null +++ b/2023/day-14/input.txt @@ -0,0 +1,100 @@ +O..#OO..#...O..O#O.O...O##.O#..#O#...O.O.....O..........O..#...#.....O.O.O.O#..O........O........... +.....O#.#O..OO.#......O.O..#...#..OO..O..###..#...O.#...#..O..O.#..#O...#O...............##O..O....# +..#...O...OO.#........O......O#O#......O.#OO....OOO..#...O....O.O.O#..#OO.##...OOO#.#.OO.#O.#....O.. +..#...#..#....O...#.#O......O.....#O##.#..#.O..#.....#O.O#...#.......O.....O.##.O.O..#.....O.#.O.OOO +O....#..#.O.O..O.#.#....#.#..##O...O#..O.#.O.OOO.O.O..O..............O.#O.O....#..O.O..O..O.O.O.O.O. +.O.#.#..#.OO.#O....O.O.O#O..O.O.O..O.##..O...OO#.#...O.OO.O..#..#..#.O#..#.....#OO....O.###....#O... +.......#.O.......O.O####OOO..#.O#..#.O.......OOO..O....#........O##....O#O....O...#.O.##OO.O..OO...# +..O.....O.#O#O....O......O..##.#...O.#.O##.....O.#..O.........#...#.#.O#OO.....#O.....O#..##.....O.. +.#..O...##....O##O...#O....O..#...O...OOO..OO...OO...#..O.OO#..#.O...##.#..O..O..........O#..#O.O#.. +#..#OO#.O#.#........#.........O......##....#...O....#O.....O..##..#O.OO#......O..O.O.OO...O#O....... +#........#.....O.#....O...OO..OO......###..........##O##O.#.....#....###...#.#...O...#.O#.........O. +...O.OO.....O..#...O.#.O#.OO#OO..#.#OO#......#.O.O#..#..OO..#O.O.....O.#..........##..O#.OO.....#... +.O#..#.....O.#..O.....#O...#....#.O.OO....O...#.#..O......#.O...OO..#.O...O#......##O.OO...#....O.## +O#O......O.O....O.O#OO.......OOO..#..#..OO.#.##O#.....#.#O.O.........##........#O....##..#O.O#.#.O.. +.....O.OO.O...O..O...OO.#.......##....O..#....#.......O.O#.#.O...O.#O....##...#.O..#.#....O#........ +O..#.#O...O.O..OO.....#........OO.#......O.O....O..#.O#.#.O.#....OO.O#..OO.....#.##.####.O##...O.O.# +...O..##O....#....O.O.....#......OO..#OO...#O#..O.......O.#.O.O...O.#.O......#...O...#O...#..##.O... +OOO..#.#....#..#.O.#O#......O......OO.......O..#..#.O#.....O.......#.OO.O.O.......#.O#.O............ +.O##O.....OO..O..O....#.O...#.#.#O.#.O#.O.#...##O..OO.O#......O.OO..#O.OO..O.O...O.O#......#...OO#.. +..#.OO#..#O....O...O...#........#.O.......O#..O..#.#O.O#...O.............OO...#...O...#....O..#.O... +O..#..##O..O...O.O#.O.#..O.O.....#..O.##.##.O..#..OO...#...#.OOO......#.#.....O##.....#.OOO...O.#... +#.O#..O..#..O..#.#..#..#O#......O#.##O.........#..O.....#..O..#....##......OO#..O....##.O.....O#O.#. +.O.......O.......O..O.#.#O....O.O..#.....O.#O#O.#.......##...O.#O..........O.###...#.##...O........O +.......O.....O..#...##.O.#.#O...O##..O....O..O.##....#.O..#.##O.....O.#...#..OO.......#.....#O.##O.. +......#O.........#..O#..#O....O.#..#.O...OO...O....###....O##O..O.O...O..#O.....O.#.......#...#..#.. +#..#..#.OO##....O.###.#.....#O#.O....O.#.O......O....#.O..OO....#...O#.O#.....O#O..#.O..OO...OOO.O.# +.#....O.......#O..##.#OO#....OO#....#..OO..#.....O.O.OO.O#OO##...O#..#..#..OO..OO.#..O..........O..# +.O...O#..OO.O..O.#.O..##.O...O.O.....#O.....O.O#..OO...#.O....#O..#...##..#.#...O.O..OO#O...O..#...O +#O.##...O...OO.##.O.....O.......##..#.###...#.O..#.....#O.#....O......#.O#.#.O...O.....OOO.O.....O#O +...O.#....#....#..OO...#...##..O.O.O......O.#..O..OO....O...#..OO......O.#.O.OOOO...O.#OOOOO.OO#.#.. +.......O#.O#.O..O.#.O..#.OO.O..#.#.##.....O.#.O##...##..O...O...O.O.......#O.#......#......O.......# +...#..#O.......#O...O..OO....OOOO......OO...#....O............#.........#O...#.#.......OO.....O..#O. +O...OO###.....O.OO......#O.O...O..#..##..O..O...O#.#......O#O.O.OO.#O..#O.O.#.O##O.O.O..#..O........ +.O.O.O..#.O...#.##O..#OO###.O..O..#...O..#O........O#O.#.##..O.O....O...#...O.O#...OO.....OO.......# +O.O..O...#O#...#.#....#......OO..O#...O..OOO..O..O.....#...#...O.......#.....#O..O.....O#..O.O...O.# +...##..OOO..OO#.O#OOO.#......O...O.......##........OO..O.#....O....##..##O#...#.#..O.#O........#.O.. +.......##O#........O......O......#.............O..O..#.O....#.#OO##...#O...O.O.O#.#......##..O.##O#. +OO.OO##.O...O#..O..O#...#.###....##.O...O.OO.#..#.O.#...#...##...#.....O..O..O.O.#..#..O....#....##. +O.#...##...#.#OO..##...#......O.OO.#O#O......OO...O#OOO...#...O.............OO.O.O.#..#O......#.O.#. +.O.O.....O....#.......O......#O.O..##.O#...O....#O....O..#.OO..O#.O.#.....O.O##...........O#..#O...# +....#OO....#..###..O.O#O......##.#.#.O#O.#.##........##.O...#.OO.......O......O.....#.#O.#.O..#...O# +.....O..#..#...#.###.##....#O.O.O..O....OOO.##...O##..O.#...##..#..O......##....#.O....#O........#.# +...#OO#......O...O#.#..........OOO...#.##O.O..##..#.#.O......O#.....OO......O.#O..###..O...OOO..O..O +.#.O.#.O.O.O.O.#..OO.O...OO...O..O........OO.........#.....##.....O#..#...#.#.#.O...O.......O#...OO. +.....OO.O....O....O.#..##OO...#O#.......O....#....O.O..........O##.#...O..O.#..#..O....OO...#....... +....##...O.#.....##O...##.....O..O...#.##.O##...O....O..O...##.....O....#.OO...O..OO#.O....OO......O +.O....#.....O.#O.#OO.O.##..O.....O..O...#.##.O##...O...O#OO#.O.OO...O.O.#O#....#.O#.O...O....O...... +..O#O#.#.#.#....##.#O.O.O....#.##O..#O..O..O....O.....O.O..#...OO#O...#OO...#O..O...OO#O#...#..#.... +.#O......O.O.O#..OO.OOO.#......O...#.O......OOO#....O.#..O.......O.......#.....#....#O.....O#O....O. +.....O..O..O#........#............O....O#OO.O..O.#O..O.OO...OO....O.#.O..#.OO.......O.O.OO..OO.##O.. +..O#O......#.............#..#.O.O.........O.#OO.OO..##.O#O........#.....O..OO...O.##.##.O.O#....OO.O +O..#..#....#.....#O.O..O.O..O.#.O.O.#OO..O##O..#.#.O...O....OOO.O.#...........#...#...#O...#O.#.O... +OO.....O#..#.#...#...#...##..O...O.....#O..O#O..OO.....##.#.#.OO.....O##O.....#O.O.#.#...OO...O#.#.. +....#...O#..O.OO#........O..#..O....#.O.....OO#..#....O..OO.........O..#..#...O...OO.......O.......# +##.O#.........O#.OO..O..#.OO.#O.....O#O...O......#O#.O..O.....#.#O.#O.O#......OO.O........O.....#... +.#.O.OO....O#O..#..O.#.#O....OO...O#..#.O.##..#..O.#O#O..O.......O..#.O#.#.##...O.OO.O#O.#..#.#..O.. +...O#.......O#......O#........O..O..#..O#.O...O#..#...O......#...#.#O....O..#.#....OOO.O.......O.... +..O....#.....O.##..O..##O....#O..O.###.....O#..OOO..##........#O.O..O.....#......#O#.........#OO..#. +#.##...#.#...#.....#O.O.#..##.O..O.O.....#.#OO.........O.#...O....#......##.#.OOOO.O.OO...O.OO.O.... +..#....#...OO..#O.....#..#O..##....#......#O.#..O.#OO.......OO.O....#.......OO..#.#..OO...O.....#OO. +O.....O.#.....#..#.O#......#O#...#....O......O#O.O#.O....#.OO##........O...O#..O#.OOOO.#O#O..##....# +.O........OO.#.....O#O..OO.O#O#..O.......#.O..##.#.#.....#.OOOO...O..OOO.OO#....O....#....O.#....OOO +.O#O.O.......O#O...O.#O...O.OO#O..O.#..#O...O.O.#.#OO....##..##..#......#..O#......#O.O.O#O#.#...#.. +..O..O#.#..O#.O..OOOO...O..OOO#O......##.O..O..O..OO#O.#....O.......#..O#.O..O..#..O...OO.....##O#.. +...OOO..O........OOO....#..#.O.O..##.O.O..#....O........#...##O#O..O.#OO.#...#..#O#......O.O....O... +.#O#.#.#.O.#..#.O..O.....O.O..O.#.O#........#....##.O#O..#..#O#.#..O#O#.#.#..#......O...O#.O.....#.. +.#..O.#OO.#..#O...O...O..#O...#...O#..O.............#.....O.#O....#..#...#.#...OO.O.OOO.O....##O#O.# +OO..O...O....##...#.O...#.#....O.#....O..O##..O.......#O.#...O..##...OO.O#O.....OO...#....#.......O. +.#O.O....#.#O........#.#..O....O.......#..O#.....O..O.O..##..O.O.O...O..O...OO......O.OO...#.#....OO +.#.O..#O.....OO..O..#.O#.O.OO.#....#O....#.OO.....O.OO..#.O.O..OO.....O..##..O..#.#..O......O..OO..O +.O.......OO#.#.O.OO..#OO.OO..#O..O##O..#......#.#O.O.#O..#.O.#..#O.OOO..OO...#.#.#.#.OO.O...#O##O... +O#...O.O.O........O#..OO.#.#.....#..O##....#.#...OO##..#..O..#..O.OO.O.O.......O.O#........OO.##O... +.#.O.#.#...#.O..O##....#.O.#.O#O........#..#.#....O.....#..O#.##...#....#.##.#O.O#O.O..OO##.#..O#O.. +O...##..#..#OO#.OO.#...##..O...#.O.O#.#....#O.O##....O........OO#O..O..#.......O.#OOOO........#O...# +O...#...#.O...#....O#O#......O#.OO#..#....#.#O...O#...OO##...O#.OO....####.......#.......O.........# +#O..OO.OO....#.....#....#O.#..OO.#....##.....#...OO.O#O......O.O.O........##..O..O....#..O..O#.O.... +#O#.OOO.#O#.#.....#O.O....O.#.....OO...##....##O.#....O.O.#O.##O..#O#.O....O...O.#O.#.OO..#...OO..O. +....O.........O.O.....#.#...O.O....O..#.#...#..#..#..OO..OO.#..O..O....O........O#.O.O.O#.....#O.O.# +#...#O...#OOO...#..O.#..O..O...#.....OO#...##....#.##.##O.OOOO.#O.#...OO##.OO....#...OOO..###...O.## +..........#...#.#.....#O...O#OO....OO#...#..##..O..O...#.#.#..#.......#...OO....#O.......O..O....O.O +..O......#..OO..O#O.......#O...OO......#..O..OO..#.#O#OO..#.......OO#OO.O...#..O...O..##..OOOO.#...O +..OO.O#.#....O#O#O#..O....##..O.O#.O.O..O...O....O...#..O...#O.O..O#.#O..........O.........O..O.O.#. +...#....O#.#.#..OO....O.#.......#O#....OOOO.#O#O.O##.OO.#.#O##.....O.#OO#....O...#..OO#.O..........O +.#......#O#.#.....O...OO..O.#.......OO..O.O...O.O.#O....#....O..OO.O#.....##.#....O.O....#.#O.O#.### +...##O.....#O......O.......O.O.....#.O...O.O....OO..#O...O......#......O...#....O...#.O.....O#.#..OO +O..#.....#O..........#..OO........OOO.O..O#O#...#OO....O.#...OO..O..#....O.O.#.O#........#O.#.#...#O +O...#..OOOO...#.....#........##..OOO#OO#..#..#.#.O.#.O.O......O.....#.#O#..##....O.#O#O.O.#...O..... +.O.#.O....O.OOO..##.....O#.OO........................O..O..#.OOO......#OOO......#...OO........#..OOO +.###...O##..#.O#..O#..#.O#.#.O..O.##..O...#.O..O.#.#.....OO..O.#O.O....OO.O.O..#....#O.OO#.O..O..... +.......O.O.....O.....O#.....O.....OO#.O..#...O..O..##.O..OO.O....#O......###..#...O........#....O.OO +O..O..O...O.O.O.O.O.O...OO........OO..OO..O.#O.#.O....#..OOO.O.#...OO.#...O......OO.OO#.#...O#...##. +O#O.##...O#.#..O.#.O..#..#....#..O##...##....OO.#..##OO....##......O....#OO.O...#OO..OO#...O.OO.#.#. +..O.#OOO....O....#....#..O#O..O..O...O...O.........#..#.#O..#.#...OO.....##.O.......O#..O#.#...OO... +.O.O.O.O..O.##...#..........O.O..............#....#.#O...OO.#..OO...#....O.O..#.......O.#..#..##.O## +..OO.#.....O..O.OO.#.##.O....#...#O....##..O#.O.....O.....#....OO#....##..#O..OO...#O#O#....#.O.O.O# +..O.#O....O.#..#.#.OO.##..OO......#...#....#O...OO....#.O..#.OO#.......O.#.#......O#O...#..OO.....## +#.........O....#..#O.....##....#O......##..O....OO.....O.....#..#O...O...O..#.OOO.O..#......#.....#. +O.##.O.#OO...#..#O.OO.....#.#.....O..##.O.#......#O##......OO..O..O.O.....#..O.O.#..O......O.OO.##.. +....O....O#.##..O.O.O..#..##O#......O#.....O......O.#....O......#O.O..#..O..O..##..#O##..........O.. +O#..##O..#...OO...#.OO....#..O.....O.......OOO#...##...OO.##....#O..#..#O.#.O#O..O...O.#..O.#O.O#... diff --git a/2023/day-14/src/bin/part1.rs b/2023/day-14/src/bin/part1.rs new file mode 100644 index 0000000..2391bd4 --- /dev/null +++ b/2023/day-14/src/bin/part1.rs @@ -0,0 +1,9 @@ +use color_eyre::Result; +use day_14::part1::process; + +fn main() -> Result<()> { + let file = include_str!("../../input.txt"); + let result = process(file)?; + println!("{}", result); + Ok(()) +} diff --git a/2023/day-14/src/bin/part2.rs b/2023/day-14/src/bin/part2.rs new file mode 100644 index 0000000..40b6659 --- /dev/null +++ b/2023/day-14/src/bin/part2.rs @@ -0,0 +1,9 @@ +use color_eyre::Result; +use day_14::part2::process; + +fn main() -> Result<()> { + let file = include_str!("../../input.txt"); + let result = process(file)?; + println!("{}", result); + Ok(()) +} diff --git a/2023/day-14/src/lib.rs b/2023/day-14/src/lib.rs new file mode 100644 index 0000000..faaf542 --- /dev/null +++ b/2023/day-14/src/lib.rs @@ -0,0 +1,2 @@ +pub mod part1; +pub mod part2; diff --git a/2023/day-14/src/part1.rs b/2023/day-14/src/part1.rs new file mode 100644 index 0000000..ba29845 --- /dev/null +++ b/2023/day-14/src/part1.rs @@ -0,0 +1,117 @@ +use std::{collections::HashMap, fmt::Display}; + +use color_eyre::Result; +use glam::IVec2; + +#[derive(Debug, Clone, Copy)] +enum Rock { + Movable, + Immovable, +} + +impl Display for Rock { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "{}", + match self { + Rock::Movable => "0", + Rock::Immovable => "#", + } + ) + } +} + +fn print_grid(map: &HashMap, boundaries: &IVec2) { + for y in 0..boundaries.y { + for x in 0..boundaries.x { + match map.get(&IVec2::new(x, y)) { + Some(rock) => print!("{rock}"), + None => print!("."), + } + } + println!(""); + } +} + +fn rock_shift_north( + rock_map: &HashMap, + boundaries: &IVec2, + static_rocks: &HashMap, +) -> HashMap { + let mut results = static_rocks.clone(); + let mut next_potentially_available_pos = IVec2::new(0, 0); + + for x in 0..boundaries.x { + next_potentially_available_pos = IVec2::new(x, 0); + for y in 0..boundaries.y { + match rock_map.get(&IVec2::new(x, y)) { + Some(Rock::Immovable) => next_potentially_available_pos = IVec2::new(x, y + 1), + Some(Rock::Movable) => { + let next_pos = next_potentially_available_pos; + results.insert(next_pos, Rock::Movable); + next_potentially_available_pos.y += 1; + } + None => (), + } + } + } + results +} + +pub fn process(input: &str) -> Result { + let columns = input.lines().next().unwrap().len(); + let rows = input.lines().count(); + let boundaries = IVec2::new(columns as i32, rows as i32); + let rock_map = input + .lines() + .enumerate() + .flat_map(|(y, line)| { + line.chars() + .enumerate() + .filter_map(move |(x, ch)| match ch { + '0' => Some((IVec2::new(x as i32, y as i32), Rock::Movable)), + '#' => Some((IVec2::new(x as i32, y as i32), Rock::Immovable)), + _ => None, + }) + }) + .collect::>(); + + let static_rocks = rock_map + .iter() + .filter_map(|(pos, rock)| match rock { + Rock::Movable => None, + Rock::Immovable => Some((*pos, *rock)), + }) + .collect::>(); + let next_state = rock_shift_north(&rock_map, &boundaries, &static_rocks); + let sum = next_state + .iter() + .filter_map(|(pos, rock)| match rock { + Rock::Movable => Some(boundaries.y - pos.y), + Rock::Immovable => None, + }) + .sum::(); + Ok(sum as usize) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_process() -> Result<()> { + let input = "O....#.... +O.OO#....# +.....##... +OO.#O....O +.O.....O#. +O.#..O.#.# +..O..#O..O +.......O.. +#....###.. +#OO..#...."; + assert_eq!(136, process(input)?); + Ok(()) + } +} diff --git a/2023/day-14/src/part2.rs b/2023/day-14/src/part2.rs new file mode 100644 index 0000000..91ef1a3 --- /dev/null +++ b/2023/day-14/src/part2.rs @@ -0,0 +1,19 @@ +use color_eyre::Result; + +pub fn process(input: &str) -> Result { + todo!("day xx - part 2"); + Ok(0) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_process() -> Result<()> { + let input = ""; + todo!("haven't built test yet"); + assert_eq!(0, process(input)?); + Ok(()) + } +}