From 8deb5610a04fe519c8a2c290cbd63e193a51feb2 Mon Sep 17 00:00:00 2001 From: Ajetski Date: Sun, 25 Sep 2022 23:43:24 -0400 Subject: [PATCH] do day20 for 2020 --- .gitignore | 12 +- .gitlab-ci.yml | 6 +- 2020/Cargo.lock | 34 + 2020/Cargo.toml | 9 + 2020/inputs/day20.txt | 1728 +++++++++++++++++++++++++++ 2020/inputs/day20_sample.txt | 108 ++ 2020/src/day20.rs | 201 ++++ 2020/src/lib.rs | 4 + 2020/temp.txt | 35 + Cargo.lock => 2021/Cargo.lock | 2 +- Cargo.toml => 2021/Cargo.toml | 2 +- {inputs => 2021/inputs}/1.txt | 0 {inputs => 2021/inputs}/10.txt | 0 {inputs => 2021/inputs}/10_test.txt | 0 {inputs => 2021/inputs}/11.txt | 0 {inputs => 2021/inputs}/11_test.txt | 0 {inputs => 2021/inputs}/13.txt | 0 {inputs => 2021/inputs}/13_test.txt | 0 {inputs => 2021/inputs}/14.txt | 0 {inputs => 2021/inputs}/14_test.txt | 0 {inputs => 2021/inputs}/15.txt | 0 {inputs => 2021/inputs}/15_test.txt | 0 {inputs => 2021/inputs}/1_test.txt | 0 {inputs => 2021/inputs}/2.txt | 0 {inputs => 2021/inputs}/2_test.txt | 0 {inputs => 2021/inputs}/9.txt | 0 {inputs => 2021/inputs}/9_test.txt | 0 {src => 2021/src}/day1.rs | 0 {src => 2021/src}/day10.rs | 0 {src => 2021/src}/day11.rs | 0 {src => 2021/src}/day13.rs | 0 {src => 2021/src}/day14.rs | 0 {src => 2021/src}/day15.rs | 0 {src => 2021/src}/day2.rs | 0 {src => 2021/src}/day9.rs | 0 {src => 2021/src}/lib.rs | 4 +- readme.md | 6 +- 37 files changed, 2141 insertions(+), 10 deletions(-) create mode 100644 2020/Cargo.lock create mode 100644 2020/Cargo.toml create mode 100644 2020/inputs/day20.txt create mode 100644 2020/inputs/day20_sample.txt create mode 100644 2020/src/day20.rs create mode 100644 2020/src/lib.rs create mode 100644 2020/temp.txt rename Cargo.lock => 2021/Cargo.lock (88%) rename Cargo.toml => 2021/Cargo.toml (89%) rename {inputs => 2021/inputs}/1.txt (100%) rename {inputs => 2021/inputs}/10.txt (100%) rename {inputs => 2021/inputs}/10_test.txt (100%) rename {inputs => 2021/inputs}/11.txt (100%) rename {inputs => 2021/inputs}/11_test.txt (100%) rename {inputs => 2021/inputs}/13.txt (100%) rename {inputs => 2021/inputs}/13_test.txt (100%) rename {inputs => 2021/inputs}/14.txt (100%) rename {inputs => 2021/inputs}/14_test.txt (100%) rename {inputs => 2021/inputs}/15.txt (100%) rename {inputs => 2021/inputs}/15_test.txt (100%) rename {inputs => 2021/inputs}/1_test.txt (100%) rename {inputs => 2021/inputs}/2.txt (100%) rename {inputs => 2021/inputs}/2_test.txt (100%) rename {inputs => 2021/inputs}/9.txt (100%) rename {inputs => 2021/inputs}/9_test.txt (100%) rename {src => 2021/src}/day1.rs (100%) rename {src => 2021/src}/day10.rs (100%) rename {src => 2021/src}/day11.rs (100%) rename {src => 2021/src}/day13.rs (100%) rename {src => 2021/src}/day14.rs (100%) rename {src => 2021/src}/day15.rs (100%) rename {src => 2021/src}/day2.rs (100%) rename {src => 2021/src}/day9.rs (100%) rename {src => 2021/src}/lib.rs (100%) diff --git a/.gitignore b/.gitignore index de358ff..10155b9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,10 @@ -/target -.vscode/ +*/target/ +*/.vscode/ + + +# Added by cargo +# +# already existing elements were commented out + +#/target +*/Cargo.lock diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4d4a573..d406aa3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,5 +25,9 @@ image: "rust:latest" # Use cargo to test the project test:cargo: script: + - cd 2021 - rustc --version && cargo --version # Print version info for debugging - - cargo test --workspace --verbose + - cargo test --workspace --verbose -j 8 + - cd ../2020 + - rustc --version && cargo --version # Print version info for debugging + - cargo test --workspace --verbose -j 8 diff --git a/2020/Cargo.lock b/2020/Cargo.lock new file mode 100644 index 0000000..7ecd3ce --- /dev/null +++ b/2020/Cargo.lock @@ -0,0 +1,34 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aoc-2020" +version = "0.1.0" +dependencies = [ + "rpds", +] + +[[package]] +name = "archery" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a8da9bc4c4053ee067669762bcaeea6e241841295a2b6c948312dad6ef4cc02" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "rpds" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66262ea963eff99163e6b741fbc3417a52cc13074728c1047e9911789df9b000" +dependencies = [ + "archery", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" diff --git a/2020/Cargo.toml b/2020/Cargo.toml new file mode 100644 index 0000000..03bcd95 --- /dev/null +++ b/2020/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "aoc-2020" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +rpds = "0.12.0" diff --git a/2020/inputs/day20.txt b/2020/inputs/day20.txt new file mode 100644 index 0000000..ca434fb --- /dev/null +++ b/2020/inputs/day20.txt @@ -0,0 +1,1728 @@ +Tile 1753: +..##.#.#.# +#...#..... +#......#.. +#..##..#.# +#..##....# +#......... +#.#...##.. +#....#..## +##.......# +#...###### + +Tile 1699: +.###.....# +#.#......# +.....#.... +#.....#..# +.......... +#.#......# +...#...... +#......... +.###...... +.#....#.#. + +Tile 2297: +####....## +....#...#. +###...#... +...##..... +#...#..#.# +.......... +#......#.# +.........# +.......... +#..##.##.. + +Tile 2017: +#....#..## +.#.#..#..# +....##.... +#...#....# +#.#....... +.......... +#.#......# +....##...# +...#....## +..###.##.# + +Tile 1283: +.#....##.. +###...##.. +#......... +#........# +...####..# +.#........ +....#..... +........#. +#....#..#. +..#.####.# + +Tile 1171: +.#..#.#.## +.........# +#...##..## +#...#....# +.......#.. +####.#...# +..#....#.. +#......... +#...#....# +#..#.#.### + +Tile 2251: +.##.##..#. +.###.##..# +#..##.#.#. +#....#..#. +.#........ +......#..# +.....#...# +.###.#.... +##...##..# +.####.#.## + +Tile 2357: +###...##.# +......#.## +#........# +..#....#.# +..#...##.. +#....##..# +........#. +#........# +#.##...#.. +###.##.#.. + +Tile 2503: +...#...### +..#......# +#......##. +#...#..... +.....#..#. +##...#..## +.......#.# +.#...#.#.. +#.......#. +##..#..### + +Tile 1741: +.#....##.# +#.....#... +...#...#.. +##....#... +.##....### +#.###.#..# +#..#....## +#.##.....# +#.#....... +###.##...# + +Tile 3433: +#.......#. +#.#....... +.....#..#. +#........# +###.#..#.. +#....#.... +.....#...# +..#......# +....#.#.## +##.##..... + +Tile 3947: +.##.##.### +#.#...#.## +...#.##..# +#.......## +..#....... +.#...#...# +.....###.# +####..##.# +.##..#.#.. +..###..#.# + +Tile 1627: +##....##.# +#....#.... +....##...# +##..#..... +#..#....#. +.#..#.##.# +.#.......# +#......... +.#...##..# +#.#....#.. + +Tile 1667: +###.#...## +#..#.##..# +##.....#.# +.#........ +..#....#.# +.##....... +......#... +....###.#. +##.#..#.#. +.#..##...# + +Tile 2287: +##..####.# +#......... +#.##...#.. +#..#....#. +#........# +......##.. +#.##..#..# +...#.....# +.........# +#####..### + +Tile 1787: +.##.#.#.#. +#.##.....# +.........# +...#...... +..#..#...# +##....#..# +##.......# +..#....... +...#....#. +.##.####.. + +Tile 1873: +..#.###.## +.......#.# +#.#....... +#...#.##.# +......##.. +.#.....#.# +...##...#. +........#. +.......#.# +..######.# + +Tile 3709: +..##..##.# +##.......# +#......... +....#..... +#..#...#.# +.#....#..# +...##....# +#..#.....# +....##.... +.##.###... + +Tile 3137: +###..#.#.# +.........# +#....#.... +#.#......# +...#.#.#.# +..#...#... +.........# +.........# +#......... +##..###..# + +Tile 1423: +###.##..## +.......... +...#.....# +.......#.# +.......... +##.......# +##........ +#.#....#.. +#.#.....## +.##...#.## + +Tile 1399: +#.#.#....# +.........# +#..#..#..# +..#....... +...#..##.# +#..##...## +#..#.....# +#.##.#.#.# +.....#...# +####.....# + +Tile 2411: +.##.#.#..# +##..##...# +#..#...... +##..#.##.# +.......#.# +##........ +#...#...#. +.....#.#.. +........## +#####.#..# + +Tile 3323: +##.#...### +.........# +.....#.... +#...#.#..# +#........# +....#...## +#........# +#.....###. +...#.#...# +#.#...#... + +Tile 1213: +..##.##... +.....##..# +#.....#..# +#........# +...#...#.# +#.....#... +.#.#.##... +.....#...# +#...#.#... +.###.##### + +Tile 1619: +#..###..## +#.#.#..... +#........# +.........# +###...#.## +.#........ +.......... +.......... +#........# +##.###.#.# + +Tile 1997: +#....#.... +..#......# +#.#...#..# +#..#.....# +#.....#..# +#.#......# +#......... +.........# +.....#...# +#####..##. + +Tile 3533: +#....#.#.# +......##.# +......##.. +#.....#..# +....#..#.# +.....#...# +.#.#...#.# +#...#..### +#...#.#... +.#..###.## + +Tile 3389: +#..###.... +.#..#....# +#.#...#.#. +.........# +#....#...# +#.#....#.# +......#..# +##.......# +##........ +...#####.. + +Tile 3413: +..##.##..# +#........# +#....#.#.. +#....#.... +.....##..# +.........# +....#.#..# +#.#.#.#... +#....#...# +.####..#.# + +Tile 3833: +##.......# +.........# +#.###...#. +.....#.#.. +#......... +#.....#... +##.#...... +####.##..# +....##...# +.#.#...#.. + +Tile 2273: +.##.#.#.## +#........# +#.#....#.. +##..#....# +....#..... +#.......#. +.#........ +.#...#.... +#........# +.###...##. + +Tile 1987: +...#...### +#..#...... +#...#....# +...##..... +#........# +.....##... +#....##..# +.#..##...# +....#..#.# +##.##..##. + +Tile 3877: +.##...#.## +.......... +..#.#..... +.......... +#..##...#. +#.#.....#. +.#.......# +.#..#.#... +...#...#.. +#.##..#..# + +Tile 3109: +##....##.. +##...#.#.. +.......... +...#.....# +.####..### +.#.##..#.# +#.#...#... +.......... +#.......#. +##......#. + +Tile 3907: +#####.##.# +##.....#.# +..##..#... +.##....#.# +..#.....## +#......... +.........# +#......... +........## +.#...#.#.# + +Tile 1823: +##...#.#.# +#......... +.......... +....#..... +...#.##... +##...#...# +#......... +##....#.## +#...##..#. +#####.#.#. + +Tile 1747: +.#...##.#. +...#.#.... +..#.##.... +#...##...# +...#...... +#....##..# +...#.....# +...##..#.# +#.###....# +#......### + +Tile 3671: +.####..### +#.#......# +.......... +#.....#... +.#..#.#... +.......... +#......... +#......... +.......... +#..#..##.# + +Tile 3541: +###..##### +##....#.#. +.......#.. +....#..... +#.#.....## +#.###..### +...#.#.... +.#.......# +.....#.... +..#####..# + +Tile 3457: +#..###.... +#....#..## +.##......# +#....#..#. +.......... +#........# +.......... +...#...#.. +#.....##.# +.##..#.#.. + +Tile 1721: +..##.##.## +.........# +..#....... +##.......# +...#.....# +...#...#.. +#..##..... +........## +#.#......# +..#.#..### + +Tile 1597: +#.#...#..# +..#....... +#.....#..# +..#......# +..#..#...# +#..####... +...#...... +#.#.#.#..# +....#...#. +#.##...#.# + +Tile 2087: +####.#.### +#...#....# +##.......# +##......## +#.#......# +.......... +#....##... +....#..#.# +####....#. +######.##. + +Tile 2309: +...###...# +.##....... +.....#...# +#......#.# +##.......# +####.#.... +#......... +##.#...... +..#..#..#. +####.#.#.# + +Tile 3797: +##..###### +.....#.... +#.###....# +.#.......# +.......... +#......#.# +#..#...... +...#.#.... +#......... +#.###...## + +Tile 2663: +#....#.##. +.......... +.#.......# +##.....#.. +.#....#... +#......#.. +#..#....## +.#..#....# +........## +....###### + +Tile 3779: +.##....#.# +##.#..#..# +#......... +#......... +..#..#.#.# +.......##. +#....#...# +#........# +###....... +#..##.###. + +Tile 1163: +#####.#.## +#......### +.......... +#..#....#. +#..##...## +#...#..... +#..##.#..# +#....#.### +#....#...# +##.#.####. + +Tile 2683: +....#.##.# +#.....#.## +.#....#... +.#.......# +......##.. +.#.#.....# +.........# +.......#.. +.......... +######.#.# + +Tile 1783: +#.###.##.# +.......#.# +#..#....## +.#..#.#.#. +#........# +#.......## +#....###.# +..##.#.#.# +.....#..## +..######.# + +Tile 1097: +#.##..#... +....#...## +#...#..... +.....#.... +.....#..## +...##..#.. +..#...#... +#......... +#..##..#.# +#.####...# + +Tile 2731: +.#.##.#.#. +......#... +.....##..# +...#..#..# +###......# +#...#.#..# +..###....# +.....#...# +#...#....# +.##.#.#... + +Tile 1433: +###.###.## +...#.#.... +.......... +..#......# +..#....... +#..#...... +..##.....# +.......... +#.#..##..# +##..##.#.# + +Tile 3853: +..##..#..# +#.#....... +.....#...# +....#..#.. +.......#.# +##...##... +##......## +.........# +##..#...## +#.#..#.... + +Tile 3169: +.###....#. +##.#....## +#......... +#......... +..#....... +#.......#. +.#.##....# +.#....#... +##..##.#.. +#######..# + +Tile 3299: +##..##...# +..##...... +###.##.... +...#..##.. +#...#.##.. +.........# +##....#... +.........# +.#...#.#.# +##.#.....# + +Tile 2999: +##..#..... +#..#.....# +#......#.# +.........# +#......... +.........# +.#...#.... +........## +#.......#. +.###..#... + +Tile 1499: +.######... +....##..#. +.#.....### +#...#.##.# +......#.#. +..#....#.# +.#.......# +......#.## +.......#.. +###.####.# + +Tile 2237: +#.#.###.#. +..#....... +#.#..#...# +#......##. +#####....# +.#......#. +##.#..###. +..#...#... +##........ +....####.# + +Tile 3049: +......#..# +...#....## +...##..... +.#.#..#... +.#......## +.#.#..#..# +.........# +.#.#....#. +..#....... +#.#..#..#. + +Tile 1583: +#.#####... +#........# +........## +..#....... +.........# +#.#..#..#. +...#..##.# +....##..## +##.#.....# +####...### + +Tile 2791: +.....###.. +#...##.... +....##...# +.........# +#......... +.#...##..# +#......... +#.#.#....# +##..#..#.. +#.#..##..# + +Tile 1879: +.#.###.#.. +#......#.# +....#....# +......#### +#......#.# +#....#.#.. +......#... +#........# +#........# +#..###.### + +Tile 2633: +##.#.....# +#.#......# +........#. +..#......# +#.....#..# +#.......## +#.....#... +...#.....# +#..#....#. +#..#.###.# + +Tile 3701: +..##.##.#. +.........# +.#...##.## +..#....... +##.......# +.....#.... +......##.# +.#.#...#.# +....#...## +#..#..#.## + +Tile 2267: +.....##..# +...#.#.### +.......### +.#......## +.........# +#.....#..# +.........# +#....##..# +#.#....##. +...#####.. + +Tile 2687: +#..##.#### +.....#...# +#....##..# +.......... +.#.....#.. +#........# +#...#.#... +#........# +#..#...##. +#..##..#.# + +Tile 2113: +##.#.##..# +.#........ +.......#.# +#.##.....# +.........# +...#...... +#.#...#... +.##....... +.......... +.#.#.#...# + +Tile 3319: +...##..### +.......... +.......#.. +#....#..#. +..###....# +.#....#..# +#.#.#..#.# +..##...#.. +.#.......# +#..#.####. + +Tile 1303: +#..##....# +#....#.... +#.......#. +#........# +...#...#.. +..##.##.## +........#. +.......... +....#..#.# +##..#.#.## + +Tile 1709: +###.##.#.# +##.......# +#...#..#.# +.......... +.........# +.........# +#.##....## +....#..### +.......#.. +#.#......# + +Tile 3547: +#....####. +#..##...## +##....#..# +#......... +..#.#....# +#....#...# +...#....## +..#.....## +........#. +.###.....# + +Tile 2383: +#...#.#..# +...#..##.. +##......## +#..#...... +##......#. +#........# +........## +.......... +#....#.... +####..###. + +Tile 3989: +..##.#..#. +#.......## +#.#......# +##.#.....# +#..#...... +.........# +#.##...... +...#.....# +.#........ +#.##.#.... + +Tile 3499: +..##..#... +..#.#..#.. +.##....### +##.......# +#..#.#..## +#....#...# +.........# +##.#.#.#.. +.........# +#..###.##. + +Tile 1049: +###....##. +........## +.......... +.......... +.......... +....#...#. +.........# +#......... +.........# +##.####.#. + +Tile 2467: +.....##.## +#.##...... +..###...## +#..#.....# +..#....### +...#.....# +...#....## +.##...#... +...##...## +#.##...#.# + +Tile 3343: +###...#### +.......... +#####..... +.#..#..### +#....#..#. +#........# +.....#...# +.......#.. +#........# +##.#.#.### + +Tile 2129: +##.####..# +#..#..#... +.#.....#.# +##.......# +##.#...#.. +..#.#.#... +#....#...# +#.....##.. +.#.....#.. +..#######. + +Tile 1483: +.##.#.##.# +##.#...... +#.#....#.. +#.#...#..# +#........# +.......#.# +##...#..## +#......#.# +.......... +###.###.## + +Tile 2393: +#.###.##.# +#......#.. +..###..##. +##......## +.......#.. +........#. +.......#.. +#........# +..##.....# +#####..##. + +Tile 2749: +..#.#.#.#. +.#.#...... +#.#......# +....#..... +.##......# +.###...... +##..#..... +.#..##..## +..###.#... +####.##.#. + +Tile 1453: +#.##.#.##. +....#...## +#.#....... +...#...... +....###..# +...#...#.. +#...#..... +.#..#....# +##.......# +#..###.##. + +Tile 2213: +#.#.##.##. +#.......#. +#......#.. +#....#..#. +......#... +#..#.#.... +....#...## +..#...#... +###.#....# +#..#.##.#. + +Tile 2833: +.#.....#.# +..#...#..# +.##.....#. +..##....#. +.....#.### +........## +.#........ +.##......# +......##.. +#....##... + +Tile 2671: +.##.#.#.#. +.#.##.#... +##...#...# +###...#... +.......... +........## +..#......# +.#.......# +.#.#.#.#.# +#...##.#.. + +Tile 1801: +.#..#.#### +#..##....# +.....#.... +.#.......# +#.#.##...# +#......... +.........# +......#..# +.......... +.#.....### + +Tile 3329: +##.#..#... +..#.#.#..# +.........# +.......... +......#... +#......#.. +#.#...#... +.....###.. +.....##... +#..#...#.# + +Tile 2179: +....#.#.## +.......### +..#....### +#........# +...##....# +..###....# +.##.#....# +#..#...... +.#........ +#.#..###.. + +Tile 2003: +##.##.#### +.....#.... +#...#.#... +#..#.....# +.....#.... +.......#.. +#..#...... +..#.....#. +#..#.....# +....#####. + +Tile 2707: +..#..#.##. +.##....... +##.#...... +.#.#..#... +.###..#.#. +#......... +#...#....# +#.##.##..# +##.......# +..#..##### + +Tile 3847: +..##..#..# +.........# +.......... +#.......#. +........#. +.##......# +.#.......# +.....#.... +#..#...... +#..###...# + +Tile 1289: +#...##.#.# +#.....##.. +....#.#... +.........# +....#....# +#..#.#.... +#....#.#.# +.#...#.##. +#.....###. +#.##..#### + +Tile 1867: +####..##.# +#.##.....# +..#..##... +#...#....# +.###..#..# +....##.... +.......... +..#......# +##.......# +###.##.... + +Tile 1021: +####.##.#. +#...#..... +##.......# +#.#.#..#.# +##........ +##....#... +###...#... +##.##..... +.##..#.#.. +...#..##.. + +Tile 1427: +#..####... +.....#.... +#......... +##........ +#.#....... +........#. +.........# +#.#......# +..#......# +.####.#.#. + +Tile 1307: +#.#.#...## +....#..... +#....#.... +##....##.. +.#.#.....# +#....#..## +.....#.#.. +#........# +#........# +#..#####.. + +Tile 2099: +#..###.### +.......... +#.#..#..## +..#....... +.........# +#.......## +.#.#.....# +..#..#..## +.##...##.. +##....#.#. + +Tile 2389: +#.###.#.## +##....#.## +#...#..### +.#.#...#.# +#.....#... +#......#.. +...#...#.. +#..#.##... +.......#.# +..#.#...## + +Tile 2011: +#.##.#.#.# +#........# +#......### +.#..#.#..# +##..###..# +.#..#.##.# +#.#.#...#. +#.....#... +....#...## +.###.#.... + +Tile 2539: +###.#.#.## +......#.## +....##.#.. +#.#...#..# +#..#...... +##...#.#.. +.........# +#.#....#.# +.##......# +.###..#.## + +Tile 3761: +...#.#..#. +#.....#..# +#..#...... +#..#.....# +##........ +#..#.#.... +#......#.. +..#.##.#.. +.#.#..#... +.....#.##. + +Tile 2549: +.##.####.. +#.#....... +#.##....#. +.#........ +......#... +....#.##.. +..#.....#. +...#..#..# +....#..### +##...##... + +Tile 2039: +#.#.####.# +#.#....##. +.......... +#.#....... +##.....#.. +##....#.## +#...#..... +#...#...## +.#.#..##.# +.###...... + +Tile 2063: +.##.##..#. +..#.##.... +#..#.#.... +.#.......# +##........ +#.#..#.#.. +.......... +...###.... +#......#.# +#.##.....# + +Tile 3181: +#####.#### +#.....#..# +#.#......# +.........# +#....#.... +.#.......# +......#..# +#......#.. +#..#....## +#.....#..# + +Tile 2459: +.##..#.#.. +#...#..#.# +#.......## +#........# +.#.#.....# +#...#..##. +.......### +....#..### +........#. +...#.##..# + +Tile 2953: +########.# +..#....... +#...##...# +........#. +#..#....#. +...#.#.... +.......... +#...#....# +........#. +##...##... + +Tile 1487: +#.####.#.. +.....#...# +#....#...# +..#......# +.....#...# +#...##...# +........#. +.#.....#.. +#...#..... +.#.###.#.. + +Tile 1201: +..#...#..# +#......... +#......... +...#.....# +..#......# +.......... +.......... +#.#....... +#....#.... +#.###.##.. + +Tile 1609: +##.##.###. +#........# +.......... +#......... +........#. +.#.##..#.# +#..#....## +#.#....#.. +.#...#.... +##.#..#... + +Tile 2593: +####.#.#.. +#.#......# +.......... +#..##..... +...#...#.. +#..#.....# +..#....... +#........# +..#....... +..#..#..## + +Tile 3889: +######..#. +....#.#.#. +##...#..## +....#....# +#...#....# +..##.##... +#.###....# +.#......## +#....#.... +#....#...# + +Tile 3041: +###....... +##..#...#. +##..#..#.# +......##.# +###....##. +..#...#... +#...#..... +##...#.... +#......#.# +#...#.#.## + +Tile 1367: +###.##.##. +..##.#...# +....#..... +#........# +###....#.. +#.####.... +####....#. +.###.#.##. +...#.....# +..#...#### + +Tile 2609: +.###...#.# +.......... +#........# +...#.#.#.# +......#..# +#.....##.. +#..#..#..# +.####..##. +##......## +#...##..## + +Tile 3167: +########.# +.#..#....# +..#....... +..#..#.#.. +.#.##.#..# +.##......# +##.....#.# +..#.#....# +#........# +.#...#.### + +Tile 2753: +#...#....# +#....#...# +....#....# +#........# +.......... +.......... +#......... +#........# +#......... +.#....#### + +Tile 3527: +.####...## +........## +#......#.# +#...#..#.. +.#......#. +.#.....#.# +#........# +#..#....#. +..#....##. +#.#..##### + +Tile 1279: +.###...#.# +..#......# +#.......## +.......... +#......#.# +.#...#.... +.#........ +#....##..# +#.##...#.. +####..#..# + +Tile 1291: +#......### +##.#.....# +.......... +#.#..##... +......##.# +.#.....#.. +.......... +#.#......# +#......... +#..#...### + +Tile 1319: +##..##.### +#.......#. +.......... +###......# +.......... +...##..#.. +#.#..#.... +#...#..... +.#...#...# +#..#.#..## + +Tile 1009: +....##...# +#.....##.# +#....##... +.#.....#.. +#...#..... +#......... +##........ +#....#..## +...#...#.# +#######... + +Tile 2659: +....####.# +#.##...... +..#.....## +.#.......# +.#........ +..##.....# +...#...... +......#..# +#.#..#...# +#..#.##..# + +Tile 1543: +#######.#. +#..#.#...# +.........# +##.#.....# +#.#......# +#.......## +..##...... +..#.###..# +...#.....# +##.###..#. + +Tile 1019: +........#. +#....#.#.# +...#...... +##.#.#..## +....#.#.#. +#.###...## +####.#..#. +#....#.... +#........# +.#...##.#. + +Tile 2239: +##..###... +......#..# +##...#.... +.......... +....#...## +...#...#.# +..#....... +.........# +#..###...# +##...#...# + +Tile 2797: +#.#..#.... +#.......#. +#.#..#.... +#......#.. +#....##..# +#...#...## +#.#....... +.#.....#.# +##.......# +#...#.#.## + +Tile 1663: +..##.#...# +#....##..# +....#....# +..#......# +#........# +.......... +#..#.....# +#...#....# +#..#....#. +.#..#.#..# + +Tile 1069: +#########. +.#........ +###....... +...#....## +#....#.... +#........# +#...#....# +.....#.... +#.#......# +.#....##.# + +Tile 1559: +##.###.#.. +##...#.... +..#......# +...#.#..#. +...##.#... +.#..#.#.## +#..#....#. +....#.#..# +..#....... +####.#.... + +Tile 3203: +##.##.#... +##........ +..#..#...# +....#....# +..##.....# +#.....##.. +.......... +.......... +#......#.. +...#.#.##. + +Tile 2819: +.####...## +...#.##... +..#....##. +........#. +...#...### +..#....#.. +#.#.....## +#.#..#.#.. +#...#..... +###....... + +Tile 2027: +..#..##.## +#....#.#.. +......#... +#.#....#.. +.........# +........## +#.#....... +......#... +.......#.# +.#.#.##.#. + +Tile 1091: +..#..###.# +...#.....# +.........# +#........# +..#.#..#.. +#....#...# +....#.#..# +.......### +#......... +#..##.##.# + +Tile 2381: +...###...# +#.#.#...#. +....#....# +#.....##.. +#........# +..##....## +#.#......# +##.......# +.....#.### +.#.####### + +Tile 1381: +######.##. +#.#....#.. +#....###.# +#.#.....#. +#.#.#....# +#....#...# +#.#.#.#... +.#.#.#.... +....#...#. +####.##### + +Tile 3719: +...#.#...# +...#.....# +...#..#.## +#..#.....# +#.......## +##..#..#.# +.......#.. +.##....... +.......##. +.#.#.###.# + +Tile 3593: +##...##.#. +#......... +......#.#. +.......... +..#......# +#........# +.....##..# +.#....#.## +.#.....### +#.#..#...# + +Tile 2971: +..##.....# +#.....#.## +#.#......# +#....#.... +.........# +#......... +#......#.. +.......#.# +##....#..# +#.##.#..## + +Tile 1637: +#.###.#..# +.#..#.#..# +.........# +......#.## +#..###...# +....#.#... +#.#.....## +#........# +......#..# +##..#..... + +Tile 2711: +..##.##... +###..#...# +......#... +#.......#. +#.#....... +#.....##.. +...#.##..# +.......... +.....#...# +##.....### + +Tile 3881: +..#####.## +.#....#..# +.........# +.##..#.... +..###.#..# +...#...... +...#...#.# +..#....... +#.....#... +.#.##.#... + +Tile 1907: +..####..## +.......#.. +.......#.. +.........# +....#.##.# +..#..##... +....#....# +#...#....# +#........# +.#.##..#.# + diff --git a/2020/inputs/day20_sample.txt b/2020/inputs/day20_sample.txt new file mode 100644 index 0000000..546e71d --- /dev/null +++ b/2020/inputs/day20_sample.txt @@ -0,0 +1,108 @@ +Tile 2311: +..##.#..#. +##..#..... +#...##..#. +####.#...# +##.##.###. +##...#.### +.#.#.#..## +..#....#.. +###...#.#. +..###..### + +Tile 1951: +#.##...##. +#.####...# +.....#..## +#...###### +.##.#....# +.###.##### +###.##.##. +.###....#. +..#.#..#.# +#...##.#.. + +Tile 1171: +####...##. +#..##.#..# +##.#..#.#. +.###.####. +..###.#### +.##....##. +.#...####. +#.##.####. +####..#... +.....##... + +Tile 1427: +###.##.#.. +.#..#.##.. +.#.##.#..# +#.#.#.##.# +....#...## +...##..##. +...#.##### +.#.####.#. +..#..###.# +..##.#..#. + +Tile 1489: +##.#.#.... +..##...#.. +.##..##... +..#...#... +#####...#. +#..#.#.#.# +...#.#.#.. +##.#...##. +..##.##.## +###.##.#.. + +Tile 2473: +#....####. +#..#.##... +#.##..#... +######.#.# +.#...#.#.# +.######### +.###.#..#. +########.# +##...##.#. +..###.#.#. + +Tile 2971: +..#.#....# +#...###... +#.#.###... +##.##..#.. +.#####..## +.#..####.# +#..#.#..#. +..####.### +..#.#.###. +...#.#.#.# + +Tile 2729: +...#.#.#.# +####.#.... +..#.#..... +....#..#.# +.##..##.#. +.#.####... +####.#.#.. +##.####... +##..#.##.. +#.##...##. + +Tile 3079: +#.#.#####. +.#..###### +..#....... +######.... +####.#..#. +.#...#.##. +#.#####.## +..#.###... +..#....... +..#.###... + diff --git a/2020/src/day20.rs b/2020/src/day20.rs new file mode 100644 index 0000000..12cf496 --- /dev/null +++ b/2020/src/day20.rs @@ -0,0 +1,201 @@ +use std::{collections::HashSet, fmt::Display}; + +#[derive(Clone, Debug, Eq)] +struct Tile { + id: u128, + grid: Vec>, +} +impl Tile { + fn rotate(&mut self) { + let n = self.grid.len(); + + // reverse rows + for row in &mut self.grid { + row.reverse(); + } + + // perform matrix transpose + for i in 0..n { + for j in i..n { + let temp = self.grid[i][j]; + self.grid[i][j] = self.grid[j][i]; + self.grid[j][i] = temp; + } + } + } + + fn flip(&mut self) { + for row in &mut self.grid { + row.reverse(); + } + } + + fn fits_with_right_border_of(&self, left_tile: &Self) -> bool { + let n = self.grid[0].len(); + for i in 0..n { + if self.grid[i][0] != left_tile.grid[i][n - 1] { + return false; + } + } + true + } + + fn fits_with_bottom_border_of(&self, above_tile: &Self) -> bool { + let n = self.grid[0].len(); + for i in 0..n { + if self.grid[0][i] != above_tile.grid[n - 1][i] { + return false; + } + } + true + } +} + +fn configure_board( + board: &mut Vec>>, + tiles_left: &mut HashSet, + x: usize, + y: usize, + n: usize, +) -> Option>> { + if x == n { + return Some( + board + .iter() + .map(|row| { + row.iter() + .map(|cell| cell.as_ref().unwrap().clone()) + .collect() + }) + .collect(), + ); + } + + let new_y = if y + 1 == n { 0 } else { y + 1 }; + let new_x = if new_y == 0 { x + 1 } else { x }; + for mut tile in tiles_left.clone() { + tiles_left.remove(&tile); + for _ in 0..4 { + for _ in 0..2 { + if (x == 0 && y == 0) + || (x != 0 + && tile.fits_with_bottom_border_of(board[x - 1][y].as_ref().unwrap())) + || (y != 0 && tile.fits_with_right_border_of(board[x][y - 1].as_ref().unwrap())) + { + board[x][y] = Some(tile.clone()); + // println!("found match for {x}, {y}, {tile}"); + + if let Some(ans) = configure_board(board, tiles_left, new_x, new_y, n) { + return Some(ans); + } + } else { + // println!("no match found for {x}, {y}, {tile}"); + } + tile.flip(); + } + tile.rotate(); + } + tiles_left.insert(tile); + } + + None +} +fn part_one(mut input: HashSet) -> u128 { + let n2 = input.len(); + let n = (n2 as f64).sqrt() as usize; + let mut board = vec![vec![None; n]; n]; + let value = configure_board(&mut board, &mut input, 0, 0, n); + let board = value.unwrap(); + board[0][0].id * board[0][n - 1].id * board[n - 1][0].id * board[n - 1][n - 1].id +} + +fn part_two(mut input: HashSet) -> u128 { + let n2 = input.len(); + let n = (n2 as f64).sqrt() as usize; + let mut board = vec![vec![None; n]; n]; + let board = configure_board(&mut board, &mut input, 0, 0, n).unwrap(); + let tile_size = board[0][0].grid.len(); + let _picture = { + let mut pic = vec![vec![]; n]; + for (x, board_row) in board.iter().enumerate() { + for tile in board_row { + for (i, tile_row) in tile.grid.iter().enumerate() { + for c in tile_row { + pic[x * (tile_size - 2) + i].push(*c); + } + } + } + } + pic + }; + + // turn board into picture + // flip/rotate pitctures + // traverse each image for sea monsters + + todo!() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn day20_part_one_sample() { + let input = parse_inputs(include_str!("../inputs/day20_sample.txt")); + assert_eq!(part_one(input), 20899048083289); + } + + #[test] + fn day20_part_one() { + let input = parse_inputs(include_str!("../inputs/day20.txt")); + assert_eq!(part_one(input), 66020135789767); + } + + #[test] + fn day20_part_two_sample() { + let _input = parse_inputs(include_str!("../inputs/day20_sample.txt")); + // assert_eq!(part_two(input), 273); + } + + fn parse_inputs(input: &str) -> HashSet { + let mut tiles = HashSet::new(); + let chunks: Vec<&str> = input.split("\n\n").collect(); + for chunk in &chunks[0..chunks.len() - 1] { + let mut line_it = chunk.split('\n'); + let tile_id_line = line_it.next().unwrap(); + let id = tile_id_line[5..tile_id_line.chars().count() - 1] + .parse() + .unwrap(); + let mut grid = vec![]; + for line in line_it { + grid.push(line.chars().collect()); + } + tiles.insert(Tile { id, grid }); + } + tiles + } +} + +// utility traits for data structures and debugging +impl PartialEq for Tile { + fn eq(&self, other: &Self) -> bool { + self.id == other.id + } +} +impl std::hash::Hash for Tile { + fn hash(&self, state: &mut H) { + self.id.hash(state); + } +} +impl Display for Tile { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + writeln!(f, "tile: {}", self.id)?; + let n = self.grid.len(); + for i in 0..n { + writeln!(f, "{}", self.grid[i].iter().collect::())?; + } + writeln!(f)?; + Ok(()) + } +} diff --git a/2020/src/lib.rs b/2020/src/lib.rs new file mode 100644 index 0000000..88b0165 --- /dev/null +++ b/2020/src/lib.rs @@ -0,0 +1,4 @@ +#[allow(dead_code)] + +mod day20; + diff --git a/2020/temp.txt b/2020/temp.txt new file mode 100644 index 0000000..8c65a2d --- /dev/null +++ b/2020/temp.txt @@ -0,0 +1,35 @@ + +running 2 tests +test day20::tests::day20_part_one_sample ... ok +test day20::tests::day20_part_one ... FAILED + +failures: + +---- day20::tests::day20_part_one stdout ---- +n is 12, n squared is 144 +num: 250 +num: 500 +num: 750 +num: 1000 +num: 1250 +num: 1500 +num: 1750 +num: 2000 +num: 2250 +num: 2500 +num: 2750 +num: 3000 +num: 3250 +num: 3500 +num iterations: 3721 +thread 'day20::tests::day20_part_one' panicked at 'assertion failed: `(left == right)` + left: `66020135789767`, + right: `20899048083289`', src/day20.rs:149:9 +note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace + + +failures: + day20::tests::day20_part_one + +test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 37.51s + diff --git a/Cargo.lock b/2021/Cargo.lock similarity index 88% rename from Cargo.lock rename to 2021/Cargo.lock index b57d1f8..581b6e5 100644 --- a/Cargo.lock +++ b/2021/Cargo.lock @@ -3,5 +3,5 @@ version = 3 [[package]] -name = "abc" +name = "aoc-2021" version = "0.1.0" diff --git a/Cargo.toml b/2021/Cargo.toml similarity index 89% rename from Cargo.toml rename to 2021/Cargo.toml index ff2fe00..7d24776 100644 --- a/Cargo.toml +++ b/2021/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "abc" +name = "aoc-2021" version = "0.1.0" edition = "2021" diff --git a/inputs/1.txt b/2021/inputs/1.txt similarity index 100% rename from inputs/1.txt rename to 2021/inputs/1.txt diff --git a/inputs/10.txt b/2021/inputs/10.txt similarity index 100% rename from inputs/10.txt rename to 2021/inputs/10.txt diff --git a/inputs/10_test.txt b/2021/inputs/10_test.txt similarity index 100% rename from inputs/10_test.txt rename to 2021/inputs/10_test.txt diff --git a/inputs/11.txt b/2021/inputs/11.txt similarity index 100% rename from inputs/11.txt rename to 2021/inputs/11.txt diff --git a/inputs/11_test.txt b/2021/inputs/11_test.txt similarity index 100% rename from inputs/11_test.txt rename to 2021/inputs/11_test.txt diff --git a/inputs/13.txt b/2021/inputs/13.txt similarity index 100% rename from inputs/13.txt rename to 2021/inputs/13.txt diff --git a/inputs/13_test.txt b/2021/inputs/13_test.txt similarity index 100% rename from inputs/13_test.txt rename to 2021/inputs/13_test.txt diff --git a/inputs/14.txt b/2021/inputs/14.txt similarity index 100% rename from inputs/14.txt rename to 2021/inputs/14.txt diff --git a/inputs/14_test.txt b/2021/inputs/14_test.txt similarity index 100% rename from inputs/14_test.txt rename to 2021/inputs/14_test.txt diff --git a/inputs/15.txt b/2021/inputs/15.txt similarity index 100% rename from inputs/15.txt rename to 2021/inputs/15.txt diff --git a/inputs/15_test.txt b/2021/inputs/15_test.txt similarity index 100% rename from inputs/15_test.txt rename to 2021/inputs/15_test.txt diff --git a/inputs/1_test.txt b/2021/inputs/1_test.txt similarity index 100% rename from inputs/1_test.txt rename to 2021/inputs/1_test.txt diff --git a/inputs/2.txt b/2021/inputs/2.txt similarity index 100% rename from inputs/2.txt rename to 2021/inputs/2.txt diff --git a/inputs/2_test.txt b/2021/inputs/2_test.txt similarity index 100% rename from inputs/2_test.txt rename to 2021/inputs/2_test.txt diff --git a/inputs/9.txt b/2021/inputs/9.txt similarity index 100% rename from inputs/9.txt rename to 2021/inputs/9.txt diff --git a/inputs/9_test.txt b/2021/inputs/9_test.txt similarity index 100% rename from inputs/9_test.txt rename to 2021/inputs/9_test.txt diff --git a/src/day1.rs b/2021/src/day1.rs similarity index 100% rename from src/day1.rs rename to 2021/src/day1.rs diff --git a/src/day10.rs b/2021/src/day10.rs similarity index 100% rename from src/day10.rs rename to 2021/src/day10.rs diff --git a/src/day11.rs b/2021/src/day11.rs similarity index 100% rename from src/day11.rs rename to 2021/src/day11.rs diff --git a/src/day13.rs b/2021/src/day13.rs similarity index 100% rename from src/day13.rs rename to 2021/src/day13.rs diff --git a/src/day14.rs b/2021/src/day14.rs similarity index 100% rename from src/day14.rs rename to 2021/src/day14.rs diff --git a/src/day15.rs b/2021/src/day15.rs similarity index 100% rename from src/day15.rs rename to 2021/src/day15.rs diff --git a/src/day2.rs b/2021/src/day2.rs similarity index 100% rename from src/day2.rs rename to 2021/src/day2.rs diff --git a/src/day9.rs b/2021/src/day9.rs similarity index 100% rename from src/day9.rs rename to 2021/src/day9.rs diff --git a/src/lib.rs b/2021/src/lib.rs similarity index 100% rename from src/lib.rs rename to 2021/src/lib.rs index ca3df2e..95fc2eb 100644 --- a/src/lib.rs +++ b/2021/src/lib.rs @@ -1,12 +1,12 @@ #![allow(dead_code)] - /** * File: lib.rs * Author: Adam Jeniski; @Ajetski */ + pub(crate) mod day1; -pub(crate) mod day10; pub(crate) mod day9; +pub(crate) mod day10; pub(crate) mod day11; pub(crate) mod day13; pub(crate) mod day14; diff --git a/readme.md b/readme.md index 757fad4..c99aec9 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -## Advent of Code 2021 -My rust solutions for Advent of Code 2021. +## Advent of Code +My rust solutions for Advent of Code -Use `cargo test` to run each test case. +Navigate to one of the folder for a given year, then use `cargo test` to run it's test cases.