From 4b9d0eb2970b99f356fae66dfcdaa45576e8cf15 Mon Sep 17 00:00:00 2001 From: Hans Christian Schmitz Date: Wed, 1 Dec 2021 15:10:26 +0100 Subject: [PATCH] Initial commit with code from 2020 --- .gitignore | 1 + Cargo.lock | 1032 ++++++++++++++ Cargo.toml | 9 + aoc-solutions/.gitignore | 2 + aoc-solutions/Cargo.toml | 27 + aoc-solutions/benches/benchmark.rs | 91 ++ aoc-solutions/build.rs | 67 + aoc-solutions/src/day01.rs | 57 + aoc-solutions/src/day02.rs | 51 + aoc-solutions/src/day03.rs | 39 + aoc-solutions/src/day04.rs | 95 ++ aoc-solutions/src/day05.rs | 117 ++ aoc-solutions/src/day06.rs | 52 + aoc-solutions/src/day07.rs | 114 ++ aoc-solutions/src/day08.rs | 133 ++ aoc-solutions/src/day09.rs | 64 + aoc-solutions/src/day10.rs | 59 + aoc-solutions/src/day11.rs | 390 ++++++ aoc-solutions/src/day12.rs | 215 +++ aoc-solutions/src/lib.rs | 9 + aoc-solver/.gitignore | 1 + aoc-solver/Cargo.toml | 17 + aoc-solver/src/main.rs | 61 + res/input_K_day10.txt | 94 ++ res/input_day01.txt | 200 +++ res/input_day02.txt | 1000 +++++++++++++ res/input_day03.txt | 323 +++++ res/input_day04.txt | 1138 +++++++++++++++ res/input_day05.txt | 927 +++++++++++++ res/input_day06.txt | 2079 ++++++++++++++++++++++++++++ res/input_day07.txt | 594 ++++++++ res/input_day08.txt | 601 ++++++++ res/input_day09.txt | 1000 +++++++++++++ res/input_day10.txt | 98 ++ res/input_day11.txt | 99 ++ res/input_day12.txt | 780 +++++++++++ 36 files changed, 11636 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 aoc-solutions/.gitignore create mode 100644 aoc-solutions/Cargo.toml create mode 100644 aoc-solutions/benches/benchmark.rs create mode 100644 aoc-solutions/build.rs create mode 100644 aoc-solutions/src/day01.rs create mode 100644 aoc-solutions/src/day02.rs create mode 100644 aoc-solutions/src/day03.rs create mode 100644 aoc-solutions/src/day04.rs create mode 100644 aoc-solutions/src/day05.rs create mode 100644 aoc-solutions/src/day06.rs create mode 100644 aoc-solutions/src/day07.rs create mode 100644 aoc-solutions/src/day08.rs create mode 100644 aoc-solutions/src/day09.rs create mode 100644 aoc-solutions/src/day10.rs create mode 100644 aoc-solutions/src/day11.rs create mode 100644 aoc-solutions/src/day12.rs create mode 100644 aoc-solutions/src/lib.rs create mode 100644 aoc-solver/.gitignore create mode 100644 aoc-solver/Cargo.toml create mode 100644 aoc-solver/src/main.rs create mode 100644 res/input_K_day10.txt create mode 100644 res/input_day01.txt create mode 100644 res/input_day02.txt create mode 100644 res/input_day03.txt create mode 100644 res/input_day04.txt create mode 100644 res/input_day05.txt create mode 100644 res/input_day06.txt create mode 100644 res/input_day07.txt create mode 100644 res/input_day08.txt create mode 100644 res/input_day09.txt create mode 100644 res/input_day10.txt create mode 100644 res/input_day11.txt create mode 100644 res/input_day12.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..3c6fc77 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,1032 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "aho-corasick" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +dependencies = [ + "memchr", +] + +[[package]] +name = "aljabar" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3577221f47e6d104ddb6dd9748918a8ac0d8a45b491938f9de121852aaf9666d" +dependencies = [ + "paste", + "smallvec", +] + +[[package]] +name = "aoc-solutions" +version = "0.1.0" +dependencies = [ + "aljabar", + "criterion", + "envy", + "indoc", + "itertools", + "ndarray", + "regex", + "serde", + "validator", +] + +[[package]] +name = "aoc-solver" +version = "0.1.0" +dependencies = [ + "aoc-solutions", + "clap 3.0.0-beta.2", + "envy", + "itertools", + "rayon", + "regex", + "serde", + "validator", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "bstr" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "473fc6b38233f9af7baa94fb5852dca389e3d95b8e21c8e3719301462c5d9faf" +dependencies = [ + "lazy_static", + "memchr", + "regex-automata", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" + +[[package]] +name = "byteorder" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" + +[[package]] +name = "cast" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "2.33.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +dependencies = [ + "bitflags", + "textwrap 0.11.0", + "unicode-width", +] + +[[package]] +name = "clap" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd1061998a501ee7d4b6d449020df3266ca3124b941ec56cf2005c3779ca142" +dependencies = [ + "atty", + "bitflags", + "clap_derive", + "indexmap", + "lazy_static", + "os_str_bytes", + "strsim", + "termcolor", + "textwrap 0.12.1", + "unicode-width", + "vec_map", +] + +[[package]] +name = "clap_derive" +version = "3.0.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "370f715b81112975b1b69db93e0b56ea4cd4e5002ac43b2da8474106a54096a1" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "const_fn" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd51eab21ab4fd6a3bf889e2d0958c0a6e3a61ad04260325e919e652a2a62826" + +[[package]] +name = "criterion" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70daa7ceec6cf143990669a04c7df13391d55fb27bd4079d252fca774ba244d8" +dependencies = [ + "atty", + "cast", + "clap 2.33.3", + "criterion-plot", + "csv", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_cbor", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022feadec601fba1649cfa83586381a4ad31c6bf3a9ab7d408118b05dd9889d" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d" +dependencies = [ + "cfg-if 1.0.0", + "const_fn", + "crossbeam-utils", + "lazy_static", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "lazy_static", +] + +[[package]] +name = "csv" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d58633299b24b515ac72a3f869f8b91306a3cec616a602843a383acd6f9e97" +dependencies = [ + "bstr", + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "envy" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f938a4abd5b75fe3737902dbc2e79ca142cc1526827a9e40b829a086758531a9" +dependencies = [ + "serde", +] + +[[package]] +name = "form_urlencoded" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "half" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d36fab90f82edc3c747f9d438e06cf0a491055896f2a279638bb5beed6c40177" + +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" + +[[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +dependencies = [ + "libc", +] + +[[package]] +name = "idna" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "if_chain" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f7280c75fb2e2fc47080ec80ccc481376923acb04501957fc38f935c3de5088" + +[[package]] +name = "indexmap" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55e2e4c765aa53a0424761bf9f41aa7a6ac1efa87238f59560640e27fca028f2" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "indoc" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a75aeaaef0ce18b58056d306c27b07436fbb34b8816c53094b76dd81803136" +dependencies = [ + "unindent", +] + +[[package]] +name = "itertools" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" + +[[package]] +name = "js-sys" +version = "0.3.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb" + +[[package]] +name = "log" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +dependencies = [ + "cfg-if 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" + +[[package]] +name = "matrixmultiply" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916806ba0031cd542105d916a97c8572e1fa6dd79c9c51e7eb43a09ec2dd84c1" +dependencies = [ + "rawpointer", +] + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" + +[[package]] +name = "memoffset" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" +dependencies = [ + "autocfg", +] + +[[package]] +name = "ndarray" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c0d5c9540a691d153064dc47a4db2504587a75eae07bf1d73f7a596ebc73c04" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", +] + +[[package]] +name = "num-complex" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "os_str_bytes" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb2e1c3ee07430c2cf76151675e583e0f19985fa6efae47d6848a3e2c824f85" + +[[package]] +name = "paste" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880" +dependencies = [ + "paste-impl", + "proc-macro-hack", +] + +[[package]] +name = "paste-impl" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6" +dependencies = [ + "proc-macro-hack", +] + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "plotters" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d1685fbe7beba33de0330629da9d955ac75bd54f33d7b79f9a895590124f6bb" +dependencies = [ + "js-sys", + "num-traits", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "quote" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "lazy_static", + "num_cpus", +] + +[[package]] +name = "regex" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-automata" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4" +dependencies = [ + "byteorder", +] + +[[package]] +name = "regex-syntax" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_cbor" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e18acfa2f90e8b735b2836ab8d538de304cbb6729a7360729ea5a895d15a622" +dependencies = [ + "half", + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.118" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1500e84d27fe482ed1dc791a56eddc2f230046a040fa908c08bda1d9fb615779" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "smallvec" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" +dependencies = [ + "maybe-uninit", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "1.0.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2af957a63d6bd42255c359c93d9bfdb97076bd3b820897ce55ffbfbf107f44" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "textwrap" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "203008d98caf094106cfaba70acfed15e18ed3ddb7d94e49baec153a2b462789" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "tinytemplate" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d3dc76004a03cec1c5932bca4cdc2e39aaa798e3f82363dd94f9adf6098c12f" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf8dbc19eb42fba10e8feaaec282fb50e2c14b2726d6301dbfeed0f73306a6f" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +dependencies = [ + "matches", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13e63ab62dbe32aeee58d1c5408d35c36c392bba5d9d3142287219721afe606" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-segmentation" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" + +[[package]] +name = "unicode-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "unindent" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7" + +[[package]] +name = "url" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "validator" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d6937c33ec6039d8071bcf72933146b5bbe378d645d8fa59bdadabfc2a249" +dependencies = [ + "idna", + "lazy_static", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", + "validator_derive", + "validator_types", +] + +[[package]] +name = "validator_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4286b4497f270f59276a89ae0ad109d5f8f18c69b613e3fb22b61201aadb0c4d" +dependencies = [ + "if_chain", + "lazy_static", + "proc-macro-error", + "proc-macro2", + "quote", + "regex", + "syn", + "validator_types", +] + +[[package]] +name = "validator_types" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad9680608df133af2c1ddd5eaf1ddce91d60d61b6bc51494ef326458365a470a" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" + +[[package]] +name = "walkdir" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cd364751395ca0f68cafb17666eee36b63077fb5ecd972bbcd74c90c4bf736e" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1114f89ab1f4106e5b55e688b828c0ab0ea593a1ea7c094b141b14cbaaec2d62" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6ac8995ead1f084a8dea1e65f194d0973800c7f571f6edd70adf06ecf77084" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158" + +[[package]] +name = "web-sys" +version = "0.3.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222b1ef9334f92a21d3fb53dc3fd80f30836959a90f9274a626d7e06315ba3c3" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..5044dac --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] + +members = [ + "aoc-solver", + "aoc-solutions" +] + +[profile.release] +lto = "thin" diff --git a/aoc-solutions/.gitignore b/aoc-solutions/.gitignore new file mode 100644 index 0000000..96ef6c0 --- /dev/null +++ b/aoc-solutions/.gitignore @@ -0,0 +1,2 @@ +/target +Cargo.lock diff --git a/aoc-solutions/Cargo.toml b/aoc-solutions/Cargo.toml new file mode 100644 index 0000000..37c54a7 --- /dev/null +++ b/aoc-solutions/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "aoc-solutions" +version = "0.1.0" +authors = ["Hans Christian Schmitz"] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +regex = "1.4.2" +serde = { version = "1.0.118", features = ["derive"] } +envy = "0.4.1" +validator = { version = "0.12", features = ["derive"] } +itertools = "0.9.0" +ndarray = "0.14.0" +aljabar = "1.0.2" + +[dev-dependencies] +criterion = { version = "0.3", features = ["real_blackbox"] } +indoc = "1.0" + +[lib] +bench = false + +[[bench]] +name = "benchmark" +harness = false diff --git a/aoc-solutions/benches/benchmark.rs b/aoc-solutions/benches/benchmark.rs new file mode 100644 index 0000000..8714948 --- /dev/null +++ b/aoc-solutions/benches/benchmark.rs @@ -0,0 +1,91 @@ +use std::fs; +use std::io::{BufRead, BufReader}; +use std::path::Path; + +use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion}; + +use aoc_solutions::*; + +fn read_input_lines(qualified_puzzle_id: &str) -> Vec { + let input_path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join(&format!("../res/input_{}.txt", qualified_puzzle_id)); + + BufReader::new( + fs::OpenOptions::new() + .read(true) + .open(&input_path) + .expect(&format!( + "Could not open input file {:?} for reading", + &input_path + )), + ) + .lines() + .map(|l| l.expect("Error occurred while reading lines from input")) + .collect() +} + +macro_rules! bench_puzzles { + ($(($bench_fn:ident, $sol1_fn:path, $sol2_fn:path, $day:expr)),+) => { + $( + pub fn $bench_fn(c: &mut Criterion) { + let mut group = + c.benchmark_group(&format!("day {:02}", $day)); + + let input_lines = read_input_lines(&format!( + "day{:02}", + $day + )); + + group.bench_function( + "puzzle 1", + |b| b.iter_batched(|| { + input_lines.clone().into_iter() + }, |input| { + $sol1_fn(black_box(input)) + }, BatchSize::SmallInput), + ); + + group.bench_function( + "puzzle 2", + |b| b.iter_batched(|| { + input_lines.clone().into_iter() + }, |input| { + $sol2_fn(black_box(input)) + }, BatchSize::SmallInput), + ); + + group.finish(); + } + )+ + }; +} + +bench_puzzles!( + (bench_day01, day01::solve_puzzle1, day01::solve_puzzle2, 1), + (bench_day02, day02::solve_puzzle1, day02::solve_puzzle2, 2), + (bench_day03, day03::solve_puzzle1, day03::solve_puzzle2, 3), + (bench_day04, day04::solve_puzzle1, day04::solve_puzzle2, 4), + (bench_day05, day05::solve_puzzle1, day05::solve_puzzle2, 5), + (bench_day06, day06::solve_puzzle1, day06::solve_puzzle2, 6), + (bench_day07, day07::solve_puzzle1, day07::solve_puzzle2, 7), + (bench_day08, day08::solve_puzzle1, day08::solve_puzzle2, 8), + (bench_day09, day09::solve_puzzle1, day09::solve_puzzle2, 9), + (bench_day10, day10::solve_puzzle1, day10::solve_puzzle2, 10), + (bench_day11, day11::solve_puzzle1, day11::solve_puzzle2, 11) +); + +criterion_group!( + benches, + bench_day01, + bench_day02, + bench_day03, + bench_day04, + bench_day05, + bench_day06, + bench_day07, + bench_day08, + bench_day09, + bench_day10, + bench_day11 +); +criterion_main!(benches); diff --git a/aoc-solutions/build.rs b/aoc-solutions/build.rs new file mode 100644 index 0000000..d6d45c4 --- /dev/null +++ b/aoc-solutions/build.rs @@ -0,0 +1,67 @@ +#![feature(format_args_capture)] + +use std::env; +use std::fs; +use std::path::Path; + +fn main() { + let out_dir = env::var_os("OUT_DIR").unwrap(); + let dest_path = Path::new(&out_dir).join("generated.rs"); + let src_dir = Path::new(&env::var_os("CARGO_MANIFEST_DIR").unwrap()).join("src"); + + let solved_days = fs::read_dir("src") + .expect("Could not read src directory") + .map(Result::unwrap) + .filter(|entry| { + entry.file_type().unwrap().is_file() + && entry.file_name().to_str().unwrap().starts_with("day") + }) + .map(|entry| entry.file_name().to_str().unwrap().to_owned()) + .filter(|name| name.starts_with("day") && name.ends_with(".rs")) + .map(|name| name[3..(name.len() - 3)].parse::().unwrap()) + .collect::>(); + + let mut source = String::new(); + + for day in solved_days.iter() { + source.push_str(&format!( + "pub mod day{day:02}{{ include!(\"{day_file}\"); }}\n", + day = day, + day_file = src_dir + .join(&format!("day{day:02}.rs", day = day)) + .to_str() + .unwrap() + )); + } + + source.push_str( + r#"pub fn solve_puzzle>(day: usize, puzzle_number: usize, input_lines: I) -> String { + #[allow(overlapping_patterns)] + match (day, puzzle_number) { +"#, + ); + + for day in solved_days.iter() { + for puzzle in 1..=2 { + source.push_str(&format!( + " ({day}, {puzzle}) => day{day:02}::solve_puzzle{puzzle}(input_lines),\n", + day = day, + puzzle = puzzle + )); + } + } + + source.push_str( + r#" (1..=25, 1..=2) => todo!("This puzzle has not yet been solved"), + (day, 1..=2) => panic!("Invalid day {}! Must be between 1 and 25", day), + (1..=25, puzzle) => panic!("Invalid puzzle number {}! Must be either 1 or 2", puzzle), + (day, puzzle) => panic!("Invalid day {} and puzzle number {}! Must be between 1 and 25 and either 1 or 2 respectively", day, puzzle), + } +} +"#, + ); + + fs::write(&dest_path, source).unwrap(); + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=src"); +} diff --git a/aoc-solutions/src/day01.rs b/aoc-solutions/src/day01.rs new file mode 100644 index 0000000..e88227e --- /dev/null +++ b/aoc-solutions/src/day01.rs @@ -0,0 +1,57 @@ +use std::convert::identity; + +pub fn solve_puzzle1>(input_lines: I) -> String { + let expenses: Vec = input_lines + .map(|l| { + l.parse::() + .expect("Input was not solely lines of integers") + }) + .collect(); + + let solution = expenses + .iter() + .enumerate() + .map(|(i, e0)| { + let mut maybe_solution = None; + for e1 in expenses.iter().skip(i) { + if e0 + e1 == 2020 { + maybe_solution = Some(e0 * e1); + break; + } + } + maybe_solution + }) + .find_map(identity) + .expect("No two expenses add up to 2020"); + + solution.to_string() +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let expenses: Vec = input_lines + .map(|l| { + l.parse::() + .expect("Input was not solely lines of integers") + }) + .collect(); + + let solution = expenses + .iter() + .enumerate() + .map(|(i, e0)| { + let mut maybe_solution = None; + 'outer: for (j, e1) in expenses.iter().skip(i).enumerate() { + for e2 in expenses.iter().skip(j) { + if e0 + e1 + e2 == 2020 { + maybe_solution = Some(e0 * e1 * e2); + break 'outer; + } + } + } + maybe_solution + }) + .find_map(identity) + .expect("No three expenses add up to 2020"); + + solution.to_string() +} diff --git a/aoc-solutions/src/day02.rs b/aoc-solutions/src/day02.rs new file mode 100644 index 0000000..30e9447 --- /dev/null +++ b/aoc-solutions/src/day02.rs @@ -0,0 +1,51 @@ +use std::lazy::SyncLazy; + +use regex::Regex; + +static PASSWORD_LIST_RE: SyncLazy = SyncLazy::new(|| { + Regex::new( + r"^(?P[0-9]+)-(?P[0-9]+) (?P[a-zA-Z]): (?P[a-zA-Z]+)$", + ).unwrap() +}); + +fn parse_input>( + input_lines: I, +) -> impl Iterator { + input_lines.map(|line| { + let caps = PASSWORD_LIST_RE + .captures(&line) + .expect("A line did not match the expected input format"); + ( + caps.name("min_usages") + .unwrap() + .as_str() + .parse::() + .unwrap(), + caps.name("max_usages") + .unwrap() + .as_str() + .parse::() + .unwrap(), + caps.name("required_letter").unwrap().as_str().to_owned(), + caps.name("password").unwrap().as_str().to_owned(), + ) + }) +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + parse_input(input_lines) + .filter(|(min_u, max_u, req_l, pw)| (*min_u..=*max_u).contains(&pw.matches(req_l).count())) + .count() + .to_string() +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + parse_input(input_lines) + .filter(|(first_pos, second_pos, req_l, pw)| { + let req_l = req_l.as_bytes()[0]; + let pw = pw.as_bytes(); + (pw[first_pos - 1] == req_l) ^ (pw[second_pos - 1] == req_l) + }) + .count() + .to_string() +} diff --git a/aoc-solutions/src/day03.rs b/aoc-solutions/src/day03.rs new file mode 100644 index 0000000..65a54f7 --- /dev/null +++ b/aoc-solutions/src/day03.rs @@ -0,0 +1,39 @@ +fn parse_input>(input_lines: I) -> Vec> { + input_lines + .map(|line| { + line.as_bytes() + .iter() + .map(|c| match c { + b'#' => true, + b'.' => false, + _ => panic!("Encountered unexpected character in input"), + }) + .collect() + }) + .collect() +} + +fn count_trees_encountered(tree_map: &Vec>, slope: (usize, usize)) -> usize { + let (dx, dy) = slope; + tree_map + .iter() + .step_by(dy) + .zip((0..).step_by(dx)) + .filter_map(|(row, x)| row[x % row.len()].then_some(())) + .count() +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let tree_map = parse_input(input_lines); + count_trees_encountered(&tree_map, (3, 1)).to_string() +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let tree_map = parse_input(input_lines); + let slopes = [(1, 1), (3, 1), (5, 1), (7, 1), (1, 2)]; + slopes + .iter() + .map(|slope| count_trees_encountered(&tree_map, *slope)) + .product::() + .to_string() +} diff --git a/aoc-solutions/src/day04.rs b/aoc-solutions/src/day04.rs new file mode 100644 index 0000000..3547805 --- /dev/null +++ b/aoc-solutions/src/day04.rs @@ -0,0 +1,95 @@ +use std::lazy::SyncLazy; + +use envy; +use itertools::Itertools; +use regex::Regex; +use serde::Deserialize; +use validator::{Validate, ValidationError}; + +static HAIR_COLOR_RE: SyncLazy = SyncLazy::new(|| Regex::new(r"^#[0-9a-f]{6}$").unwrap()); +static EYE_COLOR_RE: SyncLazy = + SyncLazy::new(|| Regex::new(r"^(amb|blu|brn|gry|grn|hzl|oth)$").unwrap()); +static PASSPORT_ID_RE: SyncLazy = SyncLazy::new(|| Regex::new(r"^[0-9]{9}$").unwrap()); + +#[derive(Debug, Deserialize, Validate)] +struct Passport { + #[serde(rename = "byr")] + #[validate(range(min = 1920, max = 2002))] + birth_year: u32, + #[serde(rename = "iyr")] + #[validate(range(min = 2010, max = 2020))] + issue_year: u32, + #[serde(rename = "eyr")] + #[validate(range(min = 2020, max = 2030))] + expiration_year: u32, + #[serde(rename = "hgt")] + #[validate(custom = "validate_height")] + height: String, + #[serde(rename = "hcl")] + #[validate(regex = "HAIR_COLOR_RE")] + hair_color: String, + #[serde(rename = "ecl")] + #[validate(regex = "EYE_COLOR_RE")] + eye_color: String, + #[serde(rename = "pid")] + #[validate(regex = "PASSPORT_ID_RE")] + passport_id: String, + #[serde(rename = "cid", default)] + country_id: Option, +} + +fn validate_height(height_str: &str) -> Result<(), ValidationError> { + let height: u32 = height_str[..height_str.len() - 2] + .parse() + .map_err(|_| ValidationError::new("invalid_height"))?; + + if height_str.ends_with("cm") && height >= 150 && height <= 193 { + Ok(()) + } else if height_str.ends_with("in") && height >= 59 && height <= 76 { + Ok(()) + } else { + Err(ValidationError::new("invalid_height")) + } +} + +fn parse_input>( + input_lines: I, +) -> impl Iterator> { + input_lines + .coalesce(|current, next| { + let c_blank = current.trim().is_empty(); + let n_blank = next.trim().is_empty(); + match (c_blank, n_blank) { + (false, false) => Ok(format!("{} {}", current.trim(), next.trim())), + (false, true) => Err((current, next)), + (true, false) => Ok(next.trim().to_owned()), + (true, true) => Ok("".to_string()), + } + }) + .filter(|s| !s.trim().is_empty()) + .map(|s| { + envy::from_iter(s.split_whitespace().map(|field_str| { + let mut field_parts = field_str.split(':'); + let field_name = field_parts.next().unwrap(); + let field_value = field_parts.next().unwrap(); + + (field_name.to_owned(), field_value.to_owned()) + })) + .map_err(|_| s) + }) +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let passports = parse_input(input_lines); + passports.filter(Result::is_ok).count().to_string() +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let passports = parse_input(input_lines); + passports + .filter(Result::is_ok) + .map(Result::unwrap) + .filter(|pp| pp.validate().is_ok()) + .count() + .to_string() +} diff --git a/aoc-solutions/src/day05.rs b/aoc-solutions/src/day05.rs new file mode 100644 index 0000000..a2430a9 --- /dev/null +++ b/aoc-solutions/src/day05.rs @@ -0,0 +1,117 @@ +use itertools::Itertools; + +#[derive(Debug, Copy, Clone)] +enum RowPart { + Front, + Back, +} + +#[derive(Debug, Copy, Clone)] +enum ColPart { + Left, + Right, +} + +fn parse_input>( + input_lines: I, +) -> impl Iterator { + input_lines.map(|line| { + let (row_part_str, col_part_str) = line.split_at(7); + let mut row_part = [RowPart::Front; 7]; + for (i, c) in row_part_str.as_bytes().iter().enumerate() { + row_part[i] = match c { + b'F' => RowPart::Front, + b'B' => RowPart::Back, + _ => panic!("Invalid input format"), + } + } + let mut col_part = [ColPart::Left; 3]; + for (i, c) in col_part_str.as_bytes().iter().enumerate() { + col_part[i] = match c { + b'L' => ColPart::Left, + b'R' => ColPart::Right, + _ => panic!("Invalid input format"), + } + } + (row_part, col_part) + }) +} + +fn compute_seat_details(row_part: [RowPart; 7], col_part: [ColPart; 3]) -> (u8, u8, u32) { + let row_num = { + let mut row_range = 0..128u8; + let mut level = 128 / 2; + for rp in row_part.iter() { + match rp { + RowPart::Front => row_range.end -= level, + RowPart::Back => row_range.start += level, + } + level /= 2; + } + row_range.start + }; + let col_num = { + let mut col_range = 0..8u8; + let mut level = 8 / 2; + for cp in col_part.iter() { + match cp { + ColPart::Left => col_range.end -= level, + ColPart::Right => col_range.start += level, + } + level /= 2; + } + col_range.start + }; + (row_num, col_num, row_num as u32 * 8 + col_num as u32) +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let seats = parse_input(input_lines); + seats + .map(|(row_part, col_part)| compute_seat_details(row_part, col_part)) + .map(|(_, _, seat_id)| seat_id) + .max() + .unwrap() + .to_string() +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let seats = parse_input(input_lines); + seats + .map(|(row_part, col_part)| compute_seat_details(row_part, col_part)) + .filter(|(row, _, _)| *row > 0 || *row < 127) + .map(|(_, _, id)| id) + .sorted() + .collect::>() + .windows(2) + .filter_map(|window| match window { + &[current_id, next_id] if current_id + 1 < next_id => Some((current_id + 1)..next_id), + _ => None, + }) + .flatten() + .next() + .unwrap() + .to_string() +} + +// pub fn solve_puzzle2>(input_lines: I) -> String { +// let seats = parse_input(input_lines); +// let mut last_id = 0; +// for (_, _, id) in seats +// .map(|(row_part, col_part)| compute_seat_details(row_part, col_part)) +// .sorted_by_key(|(_, _, id)| *id) +// { +// if last_id + 1 < id { +// for missing_id in (last_id + 1)..id { +// println!( +// "row: {}, col: {}, id: {}", +// missing_id / 8, +// missing_id % 8, +// missing_id +// ); +// } +// } +// last_id = id; +// } +// "one of the above".to_owned() +// } diff --git a/aoc-solutions/src/day06.rs b/aoc-solutions/src/day06.rs new file mode 100644 index 0000000..0f0690b --- /dev/null +++ b/aoc-solutions/src/day06.rs @@ -0,0 +1,52 @@ +use std::collections::HashSet; + +use itertools::Itertools; + +fn parse_input>( + input_lines: I, +) -> impl Iterator>> { + input_lines.batching(|it| { + let group_customs_decls = it + .take_while(|line| !line.is_empty()) + .map(|person_customs_decl| person_customs_decl.chars().collect()) + .collect::>>(); + + if group_customs_decls.is_empty() { + None + } else { + Some(group_customs_decls) + } + }) +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let groups_customs_decls = parse_input(input_lines); + groups_customs_decls + .map(|mut group_customs_decls| { + group_customs_decls + .iter_mut() + .fold_first(|acc, person_customs_decl| { + acc.extend(person_customs_decl.iter()); + acc + }) + .map_or(0, |group_customs_decl| group_customs_decl.len()) + }) + .sum::() + .to_string() +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let groups_customs_decls = parse_input(input_lines); + groups_customs_decls + .map(|mut group_customs_decls| { + group_customs_decls + .iter_mut() + .fold_first(|acc, person_customs_decl| { + acc.retain(|c| person_customs_decl.contains(c)); + acc + }) + .map_or(0, |group_customs_decl| group_customs_decl.len()) + }) + .sum::() + .to_string() +} diff --git a/aoc-solutions/src/day07.rs b/aoc-solutions/src/day07.rs new file mode 100644 index 0000000..e93c101 --- /dev/null +++ b/aoc-solutions/src/day07.rs @@ -0,0 +1,114 @@ +use std::collections::HashMap; +use std::lazy::SyncLazy; + +use regex::Regex; + +static CONTAINER_BAG_RE: SyncLazy = + SyncLazy::new(|| Regex::new(r"^(?P[a-z ]+) bags contain").unwrap()); +static CONTAINED_BAGS_RE: SyncLazy = + SyncLazy::new(|| Regex::new(r"(?P[0-9]+) (?P[a-z ]+) bags?(?:,|.)").unwrap()); + +fn parse_input>( + input_lines: I, +) -> HashMap> { + let mut bags_contains_map = HashMap::new(); + + input_lines.for_each(|line| { + let container_name = CONTAINER_BAG_RE + .captures(&line) + .expect("Line does not match expected format") + .name("name") + .unwrap() + .as_str(); + + if !bags_contains_map.contains_key(container_name) { + bags_contains_map.insert(container_name.to_owned(), Vec::new()); + } + + CONTAINED_BAGS_RE.captures_iter(&line).for_each(|caps| { + let count: usize = caps.name("count").unwrap().as_str().parse().unwrap(); + let bag_name = caps.name("name").unwrap().as_str(); + + if !bags_contains_map.contains_key(bag_name) { + bags_contains_map.insert(bag_name.to_owned(), Vec::new()); + } + + bags_contains_map + .get_mut(container_name) + .unwrap() + .push((count, bag_name.to_owned())) + }); + }); + + bags_contains_map +} + +fn can_contain_bag( + bags_contains_map: &HashMap>, + container_bag_name: &str, + bag_name: &str, +) -> bool { + let contained_bags = bags_contains_map.get(container_bag_name).unwrap(); + if contained_bags + .iter() + .any(|(_, contained_bag)| contained_bag == bag_name) + { + true + } else { + contained_bags + .iter() + .any(|(_, contained_bag)| can_contain_bag(bags_contains_map, contained_bag, bag_name)) + } +} + +fn count_contained_bags( + bags_contains_map: &HashMap>, + container_bag_name: &str, +) -> usize { + let mut computed_counts = HashMap::new(); + count_contained_bags_helper(&mut computed_counts, bags_contains_map, container_bag_name) +} + +fn count_contained_bags_helper( + computed_counts: &mut HashMap, + bags_contains_map: &HashMap>, + container_bag_name: &str, +) -> usize { + let contained_bags_count = bags_contains_map + .get(container_bag_name) + .unwrap() + .iter() + .map(|(count, contained_bag)| { + count + + count + * computed_counts + .get(contained_bag) + .map(|contained_count| *contained_count) + .unwrap_or_else(|| { + count_contained_bags_helper( + computed_counts, + bags_contains_map, + contained_bag, + ) + }) + }) + .sum(); + computed_counts.insert(container_bag_name.to_owned(), contained_bags_count); + contained_bags_count +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let bags_contains_map = parse_input(input_lines); + bags_contains_map + .keys() + .filter(|container_bag_name| { + can_contain_bag(&bags_contains_map, container_bag_name, "shiny gold") + }) + .count() + .to_string() +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let bags_contains_map = parse_input(input_lines); + count_contained_bags(&bags_contains_map, "shiny gold").to_string() +} diff --git a/aoc-solutions/src/day08.rs b/aoc-solutions/src/day08.rs new file mode 100644 index 0000000..b694f98 --- /dev/null +++ b/aoc-solutions/src/day08.rs @@ -0,0 +1,133 @@ +use std::error::Error; +use std::fmt::Display; +use std::lazy::SyncLazy; +use std::str::FromStr; + +use regex::Regex; + +static INSTRUCTION_RE: SyncLazy = SyncLazy::new(|| { + Regex::new(r"^(?Pacc|jmp|nop) (?P[+-][0-9]+)$").unwrap() +}); + +#[derive(Debug, Copy, Clone)] +enum Instruction { + Accumulate { delta: isize }, + Jump { offset: isize }, + NoOperation { argument: isize }, +} + +impl FromStr for Instruction { + type Err = String; + + fn from_str(s: &str) -> Result { + let caps = INSTRUCTION_RE + .captures(s) + .ok_or(format!("Invalid instruction `{}`", s))?; + let instruction_name = caps.name("instruction").unwrap().as_str(); + let argument: isize = caps.name("argument").unwrap().as_str().parse().unwrap(); + + Ok(match instruction_name { + "acc" => Self::Accumulate { delta: argument }, + "jmp" => Self::Jump { offset: argument }, + "nop" => Self::NoOperation { argument }, + _ => unreachable!(), + }) + } +} + +fn parse_input>(input_lines: I) -> Vec { + input_lines.map(|line| line.parse().unwrap()).collect() +} + +#[derive(Debug)] +enum ProgramExecutionError { + EncounteredLoop { accumulator_value: isize }, + InvalidJump, +} + +impl Display for ProgramExecutionError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } +} +impl Error for ProgramExecutionError {} + +fn execute_program(program: &Vec) -> Result { + let mut instruction_visited = vec![false; program.len()]; + let mut program_counter = 0; + let mut accumulator_value = 0; + while program_counter < program.len() { + if instruction_visited[program_counter] { + Err(ProgramExecutionError::EncounteredLoop { accumulator_value })?; + } + let instruction = program[program_counter]; + instruction_visited[program_counter] = true; + match instruction { + Instruction::Accumulate { delta } => { + accumulator_value += delta; + program_counter += 1; + } + Instruction::Jump { offset } => { + if offset >= 0 { + program_counter += offset as usize; + } else { + program_counter = program_counter + .checked_sub((-offset) as usize) + .ok_or(ProgramExecutionError::InvalidJump)?; + } + } + Instruction::NoOperation { .. } => { + program_counter += 1; + } + } + } + + if program_counter > program.len() { + Err(ProgramExecutionError::InvalidJump)?; + } + + Ok(accumulator_value) +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let program = parse_input(input_lines); + + match execute_program(&program) { + Err(ProgramExecutionError::EncounteredLoop { accumulator_value }) => { + accumulator_value.to_string() + } + _ => panic!("Program does not loop infinitely"), + } +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let program = parse_input(input_lines); + let mut modified_program = program.clone(); + + let nops_or_jmps_indices = program + .iter() + .enumerate() + .filter_map(|(i, instr)| match instr { + Instruction::Jump { .. } | Instruction::NoOperation { .. } => Some(i), + _ => None, + }); + let mut last_modified_instruction = None; + for i in nops_or_jmps_indices { + if let Some(j) = last_modified_instruction { + modified_program[j] = program[j]; + } + + modified_program[i] = match program[i] { + Instruction::Jump { offset } => Instruction::NoOperation { argument: offset }, + Instruction::NoOperation { argument } => Instruction::Jump { offset: argument }, + _ => unreachable!(), + }; + last_modified_instruction = Some(i); + + if let Ok(accumulator_value) = execute_program(&modified_program) { + return accumulator_value.to_string(); + } + } + + panic!("No modification of one JMP / NOP can fix this program") +} diff --git a/aoc-solutions/src/day09.rs b/aoc-solutions/src/day09.rs new file mode 100644 index 0000000..48afc71 --- /dev/null +++ b/aoc-solutions/src/day09.rs @@ -0,0 +1,64 @@ +use std::convert::TryInto; + +fn parse_input>(input_lines: I) -> Vec { + input_lines.map(|line| line.parse().unwrap()).collect() +} + +fn find_first_invalid(xmas_numbers: &Vec) -> Option<(usize, usize)> { + xmas_numbers + .windows(26) + .filter(|window| window.len() == 26) + .enumerate() + .find_map(|(i, window)| { + let prev_25: [usize; 25] = window[..25].try_into().unwrap(); + let current = window[25]; + + for (j, a) in prev_25[..prev_25.len() - 1].iter().enumerate() { + for b in prev_25[(j + 1)..].iter() { + if a + b == current { + return None; + } + } + } + Some((i + 25, current)) + }) +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let xmas_numbers = parse_input(input_lines); + + let (_first_match_i, first_match) = find_first_invalid(&xmas_numbers).unwrap(); + + first_match.to_string() +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let xmas_numbers = parse_input(input_lines); + + let (_first_match_i, first_match) = find_first_invalid(&xmas_numbers).unwrap(); + + let mut solution = None; + + for (i, a) in xmas_numbers[..(xmas_numbers.len() - 1)].iter().enumerate() { + let mut subset_sum = *a; + let mut min = *a; + let mut max = *a; + + for b in xmas_numbers[(i + 1)..].iter() { + subset_sum += b; + if *b < min { + min = *b; + } + if *b > max { + max = *b; + } + + if subset_sum == first_match { + solution = Some(min + max); + break; + } + } + } + + solution.unwrap().to_string() +} diff --git a/aoc-solutions/src/day10.rs b/aoc-solutions/src/day10.rs new file mode 100644 index 0000000..dc72b63 --- /dev/null +++ b/aoc-solutions/src/day10.rs @@ -0,0 +1,59 @@ +fn parse_input>(input_lines: I) -> Vec { + input_lines.map(|line| line.parse().unwrap()).collect() +} + +pub fn compute_joltage_deltas<'a>( + charger_ratings: &'a Vec, +) -> impl Iterator + 'a { + charger_ratings + .iter() + .zip(charger_ratings[1..].iter()) + .map(|(a, b)| b - a) +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let mut charger_ratings = parse_input(input_lines); + + charger_ratings.push(0); + charger_ratings.push(charger_ratings.iter().max().unwrap() + 3); + + charger_ratings.sort(); + + let (num_ones, num_threes) = compute_joltage_deltas(&charger_ratings).fold( + (0, 0), + |(num_ones, num_threes), dj| match dj { + 1 => (num_ones + 1, num_threes), + 3 => (num_ones, num_threes + 1), + _ => (num_ones, num_threes), + }, + ); + + (num_ones * num_threes).to_string() +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let mut charger_ratings = parse_input(input_lines); + + charger_ratings.push(0); + charger_ratings.push(charger_ratings.iter().max().unwrap() + 3); + + charger_ratings.sort(); + + let mut num_cfgs = [1, 0, 0]; + for dj in compute_joltage_deltas(&charger_ratings) { + match dj { + 1 => { + num_cfgs = [ + num_cfgs[0] + num_cfgs[1] + num_cfgs[2], + num_cfgs[0], + num_cfgs[1], + ] + } + 2 => num_cfgs = [num_cfgs[0] + num_cfgs[1], 0, num_cfgs[0]], + 3 => num_cfgs = [num_cfgs[0], 0, 0], + _ => unreachable!("Unexpected joltage difference > 3 or < 1"), + } + } + + num_cfgs.iter().sum::().to_string() +} diff --git a/aoc-solutions/src/day11.rs b/aoc-solutions/src/day11.rs new file mode 100644 index 0000000..6106405 --- /dev/null +++ b/aoc-solutions/src/day11.rs @@ -0,0 +1,390 @@ +use std::fmt::{self, Display}; + +use ndarray::Array2; + +#[derive(Debug, Eq, PartialEq, Copy, Clone)] +enum SeatState { + Empty, + Occupied, + NotPresent, // No seat there, only floor +} + +impl Display for SeatState { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { + write!( + f, + "{}", + match self { + Self::Empty => "L", + Self::Occupied => "#", + Self::NotPresent => ".", + } + ) + } +} + +fn parse_input>(input_lines: I) -> Array2 { + let mut num_columns = None; + let seat_states_raw = input_lines + .flat_map(|line| { + let current_line_length = line.len(); + match num_columns.map(|nc| nc == current_line_length) { + None => num_columns = Some(current_line_length), + Some(true) => (), + Some(false) => panic!("Not all lines are of the same length"), + } + line.as_bytes().to_owned().into_iter().map(|c| match c { + b'L' => SeatState::Empty, + b'#' => SeatState::Occupied, + b'.' => SeatState::NotPresent, + _ => panic!("Encountered unexpected character in input"), + }) + }) + .collect::>(); + + let num_columns = num_columns.unwrap(); + + Array2::from_shape_vec( + (seat_states_raw.len() / num_columns, num_columns), + seat_states_raw, + ) + .unwrap() +} + +#[inline] +fn checked_add(a: usize, b: isize) -> Option { + if b >= 0 { + a.checked_add(b as usize) + } else { + a.checked_sub((-b) as usize) + } +} + +const NEIGHBORHOOD: [(isize, isize); 8] = [ + (-1, -1), + (0, -1), + (1, -1), + (-1, 0), + (1, 0), + (-1, 1), + (0, 1), + (1, 1), +]; + +struct StateUpdateIter<'a> { + previous_state: &'a Array2, + x: usize, + y: usize, +} + +impl<'a> StateUpdateIter<'a> { + pub fn new(current_state: &'a Array2) -> Self { + Self { + previous_state: current_state, + x: 0, + y: 0, + } + } +} + +impl<'a> Iterator for StateUpdateIter<'a> { + type Item = SeatState; + + fn next(&mut self) -> std::option::Option<::Item> { + if self.y < self.previous_state.nrows() && self.x < self.previous_state.ncols() { + let occupied_neighboring_seats = NEIGHBORHOOD + .iter() + .filter_map(|(dx, dy)| { + self.previous_state + .get((checked_add(self.y, *dy)?, checked_add(self.x, *dx)?)) + }) + .filter(|state| **state == SeatState::Occupied) + .count(); + + let old_state = self.previous_state[[self.y, self.x]]; + let new_state = match (old_state, occupied_neighboring_seats) { + (SeatState::Empty, 0) => SeatState::Occupied, + (SeatState::Occupied, 4..=8) => SeatState::Empty, + (old_state, _) => old_state, + }; + + if self.x + 1 == self.previous_state.ncols() { + self.x = 0; + self.y += 1; + } else { + self.x += 1; + } + + Some(new_state) + } else { + None + } + } +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let mut seat_states = parse_input(input_lines); + + loop { + let previous_states = seat_states.clone(); + seat_states + .iter_mut() + .zip(StateUpdateIter::new(&previous_states)) + .for_each(|(target, src)| *target = src); + + if seat_states == previous_states { + break; + } + } + + seat_states + .iter() + .filter(|s| **s == SeatState::Occupied) + .count() + .to_string() +} + +struct TweakedStateUpdateIter<'a> { + previous_state: &'a Array2, + x: usize, + y: usize, +} + +impl<'a> TweakedStateUpdateIter<'a> { + pub fn new(current_state: &'a Array2) -> Self { + Self { + previous_state: current_state, + x: 0, + y: 0, + } + } +} + +impl<'a> Iterator for TweakedStateUpdateIter<'a> { + type Item = SeatState; + + fn next(&mut self) -> std::option::Option<::Item> { + if self.y < self.previous_state.nrows() && self.x < self.previous_state.ncols() { + let occupied_neighboring_seats = NEIGHBORHOOD + .iter() + .filter_map(|(dx, dy)| { + itertools::iterate((*dx, *dy), |(dx2, dy2)| (*dx2 + dx, *dy2 + dy)) + .map(|(dx, dy)| { + self.previous_state + .get((checked_add(self.y, dy)?, checked_add(self.x, dx)?)) + }) + .find(|maybe_state| *maybe_state != Some(&SeatState::NotPresent)) + .unwrap() + }) + .filter(|state| **state == SeatState::Occupied) + .count(); + + let old_state = self.previous_state[[self.y, self.x]]; + let new_state = match (old_state, occupied_neighboring_seats) { + (SeatState::Empty, 0) => SeatState::Occupied, + (SeatState::Occupied, 5..=8) => SeatState::Empty, + (old_state, _) => old_state, + }; + + if self.x + 1 == self.previous_state.ncols() { + self.x = 0; + self.y += 1; + } else { + self.x += 1; + } + + Some(new_state) + } else { + None + } + } +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let mut seat_states = parse_input(input_lines); + + loop { + let previous_states = seat_states.clone(); + seat_states + .iter_mut() + .zip(TweakedStateUpdateIter::new(&previous_states)) + .for_each(|(target, src)| *target = src); + + if seat_states == previous_states { + break; + } + } + + seat_states + .iter() + .filter(|s| **s == SeatState::Occupied) + .count() + .to_string() +} + +#[cfg(test)] +mod tests { + use super::*; + + use std::lazy::SyncLazy; + + use indoc::indoc; + use itertools::Itertools; + + const STATE_STRS: [&str; 6] = [ + indoc! {" + L.LL.LL.LL + LLLLLLL.LL + L.L.L..L.. + LLLL.LL.LL + L.LL.LL.LL + L.LLLLL.LL + ..L.L..... + LLLLLLLLLL + L.LLLLLL.L + L.LLLLL.LL + "}, + indoc! {" + #.##.##.## + #######.## + #.#.#..#.. + ####.##.## + #.##.##.## + #.#####.## + ..#.#..... + ########## + #.######.# + #.#####.## + "}, + indoc! {" + #.LL.L#.## + #LLLLLL.L# + L.L.L..L.. + #LLL.LL.L# + #.LL.LL.LL + #.LLLL#.## + ..L.L..... + #LLLLLLLL# + #.LLLLLL.L + #.#LLLL.## + "}, + indoc! {" + #.##.L#.## + #L###LL.L# + L.#.#..#.. + #L##.##.L# + #.##.LL.LL + #.###L#.## + ..#.#..... + #L######L# + #.LL###L.L + #.#L###.## + "}, + indoc! {" + #.#L.L#.## + #LLL#LL.L# + L.L.L..#.. + #LLL.##.L# + #.LL.LL.LL + #.LL#L#.## + ..L.L..... + #L#LLLL#L# + #.LLLLLL.L + #.#L#L#.## + "}, + indoc! {" + #.#L.L#.## + #LLL#LL.L# + L.#.L..#.. + #L##.##.L# + #.#L.LL.LL + #.#L#L#.## + ..L.L..... + #L#L##L#L# + #.LLLLLL.L + #.#L#L#.## + "}, + ]; + + static STATE_ARRAYS: SyncLazy<[Array2; 6]> = SyncLazy::new(|| { + [ + parse_input(STATE_STRS[0].lines().map(|l| l.to_owned())), + parse_input(STATE_STRS[1].lines().map(|l| l.to_owned())), + parse_input(STATE_STRS[2].lines().map(|l| l.to_owned())), + parse_input(STATE_STRS[3].lines().map(|l| l.to_owned())), + parse_input(STATE_STRS[4].lines().map(|l| l.to_owned())), + parse_input(STATE_STRS[5].lines().map(|l| l.to_owned())), + ] + }); + + #[test] + fn test_solve_puzzle1() { + assert_eq!( + solve_puzzle1(STATE_STRS[0].lines().map(|l| l.to_owned())), + String::from("37") + ); + } + + fn state_array_to_string(state_array: &Array2) -> String { + let mut state_array_string = String::new(); + state_array_string.push_str( + &state_array + .genrows() + .into_iter() + .map(|r| r.iter().map(|s| s.to_string()).join("")) + .join("\n"), + ); + state_array_string.push('\n'); + state_array_string + } + + #[test] + fn test_state_update_iter0() { + let mut current_state = STATE_ARRAYS[0].clone(); + current_state + .iter_mut() + .zip(StateUpdateIter::new(&STATE_ARRAYS[0])) + .for_each(|(target, src)| *target = src); + assert_eq!(state_array_to_string(¤t_state), STATE_STRS[1]); + } + + #[test] + fn test_state_update_iter1() { + let mut current_state = STATE_ARRAYS[1].clone(); + current_state + .iter_mut() + .zip(StateUpdateIter::new(&STATE_ARRAYS[1])) + .for_each(|(target, src)| *target = src); + assert_eq!(state_array_to_string(¤t_state), STATE_STRS[2]); + } + + #[test] + fn test_state_update_iter2() { + let mut current_state = STATE_ARRAYS[2].clone(); + current_state + .iter_mut() + .zip(StateUpdateIter::new(&STATE_ARRAYS[2])) + .for_each(|(target, src)| *target = src); + assert_eq!(state_array_to_string(¤t_state), STATE_STRS[3]); + } + + #[test] + fn test_state_update_iter3() { + let mut current_state = STATE_ARRAYS[3].clone(); + current_state + .iter_mut() + .zip(StateUpdateIter::new(&STATE_ARRAYS[3])) + .for_each(|(target, src)| *target = src); + assert_eq!(state_array_to_string(¤t_state), STATE_STRS[4]); + } + + #[test] + fn test_state_update_iter4() { + let mut current_state = STATE_ARRAYS[4].clone(); + current_state + .iter_mut() + .zip(StateUpdateIter::new(&STATE_ARRAYS[4])) + .for_each(|(target, src)| *target = src); + assert_eq!(state_array_to_string(¤t_state), STATE_STRS[5]); + } +} diff --git a/aoc-solutions/src/day12.rs b/aoc-solutions/src/day12.rs new file mode 100644 index 0000000..9c52213 --- /dev/null +++ b/aoc-solutions/src/day12.rs @@ -0,0 +1,215 @@ +use std::convert::{TryFrom, TryInto}; +use std::default::Default; +use std::str::FromStr; + +use aljabar::{InnerSpace, Orthonormal, Point2, Rotation, Vector2}; + +#[derive(Debug, Clone, Copy)] +struct Ship { + /// An angle in radians, where 0 is east. A positive value implies a CCW-rotation. + facing_direction: f64, + position: Point2, +} + +impl Ship { + pub fn exec_instruction(&mut self, nav_instruction: NavInstruction) { + match nav_instruction { + NavInstruction::Move { + direction, + distance, + } => self.move_in_direction(distance, direction), + NavInstruction::Turn { direction, angle } => { + self.facing_direction += match direction { + TurnDirection::Left => angle, + TurnDirection::Right => -angle, + } + } + } + } + + fn move_in_direction(&mut self, distance: f64, direction: MoveDirection) { + let move_dir_radians = match direction { + MoveDirection::North => 90f64.to_radians(), + MoveDirection::East => 0f64, + MoveDirection::South => (-90f64).to_radians(), + MoveDirection::West => 180f64.to_radians(), + MoveDirection::Forward => self.facing_direction, + }; + + self.position = self.position + + Orthonormal::from(move_dir_radians).rotate_vector(Vector2::from([distance, 0.0])); + } +} + +impl Default for Ship { + fn default() -> Self { + Self { + facing_direction: 0.0, + position: Point2::from([0.0, 0.0]), + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum MoveDirection { + North, + East, + South, + West, + Forward, +} + +impl TryFrom for MoveDirection { + type Error = &'static str; + + fn try_from(direction_char_byte: u8) -> Result { + Ok(match direction_char_byte { + b'N' => MoveDirection::North, + b'E' => MoveDirection::East, + b'S' => MoveDirection::South, + b'W' => MoveDirection::West, + b'F' => MoveDirection::Forward, + _ => Err("Invalid move direction character byte")?, + }) + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum TurnDirection { + Left, + Right, +} + +impl TryFrom for TurnDirection { + type Error = &'static str; + + fn try_from(direction_char_byte: u8) -> Result { + Ok(match direction_char_byte { + b'L' => TurnDirection::Left, + b'R' => TurnDirection::Right, + _ => Err("Invalid turn direction character byte")?, + }) + } +} + +#[derive(Debug, Clone, Copy, PartialEq)] +enum NavInstruction { + Move { + direction: MoveDirection, + distance: f64, + }, + Turn { + direction: TurnDirection, + /// An angle in radians, where 0 is east. A positive value implies a CCW-rotation. + angle: f64, + }, +} + +impl FromStr for NavInstruction { + type Err = &'static str; + + fn from_str(nav_instruction_str: &str) -> std::result::Result::Err> { + Ok( + if let Ok(move_dir) = nav_instruction_str.as_bytes()[0].try_into() { + Self::Move { + direction: move_dir, + distance: nav_instruction_str[1..] + .parse() + .map_err(|_| "Invalid move instruction str")?, + } + } else if let Ok(turn_dir) = nav_instruction_str.as_bytes()[0].try_into() { + Self::Turn { + direction: turn_dir, + angle: nav_instruction_str[1..] + .parse::() + .map_err(|_| "Invalid turn instruction str")? + .to_radians(), + } + } else { + Err("Invalid navigation instruction str")? + }, + ) + } +} + +fn parse_input>(input_lines: I) -> impl Iterator { + input_lines.map(|line| line.parse().unwrap()) +} + +pub fn solve_puzzle1>(input_lines: I) -> String { + let nav_instructions = parse_input(input_lines); + + let final_pos = nav_instructions + .fold(Ship::default(), |mut ship, nav_instruction| { + ship.exec_instruction(nav_instruction); + ship + }) + .position; + (final_pos.x().abs() + final_pos.y().abs()).to_string() +} + +#[derive(Debug, Clone, Copy)] +struct ShipV2 { + /// An angle in radians, where 0 is east. A positive value implies a CCW-rotation. + position: Point2, + waypoint_rel_pos: Vector2, +} + +impl ShipV2 { + pub fn exec_instruction(&mut self, nav_instruction: NavInstruction) { + match nav_instruction { + NavInstruction::Move { + direction: MoveDirection::Forward, + distance, + } => { + self.position = self.position + + self.waypoint_rel_pos / self.waypoint_rel_pos.magnitude2() * distance + } + NavInstruction::Move { + direction, + distance, + } => self.move_waypoint(distance, direction), + NavInstruction::Turn { direction, angle } => { + self.rotate_waypoint_around_ship(match direction { + TurnDirection::Left => angle, + TurnDirection::Right => -angle, + }) + } + } + } + + fn rotate_waypoint_around_ship(&mut self, angle_rad: f64) { + self.waypoint_rel_pos = Orthonormal::from(angle_rad).rotate_vector(self.waypoint_rel_pos); + } + + fn move_waypoint(&mut self, distance: f64, direction: MoveDirection) { + self.waypoint_rel_pos += match direction { + MoveDirection::North => Vector2::from([0.0, distance]), + MoveDirection::East => Vector2::from([distance, 0.0]), + MoveDirection::South => Vector2::from([0.0, -distance]), + MoveDirection::West => Vector2::from([-distance, 0.0]), + MoveDirection::Forward => panic!("Cannot move waypoint forward"), + }; + } +} + +impl Default for ShipV2 { + fn default() -> Self { + Self { + position: Point2::from([0.0, 0.0]), + waypoint_rel_pos: Vector2::from([10.0, 1.0]), + } + } +} + +pub fn solve_puzzle2>(input_lines: I) -> String { + let nav_instructions = parse_input(input_lines); + + let final_pos = nav_instructions + .fold(ShipV2::default(), |mut ship, nav_instruction| { + ship.exec_instruction(nav_instruction); + ship + }) + .position; + (final_pos.x().abs() + final_pos.y().abs()).to_string() +} diff --git a/aoc-solutions/src/lib.rs b/aoc-solutions/src/lib.rs new file mode 100644 index 0000000..7183b23 --- /dev/null +++ b/aoc-solutions/src/lib.rs @@ -0,0 +1,9 @@ +#![feature( + bool_to_option, + once_cell, + iterator_fold_self, + half_open_range_patterns, + exclusive_range_pattern +)] + +include!(concat!(env!("OUT_DIR"), "/generated.rs")); diff --git a/aoc-solver/.gitignore b/aoc-solver/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/aoc-solver/.gitignore @@ -0,0 +1 @@ +/target diff --git a/aoc-solver/Cargo.toml b/aoc-solver/Cargo.toml new file mode 100644 index 0000000..cd0eab0 --- /dev/null +++ b/aoc-solver/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "aoc-solver" +version = "0.1.0" +authors = ["Hans Christian Schmitz"] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = "3.0.0-beta.2" +rayon = "1.5.0" +regex = "1.4.2" +serde = { version = "1.0.118", features = ["derive"] } +envy = "0.4.1" +validator = { version = "0.12", features = ["derive"] } +itertools = "0.9.0" +aoc-solutions = { path = "../aoc-solutions" } diff --git a/aoc-solver/src/main.rs b/aoc-solver/src/main.rs new file mode 100644 index 0000000..2b15d8f --- /dev/null +++ b/aoc-solver/src/main.rs @@ -0,0 +1,61 @@ +#![feature(bool_to_option, once_cell, iterator_fold_self)] + +use std::fs; +use std::io::{self, BufRead, BufReader}; +use std::path::{Path, PathBuf}; + +use clap::{crate_authors, crate_version, Clap}; + +use aoc_solutions::*; + +fn open_input_reader>(path_or_dash: P) -> io::Result> { + let path_or_dash = path_or_dash.as_ref(); + if path_or_dash.as_os_str() == "-" { + Ok(Box::new(BufReader::new(io::stdin()))) + } else { + fs::OpenOptions::new() + .read(true) + .open(path_or_dash) + .map(BufReader::new) + .map(Box::new) + .map(|reader| reader as Box) + } +} + +fn is_valid_day(v: &str) -> Result<(), String> { + v.parse::() + .ok() + .and_then(|d| (1..25).contains(&d).then_some(())) + .ok_or("Not a valid day number (between 1 and 25)".to_owned()) +} + +#[derive(Debug, Clap)] +#[clap(version = crate_version!(), author = crate_authors!())] +struct Options { + /// Path to the file containing the input or '-' for stdin. + #[clap(short, long, parse(from_os_str), default_value = "-")] + input: PathBuf, + /// Number of the day the puzzles of which should be used + #[clap(validator(is_valid_day))] + day: usize, + /// Number of the puzzle which should be used from the given day + #[clap(possible_values = &["1", "2"])] + puzzle_number: usize, +} + +fn main() { + let opts = Options::parse(); + + let input_reader = + open_input_reader(opts.input).expect("Failed to open input file for reading"); + let input_lines = input_reader + .lines() + .map(|l| l.expect("Error occurred while reading lines from input")); + + let solution = solve_puzzle(opts.day, opts.puzzle_number, input_lines); + + println!( + "The solution to puzzle {} of day {} is \"{}\"", + opts.puzzle_number, opts.day, solution + ) +} diff --git a/res/input_K_day10.txt b/res/input_K_day10.txt new file mode 100644 index 0000000..cc4a600 --- /dev/null +++ b/res/input_K_day10.txt @@ -0,0 +1,94 @@ +71 +30 +134 +33 +51 +115 +122 +38 +61 +103 +21 +12 +44 +129 +29 +89 +54 +83 +96 +91 +133 +102 +99 +52 +144 +82 +22 +68 +7 +15 +93 +125 +14 +92 +1 +146 +67 +132 +114 +59 +72 +107 +34 +119 +136 +60 +20 +53 +8 +46 +55 +26 +126 +77 +65 +78 +13 +108 +142 +27 +75 +110 +90 +35 +143 +86 +116 +79 +48 +113 +101 +2 +123 +58 +19 +76 +16 +66 +135 +64 +28 +9 +6 +100 +124 +47 +109 +23 +139 +145 +5 +45 +106 +41 diff --git a/res/input_day01.txt b/res/input_day01.txt new file mode 100644 index 0000000..8fba051 --- /dev/null +++ b/res/input_day01.txt @@ -0,0 +1,200 @@ +1939 +1585 +1712 +1600 +1370 +1447 +1247 +1446 +1323 +1713 +1277 +1946 +1677 +1428 +1231 +1481 +1976 +1709 +1508 +1668 +1302 +77 +1351 +1605 +1999 +1982 +1583 +1756 +1957 +1624 +1745 +1938 +1784 +1403 +1642 +1691 +569 +1762 +1555 +1937 +1383 +1897 +1334 +1965 +1683 +1475 +1776 +1791 +1707 +1987 +1233 +1416 +1769 +1345 +1874 +1255 +1744 +1944 +1404 +1360 +1304 +1417 +1977 +1656 +790 +1788 +1353 +1296 +1673 +1810 +1684 +1742 +1425 +1887 +1444 +1352 +1229 +1414 +1493 +1402 +1947 +1669 +1412 +1531 +1474 +1637 +1314 +1607 +1829 +1923 +1949 +1757 +1307 +1714 +1748 +1550 +1372 +1615 +1235 +1272 +1408 +1749 +1687 +1613 +1528 +1561 +341 +1308 +1660 +1667 +1313 +1991 +1675 +1394 +1704 +1303 +1440 +1592 +1857 +1752 +1839 +1397 +1699 +1426 +1878 +1759 +1814 +1096 +372 +1596 +1500 +1774 +1627 +1696 +1851 +1020 +1819 +1292 +1616 +1672 +1279 +1543 +1526 +1682 +1568 +1582 +1921 +922 +1773 +1482 +1238 +1973 +1517 +1909 +409 +1634 +1468 +1445 +1801 +1631 +1407 +1820 +1603 +1495 +1333 +1241 +1849 +82 +1339 +1413 +90 +1662 +1291 +1740 +1340 +1365 +2003 +1546 +1621 +1650 +1518 +1807 +1382 +1433 +1968 +1940 +1986 +1437 +1651 +1237 +1862 +1409 +1200 +2002 +2009 +1735 +1487 +1706 +1643 +1505 diff --git a/res/input_day02.txt b/res/input_day02.txt new file mode 100644 index 0000000..23e2e9a --- /dev/null +++ b/res/input_day02.txt @@ -0,0 +1,1000 @@ +1-9 x: xwjgxtmrzxzmkx +4-6 r: rrrkrgr +4-5 v: vvfvvvn +5-16 m: pxmrtmbmqmcldmmm +15-16 s: bsshsszslssssslqdsss +10-12 g: gggggggggzgvg +2-7 n: dntnrng +11-14 j: xrjflbmjszzjbjjh +2-6 r: frxrrrfjnmr +6-7 h: hplhgcsphh +4-5 w: wwwwz +1-6 g: ggdggnggg +3-4 c: cccc +5-8 k: kjgmkkfwxkwqkkgfnv +14-15 h: xpwhdjhhjhrdjkhfh +6-7 g: vgggggdhgsp +1-3 r: rtdcrthphrkzxh +15-16 j: jjjjjjstjjjjhjjjjj +8-10 k: kkkkpkkqkv +1-4 s: sssssj +2-3 d: hdbmbpswddwkkr +6-7 s: ssscssnss +8-9 z: zzzzzzzftz +7-8 t: glwvkgtn +3-10 n: nnnnnnnnnnn +5-7 z: lzzzzfhj +8-9 l: llllllltn +1-2 p: dpcppp +2-5 d: hcfdltbgt +13-16 r: rrdrrqrrrrrsbrrr +7-16 l: lllltllllllllllllrll +9-14 z: vzzzpzfzdzzzzzzfczz +3-5 f: ffffb +6-8 s: csssssjrbdsgs +9-18 r: rrrrrrbrrrjzdrrrcrr +2-5 d: fdzxdj +13-14 c: cclcccccccccmc +9-10 z: zzvszszjbnzzz +5-9 s: ssqshwsss +4-11 x: hxxxxjvdxcqplp +4-6 t: mxtrtttttttttt +3-8 w: wmwwwnbmtw +5-6 x: xsczxd +2-7 w: pwvtgkwwwrpjr +7-9 w: wwwwwwwwj +3-9 h: hhhhbhhhschhh +1-4 p: tlwx +4-5 w: lhzjwwwwmv +6-7 p: ppppglprp +2-16 m: jqmmmmmzmmmmmjmbxmw +8-10 g: zhggpgrrlctggg +7-18 z: pltbcznlvtzgzczzchbz +10-11 t: jttttgtttttt +3-8 k: kkkkkkkkkkk +19-20 x: xxxxxxxxxxxxxxxxxxwr +9-16 l: llllllflllllxpllzl +10-12 m: mmjmmmmmmvms +1-4 c: cdxvxczcc +7-10 n: nnnnfnvpncn +10-17 z: zszzzrzczxzfzzzzlz +4-9 k: kkkdkkkkfk +12-13 m: mmgmmqfgmmtmm +4-6 s: tdmmcs +10-16 n: nkfpnncncnnntmtc +2-3 w: vwhwf +7-17 w: wwfwwwqhwwwwcwwww +5-8 q: tkqrtqqsqkwq +9-10 p: ptpppppppd +1-5 f: cnncnmnf +2-9 k: kkjdsnsqkgprtqb +9-11 n: nplnnnnnnnmnn +4-6 r: rrkrzrr +3-5 z: zzzzsq +17-18 r: rrrrrrrrrrrrrrrrrx +5-8 c: rcccdcclc +1-9 c: vcccccccbc +9-10 x: xxxxcbxxxm +2-5 c: cccfn +8-9 c: cccccnctc +4-8 l: flrhfzwllm +1-5 l: fllfllrklx +5-10 j: jrjkrjjjjxgjqj +5-10 v: dsxvmvvjtsc +4-6 v: bsqvdghvnzdfvjcfvvv +6-11 m: mmmmmmmmmmpm +6-9 q: qqgqkcccsgqqjspj +2-5 n: nvsrc +14-15 n: nnnnnnnnnnnbnms +3-4 m: mmbm +3-11 h: hhbhhhhhhhhhhhhhhhh +7-9 k: kkkkbknkjv +11-15 g: ggvgggfgbgvvzjgxghgg +3-4 z: zzzz +2-5 w: wwwhww +9-14 j: jjjjjjjjtjjjjw +2-4 j: jjbljsj +6-9 w: bwtkbttwqvwk +1-3 l: lllpjl +9-10 g: ggfmggggsrggggg +3-5 t: ttwzxl +5-7 k: kkwtbckkk +9-11 r: rbgrrhrrrrrr +9-12 g: ggggggsggglnggg +1-5 b: bbbwjs +6-7 m: xkjmdmm +6-8 g: gggggwgw +12-15 v: vrvvvqvvpvzvvvvrhqv +15-17 s: hsnjsrsdxpjswsxsss +9-12 r: rnhnrrsrrrrr +1-3 d: ddnd +1-11 m: mmtxkcdrvcmx +1-18 k: kxkkkskkkkkktkkmkc +5-9 h: vfxhhshhvhhbhr +2-3 k: wtrcckttcqrj +2-7 q: wnqcqqxw +1-9 s: sqsssslsssssssssss +4-6 p: mwvpppzp +1-4 v: qlvnvv +10-11 z: lzzzzzzzznt +2-14 q: qwqqqqqqqqqqqfqqr +15-20 d: dddddzddddddddlddddt +11-15 m: fvsqwbnqmbnmgcm +3-4 c: fncnfdjzcxwbpcrn +4-7 z: jsxzzszzqtwzmcznfs +5-6 x: glxxxxrxfxxwl +5-13 b: pdbvhwjwnbdwbrbbjwf +7-8 h: hhthhhvvt +8-11 f: pfffffxffpbf +5-6 n: ndtlxnnnqdmcnv +10-12 s: sssssswssdshssss +15-16 s: ssssssssssqsssss +4-5 s: sssss +3-4 g: ggggg +3-4 c: ccjv +7-12 v: rrrngfwhslsbpvbmwnn +4-10 n: nxnbnnnbxnnn +7-15 d: fggdddpgslqgdwhdndw +6-10 h: hhzzghhfdchhjnm +8-9 c: cccccccnc +9-10 h: hhhhhhhhll +2-16 w: nwfwwwzwvrbmwwww +10-13 k: kkkksjkkskqtkkmkknks +4-9 f: fffwfffbkc +4-11 v: gcfkvvvvfvv +2-5 l: llflftlmlglc +7-10 l: llldljllgsbl +10-19 g: svcsnlshppvrxzghhzg +3-8 d: dddwdzvmddd +3-5 m: kpmmjpmmmdz +13-14 n: nnnnnnnnnnnnns +3-8 b: bkbbbbbbbbbbbbbd +2-4 g: jghfggh +8-11 m: mmmmmmrmmmm +9-12 j: pbjjpjnjxjjfsjzsjps +6-7 r: rrrrrrrr +8-13 v: vvvvvvvbbvvvvvw +4-17 p: tpppppprzpspbpplppr +2-3 h: wbhhzxhllh +2-15 c: nvbcckcpccrtccwccsc +12-13 j: jjjjjjjjjjjzhj +4-10 p: dznzpnxzppl +5-8 r: jrrrsrrrrr +7-10 q: gjqjcqqqqsqfqqq +8-12 k: kkkkkkkkkkkg +3-14 m: mmtmmmmmmmmmmmmmm +3-12 t: khgttqtcltshttwqgt +14-15 b: bbbbbbbbbbbbbqb +14-15 f: fffqfmffpnffffg +5-16 j: jlghwmmrbdvdfjbj +7-8 v: vvkbvvrv +2-11 m: qmcgxcshgwmfm +11-12 m: cmmmzfmcmmzmmmmjmr +6-7 n: hnnbnnnw +4-8 m: mvdtmstm +4-7 m: bcrmmjbpmmmsdnrmm +1-4 w: wwwww +12-14 j: jjjjjjjjjjjrjhj +2-9 h: ghhczbhblx +2-11 v: vmvvvvvggvjpvchvvpc +6-7 f: ffwfflghpwfl +3-14 k: krkmjkgkzcckjbkkk +1-2 c: cfcp +15-17 z: ztzzzdzzzzzzzzzzt +4-13 p: bmrpdwphzqvppktz +4-5 j: jjvjtj +14-20 h: hvchvhhhhbhthlhhhhhh +1-3 j: kqjp +9-13 x: fsxxxkxxbpkxmhlrdtfx +13-14 w: wwpxwwwwwwgtwwcwwww +2-5 p: wppxkq +13-15 x: xxxzxxxbxxxxxxvxs +5-11 q: qvqqqqxqqqqfqqq +8-12 q: qqqqqqqvqqqq +8-10 m: mmmmmmmjmn +17-18 t: ttttrttttsttttttttt +9-13 h: hhhhhqhjlvhhqhhwh +8-9 s: ssssshsst +9-10 v: qvvtvsvcmzvvnpgvv +7-12 d: djcpndppsdddfdsdd +2-3 z: dgzwvbrzzbgw +1-4 k: kwkl +1-9 d: dkdmdsdwdzvlpv +10-11 h: hhhhhhhhhhh +9-10 f: ffffffffff +4-7 d: ssddddxp +18-19 j: jjjjjjjjjjjjjjjjjsj +7-11 m: mkmmrmmlrzsmgm +1-7 k: kkkkkkknk +4-5 w: wwwwj +6-13 s: xslmsfgsssssmslsstqd +4-5 z: zzzch +9-11 j: jjjjjjjjjjj +4-7 h: hjhhkdh +5-14 v: vvvvglvvdvvvvv +5-6 q: shqnjdqqq +1-5 q: dqqqq +5-7 z: zzznzzz +5-9 s: vwsfsxssd +4-5 f: sffffv +5-7 b: xllbbdb +1-14 j: rtzjqkpnkjlrhjcjqj +8-10 w: wwwwwwwfwxz +3-6 g: sggtlggswf +11-14 n: nnbnnncnnsgnnmknn +6-15 c: cclcnccctcrcxqmd +5-8 l: lmllxwpl +4-11 p: pppppppcpkdp +1-4 w: zwwx +1-3 g: nlfpgfzqkzn +11-12 w: vbwwgwvwrwlwwmwwwjw +4-12 j: vzfjgjrkzdrxqfh +1-2 r: frrq +1-4 k: vkkkkk +11-13 d: pndlftgdpdhld +1-4 r: prrvrrrrfrrrrr +8-9 m: fmmxmmmmmmm +1-2 x: xcpxc +4-16 n: rhbndvjnnsnfnwnnm +2-10 g: fkzwxtqmgm +11-19 p: bpppqpppppplpppphpsr +9-13 g: ggggthggggpjgqgslggq +4-5 m: mzmmxcfwmdpz +2-13 t: tttttttptttts +3-7 q: qqvqqqcqq +6-9 j: jsjjjjccjwjcjjj +7-10 r: rdlrrrrrrr +9-12 r: wrrzsrcrgcbrhqvrhlp +6-7 j: jjxjjzhxj +6-7 m: mmmmmmmm +1-3 m: mldvdmxmbk +10-11 f: ffffnffffkqf +5-17 f: ffffsfffftfffkffn +4-5 b: fbwbhvx +14-16 g: ggggggggthgggggsvd +2-3 s: cvsbw +5-10 g: qltgnfghgcrgpnzdsvng +5-6 p: ppjbpnppxg +3-8 j: lgjrzwdvdnwvrnj +2-4 c: cdcc +6-7 l: llflrhlllgklh +1-2 p: tppp +16-17 g: gggggggvggggggggg +3-14 f: fhfdffftfbggpkfgf +16-18 b: bbbbbbbbbbbbbbbbbbbb +5-10 v: thqvvkvlwvdvjzzst +13-14 p: ppppppppppppptc +11-14 t: tkttczttttsttmcnltm +3-4 w: nvxl +4-6 f: fpflfwftk +4-6 h: xhhhhh +15-17 t: tttttttttttttttlv +10-17 j: jjjjjjjjjsjjjjjjd +2-4 s: jcgs +7-9 q: qsqqjhqndsqkqqpvqqr +2-3 p: tnpplcmdpfn +2-5 c: crvmk +1-7 d: tsmzcgddnddddrdxsq +8-9 c: rlfcpctpncv +6-9 f: tkzfhffdf +13-15 s: sssmsscfvsssdsg +6-8 s: ssjsssjrscsss +7-10 f: fffffffkfff +1-6 k: jqtdhpknkkk +11-12 t: tttttttttttf +9-16 d: swjbddfpfbntmprdd +18-19 v: dvvvvvvvvvvvvvvvkvvv +2-5 j: kjjcqjj +11-12 d: dddddddcddld +14-16 f: fffffffffffffffk +4-7 x: nxxxxxxn +10-18 p: pppppppppppppppppr +8-9 k: ktkjkkkkfvklkz +9-15 h: hhhhhhhhchhhhhhhhh +18-19 v: hvkvvvvvvvvvvvvvvqc +1-8 s: xzbxgsxshgl +2-6 p: ppsjpglptchpzbdhj +6-7 n: nnnnnnnc +2-7 j: jhtjjjjj +11-12 b: vnblqbxkbbwb +4-5 z: czzzcztsz +4-9 x: wxpvxxxfxfxx +9-12 w: wwwwwwwwwgwwww +2-5 k: cntkkq +10-12 l: vljplljlllllllll +1-4 t: tfmvst +6-7 d: rddddddwd +2-6 h: bhvwhl +5-8 c: ccsgccncwgjtcbhccckk +5-6 r: rrrrmr +3-8 h: hcrhhjrbhh +2-4 s: xndshswk +2-7 m: mmrqmmlp +7-9 n: nnnbfpmnfnknxnndn +6-7 f: fvffffb +6-8 h: vhhhhhtk +6-7 j: jjjjjwjjs +1-5 r: rwrrrr +3-4 t: tlzk +2-7 k: kkkkkkk +6-11 q: rqqqqqwflqqjqq +5-7 l: llllglll +6-14 r: rrkrrxrmrrrrrc +1-8 w: lrwpzvhhcwtbrwwpwww +3-13 b: kbjhskpbrwqpbcbbkb +6-9 d: ddddbddhdddddddddmg +14-15 n: nnnnnnnntnnnnhf +2-18 k: cgjpktthdbfxrclqwzpl +5-14 w: wwwwwbfwzwcwcwz +5-7 s: tfhssgrsnbssfl +1-18 l: wdkwkdlslbllllgzfm +1-17 h: jhhhhhhhhhhhthhhhh +7-13 w: wwvwwwwwrwwww +1-3 r: rgrdrx +9-11 t: dnxckkwpttv +2-12 c: cgqxrszcckcd +4-13 q: qkchpbqqtrtdztrq +2-9 d: ddddsddddd +9-19 p: pppppgppppqpppppppp +8-9 l: lllhlllll +7-8 h: hhhhhkhvwbhmh +11-12 w: wwwwwwwwwwwnwwww +2-3 d: jhcd +13-16 n: nnnnnnnnnnnnndnnmnn +6-7 d: dllpddkdd +6-7 n: nnnnnkp +7-14 v: vvbcvrvvkmvvsv +5-7 j: jjjjcjs +4-10 l: ldllllllll +4-5 x: rxxxx +15-16 q: qqqqqqqqqqqlqqqw +13-15 m: mmmmmmmmmbmmzmbm +7-10 k: skkkkkkkkq +9-15 m: mghxpjzqdhjcbmdl +2-4 t: ttsnwzbdj +6-7 s: hqtkgtr +3-4 n: twpknn +1-3 l: wrldlsdl +5-6 l: qlxncf +4-5 s: dvsxs +7-9 t: rktsrfwttttgwtzgft +1-3 l: flsf +6-10 c: cchczccccj +1-3 k: bktw +2-4 h: zdqxgrfkfhljhqhkgmfc +16-17 s: sssssssssssssssvs +4-8 p: plpfmnhsppnpwnx +5-10 k: kkkkknkqkk +4-11 s: nsqnssssvqsm +6-14 j: jjjzjwczkjjjxjjcjjxj +3-7 t: tnnbjjhtd +7-8 l: llllllll +4-11 z: cwsvrtszxrgh +2-11 x: sxcxxxjxrxkxdxx +11-15 m: mmxmbxmmdmmmmfmmfmm +10-13 l: tllllwzlzlrbllllhnp +5-6 k: kkkjkmkkkg +4-7 f: wqqfmffffkp +1-9 b: bbbbbmbbbbhbbdzbbtn +10-12 h: hhhhdwbhhqrhhhdnxhr +1-8 r: qfpnfrrrrz +16-20 b: bbbbbbbbbbbbbbbbbbbb +1-5 c: hwqccmwcctcnclcb +6-13 c: clccccqqcccjczpgj +13-14 j: jjjjjjjjjjjjjh +2-4 j: jkfp +2-7 d: qqxdcdjqg +5-6 r: prrrrd +7-8 l: llllllll +2-3 w: nwlm +9-12 v: vnknxncvgvrww +6-16 s: sjnwfsksnszcglxs +5-17 z: zzmkzzzzzntzjzbwpdjz +12-17 j: ljjjjjjhjjwtjjjjdjwj +8-10 s: dnnjlfkxls +2-6 m: jmmqmdkjm +9-11 m: mmmcmmmfsmmm +14-16 p: ppppptpppphrpxpppp +4-15 d: dfkfxdddldddddddlddp +12-14 q: qqqqqqqqqqqwwgq +1-6 g: tgggggmggggdg +10-18 w: wwwwwwwwwbwjwwwwwt +8-9 t: ttkttcttsrgrzlftpt +3-5 j: jjjjjjjjjjjjjl +17-18 c: ccccccczcccccccccs +4-9 d: hjddddddddm +2-4 x: lxjfp +11-12 v: vvvvvvvvvvjv +1-4 z: fmzblzvzm +4-5 h: hhshhh +3-6 t: ptvrtt +7-15 k: kkkjzkckgckskpkk +12-15 w: wwwwwwwwwwwftwdw +3-5 z: jrhns +5-6 n: pxmnzn +1-3 b: bbbkbbbbbbwb +1-10 r: rrjrqrrwrrrqv +11-12 w: wwwwwwwwwwwwwww +5-6 j: jsjjjp +6-11 h: lhbbvmhwrhh +18-19 q: qqqqqqqcxqqqqqqqqxwq +17-18 l: llllllllllllllllxql +3-4 j: jjljjn +8-10 z: zzzzwnzlzggz +6-7 t: tttttft +11-12 f: ffffffffffnf +2-8 b: hqbbbbbsbb +4-5 w: stljwbxpw +1-2 z: grxfpw +6-8 w: wwwwpwwxw +8-14 z: zqzzzzzvzzzzzzgz +4-11 b: cckgrcmbpvbbw +2-9 d: xqxbdddjds +3-6 x: xxrxxx +15-16 n: nnnnnnnnnnnnnndnn +6-11 x: lqmxxxsxxfxxxxlx +1-12 s: vssssshssmsk +1-16 m: bmgkkmwmmzvmmmmmwflv +3-15 t: thkvttsltnbgztt +9-17 z: zzzzzzzzzzzzzzzzzz +4-6 f: fjwfff +3-9 d: ddddddddd +6-10 k: kjkbkkckxkknqkkdc +6-7 n: nsnckwnmn +7-13 t: ptbtjqttwwtftpntdq +7-10 r: wrhhrrrrrwrrrrvqrms +2-3 c: zcrwhtccb +5-7 m: nnwmmdmmmccv +3-5 j: rtjjmjrjl +5-6 s: dssjhsdmbksrks +16-18 c: ccccclcccclccccccc +7-16 b: qpzgqxdbssmzptrv +6-8 b: bnsbbgdbggxbbszbm +1-10 h: lrpstqvhhhhf +4-6 s: tvssppwvss +3-4 g: qqqhcd +4-7 c: qxcqzccckxcpcxcw +1-13 m: nbwdmspmmwbbmm +1-2 j: xjrczrk +9-10 w: wwwwwwwwwd +2-4 h: hhhq +7-10 j: bjmrrjsjthjnnjjxjjd +3-7 f: srfwwfvf +3-4 b: nbbzb +3-5 n: nnnnn +7-8 f: fxfnfffzpqffgdf +10-12 k: kkpkkkpnkkmkjbkk +9-10 k: jkkkkkkkwqk +4-6 z: rzzzzs +4-7 v: vvvtvvjq +6-12 z: dzjnzczzpzgzzzx +6-8 s: smsvbkswslssrdfjsc +5-7 b: bwbbbbbbr +1-3 d: kddbsmmbv +3-4 b: bbbb +5-8 r: rqrrdrrr +7-8 m: mmmmmmzm +9-11 q: xvnlfvhxqfql +3-4 w: wfwj +1-3 q: gqqcqg +1-2 q: cqlxrq +6-12 s: swwjjssjsstmqfssdh +2-4 q: bqqq +5-6 c: ccccbscgfc +14-15 x: xxcxxxxxxxxxxxm +6-12 f: fzfchfnrxfrdffhfl +14-17 g: gggggggggggggjgpgg +5-8 n: njkcngznn +10-13 d: dddlqddddvddr +2-4 c: xgcg +2-10 s: sxsnsdmszwmsss +6-12 q: qbcqspqqqkqrq +6-16 n: xnnnnnnnnnnnnnnfnnn +6-12 s: tssnssmsssssssssnhr +1-4 v: vwvvv +8-10 h: rzmhhjvqhht +1-4 t: ttjdjftfctt +1-4 k: nkkz +1-2 q: vkvqkqq +9-19 n: qxmjqxnxnblqnnqfgsrd +15-16 h: hhhhhhhhhhhhhhghz +2-5 g: jggpxdgwjpsrv +12-13 c: xccccpccrcccc +1-13 g: nfgbghqrljstggcgq +14-17 g: gggggggggggggmggggg +4-14 s: sssbsssssssssgs +1-10 d: rcxvxcgddnhwd +4-14 g: vccvdldqdgzltq +8-10 z: zzdczzvrzzzzr +5-10 t: ctgtttftqtrbt +3-5 v: vvrvx +9-10 w: wwwwwwwwwwwww +4-6 c: hgccmcccc +16-18 s: ssssssssssstssscsh +2-7 z: zzflfrtdx +4-10 v: vvlsvvvvkrc +10-16 d: ddddwddddbdgdddwd +3-4 v: gkbqbtrv +3-4 h: cjdqvwhhththvx +3-5 b: bbbkbrb +3-5 m: ptkqdgsmbcmmblwp +4-17 q: mlqqgsqqqfqkcqqxqq +6-17 m: mdvqvmmxlmzmvmmdm +1-3 r: hrrtrrrrrrrrrwlr +3-5 j: jjjjhj +11-12 q: dqpqqqqqqnzlqq +8-11 d: dddnddnddtdddd +3-16 d: dpddxtlqsqldrpddq +7-13 z: szhzmmzzzzmzzzz +6-18 h: mkxxqtbnnjgnvxnhhhc +4-5 n: nknfrhpn +16-17 d: dddddddgdddddddddd +14-16 w: wwwwwwwwwwwwwwwww +2-3 t: rttfdstqpdtg +3-4 s: gghrfxbfshqssj +1-9 j: bjjjjjjjhjjj +1-2 p: xmpgppppppp +9-14 k: vqpxrkmskfpnxq +1-5 x: xxxxx +1-14 p: bsxnwvpkphdppphpkwp +5-12 d: xdddmzddfddc +9-10 v: gvvvvvgvhnvw +2-7 x: xxxxxwgsvmqnkxv +3-15 c: ccscccccwccccccc +5-8 w: nsvgwzdf +7-14 w: wwwwwwwwwwwfwswcw +5-10 r: qrrlwcrrwz +7-12 f: hfnphfpjffstff +2-6 h: hqjhmph +3-13 x: cpxxxzcrbjxxxb +4-8 k: kkkkktkkkkfkf +7-10 g: gggghghsgwf +8-9 s: sswswssggss +6-10 l: qlllljllhlll +8-11 c: cccwccrbcbccc +5-6 x: xxxxxxg +1-3 w: cwpww +8-11 v: vvvvvvvvvwvv +1-2 b: bbgl +7-10 b: zbkbcbbbsbb +13-15 t: tttttgtttttttktttt +12-14 x: xxxxxxxxxxxxxqf +6-7 k: kmrkkwmk +4-5 m: mmxjmdrhzkmxxphjmz +2-3 t: tnvtndw +4-5 x: xxtxxtxzf +1-3 m: nwmglfscmwrjtzp +10-11 c: cnccckcckcwdc +14-19 b: tvbmrqtchwblbqbbqbb +9-10 x: fxxxxxxxjxx +4-5 g: gggggkggx +8-12 k: kkkkkfkpkqkwkkk +2-6 v: chpvkvt +4-10 r: rmbjmcrgrrfrtmblhw +4-6 n: rnnwtn +3-10 v: htclcjhjkdv +10-13 w: wwwhhwwwrwwzww +18-20 w: wwwwwwjwwwwwwwwvwtww +7-8 w: phrwbwwmc +16-17 q: qqqqqqqqqqqqqqqqx +2-5 k: kzknsxkkgtvmwlfrmrg +3-4 b: zbbbb +5-8 v: hfclvvpc +3-15 t: ctfthpmgznjnhgtth +1-6 t: httttq +5-6 w: wwxhgww +3-5 m: fmtnmmm +11-17 n: xnnchnzpsmcslvzcn +5-6 m: mmmmcm +1-7 r: rwsgcgvjmtxwkqtr +6-16 m: mmmmmmmmmmmqmmmmmm +5-10 s: sssggssssjsssmsss +9-14 p: ppfppzppnvmpqdvpp +2-4 l: wclwrlrdvh +6-17 g: gggmkglggwgpgkmglt +5-7 z: zzzbzpz +4-5 q: qbqqlzpqg +10-19 h: hhhhhhhhhrhhqhhhhhhh +6-7 m: nfnxmsmhtmhsmmmmgmsl +2-3 m: mkfmmm +8-10 j: xrjdnjjjnjjcjjjjjj +3-6 x: xwrjxhjxx +6-7 z: zzzzzzzg +8-17 k: kkkkkkkkkkkkkkkkk +6-9 n: rnnxnnbwnsnnwn +6-8 m: mkmmmsmm +4-6 q: qqfxqqq +2-8 s: hxmfbkszk +6-7 r: rrrrrrr +2-5 h: hhqzhhhh +5-15 b: bhbvnrbrbblbbhh +12-13 d: ddddddtdddvhddd +5-6 f: fmfcfwf +4-7 j: njqfxjjjqjjvdj +6-9 g: fggkggzgghrv +9-12 b: vbblbxpfrbjbgpwxb +1-8 s: tzcdrktsqjsxssfsssh +10-14 f: fffffffffcffffffffff +13-17 p: pqpppppcpbwpppnprppk +16-17 n: nnnmnnnnnnnnnnnsj +10-16 k: kkkkkkkkkkkkkkktk +8-11 w: wwwwwwwwwwm +2-5 q: qqqqqq +2-7 m: mmmmmxg +2-9 m: mmvlggdmr +3-9 s: wxdbmlcrlpnzmkfdfs +12-16 z: zlxzgznqqfzsqtwc +6-7 f: flvmfffjffbmgfzfgfp +2-3 g: cgggqgxqgv +2-3 f: rffvf +1-8 h: vhhhhhhvhhvhhhhf +6-12 x: vzdxxxgxtxzxxxqc +4-5 w: rwwwwww +7-10 r: brwrcrrkcsj +6-10 q: jvqqqqqqqmq +5-18 v: lvhvvwvvvvvlvlvvmv +6-9 z: zzvzcwlzslhlzqsf +3-6 x: sdknfxvwtcfcjgmv +8-9 l: lqcwlllsllll +1-4 k: dgklv +2-6 q: qqqptfqqqqq +4-7 m: mrmcmmmm +4-5 r: rrrblg +1-8 c: qcccccvntc +6-7 m: mzbxmmmnhmqcmmqvbmcp +2-4 t: ptvqx +9-10 s: gpssssssgss +4-18 b: bbbbbbbbbbbbbbbbbfb +4-5 f: ffffgf +3-6 l: lslglw +1-5 l: ltzlllsdlmrllkvbztvr +15-19 l: llllllllllllllnllll +10-11 j: jjjjpjjjjjncj +2-3 w: wfwgd +1-7 r: vrrrzrr +3-7 k: kkkjckkkgkbtvm +9-12 k: kkkkkrckcrkk +1-6 b: hpbjbvb +6-8 s: ssssssvss +2-4 x: mpxk +6-10 x: xxxmrwhgxxxjx +7-8 x: xxphxxxxx +6-19 n: mdrlnnpnjndqgnkfwnnn +2-5 q: qjwtbmkhtnxm +15-17 j: xjjjjjbjqjjjjjjqjjjw +5-7 x: pxxxxsxxsxx +3-6 t: ttttrp +8-11 f: fffffffffrkzf +6-8 r: glsprkbp +10-12 m: mmmmmmmmmmmsm +13-14 z: zzszzzszzbzzzplzzz +19-20 c: ccccchwccccccccccncb +7-12 z: qzggglzlhshnrwt +12-14 z: zzzzzzzzhzzwzc +1-2 s: sssl +1-3 q: fsqmwq +1-6 z: zmzztzkzznmflqffz +9-11 b: bwbbjbbbtlbbn +4-6 s: nktszz +2-5 j: nqjhjkb +7-16 l: lrlllllllmllswlsl +2-3 f: fjqvfff +7-15 w: hwxghddqwwwwwww +2-4 z: zgzfx +5-6 h: vhhjhthh +13-14 h: hhhhhhfhhhhhhhphhhh +16-17 k: kkkkkkkkkkkkkkknx +7-15 l: dllllllmlllfllf +2-6 w: mtkwwwww +2-7 k: zpkkgldk +7-9 d: htmtjddddddqvddcd +4-9 v: rvfbbwzdwcvvqv +6-11 m: mmvmbvmmmsmmlmmm +3-8 p: xpxppsgpbxp +2-6 f: vffbszhvvrdfkxc +8-11 v: lvrrlvvqqvr +5-17 h: hdhhbhhzhhhhhhsbl +8-10 f: fhgffgfrfqtf +9-12 s: ssssfssdpssswf +9-12 m: mmmmmmmmpzgmmm +7-9 l: zlmllvwlllldl +8-11 m: mmdmfmmdxbmxbmm +1-4 m: fklssmffwzgqcvdpm +13-14 c: cczcccccccccccc +5-9 f: frtkfpffsfff +5-8 f: ffffgffr +3-8 m: mmxsmmmb +1-6 m: mdmmmm +1-2 h: hhdtmhwfpt +4-14 d: dmrkdvddmdsdddbsgd +6-7 c: cxccgcccc +6-12 v: xcqvjvvsdvvvpv +11-14 d: gltkjvddwjdkrln +2-13 f: ggffllflfbfffqkfmf +10-13 c: xkvcccccrmccccc +17-19 q: qqsqqqqqqqqqqqqqfqmq +8-10 t: ttttlttwtlt +4-5 f: wffrd +2-16 v: tvhvvqvrvvvvvvqvvf +2-4 c: cccc +3-8 z: zrzzpzlzzhsdxqqfx +6-10 k: kkkkkkkkkk +5-7 r: rvrrvrz +14-15 w: wwwwwwwlwwwwncwvwjk +6-11 q: qfhxqqgqqqsvcpr +4-7 f: kflfffzff +2-14 t: rtttttptlxsttt +11-15 t: ttttttttttftbvqttt +6-10 c: cckwlchltchcczgw +3-8 s: ssssvsqnss +1-8 h: mhhhhrhhh +13-15 b: bbbbbbbbbbbbbbnb +15-17 p: dpppppppppspppcps +5-12 l: xbfjglklphtl +2-4 v: vvvvbvwpvvvrv +3-5 k: plhjkkqkskz +6-12 z: zzzzzczzzzzk +2-3 j: xvjljj +6-7 r: rlrrrrrrzrrzrrr +1-12 t: mqrkgpktbsqxg +10-13 z: pzmzzxpnzxpgzzzhzz +5-13 s: gslsskvgxssssnpj +10-14 m: mmmmmmsmmmmmmk +2-5 b: tnbdsfwdzxrkjdb +2-15 h: hnxhzhmhhhhhwwb +1-4 c: ccccccc +9-10 b: bbbbbbbbbl +4-5 j: jsjjj +3-6 n: xmmnppbn +11-12 m: mmmmmmmmmmmm +2-4 r: jrgrcpvgctrrr +3-4 g: gggr +14-17 n: nhnpnnnnznnnnnnnknnm +4-5 k: krkkf +11-17 h: hhdhhhhhhhhghhkhx +5-19 q: dqbcqqqqsqqzqqqqqqv +5-16 t: ttrkttttstwttttqdt +11-18 h: dhhhhhhhhjhtjhhhhhh +5-8 c: ccccrccfc +1-3 v: nvvnv +7-12 m: prmmzmtmmmssdmmmmt +15-16 r: rrrrrrrrrrrrrqfr +7-19 b: djbbbbqjbdtbslbgbbmb +10-13 w: wwwwwwwwwwwwww +5-15 p: mbpcjqmmhpppkfmrbcww +2-4 n: nxbjknms +5-11 s: hxhcsldmxshdksvsss +12-16 q: qqqqqqqpqcdqqtwkqvq +2-7 j: tjlpcjjjjnj +6-7 s: ssssskm +1-4 t: tttttx +5-10 q: pqmnqrlqchbjzqqvq +11-15 q: qqqqqqqqqqhqrqqrqq +3-5 k: jhkgkxkqfskg +14-15 f: ffvffmfffffffsffqm +4-5 x: xxfxhfxx +2-4 b: ktbv +3-4 t: wjtwxvxctrcttb +1-3 s: shssg +8-12 z: skkzbdpzdkzzz +1-3 f: rlfffqft +5-8 s: fsrcnjsgsmgs +7-17 v: vvvvvvvvvvvvvvvvvvv +4-5 k: kklmq +8-17 h: hhhhhlvghwkhrfzhxh +17-18 n: nnnnnnnnnnnnnnnnnn +3-10 h: mhhhhrhznwvhh +8-9 x: xmxxxxxxx +4-5 p: ppppk +11-13 t: tttttttttttjtcn +3-4 q: qqvhz +3-8 l: gbpqclnkwlhdlml +12-13 f: fffffffffffrf +3-11 s: ssjssssssslssss +6-7 b: bbbbbwbb +7-9 r: krrrrrfrj +13-14 b: bbbbbbbbbvbbbp +2-4 x: ltgbx +7-10 r: smrrrrkjrrr +3-7 n: vnqpngjdgrw +7-18 t: ttltqtsktrjgxtqhtt +2-5 v: dvvxbvvvnk +2-5 n: nnnnnpn +1-3 t: nttmtx +3-4 z: zpszz +1-12 p: pmpxphlpppppppqppp +3-4 v: qvvvvvv +9-12 g: gwgggggggtgqgg +2-4 n: knpn +3-13 d: hncbdrvpddddcfddd +5-9 s: ssnspslslsfkpskss +1-2 s: ssczgkvtlp +5-6 p: pmvpzpppkm +1-4 j: jjhr +5-6 s: ssssxl +1-3 t: ttrt +16-18 n: nnpnnnnnnnnnnnnnnnn +4-5 n: nnfnl +1-4 b: bbbb +7-8 l: nljlllkhl +11-12 n: nnnnnsnnnnnnnpn +5-10 k: kkkkckkkkhkkkkk +7-10 s: zfsssfldxsvqsxdsqs +5-6 q: qqqqqp +6-7 q: qqqqqqq +14-16 w: wwdhmwwjwwwwnwwlwwwv +8-9 l: llllllldll +12-14 c: ccrccccccccrcccccccc +1-3 n: qnwnh +1-4 l: mlll +1-3 s: sssssss +4-15 h: mhclhhhjllhhhgh +15-16 x: xxxxxxtxxxxxtxttxx +2-4 r: rmjh +6-9 z: zzzzzpszt +17-18 n: nnwnnnnnnnnnnnnnppnn +8-11 v: vmvmvlvbvvvvv +7-8 b: bbbbbbdf +2-5 k: kkdkk +8-9 d: dddsldddvxlhd +7-8 h: hhhhkhxshxhn +12-14 c: vcchpxcnmgkctpqcc +1-5 w: wwwwww +1-2 x: xdmk +1-9 p: pbfvrdpqqn +2-4 s: mtnvzhnzs +4-6 t: cttxvtttx +4-8 t: qttmtzttkwftrjk +7-9 c: cccccccccc +2-18 j: zjjqxjfqqlmjrjhjqx +2-5 q: qmkqgq +5-11 k: kkkkkkslzkkkkkrx +16-18 h: hhhhhhhhhqhthhhvhh +5-13 h: hhfhhhhhmhhshhhhhhh +10-12 r: rkrrrrrmrrrrrr +8-10 n: rnnckhmjnxmfggsgtnnn +19-20 c: qsccznccccccnccccccq +1-4 k: wtkck +7-8 s: sssmssjssss +3-5 l: llslv +3-7 t: tvgjqgjbvtgpkt +13-15 b: bbbbbbbbqbblrbbb +9-10 z: zzzzzznzzb +6-16 c: kpcnsccgccxfwccl +2-3 d: ddbd +10-16 v: vvvvqrvvsvvvvvvl +3-12 d: dzdxxhddnlkddddk +8-9 b: khbbbfbbbbb +11-12 z: zzzzzzzzzzzz +5-15 n: bnlvnnrjbnqlnnn +1-2 q: mqqpzjc +11-13 h: hhhhhhchhhhjhh +8-11 x: nxfcxbjqxdlcxxxkxxx +14-18 v: vvbqvvvvvvvvvvvvvvvv +7-8 f: pgtlfffmjffnt +10-18 m: mnkrmmmmmqmmmmmmmjm +1-4 l: lghlhcnwprlgvw +3-4 p: npxplpwl +12-15 s: sfkwnvsssvssssfsssrp +3-7 z: ztqnzlxjmzzbjfnxcw +17-18 q: qqqqqqqqqqqqqqqqqq +3-6 z: jczztzzbhmzzw +3-7 f: skffttjffqfnchfrf +4-6 m: hmqmcrmw +10-11 t: dftttqttttttl +7-13 p: spxnpgtzpppjpwppptp +8-9 q: jqxqqqqxqq +3-4 h: hhhh +10-13 z: pgzxhxxpzzssj +5-9 x: xfrdmjxmrxrqjpxbfxxx +8-17 d: ddpddddddddsgddzddn +1-4 g: vggdggggggggggggggg +10-12 m: mmdqsmwvjjmv +2-7 s: ssqsssk +13-14 n: nnvnnnnnnnnnsgnn +2-16 k: kkkkkkkkkkknkkkk +3-6 p: dprphc +2-10 k: mpkstkxkdb +2-3 s: ssxs +9-19 t: ttjttjttrtsqtmttttt +4-5 j: jrjjtsjjd +6-7 x: xxxpxjx +13-15 q: fqfqqqqhqcqfqqbqqq +1-3 z: zfgrzl +6-8 n: nnnnnphm +1-8 b: bbbbbbbbb +4-5 h: thhgj +4-8 v: vvvcvvvp +8-9 t: ktttttttt +3-4 f: wftbcfnmhkfdpjbns +6-7 v: vvvvvlv +16-17 z: zzzzhfzzzzzzkzzzwzzz +1-2 q: qqqfq +10-11 p: zpjzcppvcppppppppj +10-15 c: vlccbcgcclcczfcfcc +11-17 t: tsntktwzhsfttfwtx +1-7 h: nhhhhhb +6-13 b: bbbphnbbwbbbb +8-9 x: xgxxxlxfxx +14-16 m: mmmmmmmmmmmmmmmm +3-4 x: xxbxx +6-9 c: xkccsfccrccv +10-18 h: jphhbshwghrxpnhnlhxh +6-10 f: nlxbgvftfh +3-4 p: ppwf +1-6 s: kjwjwshcnqwxgwslvl +2-3 m: mmlk +2-3 g: gmgg +3-6 r: rrrvrmr +1-6 s: szgpksczqd +12-14 t: ttttttpjvtqwtltt +1-2 r: hrrrrvrrzj +1-13 m: xmmmmmsmmmcsnmmmmfmm +10-11 f: fffffffffsf +13-15 d: ddddddddddddhdq +7-14 k: jkkkkkkkrkmkkkk +6-9 g: ggggggggg +14-16 l: lllllllvlllllwtx +1-3 g: ggggt +3-4 m: mmkd +5-10 g: jgsgvggwggj +17-18 p: ppppppppppppppphpp +1-2 q: qqjwhq +2-6 q: qqgqqzk +11-16 t: ttwttttttctttthgt +1-5 m: zmmmsm +12-16 r: rrrrrrrrrqrgrrrj +4-5 v: xcvvghvrczpcgn +1-3 x: xbfmxxfxxf +3-5 j: hjbjm +5-14 l: lllltlllllqllll +3-4 x: xsxnxgtx +6-18 g: gggggggggggggggggd +8-12 t: tgttttqtcttttt +4-6 p: pppppd +6-7 x: xxxxxxx +3-4 c: fdcclrccccvg +11-12 v: vnvvvvzdvcrk +1-9 z: zztzqzzzzcz +1-12 v: vmvvvvvvvvvmvvvv +9-16 v: vvvvvvvvvvvvvvvf +2-7 h: xhtsfmvthhhrhdhhbbc +5-6 c: qkccccd +8-12 z: zzzzzzzjzzhbzz +2-4 n: shlnnkxn +19-20 v: vvvvvvvvvvvvvvvvvvcv +7-8 h: hhkhhhkhh +5-19 p: sxslgwvkszswqxtqpvf +5-8 m: mmmmmrmbm +2-5 j: jrnjjzjfhjdkjqjtkwk +7-13 f: ffffffsfffffwfff +6-9 w: wmwwdwwwsz +12-15 f: nsffpfsdsjsfsffk +13-16 k: kkkkkkkkkkkkkkhw +6-17 s: ssssslssssssssssss +3-5 c: srdscnncclqqcncsw +9-11 p: pkppppppppp +5-10 q: qqqqqqqqqpqq +12-14 n: nnnnnnnnnnnnnn +6-11 h: hhhhhqhhhhhvhhhh +2-12 f: fgfrpzcstfffffxff +2-12 n: nnxmnmnnnnknrpmnv +6-7 m: jmmmmcnpkm +4-6 v: mvkcwvmvvjvrvlv +18-20 h: hhrmbrhhhhlhhvhmhhhb +9-13 g: ggggggzgggsgfgxg +9-15 m: pmmxmmmmmmmmmmm +1-7 l: zlmsmlxpvvlzv +2-15 g: sslggkdglqgxpgkx +17-18 c: ccccccccccccccccmc +10-11 w: wwwwwpcwwwpwwd +3-5 w: wwwwk +8-9 f: vfbvffsfcf +4-6 r: rrrrrr +2-4 n: nrnknn +1-4 l: lxllllll +10-11 f: qdfwvfffdfvwffgfkfgf +3-4 b: xgxbdqxbfvzrl +2-8 b: pbbkbbgbxr +1-2 d: ddxdnv +4-8 d: dndfcnhd diff --git a/res/input_day03.txt b/res/input_day03.txt new file mode 100644 index 0000000..885e360 --- /dev/null +++ b/res/input_day03.txt @@ -0,0 +1,323 @@ +.#...#.......#...#...#.#.#..... +####.....#.#..#...#...........# +.....#...........#......#....#. +......#..#......#.#..#...##.#.# +............#......#........... +...........#.#.#....#.......##. +....#.......#..............#... +........##...#.#.....##...##.#. +.#.#.....##................##.. +.##................##..#...##.. +....#...###...##.........#....# +.##......#.........#........... +...#.#.#....#....#...#...##...# +..#....##...#..#.#..#.....#.#.. +.......#...#..#..#.....#...#..# +.....#......#.......#.....#.#.. +....#..#...#..#####....##...... +.#...........#......#....#....# +#......#.###.....#....#....#... +....#..#.#.#..#...........##... +..#..#..#.#...#......#....#.##. +.##....#......#...#.#..#....... +..###.#...#.........#.#.#...#.# +#....###.........#...#...#...#. +...##.#............#...##...... +...#.........#............#.... +......##...#...##..#........... +........##..#.#.####...#.....#. +.##.........#......#..#..#...#. +..........#...#..........#..... +#..........#........#..#..#.#.. +..#....#.#.#.#.#..#.##......... +##.#.#.##.....#..#......###.... +##....#...#.....#.............. +.#..#...#...#....###......#.... +#....#......#.#..#.#........### +.#....#..#...###....#...##..... +.#....#.....#.....#..##..#..... +#....#.##...#...#..#.##.##.#... +.#.#.#.##...#####.............# +......##..#.....##..#...####... +#.##..#.#....#..##.......###..# +..#.......##....#........#.##.. +#.....#......#.....#....#..#... +.......##...#.....##.......#..# +.......#...#.#.#.........#####. +#.......#.##..##........##..... +##..#...#........##....#....... +.......#...##......##...##.##.. +......#..##..#.#...#...#....##. +....#.#..#.....#.##.#.....#.#.. +#..#.#.#........#...#.......##. +##...........#..#........#..... +....##....#....#.#.......#..... +....##.#.#.....#.#.....#.....#. +..........#.#..##..#..#.......# +#....#.......##...#...#.....#.. +.........##.....#.#....#......# +..........#........#..#..#.#... +..#......#.....#......#......#. +..#...###..##..#.....##..#..##. +..#.#..###.........#.#...##.#.# +#.........#..#......#...##..... +...#...#.#..#...##.#...##.#..#. +#.....#.....#.##....#.#......#. +#....##..##..#.#..##....#.....# +.#..........#..#...#..#.......# +#.#.....#..##..##..#.#......... +....#..##...#.....#.....#.#.#.# +...#.#....#........#...#.#..... +.#............#.......#.##.#... +..##.......#.#...#........##..# +..................##.#...#.#..# +.#.........#.......#.....#..... +....##...##..#..........#...... +..#.##..#....#..#............#. +....####...#.##....##.#....#.## +#..#....#......##........##.... +..###...........##..#......#... +#..#.......#........#.......#.. +.....#....#..#..##.....#....... +.###.####.#....#....#..#....... +.............#...............#. +.#..........#.#....#..#.#...... +..............##....#..#....##. +.......#.#..#........#.......## +#..#...#..#.#........#..#....#. +...#.........#...#..#.......... +...#....##...#..#..........#... +.#......#......##..##...#.#.... +.#.........#..###.............. +.................#.#.....##.... +...#............#.............. +#..#................#.......#.. +...#.......#......#.#.#........ +#.....#.##....#.....#........#. +......##.#....#........#....#.. +.#..#.##...##........#.#.....#. +..#...#....#...#..#..##..#.#..# +#.................#.#.......##. +..........#........#.#.....#..# +#....##....#........##..##.#... +#...#....#.....#.....#.....#... +#..#..........#....##....#....# +..#.#..#..#....#.#....#....#..# +#....#..#.......#..........#... +.#...#.#...#..#...#.......#.... +###........#......##..#...##... +...#..........##..............# +.......#........##......#.....# +.#..........#...#...##....###.# +.#...#....#..#.....##...#..##.. +.#.#.#...##..........##...#...# +.#.....#...#........#........## +#.......#......##.#.#..#....#.. +##..#.##........#....#..#...... +...#.......................#... +..#....#..##........##.#.##.#.. +.............#.......#....#.#.# +...#...........##..#.....#..... +..#....##....#.....#........... +..#.....#......#..#.###.##....# +.#.......#...........#...#....# +#............##...#...#.....#.. +##...#.....#.........##...##... +...#...........#....##......... +#.##..#..........##..#......#.. +.......#.#.......##.......#.... +..#.....##..#...#.......#...... +.#........#....##...........#.. +#.......#...#.#.###...#....#... +..........##..#..#..##........# +#....#....#...#....#....#...... +...........#....#...#...##.#... +.........#.#.....#............. +..####...........##..........#. +.....#...................#..... +#..##...#........#.###.#.##.... +....##...#.##................#. +.#........###.#............#.#. +..............#.##.........#... +##............#.#..###....#...# +#.....#........####....#....##. +....##..#...##..##...##.....#.. +##..#....#.##.....####.....#.## +##..#....#.##.##.#.#........#.. +....#..........##.....#..#..#.. +...#.......#........#.........# +#..##.######.......##........#. +###...#...####.......#.....#... +#......#..#.....#......#.....#. +..................##...#....... +....#.#....#......#...#.....##. +..#..#..#..#..#....#.#...#....# +......#....###................. +#.##......#...#......#......... +#..#.#...##..#.......#..#...#.. +.#....#.#........#.........#... +#.......##..#..#............... +........#..##....#.....#..#.... +....#......##..#....#...#..#... +#.....#...##..#...#......#..... +.....#.....#.........##...#..#. +........#...##.#...#.#....#..## +....#....#...#.....##..#...#... +#....#..#.........#.........### +..###.....##...#.#....##......# +#..#.#..#.......#..#....##..... +###...#.##..#.......#......#... +.....#.....##.......#...##..#.. +......#.......#.#.#......#..#.. +.................##..#.###..... +..........#....#...#..........# +...#.#...#.#..##.....#.#.##..#. +.......#..#....#...#......###.. +...##..........#..#.....#....#. +.#..##..###...#....##.....#.... +..#.#..............#....#...#.. +.....####.......#.#.##....#.... +#.#.#..##.##.#..#.##.#....#..#. +........#....#.......##........ +...#...#....#...###.....###.... +.....#..#..........##.#...##.## +..#.#.#..#....#...#..##...#...# +..#......#..#.#.....#....#....# +.#.....#.......#............#.. +#..##....#...#....##....#...... +#..#.........#...#...###.#..#.. +..#.#.#..#.#..#.......##....... +...##...............#..#...#.#. +.......####.#.....#..#..#...... +......#..#.....#..##....#...... +....#...#.........##.......#.#. +#.#.#...#.....#...#..#.#..#.... +........#..#.........#..#..##.. +........###.#............#.#... +#..#.......#.#..#.......#...#.# +..##..............#.#.....#...# +..##........................... +..#.....#.......#......##...... +#...#......##.#....#.#.#...##.# +#...#.#......#.#..##.........#. +.##..#...#.#.....#.#.#...#.#..# +.#..#...#.#.........#......#... +...........#...#...#...#..#.#.. +.#........#...#......##...#.### +#........#..#.#..#...........## +.#...#...####.......#.......... +......#...............#........ +.....#.#.....#.#...#......#.... +.#........#...........#..##.#.. +....#..#.....###.......#...#... +#.#.........#...##..#.#.##.#... +................##.#....#.#...# +.......#.......#......#...#.... +#....#.#..............#.##..### +..##.##..#.....#............#.. +#....#..##........#....#....... +.#.#........#.#................ +......##..#..#..........#..#.#. +.....##.#..#....##.#......##... +........###.#................#. +#..###.....#.###.#...#.#....... +.#..#.#.#.#..#..#.#.....#.#.... +#....#.....#..#......##...#..## +........#...##..#.#.....#....#. +.......#..#..#..#....#.....##.. +....#..##..#...#....#.........# +#.#....#..#.#...#.#...#....#... +.....#......###.......#..##.#.# +.......##.....#....#........#.# +.##.##..#..###.#....#.#.....#.. +..##.#.......###.........#..... +.#...#......#..#....#.......... +.....#........#.....##...#..... +..#......#.#.#..#.#....##.#...# +#.#...#...........##......#.... +.................##.....#.#.##. +###..#....#..................#. +##..#.#.#...#....###.#.#...##.# +#.#.#..#....#..............#... +.....#....#......#..#.##....... +#...#...#..###.......#.......#. +.....#.#........#..#...#.#..... +.....#..........#.###.......#.. +...#.##.....#....###.....#..... +####........#....#..#.#.##.#... +#......#...##.....#.#..##.#.#.# +.....##....#..#.........##..... +..##....##................##..# +#.....#...##...##.#.....#...#.. +..#..#.#.#....#.#.......#...... +##.....##......#...#.........#. +#..........#........#.#......#. +.#..#.......#.#.....#.......... +.........#.#.......#.#..#..#..# +#......#....#....#..##..##...## +.....#..#...#.......#.....##... +..#.##........#.###...#...#...# +..#..#...........#..........#.. +.#.#.#...#.##.#..............#. +....#..##.......#.....#..##..#. +.#.##.#....##........#...##.##. +...#.#...#....#....#......##### +.....#.....##...........#...... +#........#.##.......#.#.......# +#...#.......##.#.......#..#.#.. +#...##..#....#............#.#.. +........#.#..#...#..#...##..##. +#...#....#............#........ +#.#.#.#.#....##.....##......... +......##.........#.......#.#..# +...#.#....#........#........... +...#.#.......#.....#........... +##....####......##.##..#....... +#......#...#..#.#..#......#..#. +#......#.#....#....#..#........ +..#.###...#.....#........#.#... +..#.....##.....###....#.....#.. +#.##.#.....##....#...###....... +###.#....###.#..##.#.......##.# +#..#..##...#.#..........##.##.. +.......####.#..#.....##..###... +#...#...##..#..##.......###.... +#....#.........##..#.........#. +.....#.#..........#..#...#.#..# +..........#......##..#..#.#.... +.#...#...#...#........###....## +#....#.##..........#.#.....#.#. +#....##.#.##..#.......#.#.....# +.##..##..#.#...#.#...........#. +....##..#...#.#.##.#.#...#..... +.#...#.##........#.##..#.#....# +.#.....##.........#.....#...... +..#.....#.#..#.##.............# +##....##...#....##........#.... +.#....#........#.#..#..#..#.##. +.#........#............#....... +.#..##..##..#..#..####....#.... +..#.###....#..#.##......#.#...# +.###..#.#...##....##....#..##.# +....##........#....#.#.#...##.. +...#..#....#.#....#...#.#.....# +...##....##..#....#.........#.. +.....#..##.###..#.....####..... +...#..#.........#....#.#.##..#. +...#..#...............#..#....# +...........#.....#...####..##.# +..#......#...#....#..#...##.#.. +.....#..#...........#.......#.# +##....###...#.........#....#... +...#..##.......#.#.....##....#. +#.#...#.#....#.....#...##.....# +.#...##....#.....#..##.......#. +...#........##..........#.....# +#...##..#.#....###...#..#...... +............#.......#......#.#. +......#....#.#...#...#..#...... +.#..#......#....#.......#....## +...#...#.......###..###...#.... +.............#.#...#..###.....# +.#.....#........#...##....#..#. +.....#.......#######.#.#...#... diff --git a/res/input_day04.txt b/res/input_day04.txt new file mode 100644 index 0000000..03b412d --- /dev/null +++ b/res/input_day04.txt @@ -0,0 +1,1138 @@ +byr:1971 +eyr:2039 +hgt:172in pid:170cm hcl:17106b iyr:2012 ecl:gry +cid:339 + +hgt:161cm eyr:2027 +ecl:grn iyr:2011 hcl:#a97842 byr:1977 pid:910468396 + +cid:257 +ecl:gry hgt:186cm iyr:2012 +byr:1941 +eyr:2029 +pid:108935675 +hcl:#cfa07d + +hgt:165in +hcl:#cfa07d eyr:2035 pid:82570731 +byr:1973 +cid:74 ecl:xry + +eyr:2020 cid:105 iyr:2012 pid:947726115 +hcl:#ceb3a1 ecl:grn byr:1966 hgt:151cm + +hcl:#888785 eyr:2027 ecl:hzl byr:1966 +pid:853607760 +iyr:2012 +hgt:155cm + +hgt:61cm +iyr:2019 +byr:1952 pid:#1468e6 eyr:2033 ecl:#7d39d5 hcl:z + +pid:2306523501 +eyr:2032 hcl:z ecl:brn +cid:266 hgt:151in iyr:2024 +byr:2008 + +hcl:#a97842 hgt:191cm eyr:2025 ecl:gry byr:1923 pid:574171850 iyr:2019 + +hgt:140 +iyr:1987 byr:2003 +eyr:2013 cid:242 hcl:z +ecl:#19177c pid:150cm + +byr:1959 +hgt:169cm hcl:#7d3b0c ecl:gry eyr:2028 cid:107 pid:584790749 + +byr:1955 +cid:309 +hcl:#a97842 +pid:740105085 iyr:2020 +hgt:188cm ecl:oth eyr:2029 + +iyr:2016 hcl:#cfa07d eyr:2026 +hgt:151cm +pid:394185014 ecl:grn byr:1974 + +pid:226566060 ecl:blu cid:272 hgt:188cm hcl:#efcc98 +eyr:2029 iyr:2014 +byr:1956 + +pid:#7c7a9d ecl:#8fa327 +eyr:2006 iyr:2022 +hcl:#7d3b0c hgt:169 +byr:2025 + +hgt:188in byr:2015 ecl:xry +iyr:1975 +eyr:1928 +pid:8939875193 hcl:7bbcce + +hgt:193cm +eyr:2029 +pid:141707808 byr:1997 +cid:83 iyr:2019 +ecl:hzl hcl:#cfa07d + +iyr:2019 +pid:681586971 +hcl:#6b5442 hgt:165cm +eyr:2022 ecl:brn byr:1985 + +byr:1970 +iyr:2016 hgt:156in pid:#e32394 eyr:2024 +hcl:#efcc98 ecl:grt + +iyr:2013 +ecl:grn pid:341584587 eyr:2027 hgt:185cm hcl:#18171d +byr:1935 +cid:113 + +hcl:#fffffd ecl:grn iyr:2010 +pid:738986504 hgt:98 eyr:2024 +byr:1968 + +pid:175337478 ecl:oth hgt:173cm hcl:#733820 +eyr:2025 byr:1960 +cid:283 iyr:2018 + +byr:1959 +hcl:#341e13 eyr:2023 +pid:566612260 hgt:176cm +iyr:2017 ecl:grn + +cid:321 pid:355095309 byr:1945 +hgt:161cm +eyr:2029 iyr:2017 +ecl:brn hcl:#733820 + +hcl:#c0946f pid:75316487 iyr:2013 cid:201 hgt:152cm ecl:lzr byr:1996 eyr:1928 + +hgt:160cm iyr:2010 hcl:#a018b9 +eyr:2024 ecl:amb +cid:347 + +eyr:2021 +pid:893047101 iyr:2016 ecl:hzl hcl:#866857 byr:1988 +hgt:166cm + +hcl:#7d3b0c +ecl:blu pid:085336099 eyr:2024 +iyr:2019 hgt:178cm byr:1999 + +ecl:grt iyr:2022 +hcl:z +hgt:192cm byr:2010 + +pid:677187953 eyr:2025 iyr:2020 hgt:163cm byr:1957 ecl:grn hcl:#cfa07d + +cid:213 +byr:1987 +pid:113078018 ecl:blu iyr:2013 eyr:2022 +hcl:#7d3b0c hgt:157cm + +ecl:blu hcl:#c0946f hgt:186cm +byr:1992 eyr:2028 iyr:2010 + +pid:#b01156 hgt:67 +byr:2014 ecl:#35dca0 eyr:1922 hcl:790130 + +hcl:#602927 +ecl:blu hgt:173cm byr:1974 pid:116377061 cid:294 eyr:2030 iyr:2010 + +hgt:151cm eyr:2022 iyr:2011 ecl:blu byr:1987 hcl:#733820 +pid:#b90d2e + +cid:188 +byr:1990 +hcl:#602927 iyr:2026 +pid:530373696 +hgt:154cm ecl:gry +eyr:2029 + +hgt:178cm eyr:2027 +hcl:#733820 +ecl:grn iyr:2014 pid:575371227 byr:1965 + +hcl:#fffffd iyr:2020 +hgt:185cm ecl:amb pid:692760311 +byr:1961 + +byr:1967 pid:397518948 ecl:lzr iyr:2015 hcl:#cfa07d cid:328 +hgt:177cm eyr:2035 + +hcl:#8e1608 +pid:554618249 iyr:2010 hgt:176cm cid:220 +ecl:brn byr:1928 eyr:2029 + +eyr:2030 +ecl:oth cid:177 hcl:#602927 +iyr:2010 hgt:66in +pid:915661465 byr:1992 + +ecl:brn pid:558826437 hgt:151cm byr:1936 hcl:#fffffd +eyr:2021 iyr:2012 + +eyr:2033 +iyr:2019 hgt:190cm byr:1953 +hcl:#6b5442 +pid:584941735 ecl:hzl + +hgt:71cm +byr:2015 iyr:2025 +ecl:#663b65 eyr:2039 hcl:z pid:62548949 + +ecl:hzl byr:1943 +iyr:2020 hgt:175cm pid:830628564 hcl:#7d3b0c eyr:2021 + +hgt:182cm byr:1951 cid:175 eyr:2021 pid:635966127 ecl:blu iyr:2014 hcl:#18171d + +hcl:#733820 iyr:2011 pid:581100835 eyr:2022 ecl:grn byr:1985 hgt:192cm + +iyr:2013 +ecl:grn +hgt:185cm hcl:#a97842 byr:1981 eyr:2029 pid:711625030 + +byr:1995 +pid:326992839 +iyr:2015 +eyr:2028 hcl:#733820 ecl:hzl + +hgt:160 +eyr:2037 ecl:#6b6b83 +cid:123 iyr:2028 +pid:7692333345 +hcl:z byr:2029 + +hcl:#6b5442 iyr:2030 +hgt:165cm byr:2028 ecl:#21516d +eyr:2039 +pid:182cm + +hgt:159cm iyr:2018 pid:610521467 eyr:2028 ecl:amb byr:1934 hcl:#602927 + +ecl:blu +hcl:#09d9a5 hgt:162cm iyr:2020 +eyr:2025 byr:1971 pid:406714780 + +hgt:179cm eyr:2022 hcl:#18171d +ecl:blu pid:314891131 iyr:2015 +byr:2002 + +hcl:#623a2f hgt:181cm pid:442693333 byr:1990 ecl:grn eyr:2027 +iyr:2011 + +iyr:2022 eyr:1939 +pid:557187110 hcl:#18171d hgt:60cm ecl:#d6ac04 byr:1984 + +ecl:grn byr:1948 hgt:174cm pid:438876745 cid:321 +iyr:2018 +hcl:#866857 eyr:2023 + +hgt:189cm iyr:2012 hcl:#602927 pid:978388052 ecl:brn +eyr:2030 + +ecl:amb cid:235 +byr:1938 +pid:315825546 hcl:#ceb3a1 eyr:2029 +iyr:2013 hgt:171cm + +ecl:dne hcl:z +hgt:76cm byr:2010 +cid:185 eyr:2001 + +hcl:#733820 byr:1988 pid:558453117 +hgt:66in +ecl:oth iyr:2010 eyr:2021 + +byr:1926 pid:796557821 cid:155 hcl:#efcc98 +hgt:159cm eyr:2023 ecl:oth iyr:2016 + +byr:2023 eyr:2031 hcl:0ba99a pid:14902250 +hgt:132 ecl:#9b89b1 iyr:2017 + +hcl:#a97842 byr:1926 +cid:205 +ecl:blu +iyr:2016 hgt:159cm eyr:2029 + +byr:1939 hcl:#866857 +pid:025607627 hgt:174cm cid:309 eyr:2026 ecl:brn + +ecl:hzl pid:805133506 +iyr:2014 +byr:1991 +hcl:#cfa07d +cid:350 +hgt:190cm + +hgt:155cm byr:1941 eyr:2024 +cid:164 hcl:#602927 iyr:2013 pid:531781358 ecl:amb + +hcl:#72a068 hgt:164cm +pid:621006770 +ecl:brn +eyr:2029 byr:1969 + +byr:1991 +ecl:grn iyr:2020 +pid:9921729009 eyr:2029 hcl:#623a2f +hgt:62in + +iyr:2017 ecl:hzl +pid:768217275 eyr:2020 byr:1937 +hcl:#866857 hgt:157cm + +cid:270 byr:1993 hcl:#733820 ecl:hzl pid:722650020 +hgt:174cm iyr:2010 +eyr:2021 + +hcl:#c0946f ecl:blu +hgt:154cm +eyr:2022 byr:1929 pid:357023679 iyr:2010 + +ecl:hzl +iyr:2013 hgt:165cm byr:1979 eyr:2023 hcl:#733820 pid:008734536 + +hcl:#341e13 +eyr:2030 byr:1993 +iyr:2014 hgt:193cm +cid:346 +ecl:blu pid:536339538 + +eyr:2030 +ecl:hzl +cid:296 pid:660062554 hcl:#efcc98 +byr:1977 hgt:179cm +iyr:2010 + +cid:119 pid:498520651 hgt:159cm +eyr:2029 iyr:2015 hcl:#18171d +ecl:gmt +byr:1950 + +eyr:2025 iyr:2010 hcl:#efcc98 pid:196372989 hgt:181cm byr:1952 ecl:oth + +cid:317 +eyr:2026 ecl:blu hcl:#733820 +hgt:184cm +pid:549730813 byr:1927 iyr:2018 + +pid:591769824 +hgt:180cm +byr:1920 +ecl:blu +eyr:2021 hcl:#cfa07d iyr:2017 + +pid:988946348 hgt:183cm cid:117 byr:1955 ecl:blu +iyr:2015 hcl:#623a2f eyr:2029 + +iyr:2014 +eyr:2026 hgt:184cm +ecl:oth +hcl:#7d3b0c pid:252101860 + +byr:1995 +hgt:182cm ecl:brn hcl:#6b5442 +iyr:2012 eyr:2028 pid:482757872 + +iyr:2017 cid:333 ecl:gry hcl:#623a2f hgt:157cm eyr:2021 +pid:487895819 +byr:1951 + +hcl:#fffffd +hgt:193cm eyr:2025 byr:1927 iyr:2014 ecl:oth pid:989206297 + +eyr:2030 ecl:brn hcl:#18171d hgt:193cm +iyr:2013 byr:1953 pid:862636088 + +hcl:#fffffd +pid:204286737 ecl:gry byr:1923 +hgt:181cm +iyr:2015 +eyr:2023 + +cid:288 pid:413935643 ecl:gry +iyr:2012 +hgt:171cm +hcl:#623a2f +eyr:2020 byr:1943 + +byr:2023 hcl:#c0946f +ecl:oth +pid:182634296 eyr:2009 +cid:306 hgt:183cm +iyr:2029 + +eyr:2026 ecl:hzl byr:2003 +iyr:2027 pid:734296691 hgt:188cm hcl:#fffffd + +hcl:#18171d ecl:gry pid:401957684 eyr:2020 +iyr:2017 cid:141 byr:1944 hgt:74in + +ecl:grn hcl:z +pid:335097003 byr:1925 +hgt:170in iyr:2020 eyr:2022 + +pid:727198487 +hgt:173cm +cid:323 hcl:#18171d iyr:2012 eyr:2024 +byr:1995 ecl:blu + +ecl:amb hcl:#602927 +pid:460274414 +hgt:76in byr:1995 +iyr:2020 +eyr:2028 + +byr:2002 ecl:oth pid:101164770 +hgt:172cm hcl:#fffffd eyr:2023 iyr:2016 + +ecl:blu hcl:#888785 iyr:2016 pid:031162631 eyr:2025 hgt:186cm +byr:1959 + +ecl:blu pid:093242619 hgt:188cm byr:1970 +eyr:2025 +hcl:#6b5442 +iyr:2020 + +byr:1990 eyr:2025 ecl:grn +pid:907309460 +iyr:2011 hcl:#602927 hgt:62in + +pid:346468647 eyr:2021 +ecl:oth hgt:169cm +iyr:2010 cid:233 +hcl:#b6652a byr:1977 + +pid:904834317 iyr:2011 +hcl:#b6652a eyr:2028 cid:281 +byr:1944 hgt:187cm ecl:gry + +eyr:1988 pid:663941602 +hgt:156in +hcl:#fa2e93 iyr:2015 ecl:gry byr:1953 + +hgt:184cm cid:107 pid:094829817 +ecl:gry byr:1998 eyr:2023 iyr:2017 + +eyr:2020 ecl:gry byr:1955 hcl:#a97842 pid:553841536 + +hgt:185cm eyr:2022 hcl:#341e13 ecl:oth byr:1934 pid:863541754 cid:178 +iyr:2016 + +eyr:2029 iyr:2014 byr:1937 cid:232 hgt:177cm hcl:#fffffd ecl:blu +pid:076753558 + +hcl:#cfa07d +hgt:168cm +ecl:grn +pid:664159349 eyr:2028 iyr:2017 byr:1972 + +hcl:#a97842 +byr:1987 +eyr:2020 hgt:182cm +iyr:2018 +ecl:brn pid:560272731 + +hgt:172cm cid:125 ecl:blu pid:291640184 +byr:1926 +iyr:2014 hcl:#ceb3a1 + +iyr:2027 hgt:84 hcl:z +ecl:#b68fec +pid:809408661 +byr:2018 eyr:1927 cid:87 + +pid:951007276 cid:260 eyr:2025 +ecl:brn iyr:2015 byr:1957 +hcl:#4b8216 hgt:161cm + +pid:359973697 hcl:#6b5442 +eyr:2022 hgt:169cm +byr:1965 ecl:brn iyr:2013 + +iyr:2012 hgt:65in eyr:2024 pid:842371195 +ecl:amb +hcl:#341e13 byr:2000 + +ecl:hzl hgt:170cm byr:1950 +cid:289 eyr:2037 iyr:2021 hcl:#18171d pid:389051819 + +hgt:159cm +ecl:amb hcl:#c0946f eyr:2020 pid:010539976 iyr:2011 byr:1921 + +hgt:176cm cid:270 pid:838338992 +eyr:2024 hcl:#866857 +ecl:amb iyr:2015 byr:1982 + +ecl:blu +cid:246 hgt:185cm +byr:1987 +hcl:#fffffd pid:042361456 eyr:2022 +iyr:2010 + +hgt:164cm +pid:881486702 ecl:brn byr:1969 hcl:#c0946f +iyr:2010 eyr:2030 + +iyr:2019 hcl:#6b5442 hgt:167cm +ecl:amb +cid:207 byr:1922 +eyr:2025 pid:343956182 + +ecl:oth iyr:2012 +hgt:158cm +eyr:2024 hcl:#602927 byr:1964 + +byr:1988 pid:030965463 hgt:154cm +ecl:gry eyr:2020 cid:227 +iyr:2012 +hcl:#3edc53 + +hgt:178cm hcl:#c0946f byr:1945 ecl:amb eyr:2030 + +hgt:158cm pid:270264980 eyr:2027 iyr:2016 byr:1928 cid:259 +ecl:gry hcl:#733820 + +byr:2026 hgt:164in cid:235 ecl:xry +hcl:z pid:2517730699 +eyr:2033 iyr:2024 + +ecl:grn hgt:69cm pid:1321222581 byr:1987 +eyr:2035 +iyr:2018 hcl:#fffffd + +hcl:#733820 cid:244 +ecl:gry iyr:2013 eyr:2028 +pid:794178180 hgt:74in byr:1923 + +hcl:#a97842 byr:1934 ecl:hzl eyr:2027 +pid:401882857 +iyr:2018 hgt:185cm + +iyr:2018 +pid:665564950 byr:1990 ecl:hzl +hgt:154cm +eyr:2026 hcl:#623a2f + +hcl:#602927 cid:189 byr:1967 pid:332861702 eyr:2021 +hgt:163cm +ecl:amb + +ecl:grn pid:734161280 hgt:184cm +iyr:2018 eyr:2020 byr:1929 hcl:#a97842 + +iyr:2018 byr:1925 +eyr:2022 hgt:193cm ecl:hzl +hcl:#341e13 +pid:008582320 + +byr:2025 ecl:dne hgt:167cm pid:48963526 +iyr:2025 hcl:z +eyr:2034 + +hcl:#cfa07d ecl:hzl eyr:2029 cid:194 byr:1936 +iyr:2020 +hgt:186cm +pid:328573727 + +iyr:2011 hgt:188cm pid:338435675 cid:326 ecl:gry +eyr:2027 +hcl:#6b5442 +byr:1958 + +pid:165cm +hgt:70 iyr:1996 +eyr:2034 cid:210 hcl:z ecl:#75606f byr:2027 + +hgt:180in hcl:#a0515a pid:#97a753 +byr:2026 iyr:2016 +eyr:1995 + +eyr:2020 +hcl:#18171d byr:1978 iyr:2012 hgt:68in +ecl:amb cid:346 pid:332495922 + +ecl:blu hgt:61in pid:747650669 +byr:1961 eyr:2028 +iyr:2020 +hcl:#4992f2 + +byr:1958 iyr:2017 ecl:oth +hgt:153cm +hcl:#602927 eyr:2023 pid:108391213 + +byr:1976 eyr:2023 iyr:2015 hgt:177cm pid:391628371 hcl:#8069c4 +ecl:grn + +pid:910402636 ecl:gry hgt:188cm byr:1924 hcl:#82dfdc eyr:2029 + +byr:1978 pid:302223240 iyr:2017 +hgt:174cm +hcl:#6b6569 ecl:blu eyr:2027 + +cid:135 +byr:1995 iyr:2015 ecl:oth pid:054611703 +eyr:2023 +hcl:#7d3b0c hgt:75in + +ecl:grn +eyr:2020 hgt:184cm pid:444944678 iyr:2019 hcl:#efcc98 + +byr:1946 +hgt:70in eyr:2022 hcl:#6b5442 ecl:amb iyr:2018 pid:859762925 + +byr:1995 eyr:2022 +ecl:grn pid:575081777 +hcl:#341e13 +hgt:183in iyr:2018 + +eyr:2028 hgt:162cm byr:1989 hcl:#0bd11f +iyr:2020 ecl:gry +pid:073498924 + +iyr:2014 +pid:122787281 byr:1982 cid:138 eyr:2021 hcl:#866857 ecl:hzl hgt:184cm + +cid:198 byr:2014 +pid:5529128129 +hgt:185in +iyr:2025 +hcl:z +eyr:2023 +ecl:gmt + +eyr:2021 hgt:170cm +cid:74 +iyr:2019 pid:943445928 byr:1980 +ecl:oth hcl:#ceb3a1 + +iyr:2020 eyr:2030 pid:201122734 cid:246 hgt:169cm ecl:grn hcl:#fffffd byr:1962 + +pid:025560194 +byr:1989 +hcl:#cfa07d hgt:182cm ecl:blu eyr:2025 iyr:2012 + +hgt:151cm +hcl:#efcc98 ecl:blu +byr:1983 eyr:2023 pid:814513328 iyr:2013 cid:73 + +byr:1961 pid:536384108 hgt:188cm ecl:amb iyr:2013 eyr:2027 hcl:#888785 cid:121 + +pid:364607819 +eyr:2024 ecl:amb hcl:#b6652a iyr:2016 +byr:2000 hgt:187cm + +hcl:z eyr:1956 iyr:2028 +hgt:168cm cid:105 +byr:2026 +ecl:#5b17d3 + +cid:207 pid:913509058 ecl:brn byr:2001 eyr:2026 +hcl:#866857 iyr:2019 +hgt:180cm + +pid:363979129 +eyr:2027 iyr:2013 +ecl:gry hcl:#866857 byr:1957 hgt:62in + +byr:1932 +eyr:2027 +hgt:66in ecl:hzl hcl:#efcc98 pid:417620217 iyr:2013 + +iyr:2013 cid:331 hgt:192cm +hcl:#d896d9 pid:795744816 byr:1935 + +byr:1960 hcl:#888785 hgt:176cm ecl:hzl pid:025206542 +iyr:2015 eyr:2030 + +ecl:oth hgt:182cm +hcl:#341e13 +pid:526568190 iyr:2018 cid:280 byr:1997 +eyr:2028 + +hgt:186cm pid:273625601 byr:1993 iyr:2018 eyr:2021 hcl:#733820 +ecl:blu + +hgt:74cm +byr:1981 eyr:2024 +ecl:amb iyr:2012 pid:154027492 hcl:#733820 + +hcl:#a97842 pid:347084450 ecl:oth +eyr:2030 hgt:176cm byr:1955 cid:229 +iyr:2013 + +hcl:#fffffd byr:1979 iyr:2017 +pid:183840860 hgt:177cm ecl:blu eyr:2023 + +pid:045246162 eyr:2021 byr:1928 hgt:190cm ecl:gry hcl:#602927 + +pid:273620987 +eyr:2022 hgt:162cm +cid:269 +byr:1991 hcl:#602927 ecl:amb iyr:2019 + +pid:621069556 ecl:amb +cid:202 byr:2020 hgt:189cm +iyr:2014 hcl:#fffffd +eyr:2027 + +eyr:2022 byr:1988 +hgt:190cm +pid:349839553 hcl:#602927 iyr:2018 ecl:gry + +iyr:2014 ecl:gry +hcl:#733820 eyr:2025 hgt:179cm pid:231854667 byr:1984 +cid:102 + +eyr:2020 +pid:509400891 hcl:#cfa07d hgt:172cm +ecl:grn byr:1997 iyr:2020 + +iyr:2017 byr:1994 hgt:174cm ecl:amb +pid:685743124 +hcl:#fffffd eyr:2029 + +iyr:2012 hgt:177cm byr:1999 pid:549190825 hcl:#b6652a eyr:2028 ecl:oth cid:316 + +hgt:192cm ecl:grn byr:1924 +iyr:2011 eyr:2029 hcl:#efcc98 +pid:215962187 + +iyr:2011 hcl:#866857 +cid:164 +hgt:184cm +ecl:gry eyr:2023 byr:1959 pid:204093118 + +hgt:172cm ecl:hzl hcl:#3f2f3a pid:623470811 byr:1938 iyr:2013 eyr:2022 + +hcl:#b6652a +iyr:2019 hgt:152in +ecl:oth +pid:189008850 byr:2006 + +ecl:oth hcl:#602927 +pid:049746898 byr:1924 hgt:150cm eyr:2026 +iyr:2014 + +ecl:oth +eyr:2028 byr:2018 hcl:#733820 +pid:8676207205 iyr:2018 +hgt:190cm + +eyr:2023 cid:308 hgt:170cm ecl:oth iyr:2014 hcl:#18171d pid:874405208 byr:1936 + +eyr:2021 ecl:hzl +pid:423603306 +hcl:#c0946f cid:147 +byr:1988 iyr:2016 hgt:164cm + +hgt:176cm iyr:2010 +hcl:#6b5442 cid:280 byr:1988 ecl:hzl pid:967151288 eyr:2028 + +cid:299 hgt:163cm ecl:gry +pid:561439154 eyr:2023 +hcl:#cfa07d iyr:2019 byr:1959 + +pid:635547007 +ecl:blu +byr:1996 hcl:#7d3b0c cid:280 eyr:2023 +hgt:170cm iyr:2017 + +hcl:#888785 iyr:2014 +ecl:brn +hgt:190cm byr:1941 eyr:2021 + +hcl:#c0946f cid:199 hgt:162cm ecl:amb pid:130696599 eyr:2022 iyr:2018 byr:1948 + +cid:314 hcl:#a4fc09 ecl:hzl iyr:2019 +pid:886849824 eyr:2026 byr:1933 hgt:178cm + +byr:1996 iyr:2016 eyr:2030 hgt:169cm +pid:119207760 +hcl:#ef542c +ecl:brn + +iyr:2030 eyr:2039 hcl:#c0946f pid:#7336a0 hgt:182cm cid:347 +ecl:#c81361 byr:2003 + +pid:727812879 iyr:2013 eyr:2027 hgt:172cm +hcl:#7d3b0c ecl:gry byr:1966 + +hcl:#341e13 +iyr:2016 pid:744997238 +cid:322 +byr:1973 +ecl:hzl eyr:2028 hgt:190cm + +hgt:171cm eyr:2026 +iyr:2014 ecl:oth +pid:074049558 hcl:#04083f byr:1923 + +pid:973713235 +eyr:2021 +ecl:brn +byr:1922 hcl:#fffffd iyr:2012 +hgt:178cm + +ecl:#10165d +cid:201 eyr:2026 pid:#ceefa8 byr:2020 +hgt:164cm iyr:2011 +hcl:9fccf7 + +ecl:blu +hgt:165cm iyr:2012 eyr:2025 pid:775787557 +byr:1952 hcl:#623a2f + +pid:6186829005 ecl:lzr hcl:z hgt:69in iyr:2021 byr:2018 eyr:1974 + +pid:824641755 eyr:2028 byr:1950 hgt:184cm +hcl:#c0946f +iyr:2014 + +hcl:#7d3b0c cid:84 hgt:187cm iyr:2015 +pid:895876610 +byr:1988 eyr:2023 + +hcl:#fffffd +hgt:157cm iyr:2020 eyr:2030 ecl:grn pid:486236241 + +iyr:2010 +eyr:2029 +hgt:74in ecl:hzl byr:1926 pid:348573885 hcl:#9d1214 + +hgt:171cm ecl:oth +eyr:2022 pid:148728436 byr:1993 hcl:#a97842 iyr:2013 + +iyr:2019 +hgt:151cm +eyr:2020 pid:319882814 ecl:grn byr:1966 cid:256 hcl:#3107b3 + +hgt:184cm ecl:grn +byr:1947 +eyr:2025 iyr:2015 pid:827962962 cid:62 hcl:#f3a364 + +iyr:2013 +hcl:#fffffd pid:215012801 ecl:amb eyr:2024 +hgt:154cm +byr:1973 + +ecl:hzl hgt:152cm +hcl:#623a2f +byr:1944 eyr:2022 pid:295632731 +cid:243 iyr:2019 + +ecl:brn +iyr:2011 pid:089250747 byr:1984 hcl:73e739 cid:253 hgt:161cm eyr:2021 + +hcl:#18171d byr:1944 pid:732054667 eyr:2021 +ecl:oth hgt:173cm + +ecl:gry pid:445116331 +hcl:#a97842 +hgt:187cm eyr:2026 iyr:2020 byr:1992 + +hcl:80c091 pid:745555899 +iyr:2021 +hgt:170cm +byr:1990 + +pid:058987865 byr:1927 cid:209 +hcl:#65ccf6 eyr:2025 +ecl:brn iyr:2012 hgt:164cm + +hgt:67cm +byr:2026 hcl:f8e749 iyr:2023 eyr:1921 ecl:lzr + +eyr:2028 iyr:2013 pid:103268377 hgt:179cm byr:1922 +ecl:hzl +hcl:#7d3b0c + +byr:1923 ecl:gry hgt:167cm hcl:#7fc8ee iyr:2015 pid:427963077 eyr:2024 + +byr:1927 ecl:grn pid:741328150 +eyr:2029 hcl:#733820 +iyr:2015 hgt:157cm + +hgt:70cm hcl:e76970 iyr:1945 cid:186 +byr:1921 eyr:2029 +pid:823622634 +ecl:zzz + +hgt:61cm cid:87 hcl:d5e5ff +eyr:2024 ecl:dne pid:182634269 +iyr:2029 + +hcl:#623a2f eyr:2020 byr:1936 ecl:gry pid:236984204 +iyr:2011 hgt:156cm + +pid:872645776 +byr:2023 +cid:220 ecl:blu hgt:172cm eyr:2033 +iyr:2010 hcl:ff82f9 + +pid:774489073 iyr:2013 byr:1922 ecl:brn eyr:2025 hcl:#18171d hgt:163cm + +eyr:2024 hgt:65in byr:1962 iyr:2019 +pid:112233558 hcl:#888785 ecl:grn + +hgt:172cm eyr:2022 +hcl:#18171d ecl:blu +pid:609008608 iyr:2013 +cid:244 byr:1980 + +cid:124 hgt:175in eyr:2025 +hcl:674e80 pid:099875931 iyr:1956 + +byr:1926 hgt:188cm +ecl:hzl eyr:2021 +iyr:2018 +hcl:#866857 pid:557800355 + +byr:1939 pid:200409089 +eyr:2026 hgt:164cm +ecl:grn iyr:2013 +hcl:#733820 + +cid:73 hgt:169cm iyr:2016 byr:1976 ecl:gry eyr:2024 +pid:043453462 + +pid:609818712 hcl:#733820 byr:1958 +eyr:2025 hgt:187cm iyr:2017 ecl:gry + +hgt:66in pid:618590610 iyr:2013 byr:1938 hcl:#d1bda9 +eyr:2022 +ecl:grn cid:69 + +hgt:156cm pid:755742405 +byr:1929 hcl:#6b5442 eyr:2024 +iyr:2018 +ecl:gry +cid:105 + +eyr:2030 pid:77022842 +hgt:160cm byr:1989 +iyr:2011 hcl:#7d3b0c ecl:blu + +iyr:2015 +hcl:#341e13 byr:1968 pid:434159843 +ecl:amb hgt:150cm +eyr:2030 + +hcl:z eyr:1993 pid:#b3a5a6 iyr:1947 hgt:176in +ecl:#78876d + +cid:249 hcl:#cfa07d +hgt:180cm ecl:gry eyr:2026 byr:1965 +pid:048327438 iyr:2010 + +pid:136468890 ecl:gry +byr:1940 +hcl:#fffffd hgt:185cm iyr:2016 eyr:2021 + +hcl:#b6652a hgt:180in byr:1976 eyr:2022 pid:156cm ecl:#737836 +iyr:2013 + +ecl:amb iyr:2016 hgt:162cm byr:1955 pid:193cm eyr:2028 cid:346 +hcl:#733820 + +iyr:2010 byr:1932 eyr:2025 ecl:grn +pid:595837820 +hcl:#341e13 +hgt:166cm cid:224 + +pid:481646831 +eyr:2029 +hcl:#623a2f cid:319 iyr:2016 +ecl:brn hgt:160cm byr:1944 + +ecl:zzz pid:428329840 cid:238 iyr:2022 hgt:76cm +hcl:#a97842 +byr:2024 eyr:2028 + +iyr:2014 hgt:170cm +byr:1963 hcl:#623a2f +eyr:2026 pid:225910806 ecl:gry + +ecl:grn iyr:2010 hgt:193cm byr:1928 eyr:2028 pid:343022641 hcl:#733820 + +eyr:2023 ecl:grn +byr:1950 iyr:2012 hcl:#866857 pid:400725165 +hgt:193cm + +cid:195 iyr:2014 ecl:oth eyr:2027 byr:1966 +hgt:177cm hcl:#18171d pid:913894485 + +iyr:2015 hgt:154cm +cid:206 +pid:134599284 hcl:#602927 +eyr:2023 ecl:brn +byr:1983 + +ecl:#2d0e7a pid:#f34625 eyr:1942 iyr:2027 byr:2013 hcl:z hgt:162cm + +hgt:189cm byr:1965 iyr:2011 +cid:178 ecl:hzl +hcl:#b6652a eyr:2026 pid:683560227 + +eyr:2030 pid:047446524 ecl:grn hgt:167cm iyr:2017 hcl:#602927 +byr:1920 + +cid:86 +iyr:1920 hgt:193cm +eyr:2027 pid:401913877 ecl:hzl +hcl:#888785 byr:1953 + +byr:1991 +ecl:grn +iyr:2016 +hcl:#5e1ef2 hgt:186cm +pid:076499738 +eyr:2025 + +eyr:2030 hcl:#18171d pid:750694893 +hgt:157cm iyr:2020 cid:338 +byr:1956 ecl:gry + +iyr:2027 pid:#37f002 hgt:164cm ecl:#80df11 +hcl:#aeacee cid:320 +eyr:2039 byr:1956 + +iyr:2014 hcl:#733820 ecl:grn +byr:1960 +eyr:2025 pid:667089568 + +hgt:163cm +byr:1962 cid:108 ecl:gry hcl:#733820 iyr:2012 +eyr:2029 pid:763684725 + +byr:1984 hcl:#888785 hgt:159cm iyr:2012 ecl:gry +eyr:2024 cid:236 pid:174711749 + +ecl:gry pid:044931271 +hcl:#b6652a eyr:2029 iyr:2013 byr:1985 + +byr:1973 iyr:2018 hcl:#a97842 pid:937214113 ecl:blu +cid:247 hgt:186cm eyr:2023 + +cid:108 pid:231782961 iyr:2017 +eyr:2034 hgt:170cm byr:2025 hcl:#18171d ecl:utc + +pid:298274796 byr:1928 hcl:#a97842 hgt:188cm iyr:2011 ecl:gry eyr:2028 + +hgt:65cm iyr:1943 eyr:2025 +hcl:z +pid:65702335 ecl:#bb54e6 byr:2010 + +pid:499116613 eyr:2024 +ecl:gry hcl:#cfa07d hgt:193cm byr:1999 +cid:278 iyr:2015 + +hcl:#6b5442 eyr:2027 hgt:175cm byr:1988 +ecl:brn pid:410075320 iyr:2010 + +pid:269678991 ecl:oth iyr:2013 +hcl:#602927 byr:1991 eyr:2023 + +ecl:oth +pid:144593265 hcl:#fffffd +eyr:2020 iyr:2018 +byr:1975 hgt:160cm +cid:304 + +iyr:2014 hcl:#ceb3a1 eyr:2029 +byr:1951 pid:520804395 hgt:185cm ecl:oth + +hgt:159cm +pid:312887994 +cid:205 +iyr:2016 ecl:hzl hcl:#866857 eyr:2029 byr:1944 + +iyr:2023 ecl:#54c85c byr:2030 +eyr:1946 cid:190 pid:512417622 + +byr:1946 eyr:2023 hgt:163cm +hcl:#2d4e9c ecl:brn pid:839043333 iyr:2014 + +iyr:2027 cid:122 hgt:187cm eyr:1975 ecl:grn byr:1920 +hcl:#c0946f + +eyr:2029 hgt:189cm ecl:blu byr:1922 iyr:2016 +pid:924104599 +hcl:#b6652a + +hgt:162cm +iyr:2016 byr:1921 hcl:#18171d eyr:1938 ecl:hzl +pid:682222023 + +cid:118 pid:959515596 +byr:1921 iyr:2010 eyr:2029 hcl:#7d3b0c ecl:oth hgt:158cm + +ecl:#8ac844 pid:162cm +hcl:8f4d80 hgt:150in byr:2005 +eyr:2008 +iyr:2017 cid:174 + +hcl:z byr:1936 +pid:255481052 eyr:2021 +iyr:2012 hgt:170cm cid:276 ecl:hzl + +iyr:2013 byr:1935 hgt:179cm +eyr:2023 ecl:amb pid:073621563 hcl:#623a2f + +hcl:#18171d cid:230 byr:1989 ecl:oth eyr:2021 hgt:181cm pid:661224730 +iyr:2019 + +pid:748039140 iyr:2020 eyr:2020 ecl:#6ebbc2 hcl:#fffffd hgt:171cm +byr:1995 + +ecl:hzl pid:758144605 hcl:#ceb3a1 hgt:186cm +eyr:2028 iyr:2014 +byr:1928 + +ecl:hzl +hgt:66in +byr:2000 iyr:2017 eyr:2020 +pid:162973694 hcl:#a97842 + +iyr:2012 pid:749770535 +byr:1969 cid:148 +hcl:#733820 +hgt:180cm eyr:2021 ecl:hzl + +iyr:2010 +byr:1958 +hgt:164cm +ecl:blu hcl:#733820 pid:890634327 eyr:2024 + +hgt:70in pid:218397894 +iyr:2020 eyr:2025 ecl:gry hcl:#341e13 +byr:1970 + +eyr:2020 pid:854208004 hgt:157cm hcl:#7d3b0c ecl:amb byr:1981 iyr:2020 + +byr:1924 +cid:321 eyr:2028 hcl:#cfa07d iyr:2010 ecl:amb pid:036669613 hgt:170cm + +ecl:#6649d4 pid:0026989865 cid:188 +hgt:152in +byr:1950 hcl:z eyr:1928 iyr:1963 + +hcl:#ceb3a1 ecl:grn eyr:2028 pid:074363489 iyr:2010 hgt:173cm byr:1966 + +eyr:2030 +pid:9731612333 ecl:#f8824c +iyr:2022 hgt:161in +byr:2023 +cid:316 +hcl:z + +hgt:175cm iyr:2016 eyr:2024 cid:244 +byr:1952 +pid:085432899 +hcl:#fffffd ecl:brn + +ecl:brn eyr:2026 iyr:2017 hgt:75in +pid:745302991 byr:1969 hcl:#7394c7 diff --git a/res/input_day05.txt b/res/input_day05.txt new file mode 100644 index 0000000..1de357f --- /dev/null +++ b/res/input_day05.txt @@ -0,0 +1,927 @@ +BBFBFFBRLL +FBFBFFBRRR +BBBFBFFLLR +BFBBFFBRRL +BBFFBBBRRL +BFFFFFBLRR +FBBBFBFLLL +FBBFBFFLRR +FBFFFFBRLR +FBFBFBFLRL +FFBBFFFLRR +BFFBBBFRRL +FFBBFBBRRR +BFFBBFFRRR +FBBFBBFRLR +BFFFFBBLRL +BFFBFFBRLL +BFFFBFFRLL +BBFFFBFRLL +FFFFBFBLLR +FBFBFFBLRR +FBBFFFFRRL +FBBFFFFLRL +BBFBFFFLRR +FFBFBBFLLR +FFFFBFBRRL +BFFFBBBLRR +BBFBFBFRRL +FFBFBFBRRL +FFFBBBBRRL +FBBBBBBLLR +FFFFFBFRLR +FBBFBBBRRL +FBBBBFFRLR +FFBBBFFRLR +FFBBBFFLRR +FFBBBBBRLR +FFBFFFBRLR +FBFBFFBLRL +BFBBBBFRRR +FBFFBFFRRL +BFFFBFFLRL +BBFBFBBRRR +BFBFBFFLRR +BFFFBBBRRR +FBBFFBFLRR +BFFBFBFLRL +BFBBBFBRRL +BFBFBFBRRR +FFFBBFFRLR +FFFFBBBLRR +BFBFFBBRLL +BBFFBBBLLR +FBFFFBFLLL +FFBFBBFRRL +FFFBBFFLLR +FBBFFFBRRL +FBFFBBBLRL +FFBBFBBLLL +FBBBBBBRRR +FBBBBFFLRR +FBFFFFFLLL +FBFBFBFLLL +BBFFBFBLRL +FBFBBFFRLR +FFFBFFBRLL +FFBFFBFRRL +FBBFFFFLRR +FBFFFFFRLR +FFFBFBBLLR +FBBBFFBRLL +BBFFBBFLRR +FBBFBBFLLL +FFBFBBBLRR +FFFFFFBLLL +BFFFBBFLLR +FFFFBBFLLL +BFBFBFBLRL +BFBBFFBRRR +BFBBFBBRLR +FFFBFFFLRL +BBFBBBBLRL +FFBFBBBRRR +BFFFBFBRLL +BBFFFBFRRR +BFFFFFFRRL +BFBBFFFRLR +FFFFBFBLRL +FBFBFFBLLR +BBFFFBFRLR +FFBBFFFRLL +FBBBFBFRRR +BFFBBFFLLR +FFFFBFBRRR +FBFFFBBRLL +FBBFFFBRLR +BFBFBBFLLL +BFFBFFBRRR +FFBBBFBRLL +BFBFFBBLLL +FFBFFBBLLL +FFBBFBFRLL +BFFFBBFLRL +BBFBBFFLRL +BFBBFFFRLL +BBFFFFFRLR +FFFBBFBLRR +BBFFBBBRRR +FBFFFBFRRL +BFBFFBFRRR +FBFBBFFLRR +FBBFFBFLRL +FBBBBFBLLL +BFBFFBFLRR +BFFBFBBRLR +FFBBBFBRRR +FBBBBBFLRL +BFBBFFBRLL +BFFBFBBRRL +BBBFFBFRRR +FBBFFBBRLL +BFFFFBBLLL +BFBBBFBRLL +BFFFBBFRLR +FFBFFFBLLR +BFBBFFFRRL +BFFBFBFRRR +FBFFBFBRLR +FBFFBBFLLR +BFFFFFBRRR +FFFFFBBRLR +FBBFFFBLLL +BFFFFFBRRL +BBBFFFFLRR +BFFFBBBRLL +BFFFFFBRLR +FFFBBBBLRL +FBBFFBBLRL +FBBBBFFLLR +BFBFBFBRLL +FBFBBFFLLR +FFFFFBFLLL +FBBBFFFRLL +BFBBFFFLLR +FBFBBFFRLL +FBFBBFBLLL +FBFBFFBRLL +BBBFFFBRRL +FFBBFBFLLR +FFFFFFBRLL +BFBFBFBRRL +BFFBFFBLLL +FBBFFFBRLL +FFFFBBBLLR +FFBFFFBLRL +FBFBBBBRRR +FFBFBBBRLL +BFBFBFFRRR +FBBFBFFRRR +FBBFFFBLLR +FBBBFFFLRR +BBFFFFFRLL +FBBBBBBRLR +BFBFBBBRLL +BBFFBBFRRL +BBFFFFFLLR +FFBFFFBRLL +BBFBBFBLLL +FFBFFBFLRR +FBBBFFBRRR +FBFBFBFRRL +FBFBFBBRLL +FFFFFFBRRL +FBBFFBFRLR +FBFFFBFRLL +FFBBFFBRRL +FBFFBBBLLL +FFFBFBFLRL +BBFFFFBRRR +FFBFBFBLRL +FBBBFFFLLR +FBBBFFFRRR +BFFFFBBRRL +BFFBBBFLLR +BBBFFBFRLR +FBFBFBFLRR +FFFFBFBLLL +BFBBFFBLLL +FFFFBBFRLL +FFBBFFFRRR +BBFBFBFLRL +FFBBBBBRRR +FBBBFBBLLR +FBBBFBBRRL +FBFBFBFLLR +BFFFBFFLLR +BBBFFBBLRL +FFFFFBBLLL +FBFBBBFLLR +FBFBFBBRRR +BFFFBBFRLL +BFFBFFFLRL +FFFFFBBLRR +BFFBFFBLRL +FBBFFBBRRR +FFBFFBFLRL +FBFFBBBLLR +BBFBBFBRLR +BFBBFFFLLL +FBFBBBFRLL +BFFFFBFLRL +BBFBBFFRRR +BBFBBBFRRR +FFBFFFBRRL +FFFFFFFRRR +FBBFBBBRRR +BBBFFBFLLR +BFFBFFBRLR +FFBFFFBLRR +BBFFFBFLRR +BBBFFFBLRL +FFBBFBFLLL +BBFBFFBRLR +BFBFFBFLRL +FBFFFBBLLL +FBBBBBFLLR +BFBFFFBLRL +FFFBBBBLLL +FBBFBBFRRL +FBBFFBFLLL +FFBBBFFRRL +BFFFBBFRRR +FFBFBBFRLL +FFFBFFFRLL +FBBFFFBLRR +BBFFBBBLLL +FBFFBFFRLR +BBFBFFFRLR +FBFBBFFLLL +BBFFFBBRLL +BBBFFBBLLL +BFBFFFFRLR +FBFBBFBLLR +FBFFFBFLLR +FFBBFBFLRR +BFFBFFFLLR +BBBFFFBRLR +BFBBBBBRRR +FFFBFFFRRL +FFBBBBBRRL +BBFBFBFLLR +BBFFFFFRRR +FBFFBBFRRL +FBFFBFBLRR +BFBFFFBRRL +FFFBFBFLRR +FFBBFFBRLR +BFFBFBFLRR +FBBBBBFLLL +BFBFFFBRRR +BBFBFBBRLR +BFFBFBBLLL +FBBFFFFRLR +BFBFBFFRRL +FFFFBBBRLR +FFFBBFFRLL +FBFFBBBRLL +FFBBBBBRLL +BFFFFBFRRR +FBBFBBFLRR +FFBFBFBRLR +FBFBFFBRRL +FFFFBFFLRR +BFBFBFFRLR +FFFFFFBRRR +BFBBBBFRLR +FFBFBBBLLR +FBBBFFBLRR +FFBFBFFLRL +BBBFFFBLLL +FFBFFFBLLL +BFBFFFBRLR +BFFFBFFLRR +FFBFBFFRRL +FFFFFBBRRR +FFBBFFFLLR +FBFFBFFRLL +FBFFBBFRLL +FFFFBBFLRL +FFFBFFFLLL +BFFBFBBRLL +FBFFFFFLLR +FFFFFBBRRL +FBFBFFFRRL +FBFBFBBRLR +FFBBFFBLRR +BBFFBFBLLR +BFFBFBFLLL +FBFBFFFLRL +FFFFBBFRRR +FFBFFFFRLL +FBFBBFBRRL +FBFBBFBRLR +BBFFFFBLRL +BFFFFBFRLL +FFBFBBFRLR +FFBFFBBLRR +BFFFFFFRRR +FBBBFBFLRL +FBFFBFBRRR +FBFFBFFRRR +BFBFBFBLLR +FBBBBBBRRL +BFBFBFBLRR +BBFFBFBLLL +BFFBBBBLRL +BFFBBBBLLR +FFBFFBBRLL +BBBFFBBRLR +BBBFFFFLLL +BFBBFBFLRL +BBFBFFBLLR +FFFBBFBRRL +BFBBFBBLRL +FFFFBFFRLL +FFBBBFFLLR +FFBBBFBRRL +FFBFFFFRRL +FBBFFFBLRL +BBFFFBBLRR +FFBBBBBLLR +BBFBBBBRLL +BFFFBFFRRR +FFFFBBBRLL +FFBFFBBLLR +BFBBFBFRRL +FFBFBBFLRL +FBFFFFBRRL +BFFFFFBLRL +FFFBBFBLLL +FBFFFFBLRL +BFBBFFFLRR +FBBBFBBLRR +BFBBBBBLLR +FFBFFBFRLR +FFBFBBBLRL +FBFFFBFRLR +FFBBFFBLLR +BBFFBBFRLR +BBFFFBBRRR +BBFFBBFRLL +FFBBFFBLLL +FBBBBFBLRL +FFFFBBBLRL +BBFBBBBRRR +FFBFBFBLLL +BFFFFBBLLR +BFFBFFFRLR +BFBFBFFLRL +FFFBBBBRLR +FFBBBBBLRL +BFBBBBBLRL +BBFFFFFLRR +FBBBFFFLRL +FBFBFFBRLR +BFFBFFFLRR +FFFFFBFLLR +BFBBBBFLRR +BFBBBFBLLL +BBFBBFBRRL +BBFFBFFLRL +BFBBBBBRLL +FBBFBBBRLR +BBFFBBBLRR +FFFBBFBLLR +BFFFBBBLRL +FFFBFBBRLL +BBFBBFFRLR +BFBFFBBRRR +FFFBFBFRRL +FFFBFFFLLR +BBBFBFFRLR +FFFBFFFRLR +FBBFBFBRRR +FFBBBBFRRR +FBBBFBFLLR +BBBFBFFLRL +FFBBFFFRLR +FFFBFFFRRR +FFBFFFFLLR +BFFBBFBLRR +FBFFBFBLRL +BBFBFBFRRR +BBBFFFFLLR +FBFFBFFLRR +BFFFFFFLLL +FBFBBFBRLL +FFBFBFFRLL +FBFFBFBLLL +FFBBBBBLLL +FFFFBFFLLL +FBBBBFBRLR +FFBBBBFLLL +FFBBBFFRLL +FFFBFBFLLL +BFBBBBBLLL +FBBFFFFRRR +BFFBBFBRLR +FBFFFBBLRL +FBBFBFBLRR +BBFFFFBLLR +FFBBBBFLRR +FFBFBBFLRR +BBFBBFBRRR +FBFBFBFRLL +BFBFBBBLLL +BFBBBFBRLR +FFFBFBFRLR +BFBBBFFRRR +FFFFBBBLLL +BFBFBBBRRR +FBBBBFFRRL +BBFBFFFLLL +FBBBFBFRLR +BFBBBFFLLR +FBFFFFFLRL +BFBFFBFLLL +BFFFFBFLLL +BFBBFFBLLR +FBBFBBBRLL +FFFBBBFLRR +FBBBBFFLLL +FFBBBBFLLR +BFBFBFBLLL +BFBFBBFRLR +FBBFBBFRLL +FBFFFBFLRR +BFFBBFFRRL +FFFBBFBLRL +FBFFFFFRLL +BFFFFBFRRL +FFFBBBBRLL +BFFBFFBRRL +FBBFFFFLLL +FFBBFBBLRR +BFBFFFBLLL +BFBFFFFLLR +BBFBFFBRRR +BBFBBFFRLL +FFFBBBFLLR +BFFBBBBRRR +FBBBBBBLRR +FFBFFBBLRL +FBBFFBBRLR +BFFFBFFRLR +FBBBFFBLLL +FFFBFBFRLL +BFFBFFFRRL +BFFFBFBRRR +BFBFFFFLRR +FFFBFBBLRR +BBFBBBFLLL +FBBFBFFRLR +BBFFBBFLLL +FBFFBBFRRR +BFFFBFBLRL +BFFFFBFLRR +BFFFFBFRLR +BBFFBBBRLR +FBBFBFBRLL +FBFBBFFRRL +BBFFBFBLRR +FBBFFBBLRR +BBFFBFBRRL +FFBBBBFLRL +FFFBFBFLLR +BBBFFFFRLR +BFBFFBBRLR +BFFBBFFRLR +BFFFFFFLRR +BBFFFFBLRR +FFFFBFFLRL +FBBBBBFLRR +BFBFFFFRRR +FBBBFBFLRR +BFBFBBFRLL +FBBFBBFLLR +FBFFFFFRRR +FBBFFBFRLL +FBFBFFFRLR +FFBBBFBLLR +FBBBBFFLRL +BBFFFFBRLL +FBBBBBFRRL +FBBBBFFRLL +BBFFBFBRLR +FBFBFBBRRL +FBBFBFBLLL +FBFFBFBLLR +BFBBBFFLLL +FFBFFBBRRL +BBFBFBBLLL +FBBBFFFLLL +FBFBBBBLLL +FBFFBFFLLL +FFFBBFFLRL +BBFFBBBLRL +BFFFBFBRLR +BBFFFFBRLR +BBFBBBBLLR +BFFBBFBLLR +FFFBBFBRLL +BBFFFBFRRL +FFBFFFBRRR +BBFBFBBRLL +FBFBFBBLLR +FBBFFBFRRR +FBBBFFBLLR +BFFFBBBRRL +BFFBBFBLRL +FBFFBBFLLL +BFBFBFFRLL +BFBBBFBLLR +FBFFBFFLLR +FBBFBFFLLR +BFBFFFBLRR +FBBFFBBLLL +FFBFBFFLLL +FFBBFFBRLL +FFBFFBFRRR +FBFBFFFRLL +BBFBBFFLLL +FBFBBBBRLR +FFFBBBFRLL +FFBFFBFLLR +BFFFFBBRLR +FFBFBBBRRL +FFFFBFFRLR +FFBBFFFLLL +FBFFFFBLRR +FBBBBFBRLL +FBFFBBBLRR +FFFBBFBRRR +BFBBFBFRRR +BFFFBFBLRR +BFBFFBFRRL +FFFBBBBRRR +FBBFBFFRRL +BFBBFFBLRR +FBBFBBBLRR +BFBBFBBRRR +FFFFFBFLRR +FBFBBBFLRR +BBBFFFFRRL +BBFFFBFLLL +BBBFFFFLRL +FFBBBBBLRR +BBBFFBFLLL +FBFBFBBLRR +FFFBFFBLRR +FFBBBFBLLL +BBFFFBFLLR +FFFFBBFRRL +FBFBBFBLRL +BBFBBFFLRR +BFBFBFBRLR +FFBFFBFRLL +BFBBBFFRRL +FFBBFBBLRL +FBFFFFFRRL +FBFFFFBLLR +FFBFBFFRLR +BFBBFBFRLL +FBFBBBFRRR +FBFBBBBLRL +FFFBFFBRRL +BFFFBFBLLR +BFBFBBFLRL +BBFBFBBLLR +BBFFFFFLRL +FFFBBFFLRR +BFFBFBBLRR +BBFFBBBRLL +BFBBFBBRLL +BFFBBBFRRR +FBFBFFFRRR +FBFBFFFLLR +FFFBBBFLRL +BBFBBFFRRL +BFFFFFFRLR +FFBBBFBRLR +FFFFBBBRRR +FFFBFBBRLR +FBFBFFBLLL +BBFBFFBLRR +FBFFFFFLRR +FFFBFBBLRL +FBBBBFBLLR +FBBBFBBLLL +FFBBBBFRLL +FBFFFBFRRR +FFFBFFFLRR +BFFBFFBLLR +BBFBBBFRLR +BFBFFBBLRR +FFFBBFBRLR +BFBBFBFRLR +FBFFFBBLLR +FBFBFFFLRR +BFFFFBBRRR +BBFFFFBLLL +BFFBFFBLRR +BFBFFBFLLR +FBFBFBBLRL +BFFBBBFRLL +FFFFBFBRLL +FFBFFFFLRR +FBBFBBFRRR +BFFFBFBRRL +BFFFFBBLRR +FFFFFBBRLL +FBFFBBBRRR +FFFBBFFLLL +FFBFBFBRLL +BFFBFBBRRR +FFFFBBFLRR +FBBFBBFLRL +BBFFBBFLRL +FBBBFBFRRL +FFFBFBBLLL +FFFBFFBRLR +FFFFFBFLRL +BFFFFFBLLL +BFFBBFFLLL +FBBFBFBRLR +FBFBFBFRLR +FBBBBFBRRR +BFFFFFFLRL +BFBFBBBRLR +FBFBBBBRRL +BFBBBFFLRR +BFBFFFFRLL +BBFFFBBLRL +BBFFFFBRRL +BBFBFBBRRL +BFFBBBFLRR +BBBFFFBLLR +BBFFBFBRLL +FBBFFBFRRL +BFFFFFFLLR +FFFFFBBLLR +FBFBBFFLRL +BBFBFBFLLL +BBFBBBBLRR +FFBFFFFLLL +FBFFFBBRRR +BBFBFBBLRL +BFBBBBBRLR +FBBFBBBLRL +BBFBBBFRRL +BBFBFFFLRL +FFBFFFFRLR +FFFFBFFLLR +FBFBBBBLLR +BFBBFBFLLR +FBFFBBFRLR +BFFFBFBLLL +FBFBBBBLRR +BBFBFFFRRL +FBFBBBFLRL +BFFBBFBLLL +BFFBBBBRLR +FBBBFBBLRL +BFBBBFFRLL +BFBBBFBLRR +BFBFBBFRRL +BFBBFBFLRR +FBFFBBFLRR +BBBFFBFRLL +BBFBBFBLRL +BBFBFFFLLR +FBBBBBFRLL +FBFBFFFLLL +FFBFBFBLRR +FBBBFFFRRL +FFFFBBFRLR +FFBFBBBLLL +FBBFBFFLLL +BBBFFFBRLL +BFBFBBBLLR +BBFBBFBLLR +FFFFBFFRRL +FBFBBBFRLR +BFFBBFBRRR +BFBFBFFLLL +BFBBBFBRRR +FBFFBBBRLR +BFBBFFBRLR +BBFBBFFLLR +FFBBFBFRRR +BBFFFFFRRL +FBBFBBBLLR +BBBFFFFRLL +FBFFBFBRRL +BFFFFFFRLL +FBBBBBFRLR +FBBBBBBLLL +BFFFFFBLLR +BBBFFBFLRR +BFFFFBBRLL +BFBBFFFLRL +BBFBBBBRLR +FBFFBBBRRL +BBFFBFFLLR +BFFFBBBRLR +BFBBFBBLRR +BBBFBFFRLL +FBFFFFBRRR +BFBBBFFLRL +FBBFFFFRLL +FFBBFBBLLR +BFFBFFFRRR +BFBFFBBLRL +FBFBBBFLLL +FBBFFBBLLR +FBBBFBBRLL +FBFFFFBRLL +FBFBBFBRRR +FFBFFBBRRR +FBBBFFBRRL +FFBFBBFLLL +FFBFBFBRRR +FFBBFBFRLR +FFBBBBFRRL +FBBFFBFLLR +FBBFBFBLRL +FFBBBFFRRR +FFBFBFFLLR +BBFFBFBRRR +BFFBBBBRRL +FFFFFBFRRL +FBFFBFFLRL +FBBBFBFRLL +FFBBBFBLRR +FFFBFFBLLR +BFFBFBFRLL +FFFBFBBRRL +BFFBFFFRLL +FBBBFFBRLR +FFFBFBBRRR +BBFBFFFRLL +BBFFBFFLRR +BFFBFBFRRL +FFFBFFBLRL +BBBFFBFLRL +BFFBFBBLLR +FFBFBFBLLR +FFFBFBFRRR +FFBBFFBLRL +BBFFBBFLLR +FFBBFBBRLL +FFBBBBFRLR +FFFFBFBLRR +FFBFBFFLRR +BFBBBBBLRR +FBBFBFFLRL +FFFFFFBLRR +BFBBBBFLRL +BBBFFBBLLR +BFFFBBFRRL +FFFFBBBRRL +FBFFFBFLRL +BBFBBBBLLL +BFBBBFFRLR +BFFBBBBLLL +BFFFFFBRLL +BBFBBBBRRL +BFBFBBBLRR +FBFBBBFRRL +BFBFFFBRLL +BFFBBFBRRL +FBBBBFBLRR +BFBBFFBLRL +FFFFFFFRRL +BFBFBBBRRL +BFBBFBBRRL +FFBFBFFRRR +FFBBFFBRRR +FFFBBBBLLR +FBBFBFBLLR +BBFFFBBLLR +FFFBBBFLLL +FFFBBFFRRL +FFFBBFFRRR +FFBBFFFLRL +FBFBBFBLRR +BFFBBFBRLL +FFBBFBFLRL +FFFBBBFRLR +BBFBBFBRLL +FBFBBFFRRR +BFFBBFFLRL +BBFFBFFRRR +BBFBBBFLRR +FFFBBBFRRL +BBFFBFFRRL +FFBFBBFRRR +BBFFFBBRLR +FFFFBBFLLR +FFFFFFBLRL +BBFBFFFRRR +BFBFFFBLLR +FBFFFFBLLL +FBBBBFFRRR +BFFFBBFLRR +FFBBFBBRLR +BFFFBFFRRL +BBFBFFBLLL +FBBFBFFRLL +BFBFFBBRRL +BFFBBBFLLL +FBFBFBFRRR +BBFFBFFLLL +BFBFBBFLLR +BBFBFBFLRR +BFBBFBBLLR +FBBBFBBRLR +BFFFBBBLLL +BFBBBFBLRL +BBBFFBFRRL +FFFFFFBLLR +BFFFBBBLLR +BFBBBBFLLL +BBFBFBBLRR +FBBFBBBLLL +BBFFBFFRLR +FFFBBBBLRR +BBBFFFFRRR +BFBBBBFRRL +BBBFBFFLRR +BFBBBBFLLR +BFFBBBFLRL +BBFBBBFRLL +FFFFFBFRRR +BBBFBFFLLL +BFFFBBFLLL +BFFBFFFLLL +FFBFFBFLLL +BBFBFBFRLR +FFBBFBFRRL +BBFBFFBLRL +FBBFFBBRRL +BFFBFBFLLR +BFBFBFFLLR +BBBFFBBLRR +FBBBBBBLRL +FFBBBFBLRL +FFBFFBBRLR +BBBFFBBRRL +BFBBFBBLLL +FBFFBFBRLL +BFBBFBFLLL +BFFFBFFLLL +FBFFFBBRLR +BBBFFFBLRR +BBFFBBFRRR +BFFBBFFLRR +BFBFFFFRRL +FFFFFBFRLL +FBFBBBBRLL +FBFBFBBLLL +FFFFBFFRRR +FFBFFFFRRR +FBFFFBBLRR +FFFFBFBRLR +BFBFBBBLRL +FBBFFFFLLR +BFFBFBBLRL +FBBFBFBRRL +BBFFBFFRLL +BBFFFBFLRL +FFFBBBFRRR +BBBFFBBRRR +BFFBBBBRLL +BBFFFBBRRL +BFBFFBBLLR +FFBBBFFLLL +BFBBBBFRLL +FFBBFFFRRL +FBBBFFBLRL +BFFBFBFRLR +BBFBFFBRRL +FBBBBBBRLL +FBBBBBFRRR +BFFBBFFRLL +BBFFFFFLLL +BBBFFBBRLL +FFFBFFBLLL +FFFBFFBRRR +FFBFBBBRLR +FFFFFFBRLR +FBFFFBBRRL +BFFFFBFLLR +BFBFBBFRRR +FBBBFBBRRR +BFBFFFFLLL +BBFBBFBLRR +BFBFBBFLRR +FFFFFBBLRL +FBBFFFBRRR +FFBBFBBRRL +BFFBBBBLRR +BBFBBBFLRL +FBFFBBFLRL +BBBFFFBRRR +BBFBFBFRLL +BFBFFBFRLR +BFBFFFFLRL +BBFBBBFLLR +BFFBBBFRLR +BFBBBBBRRL +BFBFFBFRLL +BBFFFBBLLL +FBBBBFBRRL +FFBFFFFLRL +FFBBBFFLRL +FBBBFFFRLR diff --git a/res/input_day06.txt b/res/input_day06.txt new file mode 100644 index 0000000..ab7afe6 --- /dev/null +++ b/res/input_day06.txt @@ -0,0 +1,2079 @@ +tzibqaulrw +bratip +trbhia +rtiab + +sgqytjiw +gkwqybtims + +tufcqanysox +ovufxnaqt +aenbqfkutgjx +taufvnxqi +nuaqxfmsth + +qj +jsqx + +gltviuzdrkema +idclmuektgora +idayrlmgukte +xailwumktdergf +jmrniauldbthkpqge + +zc +ucfhz +cisz + +i +i +i +i + +rqigekxlmzswycnjhfv +lznacirjfkyvxwsmeg + +bohsmgujxdnrwza +pfaeqkinwgxjt + +buhiwcayjsdlox +hxoiajbdyucswl +asildxjbcywuofh +iyduashjcboxwl + +rhkfis +srfhki +ykgfstqprhic +kfhsir + +gbzcuqiow +cwoqbgzi +lpqzwosibcg +zgowbucqi + +fdveytbpijnohu +grlwctfqzksuxim + +b +bmd +ln +v +b + +lmozeafivktr +rtpvofl + +gmxertwia +xitmfqwarzh +rwximagpt +tmwaripx + +hzldcoqpafkt +aqwgsrxmv +niauqe +jyeqa + +aep +dop +lupd + +efhlq +flaq +qflwt +fqmpl +ltqf + +dnoumwkb +xabuw + +ua +hzlu +uj +ou + +he +h +he +spfkhzoyvc + +yznp +np + +nre +n + +tqxjlrpawhbgvkumyszi +ylavhburmstjgqikpzwx + +sraeuktbvh +muhtbesavrk +euatrvhkbs +hvtksbaeru + +zmqvkue +kmhvu +umvk + +qzgrivbwtonhdc +grwcibmtvzhdofnk +btgsdhpwcuavnoi + +srigyn +ycjn +ny +noy + +rtbyuhocklijsqfnavezgdwx +tpibcjzerlaswumdghoqfy + +lukynotgeqbdi +bgoylqkniued +kdeiolnbqugy +ydelinbquogk +nekilobugyqd + +ywe +suaqdhtz + +vzobmej +sizedvpbj + +derbngzw +nwgrbdze +zbwhmergdcn +dwzgnber +sberdnwzg + +oz +zo +oz +zo + +dtkq +kdqt +tqdk + +vogmbel +emovlgn +logmev +aleovmtg +ovesklygizjmurqc + +cr +rt +tgi +nahex +vuz + +dsfxounj + +o +oehk +ym + +fkbje +muhobseck +pbxkeg +eqbxkfd + +wkheztoycbi +jofzubhtewnk + +uocbzkrtvlmn +lcotbknvurz +ztclrvbnuok +cokbzlruvnt +kbzcoearnvtul + +fyxt +txf +ftx + +zxklciqthyfuw +yqtxlkwhzcufs +lthrfqyuwkzcx +yxlhztfcqubkw +wctqklxzyfuhm + +dgesru +cxruyjd +rkqldue + +yckqsu +exri +hfwmjpnvdg +yiu + +nlomrcuexf +zqxurmvlnesf +lermufxn +lunemfcxr + +ridaxtcjkmylwe +jeriymacwkxtodl +jldikatemrcyxw +kcaidtxwyjvemlr +ylwkarcidtmxej + +caekhtg +ocktg +dogckt + +p +a +p +sbqi + +xkycajft +sogfnyd +abyhftpjxk +tkxyflhe + +wcqrv +qacj +qbfd +zpq +qm + +tdabm +fsamlb +thbamd + +jodrxcp +ruadmv +krfngdqezihyb +stljmrcdpw + +fbstci +wjqe + +ahtfkpxqn +pnlkstvoajzudm +zpiatnkw +awnsktp +matjpnk + +ameoh +hmenoacq +hoema +eamoh + +rtmiqj +irnt +geyhsdftzika + +smditfuacpnzwle +auslfncmegzihbp + +xymrjlip +rjmtiwpkxly +rilymjpx +jpixymrfl +irmjyxlp + +whavgdmlzbekf +hfvdmbliwgkpe + +rjawtqd +qatjrdw +adjuwxrltq +wdaqjtr + +pfeuiqsdahb +equabhip +heiupabq +aieqxuphb + +cymzbepguskinrwqhd +wyqkmscigehrvdbpunz +wusdinmkhqycgezprb +icugyzrnpwdksbhemq +ubzeskcnqwhdyrmipg + +eignhalkj +tbnojhsfkru +ndvjeykh +jncmkwih + +notudfbqhrajywsg +jsrhyufndowatbqg +hsgwonrbyjqufdat +ujhtaqsndbowyfgr + +vwcfndmjze +cqzvwfmdnkgpijerty +mvjnzfwdce +zcnwvmfjde + +ayt +tay + +vgabymcl +ydmqvph +yvouqmw + +vb +vk +vb + +szhk +va +zhcdkw + +aelhozrnbyfcsugwkiq +wthqenkfysagloirczu +kiwzcrynghfsuloetavq + +umlgjeoz +yglmfxcrpz +miclgzphk + +vkzljpfn +kgcyhptqu + +dietxnj +tvx +wtx +xotfbysump +xitk + +wiselg +sgjewzi +gwesti + +saq +sqa +psaq +aqs + +bvjixwhtgofny +cqlnhgjetdubp +qrgnhmajubt + +pqzej +qjvpy +wjpvq + +hxauivlnjtzg +nhgaiuxljzt +uigtlnjaxhz +zunitjxlgha +hxjztainglu + +nhjwyoegafutipzx +yzclvwnqsbmf + +gdej +ejdg +gjed +edgj + +j +p +l + +x +x +xgn +x +x + +krp +pkr +pqkr +rpk +krp + +arch +ahrc +rahc +rahc +crahk + +qayg +gyaq +aygq +qayg +gqya + +pwjiteyurlamnkvfqh +kwqhvazimufjxysr +vafqmkhyjdwuri + +kryonhgpx +ptycxirgsnuhw +hgryxpvdn +gyrxpnh +xjrpzdyghfn + +bw +w +w + +knhfqxlpajyes +ashnxpjkel +pxkjnlaehs +sjkexhpnla +euhpnxkljas + +wyugbiotdlkpa +duiyopablgwmt +tzaidwhlbpugyo +gtsyabdlmupwio +owabgiytpldu + +oitpjudvmnhr +itvzhrunxjmd +jcdthivunmr +tmhcujdnirv +vtkhnfjrmuid + +yxl +yxl +lpymx +ylx + +ejdx +ejdi +jexd +dnjet + +ycjfosn +uakdc + +rl +lr +rl +rl + +hakebywjfz +ftrnazjyuog + +rx +xh +rlx +x +x + +ugwmbfvqnhstjpcxkdrayz +bgtrmpxnhykajdvfsczuwq +czrmqwfkpavyjntbudshgx +mzardcyqnhwstxpfivbkjgu +ufsnjkvczhygbxmqtwdrap + +n +tn +n +n +n + +uz +zu +zu + +kg +gk +kg +gk +gk + +rhjtbwuom +mtohjrbuw +ruhbtmowj +jhmuobwtr + +gznfydhcerapjk +aghyfkrepzcdjn +fzykhceapdjgrn +repcjazdfghnky + +rkszmwlyg +slmyhkg + +fyg +zlduqf + +xdhkrtzfblgucm +dzcbkxguftm +xmglubkodtcfz +gzumkvwfbxtcd +kyxbuzndtgficm + +wbd +ybzwd +dbw +qdwb +audbwjf + +ambzfqhwuxilkjtvdysgnc +wztfjngqdmixrkhvcabyls + +rn +n +n +n + +x +e +y + +pjtuoy +jupty + +bi +bi +ib +bio + +jkwao +kanwp +jxkwadn +sykwiatqfhu +akweb + +gbnqicrtvfwxemsulyhzpjdo +fwseczqvuaxydkbtlmpgojhrni + +hbsxc +bsxhc +bcxutsh + +ai +ai +ai +ia +aiz + +mdsotrjbz +mjhodtr +kdbqmtraoj +itxdjrfloewmp + +xiaujwtsepyqghorkmvzn +zqrepovakmhwsgctyujnxi +jrqsgeuinpahokwvybmfztx + +pekicrunhwfagztxlbqvjodys +hypaiqznotwvfrukjbgesxlcd +azgexowjkvupibfclqshnyrtd +zjrptvhkoscyxgnliufebwqda +iafjydlzscvgorwekbunhtqpx + +d +b +d +d + +us +u +ue +udf + +zxb +bxq +bx +auxb +jxby + +uc +cu +cu +qduc + +wsgxjpileo +jecwhxgli +loxjbidwg +sgjrfloivxw +lyutjxgwqmnia + +rgpnjsk +hsarcpkyg + +jwday +wyabdj +yawjd + +kgebispdzawc +jtusqpnxevdo + +nclydhgxfskjra +zqyrexophsntvk + +dickbg +kzgcl +ctgszkf +kyxwgc +qklcg + +iuxjewc +hnitdsa + +shwecrzfybn +fbnczhwjsre +csnwzkfevbtrh +rbfxscwzhen +wbrspfezcnh + +snzohbrd +rsnodbh +ohsrbnd + +bcsxkvdina +dcnasbxikvh +vnixkdbacs +kxcvsitoabdn + +osmejrxpdqafiuyt +ybtdxfcqi +izvtbfdxyq +dlyzqwtxif + +a +klu +xdo +ym +a + +nplqkdgbhcmyvo +pvlobnkdhqcmyg + +aqjsltmevgkyicfxbpd +xfjskpcghdzqbyvtali +baqgcyikjfdtslxvp +gmcpafyvqsblntijxdk + +xrozsblqiuctkpmadevfjygnwh +koieqxhrfcludpajtvsmnwygbz + +uxlnfwezmvhqac +xfvmahznluqecw +qhanxzlmvcefwu +vumwxsnaepczhlqf + +uriqgsndka +nucqgskraid +rkgaiqsund +qgansrudki + +ywgkostl +gthinksl + +giencrav +nzwaicjreb +erfacin +aerikcnf + +ilruqmyepxtzvdhwaokj +tjazhirdulxyowqvmepk +tykmdqljreipvoazwuhx + +nbfzxtpuogecwm +fptcxomenyzw +micponztexfqw +wfpzxmtoercna +mnpwtcoefxz + +xyehpcmkwujas +jxalcreyguv + +bpcksrnwvxejaiyduzfqm +xsurzqdfnykvpwajeicbm + +hfanwsmvxgprqktu +ehpxfunartvlmskw +avwnpkhxsmufrt + +condegyuwzvirxfmt +oamdtlrkpznwuyighcs + +efg +gq +jcrgoy + +rbimtsdvcunaeo +cumowdrasvbjni +rsbciunvodwqeam +vtanoimdrsbuc +mosiahdnzcurvb + +gc +cd + +yxhjicel +ntejqyxlbich + +ofbpy +eylkdvctnigwq +zyp +rbmy + +qlg +glqj + +k +u + +ibzehtravqoljudgck +bqcgjuldhzoikvrtesa +tukleadvjqgobchzri + +ogyzepqhkxd +qoeyxvwdghkz +qpekoxghzdy +gzdxyhqkopre +egpoxdzhykq + +hyse +a + +aymolrwvgxnzcuje +wlegcjzqtydipkfbnhus + +tryiswmcdhxnjolzagufvp +mwfsoznjycaxhgrdutip + +bglatxso +cxs +pxsrz +mxs +sxi + +iu +iu +iu + +xdj +dxj +jdx + +atsnmu +uctkmbd +ohwvyux + +rng +nrg + +anml +amnlf +mlan + +i +i + +ag +fvugtozl + +bexdrvtjfhlu +flvedkphugb +guhevfl +hoezlfwuqainmvy + +fp +fr + +ijruome +dqjmou +orjbmu +eoqtjmu +mfouszcjnkpvxh + +uxvhtednwo +ibzpqyfkjs +lmcearg + +ujnzphr +upzjhnsrc +phjrunkz + +qsnjalim +dqivpj +eqivdgjo + +dpcsv +psdcgefvj +pxasdvy + +upnjbfosmdwrx +dquexrwjbgsmkfponc +sdjpmboiuwzfrtxn +sypuflxrdowvnbmj + +vebdguwjztyasimlphroknxfc +utyflrganbpwivsxeckojmzd +xosrdauvkplewtbjyqicmgfnz +sbmivuezwxnogtdjacfkylpr + +huswqyvi +purvzc +gnjalmxkebt + +ypkmxsa +qsiabxh + +bduhspmrekj +spuhkdbmjre + +wvfdnylxarcgmsohutz +oyxtualnmhwzfgcsvr + +gvyfsndlmrbuj +cvjrzlgbiydxum +kvupgelwrohytqa + +fxeoukmpstwbavjqidzrgn +kuldjegzmoabsfitqvwrxp +mfsxpdioawterqgjzkubv +upxkzisvabfwqdrjogemt +idavsoutpebxjrlqkwfzmg + +oylj +jbfxidqloy +tjyoacl +tjyolc +gyolj + +hjebtiknfgwolucrv +frwivkncsltyogujbe +guonhbfekwcjltriv +qfcwndvzelbxjktaogrui + +sekdmtbofqvcxgyujwi +juisgymxobcfktwqldve +bwxygvdtkmjiuocfseq +kotvyqixjfbeugcmwsd + +sejkcndwlr +tamnfqiuypg + +piuxnqtmrvdgzoahsecwylkfjb +lckoqhazfgmvpsyjiuewtdrnx + +oseynjvl +igyxfb +qywkxp + +cgbnifrsqkva +ivbnkwcsgqrf + +zvcjysphw +vspzjwcyh +hzwjvcpys +zsphjvycw + +ziugf +gfulo + +nkcdoyh +dqychf + +mzaqgbe +gxdyljt +mnigs + +dirs +sird +dirs +dirs + +yaetmuvxbgpz +igxfbzau +aonshlbuzgfx +akblzxosug +dgxuazqobw + +ij +ji +jig +ji +ij + +boyawrci +ydqjbnaicze +cwybiaul +saiclby +ibsfaylco + +zokcdlxer +srdxzcemklo +lrzdkopcxb +rwdgcfkzlqxo +zolydkhrpixc + +rwahi +hariw +rawhi +irhaw +awhri + +xfogrm +gtfoxr +oxflgr +zdjoxfrg +gwvpfarxshqioy + +c +m +hmc +q +zk + +nxpukbselvacd +avwkfltxune +evxnolyauk +enarvxjlzku +lakqjmevunx + +vsjonahc +zskvynchaor +vobjhnxasc +scoaxvhn +osacvhnx + +apu +pzau +guap + +vdcjkzyop +sanxruilvzqftjed + +yqdvmspliwor +zugkbxaftc + +anmldsq +qmadsengl +qlmxdsna + +nwrlixv +xvinrwl + +vftqailjwbreokxhcgz +vljrahznwcumdstoifykqpb + +lue +aumlsq + +zcafriuk +izrca +ztordcia +zcario +wrizandc + +xat +xt +tbmxr +txa + +ljbgiwczuf +eyfgncqwxhms + +uvzaf +azjmqfvu +avzfu +azuvfc + +xobrfcah +arzitlcmuofbhdvxe +hasfcxrbo +cxoabfrh +aphfbcsornqx + +n +n +n +grnc + +duhombwanpxkeqgyr +ncbzdivo + +usbpqzjnkcg +gnzbujqpskc +wsqoguzcjpbk +zskuqbpgcj + +ayfvxnbitepuhwmzk +pvxaezblnikwtym + +awxjiduosnlbgp +lsdjexngowb +lmnoqsdfgxbw +golwspdnbxhc +dlngtkvwrbxsyoz + +utc +tu +ut +utqk +ut + +pjesdlyxahq +qrhjdaeplsyx +xaoyephqsjldg +yalsxdhjpeq +xpdjuysnhielaq + +hsixwqutarzgnlfypob +tsoxygaqpirbnhwfluz +urahmlxqbwtiynsogfpz +bqdhrwcogsatzfvnxluyip +zilogsxhqfyauternbpw + +uzsbxmp +bzumsxp +bzxmspu +bspuxzm + +trhowybefszxlvmj +lbtjxzevrmfwyos +nuzdlwjeofbvxqystpmra +blsmvyrxjozwfte + +s +f + +egtcbmpiwlauzdxfoskj +oufmwkgaxilcjpteydzs +aijgdmzkeutolxpsfwc + +zynbsokqglw +qzbglkonyw +lgnwqkoyzb + +zc +zsaihrvmd +fnbzyx +cnz +z + +niemkuvcqlodasgwfpbryhzx +yfztdwqrbipuoekshclamnxgv +imxvqubnzwdprhfeslycakgo +fkizrpbowlcausvqeymdxhgn + +ekzmogj +ifbovnmscwqjrz +zumjlado +omkzhajx + +detznuqox +qkmxeznfuao +ioqclehzungv +qzukameton +neqzou + +ao +gjx + +bvujqfwz +bjwmvoqzu +ubzjwvq +jwvuqbz +uvbwjqz + +zmwkup +pkumcz +ujkpmz +kmunopezy + +bpdgqu +xwdu +lduct +bdukg + +uypwohbtfgxzcelinka +lputnozwickxafbhey +nfsldvtkawjozryxuhbpiecq +gepihncbwzymtaxfukol +utlkagbhexmiywcfzonp + +swaxmgqdotzcf +gdzmaoxcfqst +qsfzxtacndgom +mszapvchdfgxqto +afxqdtiogsmzc + +inkowyaxd +iksfa + +dwyvekqcjnltfsuga +adsvyuqxcjelmwgrhnfi +lcjenwsfyvuzdqgap +ykwfslnuedcvaqjg + +v +n + +e +e + +ikg +kgi +gki +kgi + +cusnrpimotdvbe +hglozyfxka + +iqdmwlgotup +peotmughw +wvpugfsmbl +azupnrcgmw + +qaexpkir +ahpeslcgryqx +npexiqramv +xuwtqaoepr +dwpvqxaezor + +febixrwpqzt +qiwbpftzxr +rojdiptzhqlxb + +nmqykjecutzb +btqyuemnkzcj + +dfaqjmlhrn +nfhjxldb + +gcfhbvtjroud +othdrejb +rjdothby +ytbrjdoh + +fyhbzwce +zwhycgeuvb + +scdyijpxlkth +cxvlokb + +rcseafoikwqnzmuyxgp +amzcnkjfwpsoxhrgqeui +aczsmqfgkeuniwpxro +vekucomxwziprsnafqg +fuzxsntqpmekgaroiwc + +gzqxvsyjlorkanbm +mbihoujlzvkyftqxc + +wvigycal +wxovlaiyc +iayvbcemhw + +hzfktviwaucxqdp +xouitdqpce +cjuyiqopdtxr + +ahgewbycqkrtuofz +qgkpflbwreuzcatyho +ghaytkwjvrxfbzeocmun +ktczaorwuhpelfybgsi + +rcsbidmftonajzguxkl +gfrjxasiowdkzmltbchue + +zv +v +kv + +agzckftjlwrbnqs +nbmqihwarls +aldrhvnbspweq +anqrislmwdxbe + +d +d +d +d +d + +ckdw +cwdk +kwdc + +crbz +bczrk +bzrc +zcrbdo +brcz + +waximys +fayixsw +ayswxi +aywqixs +bsijwyeax + +wkbphmtnqsreovgzilcfd +ybnkftpmqcehwsvzdig +tgqmkihecpldbzwsvnf + +jxduyczbqtroslgf +ucosgyflbrxtjdzq + +xdwyculk +socfwapbyndq +cdrywk +ydkecw +ydwec + +slcfgrptbawyz +xcgsajldf + +bt +bd +bd +obvf + +xnrgsojdtbweklzmf +kemxhlnzgtasowjr +metwnolxjkagzsr +zgkwlxtnsjorem + +geb +bge +ebg +beg +bge + +zqfoi +czor +ozr + +xtwci +hwic +fcwmbsvik +wbhcvi + +ij +j + +ztpe +bhtvze +tzve + +mvarxklhpuwgfqisno +iwqoxmrspavulfgkn +qxnliofrawvgpskmu +zpocgqwslmfinkuarvx +kfnwugoqamvirxspl + +gliotzc +toiclz +tzocil +otlzic + +jwomnhaeqypsrcdvb +rutegcfksqjobzhwvaxy + +onyz +ynz +zn +anzvb + +htn +j +j +q +z + +g +p +ejob +gp +p + +leuhov +gluov +owylvkgu +vqilxacutso +ulzvjo + +fmvirwpxyjsbktcgu +rxtpcvfjmswbig +glifrcjsmvwxnbt +fsmvwbtgcyrjix + +rdhsi +dsihrkl +bxmwvfigjscpou + +i +i +li +il +iev + +x +hx +xlu +x + +znrihtgoyclewxufvmjqdsap +uydbshfjpricgqlxzotvnawme +njaewixzqsfvyhudmopclgrt + +ywmjslkaq +ymjswlkqa +kqaslymjw +kbjwamlfxiqycs + +u +u +gu +u +u + +ilqeypzcdkghvwf +vjzuatxmynl + +eurqj +ftdqnrhwpexm +bgrzykloiav + +vaesdnwtkzpjgobr +franjmdpbwvkhstz + +knfd +qscf +gwezhtraub + +arbfhjwnozskup +pblxhusowanikcjfzer +baojpshrfukzwn +ntrabwpuzkhofsj + +wlkxv +wylvk +vklw +vmwlk + +aevjbxrcn +ncbrjvxfa +cbxarjvn +lanbcjxrpv +bcrazvxjn + +tps +ptwj +tp + +p +p +p +p +p + +hdieog +nzytxbgwdmih + +lximqcbst +nbfelsv +vldsyb + +yn +kleqmy +xsftyvzg + +r +r +r +kvri +r + +viadbglmf +xpuligmdvrez + +hj +h + +slrychvqfutbwgij +yjwirsdbthfgvlucq +ylrfubqcwzpstivhagj +fbslhcgydvqutjrwi +bfltcjsvruwyhqig + +o +fo + +csnkryxqzive +avcesuxzinrk +csrxnieyzvk + +bjhritmcyaqzx +pajrbhqmcityzx +hrjxqibtcyamz +tmhqrcxjzibya +jrzimbxthqcya + +zpnicmvkuey +vyckmpzueni +vuzcnimykep +zpmencuiyvk + +ofclhwkpmvzrb +vlmwhxpzobrfck +vrmzwlhbofkcp +zcmkhybpjalofvwrd +hbcvzlrpfkwom + +i +i +wi +fghsbi +i + +oekxhj +ojhke +eojkh +oekjh +hekjo + +ovznb +bozv +vbzo +vbzo +zbov + +x +x +x +xg +x + +stredcvgnfo +posxbtcrvdf +ovtkzhsfdcr +oasrfcvtd +vxsdkfortc + +e +ei +vl + +yrzfnigmel +rzxpfewymkg +fymrzqeg +rmegfyz +rfyglzme + +dn +dn +jnh +n +n + +cbxlgdijtepqzhoasf +lfgrhspbocjtaqz +fajzghlcobpstq + +whbflnvragce +ybxrhucaqlgoe +tlagchbwers +fbahlzcedgr +phgeabcrl + +cjimd +ji +unefjiz +pdcijm + +aqgifr +jupnyokb +vez + +qzfeomdngv +rnoeadygvz +prkgovedzq +mdenvgrozwa +gvxosdizbchle + +saimprhqfdzeb +ijlbfqsmapthrz +azpsmciqfhbr +fbvcmzprdqihsag +hpmsfcaiqzbr + +gtluiodvqcfwpezxar +fgtzoapqrwixevlduc +ztgxrlvdwcoqfupaei +ceovtdwriguplzqaxf + +imhbnkouvq +nzbhumvaoiqxyk +khbmwivzqnou +fqksobmdntplcrghjv + +ermxbs +wbahm +nbmsyc + +bcaxqlrkpiju +bykipwmxhosvjtadfg + +jark +naovkc +kta +qjatk + +jtur +ogvxtswlrbyd +kamcqiehzftn + +vowkmxnbtarz +mtankxrzqc +kzalpjxrtyisndfm + +wlrmfi +mwirl +mflirw +rmsilwq +mawflir + +clptnwrbqfmoxdekvh +fqtomhnlxbdpckurzv + +kqvzoinucxrfmtgdab +ftrxqujybamviock + +saquhbyzltckipv +rfydwhta + +nuwp +waxp + +lsyvaufoqhrpzbc +hnibpcvzjeraft +acrpezfxvbh +bcrafvzhp +rbcgzhepfmav + +t +t +t +t +t + +katgbyospjmvq +gtbpvayfjm +pdcgwmrlxjtiuvazb +tmbjqgavep + +sdilhvype +dlheyipvs +iylsvdepqh +hvspdiley + +jothzcvmearxglwknb +oacgkwemiltszbhyj + +ftpgjlkydqnvx +wcmbgayhepsu + +rj +rj +jr +rj + +wruqfn +wrnf +wfrn +wrnfd +nfwr + +qesvafzihpnuwom +fgqzdvnuyrpkto + +oiverlqwc +ewlvqcri + +pu +ul +kcn + +gvsobqtz +orxgbszqv + +bijmqg +xoent +fqmbhckjy + +ygthqofjcezdxvpumwsar +ubomzvxernpyqtwisjgdcf + +rzkp +krzp +rzpk + +axzqd +xzdqa +dxaqz +xzqda +sadxzq + +wgmhlokxtaevdisnqzpfu +msazpgtiqovudhkwenflx +fwuxprbhqzsikgltoamvn +zpxomiaktvgfluqsnhw + +w +w +w + +djq +syzujvq + +lpjgfztr +fprtselk +rtbnxpi + +xrjv +gwvr +vnorzc +trvkxnm +eqfrdvhu + +duvs +usvd +svdu + +zjusxkvfan +zpugndafxkc +unvxrzakf +xjeaqzkfnu +aokmwbunxz + +keznrlh +reqklzhn +nrkzlhe +lrzhken +zenlkhr + +fkdicgvtxwyljzmrbane +brmiwkyagnzvdjcflxte +tfngdkxvbazmerlycwij + +j +i +i + +eskxrlhypidgn +tgxupabzohcqdfjvi + +vzkjoftgal +ig +egm +eg +g + +uqgnpxzfk +esxknaqumy +uqxkmn +unxqk +kunxbq + +ceiq +kvsa +ey +i +ye + +aug +a +ziax +la + +emof +dlyfmcpegov +ewofm +omexf +srxomef + +cpmunao +wixbghflyrsjk + +nomxkbvwdugfy +eudqlbnavmwgfc +wngmpfujdvb +wsuydvigmfbn + +kvmsowiyhzpjtxqde +zspreijdqvmkhofy + +pv +k +zweoxj +v +c + +cxlfdbrw +fwdxbrlc +fldcxwbr + +zeucawiobs +pyuoxtvslhrqfj + +jexfokgr +gfrmxoejk +oefgjrkx +ekgjxfor + +zcyprimjvxl +krftbqjehg + +jkuzlfanpo +lnfiztxku +unzfbklsg + +zydvesibomqnxpuj +psvmeiobguxjqytzdn + +ov +vo +vo +fov +ov + +vszbrqjciunl +jzlsviubrqn +lnqsgzrbviuj +jbsrzlinuvq +rijlnbvszqug + +slfaixrthqm +dwhxisl + +bpcmeigzfxshrknaqovyluw +uwkmsincqgohabzerfplvy + +datp +upad +apdrl +atpd + +rxqagfcovbyemjszwpt +crwpzuvqxsobafejmgyt +brjsofpqamvzewytxcg +vfazwpbosjqcmxgyrte + +xarhtzofq +pleaghnzf +auzfnh +aihkgnecvlzf +fahz + +bqpfklhurgyv +xtarwenjcds + +r +ir +rqk +ri +mra + +sucdinjo +jh + +nofswldrtphm +ftxrmsjwhdonl + +tsjndmcegqxfa +rybznihlwug + +d +a +a + +pzx +zupix + +hcbwx +cbxwh + +z +b +b +d +pwje + +chsiyvgluf +pkqex + +qtaygsijlemhnzfwvdpb +nbzqcmdawpgiytslef +bwptzeaolgfyndxsmqi +twfnazdloqrmpisuegyb + +zrtkd +kd +adk + +lsthiu +celjykt +bzodwmvfq + +xyed +degx +leydx +yexld + +pwvksitjo +dkvswjtop +psjkotwv +tswvokjp +pkotwjsv + +xhrklytosc +sylocx +colysex +elsyocx +icolyvpxs + +loastvxrkdpchiy +dohystixakprclv +hsxpcrvldyikato +dthlkoxasrvciyp + +fvcyglipjebhutsaxrn +trulaxbcnsjmpwgfeyvhiz +ajyhvxtglodecbpufnksri +aufhpjercyxlnbisgvt +lvjasgifxnpyhbutcre + +scvkwyutdeng +jyahqz +bfyhl + +vuiajyrdqgfxepczth +apczqvjetdrxfghuyi +crfgytlvdpxauejhiznq + +apyfgmtnibrkocduxvj +myodxpcarvtniubfgjk +putnocdmkfjbvixryga +kgbmnatyfixopcurjdv + +evxmrw +mvwxe + +vcifeutpqkmgdl +dqgmtvfluciepk +kqcfgilutvdmpe +kvgcplqmdeutihf +iptvfclukemdgq + +gjx +nlzpm +o +khbf + +octlvqihe +qgholfnitv +wqhlvit +zksmlxjuiqtdyph + +aqtos +staqo + +jdiltnsry +nrtylsdjf +tdqnsjylrx +nryjdtlqs +jntsyrdlf + +flnmuropqa +nmureafoq +ufkqganmro +uafbnmrtzoq +pauqnmrfo + +pealqbmfoycdkn +firhlyjuxtpzgsew + +aor +o +o +o +vo + +kcfwspmjitevz +piskezfjvtwmuc +twcjzpisvfkem + +ufvats +sfa +cfmsayphixwoe +nfktsaq + +kbanlrxouw +nwkaobulxr +owaluxknbtr +kxuomabrnlw +uronbtlkwax + +sljx +axwlsj +jxls + +dcrtnxkhsim +wgfujacenq +gcnbafjw + +dh +dh +hdew +hd +dh + +uory +ruo +oruy +xuosqrc +oyrut + +dsgkweynxcu +zmkiurxhadnlv + +zjr +jzr +zrj +zrj +zrj + +zd +f + +pndukfvawjem +ljedfvnpaw +wdjvbnafqep + +fel +ltafmdeq +efn +ehtfa +biswyjufe + +grftzue +ezulrqpm +whdkeoinuxsv + +qicvgpudfxkbrjwelht +wivdhmeuzcylfbogqarxpjnk + +whjkaulxcbp +cwkpljxbhua +acjpklwhxbu +kwjcqhubaxp +hackubpxmwj + +nigwj +tcsp + +clmudw +gadvjqmkpsbthn +drmel + +ikfeorbdvwjg +av +vc +vzcap +hyxmv + +u +d +d +y + +mdolysecjxpan +yoaxpmecnwsdjl +acjsmplydoxen + +tirqchjkbdxaznl +yqxivwtdkrjbazn +ihajzflkqdctbnrx +bqzdtkirnaxje +xjdhitzqknbra + +gvxbuleys +fcdahtsrbnyve + +o +o +o + +bqyuzj +ubzqyj +uzmitrcqjhby +jbazyuq +qwjybzu + +g +g +g +p + +prbctmvziglneoyk +ezrpcihbknvylto + +wyjb +bjwy +bywj +ywjb +fywjb + +s +y +y + +igx +ixg +gix +igx + +vonyrelahsdxfit +esxarhfylotind +ydlfxgsnheiotra +axsftorheliynd + +mie +zqm +m +em + +csnm +umsiqk +podfhgraweyvz +l + +xcfbphtsj +hsxpmwqtbufjr +pxvjftsbh + +rbpgfoud +otcz +xmseohv +hkinzo +ylov + +eorb +qlvfh +yvlqwm + +nxlcsgumvtqoj +smtygqjucvn +suemcvtyqnjgp +cvmgnfjstqu + +dtg +pglte +ngt + +eysdmnfgqrivklcpxabhutowj +wgkcalmsinouqeyfvdptrbx + +hwrjdasze +rjhsdweza +sedzjhwra +zjdxhswrae +rejhzaswd + +ykembxfuvzicgortln +ocgxewniplthzrbu +cfmsluzogvixrdbetnq diff --git a/res/input_day07.txt b/res/input_day07.txt new file mode 100644 index 0000000..397b492 --- /dev/null +++ b/res/input_day07.txt @@ -0,0 +1,594 @@ +bright olive bags contain 5 dotted white bags, 2 wavy lavender bags. +plaid brown bags contain 3 bright lime bags, 5 plaid coral bags. +dim coral bags contain 1 shiny maroon bag, 2 bright orange bags, 3 clear lavender bags. +dull olive bags contain 5 wavy purple bags, 2 plaid white bags, 4 vibrant magenta bags, 1 light brown bag. +dim yellow bags contain 1 bright cyan bag, 3 striped green bags, 5 dim white bags. +drab chartreuse bags contain 3 shiny lime bags, 2 bright indigo bags, 2 muted yellow bags, 5 dim tan bags. +dim cyan bags contain 4 drab tomato bags, 3 dotted teal bags, 1 posh purple bag, 2 faded brown bags. +striped indigo bags contain 2 wavy brown bags. +dull coral bags contain 5 mirrored salmon bags. +light violet bags contain 3 light maroon bags, 3 plaid purple bags, 1 pale lime bag, 2 pale orange bags. +clear magenta bags contain 3 muted tan bags, 3 clear lime bags, 3 bright magenta bags, 3 faded purple bags. +drab turquoise bags contain 1 dark violet bag. +dim black bags contain 4 vibrant turquoise bags. +dotted gray bags contain 1 posh salmon bag, 5 drab lime bags, 1 clear coral bag, 1 faded lime bag. +light lime bags contain 5 wavy lavender bags, 3 shiny black bags. +bright yellow bags contain 3 dotted beige bags, 4 clear purple bags, 4 faded salmon bags, 5 drab black bags. +shiny teal bags contain 3 dotted chartreuse bags, 1 wavy yellow bag, 3 clear lavender bags. +shiny crimson bags contain 2 light plum bags, 3 shiny black bags. +shiny lime bags contain 1 dim turquoise bag, 4 pale fuchsia bags. +pale lavender bags contain 3 bright lavender bags, 5 wavy blue bags. +shiny purple bags contain no other bags. +clear lime bags contain 2 drab bronze bags. +vibrant lavender bags contain 2 plaid crimson bags, 3 plaid yellow bags. +clear gray bags contain 4 shiny indigo bags, 1 vibrant salmon bag, 3 bright yellow bags, 2 light green bags. +dark lime bags contain 1 light lime bag, 3 vibrant yellow bags, 5 faded bronze bags. +bright chartreuse bags contain 5 mirrored olive bags, 2 mirrored white bags, 1 bright black bag, 2 clear olive bags. +wavy red bags contain 5 bright black bags, 4 dotted salmon bags, 4 clear tomato bags, 4 faded teal bags. +posh coral bags contain 4 posh plum bags, 4 shiny magenta bags, 4 light plum bags. +shiny coral bags contain 5 shiny yellow bags. +light bronze bags contain 2 shiny purple bags, 5 mirrored maroon bags, 2 light white bags. +mirrored olive bags contain 5 mirrored white bags. +pale crimson bags contain 2 vibrant gold bags, 1 bright yellow bag, 2 light green bags, 4 shiny gray bags. +bright cyan bags contain 1 muted plum bag, 5 dark bronze bags, 4 dotted teal bags, 5 faded fuchsia bags. +posh bronze bags contain 1 muted gold bag, 5 shiny turquoise bags, 3 wavy bronze bags. +mirrored yellow bags contain 1 dull maroon bag, 2 posh orange bags, 3 striped lime bags, 4 plaid crimson bags. +muted brown bags contain 5 mirrored indigo bags. +posh lavender bags contain 2 dotted violet bags, 3 clear orange bags. +shiny salmon bags contain 3 bright red bags, 1 light turquoise bag, 2 drab turquoise bags. +striped teal bags contain no other bags. +pale purple bags contain 1 faded yellow bag, 2 dotted beige bags, 1 dark red bag, 5 plaid yellow bags. +drab tomato bags contain 2 faded aqua bags, 2 faded purple bags. +wavy yellow bags contain 2 wavy gold bags, 1 dotted beige bag, 2 shiny gold bags, 4 posh tomato bags. +shiny yellow bags contain 3 wavy brown bags, 5 dull violet bags, 2 muted tomato bags, 4 dull magenta bags. +wavy brown bags contain no other bags. +faded teal bags contain 5 muted plum bags, 1 posh indigo bag. +vibrant tomato bags contain 1 pale blue bag. +drab red bags contain 3 light teal bags, 4 shiny lime bags. +muted beige bags contain 4 light teal bags, 2 vibrant orange bags, 1 drab turquoise bag. +dotted orange bags contain 3 plaid cyan bags, 3 shiny beige bags, 1 bright chartreuse bag. +posh fuchsia bags contain 3 posh tomato bags, 5 bright blue bags. +striped lime bags contain 4 vibrant red bags, 1 bright yellow bag, 5 faded yellow bags, 3 dim gold bags. +bright white bags contain 1 clear purple bag, 2 drab crimson bags. +wavy olive bags contain 1 pale lavender bag, 2 dotted lime bags. +clear black bags contain 2 pale yellow bags. +clear brown bags contain 2 vibrant crimson bags. +dotted aqua bags contain 4 light green bags, 4 light purple bags, 3 pale blue bags. +dull red bags contain 1 bright fuchsia bag, 2 plaid crimson bags, 5 dotted salmon bags, 1 light salmon bag. +light red bags contain 2 mirrored purple bags, 2 dull teal bags. +mirrored bronze bags contain 4 striped lavender bags, 1 dotted brown bag, 1 posh maroon bag, 1 shiny chartreuse bag. +light silver bags contain 4 dim orange bags, 1 dim aqua bag, 5 plaid crimson bags. +faded violet bags contain 5 dotted tomato bags, 3 wavy beige bags. +muted violet bags contain 1 dotted brown bag. +muted black bags contain 3 shiny purple bags, 1 dark salmon bag, 3 bright lavender bags, 2 shiny white bags. +muted tomato bags contain 3 dull magenta bags, 1 muted fuchsia bag. +faded olive bags contain 3 bright coral bags, 5 dark salmon bags, 3 dotted lavender bags, 5 vibrant purple bags. +dotted indigo bags contain 2 drab yellow bags, 5 dim coral bags, 3 striped green bags. +dull turquoise bags contain 3 dark black bags. +faded fuchsia bags contain 4 dull green bags, 5 pale lavender bags. +mirrored gray bags contain 2 mirrored brown bags, 3 shiny gray bags, 2 light maroon bags. +dull violet bags contain 5 muted tomato bags. +vibrant crimson bags contain 1 vibrant tomato bag, 1 striped maroon bag, 3 drab plum bags. +pale olive bags contain 3 shiny lime bags, 4 dim turquoise bags. +muted orange bags contain 1 dull orange bag, 5 shiny tomato bags, 5 pale yellow bags, 1 faded orange bag. +vibrant orange bags contain 5 muted yellow bags, 1 plaid salmon bag, 5 dim aqua bags. +bright brown bags contain 3 muted gray bags, 2 dull cyan bags. +clear coral bags contain 3 clear crimson bags, 4 dotted yellow bags, 1 bright orange bag. +clear blue bags contain 1 posh tan bag. +shiny cyan bags contain 3 light gold bags. +plaid tomato bags contain 3 dull magenta bags, 2 clear brown bags, 1 wavy plum bag. +dim magenta bags contain 5 dark orange bags. +mirrored plum bags contain 3 dull green bags, 4 light violet bags, 2 vibrant bronze bags, 4 vibrant tomato bags. +muted green bags contain 1 dull crimson bag, 2 drab crimson bags, 2 dim red bags. +wavy gray bags contain 3 dark silver bags. +mirrored white bags contain 4 bright yellow bags, 2 bright blue bags. +dark white bags contain 2 posh turquoise bags, 2 light plum bags. +striped maroon bags contain 5 shiny white bags, 3 shiny coral bags, 3 pale salmon bags. +shiny aqua bags contain 1 bright indigo bag, 5 dim plum bags. +vibrant chartreuse bags contain 3 drab gold bags, 1 striped cyan bag, 2 drab violet bags, 1 muted black bag. +faded chartreuse bags contain 4 bright bronze bags, 3 dark silver bags, 1 bright aqua bag. +shiny olive bags contain 1 light silver bag. +dim chartreuse bags contain 5 striped tomato bags. +vibrant red bags contain 3 mirrored beige bags. +vibrant white bags contain 4 light aqua bags. +dim gold bags contain 3 plaid gray bags. +posh chartreuse bags contain 3 wavy blue bags, 5 dull maroon bags, 5 muted yellow bags. +striped purple bags contain 4 shiny orange bags, 3 dim lavender bags, 3 muted lavender bags, 5 plaid tomato bags. +plaid white bags contain 2 striped salmon bags. +striped tomato bags contain 5 bright blue bags. +bright lime bags contain 5 dark maroon bags, 1 shiny gray bag, 3 light white bags. +vibrant yellow bags contain 3 plaid magenta bags, 3 wavy chartreuse bags, 3 bright lavender bags, 1 vibrant salmon bag. +faded red bags contain 3 plaid turquoise bags, 2 wavy cyan bags, 5 dim chartreuse bags. +dim red bags contain 4 muted coral bags. +dotted beige bags contain no other bags. +pale magenta bags contain 1 light violet bag, 2 mirrored lime bags. +muted fuchsia bags contain no other bags. +vibrant purple bags contain 5 shiny purple bags, 4 dim turquoise bags, 2 bright violet bags, 1 dotted beige bag. +pale tomato bags contain 3 dull magenta bags, 5 dim turquoise bags. +wavy gold bags contain 2 muted tomato bags, 5 posh tomato bags. +dull green bags contain 1 shiny indigo bag, 3 dull maroon bags. +muted magenta bags contain 1 clear tan bag, 5 dim tomato bags, 1 plaid purple bag, 1 wavy gray bag. +drab bronze bags contain 5 dull violet bags, 1 light green bag, 3 dim turquoise bags. +vibrant coral bags contain 5 bright black bags, 5 vibrant salmon bags. +dim gray bags contain no other bags. +mirrored black bags contain 5 mirrored lavender bags. +muted cyan bags contain 5 mirrored gold bags. +light aqua bags contain 1 dull cyan bag, 4 dull lavender bags, 2 wavy crimson bags. +mirrored gold bags contain 1 light orange bag. +vibrant cyan bags contain 2 pale chartreuse bags, 5 vibrant tan bags. +dotted green bags contain 2 vibrant tan bags. +vibrant tan bags contain 5 pale lime bags. +drab magenta bags contain 3 light gold bags, 2 posh yellow bags, 4 mirrored salmon bags, 4 muted black bags. +clear teal bags contain 3 vibrant red bags, 3 dotted crimson bags, 3 plaid fuchsia bags. +dark coral bags contain 4 posh fuchsia bags, 5 mirrored fuchsia bags. +bright plum bags contain 5 vibrant blue bags. +drab indigo bags contain 2 shiny orange bags, 3 light indigo bags, 2 drab crimson bags, 5 light purple bags. +shiny chartreuse bags contain 4 clear gold bags. +plaid coral bags contain 1 shiny white bag, 2 dotted plum bags, 5 wavy indigo bags. +dull silver bags contain 3 striped white bags, 2 faded gold bags, 3 dark fuchsia bags. +dotted teal bags contain 5 clear lime bags. +posh black bags contain 4 light plum bags, 4 dark plum bags, 4 vibrant plum bags. +wavy black bags contain 5 bright bronze bags. +mirrored magenta bags contain 3 muted olive bags, 5 striped tomato bags, 2 clear lavender bags. +posh indigo bags contain 4 clear salmon bags, 3 vibrant salmon bags. +vibrant brown bags contain 2 drab turquoise bags. +pale blue bags contain 3 vibrant silver bags, 5 plaid turquoise bags. +wavy lavender bags contain 5 plaid lime bags, 1 plaid crimson bag, 5 wavy coral bags, 1 dark gold bag. +shiny tan bags contain 5 plaid blue bags, 3 shiny bronze bags, 1 mirrored gold bag, 4 faded salmon bags. +muted purple bags contain 3 muted tan bags. +mirrored crimson bags contain 2 drab plum bags, 3 muted magenta bags, 5 dim yellow bags. +muted red bags contain 1 wavy indigo bag. +dotted tomato bags contain 5 plaid turquoise bags, 1 dull lime bag. +dull orange bags contain 2 shiny yellow bags, 1 drab bronze bag, 4 shiny lime bags. +clear aqua bags contain 3 dull cyan bags, 2 bright yellow bags, 2 shiny maroon bags. +light coral bags contain 4 wavy black bags. +posh silver bags contain 5 light bronze bags, 2 clear purple bags, 5 pale fuchsia bags, 2 dull cyan bags. +drab coral bags contain 2 posh yellow bags. +light fuchsia bags contain 2 dim gray bags. +faded cyan bags contain 1 faded orange bag. +bright aqua bags contain 1 muted black bag, 1 muted chartreuse bag, 1 wavy blue bag. +drab lavender bags contain 4 posh yellow bags. +posh gray bags contain 4 shiny lime bags, 5 dotted gold bags, 4 vibrant maroon bags. +plaid blue bags contain 5 vibrant tan bags, 5 mirrored white bags, 5 shiny purple bags, 1 clear white bag. +shiny gray bags contain 2 muted fuchsia bags, 5 plaid crimson bags, 5 faded salmon bags. +light brown bags contain 4 dotted tan bags, 5 wavy coral bags, 3 plaid teal bags. +striped magenta bags contain 2 wavy turquoise bags. +striped aqua bags contain 2 light cyan bags, 2 plaid lime bags, 2 mirrored orange bags, 1 posh lime bag. +bright teal bags contain 1 faded plum bag, 1 dark blue bag, 1 posh cyan bag, 2 striped chartreuse bags. +pale green bags contain 1 muted black bag, 4 faded olive bags, 1 wavy chartreuse bag, 5 dim maroon bags. +vibrant bronze bags contain 3 vibrant lavender bags, 3 faded blue bags, 4 dim brown bags, 4 drab chartreuse bags. +pale brown bags contain 3 faded yellow bags, 1 vibrant tomato bag. +wavy aqua bags contain 1 striped magenta bag, 1 mirrored silver bag, 1 dim gold bag. +dotted yellow bags contain 2 drab turquoise bags, 2 drab maroon bags, 1 light teal bag. +pale salmon bags contain 2 bright indigo bags, 3 wavy violet bags. +posh red bags contain 3 posh blue bags, 4 muted yellow bags, 5 dark silver bags. +wavy violet bags contain 2 dotted lime bags, 2 vibrant purple bags, 1 dull maroon bag. +drab purple bags contain 4 plaid crimson bags, 1 shiny plum bag. +light black bags contain 2 faded teal bags, 1 faded yellow bag, 2 muted fuchsia bags. +dim turquoise bags contain 4 wavy beige bags, 1 shiny plum bag, 3 muted tomato bags, 4 dull magenta bags. +dark tan bags contain 5 drab chartreuse bags, 3 dim coral bags. +striped gray bags contain 5 muted red bags, 1 bright blue bag, 5 wavy maroon bags. +muted tan bags contain 5 drab turquoise bags, 1 light maroon bag, 5 plaid purple bags. +posh green bags contain 3 dotted chartreuse bags, 4 muted yellow bags, 5 shiny gray bags, 1 dark black bag. +mirrored lime bags contain 4 clear teal bags, 5 wavy coral bags, 2 mirrored beige bags. +muted plum bags contain 5 faded yellow bags, 3 posh blue bags. +dark maroon bags contain 2 dotted lavender bags. +plaid green bags contain 3 wavy yellow bags, 1 shiny indigo bag, 4 mirrored maroon bags, 5 dim gray bags. +mirrored teal bags contain 5 dim magenta bags, 1 dark magenta bag, 3 plaid green bags. +wavy crimson bags contain 1 vibrant cyan bag, 2 light beige bags. +wavy green bags contain 4 dim tan bags, 1 dotted lime bag, 5 drab white bags, 2 bright beige bags. +shiny brown bags contain 5 dark silver bags, 3 shiny maroon bags, 5 dotted lavender bags. +muted turquoise bags contain 5 dark indigo bags, 3 drab plum bags. +mirrored lavender bags contain 2 clear salmon bags, 2 plaid maroon bags, 3 wavy cyan bags. +drab blue bags contain 3 dotted olive bags, 1 shiny chartreuse bag, 1 drab magenta bag, 2 mirrored maroon bags. +bright fuchsia bags contain 1 dark olive bag. +pale turquoise bags contain 2 striped chartreuse bags. +posh white bags contain 1 striped cyan bag, 1 plaid coral bag, 2 dim gray bags, 3 shiny red bags. +drab brown bags contain 4 plaid red bags. +pale gold bags contain 2 dim tan bags, 5 dark red bags, 4 vibrant cyan bags, 5 dark violet bags. +plaid maroon bags contain 1 shiny lime bag, 4 faded lavender bags, 2 dim tan bags, 5 vibrant purple bags. +vibrant green bags contain 1 drab purple bag, 2 faded blue bags. +bright violet bags contain 1 dotted lavender bag, 5 light chartreuse bags, 4 bright indigo bags. +bright magenta bags contain 5 shiny purple bags, 5 light teal bags, 2 pale purple bags, 4 pale silver bags. +plaid orange bags contain 1 dull green bag. +posh olive bags contain 5 dark silver bags, 3 drab yellow bags, 2 dim brown bags, 4 dull gray bags. +light teal bags contain 3 dim gray bags. +shiny beige bags contain 1 dark cyan bag, 1 vibrant yellow bag. +drab cyan bags contain 4 dim silver bags, 1 wavy maroon bag. +pale gray bags contain 2 dark salmon bags. +plaid beige bags contain 3 bright purple bags, 1 drab plum bag, 4 shiny bronze bags, 3 drab salmon bags. +dull plum bags contain 4 mirrored orange bags. +shiny violet bags contain 3 drab olive bags. +striped turquoise bags contain 1 faded green bag. +dark aqua bags contain 5 clear crimson bags. +dim crimson bags contain 3 faded chartreuse bags, 3 light orange bags, 4 striped plum bags. +faded tan bags contain 1 dark cyan bag, 1 bright silver bag. +faded brown bags contain 3 faded purple bags, 1 posh orange bag, 5 light silver bags. +mirrored coral bags contain 1 vibrant tan bag. +clear olive bags contain 2 pale olive bags. +pale lime bags contain 2 muted fuchsia bags, 1 dim gray bag, 5 dotted beige bags, 5 striped teal bags. +wavy white bags contain 3 dim indigo bags, 3 plaid green bags, 2 dull gold bags. +pale plum bags contain 5 plaid gray bags. +plaid yellow bags contain 5 dark yellow bags, 1 mirrored white bag, 5 shiny white bags, 1 shiny lime bag. +drab salmon bags contain 2 vibrant blue bags, 2 plaid plum bags, 1 shiny gray bag, 3 bright black bags. +striped fuchsia bags contain 2 striped teal bags, 5 drab black bags, 2 bright magenta bags. +mirrored fuchsia bags contain 3 drab black bags. +dark indigo bags contain 1 dull lime bag, 4 vibrant cyan bags, 1 bright gray bag, 3 pale purple bags. +posh blue bags contain 1 shiny yellow bag. +dark turquoise bags contain 4 bright yellow bags, 3 wavy bronze bags. +posh tan bags contain 4 shiny plum bags, 4 dark silver bags, 3 wavy beige bags, 1 mirrored fuchsia bag. +bright turquoise bags contain 1 dotted green bag, 4 faded silver bags, 1 plaid turquoise bag. +vibrant teal bags contain 4 plaid teal bags, 3 pale blue bags. +plaid purple bags contain 2 dim tan bags, 5 light turquoise bags. +drab plum bags contain 2 dull green bags, 5 posh lavender bags, 3 drab tan bags. +dark blue bags contain 3 mirrored indigo bags, 3 dark red bags. +vibrant black bags contain 2 shiny red bags, 5 posh brown bags, 1 mirrored yellow bag. +mirrored brown bags contain 1 shiny indigo bag, 2 shiny yellow bags, 5 shiny blue bags, 5 clear yellow bags. +dotted crimson bags contain 3 posh tomato bags, 4 vibrant blue bags, 5 dark violet bags, 5 posh violet bags. +shiny bronze bags contain 1 plaid maroon bag. +drab orange bags contain 4 dotted crimson bags, 4 clear bronze bags, 3 pale turquoise bags, 5 dim coral bags. +wavy fuchsia bags contain 4 posh fuchsia bags, 5 wavy purple bags, 2 muted cyan bags. +plaid black bags contain 2 drab crimson bags, 4 vibrant tomato bags, 4 clear bronze bags, 4 faded lavender bags. +mirrored red bags contain 3 shiny crimson bags. +faded tomato bags contain 1 clear aqua bag, 3 vibrant bronze bags. +light turquoise bags contain 2 posh silver bags, 2 shiny black bags, 5 muted blue bags. +faded crimson bags contain 5 posh blue bags, 4 dim maroon bags. +dull magenta bags contain no other bags. +dark plum bags contain 5 vibrant purple bags, 5 wavy brown bags, 2 dark indigo bags. +dotted white bags contain 1 dark teal bag, 5 dull white bags, 2 pale salmon bags, 1 dotted plum bag. +wavy indigo bags contain 5 shiny maroon bags, 4 shiny lime bags. +faded coral bags contain 5 dim indigo bags, 1 striped brown bag. +vibrant turquoise bags contain 4 dotted magenta bags, 5 bright lavender bags, 5 plaid turquoise bags, 5 striped lavender bags. +muted gray bags contain 1 mirrored white bag. +dotted gold bags contain 4 dark brown bags. +dim salmon bags contain 3 light gold bags, 4 plaid purple bags. +clear salmon bags contain 3 striped lavender bags, 5 posh teal bags, 4 vibrant turquoise bags. +vibrant olive bags contain 3 striped fuchsia bags, 3 muted indigo bags, 1 dotted yellow bag, 4 bright white bags. +bright salmon bags contain 1 drab orange bag. +muted maroon bags contain 5 dim crimson bags, 4 dark red bags, 5 plaid purple bags. +light tan bags contain 2 dotted blue bags. +dotted turquoise bags contain 4 faded lime bags, 2 dotted silver bags, 4 mirrored cyan bags. +shiny magenta bags contain 1 mirrored salmon bag, 3 dim fuchsia bags, 3 muted red bags. +dark cyan bags contain 5 dark brown bags, 5 vibrant silver bags, 5 dim green bags. +dim violet bags contain 4 vibrant turquoise bags, 1 pale crimson bag, 4 bright red bags, 3 muted black bags. +dull aqua bags contain 3 drab teal bags. +dim aqua bags contain 3 vibrant blue bags, 4 pale salmon bags, 5 shiny bronze bags, 2 dim olive bags. +light gray bags contain 4 dull white bags, 4 dim blue bags. +dull salmon bags contain 1 striped fuchsia bag, 5 dark white bags, 2 pale tan bags. +plaid teal bags contain 1 dim olive bag, 2 faded purple bags, 4 shiny gray bags, 1 shiny salmon bag. +clear tan bags contain 1 clear lime bag, 4 mirrored turquoise bags, 4 bright white bags, 3 drab bronze bags. +wavy beige bags contain 2 muted fuchsia bags, 3 clear bronze bags, 2 bright yellow bags. +plaid salmon bags contain 2 drab bronze bags, 2 drab chartreuse bags, 4 plaid crimson bags, 5 shiny lime bags. +drab lime bags contain 2 clear orange bags, 4 dotted silver bags, 5 dark maroon bags, 5 dim magenta bags. +bright crimson bags contain 5 shiny maroon bags. +clear turquoise bags contain 4 vibrant blue bags. +clear lavender bags contain 3 pale fuchsia bags, 2 bright lavender bags, 2 dark orange bags, 1 dull magenta bag. +clear green bags contain 3 clear orange bags. +pale cyan bags contain 2 dull purple bags, 1 clear olive bag. +posh lime bags contain 2 clear purple bags. +dim lavender bags contain 3 clear crimson bags, 4 striped violet bags. +faded indigo bags contain 5 dull cyan bags, 2 plaid blue bags, 4 striped teal bags. +posh aqua bags contain 5 bright aqua bags, 2 shiny indigo bags, 2 drab silver bags, 1 vibrant turquoise bag. +dark magenta bags contain 3 light silver bags. +clear cyan bags contain 3 pale fuchsia bags, 2 shiny coral bags, 1 dull magenta bag, 4 dim turquoise bags. +pale yellow bags contain 1 vibrant tan bag, 4 drab plum bags. +dim plum bags contain 4 striped gray bags, 2 posh tomato bags, 1 drab black bag. +dark purple bags contain 3 bright indigo bags, 3 dull purple bags. +clear plum bags contain 4 bright cyan bags, 5 dim turquoise bags. +faded magenta bags contain 1 muted olive bag, 3 plaid chartreuse bags. +mirrored aqua bags contain 2 clear lavender bags. +light white bags contain 3 dim gray bags, 3 bright white bags, 2 striped teal bags, 4 light green bags. +clear gold bags contain 2 wavy coral bags. +dull lavender bags contain 2 wavy beige bags, 3 drab black bags. +dark yellow bags contain 3 wavy gray bags, 1 dark salmon bag, 2 vibrant tan bags. +dotted black bags contain 4 dim plum bags, 2 bright white bags. +posh tomato bags contain 5 wavy beige bags, 1 dim gray bag, 3 shiny lime bags, 5 bright black bags. +bright indigo bags contain 4 striped teal bags, 1 shiny yellow bag, 5 dotted beige bags. +dim purple bags contain 5 dark tan bags, 5 striped lavender bags. +posh plum bags contain 5 posh maroon bags. +pale bronze bags contain 5 shiny silver bags. +striped crimson bags contain 2 dark indigo bags. +plaid fuchsia bags contain 1 shiny lime bag, 4 mirrored orange bags. +dark orange bags contain 2 dotted lavender bags, 1 posh blue bag, 2 muted yellow bags. +dim blue bags contain 2 clear yellow bags. +clear violet bags contain 2 shiny bronze bags. +shiny blue bags contain 4 dark salmon bags, 5 posh plum bags. +dull lime bags contain 5 plaid green bags, 3 bright black bags, 4 drab maroon bags. +muted lavender bags contain 1 dark gray bag, 2 bright crimson bags. +plaid gray bags contain 5 bright black bags, 5 pale silver bags. +light yellow bags contain 2 mirrored crimson bags. +muted chartreuse bags contain 1 pale fuchsia bag, 1 plaid purple bag. +dim lime bags contain 3 dull maroon bags, 3 bright red bags, 3 drab black bags. +light purple bags contain 5 dull violet bags, 5 vibrant lavender bags. +posh orange bags contain 5 pale salmon bags, 5 light chartreuse bags, 1 dark red bag. +vibrant violet bags contain 3 shiny gray bags. +pale silver bags contain 5 mirrored salmon bags. +light tomato bags contain 2 dim tan bags, 1 faded silver bag, 4 plaid yellow bags, 3 drab gold bags. +posh salmon bags contain 3 bright plum bags. +dotted plum bags contain 4 pale gold bags, 1 vibrant lavender bag, 2 pale blue bags. +shiny lavender bags contain 1 dull gray bag, 4 muted teal bags, 2 dotted yellow bags, 2 bright turquoise bags. +dim beige bags contain 2 wavy yellow bags, 2 drab violet bags, 1 wavy gold bag, 5 clear cyan bags. +posh cyan bags contain 2 clear lavender bags, 4 clear salmon bags, 4 posh tan bags. +light maroon bags contain 5 dark violet bags, 3 plaid lime bags, 3 wavy gold bags, 5 dotted lime bags. +dotted lime bags contain 3 clear bronze bags, 5 dim turquoise bags. +dim bronze bags contain 3 light fuchsia bags. +faded black bags contain 3 light bronze bags, 2 bright beige bags. +striped white bags contain 1 mirrored white bag. +clear red bags contain 1 pale orange bag, 2 clear orange bags, 1 dull maroon bag, 3 dark bronze bags. +muted lime bags contain 5 dim fuchsia bags. +vibrant gold bags contain 4 wavy blue bags, 3 clear gray bags, 5 vibrant turquoise bags. +clear silver bags contain 3 light violet bags, 5 dull turquoise bags. +muted indigo bags contain 3 dark orange bags, 4 light gold bags. +bright green bags contain 4 dark red bags. +vibrant plum bags contain 5 dull tomato bags, 4 bright cyan bags, 4 plaid purple bags. +wavy cyan bags contain 4 muted plum bags. +plaid cyan bags contain 4 clear orange bags, 3 dull chartreuse bags. +faded salmon bags contain 1 dim gray bag. +shiny turquoise bags contain 3 light aqua bags, 1 vibrant beige bag, 4 clear turquoise bags, 1 faded silver bag. +dotted silver bags contain 5 dotted blue bags, 1 dotted salmon bag. +striped black bags contain 2 plaid crimson bags, 5 dotted silver bags, 5 dull maroon bags. +dull indigo bags contain 4 dim magenta bags, 4 shiny magenta bags, 2 pale yellow bags, 1 plaid cyan bag. +bright coral bags contain 1 shiny coral bag, 2 muted tomato bags, 4 drab crimson bags. +faded bronze bags contain 5 posh cyan bags, 5 light beige bags, 1 drab yellow bag, 3 striped lime bags. +drab green bags contain 1 clear cyan bag. +pale black bags contain 2 muted yellow bags. +muted salmon bags contain 4 plaid crimson bags, 2 vibrant lime bags. +dark violet bags contain 4 clear cyan bags, 1 mirrored maroon bag, 5 drab black bags. +faded aqua bags contain 3 pale fuchsia bags, 1 clear teal bag, 5 light white bags. +vibrant indigo bags contain 5 light turquoise bags. +bright blue bags contain 1 shiny purple bag, 1 wavy brown bag. +dark olive bags contain 2 wavy beige bags. +vibrant beige bags contain 3 wavy beige bags, 1 posh violet bag, 4 dark teal bags. +dotted olive bags contain 5 dotted magenta bags. +muted coral bags contain 2 vibrant silver bags, 3 dim coral bags. +dark chartreuse bags contain 4 faded tomato bags, 2 light violet bags, 4 clear silver bags. +light green bags contain no other bags. +bright gray bags contain 2 drab yellow bags, 2 muted indigo bags. +posh crimson bags contain 5 plaid indigo bags, 3 wavy lime bags, 2 dull turquoise bags, 5 faded salmon bags. +drab yellow bags contain 3 shiny purple bags, 4 dark salmon bags, 3 shiny coral bags, 2 shiny plum bags. +dull white bags contain 3 plaid lavender bags, 4 dark beige bags, 1 posh beige bag. +drab olive bags contain 1 shiny cyan bag, 3 bright fuchsia bags. +striped olive bags contain 2 drab aqua bags, 3 muted chartreuse bags, 2 clear red bags, 1 posh turquoise bag. +posh purple bags contain 1 dull lime bag, 2 dull plum bags, 3 dark black bags. +mirrored green bags contain 2 mirrored salmon bags. +dull teal bags contain 1 dark gray bag, 1 posh indigo bag, 5 light coral bags. +dim indigo bags contain 5 dark maroon bags. +faded gray bags contain 4 muted crimson bags. +light blue bags contain 2 plaid violet bags, 3 dim tomato bags, 4 plaid crimson bags, 5 dull orange bags. +plaid turquoise bags contain 2 muted blue bags, 5 clear white bags, 1 dull violet bag. +striped gold bags contain 2 striped brown bags, 1 wavy silver bag. +faded blue bags contain 1 dark lavender bag, 4 muted yellow bags, 2 bright yellow bags, 2 dim tan bags. +clear beige bags contain 5 dim tan bags, 4 faded blue bags, 2 bright green bags. +shiny indigo bags contain 1 shiny purple bag. +striped brown bags contain 2 light gold bags. +shiny black bags contain 1 posh red bag, 5 bright black bags, 3 posh plum bags, 5 clear white bags. +pale aqua bags contain 5 plaid purple bags, 3 wavy orange bags, 5 dotted purple bags, 4 bright lime bags. +dark beige bags contain 3 clear white bags, 3 wavy yellow bags, 3 posh turquoise bags, 2 posh tan bags. +striped green bags contain 3 posh red bags, 2 shiny salmon bags, 4 mirrored salmon bags, 3 posh teal bags. +pale violet bags contain 5 wavy turquoise bags, 1 bright aqua bag. +dim tomato bags contain 5 dim tan bags. +mirrored cyan bags contain 5 shiny indigo bags, 3 faded blue bags. +plaid magenta bags contain 3 mirrored brown bags, 5 pale olive bags, 2 clear purple bags. +dotted tan bags contain 5 plaid turquoise bags. +dull fuchsia bags contain 2 shiny crimson bags, 3 clear olive bags. +clear orange bags contain 5 dotted lime bags, 2 dark olive bags, 3 bright yellow bags, 2 wavy violet bags. +light indigo bags contain 1 drab plum bag, 5 dim lime bags. +muted aqua bags contain 5 faded red bags, 5 pale blue bags, 5 dull lavender bags. +faded plum bags contain 5 drab turquoise bags. +dark gold bags contain 4 faded salmon bags, 4 bright black bags, 4 dim chartreuse bags. +striped bronze bags contain 2 dark beige bags. +mirrored purple bags contain 3 dim turquoise bags, 4 shiny bronze bags. +faded white bags contain 4 faded tomato bags, 3 faded aqua bags, 5 faded gold bags, 4 vibrant orange bags. +wavy turquoise bags contain 2 dotted olive bags, 1 muted yellow bag. +striped blue bags contain 5 wavy bronze bags, 3 shiny chartreuse bags. +dull gray bags contain 4 pale lavender bags. +plaid plum bags contain 4 dim olive bags, 3 faded olive bags. +pale coral bags contain 1 faded yellow bag, 3 shiny plum bags, 4 striped tomato bags, 4 shiny bronze bags. +drab violet bags contain 2 plaid black bags, 5 bright violet bags, 3 pale blue bags. +vibrant gray bags contain 4 vibrant indigo bags, 1 dull beige bag, 1 dull plum bag, 1 dotted brown bag. +drab gray bags contain 5 mirrored brown bags, 5 bright coral bags. +pale chartreuse bags contain 2 dull cyan bags, 4 mirrored fuchsia bags. +dotted lavender bags contain 2 bright blue bags, 3 light chartreuse bags. +dull tomato bags contain 5 wavy yellow bags. +dull purple bags contain 5 wavy brown bags, 1 muted yellow bag. +wavy orange bags contain 4 bright orange bags, 1 dotted purple bag, 3 dull blue bags, 3 light crimson bags. +dotted purple bags contain 1 bright cyan bag, 5 wavy violet bags, 3 vibrant cyan bags. +light lavender bags contain 4 shiny salmon bags, 4 mirrored salmon bags, 2 wavy magenta bags. +plaid crimson bags contain 3 dotted salmon bags, 2 plaid maroon bags, 5 pale chartreuse bags, 3 dotted beige bags. +plaid lavender bags contain 2 clear bronze bags, 5 light silver bags, 1 bright lavender bag. +wavy lime bags contain 1 dim coral bag. +clear tomato bags contain 1 dark violet bag. +light gold bags contain 1 striped teal bag, 2 vibrant purple bags, 5 dark salmon bags. +faded turquoise bags contain 1 shiny lime bag, 1 posh orange bag, 1 plaid maroon bag. +wavy tomato bags contain 2 plaid plum bags, 1 dull lime bag, 3 dull maroon bags. +faded beige bags contain 3 clear maroon bags, 1 dotted brown bag. +dark black bags contain 1 faded salmon bag, 1 light green bag, 4 clear bronze bags, 4 dotted lavender bags. +striped violet bags contain 4 mirrored beige bags. +plaid chartreuse bags contain 2 dotted purple bags. +posh maroon bags contain 5 wavy yellow bags, 2 pale chartreuse bags. +posh yellow bags contain 5 mirrored blue bags, 2 wavy beige bags. +bright black bags contain 3 clear bronze bags, 5 wavy gray bags. +shiny tomato bags contain 3 dotted plum bags, 1 shiny orange bag, 4 faded teal bags, 1 bright lavender bag. +dotted chartreuse bags contain 2 muted yellow bags, 4 faded cyan bags, 3 striped indigo bags, 1 drab red bag. +pale tan bags contain 3 dotted chartreuse bags. +dim white bags contain 2 dim tomato bags, 3 striped indigo bags, 1 faded red bag, 3 mirrored turquoise bags. +mirrored salmon bags contain 1 pale chartreuse bag, 3 faded salmon bags, 2 dark silver bags. +vibrant fuchsia bags contain 3 dim olive bags, 1 striped magenta bag, 2 dark magenta bags, 2 drab white bags. +drab silver bags contain 2 dotted silver bags, 4 wavy yellow bags, 2 dim turquoise bags, 2 shiny maroon bags. +dull yellow bags contain 2 posh teal bags, 1 muted chartreuse bag, 1 pale salmon bag, 1 posh beige bag. +clear fuchsia bags contain 4 light turquoise bags, 1 dull white bag, 3 plaid indigo bags, 1 shiny gold bag. +dark bronze bags contain 2 faded salmon bags. +vibrant lime bags contain 3 dull chartreuse bags, 5 shiny yellow bags. +wavy tan bags contain 4 wavy indigo bags, 3 dull crimson bags. +mirrored tan bags contain 4 dim salmon bags, 5 dim tomato bags, 4 mirrored salmon bags, 3 drab indigo bags. +plaid bronze bags contain 2 dotted silver bags, 1 striped black bag, 2 dotted tomato bags. +shiny silver bags contain 2 muted salmon bags, 5 bright magenta bags, 2 drab lime bags. +mirrored violet bags contain 1 shiny yellow bag, 5 vibrant tan bags. +dotted red bags contain 3 posh beige bags, 3 posh lavender bags, 3 shiny lavender bags, 4 pale bronze bags. +mirrored chartreuse bags contain 3 dark coral bags, 1 muted cyan bag. +drab crimson bags contain 4 bright blue bags, 4 faded salmon bags. +striped salmon bags contain 4 posh fuchsia bags, 4 faded salmon bags, 3 shiny yellow bags. +dark gray bags contain 3 bright bronze bags. +striped tan bags contain 3 vibrant green bags. +dull maroon bags contain 1 muted tomato bag. +light crimson bags contain 1 posh green bag. +faded lavender bags contain 2 dotted beige bags. +clear white bags contain 2 bright bronze bags, 2 wavy gray bags, 4 dull magenta bags, 2 shiny lime bags. +dim orange bags contain 5 drab gray bags, 4 drab tan bags, 3 faded black bags, 2 pale cyan bags. +faded green bags contain 4 dim blue bags. +plaid aqua bags contain 2 drab indigo bags, 5 pale turquoise bags, 1 pale tomato bag. +dotted magenta bags contain 5 pale lavender bags, 2 shiny yellow bags, 3 posh tomato bags. +faded maroon bags contain 5 wavy plum bags, 2 shiny lime bags. +dim silver bags contain 2 dull cyan bags, 1 shiny salmon bag, 1 striped salmon bag. +dotted salmon bags contain 1 posh tomato bag, 4 bright black bags. +vibrant salmon bags contain 2 dark silver bags. +striped beige bags contain 2 clear tomato bags, 1 mirrored indigo bag, 2 pale chartreuse bags, 3 dull yellow bags. +bright orange bags contain 1 pale lime bag. +muted crimson bags contain 1 dotted lavender bag. +muted bronze bags contain 3 light green bags. +shiny fuchsia bags contain 4 plaid indigo bags, 5 bright fuchsia bags. +bright red bags contain 2 posh fuchsia bags, 2 clear cyan bags. +dim maroon bags contain 1 dotted beige bag, 2 drab black bags, 5 posh tomato bags, 3 striped lavender bags. +bright gold bags contain 5 dim chartreuse bags, 1 vibrant salmon bag, 2 faded black bags. +drab white bags contain 1 clear yellow bag, 4 pale cyan bags, 5 dark yellow bags. +clear purple bags contain 2 wavy brown bags, 3 dull magenta bags, 5 dim gray bags, 4 shiny purple bags. +dim green bags contain 2 posh turquoise bags, 4 light bronze bags. +dull blue bags contain 1 light salmon bag, 1 posh red bag, 2 clear brown bags. +bright silver bags contain 3 dotted bronze bags, 1 plaid blue bag, 2 light coral bags. +bright bronze bags contain 3 dull magenta bags, 3 light white bags. +shiny gold bags contain 3 wavy gold bags. +wavy bronze bags contain 4 dull lime bags, 2 shiny white bags, 2 dim silver bags. +muted yellow bags contain 5 dark bronze bags, 3 light white bags, 5 shiny coral bags, 4 shiny lime bags. +faded orange bags contain 3 plaid maroon bags, 5 shiny plum bags, 2 mirrored white bags. +vibrant silver bags contain 1 bright coral bag, 5 wavy blue bags, 1 mirrored maroon bag. +mirrored maroon bags contain 5 drab crimson bags, 4 striped tomato bags. +striped silver bags contain 2 dotted olive bags, 3 muted white bags, 5 dark black bags, 5 light gray bags. +drab gold bags contain 2 clear coral bags. +plaid tan bags contain 2 plaid orange bags, 2 muted beige bags, 2 mirrored purple bags. +bright beige bags contain 5 light plum bags. +light salmon bags contain 1 dark black bag, 5 mirrored salmon bags, 1 dim silver bag. +dull beige bags contain 2 dark lavender bags. +posh magenta bags contain 3 muted yellow bags. +dotted violet bags contain 1 wavy brown bag, 3 dim turquoise bags. +vibrant blue bags contain 4 wavy gray bags, 2 light turquoise bags, 1 drab bronze bag, 4 wavy cyan bags. +wavy purple bags contain 3 dotted olive bags, 2 dull lime bags. +wavy plum bags contain 3 posh chartreuse bags. +dark silver bags contain no other bags. +dark teal bags contain 4 posh red bags, 4 dark lavender bags. +plaid lime bags contain 2 muted fuchsia bags. +posh violet bags contain 5 clear olive bags. +plaid olive bags contain 4 vibrant tan bags, 5 plaid fuchsia bags. +mirrored indigo bags contain 5 posh maroon bags, 5 light turquoise bags. +vibrant maroon bags contain 4 vibrant beige bags. +light magenta bags contain 2 vibrant gray bags, 4 clear crimson bags. +clear indigo bags contain 4 light gray bags, 1 plaid blue bag. +shiny red bags contain 4 vibrant blue bags, 1 wavy brown bag, 5 striped maroon bags, 5 posh orange bags. +dark crimson bags contain 2 bright yellow bags. +dull crimson bags contain 5 striped salmon bags, 3 faded purple bags, 4 clear tomato bags. +pale red bags contain 1 dotted cyan bag, 2 dark turquoise bags. +striped plum bags contain 4 faded yellow bags, 1 posh blue bag. +dim olive bags contain 1 light green bag, 1 faded salmon bag. +dim brown bags contain 5 drab bronze bags, 2 dark red bags, 3 shiny gold bags. +pale orange bags contain 3 pale gray bags, 1 clear olive bag. +shiny green bags contain 2 clear turquoise bags, 1 mirrored aqua bag, 2 dull red bags, 4 dull bronze bags. +dotted fuchsia bags contain 3 vibrant bronze bags, 1 dull maroon bag, 5 wavy indigo bags. +posh teal bags contain 4 pale blue bags, 1 pale lime bag. +pale teal bags contain 5 muted beige bags, 5 dark salmon bags, 2 faded black bags. +vibrant aqua bags contain 5 vibrant silver bags, 5 shiny maroon bags. +light olive bags contain 2 plaid turquoise bags. +dim teal bags contain 1 muted magenta bag, 5 wavy maroon bags, 5 striped brown bags, 4 clear plum bags. +faded silver bags contain 2 dull lavender bags. +dark fuchsia bags contain 2 dim black bags, 3 dotted olive bags. +dotted cyan bags contain 3 clear gold bags. +pale beige bags contain 2 clear turquoise bags. +vibrant magenta bags contain 5 light bronze bags, 3 drab black bags. +pale indigo bags contain 2 vibrant cyan bags. +clear bronze bags contain 1 vibrant salmon bag. +pale white bags contain 4 faded orange bags. +light chartreuse bags contain no other bags. +striped chartreuse bags contain 4 clear gray bags. +dark salmon bags contain 5 wavy gray bags, 1 light chartreuse bag, 2 clear gray bags. +muted gold bags contain 3 bright lavender bags, 4 vibrant yellow bags, 3 posh silver bags. +muted white bags contain 4 muted blue bags, 1 light gold bag. +dim tan bags contain 5 posh fuchsia bags, 5 wavy brown bags, 1 dim turquoise bag. +dull black bags contain 5 dotted cyan bags, 2 posh turquoise bags, 5 pale salmon bags. +faded lime bags contain 4 mirrored orange bags, 2 vibrant orange bags, 2 dull lavender bags, 3 dotted chartreuse bags. +drab tan bags contain 5 shiny maroon bags, 4 mirrored white bags, 3 dull plum bags, 4 shiny plum bags. +muted olive bags contain 4 faded blue bags. +dull chartreuse bags contain 4 shiny cyan bags, 5 dark silver bags, 2 dark violet bags, 2 bright lavender bags. +posh turquoise bags contain 4 pale orange bags, 2 dotted yellow bags, 3 bright tomato bags, 2 vibrant turquoise bags. +dull tan bags contain 2 mirrored purple bags. +drab teal bags contain 1 dull lavender bag. +light beige bags contain 3 plaid yellow bags, 4 faded lavender bags. +wavy blue bags contain 3 shiny purple bags. +striped orange bags contain 4 vibrant cyan bags. +shiny orange bags contain 2 shiny black bags, 2 shiny coral bags. +dull brown bags contain 3 wavy bronze bags. +mirrored silver bags contain 4 vibrant tan bags, 4 faded fuchsia bags, 5 dark red bags, 3 wavy blue bags. +wavy teal bags contain 1 pale coral bag. +drab black bags contain 4 wavy brown bags, 4 striped teal bags, 2 muted fuchsia bags, 4 shiny indigo bags. +drab aqua bags contain 2 bright orange bags, 1 vibrant tan bag. +mirrored orange bags contain 2 striped salmon bags, 1 wavy gray bag, 5 pale blue bags, 4 mirrored salmon bags. +muted teal bags contain 4 drab tan bags, 4 posh beige bags, 4 faded green bags. +faded yellow bags contain 3 shiny purple bags, 3 wavy blue bags, 1 muted fuchsia bag. +shiny maroon bags contain 3 striped salmon bags, 5 wavy violet bags. +wavy silver bags contain 4 faded blue bags, 2 vibrant salmon bags, 5 plaid gray bags. +shiny white bags contain 4 dark salmon bags. +posh brown bags contain 5 drab red bags. +bright purple bags contain 2 dim silver bags. +dotted brown bags contain 1 dotted yellow bag. +striped lavender bags contain 5 shiny gold bags, 5 mirrored fuchsia bags. +dark lavender bags contain 3 bright violet bags, 5 dull violet bags, 1 shiny coral bag. +drab maroon bags contain 2 light white bags, 2 vibrant turquoise bags, 2 vibrant cyan bags. +pale maroon bags contain 3 dim red bags. +plaid gold bags contain 4 posh bronze bags. +striped coral bags contain 5 drab blue bags, 3 muted bronze bags. +drab fuchsia bags contain 1 shiny bronze bag. +light cyan bags contain 1 dotted fuchsia bag, 1 drab violet bag. +plaid silver bags contain 3 clear gray bags, 5 light teal bags, 3 vibrant tan bags, 1 bright white bag. +wavy coral bags contain 1 shiny black bag, 3 mirrored maroon bags. +posh gold bags contain 3 bright yellow bags, 2 dark lavender bags. +drab beige bags contain 5 bright gray bags, 3 pale olive bags, 3 plaid chartreuse bags. +wavy salmon bags contain 5 shiny beige bags, 1 posh violet bag. +pale fuchsia bags contain 4 wavy gray bags, 1 wavy beige bag. +dim fuchsia bags contain 1 dim beige bag, 4 muted cyan bags, 1 clear lavender bag. +bright tan bags contain 2 drab crimson bags. +striped red bags contain 2 muted black bags. +dark green bags contain 5 plaid red bags. +faded gold bags contain 2 muted white bags, 5 clear yellow bags, 1 light fuchsia bag, 4 dotted violet bags. +striped cyan bags contain 2 drab purple bags, 1 shiny fuchsia bag, 2 light salmon bags. +dull bronze bags contain 1 faded black bag, 4 dull lavender bags. +dull cyan bags contain 5 faded salmon bags, 1 clear bronze bag. +shiny plum bags contain 2 dark silver bags. +mirrored beige bags contain 3 posh red bags, 1 clear chartreuse bag, 2 muted magenta bags. +mirrored tomato bags contain 3 posh lavender bags, 4 light violet bags, 1 wavy crimson bag, 1 dim tan bag. +light plum bags contain 5 dim tan bags, 2 dotted beige bags, 4 posh blue bags, 4 light green bags. +mirrored blue bags contain 4 faded lavender bags, 4 pale salmon bags. +clear maroon bags contain 3 dark salmon bags, 2 shiny brown bags, 4 wavy purple bags, 1 plaid yellow bag. +bright maroon bags contain 4 pale turquoise bags, 4 drab violet bags, 2 clear lime bags. +plaid red bags contain 1 drab turquoise bag, 1 striped teal bag, 4 plaid yellow bags. +mirrored turquoise bags contain 3 clear orange bags, 5 bright blue bags, 3 posh plum bags. +dark brown bags contain 5 striped fuchsia bags, 5 mirrored plum bags, 1 wavy crimson bag, 4 clear gray bags. +muted silver bags contain 2 dim tan bags, 2 muted crimson bags. +dark red bags contain 2 wavy beige bags, 1 clear bronze bag, 5 shiny coral bags, 3 shiny indigo bags. +dark tomato bags contain 2 faded gray bags, 2 dim tomato bags. +muted blue bags contain 5 posh silver bags. +wavy magenta bags contain 4 faded tomato bags. +plaid violet bags contain 5 dim aqua bags, 4 drab orange bags, 4 posh lavender bags, 2 dull yellow bags. +faded purple bags contain 4 vibrant bronze bags, 5 bright bronze bags, 1 faded red bag, 4 clear tan bags. +wavy chartreuse bags contain 5 bright white bags, 2 shiny coral bags, 3 bright cyan bags. +plaid indigo bags contain 3 pale purple bags, 2 posh orange bags. +bright tomato bags contain 5 plaid blue bags, 2 posh orange bags, 1 vibrant purple bag. +wavy maroon bags contain 1 striped white bag. +bright lavender bags contain 3 faded salmon bags, 5 mirrored maroon bags, 5 posh tomato bags. +light orange bags contain 2 bright blue bags, 1 dark yellow bag, 2 clear gray bags, 2 striped salmon bags. +posh beige bags contain 2 dark orange bags. +clear chartreuse bags contain 5 striped maroon bags, 5 light chartreuse bags, 4 drab black bags. +dotted blue bags contain 4 clear cyan bags. +dotted coral bags contain 4 shiny tomato bags, 1 posh gold bag, 5 muted olive bags. +striped yellow bags contain 5 faded purple bags, 4 drab purple bags, 5 dark yellow bags, 5 muted red bags. +dull gold bags contain 1 light turquoise bag. +dotted maroon bags contain 3 dark maroon bags, 2 faded yellow bags. +clear yellow bags contain 2 plaid maroon bags, 5 bright gray bags, 4 pale olive bags, 5 shiny indigo bags. +clear crimson bags contain 5 faded yellow bags. +dotted bronze bags contain 2 muted tomato bags. diff --git a/res/input_day08.txt b/res/input_day08.txt new file mode 100644 index 0000000..43f5f78 --- /dev/null +++ b/res/input_day08.txt @@ -0,0 +1,601 @@ +jmp +254 +jmp +1 +acc +48 +jmp +487 +jmp +586 +acc -18 +jmp +238 +acc +37 +acc -7 +acc +45 +jmp +514 +jmp +25 +acc -2 +acc +48 +jmp +43 +acc +33 +acc -1 +jmp +98 +acc +0 +nop +406 +acc +32 +acc +34 +jmp -15 +jmp -5 +acc +0 +nop +60 +nop +395 +jmp -15 +jmp +380 +acc -15 +jmp +446 +acc +38 +acc +18 +acc -1 +acc +23 +jmp +386 +nop +534 +acc +19 +acc -6 +acc +41 +jmp +163 +acc +17 +jmp +383 +acc -13 +jmp +346 +acc +10 +acc -18 +nop +448 +acc +50 +jmp +399 +acc +43 +acc +36 +jmp +24 +acc -7 +acc +43 +nop +60 +jmp +80 +nop +40 +nop +274 +acc -16 +acc +42 +jmp +102 +acc +17 +jmp +410 +acc -8 +acc +45 +acc +12 +acc +50 +jmp +486 +acc +17 +jmp +425 +acc +39 +jmp +239 +acc +7 +acc +3 +jmp +315 +acc +13 +jmp +344 +jmp +154 +acc +20 +acc +3 +jmp +206 +acc -14 +acc +33 +jmp +79 +acc +44 +jmp +106 +acc +5 +jmp +1 +acc -19 +acc +19 +jmp +346 +acc +41 +acc +42 +jmp +481 +acc -4 +jmp +142 +acc +10 +acc -5 +acc +44 +nop +302 +jmp +368 +nop +36 +acc +46 +acc +44 +nop +171 +jmp +256 +acc +37 +nop -11 +acc +7 +nop -34 +jmp -68 +acc +16 +acc -4 +jmp +355 +acc +1 +acc +45 +acc -19 +jmp +464 +acc +33 +jmp +149 +jmp +475 +nop -86 +acc -7 +acc -12 +acc +38 +jmp +398 +acc +8 +acc +16 +acc +25 +jmp +350 +acc +18 +acc +42 +acc +12 +acc +43 +jmp +302 +jmp +331 +jmp +14 +acc -18 +acc +18 +acc +7 +jmp +140 +acc +8 +jmp +42 +acc +10 +acc +4 +acc +28 +acc +20 +jmp +75 +acc -8 +jmp +30 +acc +13 +jmp +28 +acc -6 +jmp -142 +acc +17 +jmp -41 +jmp +361 +acc +37 +jmp +147 +nop +78 +jmp +1 +jmp -18 +acc +1 +nop +273 +acc +43 +acc +30 +jmp +126 +acc +4 +acc +10 +acc +9 +jmp -128 +acc -12 +acc -3 +jmp +58 +acc +17 +acc +38 +acc +42 +acc -10 +jmp +218 +acc -18 +jmp +378 +acc -11 +acc +6 +jmp -33 +acc -15 +jmp +68 +acc -11 +nop +312 +acc +21 +acc +33 +jmp -36 +jmp +281 +acc +34 +acc +3 +nop -40 +acc -5 +jmp +141 +acc +6 +acc -5 +jmp +99 +acc -9 +jmp +360 +acc -9 +jmp +366 +acc -1 +nop -188 +acc +47 +nop -87 +jmp +361 +jmp -113 +acc +43 +acc +21 +nop +41 +acc +1 +jmp -23 +acc +10 +nop -110 +acc -16 +jmp +136 +acc +33 +nop +219 +jmp -95 +jmp +223 +acc -6 +jmp +354 +acc +24 +acc +50 +acc +10 +acc +26 +jmp +207 +jmp -202 +jmp -6 +nop +181 +acc -9 +nop +248 +acc +43 +jmp +325 +acc +2 +acc +19 +acc +22 +jmp +254 +acc +31 +jmp +233 +acc -9 +acc +24 +acc +49 +acc +18 +jmp +84 +acc -19 +acc +16 +acc +37 +acc +31 +jmp +66 +acc +6 +jmp +1 +jmp +206 +jmp +126 +acc +24 +jmp +271 +acc +16 +jmp +1 +acc -11 +acc -4 +nop +47 +jmp +118 +nop +136 +acc +7 +jmp +94 +acc +0 +acc +0 +jmp +239 +acc -4 +acc +23 +acc +16 +jmp +270 +acc +28 +jmp -8 +acc +24 +acc -13 +jmp +117 +acc +31 +acc -3 +acc +21 +acc -9 +jmp +86 +jmp +293 +nop -29 +acc -11 +jmp -162 +acc +36 +acc -4 +jmp +122 +acc -13 +acc -10 +jmp -115 +acc +23 +acc +7 +jmp -126 +acc +21 +jmp -162 +acc +48 +acc +43 +acc +37 +nop -275 +jmp -89 +nop +248 +jmp +107 +acc +26 +acc -16 +jmp +185 +acc +40 +acc +32 +jmp +232 +acc +27 +jmp +189 +nop +259 +jmp +131 +jmp +261 +jmp +230 +acc -2 +acc +37 +jmp +240 +nop +1 +acc -9 +acc +36 +jmp -110 +acc +5 +acc +50 +acc +23 +acc -19 +jmp +142 +acc +40 +acc -4 +acc +3 +nop +134 +jmp -164 +jmp +60 +acc +28 +acc +28 +acc +24 +acc -7 +jmp +91 +acc +1 +jmp -268 +acc +41 +jmp -195 +acc -3 +jmp +231 +acc +48 +acc +7 +jmp -153 +acc +2 +acc -11 +jmp +60 +nop -240 +nop -40 +jmp -125 +acc -7 +acc +14 +acc +23 +jmp -103 +jmp +1 +acc +27 +acc +16 +acc -17 +jmp -181 +acc +38 +acc -6 +acc +20 +jmp -243 +acc +13 +acc +26 +acc +5 +acc +38 +jmp -268 +acc -17 +jmp -373 +acc -10 +acc -10 +nop +68 +jmp -36 +jmp -128 +acc -5 +acc -9 +acc +10 +acc +15 +jmp +103 +acc -6 +jmp +64 +acc +42 +acc +15 +acc -12 +acc -1 +jmp -309 +nop +187 +jmp -378 +jmp -78 +jmp +1 +acc +7 +acc +0 +jmp -389 +acc -14 +jmp -80 +acc -13 +acc +0 +acc +25 +jmp -364 +acc -9 +acc -13 +acc +11 +jmp +1 +jmp -327 +jmp +63 +acc +0 +nop -300 +acc +29 +jmp -101 +nop -238 +acc +25 +jmp -204 +jmp -13 +acc +21 +acc +43 +jmp -137 +acc +44 +acc +11 +acc -18 +jmp -307 +acc -16 +acc +0 +acc -7 +jmp +138 +acc +11 +acc +42 +jmp -411 +jmp -34 +acc +9 +jmp -89 +jmp +115 +jmp -62 +acc -5 +acc +37 +acc +14 +acc +16 +jmp +45 +jmp +37 +jmp -404 +jmp -356 +acc -4 +acc +18 +acc -18 +jmp -97 +nop +57 +acc -5 +nop -93 +acc +47 +jmp -247 +acc +4 +acc -13 +nop -309 +jmp -245 +acc +9 +acc -12 +acc +49 +jmp -302 +jmp +88 +jmp -438 +jmp -397 +acc -9 +nop -278 +jmp -313 +jmp +90 +jmp -329 +acc +36 +jmp -411 +acc +3 +acc +36 +jmp -454 +jmp -343 +nop -148 +jmp -237 +jmp -159 +acc +6 +acc -17 +jmp -481 +acc +30 +acc -12 +acc +40 +jmp -27 +acc -19 +acc +30 +jmp -39 +acc -17 +jmp -32 +acc +23 +jmp -432 +acc -18 +nop -427 +jmp +19 +acc -6 +nop +81 +jmp +16 +jmp -23 +nop +45 +acc +44 +nop -33 +acc +23 +jmp -111 +jmp -271 +acc +3 +acc +0 +acc +5 +acc -4 +jmp +48 +acc +0 +nop -300 +jmp -402 +acc +18 +acc +3 +acc +30 +jmp -263 +nop -125 +jmp +59 +jmp -488 +nop -518 +acc +3 +acc -11 +acc +3 +jmp -522 +acc +13 +jmp +9 +acc +35 +acc +22 +jmp -276 +jmp +1 +acc -5 +jmp -458 +acc -10 +jmp -388 +nop -100 +jmp -6 +acc -6 +nop -289 +jmp -91 +acc +31 +acc +37 +jmp -43 +jmp -237 +jmp -49 +acc +22 +acc +13 +nop -79 +jmp -105 +jmp +1 +acc -8 +jmp -166 +nop -27 +jmp -23 +acc -17 +jmp -298 +jmp -274 +acc +5 +acc +11 +jmp -372 +acc +29 +nop -204 +acc -14 +acc +38 +jmp -493 +acc +15 +jmp -146 +acc -6 +acc +49 +jmp -371 +jmp -504 +acc +17 +nop -367 +jmp -279 +acc +9 +jmp -50 +jmp -327 +acc +18 +acc +39 +acc +19 +acc +10 +jmp -7 +nop -87 +acc +15 +jmp -565 +jmp -252 +acc -19 +acc +17 +acc +25 +nop -350 +jmp -296 +acc +39 +nop -579 +acc +23 +acc +43 +jmp +1 diff --git a/res/input_day09.txt b/res/input_day09.txt new file mode 100644 index 0000000..afb24d5 --- /dev/null +++ b/res/input_day09.txt @@ -0,0 +1,1000 @@ +48 +34 +42 +10 +36 +30 +12 +31 +38 +1 +37 +9 +16 +26 +20 +23 +13 +5 +39 +14 +4 +32 +21 +17 +22 +6 +7 +19 +8 +62 +69 +41 +10 +18 +15 +11 +27 +53 +25 +9 +29 +83 +12 +13 +28 +14 +33 +16 +46 +30 +24 +38 +17 +39 +93 +19 +20 +21 +22 +26 +23 +35 +31 +36 +34 +25 +27 +29 +47 +37 +40 +41 +43 +42 +44 +46 +67 +38 +45 +39 +48 +71 +60 +49 +50 +52 +56 +54 +59 +62 +95 +64 +66 +93 +80 +79 +81 +88 +91 +83 +100 +77 +84 +87 +126 +114 +120 +99 +101 +102 +106 +136 +141 +121 +143 +236 +145 +379 +187 +157 +156 +199 +243 +160 +219 +161 +164 +232 +188 +205 +331 +282 +320 +203 +245 +227 +257 +407 +346 +664 +301 +302 +451 +313 +317 +435 +393 +348 +321 +325 +349 +352 +574 +391 +634 +797 +430 +700 +502 +575 +648 +582 +1130 +923 +603 +1316 +615 +630 +1623 +638 +743 +646 +755 +670 +967 +779 +1188 +821 +893 +932 +1564 +1060 +1666 +1213 +1157 +1185 +1931 +1261 +1370 +1401 +1245 +1253 +1276 +1284 +1308 +1687 +1316 +1425 +1449 +1600 +1672 +1714 +2583 +2138 +2193 +2872 +2217 +2342 +2438 +2402 +2430 +2498 +2959 +2521 +2529 +2537 +2569 +3810 +2592 +3272 +2988 +2741 +4121 +5120 +4038 +3889 +7558 +4331 +7462 +4832 +4559 +6152 +4744 +4840 +10127 +4928 +5019 +5050 +5058 +5278 +5129 +5161 +6798 +5333 +12582 +9303 +15020 +8452 +7927 +8220 +11210 +9163 +9350 +9391 +9688 +13292 +9584 +9672 +9890 +9947 +9978 +10069 +14862 +16379 +15108 +21188 +10494 +14636 +19653 +17090 +16147 +16672 +20078 +17277 +17383 +20898 +18934 +18741 +19868 +19272 +20441 +19256 +28824 +19837 +20016 +28810 +20563 +30147 +26873 +26641 +25130 +39884 +37653 +32819 +35944 +35403 +33949 +34660 +36018 +36124 +37675 +75328 +52075 +60447 +45897 +64842 +39272 +62765 +39853 +40579 +52003 +56788 +62585 +51771 +57949 +98100 +73221 +66768 +67479 +119373 +68609 +102685 +91448 +122791 +106621 +192594 +79125 +79851 +91275 +80432 +91043 +149224 +91624 +91856 +143451 +200239 +114356 +109720 +118539 +124717 +135377 +146604 +134247 +309959 +147734 +170749 +238062 +273941 +237879 +158976 +159557 +170894 +160283 +171475 +182667 +274291 +183480 +201344 +201576 +224076 +232895 +228259 +373256 +243256 +258964 +294338 +280851 +434239 +306710 +318483 +402813 +434574 +456958 +318533 +721296 +478040 +519877 +331758 +354142 +384824 +385056 +407556 +539605 +425652 +597398 +565674 +549966 +637016 +502220 +703307 +575189 +587561 +625193 +734571 +819630 +1050845 +951540 +650291 +1156893 +685900 +716582 +779794 +935022 +960013 +950730 +1402482 +1474627 +1023050 +927872 +1052186 +1067894 +1077409 +1420471 +1089781 +1726357 +1162750 +1212754 +1384862 +1430085 +2070762 +1465694 +1336191 +2027907 +2474643 +1620922 +2146667 +2488744 +2380484 +1878602 +1950922 +2129595 +1980058 +1995766 +2264940 +2482271 +2497880 +2167190 +3867133 +2302535 +2628444 +2498941 +3874368 +3883803 +3858660 +2801885 +4181137 +2957113 +3788112 +4376482 +3600980 +4432130 +3829524 +3930980 +4125361 +3946688 +5758998 +5259648 +5104420 +4567475 +4469725 +4666131 +4795634 +7369360 +4801476 +7977462 +7906305 +6402865 +13736460 +6558093 +6589997 +8127825 +6786637 +21642765 +8070705 +7430504 +7760504 +14717822 +7877668 +9900054 +8416413 +9037200 +15638172 +9135856 +9233606 +12376030 +9461765 +9597110 +11359569 +11204341 +14819278 +12960958 +19120073 +21088783 +13148090 +13376634 +14547141 +14857342 +15191008 +15948373 +15846917 +16176917 +30704259 +17474778 +24757396 +17453613 +18173056 +18369462 +18597621 +31330420 +19058875 +20666106 +31558579 +22563910 +24352431 +26337592 +26109048 +30048350 +42285965 +26524724 +35523448 +53696504 +34121429 +33630530 +31795290 +36513023 +33651695 +41622785 +34928391 +44697780 +35626669 +36542518 +36967083 +37656496 +72490531 +39724981 +43230016 +56685339 +77809413 +72593752 +52446640 +86733689 +56573074 +68762373 +63491807 +65425820 +70618778 +104740207 +65446985 +66723681 +72139692 +88989158 +101148303 +170187192 +94229570 +72169187 +198969777 +95676656 +123065418 +105171966 +82954997 +128854526 +109019714 +115938447 +137616172 +128917627 +128712766 +120064881 +137565512 +161158345 +130872805 +132170666 +138892868 +195234605 +138863373 +144308879 +155124184 +166398757 +221110413 +300051213 +177341153 +188126963 +251983045 +191974711 +203019878 +341883251 +167829540 +224958161 +267810495 +419812585 +248777647 +250937686 +252235547 +268438317 +263043471 +361633362 +271034039 +277756241 +508282008 +387509170 +299433063 +321522941 +334228297 +435640035 +345170693 +355956503 +359804251 +586211342 +370849418 +687053944 +644770746 +596108379 +602038792 +619627065 +499715333 +686942233 +528693927 +679398990 +534077510 +771325479 +548790280 +1085926675 +677479444 +620956004 +701127196 +1221131454 +655751238 +1046858195 +1702609433 +704974944 +888498178 +972888210 +1082867790 +1015620164 +1028409260 +1120671337 +1616945300 +1208092917 +1320754261 +1169746284 +1575440411 +1742170427 +1226269724 +1155033514 +1427076717 +1204541518 +1775989518 +1649365264 +1593473122 +2447401178 +1360726182 +1904118342 +1677863154 +2566361332 +1720595108 +2977671482 +1988508374 +2044029424 +2389135442 +2325212855 +2275704851 +2324779798 +2359575032 +2374287802 +2582110231 +2381303238 +2430811242 +2954199304 +3020549839 +3948147766 +3010091446 +4259973385 +4706516093 +3038589336 +3742029420 +3720301214 +3398458262 +3709103482 +3764624532 +4080170140 +6346734763 +4032537798 +4403604456 +4600484649 +4600917706 +4635279883 +6729653321 +4733862834 +4812114480 +4963413469 +7016583121 +6151112456 +6437047598 +7658431647 +6408549708 +6747692818 +6758890550 +8448545513 +7118759476 +7107561744 +7163082794 +9367017925 +7473728014 +10554716912 +11566687250 +8436142254 +9413032186 +9004089105 +11400461067 +9236197589 +9447394363 +9545977314 +11722304019 +15954527022 +11114525925 +13195938148 +16106977160 +13882277722 +13167440258 +13910775612 +13866452294 +13877650026 +19558806017 +14226321220 +14270644538 +14636810808 +18588253939 +15909870268 +18417121291 +17440231359 +18240286694 +28795003606 +22432135737 +25455847582 +18683591952 +18993371677 +22836829944 +24310464073 +24281966183 +24996803647 +30180514806 +27033892552 +28863132028 +34195616825 +27777227906 +27744102320 +28103971246 +40849257028 +31666552579 +33053932099 +30546681076 +39872367096 +33350101627 +35680518053 +36123823311 +45268965681 +46770599583 +59443780485 +64182831169 +60087824651 +53100774893 +47118796127 +92286802415 +49278769830 +52030696199 +54777994872 +79774798519 +55521330226 +55848073566 +95720440662 +58290783396 +87547751731 +62213233655 +63896782703 +143957629688 +95563335282 +69030619680 +95768342704 +107569553226 +81392788992 +147064797287 +93889395710 +96397565957 +146990170603 +101309466029 +99149492326 +101896790999 +104056764702 +107878769765 +106808691071 +117734563881 +111369403792 +119418112929 +114138856962 +156102629365 +120504017051 +163046275029 +131243853335 +132927402383 +150423408672 +162920015390 +164798962384 +212636642327 +269854966100 +276168366176 +197707031986 +193038888036 +195547058283 +200458958355 +201046283325 +213266194791 +297095652738 +210865455773 +214687460836 +218178094863 +225508260754 +250661966264 +233556969891 +270927425723 +316051075334 +391431442774 +264171255718 +283350811055 +366484372274 +421055319037 +327718977774 +357837850420 +688527095512 +388585946319 +471386384078 +390745920022 +393497846391 +396006016638 +401505241680 +411911739098 +424131650564 +451735064754 +425552916609 +432865555699 +489105520586 +735085875809 +561275947665 +504484395614 +535098681441 +547522066773 +780017389093 +665676497398 +611069788829 +685556828194 +723724994412 +807917755736 +746423796739 +779331866341 +895230315636 +784243766413 +940840585340 +789503863029 +827058158289 +825636892244 +836043389662 +849684567173 +858418472308 +914658437195 +1082620748214 +1720172451681 +1722576192931 +1039583077055 +1052006462387 +1685476630597 +1515361064571 +1276746286227 +1334794783241 +1296626617023 +1582143466720 +1786006873794 +2390061222456 +1525755663080 +1563575632754 +1573747629442 +1609880658657 +1615140755273 +1676742725462 +1954241514250 +1750701826857 +1685727956835 +1708103039481 +2386801245628 +2860550446321 +3408052823528 +5362294337778 +2091589539442 +2316329363282 +3089108694013 +2573372903250 +2611541069468 +2886626944884 +2631421400264 +2822382280103 +4386306109401 +3089331295834 +5981425726778 +4594729984365 +3137323262196 +3183628288099 +3225021413930 +5682932726424 +3842291366299 +3393830996316 +3436429783692 +3777317496277 +3799692578923 +4952139985763 +4407918902724 +4664962442692 +6067851183956 +5459999848134 +4889702266532 +5184913972718 +5453803680367 +5959705542299 +6937015841119 +5720752696098 +12918441567897 +6226654558030 +6272959583933 +6362344676126 +6320951550295 +8177161399693 +10634573460754 +9504280967648 +6830260780008 +9861722583091 +9617102428455 +22535543996352 +7577010075200 +8207611481647 +9072881345416 +15890062012388 +13928364177745 +10074616239250 +12390819521486 +11144619515017 +11457873556651 +11816148356493 +22211013562683 +19649116873843 +13103220363941 +12499614141963 +14450120983626 +12593911134228 +13192605456134 +13151212330303 +24067223412081 +14407270855208 +15903142125424 +29510839456934 +15784621556847 +16649891420616 +17280492827063 +17651626314450 +23274021913144 +19147497584666 +21219235754267 +21532489795901 +37259828868215 +22602493071668 +22960767871510 +23957487698614 +27044032117854 +42703444913068 +25093525276191 +25602834505904 +25650826472266 +31687763682271 +41451302973062 +40878146833038 +27558483185511 +42751725550168 +36427990411729 +32434512977463 +34301517735066 +33065114383910 +33930384247679 +34932119141513 +53077881832345 +40679987380567 +68231901982745 +46822070260171 +44134982867569 +102533419717811 +48563602377414 +53209309657777 +59023909523870 +60025644417704 +88273373233233 +50696359782095 +51253660978170 +71693466053080 +59246246867782 +100903791250742 +59992996162974 diff --git a/res/input_day10.txt b/res/input_day10.txt new file mode 100644 index 0000000..63a6f2b --- /dev/null +++ b/res/input_day10.txt @@ -0,0 +1,98 @@ +35 +111 +135 +32 +150 +5 +106 +154 +41 +7 +27 +117 +109 +63 +64 +21 +138 +98 +40 +71 +144 +13 +66 +48 +12 +55 +119 +103 +54 +78 +65 +112 +39 +128 +53 +140 +77 +34 +28 +81 +151 +125 +85 +124 +2 +99 +131 +59 +60 +6 +94 +33 +42 +93 +14 +141 +92 +38 +104 +9 +29 +100 +52 +19 +147 +49 +74 +70 +84 +113 +120 +91 +97 +17 +45 +139 +90 +116 +149 +129 +87 +69 +20 +24 +148 +18 +58 +123 +76 +118 +130 +132 +75 +110 +105 +1 +8 +86 diff --git a/res/input_day11.txt b/res/input_day11.txt new file mode 100644 index 0000000..c485869 --- /dev/null +++ b/res/input_day11.txt @@ -0,0 +1,99 @@ +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLL..LLLLLLLL.LLLLLLLL.LLLLLLLL..LLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL..LLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLL.LLL.LLLLL +LLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.L.LLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL +LLLLL.LLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLL.LLL.LLLL.LLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LL.LLLLLL.LLLLL.LLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL...LLLLLLLLLLL. +LL..LL..L..L.L...L.L..L.L....L.LL..L.L......LL.LL....LL..LL..LLLL.L.LLL.L.....LLL.LL........L..... +LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLL..LL.LLLLLLL.LL.LLL.LLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLLL.LLLLL.LL.LLLLLLL..LLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLL +LLLLLLLLL..LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLL.L.LLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL +...........L.....L............LL..L...LL...L.LLL.L....L.L.L......L..L...LL......L.L.L.........LL.. +LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +LL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL..LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL +............L......L......L...L....L.....LLL....L.......L.....L.L..L....L..L.L....LL.....L....L.L. +LLLLLLLLLL..LLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLL.LLL.LLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL +LLLL.LLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL +.LL........L.......L....LL.L..L.L...L.LLLLLL.L..............L.L.........LL........L....L.LL.....L. +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLL.L.LLLLLLL.LLLLL.LLLLLLLL.LLLLL.LL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.LL.LLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL. +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL. +LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.L.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL +...L..L..L.LL.L.L.L......L.LLLL.L..L.L..L..L.L...L.LL.L...L....LL..L.L..L.L...........L.L..L..LL.. +LLLLLL.LLL.LLLLLLLLL.LLLLLLLLL.L.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL +LLLLL.LLLL.LLL.LLLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.L.LLLLLLLLLLLLLLL..LLLLLLL.LLLLLLLLL.LLLLLLLLLLLL.L +LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLL +LLLL.LL.LLLLLLLLLLLL.LLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL +LLLLLLLLLL.LLL.LLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.L.LLL..LLL.LLL.LLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL +...LL.L..L..........L......L.L..L.LL.......LL...L.LL..L.L..L.L......L..L......L..L..L..L.L........ +LLLLLLL.LL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL +LLL.LLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.L.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLL.LLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL +LLLLLLLLLL.LLLLL.LLL.LLL.L.LLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLL +LLLLLLL.LLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLL.L.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +L.....L..LL.L.......L.L..L....L..L.L...L.LLLL.......L.L...L....LL.L...L.L.L.LL.L......L.L.L.L.L... +LLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL..L.LLLLLLLLLLLLLLLLLLLLL +L.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL +LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL..LLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLL..LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL..LLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL +.......L..L..L.L....LLLLLL..L..LL.LLL..LL..L..L...L...LL.....L..LL.LL..L.L..L.L..L.L.L....LL....L. +LLLLLLLLLLLLLLLL.LLL.LLLLL.LLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLL.LLLL.LLLLLLLLL.L.LLLLLLLLLLLL +LLLLLLL.LL.LLLLLLLLLLLL.LL.LLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLL.LLLLL.LL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLLLLL.LL.LLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL..LLLLLLLLL.LLLLLLLL.LLLLL +.....L.L..L.......L.LL..........L...LLLL.LL..L...L.L.L.LLLL...L.....L...L.LLLLLL..L..........LL... +LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL +LLLLLLLLLL..LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLL.L.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL +L.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL +..L.........L..L.L...L................LLL..L..LLL.L......L....L.L.....L.L.L.L.L..L.L.L.L....L....L +LLLLLLLLLL..LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LL.LLLLLL.LLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLL. +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLL..LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.L.LLLLLL.LLLLL +LLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL +LLLLLLLLLL.LLLL.LLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLL..LLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL +...LLL.....L..L.LL.L.L.LL.....L..LL.LLLL...L.L....LL.L...L..LL...L..LLL......LL..L..L.L..L.L...LL. +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLL.LLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLLLLLL.LLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LL.LLLLL.LLLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLL.LLLLLL.L.LLLLL +LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL..LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.L.LLLLLL.LLLLL +LL.LLLLLL..LLLLLLLLL.LLLLL.LLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL..LLL.LLLLL.LLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL +...L....L..L.L..L..L.LLLL....L..L.....L.....L.L..L.L.L...L.L.........L....L..L..L.LL.L...L.L...L.. +LLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL..LLLLL.LL.LLLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLLL.LLLL..LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL..LL.LLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LL.LL +LLLLLLLLLL.LLLLLLLLL.LLLLL.LLLLL.L.LLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLL.LLLLLLL.LLLLL +LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLL..LLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL..LLLLLLLL.LLLLLLLL.LLLLL +LLLLLL.L.L.LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL +L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLL..LLLL diff --git a/res/input_day12.txt b/res/input_day12.txt new file mode 100644 index 0000000..5d77062 --- /dev/null +++ b/res/input_day12.txt @@ -0,0 +1,780 @@ +S1 +R270 +S5 +W2 +F63 +S3 +L90 +W4 +F59 +S1 +F21 +W4 +R90 +W1 +R180 +S2 +W2 +F91 +W5 +R270 +F97 +R90 +E2 +R90 +F6 +W1 +R90 +W3 +F1 +S4 +F1 +N3 +F76 +S4 +W5 +F88 +W4 +N3 +W2 +F48 +N1 +F50 +E3 +F18 +L90 +F30 +S3 +R90 +W1 +N5 +W1 +R90 +R90 +E1 +S2 +F73 +R90 +S4 +F89 +F34 +L90 +F11 +S3 +F20 +S5 +E3 +R180 +E3 +L90 +E2 +F1 +E3 +N3 +F84 +R90 +E4 +R180 +F24 +N3 +L90 +F15 +W4 +F52 +S5 +L180 +N4 +R90 +E5 +F11 +S4 +F27 +R180 +E4 +R180 +W3 +N2 +W1 +S3 +W4 +E5 +F97 +L180 +E3 +N4 +E3 +S4 +L90 +S4 +R90 +N5 +E1 +S5 +F19 +E1 +S2 +L180 +F36 +S2 +L90 +W1 +F8 +W1 +F67 +E3 +L90 +F33 +N4 +F35 +W2 +F33 +L180 +N1 +L90 +R90 +N3 +W4 +S1 +F36 +E2 +F2 +L90 +W3 +L90 +E5 +F4 +L90 +N1 +N5 +W4 +N5 +R90 +W4 +N5 +W2 +N5 +F43 +N3 +W3 +S2 +W2 +R90 +E1 +R90 +F26 +R90 +E4 +L270 +F97 +L180 +N2 +F2 +R90 +F33 +E2 +F85 +E4 +F80 +R90 +N2 +L90 +S5 +F96 +W1 +S5 +L180 +F54 +E3 +F84 +E3 +L90 +W1 +N2 +W4 +L90 +W4 +F26 +E5 +R180 +W1 +F43 +N4 +E1 +S4 +S3 +L90 +N3 +E1 +F14 +E1 +N2 +F93 +S1 +W3 +N5 +F15 +W5 +R90 +F93 +L90 +E5 +S4 +E4 +L90 +E2 +N4 +F98 +R90 +W3 +F100 +R90 +E2 +F100 +N5 +F9 +R90 +F36 +N3 +W3 +N4 +F35 +E3 +R90 +W4 +L90 +W3 +F15 +L90 +F73 +S2 +E1 +R180 +F93 +L270 +F37 +S1 +F36 +N1 +E1 +W1 +R90 +F46 +W2 +N4 +F50 +R90 +W4 +F90 +L90 +S3 +F2 +E1 +L90 +E5 +S2 +F91 +W2 +F21 +E2 +N2 +W5 +F79 +E1 +F77 +L90 +W5 +N2 +E3 +L180 +S2 +W1 +S1 +R90 +S5 +R180 +E2 +F55 +W4 +R90 +S3 +L90 +S1 +R180 +W4 +R180 +W5 +S5 +L180 +F35 +N1 +F72 +L90 +W4 +L180 +S1 +E1 +N5 +L90 +W5 +N1 +E2 +N4 +W3 +F3 +W4 +F96 +E1 +F20 +R90 +W4 +F99 +L90 +E4 +N3 +N3 +W3 +N5 +E2 +N4 +E4 +L90 +S2 +W3 +F3 +R90 +E2 +R90 +F23 +N5 +F39 +W3 +R90 +N3 +R180 +R90 +F94 +W1 +R90 +N3 +F16 +R90 +F61 +R90 +F67 +N4 +F72 +S2 +F39 +W1 +S1 +R90 +F67 +S1 +L90 +W5 +N5 +E3 +F65 +E2 +N1 +S4 +L90 +N4 +W5 +R90 +F49 +L180 +F22 +E2 +L90 +N3 +R90 +F61 +L180 +F57 +L90 +F90 +R90 +E5 +L180 +E1 +L180 +S3 +W4 +F55 +E1 +F95 +R180 +W5 +L180 +F23 +E3 +F97 +S1 +F19 +N2 +W4 +F10 +L90 +W4 +S1 +L90 +W5 +F64 +R90 +W4 +F60 +W4 +L90 +W3 +F15 +E5 +N5 +L90 +S2 +L180 +F64 +L180 +F93 +E5 +F13 +R270 +S4 +F58 +R180 +W5 +S1 +W4 +N1 +L270 +S4 +E4 +N5 +F38 +W4 +N2 +W2 +N1 +R90 +E1 +L90 +N2 +R90 +N3 +E3 +N3 +F90 +W2 +L90 +F95 +S1 +S4 +F48 +L270 +W2 +L90 +F34 +S3 +F23 +N2 +F13 +R180 +E2 +F95 +L90 +N2 +R90 +S2 +E3 +N1 +F41 +N2 +R180 +S4 +W3 +L90 +W5 +L90 +F35 +S5 +E2 +S5 +E3 +F81 +W4 +N3 +F28 +E1 +F93 +S3 +F53 +L90 +W5 +F59 +W1 +R90 +E2 +S5 +F80 +W3 +S5 +F6 +R90 +F8 +W1 +R180 +E2 +L270 +N3 +F59 +W5 +F51 +R90 +N2 +E4 +R90 +E4 +S1 +W2 +N1 +F45 +R90 +N5 +F28 +L90 +N4 +F78 +S1 +R90 +N5 +L90 +S2 +F92 +L180 +E3 +R90 +F26 +W1 +L180 +R90 +S3 +F51 +N1 +L90 +W2 +F84 +L180 +E1 +F54 +E4 +F65 +R90 +S5 +E2 +F78 +E1 +R90 +S1 +R90 +W3 +R180 +F99 +E5 +R90 +F44 +L90 +W3 +N3 +R180 +N4 +E1 +S4 +L180 +S4 +F59 +E4 +F1 +N5 +R180 +S5 +L180 +F38 +E4 +N3 +R180 +N1 +W4 +R90 +F30 +L90 +S3 +R90 +F71 +L90 +E5 +N4 +R90 +F50 +N2 +L180 +F3 +W5 +L90 +W5 +R90 +W5 +N5 +R180 +E2 +F39 +W5 +R90 +F72 +N5 +E3 +F37 +S5 +W1 +F11 +L180 +E3 +F55 +R90 +R90 +F85 +W4 +F53 +S1 +F33 +W4 +L90 +W5 +F64 +E5 +R90 +N1 +R90 +F14 +N4 +L180 +S3 +E1 +F21 +S2 +F26 +S5 +F6 +S2 +L90 +F50 +N2 +L180 +W4 +N2 +E2 +R90 +F35 +N1 +F69 +W3 +N2 +W3 +L90 +E1 +S3 +E4 +F58 +N1 +W5 +S5 +L90 +W1 +S3 +W1 +S4 +E4 +R90 +N5 +R180 +F57 +L90 +F69 +W4 +F2 +R90 +F1 +L90 +W1 +S2 +F40 +S1 +L180 +F31 +R180 +F24 +R90 +S3 +L180 +S1 +W2 +F64 +S1 +W1 +R180 +W5 +S3 +L90 +S5 +E5 +R90 +E1 +F5 +N5 +F3 +W3 +F57 +R180 +E3 +F94 +W1 +F54 +W4 +S2 +W2 +N1 +L90 +W5 +S4 +L180 +L90 +F100 +E3 +R90 +N5 +E1 +R90 +E5 +L90 +S5 +L90 +S1 +R90 +E4 +S1 +W4 +F65 +R90 +N3 +W5 +F64 +R90 +E5 +R180 +W5 +F28 +S5 +L180 +S5 +R90 +E4 +F82