From e97c6e07ecece7e52da9ee682db1aae5df7f1670 Mon Sep 17 00:00:00 2001 From: sreedev Date: Sun, 3 Dec 2023 00:24:16 -0500 Subject: [PATCH 1/2] initial commit --- .gitignore | 1 + Cargo.lock | 711 ++++++++++++++++++++++++++++ Cargo.toml | 18 + data/day01.txt | 1000 ++++++++++++++++++++++++++++++++++++++++ data/day01_example.txt | 1 + main.rb | 70 +++ src/days/day01.rs | 75 +++ src/days/mod.rs | 10 + src/main.rs | 16 + src/template.rs | 6 + 10 files changed, 1908 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 data/day01.txt create mode 100644 data/day01_example.txt create mode 100644 main.rb create mode 100644 src/days/day01.rs create mode 100644 src/days/mod.rs create mode 100644 src/main.rs create mode 100644 src/template.rs 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..e2eebe0 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,711 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "aoc" +version = "0.1.0" +dependencies = [ + "anyhow", + "chrono", + "itertools", + "nom", + "rayon", + "regex", + "serde", + "serde_json", + "tap", + "tokio", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "itertools" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tokio" +version = "1.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..d49bc76 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "aoc" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.75" +chrono = { version = "0.4.31", features = ["serde"] } +itertools = "0.12.0" +nom = "7.1.3" +rayon = "1.8.0" +regex = "1.10.2" +serde = { version = "1.0.193", features = ["derive"] } +serde_json = "1.0.108" +tap = "1.0.1" +tokio = { version = "1.34.0", features = ["full"] } diff --git a/data/day01.txt b/data/day01.txt new file mode 100644 index 0000000..813c4a3 --- /dev/null +++ b/data/day01.txt @@ -0,0 +1,1000 @@ +ninefourone1 +53sevenvvqm +kscpjfdxp895foureightckjjl1 +72fivebt9ndgq +28gtbkszmrtmnineoneightmx +four66jqrbtqcsxjtqjvfjhl1 +four8pzznjbhxlhtz6bhtzdxjlg1 +rgxjrsldrfmzq25szhbldzqhrhbjpkbjlsevenseven +slkjvk4threesevenznjqmmfive +61ppgrkmkfhteightone +1threesix67px +sxbjdbtlnjrmlzgxneightthreepmqxdxhfk8jfrheightwovp +twofour2sevenk +sevenonezknqnkfqbzffjvfivetwo94two +45xj +mp7one6eightvhfnmfive6 +fhtctftxm3threefour2b +2dq7bdmhhs92 +pdnbqlbvtcxgpnfhmsfhzstgm173 +8fourvxkddsrlcvseveneight +15zqpmsix77hlljgfive +jzjv6seven +eight1vbfive +721sixsdzbqtskbpkqbcmgmlpk5psrhr +pqxdxcx5 +twozsf2five +7twosixthree775 +7xtxrch7six +729twofourlqrxtwo +qtvbgtclhnk4ninefourseven5one +jvhngkcdjhnmqghdbqdzqssf5onegzjbbcchboneightn +five8two14five2nine1 +one3twomddthree +8nine9two +7fiveeight9ninesix6fivethree +254kcd61dc4two +7sixonetxvthntlngtwobzkbz23 +8sixnine6 +threedqtgmv2skmvcd +7ptdhpvr1 +lsvmzvzvd9mqxszjmbddkmxzdxsninedmglzlzphtwo +kgdt12seven4xxtttr5 +nrdtgdftjmfour6fxjninenineblqlthvpcx +ninezmstcdfchc11onebmmfdfhvdncrhc +1fiveseven +oneone26twoeight +threefivenine98one9twotbbcq +9cm7ninestc +jcrbmcjtrlzvz7 +nine8nine22 +3nineoneseveneight +58four2three +stwonefourthree9twonine4six5bvxgkxf +ninechzcz4seven +2tgzgmtzzpjdqqz +brsptjppb28qxcxxjbzpeighteight +eightthree3ninejrft4 +sixqsgkzdjmgpfive4threemxltqdxsfive +vxfd2q8 +khqhgqlxslkmbrvljcnineeight1gjgcqmnbdczqb8four +mvbltrgpfourcclxftbb7gcbqcptvgfsevenrdm +61eight +six8fourthree6fourseven6three +jqdfxvhjg3sflkn2sixptxxsqrfml +6jtxs +seven99threeone +five6sevensmbbrjqvdbmkbsqtwonelg +fdvfsndt32fourgllgfrninebhnzzczfive +9hxp9srhjhjjvqljhzprcjpqreightzs1 +djldhkkcn55threethreefourflnxnbzhkzmx +fourfive43chfvjnvjrkpxlgjrfnqbl +fxjgtj4 +1sevenfour2fiveeight +seven43rxxeightb1 +9sevensnxkp3lpzxfxnntkxzkrhk7jzhmtvn6 +25one +threeone7 +1pkfvsxxthreeoneseven +ztbvfqnpz2xdhgdjmgvfourtworqbxqsh47 +8four7sixninesix +threedgl88cczqhqxjnc +nineeightthree4sixfive3sixdqlmscqjk +16crjsdl +tgq2sixhc7three +tzgsqspndt5xnqlthghzfvkkhone +4fxdqrs64ninex34gd +seven22 +kghfkrpvnppfncbhhqpt55bjf +hjhb71bqdrrgsrkqdtsgrxgsscqjmtfzjkzsbp +lgdnt9threeeighteight97 +pvjhnk83sixncvgmsjltwotdmmpxknhvntfndxr +7449 +qdfzv9hkprplzkfh +66three5five4zdsfrcnljqmsxf2 +veightwo27bdbsvseveneightrcqcjxsixeight +1thvkkk +8bnxqfsdhzppblzlzbkfsksfscmb +zseventbdzlmhnnrfive1one +sixxnmntrmp6srcsqbrqnjfiveeightfive +4trnzlshnjtwo5twocxrvfssbj +6two3twonetqt +55qsnx43 +3three23tpctbkrnqv +sixqk4cnfdmtltmlhqxtwo41glkhdhgnt +35fivesevenpfournxzsbbgzthjvlvzrnine +tworkzgkcvcone53nrvgdvgtc +two9llkjbkz8pklrsgqqzr2four +ninecgpbgcnine4tldjqsone4six +2tfjhtfourfour +onebhlhdvvqx1sevenmsixsix9 +pjgjt6jkrgshxltfnine8four45 +4vsqfljrfiveqeightnvbdb +11nfslqvhm +7crrhqxsfive8ctkzbhqnine +vrvtglvthreettrkq5bdlrtpx718 +1btbxlthreedtrzgeightnineqczhqm3 +193 +fcbzxqxxjtmn47ffschdrbeight +twoh1gqkrnm1 +7ninesixpzpsn7 +5kkvzpgqd +three6nine +32fdn +22twoxgvktxpxmbjqtgtbckx +1hdtftwosix +2jfc +six5nvzcgmrscjn5eight4 +nineqhtczsninetwosix4five +9three6sj +hntktlbqmldrphqzxkhfour193 +twotwo5259 +v7six1vtlxnpm +rhsm2 +gprmtxbhlsv8onefournine +2fsrbtdvft15six1kxpqbnqsxh9 +one5onemxthree8 +nineqbxdbznzktxsmstsntzffour3one +9blhkhjsgsfgsblzdtqqfour8 +stz4889563cb +vjrbs6threeptbbmncz7hqhqgfgldtseven5 +vbfs1 +zjqgczjsjpvzvjseven4 +sixfjzbrrhcfqvglxhnsxninedrvtvjbfqjdbrzblkq6three +one3threegcdldjsrsssixonefiveonechngsl +7srxv4hsgjqsqfvv1tdngkpjrczkl4 +5scgdglnjbnsix8fivesixtjccvmkfxfnzvhctgpncjc +4eightfivefive1lgscbj7kpcr1 +eightknfssevenfive6jnpklczrpfeightwol +37qccxllhzshninebvpc8 +1eightmmcthkhf +seven8fourqn7tbgqnmzcc1 +sixsevenone4 +clhdvjnqnine9threesix +onetwoeight9 +81z3threenjsdhnqxvtwonezv +9hqtsb +onekgnlbthreeg3 +eightspnrpjb65fivevzfpvjntbg7drbgjccneight +ninerdlsix7285 +fournineninefive3vbnhmhdvjgdqcm +njzspqxpxrone7four55 +nfdhlqcpvzrrtsmzhgq3 +fourmfdtnpsfbxkjtgtgx5sixrppsqplqdjvnsixdtqvtdm +21onesix6sixnine2 +fffsmvtt8fivenineglrqrmktzzseven +fivefoursevencjxmskrqclz2 +lgk27threefourfsqrbkntbkfourvflgrzhh9 +617hj9 +ninegcxninetwohpfdxrb3tjjjtxtnvtwo +one1gnftc8onehtsxsmg +foneight3fsbhdqzr5twojbsdnntwohd9seven +zkzpfvcxqnbvrg1 +nine36cddqfvrf +rdjlpfk2pschfsdrpz +nine994three8six +three3nvflpftf2eight4 +3nine2 +rxxjdk5354 +hf4eight8qjtcfldnkvtwofivetwothree +7six3twodhnvmxj1nine +57seven3six6 +qklbvzfhclfnllhhgeight8xtvld +5fgzqhkssmkcfour1 +hhvjkdnlffnineeighttwo18twonecs +sevenbfzrgfm1six1 +nine71cskklxvcbnxtskdbqnpgklrxklcgccxjnssksrlkx +hmklhhjdthree77 +3vpxclbgkpone3ninesrclfive +djfqkgjvqpfvdsix5sixtwoeightsix +eightlt7csvgxpnslk +sevenfoureightnld2mxtgpbzpthree1 +11sevenglfmsb6 +onetjjnxvssg1four4drxbxpnpv24 +2zdxs9mfnbgfmjln1threefive +one186ltsbck +6fsbpb9sixhc +nine818 +xzqcpcdprsqjbgknkvztwo419q +39qfdlcnkhg31 +9djnlcrxqxhrcb8mczrxrm +nmb887525seven +jhmv3 +zhvdbn1fivem8seven4sixoneighttsn +6zmmjqmnftclqbcthree +6cpzeight92 +onepqfhtsevencvlfvnczhb91mmtdprqxmcnine1 +tvqdfxn8eight +five6fivercgrpbtjgv87jmcndclbk2six +jgtmrbvl68lpqkpxddqqxvsixfivesix +nine2nlffgkvmp +1frdnhssftg4eightgclxsgqtn +2sixblr94six +94mlfv +6vlqtcsmdd47hpfmlc7fiveeight2 +tklxghxv5bzc4hhcdcpmnine8 +four6one1zzgqghvs412 +xghjpblsfpg19ntpfmcfd +471rbdblzs +69fourhjxkvd7fourfour +jmrscfqdfppfdjskpk61 +five5eightnqpd9ninezknztwo +onelknchr7nrfprgmqzp +svxlxrx9892five2 +3ntkbzzpxhdmrsix8ttgp +ndh7zlnrzpvmnine +one7xlnbmjjmfv62qvqjpfprbvjkpcnine +99three5 +threetwotwo7dhtgtbchc7sixtwo +tmfxxph3eightgdccscdsrkmnhbb75 +joneight4one5 +nine3six +81tqzsqpkv99 +sixvjlq7 +five7bkc +five3811threelfpzztxzk +1fourkkpclqc3 +xgrpbmktcthree46g +bgcp4two8 +jtgeightwo7nine +bkmcrcq3eightrdtvrbglmxmmztqm +7tscmg5one2jhhbfb1 +zt5khcrgqjg5nxxzxzd +five85 +twothree1 +eightsixthreetwo6b3tnjmcqdjfive +onefrlg7 +fivescbjxbdnvslqqsone5bdbvskpmksqmmfsncsmd +two83fourthreefourseventhree +dglrmbtkfltwofive8ninelzmrxvxoneeight +8nine6sixsixtwo7 +sevennine4lbsevenkdnrhpltn +h3fiveeight4cplrnd +vhsgjbqm3ninedfhfsb +93nine7jvjmlzgcztrqlxtwo +zhhhdddbbgcssvfzdhmpone5fivefournine +l9fourvjfbqpdslkmvxsdrnsgcvzpjxm +kxlseven5two +rbtwonegsdgvsjtpnnkone7mdz +phffknvthree2threeqgvfqxgnine7 +2lgglnmthreeseven27three81 +lrgkrxx2 +seventwokxvzkvq6eightthree +5fiveseven +fstwonersngdlngx28nine +49oneninesix8four2q +hfvhzvmjgbfcbsevenrmhjhzkc3 +six84 +8eight2gzblldzvkjfive +6fz3eightzmsqb4qsbbsnthm +fcglpc2one51 +sevendqghclrpxt7pzone48two +three5one +5sevenfivebbzkjlcnxseven8fourmzqlxxgjvc +xgg8one6782 +gggtljnnsix3lkhdqzzpdtdkmjtgjddkpgx4five +qrmsfc13onevnhlbgs +nrtwonethreerbbqffzh62 +5eight81gcdbrx3rlk +mtdtxcmm2bgmqhgqrtxsn8 +onercx2 +9sixoneqgr4 +xmoneightfour2 +six85foursixninetwo +ninetwo8four8six +qchclfzq47 +khrll3two21 +seveneightnine8868four +3rmbmtbxjp12seven +3tsxgvqxmzvxbdvxtgrvdbzqbh +eight7fourjtxx +fmb4one7threekbxeightwoj +vcsevensixseven577 +2dkhlrrtrnbgzrmxm5fiveclhgn1eight +1sevenlmrbnfour17seven +three5jtbvkseightoneseven4df +fourrgqxplbpbxtsgkm7 +fourqdfxchlc371sc2 +fqxlmeighttwo1seven +zvvlftlhfthreesix6three46qkstxvdt +m74pjgccfour1four +plphq933eighteight +cdbqlhbhj3eight +4onevgdkxhz799five9fbljhpqmvk +two6qzgphxl +two1eight +onekxxghlonerqqlrs83threehvvdhsxmfour +npmsvvrdl2673 +fivejthseightsixtwo9vgrvjzbzsrxjv +eight2gqfive7mzjzpxqcvheightjfx +1bxckdpt +dngoneightbtdptfn85 +fourtwovfzgmxjseven935 +8onesix2drgjnlrxbtdlmlznine5 +five4mmpmqlttsx56ljdzldntdvthree +1nxxgtwothree22twothreenine +38eightsevennxctjfstp +8fourvhnps3onellstpnztn6kvjccmv +1bseven93eightfour +5nphkdbhxqb2pqxtkvhxq +nvvx6fourjgkdsczjv +fourxrmq78 +8tjmnvthree3ninetwo2five +p7cvtwoneq +7thbggjbznrsixonethreeninej +xdgm1crqfnklk +onehmqqgh4ninenthjonegfjmvtfgd +sevenbsqtlk9 +8seven9two9hdz29 +fbcjhzdgzdg8jgjvcrmgbcrsixnine +3bssqrj44onedqxvhkfive1 +tmmxtz5dtxbbcjlfivesix +pvfqzksgrs4khmlvtwoeightlsx +psbttsmnpninefour42fivegsixfive +sevenfiveqscr7dfxpninesix5 +xmsjddzfxftsjfq6four6eight6three +seven42 +eighteight1nineeight9 +8c +pmqljjjzvx5znxqnsfour8 +78zlpxnvsqpgmgmk +four7fsgttnrgnlslr +fourtwo3jg2 +qlz18three5lpxfjvnfppqjxh +4fiveonetthree4eight +7lzffxkxnzjrtr +three7nineone46ksnshqgdpt +8dntxkkkgdxggvhxh2onefour5gqzsqkm +tjsixonedbklrxxk2twonxdpjzb8 +mfglbrjrq93 +seven37xhsrxrvcgninexbmdrzxthreeonethree +fivegznvfztszqlhtrsslsmqq43212 +tdthjjjbkeighteightsevenpcbmpfq2 +five1eightq +three13three4vrsrrtp +cgztjgqgdths2 +dhxztfvlonetwokszrv8prdpm2 +dfkcklchjj8twonine52ppvndfcnf6 +three7ninenkxfourfive +93sixlqxctdhmvssixone +oneqbvfrvteightnineninefivethree9 +jskrtmvsrqnpvcgsmxbonecmlrjpdpc4three +crpcfour54xxgzz +9fivefhdpcqsd +fivenineclfctjninefbsh2 +fivexhrzbqpfxl8sixtwoeightllzplcpllk +zxgl5qneightsevenone +sixpdc17thxfive +1twolftpzbmnzvdlkvlsevenhdvgfrjhmthreethreeddkdvht +67twotwo71 +oneeightcgnhtdxpfnsevenoneeight13 +eightthreervd5tnj17 +ssrsmhxrsixeight3gbqggcvfqg29 +6fivecvcdxnxhxxtlzthree +fournrrsix595 +p2qchlvplzdvchkbdzzbnsix7ninefour +fourthreefourtzvlrnr9m94seven +4jxzkrfourvtjpsnrllkjcczmmqnsj4q1two +4627qlpscgpjcnine539 +two6nineeight +63five66fivethree1 +skndgzsbsntwoone1 +threerzgdxgtthree2three +953lsdgn59 +27bk +sixmfmbslpjjsixsvnqrvtxznffive5 +2ninenlgpggxm42six234 +fdzfvkjnchsevenfivethreetscllgjvrtqckfnmz3cszmt4 +7ninetlzsxjsl2nine3 +shsvptqngsevencjjthvfm9six5four +7lsrq36threevzfjc62 +two59threedxmfourjfschvqvnine +khfqjmksxhbvs8sevenhzrmjtkgm +nine2stgflmsm8fkthhhjzlszdnmkmqpnjxrfc4 +twofourthree244nine +eightvt978 +fivefiveninesixnine6513 +2lbtz19fourtshqsvblhrkhxbpfour +ptt7bntxhdvl +mskflsslvdlmndmmqmfourtczqlssnineseven5xxxkfvzd +l329eightsevenfourfivethree +rmlksxsixspp9fourhlcg +8five9q +hqoneightsix19nine6xmjbtgjzgrhmlrxq +six38 +9eight2 +3sixbzhgfcg57sixsixjtqmknd +9fchn58 +vrpftbnvonefour6 +vqgdtrvhnnxxsevenseven9eight +56vnine5rdpsnlqcbq7three +vncrjds2cmrg7 +213sixfivesix +tzclpzdsthree4sxgjvrzcrzcndnfour +4sixseven1three7 +8fbrggzmtqn8 +four79p +twonineqonemfour3dq +5fdgpmrghtksn5onesixtwo +xseightwongqqsxtwo8jslclldvnb +nine1one +9gxjrfourvhqzcxdhrtpxgtwonine +eighthfhtnvchtc7fjkrxsmhtm7rbk +thqxcfjbksix32xqrgqsqtx +6qjqql +jgcreight7eight +6onesix4threeseven +5vcv1twoeight7 +fivesthreebvjntwo9jdxghmxvl +632msc9threenineqfone +dqxfourkb4eight +6stsp3nine +566sevenpdmg +xprjdn55 +9mjtcmhjb +twoninelkjznqztbc3twolnhjhdbfxmhfr +twotczpxn6qlcfdlpnq +4ninefive +1rs44three2gzczjdgq7ssmtgjbgbb +ggmzqbkgsix4five23bftjlmbfbd +threehfcscmmlqvcjtpthree98 +7sixsixone4 +2fivefvrr9four4three +1zt1seven +9hsbthqvhhsnineone23tslqccg +sixbqvd3 +22148four3 +ninejlpbtnfive41rtzqjgfmcbncrrlnn +9sixfour +qnhfivetwofjtqtlxd7lmrlfctq864 +69dqrzhlqssgcsxtz54cpmjvrkcfiveseven +fiveqpv85frkmpgxgc +xxqsscldeightone9ngqtkf1nine +5sixgxbnnjsvhf5dgxgone7 +sixsevensqghlvkfxnfour7 +8gmgvjbfivesevennine +qj796fourone9 +rmpfsppvzdtwo4threetwotwo9 +dqvtrhm3nhtrxxccmfiveonedfzfvcghr +4threejxkhnxcxjoneightp +sevenhkpfgdgsgnvseven3m +qhrvjcnfdbqchrsvchcxfourbkhhq9six1eight +29pqnd +1oneonethree627 +5977rcr2threeeight1 +fournthpqbztrhnine64 +fjnjpgqxr86five4sixxhrtvbp2two +7sdnvlb5two +58vffgzcgx4nineoneeight3 +h1sjgqbhndbz1oneqgncmhnleightwos +gjms21 +onetwodphfznine51 +gxpl3fourzfz3 +five46 +mqsixccffmc9gqk1 +5kvxpqrrpeightthree +threefoursevenfive2dhtbrxlzzl +shhczssbltllsmntntlqfqgnnl98rm +5oneeight3vkqtwo29 +bv69fouronefourone6 +eight6five966 +4xnrtztgfgcmnmnsevensix +gmsvtnjd1sevennine4xxhqfbrjjqbglqjngttc +mdnxhhteightfive5onenineninegqjbqmfd +xonefourtwo4 +onesix61 +sjmnjhkj2892eightnine9 +nzseven39 +99nnjjzdrfsnjhthree1sevenfive +6xmggtbnblnbxdpkzblnvcvjqmhvntwoeightseven +76five6six +chdfjrlfhdzeight778 +xrvrck9five1hrvpfvkdcb7eightnine +foureighttq5sgdfourl2 +4rnbxrhhboneonefournine +5four3 +1b97eight +hlcjghlhsf32tgknm565knxqr +onecqgbgdcmlb2sixsix6nine +kxdkz3 +seven5xvhrxdm +xblqbgkqgsixvgrthreezxnzhknklxhbmgl4 +fvnkc7threethreeseven +bmbqxv24jhdg +97rfphlxvtx +4pgblonelone +ptdpllrddeight3 +9knpjzskrfd4 +twomjqdtbbvmj4shvsqrone3 +9zzh3pjsf6mhxlhm9glglfztjm +cfconeight47fivetdsmndgvsmbqjvszb +21vbqjz374 +sixeightqgfdjbhfd4oneeightone +tbccqdpz78srmcdx4six2 +643gqtvhkljxt +klfjf4qms +zrnhkhqzpczzfqsgsrtxklpbtp72 +1cnqfltrmhphg832three +twoseven5 +mxkmxlcgsixklclrkfr8638fourlrqpzgjq +nkbfkh452pthree +zvcktvd2485four88 +rfxj4 +three6jnr7 +two45rldjnmxkjphtwo7v +fivelncjffdnkzqrshvthreeh3p +ninejgrbmhrbqldeightnine6nine8one +96lvpt2djrkc5 +7seveneightthcxgthreeseven5hpfddktpj +6bvn +sixbjxtphstzgspnmkcvc952one +gmmslrndvltlthree394sevenoneightl +threenine7onefourtwojxhzvqlseveneight +5eightsix4txcczzmg +84seven +skjpkhxggsvjbprhllgjhninetwo6 +72bdpzccvone4zbdzlllnnonernlfvdpq +bvrtmzmtwonine29 +mrlvmdnlxb2814five5fjxzlhpn +lmrpf82rksix611 +tvq18oneqnmmzvtclnthree +jrbjc1zbbpqbrddt26seven1 +lxfivenmdtnhdmf98ptpxsgmgrxkmmznlk +zbmvchmxsevenddddthree2dxlddjp4 +three3onejg2fqgtjmpcgeighteight +three2two9seightfjqtwo +ninefive8sevenvnssix +3cnbxxtgmf5 +kpmjcsfrjfgzhmbpnqmlvrhbhqs8 +3vvcone64 +fvqksdsixthreexbfivetwo3 +sevenseven5 +63twoone8vhbcpmmlfive1 +4ctwo17eightsixkpvlgpj1 +rsgsnone1 +kbvxonemcqfive3eightone +ninenineone45threepvsmrtonejxmbnd +37fklnjkslqk9th9 +fiveoneq8rcgdxtwo8jfkxq6 +rgd7 +7rgkdpvp7qrb +7crtxfmslxxtcxsv +mqdnltb23fiveqcdqtonethree +8seven7 +8cqhqlhndqjznqhdbld2nspnxbj99tqqhp +onelqn7 +bvbjfour7 +ldqzhvhrbgsrrkh5j +kjsjxdcqgjztldjvxxgr9twoxfknxrrrphkdzdl8 +rvscnztblp56ljqtwompclcf +2dbtdgsevenhzctckvkvxvjljz +tvmhhxbbxvvsnlnineqsltjd92one +9twoqdmtvbxhpcthreeeight +81dvnkd87xbct +6mnxqnndcjfivefdckzmppfsevenmqvvvbnrgs +lvl3qjk5 +3fivefive +ktvsqzrf14eightmtnqbcktk5 +sevencdknznbxseventwo8rzggmvpbvlrs +hkhhrdxlml1xzbshninejzqc +eightseven23shkgzdgvvcxxfdv5 +14five1sevenxfmhtptwo3seven +47one +2three3 +f5dszzs2 +xmxffxkxpkninethree8x6seven +glzoneighteightrnjqgjznjm9 +63fznqxdfqt8 +33nine +4vrbmthreefbdzf +fourninethreesixnine9fourlvbgqhjbqncnlbjbz +two848dbvbninenine17 +pqzqgone1two +eight7lmxbhcsix +szr2fcvkljctlghhthree +sk81pxqhhhhvnjvgzfiveseven +cgqqkrz2vpdpzrthqssg7nineeight +498eightfournine +eight85onesvxnineone53 +ninevmchpkcg2 +six2shsvqfivefourtwo +mdzckfvr72cv +twotwo7onethreefourdjtgjg +tworfclmm3 +5sfvnkrmrptsix7four6kzlmclm +1onedkqgzbr89kphvc8 +5seventhree8eight9eight +kvjpgjgrcmpdscbfthreethree4mjqjnnzceightwohh +kjbmh1fdkdtznmsznvlconeznineseven +1fmgpxhxpqznqscvbszhhcmglvtnzhbbjjbzg +1mfqzkfnine5 +rrflkqslxztdlqxqkdnhqd7ps +39123thhsmscbpxr +8vnine4jgqrvqtshg3jhhdnbsrxneight4 +xkqgnfour87 +lsbnjqtzqz7ninenineone73lmkbnkhs +9fiveqqgqblfivehttxk +8twotwognd +4xknbheightfour6358 +4cqtpfjpf72eight3 +ninemjpqpqg8foureightsevenfcvpnrnnpzhcgkm +37twofivedsxrzbpchnkgxqx +oneone57one2k92 +mckoneight9threefour1onefourhdrcrvhqcmngkjnsthree +945 +tmmtwo7 +57 +6twoxzbfftnr27 +threenine4bqpztsixfour +84eight +3jpbnjrqhqfnxckqkqdvls +9gzzjzz +374nine +ninembxeight4sevent +threecq3 +cvn6cvqmpmfflkzphndjnggtktwosn +pgz7four5nineeightsixqrnfkdkgh +6one781vstwothreef +one617fourthreefourxqxnpv +8eightsqmkjkkf5xckcvd4lfnnfour +seven23qhntfmg56onexkjxh +f5s56rfltx282 +twosixninefive1tlzq +threetdhghclfsksql5oneninetwoseven +zbqzxmpb9pxlrthree +r4gxdzjnvzfonejnpmfcpgvxjjvkh8 +five338threejkk67seven +twolntxcnzvfr55sixtwofivesevennine +xhlppbqfr71brvppsixthreefddlgpfslqmdv +kxsklgonefjfpkd4threefive9six4 +6srphqmtdoneh3glthreefour8 +rjzdmj1cqvxnx1nvcvbfctft9 +3fqjdgbpggthreesix53 +9fivesndgmkvckblktzkshglqgdl4ztwoseven +qqrxkqhnzb23two34nine9 +8hrmffgstqpsixeightx1six +jngcsjnrhn2zsvcjmjg +9zfdmhzxdnfour272dcrqgk +lbjbrfhjxhxjphzxsjsix4 +fourthree2seven1two +twosix87 +vrlqqkctddggcvcjcpk6hxbqvbxmtsix +mrcgbpc6dthzqmmthreefour6two +r2zntjxgpfqfmqh +fourseven3 +6nfnsgchjdffttmgfnbvlxzoneseven8 +8sevenqqfiveseven5twojvgk +4rmtkvml4 +bprnine85 +sevenmfpcvlblcnine485fourseven4 +sevenseventhree68fivelhqgjqvcdqkvds +3fourxsgghqnvtssnvfs7nine7 +1fiveone5hpfdgvxb +eight2eight42twotwoonenine +lpdeightxcgpxkkeighthtjpsninemjlxrxtg31 +4smqpjzsixonethree +mr6csbmgrdrjj3onelqd4four1 +5sixvbscchd3 +384sps +4qzgsvmfx4ninevcclvcfrfp6tckcpvj5s +8l5glclltgcjgbhcg6 +3ldtdmjc6threeone +hsrtzl521nine5qqrtpdsp +z4v8threejdsmbfjpbj +9sixln26eightwovmh +848 +kndxtqpfrqxdxtfnqrqznpgvp9ninerlzcdvdtwo84 +kmqs84775seven +5threefourzkg +43five8cq2kprvdqrmxr1 +three4ttjqdh +48nine7sixfive +22x +sixrgtwo3rnbzkrztkdkg +4t +29bjpskmxneightppvthree +zmlzxvtlkt4seveneightbxseven +5two5eightnpszzmbkncnstx4 +9vk98sevenhznkxmlrlk7vdbqgvfjdk +1sixb8sjkvdhfld +one42eight4mrsdnpfjpvdtq +76fourntsrfllxkdfqvm6seven +skqndhr3nm4776 +4xpmfxmvj633eight +83ninecmpt +fourdthree9 +9eightjqnnmthcrseven +7threekgtf1 +xscj7threenmhsixseven5s3 +cqlzjt41 +855threemlmmqkgtfk +ninefzmvjjtvbmgf8nineninetwonegcn +ccpkzcldfourkdtfkjxvfb9fourhbtwonsoneightnl +pkeightwo5seven88rdnzzsdkbjeight9 +threen2fjsfivesix26nine +nine4rz8nine7bglpcmkqfzpseven +eight94six8dpgrv +twodfctf278 +fltqtmdkgjsvf72three +llrtzsixsix4fivetwosixone +qjhtjqjhgkjkzlpxxclsrdnzk1gbqt +sixeight1sixtwo +one5413nkmqjtlbdkz22 +bhtwoneonemzpzkqeighttwooneqkmcmsbq4 +sevensix3three2sixprcqcvm +25tjffdrtwohfqlkhzxlhb +97gcgqgjnpsthfjfdv636jsxq +zggjmjone1297six8drzs +jbpvnineeightntkkshbjvr3nshnqzdlkjmkfive +5four2gkkbxmpthreefour6 +5two15sixfivetzpg +one4fouronemfpvnqseven +9fnlbljdnzzfournine78 +djfljccrtvvqktzzvk61onesd +7twohbkeight +seven1eighttwothreet +4mdcljknhpqgxffqpj5 +nine9jlsmfgdgntwothreeeight4 +136nh +635ninejghg5 +cmone7fdlk9lfivemzvnhkcsp +8eightnlndm +6fourpb892 +fiveseventwosixfourthree7 +5fm +ninegchdnrf63431 +24sgnflnsixninenine8 +snm9 +3fntd721dhhkrqqxsfpstsvzpgonetkhcr +jlzfbml61vdmgb7one +266517 +7fivetwo2vhchmg678nine +cgrp3vzn5ninetwofour +666ninefour +9s +svpcnlktpxtvk42jhsvvdpftxpsk +2qznfzvbdr +foneb7eightfivehlbjjknninethree +kfp6 +l34pxxhxtd7d +rsbcrtwo27twocqlmeight +jkzgvqgpjfdqvmjfx2flnvjmgllxghhrbjjkfour2 +45sevengdnf59twofive +6fivespvkblrxvkcgdxktl +three9dvrssvl5eight4ftsix +seven56gdmlbfbjsl894sevencmc +814 +1one4 +onenine5fivekcrf1gvvfhlncsv +2ctvq9djzddfxcrj +ntdlcqgsixvmfvlc4fourvlhtvvqmnmkrm +9nineseven1seven +lcvzbnfourksvjqvmv47one5 +nine4blvlvlpkl6 +sixnqxrhnztzvpmbzmxjm19five +18jtzhk +rzrhv8four +2npghxvjonebchsprfhsjznrxvxnine +eightngsevencrjkxbhpgtxlzhgb46sevenqhqmlfx +threesffl9fivelgmndjfvseven92 +seven85 +87six9vnshclz +threetwo7915three +one2vkbp6rhqbxvcl7 +bsbr1five91 +qd3mnine +jjvhltxtdh5nineone6 +mbxlnj7bbhnxonejtmtqjfrzqgtrhkeightnine +fourfourqrxdtfive2smnqp +7tvjrszvrhdl5five +four15tvmpvxpvdjnine +sevenvv5tworpvdlseven3dlqvgblqtwo +nkckggninegnlqlnv25threexlhlbzvzk +3vngmhprjseventhreeeightnine +nvqtpzsszrdvttfivenine56oneseven8 +146 +fxfbone59 +f32dhffctkxp6rcngvtfq +sixthreefsixjhckmjqfive495 +42four +65nine984 +5fthreeone9twoqqsfvzmp +ttwonefive4 +one6gfxseightxqcq6 +3sixnrjtwormrncmhxeight +jhdxnmsgsdsevensqsslbsndpdmznmldbgeight3tcvjjv4 +5sixtvpckxzcjzbmrzk9 +pmdmnfgkb3six8xsmstsmxgmm +53onetvlgbglq4zbqpdgsskzdsksd6 +kzjcllvz6skphkfdxfiveqrbhmk +75qqjdgxlmfthreevzbfjdlxkfqqq +seveneightjntpjthzptwo2two +2five4fvrfxxnine4qzkkfkmq +2xlvcltn7 +fnmggtj2rqxzh7three +rzpjkgtml1 +2oneseven4one7xps6 +rljfhfrhmzkjxktnszbkpfspxdkqneight2 +pzgnine49six2 +plxsqeight2 +eight2sevenseveneight8rfcrsdlxb +sevenclpqqfxgjnmtwo9 +9sevenrqsixone8eightrxqgfsbjh +kqtkstrxhtfzbllhl4lqvqkcbr +hfplfpbltczflpp7nfive8 +ninenvqfrvtwo6onel +threev65 +frhn18six9sixninefourrsqzgd +mcxckfg5vpkbs89gbninexjzvlj +fivesixdx28 +7ppbqv +hs9twopcvpgtjnrsvksskpc8 +9mlpckzj2twothreefive +rkrgdclkninetwo6eighttwodc25 +tfivefourtwohkhhgsqlj1dtdcxmxkf +1four6five +fgbvmvxvtsix2twonine2sixfour +foureight66 +s6fourcv +mxl358sixfive8six8 +ztbtwo73sixvxsix9four +eight7qmdlcxfive5 +phgfivekrjxdmnzsqsix9 +1mfqsevenhz +rjhcdgzngtc155bqlttbsxklpknvlmk +qjkdqlrrs6two +sxlmqzxdpxdnj9fivetwo9seven5 +2qtdblb2 +8qgdzrsixtwo598oneightp +1shdb944 +vrlpronek2 +jm52 +8eightfourseven11mvtrmtkr2bmp +mnvnjxrgmrxhztwo2ssrdpqk +ztfive435three6threetwo +tnrrdnbgnbhzljdxhxxfrqkcpeight8js3 +foursix6zcsrztvgjxmp +five7fourgnnkspxcmczcbgsbdf77five +fgbrzkmvgrdbqjqndpfive81onetwomtzlfb +2qbsfd1two3ninetwo2 +8tdjxvfpvdvone33three +lpchnmln56twofive8tfour +cfkfbhppjf6fourdkfxsvdtbcjspzlseven8 +5fivestgkzsevenonedkhhrkthree +37nine8six8onefhvvbkmgdfgtv +26hzz +5glvnsztmnfjmkjseventdm4five +pvnnqrqvftrbcvnnthreenine5 +mgscxxlp3eight +53eighteight +two1oneqlcdkbddfour +jbll3 +8threeseven5tmtrgdhqxd +8twonine6s1 +91seven5pmqrjlhqrtzs +jj3sevensix4482 +jeightwo7lk4three +zchchxmsctzffivefournine9sqhqkgfour +72xct1 +vnsxvsqkhpfvgdseven23gzcmltzgone +xzjqhcvsix1fivecjtxnfivekmvjdc +zdfourgjlhtwo24d5klkpdgqbz +7sdzzdbrxbtonerjcmknnql4dfzqccvqt +tncqzxjq9twofiveqkxdrxrpj894six +dddmkctrzlpfmsszeight8zvbpmpkg +three23ckjhgjc +375jzdhnfcfr19mhsbnplqh +vpbbjlzone5sevenseven33four +onejzfsevenrbskjq1four +seven13one +vcnkfgv979one6zln +rqlxzzbmjb4lmbthreektqsdcfzbmdsfivethreenrxdlkqt +qkoneight8 +5rfourfivenine94fdprsix +onexonelzdh2lcbqpzq6 +six6v +7gtgxqnnine +tsljzhntwo3fourpbjncgmvf3fflvjxp +vfkdone9fivecftvmjdk +xc5three6eight94 +18363one7 +8fiveksshdlfmzhljhcmjrn7kpv5j +xbhmxfhbjnjzmninethree7 +2933mkmdqjcl +6ncvzqxfvgfive +lnine5fivetb4qmfktnqjxs +93187 +5mqninedzkfhbk +two7eightntdbsix298four +sixone3bspxqxggkmkrbcqrhfrxrlgjrlvfl96 +fourfivehqls3nine +threedfklszn2threeqzhh7one +mqmftzglone6kjpgglznhrjz89 +146cvkftscqsevensixnine +nndhdgpd484hxdgjtfsdxxg9 +6mbzckbjphg +eight6jbjtnld2mdjtd +zjtzcqxb736five +jlkdmone8 +gvjnjvmlfvcmvnfb8xcgjcmjqvz1bzcctvsixfzqjlhfkfk6 +vr6onejnjmrrldnsixsix5six +ninembtmtkgbctlfive45cjzzrmgcscfbcgeight +2mdvneightjzgffivefive4 +hmdnbxghxjxt4czshmsfzc +61six18threehrcj +six3five6eightkdfzhxcjkdhq3 +jrhqrqkpd4hsixdsbjdpscclmnnhknqq16 +jflzcxr3three +threefourghvgsktkc93cmjmsgh8one6 +96fivesevenslklhsfmpz +jgkpgfnnbq2pmspdfhsqxfour +g4fourthreerpkdhjhlxlzvnineseven +xkxhkphnkvpdnlncn86srxthree +7sixsevenrfour +5zr72qltsrbdsv +ninervqzdfzqmf6five +8jslpvs73 +ztvlxndlm5twohdhmtrdnhbzdrxb +seven6nine4dpdpvrtrmqvql +jfz1 +5nineeight5onefivecxtqbsdtbthreefour +fourgeight6threeszgseventwo9 +sixfour3 +npl8 +tzjkffsvbjseven5rhmlxonezlx +5dhtpfour +twothreebxtfndvdnine1sixbb9 +five9nineqlzrmtgs5 +9v764nineeight +five4eightlsix6 +3nineeight21 +foureight8btsc +3xgdgtb2 +7threetwonexqk +kkqsix48onefourhlsh8 +onekgtdzgfh2fivenine2onerb +six4zgcnlhmltrxp5xphvtwo9 +eight7cdqggpssix +niner9pzmrbqldkljmgphrrgmdjseven6 +439 +twofoursixrthree5bxppnhqtx +bmpnt3 +fivepkzkzpghrptpksevenseven83two1 +9fiveone8one +fiveseven3lqxghdlskbltrzrstwo +fournine3ninephlghonetwoeightbvmdcconeightq +three2pvklmzqjfh4sixonedrctlsfdfour +three91spjlscscjcxbbpdhrg37 +57qqjpdfppsix1qxrh5mlmncf +4nfone5eight +eightqsix7one +4jtvxfd38hnrmqkbnvfxpp +qmfsspkfour1plmslcrsseventhree +fzckcbfvxbpsix7nine +fzrj4 +4threeqntnineqstzjftnine +tkrh6sixdqflrvtmzmfiveseven9ktmtvprkxhfour +nine4983four +mpllmjrfgv66five3kvhthplrtwo7nkklb +9ngvdjddqbz +5twosix8lbhmzrg +eightsbmcfgm76two4hhc6 +seventwosevenrpm6threeeightwodxs +xkbseventwotwogmkxhpmhm42hvvbfchreight +gcqeightwosix8xdlhrnnbkmsevenqdbrjghz +458ninextfjxvgsq5fltdsk6 +rlgsflhxqd5bdbhclmrthree +twothreemqqbzjn88blvqxbseven +rqrrdrmlfsixfive6 +eight959tzxkgqjd +txdszrn5eight3cqeight1brqr +45122 +jvvslnkdk6qnfzjzvseight55eight +4twoeightgrhhkrvtkrzpfive7seven +three8gsmkpzsmfvf2 +fiveeight5sevenone9twoseven +4seightjjdkdglspz3vg +sevenssrzkspld2 +qnzcvcthrsgjlnzxmxlppjdpnine8seven7 +eight7xhvkrcr +two2tdjdfbqtqxrs119r diff --git a/data/day01_example.txt b/data/day01_example.txt new file mode 100644 index 0000000..04c0903 --- /dev/null +++ b/data/day01_example.txt @@ -0,0 +1 @@ +sevenine1 diff --git a/main.rb b/main.rb new file mode 100644 index 0000000..1b89068 --- /dev/null +++ b/main.rb @@ -0,0 +1,70 @@ +# class Trebuchet +# attr_accessor :input +# DIGITS = %w[zero one two three four five six seven eight nine] +# +# def initialize(input) +# @input = input +# end +# +# def process_line(line) +# line.strip.gsub(/(#{DIGITS.join("|")})/) do |capture| +# case capture +# when "zero" then "0" +# when "one" then "1" +# when "two" then "2" +# when "three" then "3" +# when "four" then "4" +# when "five" then "5" +# when "six" then "6" +# when "seven" then "7" +# when "eight" then "8" +# when "nine" then "9" +# else +# raise! "Unknown digit: #{capture}" +# end +# end +# end +# +# def calibration_value(line) +# line +# .chars +# .select { |char| ('0'..'9').include?(char) } +# .map(&:to_i) +# .then { |chars| (chars[0] * 10) + chars[-1] } +# end +# +# def solve +# @input.lines.lazy +# .map { |line| process_line(line) } +# .map { |line| calibration_value(line) } +# .sum +# end +# end + +data = ARGF.read +# p "SREEDEV: #{Trebuchet.new(data).solve}" + +WORDS = { + 'one' => 1, + 'two' => 2, + 'three' => 3, + 'four' => 4, + 'five' => 5, + 'six' => 6, + 'seven' => 7, + 'eight' => 8, + 'nine' => 9 +} +WORDS_RE = "#{WORDS.keys.join('|')}" + +def parse_digit(d) + WORDS[d] || d.to_i +end + +puts data.each_line.reduce(0) { |sum, line| + line =~ /^.*?(\d|#{WORDS_RE})/ + first_digit = $1 + line =~ /.*(\d|#{WORDS_RE}).*$/ + last_digit = $1 + sum + "#{parse_digit first_digit}#{parse_digit last_digit}".to_i +} diff --git a/src/days/day01.rs b/src/days/day01.rs new file mode 100644 index 0000000..f88cfa0 --- /dev/null +++ b/src/days/day01.rs @@ -0,0 +1,75 @@ +#![allow(unused, unused_imports)] + +use crate::template::Solution; +use anyhow::Result; +use itertools::Itertools; +use regex::{Regex, RegexSet}; +use tap::prelude::*; + +pub struct Day01; + +const DATA: &str = include_str!("../../data/day01.txt"); +const EXAMPLE: &str = include_str!("../../data/day01_example.txt"); + +impl Solution for Day01 { + fn solve_part1(&self) -> Result { + Ok(DATA + .lines() + .map(|line| { + line.trim() + .chars() + .filter(|c| c.is_numeric()) + .map(|c| c.to_digit(10).unwrap()) + .collect::>() + }) + .map(|n| (10 * n.first().unwrap()) + n.last().unwrap()) + .sum::() + .to_string()) + } + + fn solve_part2(&self) -> Result { + let patterns = [ + "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", r"\d", + ] + .into_iter() + .map(|pattern| Regex::new(pattern).unwrap()) + .collect::>(); + + let parse_int = |s: &str| -> u32 { + match s { + "one" => 1, + "two" => 2, + "three" => 3, + "four" => 4, + "five" => 5, + "six" => 6, + "seven" => 7, + "eight" => 8, + "nine" => 9, + "zero" => 0, + x => u32::from_str_radix(x, 10).unwrap(), + } + }; + + Ok(DATA + .lines() + .map(|line| { + patterns + .clone() + .iter() + .flat_map(|pattern| { + pattern + .find_iter(line.trim()) + .map(move |m| (m.start(), m.as_str())) + .collect::>() + }) + .into_iter() + .sorted_by(|(i1, _), (i2, _)| i1.cmp(i2)) + .map(|(_, s)| parse_int(s)) + .collect::>() + }) + .map(|n| (n.first().unwrap() * 10) + n.last().unwrap()) + .sum::() + .to_string()) + } +} diff --git a/src/days/mod.rs b/src/days/mod.rs new file mode 100644 index 0000000..52056b5 --- /dev/null +++ b/src/days/mod.rs @@ -0,0 +1,10 @@ +pub mod day01; + +use crate::template::Solution; + +pub fn fetch(day: u32) -> impl Solution { + match day { + 1 => day01::Day01, + _ => panic!("Day {} not implemented", day), + } +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..86c41d2 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,16 @@ +mod days; +mod template; + +use std::env::args; +use anyhow::Result; +use template::Solution; + +fn main() -> Result<()> { + let day = args().nth(1).expect("[ERR] Solution Day Not Specified!").parse::()?; + let solver = days::fetch(day); + + println!("Solution for Day {}", day); + println!("Part 1: {}", solver.solve_part1()?); + println!("Part 2: {}", solver.solve_part2()?); + Ok(()) +} diff --git a/src/template.rs b/src/template.rs new file mode 100644 index 0000000..5fa8390 --- /dev/null +++ b/src/template.rs @@ -0,0 +1,6 @@ +use anyhow::Result; + +pub trait Solution { + fn solve_part1(&self) -> Result; + fn solve_part2(&self) -> Result; +} From 4b5cd8267b95fcb6c60ec3cdf8c6bf4e7dc4b1ea Mon Sep 17 00:00:00 2001 From: sreedev Date: Sun, 3 Dec 2023 00:30:55 -0500 Subject: [PATCH 2/2] initial commit --- README.md | 9 ++ data/day01_example.txt | 1 - data/day02.txt | 100 ++++++++++++++ data/day03.txt | 0 data/day04.txt | 223 ++++++++++++++++++++++++++++++++ main.rb | 70 ---------- src/days/day01.rs | 75 ----------- src/days/mod.rs | 10 -- src/main.rs | 53 ++++++-- src/solutions/cube_conundrum.rs | 183 ++++++++++++++++++++++++++ src/solutions/mod.rs | 3 + src/solutions/scratchcards.rs | 116 +++++++++++++++++ src/solutions/trebuchet.rs | 88 +++++++++++++ src/template.rs | 6 - 14 files changed, 765 insertions(+), 172 deletions(-) create mode 100644 README.md delete mode 100644 data/day01_example.txt create mode 100644 data/day02.txt create mode 100644 data/day03.txt create mode 100644 data/day04.txt delete mode 100644 main.rb delete mode 100644 src/days/day01.rs delete mode 100644 src/days/mod.rs create mode 100644 src/solutions/cube_conundrum.rs create mode 100644 src/solutions/mod.rs create mode 100644 src/solutions/scratchcards.rs create mode 100644 src/solutions/trebuchet.rs delete mode 100644 src/template.rs diff --git a/README.md b/README.md new file mode 100644 index 0000000..a4ba895 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Advent of Code 2023 + +## Usage + +```bash +git clone https://github.com/sreedevk/advent-of-code +cd advent-of-code +cargo run -r +``` diff --git a/data/day01_example.txt b/data/day01_example.txt deleted file mode 100644 index 04c0903..0000000 --- a/data/day01_example.txt +++ /dev/null @@ -1 +0,0 @@ -sevenine1 diff --git a/data/day02.txt b/data/day02.txt new file mode 100644 index 0000000..8a9d45e --- /dev/null +++ b/data/day02.txt @@ -0,0 +1,100 @@ +Game 1: 5 red, 1 green, 2 blue; 2 green, 8 blue, 6 red; 8 red, 3 blue, 2 green; 6 red, 1 green, 19 blue; 1 red, 17 blue +Game 2: 4 red, 5 green, 2 blue; 7 red, 14 green, 3 blue; 2 green, 5 blue, 11 red; 10 blue, 3 green; 9 green, 6 blue, 13 red; 7 red, 5 green, 9 blue +Game 3: 9 green, 18 blue, 1 red; 6 red, 10 blue, 5 green; 4 blue, 4 red, 15 green +Game 4: 1 red, 13 green; 10 green, 2 red; 3 red, 4 green, 2 blue +Game 5: 4 red, 2 green, 1 blue; 4 red, 9 blue; 4 green, 1 red, 6 blue; 3 blue, 2 green, 6 red; 5 red, 4 green, 1 blue +Game 6: 6 red, 3 green, 6 blue; 3 green, 5 blue, 12 red; 3 green, 9 blue, 3 red; 13 red, 8 blue +Game 7: 3 blue, 1 red; 3 blue, 10 green; 4 green, 5 blue +Game 8: 11 green, 4 blue; 4 red, 4 blue, 11 green; 4 green, 3 blue; 1 blue, 6 red, 12 green +Game 9: 1 blue, 4 green, 1 red; 5 green, 3 blue; 9 green, 4 blue; 3 blue, 1 red, 10 green; 6 green, 2 blue +Game 10: 5 green, 6 red, 7 blue; 7 green, 5 blue, 5 red; 8 red, 6 blue, 8 green; 2 blue, 8 green, 6 red; 6 blue, 8 red, 4 green +Game 11: 1 blue, 10 red, 10 green; 11 green, 2 blue, 16 red; 4 blue, 7 red, 14 green +Game 12: 8 green, 9 red, 12 blue; 2 green, 4 blue, 7 red; 1 red, 9 blue, 7 green; 8 green, 2 red, 10 blue; 1 green, 5 red, 5 blue; 6 green, 5 red, 1 blue +Game 13: 3 green, 1 blue, 6 red; 1 green, 10 red; 1 blue, 15 red, 2 green +Game 14: 2 green, 6 blue; 1 green, 2 blue, 2 red; 5 blue, 1 green, 2 red; 4 green, 5 blue, 4 red; 4 red, 5 green, 4 blue; 1 red, 5 green, 6 blue +Game 15: 12 green, 7 blue; 19 green; 11 blue, 16 green, 1 red; 1 red, 2 green, 3 blue; 8 blue, 1 red, 19 green; 14 blue, 3 green, 1 red +Game 16: 2 green, 13 blue, 3 red; 5 red, 12 blue; 6 blue, 8 red; 4 red, 1 green, 4 blue; 1 green, 15 blue; 4 blue, 2 green, 1 red +Game 17: 11 blue, 7 green, 2 red; 12 red, 8 green, 8 blue; 2 red, 6 blue, 6 green +Game 18: 1 green, 2 blue; 2 green, 1 blue, 4 red; 3 green, 16 red; 2 red, 3 green +Game 19: 11 blue, 3 green, 3 red; 11 blue, 5 green; 3 green, 3 red, 8 blue +Game 20: 1 green, 6 blue; 4 blue, 6 green; 1 red, 10 green; 12 green; 5 blue, 1 red, 4 green; 1 green, 5 blue +Game 21: 7 green, 3 blue; 1 red, 5 blue, 6 green; 1 red, 11 green; 8 blue, 1 red, 10 green; 1 red, 5 blue, 3 green +Game 22: 3 red, 1 blue; 3 green, 1 red, 1 blue; 7 green, 2 blue +Game 23: 12 green, 1 red, 2 blue; 10 blue, 1 green, 1 red; 9 blue, 8 green +Game 24: 5 blue, 6 green, 6 red; 3 blue, 1 red; 8 blue, 2 green, 12 red; 1 green, 2 blue, 14 red; 2 blue, 5 green, 15 red +Game 25: 6 red, 13 green; 1 blue, 1 red, 3 green; 1 blue, 12 red, 10 green +Game 26: 16 red, 2 blue, 7 green; 1 blue, 7 green, 8 red; 1 blue, 3 red, 9 green +Game 27: 4 blue, 15 green; 6 green, 2 blue, 1 red; 9 blue, 10 green, 4 red; 3 red, 3 green, 6 blue; 11 blue, 7 red, 11 green; 6 red, 5 green, 13 blue +Game 28: 10 blue, 8 red, 10 green; 4 blue, 11 red, 6 green; 8 red, 9 green, 10 blue; 4 red, 9 green, 2 blue +Game 29: 4 red, 9 green, 7 blue; 10 blue, 6 green, 4 red; 1 green, 2 red, 10 blue; 3 green, 9 blue +Game 30: 6 blue, 9 green, 10 red; 6 blue, 4 red; 5 green, 2 blue; 5 green, 2 red, 2 blue; 6 blue, 8 green +Game 31: 7 blue; 2 green, 6 blue; 1 red, 9 blue, 5 green +Game 32: 8 blue, 2 red, 4 green; 6 red, 2 blue, 1 green; 14 blue, 8 green, 8 red +Game 33: 1 green, 1 red, 1 blue; 2 blue, 1 green, 12 red; 1 green, 1 red; 1 blue, 2 red, 1 green; 7 red, 2 green, 2 blue +Game 34: 3 blue; 2 blue; 10 red, 1 blue, 1 green; 5 red; 1 green, 1 red, 1 blue; 1 green, 2 red +Game 35: 10 green, 1 red, 16 blue; 4 red, 10 blue, 9 green; 1 green, 7 blue, 5 red +Game 36: 1 blue, 3 red, 16 green; 1 blue, 3 red, 1 green; 9 green, 3 red, 8 blue; 14 green, 6 blue, 3 red; 3 red, 12 green, 4 blue +Game 37: 11 red, 3 blue; 15 red, 8 blue, 6 green; 6 green, 19 red, 11 blue; 1 green, 4 blue, 14 red; 12 blue, 5 red, 8 green; 4 blue, 9 red +Game 38: 4 green, 10 blue, 3 red; 1 green, 1 red, 11 blue; 2 red, 12 blue +Game 39: 3 green, 1 red, 4 blue; 9 green, 1 red, 18 blue; 4 red, 4 green, 17 blue; 4 red, 10 blue, 14 green +Game 40: 5 red, 4 green, 8 blue; 1 green, 9 blue; 9 blue, 3 red, 6 green; 8 red, 9 blue, 9 green +Game 41: 1 blue, 9 red, 3 green; 9 red, 10 green, 15 blue; 13 red, 8 green, 8 blue; 19 red, 6 blue, 2 green; 7 green, 5 blue, 12 red +Game 42: 15 blue; 1 red, 1 green, 9 blue; 6 blue, 1 red; 1 green, 4 blue +Game 43: 1 green, 8 blue, 2 red; 1 red, 1 green, 6 blue; 7 blue; 7 blue, 3 red, 1 green; 2 red, 5 blue +Game 44: 7 green, 11 blue, 6 red; 9 green, 8 blue; 4 red, 15 green; 12 green, 14 blue, 8 red +Game 45: 4 red, 4 green; 14 green; 4 green, 2 blue; 1 blue, 12 red, 5 green; 3 red, 6 green; 11 red, 1 green +Game 46: 2 blue, 1 green, 1 red; 1 blue, 6 green, 1 red; 2 blue, 1 red, 1 green; 5 green +Game 47: 1 blue, 1 red; 14 red; 3 green, 2 blue, 17 red; 4 green +Game 48: 1 red, 11 green, 2 blue; 1 red, 11 green, 6 blue; 13 green, 1 blue, 3 red; 3 green, 4 red, 6 blue; 12 green, 5 blue, 1 red; 2 red, 4 green, 4 blue +Game 49: 5 blue, 3 green; 2 green, 8 blue; 5 blue; 4 green, 5 blue, 1 red; 4 green, 7 blue; 1 green, 3 blue +Game 50: 3 red, 5 green, 2 blue; 9 green, 7 red, 4 blue; 3 blue, 6 red, 13 green; 6 blue, 8 red, 9 green +Game 51: 2 green, 11 red, 7 blue; 5 blue, 13 red; 1 green, 2 blue, 3 red; 6 blue, 8 red; 11 red, 2 green, 4 blue +Game 52: 15 blue, 1 green, 4 red; 4 green, 10 blue, 2 red; 6 red, 18 blue, 1 green +Game 53: 2 red, 10 green, 6 blue; 4 green, 3 blue, 3 red; 17 blue, 19 green, 5 red; 6 blue, 6 green, 9 red; 5 blue, 17 green, 7 red +Game 54: 9 blue, 8 red, 6 green; 6 red, 8 green; 1 green, 6 blue, 1 red; 5 red, 4 green, 9 blue; 5 blue, 2 green, 5 red +Game 55: 8 blue, 8 red, 10 green; 3 red, 4 green, 9 blue; 4 red, 3 green, 7 blue +Game 56: 3 red, 6 green, 1 blue; 5 green, 1 blue, 1 red; 1 red, 2 green; 10 green +Game 57: 1 green, 4 blue, 12 red; 17 red, 7 blue, 10 green; 17 red, 5 blue, 3 green +Game 58: 1 red, 5 green, 14 blue; 5 green, 6 red, 7 blue; 4 blue, 8 green; 3 red, 9 green, 7 blue; 8 blue, 8 green, 6 red; 8 green, 7 blue, 5 red +Game 59: 3 green, 5 red; 2 red, 13 green, 1 blue; 19 green, 1 red, 1 blue; 19 green, 1 blue; 18 green, 1 blue, 5 red; 6 red, 9 green +Game 60: 5 red, 1 green, 6 blue; 8 red, 6 blue, 14 green; 8 green, 8 red, 3 blue; 2 blue, 5 green, 3 red; 4 blue, 1 red, 14 green +Game 61: 7 red, 4 blue, 2 green; 2 green, 8 red, 9 blue; 5 blue, 2 green, 8 red; 8 red, 1 green, 8 blue +Game 62: 6 red, 3 blue; 1 blue, 2 red, 2 green; 3 red, 1 blue +Game 63: 2 red, 1 blue, 2 green; 1 blue, 1 green; 2 green, 4 red; 3 green, 2 red; 2 green +Game 64: 5 green, 6 blue, 7 red; 2 red, 5 green, 8 blue; 7 green, 9 blue, 1 red; 4 green, 5 blue; 19 blue, 5 green, 13 red +Game 65: 3 red, 1 blue, 4 green; 5 green, 3 blue; 9 green, 1 red, 10 blue +Game 66: 6 red, 13 green, 2 blue; 2 blue, 5 red, 9 green; 18 red; 2 green, 1 blue, 1 red; 19 red, 10 green; 1 blue, 15 green, 13 red +Game 67: 8 blue, 3 red; 1 red, 12 green, 7 blue; 4 red, 6 blue, 5 green; 11 green, 10 blue, 7 red; 5 red, 9 green, 14 blue +Game 68: 1 red, 3 green; 10 blue, 1 red, 3 green; 1 green, 17 blue; 16 blue; 6 blue +Game 69: 11 green, 5 blue, 8 red; 2 red, 5 green, 1 blue; 10 green, 2 blue; 11 green, 7 red, 4 blue +Game 70: 2 green, 1 blue, 13 red; 16 green, 20 red, 4 blue; 10 red +Game 71: 10 blue, 6 green, 7 red; 5 red, 5 green, 2 blue; 7 green, 4 red, 5 blue; 1 red, 8 blue; 5 red, 1 blue, 8 green; 5 blue, 1 red, 5 green +Game 72: 2 red, 4 green; 2 green, 2 red, 1 blue; 3 blue, 3 green, 2 red; 2 green +Game 73: 5 red, 19 blue; 12 blue, 4 green, 16 red; 14 red, 11 blue, 1 green +Game 74: 2 red, 1 green, 9 blue; 5 blue, 1 green, 2 red; 2 green, 1 red, 13 blue; 2 green, 1 red, 3 blue +Game 75: 7 blue, 1 red, 18 green; 17 green, 8 red, 13 blue; 15 blue, 4 red +Game 76: 1 green, 12 red, 13 blue; 5 green, 11 blue, 12 red; 10 red, 1 green; 10 red, 2 blue; 5 red, 2 green; 2 green, 17 blue, 3 red +Game 77: 2 blue, 1 red, 1 green; 7 red; 7 red, 3 blue, 2 green; 10 green, 1 red; 3 red, 7 blue, 6 green +Game 78: 10 red, 2 blue, 2 green; 1 blue, 6 red, 4 green; 12 red, 8 green; 6 green, 8 red, 7 blue; 11 green, 5 blue, 6 red +Game 79: 7 green, 5 red; 6 blue, 2 green, 15 red; 9 blue, 2 red, 12 green; 1 blue, 4 red, 10 green; 4 blue, 12 green, 11 red; 5 green, 3 red, 5 blue +Game 80: 1 green, 13 blue, 2 red; 2 red, 1 green, 13 blue; 7 blue, 8 red +Game 81: 1 green, 2 red, 11 blue; 5 red, 3 blue; 1 green, 1 red; 14 red, 1 green +Game 82: 12 red, 3 blue, 8 green; 15 red, 9 blue, 8 green; 6 blue, 13 red, 8 green +Game 83: 4 blue, 6 green, 3 red; 7 red, 2 blue, 9 green; 6 green, 3 red +Game 84: 4 green; 3 red, 3 blue; 4 red, 1 blue, 2 green; 1 red, 5 green, 5 blue; 1 red, 5 blue, 3 green +Game 85: 3 red, 4 blue, 15 green; 9 green; 2 red, 4 blue, 6 green; 1 red, 4 green, 7 blue; 3 red, 10 green, 9 blue; 1 red, 13 green, 3 blue +Game 86: 8 red, 6 blue; 3 blue, 3 green, 15 red; 12 red, 6 green, 13 blue; 15 red, 6 green, 10 blue +Game 87: 4 red, 4 blue; 6 red, 2 blue; 5 blue, 3 green; 4 blue, 2 red +Game 88: 4 blue, 7 green; 2 blue, 7 green; 6 green, 4 blue; 1 red, 1 blue, 2 green; 11 green, 3 blue +Game 89: 1 blue, 12 green, 11 red; 3 red, 7 blue, 1 green; 7 green, 8 red; 6 blue, 2 green, 3 red; 7 red, 8 green; 11 blue, 5 red, 12 green +Game 90: 1 green, 12 red, 17 blue; 14 red, 17 blue, 9 green; 6 green, 9 red, 11 blue +Game 91: 3 green, 14 blue; 2 blue, 2 green, 6 red; 1 red, 11 blue, 1 green; 3 green, 4 red, 20 blue; 6 red, 2 green, 3 blue; 10 blue, 12 red +Game 92: 6 blue, 7 red; 2 blue, 4 red, 1 green; 4 red, 1 green, 3 blue; 2 red, 5 blue; 8 red, 6 blue; 1 green, 2 blue, 1 red +Game 93: 4 blue, 1 green, 4 red; 8 red, 4 green, 4 blue; 2 blue, 9 red; 1 blue, 4 red; 4 blue, 2 green, 11 red +Game 94: 5 blue, 1 green, 7 red; 1 green, 11 blue, 1 red; 1 green, 15 blue, 4 red +Game 95: 1 red, 3 blue; 1 red, 1 green, 8 blue; 3 red, 1 green, 3 blue; 3 red, 6 blue; 6 blue +Game 96: 4 green, 1 blue; 7 green, 3 red; 2 blue, 9 red, 16 green; 3 blue, 4 red, 11 green +Game 97: 6 green, 8 blue; 1 blue, 1 green; 3 green, 4 blue; 8 blue, 5 green, 2 red +Game 98: 18 blue, 6 green; 11 green, 3 blue, 7 red; 18 blue, 3 red, 7 green; 5 red, 5 green; 8 blue, 2 green, 11 red +Game 99: 3 red, 2 green, 3 blue; 1 red, 4 green, 1 blue; 2 green, 18 red; 15 red, 1 blue; 2 blue, 9 red, 2 green; 17 red, 3 blue, 4 green +Game 100: 9 blue, 8 red, 16 green; 3 red, 7 green, 8 blue; 1 green, 3 red, 12 blue; 3 green, 14 blue diff --git a/data/day03.txt b/data/day03.txt new file mode 100644 index 0000000..e69de29 diff --git a/data/day04.txt b/data/day04.txt new file mode 100644 index 0000000..4c0c0ea --- /dev/null +++ b/data/day04.txt @@ -0,0 +1,223 @@ +Card 1: 5 37 16 3 56 11 23 72 7 8 | 3 79 35 45 72 69 15 14 48 88 96 37 11 75 83 56 23 7 16 50 21 91 32 97 17 +Card 2: 1 45 93 96 65 88 78 15 27 26 | 5 84 62 63 45 61 1 80 88 77 40 51 73 21 32 98 74 59 97 9 15 71 25 43 23 +Card 3: 9 99 34 44 37 16 67 43 41 83 | 43 41 5 69 90 50 34 94 86 59 98 16 99 28 44 37 47 57 7 14 83 67 76 9 77 +Card 4: 45 99 64 82 57 9 56 17 78 7 | 75 56 30 88 64 1 98 27 9 57 7 6 77 44 17 78 82 99 16 91 76 94 63 87 45 +Card 5: 76 80 42 88 26 56 79 63 6 37 | 16 4 40 34 46 76 67 69 1 54 5 55 59 24 78 29 26 9 51 44 92 41 63 88 65 +Card 6: 59 23 88 38 49 16 24 18 22 89 | 52 25 88 27 23 79 22 84 72 80 39 17 49 96 56 60 44 45 16 63 78 38 19 5 43 +Card 7: 81 1 37 6 20 76 3 31 93 83 | 74 32 25 76 43 87 52 93 47 85 83 31 17 72 6 99 1 36 20 81 3 69 78 44 37 +Card 8: 74 73 65 29 66 47 43 11 24 38 | 5 3 1 88 29 11 49 67 47 33 31 61 63 75 84 35 18 71 66 92 81 97 8 9 85 +Card 9: 67 68 8 74 17 11 28 47 96 2 | 85 7 37 33 15 18 91 96 4 67 16 47 28 26 80 52 17 97 68 8 11 79 2 46 74 +Card 10: 91 22 85 35 47 26 99 39 72 38 | 5 7 12 14 62 93 61 56 82 4 1 51 86 36 43 29 50 75 68 25 98 77 74 64 24 +Card 11: 4 53 44 83 23 84 40 55 69 82 | 24 48 11 37 60 76 41 29 58 39 45 88 95 67 49 28 36 35 86 33 18 63 51 19 93 +Card 12: 40 45 87 58 72 59 89 55 20 91 | 7 62 2 91 59 78 4 44 25 24 57 94 79 75 51 54 55 90 83 30 68 47 3 69 26 +Card 13: 92 58 35 96 84 62 31 65 95 5 | 22 52 84 98 62 31 75 7 12 78 51 91 37 58 46 85 21 61 95 49 36 5 79 92 4 +Card 14: 75 37 41 53 12 77 97 6 54 29 | 52 65 46 94 20 6 76 75 70 83 29 93 64 1 12 58 89 49 26 16 82 85 74 61 41 +Card 15: 20 88 22 99 28 87 16 78 70 71 | 20 89 56 27 61 32 53 22 78 3 54 28 70 64 33 24 23 17 5 47 55 16 21 88 9 +Card 16: 42 17 35 68 4 78 73 15 88 61 | 42 88 20 57 40 8 71 92 78 45 3 15 17 67 52 43 84 68 4 18 53 79 6 35 24 +Card 17: 19 25 13 51 36 71 56 65 24 50 | 13 82 73 37 83 78 48 88 87 59 97 75 18 53 44 17 84 34 79 95 69 66 76 28 57 +Card 18: 80 99 40 59 75 82 25 70 87 92 | 90 32 27 30 95 33 12 31 78 75 26 44 87 83 39 81 55 43 76 22 61 25 99 69 59 +Card 19: 88 78 95 67 22 4 50 39 58 72 | 74 6 10 21 77 81 53 86 71 56 37 48 23 83 87 55 80 34 89 16 65 8 28 92 97 +Card 20: 54 40 10 45 26 75 88 67 60 3 | 59 69 71 36 95 53 76 80 68 25 96 61 39 65 13 6 49 46 92 28 20 27 7 83 44 +Card 21: 70 48 22 94 63 45 25 85 79 24 | 9 4 82 74 14 65 23 20 10 50 48 81 92 16 27 47 60 22 59 55 2 15 62 41 38 +Card 22: 21 55 81 79 16 64 96 39 56 72 | 28 67 20 18 3 25 29 46 48 83 14 5 64 62 8 45 32 89 85 80 2 55 65 9 61 +Card 23: 17 53 27 13 18 58 81 31 82 35 | 54 78 6 49 75 52 4 19 68 94 80 88 99 89 60 5 83 96 33 23 95 77 27 57 21 +Card 24: 1 12 33 55 68 89 91 43 73 16 | 79 93 14 84 42 80 37 86 44 90 39 81 26 72 46 35 59 28 6 76 19 58 95 7 92 +Card 25: 2 90 83 88 35 17 95 5 9 72 | 72 37 53 51 95 26 16 88 5 66 76 2 84 4 15 22 93 47 6 82 28 9 90 83 23 +Card 26: 63 15 58 95 96 67 27 48 97 40 | 74 96 18 57 14 54 78 40 76 39 10 27 8 87 15 26 66 63 56 49 89 97 95 38 13 +Card 27: 34 21 92 88 66 44 63 2 96 81 | 44 26 88 96 34 51 73 74 72 2 54 60 63 79 62 66 58 70 81 16 7 98 21 92 10 +Card 28: 73 23 8 50 57 31 9 76 89 87 | 76 50 81 44 57 8 18 89 99 83 78 64 72 47 24 14 2 87 56 10 31 13 96 74 68 +Card 29: 52 25 92 30 12 95 38 77 51 36 | 5 7 87 85 70 33 57 10 50 44 61 39 96 65 93 60 79 94 43 52 37 54 6 32 62 +Card 30: 96 10 11 51 58 20 70 91 80 85 | 24 96 98 91 51 11 57 85 95 20 84 80 10 62 6 5 70 34 58 29 42 40 59 55 32 +Card 31: 55 36 29 98 89 58 82 93 94 22 | 9 3 93 56 97 41 15 94 63 13 42 73 55 20 18 98 89 22 77 45 53 12 44 29 36 +Card 32: 92 85 9 6 65 87 59 12 71 55 | 85 96 87 36 93 92 55 88 74 60 71 6 3 65 82 9 94 19 84 59 12 98 28 37 18 +Card 33: 90 3 61 94 8 12 62 77 60 14 | 96 62 81 59 3 8 60 7 90 61 23 12 70 5 51 99 71 14 58 63 94 85 50 57 77 +Card 34: 20 4 44 50 53 19 88 29 68 56 | 9 44 22 56 53 4 50 40 88 29 80 5 1 30 19 20 49 68 63 47 28 92 93 2 83 +Card 35: 26 11 96 48 72 39 19 10 12 70 | 14 56 84 85 30 67 29 90 2 52 20 83 93 73 27 79 82 78 63 3 50 43 6 15 32 +Card 36: 40 77 87 9 24 54 71 97 76 32 | 8 93 19 12 66 97 75 9 76 1 71 11 32 15 54 51 83 50 87 72 24 7 77 47 5 +Card 37: 79 95 36 38 99 60 29 58 88 81 | 38 60 95 50 22 10 87 59 99 88 67 89 15 39 13 12 44 51 34 86 65 90 2 24 58 +Card 38: 33 8 40 69 4 57 79 56 93 9 | 48 11 64 83 95 19 70 36 99 16 30 91 18 4 12 43 38 1 41 44 17 72 98 2 22 +Card 39: 75 80 39 25 90 11 20 46 99 17 | 83 74 29 75 61 33 95 51 80 13 76 46 39 8 44 47 49 6 17 22 2 10 85 66 62 +Card 40: 76 94 24 53 72 92 28 10 34 39 | 85 69 8 81 48 44 27 42 73 83 25 74 28 66 41 98 95 39 52 82 18 67 55 1 26 +Card 41: 92 97 13 88 24 17 54 80 75 79 | 14 41 81 43 39 6 85 56 10 88 27 86 58 7 80 98 97 61 75 93 62 26 59 73 91 +Card 42: 15 42 98 99 10 40 58 74 11 97 | 53 52 57 74 25 36 42 86 97 88 43 15 56 99 83 24 19 60 61 10 68 5 18 98 3 +Card 43: 14 74 56 87 96 66 94 90 40 93 | 10 87 93 57 98 15 36 17 70 12 1 11 33 32 84 65 41 74 83 25 63 77 56 30 72 +Card 44: 24 21 66 99 96 41 84 97 75 78 | 20 78 22 89 71 6 60 35 58 36 18 8 39 4 40 81 34 32 77 26 14 42 53 48 13 +Card 45: 36 15 61 12 68 95 60 90 65 84 | 74 20 90 4 37 11 53 25 34 59 15 45 84 91 58 63 7 27 97 93 73 3 31 65 30 +Card 46: 72 54 37 45 89 8 67 85 39 62 | 69 57 83 24 93 54 33 3 17 13 8 51 98 7 48 11 28 41 19 38 40 60 62 34 84 +Card 47: 29 2 51 82 16 25 46 50 28 6 | 42 24 1 43 87 36 94 74 21 98 15 83 37 50 10 57 62 17 96 33 40 73 93 39 59 +Card 48: 80 77 65 41 73 5 88 37 16 47 | 79 48 55 83 93 62 61 95 66 26 7 32 33 21 14 3 43 36 90 44 15 11 37 4 71 +Card 49: 4 33 50 26 90 86 63 6 81 42 | 28 14 2 29 22 44 24 36 53 54 17 45 78 68 60 93 31 59 85 57 3 16 64 41 84 +Card 50: 65 54 84 16 46 57 47 6 85 81 | 6 69 63 3 91 95 15 34 71 76 81 24 64 94 57 22 19 59 99 1 54 83 65 16 88 +Card 51: 83 48 81 82 55 92 25 76 39 56 | 35 81 96 94 82 25 85 11 39 55 56 76 59 62 84 48 58 37 78 2 27 92 83 69 73 +Card 52: 47 56 99 64 59 13 25 60 81 93 | 61 19 25 60 41 28 67 49 47 13 36 5 56 81 66 23 52 30 59 99 39 6 93 84 64 +Card 53: 59 56 12 96 92 49 1 66 20 2 | 65 66 96 92 56 20 29 59 27 1 97 17 54 53 94 82 75 39 7 34 2 60 49 12 93 +Card 54: 4 29 30 48 99 56 60 27 3 95 | 26 17 59 35 73 66 58 57 2 64 76 67 34 65 10 12 6 53 97 63 19 20 70 86 11 +Card 55: 84 70 37 64 2 43 91 69 5 93 | 5 53 37 46 25 16 45 70 84 34 91 20 3 62 55 64 10 43 94 93 69 42 2 90 40 +Card 56: 57 36 17 21 72 9 39 77 52 53 | 55 47 59 52 85 41 24 74 81 53 42 6 58 51 17 34 54 72 73 2 70 67 10 71 79 +Card 57: 75 15 56 65 21 30 43 83 90 59 | 85 9 83 61 70 69 86 51 47 32 96 23 16 7 67 72 99 13 12 93 91 33 3 48 2 +Card 58: 77 49 71 63 66 72 97 87 24 95 | 4 12 97 98 24 46 72 14 23 71 87 60 89 73 82 20 9 49 27 85 95 75 77 79 8 +Card 59: 81 29 18 22 70 93 59 58 90 31 | 19 90 76 62 15 78 71 52 75 44 4 88 61 73 10 14 25 27 94 50 77 66 89 55 63 +Card 60: 97 95 5 56 63 81 94 7 16 17 | 29 68 83 4 10 69 79 89 47 30 97 58 85 44 14 32 50 78 99 81 52 6 46 71 51 +Card 61: 99 45 17 68 39 48 25 20 38 55 | 23 95 90 64 9 8 71 89 1 31 42 50 74 77 49 33 30 92 94 81 6 61 36 96 68 +Card 62: 64 96 55 52 56 74 28 26 57 27 | 11 33 29 40 70 90 4 64 68 39 35 18 42 85 58 83 23 52 48 6 88 13 74 41 69 +Card 63: 36 80 16 61 89 50 11 2 57 96 | 96 13 35 91 62 81 58 90 55 57 99 73 32 76 61 94 60 89 83 27 48 16 70 86 42 +Card 64: 99 33 85 46 90 54 11 61 76 27 | 43 6 90 87 59 71 74 4 41 82 10 64 97 17 75 29 95 63 91 7 47 12 77 25 32 +Card 65: 30 99 44 66 5 89 8 58 16 78 | 79 36 80 3 24 81 48 22 29 26 33 19 57 6 28 95 86 94 49 51 98 10 55 8 18 +Card 66: 98 95 22 68 25 89 6 88 90 35 | 88 18 75 81 65 60 39 77 47 53 85 33 40 44 8 27 66 82 48 63 64 97 24 49 29 +Card 67: 63 96 55 9 23 17 42 66 12 56 | 14 76 60 70 78 58 42 52 25 18 94 86 31 79 68 57 73 47 51 89 32 12 63 29 28 +Card 68: 75 57 84 29 91 22 36 69 25 32 | 78 28 96 12 42 1 44 54 60 73 48 16 41 23 37 83 31 64 21 92 86 79 33 24 14 +Card 69: 51 7 82 59 78 34 39 42 19 24 | 50 9 41 82 94 46 25 31 32 88 92 75 55 63 69 56 98 65 86 93 79 54 10 43 28 +Card 70: 4 74 46 53 28 9 14 63 73 21 | 2 36 71 91 42 66 7 77 84 86 49 94 16 83 82 96 25 70 58 53 78 29 23 17 13 +Card 71: 21 39 77 83 14 12 5 88 97 47 | 43 38 57 91 3 81 90 30 25 33 84 80 58 10 27 20 28 73 6 54 13 65 31 70 36 +Card 72: 68 33 8 24 59 58 65 57 36 38 | 2 95 17 38 58 24 45 31 36 33 59 83 32 6 37 11 67 78 88 48 57 68 80 26 8 +Card 73: 56 6 28 51 83 64 35 17 60 87 | 51 93 56 43 30 17 67 61 35 97 88 83 64 24 40 6 68 84 87 75 46 95 60 28 89 +Card 74: 82 44 97 85 88 42 61 56 1 40 | 56 12 66 67 44 22 97 40 29 43 24 1 50 42 78 79 7 80 82 88 61 85 89 38 41 +Card 75: 83 90 15 43 93 50 8 37 17 89 | 12 89 90 50 91 83 15 37 94 7 10 88 31 14 17 19 43 3 59 71 46 93 63 52 8 +Card 76: 14 38 56 48 40 2 43 42 44 75 | 8 55 65 79 87 30 95 89 3 39 22 6 99 74 88 32 98 91 9 70 59 92 78 66 24 +Card 77: 36 27 48 94 84 77 75 6 70 22 | 75 48 99 5 45 87 63 6 49 31 94 22 29 37 27 77 50 36 23 80 10 84 70 97 93 +Card 78: 95 18 51 10 43 90 23 99 56 68 | 5 94 49 92 22 87 47 36 62 30 7 32 12 64 31 25 41 73 39 34 14 27 80 50 91 +Card 79: 17 75 70 51 40 42 84 30 38 15 | 17 86 42 15 75 88 70 84 29 51 39 4 59 65 80 1 40 74 92 46 38 71 64 61 30 +Card 80: 36 16 59 77 82 72 87 98 99 32 | 76 9 70 12 97 75 20 30 10 54 74 44 93 22 4 43 32 33 18 17 82 29 28 55 21 +Card 81: 97 82 92 35 20 71 15 78 98 6 | 82 71 43 68 70 20 31 55 90 67 19 24 81 60 15 8 88 18 27 76 63 78 47 91 22 +Card 82: 42 40 60 2 95 56 10 94 14 99 | 75 89 27 40 35 33 42 79 38 14 94 71 25 85 95 56 82 92 60 99 58 65 2 13 57 +Card 83: 60 31 59 4 63 39 23 73 56 24 | 31 23 56 19 59 4 64 42 85 1 34 60 72 35 24 55 16 37 78 52 7 39 2 73 63 +Card 84: 13 89 46 61 4 86 94 47 22 63 | 79 7 67 19 72 77 54 15 29 92 65 17 75 70 91 78 26 63 53 21 58 51 43 23 39 +Card 85: 38 1 35 22 60 19 24 82 99 43 | 21 82 99 56 60 64 44 24 1 83 23 27 40 35 55 47 43 87 85 12 22 39 4 25 63 +Card 86: 32 43 80 27 57 48 65 11 67 90 | 22 67 28 23 36 53 80 39 32 45 43 11 95 2 57 26 40 99 33 27 82 50 48 84 91 +Card 87: 44 76 92 13 51 25 35 15 81 61 | 76 44 16 1 41 35 6 84 67 13 5 30 51 34 8 7 55 15 73 90 60 21 50 25 81 +Card 88: 40 83 37 66 78 56 26 32 38 11 | 82 58 33 2 24 51 79 56 44 29 90 94 11 40 12 83 37 16 66 96 72 10 34 77 65 +Card 89: 75 60 87 69 50 48 91 72 66 64 | 47 30 61 11 17 88 62 71 3 9 67 93 46 13 21 86 23 18 37 4 89 92 51 54 52 +Card 90: 44 58 88 53 37 43 33 74 50 15 | 21 76 69 8 87 20 44 74 84 31 52 63 23 91 29 82 42 57 83 5 11 56 34 97 85 +Card 91: 61 41 52 39 83 93 33 67 11 6 | 49 13 76 15 98 53 62 19 16 14 1 24 66 27 58 79 23 54 77 63 46 25 57 33 50 +Card 92: 10 29 99 80 36 48 74 88 28 5 | 86 22 93 19 24 29 87 92 58 96 10 68 72 75 35 60 26 37 67 79 3 62 63 18 20 +Card 93: 28 31 69 88 94 39 36 99 1 90 | 5 38 46 96 53 26 37 66 65 16 31 79 8 92 11 68 93 27 73 33 51 17 86 1 70 +Card 94: 81 83 18 7 5 12 59 11 41 26 | 2 16 20 74 65 55 23 88 21 99 35 49 12 33 70 25 91 36 50 6 51 15 45 13 34 +Card 95: 14 43 76 25 18 95 15 22 66 83 | 4 45 57 46 33 61 52 17 98 53 37 89 23 27 67 12 86 81 68 9 44 87 24 1 75 +Card 96: 82 98 24 1 85 50 20 57 60 93 | 57 92 59 85 81 20 89 50 28 60 64 38 94 71 61 21 93 98 24 82 58 65 42 76 1 +Card 97: 20 59 25 39 48 12 85 17 44 65 | 56 49 89 58 83 95 25 2 93 26 42 14 37 77 10 11 40 90 86 59 3 61 87 62 16 +Card 98: 56 9 13 23 47 31 54 95 17 58 | 30 59 65 52 23 85 72 75 19 36 95 41 54 49 42 83 64 15 80 31 16 9 27 20 29 +Card 99: 38 82 89 49 24 20 65 87 42 31 | 50 64 92 85 1 14 29 61 18 96 53 10 99 17 15 97 88 74 69 12 72 40 66 54 86 +Card 100: 16 78 53 13 62 18 9 63 61 94 | 16 10 73 6 36 13 24 63 94 57 5 8 18 52 67 20 62 68 29 78 61 69 53 9 38 +Card 101: 20 53 48 71 35 65 26 31 89 44 | 42 10 97 20 1 91 29 96 76 21 78 27 46 3 18 25 68 48 90 41 37 65 28 88 17 +Card 102: 63 31 48 76 34 46 44 99 39 35 | 50 56 53 38 46 39 99 73 61 32 18 65 63 31 74 97 48 41 62 35 44 26 4 34 76 +Card 103: 31 61 96 44 3 32 51 10 74 95 | 60 15 29 39 19 20 68 28 83 40 42 52 50 41 10 36 7 71 11 18 27 16 75 93 99 +Card 104: 38 98 96 64 66 93 53 95 87 73 | 16 45 77 87 92 69 99 3 33 36 31 89 63 93 98 4 83 10 13 51 59 64 37 47 85 +Card 105: 24 86 51 27 23 99 25 97 82 72 | 20 27 7 60 71 94 26 33 52 41 6 48 36 22 46 51 44 64 63 3 50 86 47 12 53 +Card 106: 71 75 52 24 61 13 45 59 30 1 | 6 96 7 20 65 55 95 57 16 29 22 18 87 56 53 81 51 67 66 23 50 11 91 44 72 +Card 107: 47 31 1 45 94 76 35 77 41 96 | 9 47 12 59 89 83 14 5 38 52 39 55 50 90 97 75 87 68 37 26 22 46 27 10 15 +Card 108: 90 35 81 74 7 82 11 79 80 33 | 84 74 82 15 34 26 19 83 25 95 90 81 79 97 71 99 22 35 8 41 65 11 7 55 62 +Card 109: 80 18 68 10 31 61 64 98 84 7 | 81 54 26 20 52 94 68 88 19 15 87 40 12 91 10 61 1 56 45 85 66 25 82 57 92 +Card 110: 79 75 95 63 62 32 78 67 88 3 | 45 80 76 94 10 82 55 26 24 41 65 78 5 47 75 91 38 7 37 88 2 52 97 50 99 +Card 111: 69 4 78 87 15 59 22 90 86 40 | 98 4 27 21 9 71 40 5 67 69 94 38 87 92 91 47 54 17 65 43 30 1 51 72 70 +Card 112: 30 93 66 43 89 12 32 46 1 76 | 79 63 16 15 95 88 44 7 8 59 32 74 19 97 45 80 61 30 34 68 70 1 3 28 55 +Card 113: 36 8 6 21 92 96 67 98 59 34 | 73 44 85 41 11 47 50 53 40 27 90 75 20 79 32 69 3 74 99 78 66 93 56 14 82 +Card 114: 74 31 59 5 70 12 95 33 97 46 | 53 92 99 74 94 78 86 25 73 10 17 58 21 37 2 71 79 90 77 76 50 93 87 52 4 +Card 115: 38 75 68 26 66 52 13 17 76 33 | 73 60 35 27 91 15 39 41 63 36 4 19 61 5 6 3 70 55 24 11 23 71 67 29 51 +Card 116: 73 26 82 27 63 88 34 91 78 59 | 35 56 58 68 71 14 4 94 33 75 72 6 67 55 80 57 28 11 65 84 66 54 3 95 20 +Card 117: 66 2 31 29 64 73 92 10 33 83 | 43 42 55 20 61 51 57 58 94 37 14 15 84 69 41 28 11 10 67 34 65 91 78 18 1 +Card 118: 63 82 19 38 31 57 93 79 32 56 | 1 43 81 72 32 24 79 84 45 94 38 92 56 5 42 70 63 91 93 71 57 96 51 31 83 +Card 119: 34 48 60 44 4 64 3 35 66 30 | 47 3 60 76 67 97 31 1 35 55 84 65 81 52 45 30 50 7 34 71 14 74 89 11 66 +Card 120: 86 93 50 94 55 11 83 84 61 15 | 11 42 14 17 63 36 75 49 86 15 55 94 84 61 50 48 80 6 83 39 23 93 67 87 46 +Card 121: 92 85 58 71 34 94 60 49 14 17 | 34 74 61 77 89 50 99 49 94 60 68 83 71 27 17 56 46 63 76 26 20 70 41 85 39 +Card 122: 99 2 97 77 34 42 35 16 13 33 | 6 42 60 26 9 13 98 30 94 97 33 40 58 91 32 46 47 68 78 34 77 35 93 22 39 +Card 123: 34 16 84 71 29 13 53 57 79 43 | 24 37 74 85 35 7 51 44 97 29 9 70 67 45 61 15 65 77 86 20 90 66 73 11 58 +Card 124: 39 83 88 46 71 8 66 68 67 52 | 75 66 93 8 20 67 3 73 34 39 71 83 45 15 58 55 31 38 69 29 46 40 48 42 68 +Card 125: 73 16 48 77 94 75 79 40 39 22 | 98 37 36 63 10 84 52 53 94 82 46 17 73 2 88 42 16 33 64 62 95 22 77 43 55 +Card 126: 10 84 50 23 39 71 86 74 38 53 | 71 16 38 23 28 86 97 53 43 69 10 84 5 72 4 96 15 37 74 50 83 22 39 49 12 +Card 127: 92 69 94 70 14 35 44 58 3 96 | 18 89 21 14 2 17 76 50 29 72 87 56 39 25 33 37 68 60 55 66 53 80 62 26 38 +Card 128: 58 45 46 29 74 94 61 1 18 72 | 20 76 24 41 14 86 53 85 90 80 83 68 48 10 49 25 75 89 92 93 23 37 38 96 33 +Card 129: 9 19 94 34 58 89 13 1 47 37 | 53 21 17 73 50 79 24 25 2 92 47 75 8 30 98 12 85 80 62 65 86 84 40 49 67 +Card 130: 66 46 68 96 19 2 21 32 63 13 | 82 68 63 21 25 43 44 91 40 97 20 75 2 46 80 83 5 59 66 56 45 93 98 95 47 +Card 131: 13 20 75 52 6 26 90 36 3 82 | 58 98 40 5 12 82 56 64 16 9 17 74 77 76 85 31 53 28 67 4 18 97 47 57 43 +Card 132: 90 86 97 51 21 60 45 8 94 91 | 97 70 38 89 73 14 30 10 39 18 91 8 55 12 86 45 37 54 9 5 23 33 29 51 71 +Card 133: 18 22 20 1 76 64 59 26 73 15 | 75 54 45 77 30 51 32 6 78 11 70 40 22 26 59 79 2 50 94 24 85 29 31 25 73 +Card 134: 61 72 44 50 47 22 78 62 21 32 | 51 61 59 81 67 54 58 55 87 52 85 62 48 34 35 68 74 82 91 11 84 80 98 1 94 +Card 135: 81 98 77 10 91 59 49 66 55 79 | 8 30 40 46 53 50 41 18 66 76 83 72 34 1 49 11 87 9 94 51 79 7 63 90 37 +Card 136: 96 28 21 15 42 65 91 43 82 60 | 95 23 34 51 29 58 31 89 4 16 36 20 5 61 33 47 59 75 80 55 9 67 28 74 45 +Card 137: 53 27 50 59 83 75 48 25 90 89 | 93 87 31 17 35 1 13 24 91 16 90 52 94 99 60 42 4 10 19 32 7 69 80 38 71 +Card 138: 40 8 61 37 83 55 88 50 77 5 | 99 73 66 63 90 78 24 3 29 62 35 75 92 6 39 42 19 95 13 80 25 64 54 49 68 +Card 139: 24 87 36 5 58 46 84 4 80 19 | 31 10 49 87 53 17 67 37 44 80 19 43 46 86 32 4 15 24 58 64 85 66 5 81 82 +Card 140: 92 93 56 21 97 86 5 11 45 3 | 45 21 66 59 56 44 79 16 86 13 8 3 88 71 52 55 54 60 2 37 93 92 97 11 5 +Card 141: 98 73 9 7 74 71 43 63 5 89 | 83 73 44 12 86 97 74 71 43 78 14 98 8 53 16 51 7 20 88 89 93 37 46 58 63 +Card 142: 57 96 47 59 56 58 76 52 1 84 | 80 68 6 61 82 24 42 17 86 79 22 65 31 81 27 41 70 33 77 54 49 99 37 66 64 +Card 143: 34 98 19 48 99 54 66 28 26 33 | 99 89 39 44 81 98 71 67 91 47 48 45 54 7 24 55 51 94 33 34 26 66 19 95 28 +Card 144: 82 37 3 29 57 39 34 44 5 70 | 3 6 39 1 2 10 5 82 37 56 29 50 30 48 47 70 58 12 44 9 69 57 88 51 34 +Card 145: 73 65 86 88 99 81 26 70 11 62 | 86 3 14 88 66 11 90 30 67 80 8 79 23 44 2 1 45 13 32 72 31 26 55 64 70 +Card 146: 8 54 27 20 89 28 51 3 19 40 | 13 81 90 98 9 6 93 88 1 82 79 48 14 31 20 58 65 91 78 38 62 7 73 64 52 +Card 147: 70 63 99 58 80 73 38 95 69 90 | 67 82 72 73 70 92 91 63 80 20 4 69 95 64 38 58 50 10 90 99 78 68 49 1 26 +Card 148: 61 41 24 78 96 40 91 23 70 19 | 28 1 16 76 19 95 60 92 82 41 25 87 63 30 91 96 12 70 77 27 23 90 24 72 61 +Card 149: 43 89 27 28 50 39 6 83 69 45 | 12 43 34 39 73 40 66 95 36 96 74 6 72 81 24 25 78 92 42 22 87 86 59 89 97 +Card 150: 9 14 44 72 64 11 95 68 73 75 | 44 14 60 54 97 64 11 4 57 79 40 53 39 2 51 46 75 42 9 37 6 83 80 25 72 +Card 151: 91 12 67 98 83 16 14 62 69 36 | 35 66 73 90 28 36 43 37 69 24 95 85 27 48 39 44 16 62 53 72 15 1 63 19 5 +Card 152: 42 27 33 9 32 99 76 30 3 53 | 42 43 17 41 5 6 47 8 91 66 85 12 31 9 99 76 58 13 90 11 46 53 54 29 30 +Card 153: 51 60 22 62 57 11 16 85 9 3 | 17 52 62 87 97 73 25 34 65 88 72 16 94 3 32 27 96 86 42 91 80 41 95 79 11 +Card 154: 36 13 59 96 52 90 79 6 14 74 | 28 92 63 4 48 85 12 6 13 91 86 76 44 16 93 97 43 54 52 49 60 84 8 75 21 +Card 155: 91 27 43 97 4 68 6 79 5 72 | 22 77 90 15 50 4 52 70 88 85 24 27 12 80 82 81 74 36 45 92 39 78 54 71 5 +Card 156: 80 45 22 79 4 23 21 63 34 37 | 6 99 74 11 62 54 36 63 59 14 37 70 44 25 31 15 97 12 39 2 75 90 4 46 18 +Card 157: 43 37 94 45 96 99 15 33 54 38 | 18 70 62 12 5 7 17 33 24 8 79 15 51 44 87 57 99 4 25 34 74 65 63 13 76 +Card 158: 21 65 8 67 37 97 99 24 16 68 | 51 85 26 80 72 81 57 37 82 93 46 94 68 54 24 32 18 48 1 69 49 29 27 40 39 +Card 159: 3 2 61 25 92 69 30 10 57 78 | 88 46 33 3 52 89 55 4 24 82 9 98 62 66 54 23 28 13 50 68 39 1 15 63 74 +Card 160: 1 28 51 92 96 79 22 97 17 62 | 64 46 44 75 50 43 39 30 37 91 82 11 4 34 27 71 65 40 81 53 38 52 60 2 23 +Card 161: 26 12 82 16 52 15 97 42 2 20 | 68 22 49 59 32 53 10 72 4 92 25 56 84 65 69 75 88 9 37 86 1 78 89 41 99 +Card 162: 3 32 24 52 49 80 10 39 43 72 | 60 39 23 25 56 21 10 12 24 70 32 83 80 43 19 28 34 22 52 72 49 74 3 15 29 +Card 163: 77 57 96 84 68 59 24 92 60 5 | 66 33 57 73 44 92 60 34 39 62 96 80 2 77 91 5 24 51 31 64 68 59 36 84 88 +Card 164: 76 60 92 78 34 44 23 14 22 1 | 92 17 44 32 53 34 54 28 73 93 89 67 84 18 60 72 85 10 26 21 23 78 33 51 79 +Card 165: 66 99 39 27 18 79 96 7 50 44 | 7 96 41 98 78 57 44 8 61 50 79 68 99 38 40 10 66 31 14 18 27 89 70 39 69 +Card 166: 73 42 83 91 88 21 43 16 10 55 | 73 8 28 10 76 16 99 55 97 62 42 65 35 72 83 52 57 50 91 21 37 74 36 88 96 +Card 167: 64 38 97 19 73 72 67 79 94 21 | 21 38 54 73 66 49 29 25 75 19 85 6 64 34 97 13 30 28 79 67 36 72 94 68 82 +Card 168: 16 37 31 29 99 88 54 66 3 57 | 88 31 38 21 11 79 13 9 36 27 78 47 97 74 64 7 42 32 2 50 46 80 87 96 60 +Card 169: 6 18 54 82 21 27 34 62 91 12 | 52 26 12 56 39 21 5 91 89 6 18 34 43 62 40 67 76 83 27 31 92 82 54 45 55 +Card 170: 31 82 50 80 27 16 34 22 38 54 | 80 22 63 31 23 38 34 66 16 82 9 75 64 54 85 50 99 81 92 53 77 30 13 27 35 +Card 171: 44 50 51 70 77 73 55 41 80 60 | 63 60 69 80 25 48 36 56 96 1 88 14 75 30 7 50 40 95 87 51 41 59 11 65 70 +Card 172: 33 60 55 35 38 86 78 56 31 14 | 60 67 83 33 21 40 14 69 38 94 32 54 3 17 49 19 22 86 31 79 73 71 56 75 78 +Card 173: 75 30 84 6 15 21 76 28 66 83 | 98 94 57 58 26 74 90 69 64 66 51 30 28 38 82 21 86 15 75 78 97 9 19 72 56 +Card 174: 49 63 32 42 78 24 55 70 76 95 | 78 90 82 98 50 60 76 3 49 44 74 18 68 32 55 29 72 24 63 99 96 12 70 59 31 +Card 175: 15 69 87 40 61 58 81 77 21 12 | 27 31 77 43 47 85 80 44 21 1 33 3 84 7 54 51 69 40 70 71 12 49 61 22 15 +Card 176: 40 7 45 71 92 88 27 97 58 8 | 2 82 67 15 81 63 16 49 65 89 35 60 79 29 74 43 56 45 95 84 10 32 92 96 64 +Card 177: 8 70 28 81 60 12 64 98 84 72 | 32 58 80 65 90 79 95 31 56 43 82 45 94 21 92 55 89 96 53 54 19 51 6 52 33 +Card 178: 16 59 30 28 62 24 8 6 92 91 | 96 24 30 28 37 42 50 69 67 62 49 84 92 65 95 34 68 17 47 59 2 60 79 53 16 +Card 179: 68 58 26 30 90 16 9 6 44 92 | 97 4 95 64 12 18 52 96 29 67 84 69 91 23 56 24 10 20 98 87 80 79 65 22 48 +Card 180: 30 32 52 1 10 23 62 43 51 79 | 70 72 87 82 3 83 24 73 34 64 75 71 84 89 26 65 27 47 41 39 81 37 36 18 17 +Card 181: 80 2 77 4 29 98 52 21 86 90 | 46 61 34 66 6 57 8 59 32 16 80 89 86 83 26 27 53 29 55 31 92 84 18 56 14 +Card 182: 77 54 92 15 91 12 89 56 45 87 | 82 13 40 26 15 16 44 97 9 52 33 20 36 63 99 57 49 46 19 22 79 3 32 37 73 +Card 183: 41 43 38 48 97 95 69 98 81 80 | 22 93 36 50 23 37 34 9 27 8 35 49 82 71 65 98 39 56 10 5 69 86 16 88 21 +Card 184: 50 96 62 20 87 19 90 13 41 82 | 52 85 38 89 59 30 64 91 74 6 39 60 61 77 97 18 42 49 12 36 55 56 3 75 96 +Card 185: 43 62 42 28 85 36 21 39 59 16 | 63 1 35 52 15 98 65 68 27 61 40 95 74 80 11 83 94 89 47 90 25 72 32 31 23 +Card 186: 48 6 85 22 91 9 76 2 15 21 | 83 44 33 78 24 96 38 43 20 16 59 67 99 86 36 58 80 31 11 14 28 98 5 57 42 +Card 187: 18 71 35 72 10 45 11 4 44 56 | 16 72 23 30 56 73 45 63 99 10 57 88 65 4 12 8 94 71 11 18 44 35 80 74 78 +Card 188: 89 11 73 22 99 41 28 61 66 52 | 98 85 99 64 97 28 71 66 26 58 53 3 92 95 22 67 83 13 51 11 57 79 25 19 89 +Card 189: 61 49 23 38 82 95 62 2 15 67 | 14 2 68 82 61 11 86 65 70 40 38 95 67 80 23 62 27 36 90 55 25 57 35 49 15 +Card 190: 74 47 34 96 42 10 58 71 82 80 | 32 42 68 58 74 6 93 82 50 91 80 33 71 55 47 30 70 43 62 98 75 11 4 96 10 +Card 191: 48 39 13 22 77 86 8 34 71 6 | 44 20 73 16 31 67 66 1 21 2 80 54 49 42 45 35 30 87 83 57 60 4 50 76 26 +Card 192: 70 77 39 63 81 88 7 78 85 44 | 97 81 85 12 96 71 63 84 88 45 9 77 27 78 51 52 82 44 7 10 80 60 70 39 49 +Card 193: 11 62 85 7 5 47 58 68 88 65 | 98 55 47 5 7 85 22 62 82 46 38 59 68 30 26 84 45 40 58 31 81 11 65 93 88 +Card 194: 60 49 75 21 54 34 40 6 39 67 | 84 60 14 34 65 49 7 39 32 54 74 25 40 75 21 72 6 35 5 41 78 20 26 77 67 +Card 195: 55 11 12 81 4 7 97 61 15 58 | 69 29 95 11 12 77 4 30 55 15 44 39 2 89 38 71 51 25 40 6 21 81 58 7 98 +Card 196: 90 78 2 3 77 24 33 45 32 30 | 16 11 39 27 85 34 79 59 6 33 46 21 48 36 58 99 40 74 63 82 96 42 7 95 90 +Card 197: 21 13 3 45 1 33 54 70 23 22 | 23 73 21 34 76 78 4 1 46 11 60 64 42 26 81 13 90 51 2 79 74 45 3 72 84 +Card 198: 44 17 16 71 52 50 11 69 14 86 | 90 70 65 7 91 17 63 81 24 39 69 42 87 57 36 35 74 31 22 80 50 88 13 41 78 +Card 199: 60 13 93 42 74 66 3 89 40 8 | 43 37 38 54 99 36 44 62 1 91 60 52 76 21 20 86 17 97 98 7 79 57 28 48 35 +Card 200: 40 39 37 63 65 8 25 47 85 12 | 62 35 28 68 63 27 98 40 43 17 78 87 41 86 13 61 5 23 4 20 93 31 66 18 49 +Card 201: 41 57 5 59 95 15 18 44 75 28 | 1 33 29 38 76 73 36 17 19 4 52 84 68 32 35 27 92 58 81 78 2 61 97 85 22 +Card 202: 60 80 88 13 96 57 1 58 39 52 | 52 34 58 2 59 50 79 92 63 98 96 36 62 77 37 56 78 4 54 51 9 76 85 21 57 +Card 203: 39 28 57 98 3 73 22 8 23 68 | 44 9 43 17 50 14 97 1 41 76 61 90 20 62 78 5 89 85 64 55 16 72 19 4 37 +Card 204: 99 82 81 86 88 31 92 8 93 94 | 28 74 53 55 76 77 57 94 97 45 41 17 38 36 98 86 39 24 10 42 27 65 73 34 96 +Card 205: 55 7 8 82 24 95 85 99 22 59 | 58 64 84 42 26 59 20 37 49 57 62 15 18 1 32 2 86 69 96 63 47 77 60 19 93 +Card 206: 73 34 51 18 57 42 91 27 84 95 | 6 88 80 82 98 89 36 10 33 78 37 21 45 96 5 93 15 63 62 92 49 94 1 64 85 +Card 207: 83 32 10 94 28 8 61 98 53 48 | 31 78 60 79 87 37 97 34 11 71 66 1 29 74 24 41 22 42 46 85 80 47 17 54 14 +Card 208: 11 17 75 84 85 40 89 23 54 80 | 31 54 85 61 39 79 27 56 62 64 11 80 3 72 14 73 19 48 99 89 15 42 23 9 97 +Card 209: 30 75 20 84 70 26 72 23 9 97 | 5 76 67 41 18 84 36 54 70 65 75 25 82 23 50 9 7 46 33 85 38 11 97 95 40 +Card 210: 76 25 97 64 92 68 60 43 63 53 | 31 1 91 45 39 62 89 50 77 37 38 25 8 28 71 97 49 99 55 9 27 52 64 76 73 +Card 211: 62 52 55 90 57 38 95 65 39 92 | 67 46 95 3 38 18 26 5 75 55 92 41 85 28 84 42 37 73 64 69 33 14 34 94 35 +Card 212: 91 93 76 59 88 48 97 44 96 78 | 22 20 48 74 61 91 69 25 59 44 6 93 42 36 96 76 60 88 37 32 78 97 16 47 89 +Card 213: 79 33 53 91 63 62 42 3 72 25 | 59 69 60 7 82 68 73 97 23 48 39 38 76 71 9 29 37 53 67 92 85 55 15 13 61 +Card 214: 51 20 73 22 11 83 14 71 26 74 | 85 48 41 50 93 70 21 76 2 16 22 95 6 25 20 19 72 58 11 45 83 54 26 73 51 +Card 215: 47 72 51 32 7 13 99 36 17 48 | 22 47 6 36 8 91 35 11 3 42 30 21 38 43 28 64 99 72 75 18 84 13 52 82 55 +Card 216: 34 39 74 27 3 44 62 85 42 87 | 51 59 19 80 33 89 1 79 84 82 85 60 61 56 6 50 77 92 55 21 34 83 38 98 26 +Card 217: 11 33 54 13 67 99 61 86 57 7 | 95 32 57 34 98 33 7 54 71 26 42 73 52 56 13 79 67 78 75 58 9 81 24 41 96 +Card 218: 50 9 20 47 18 95 63 31 75 30 | 73 5 26 92 74 57 77 20 96 32 8 9 88 71 75 28 17 29 81 27 90 49 25 67 87 +Card 219: 5 55 89 78 12 19 47 64 87 81 | 16 66 55 2 13 10 93 88 39 47 22 54 65 59 8 75 99 19 61 43 68 86 67 49 70 +Card 220: 84 11 98 89 83 95 48 71 45 88 | 14 7 33 52 19 30 66 81 37 57 21 8 47 17 72 95 63 59 29 18 27 26 76 91 73 +Card 221: 78 17 79 4 63 65 56 57 22 92 | 48 94 32 37 26 58 64 87 24 95 19 41 12 25 74 93 30 1 66 27 3 43 50 35 11 +Card 222: 74 14 52 95 73 11 55 26 90 78 | 17 21 93 28 90 61 63 50 19 57 91 66 86 79 62 41 3 23 75 15 56 18 92 83 49 +Card 223: 98 82 47 14 2 48 1 50 18 62 | 67 78 16 58 35 87 93 44 77 13 74 34 32 92 88 54 36 61 91 72 9 59 89 73 5 diff --git a/main.rb b/main.rb deleted file mode 100644 index 1b89068..0000000 --- a/main.rb +++ /dev/null @@ -1,70 +0,0 @@ -# class Trebuchet -# attr_accessor :input -# DIGITS = %w[zero one two three four five six seven eight nine] -# -# def initialize(input) -# @input = input -# end -# -# def process_line(line) -# line.strip.gsub(/(#{DIGITS.join("|")})/) do |capture| -# case capture -# when "zero" then "0" -# when "one" then "1" -# when "two" then "2" -# when "three" then "3" -# when "four" then "4" -# when "five" then "5" -# when "six" then "6" -# when "seven" then "7" -# when "eight" then "8" -# when "nine" then "9" -# else -# raise! "Unknown digit: #{capture}" -# end -# end -# end -# -# def calibration_value(line) -# line -# .chars -# .select { |char| ('0'..'9').include?(char) } -# .map(&:to_i) -# .then { |chars| (chars[0] * 10) + chars[-1] } -# end -# -# def solve -# @input.lines.lazy -# .map { |line| process_line(line) } -# .map { |line| calibration_value(line) } -# .sum -# end -# end - -data = ARGF.read -# p "SREEDEV: #{Trebuchet.new(data).solve}" - -WORDS = { - 'one' => 1, - 'two' => 2, - 'three' => 3, - 'four' => 4, - 'five' => 5, - 'six' => 6, - 'seven' => 7, - 'eight' => 8, - 'nine' => 9 -} -WORDS_RE = "#{WORDS.keys.join('|')}" - -def parse_digit(d) - WORDS[d] || d.to_i -end - -puts data.each_line.reduce(0) { |sum, line| - line =~ /^.*?(\d|#{WORDS_RE})/ - first_digit = $1 - line =~ /.*(\d|#{WORDS_RE}).*$/ - last_digit = $1 - sum + "#{parse_digit first_digit}#{parse_digit last_digit}".to_i -} diff --git a/src/days/day01.rs b/src/days/day01.rs deleted file mode 100644 index f88cfa0..0000000 --- a/src/days/day01.rs +++ /dev/null @@ -1,75 +0,0 @@ -#![allow(unused, unused_imports)] - -use crate::template::Solution; -use anyhow::Result; -use itertools::Itertools; -use regex::{Regex, RegexSet}; -use tap::prelude::*; - -pub struct Day01; - -const DATA: &str = include_str!("../../data/day01.txt"); -const EXAMPLE: &str = include_str!("../../data/day01_example.txt"); - -impl Solution for Day01 { - fn solve_part1(&self) -> Result { - Ok(DATA - .lines() - .map(|line| { - line.trim() - .chars() - .filter(|c| c.is_numeric()) - .map(|c| c.to_digit(10).unwrap()) - .collect::>() - }) - .map(|n| (10 * n.first().unwrap()) + n.last().unwrap()) - .sum::() - .to_string()) - } - - fn solve_part2(&self) -> Result { - let patterns = [ - "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", r"\d", - ] - .into_iter() - .map(|pattern| Regex::new(pattern).unwrap()) - .collect::>(); - - let parse_int = |s: &str| -> u32 { - match s { - "one" => 1, - "two" => 2, - "three" => 3, - "four" => 4, - "five" => 5, - "six" => 6, - "seven" => 7, - "eight" => 8, - "nine" => 9, - "zero" => 0, - x => u32::from_str_radix(x, 10).unwrap(), - } - }; - - Ok(DATA - .lines() - .map(|line| { - patterns - .clone() - .iter() - .flat_map(|pattern| { - pattern - .find_iter(line.trim()) - .map(move |m| (m.start(), m.as_str())) - .collect::>() - }) - .into_iter() - .sorted_by(|(i1, _), (i2, _)| i1.cmp(i2)) - .map(|(_, s)| parse_int(s)) - .collect::>() - }) - .map(|n| (n.first().unwrap() * 10) + n.last().unwrap()) - .sum::() - .to_string()) - } -} diff --git a/src/days/mod.rs b/src/days/mod.rs deleted file mode 100644 index 52056b5..0000000 --- a/src/days/mod.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub mod day01; - -use crate::template::Solution; - -pub fn fetch(day: u32) -> impl Solution { - match day { - 1 => day01::Day01, - _ => panic!("Day {} not implemented", day), - } -} diff --git a/src/main.rs b/src/main.rs index 86c41d2..2d13a65 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,16 +1,49 @@ -mod days; -mod template; +mod solutions; +use anyhow::{anyhow, Result}; +use solutions::cube_conundrum as day02; +use solutions::scratchcards as day04; +use solutions::trebuchet as day01; use std::env::args; -use anyhow::Result; -use template::Solution; +use std::fs::File; +use std::io::Read; + +fn read_file(path: &str) -> Result { + let mut file = File::open(path)?; + let mut contents = String::new(); + file.read_to_string(&mut contents)?; + + Ok(contents) +} fn main() -> Result<()> { - let day = args().nth(1).expect("[ERR] Solution Day Not Specified!").parse::()?; - let solver = days::fetch(day); + let day = args() + .nth(1) + .expect("[ERR] Solution Day Not Specified!") + .parse::()?; + + match day { + 1 => { + let input: String = read_file("data/day01.txt")?; + println!("Part A => {}", day01::solve_part1(&input)); + println!("Part B => {}", day01::solve_part2(&input)); + + Ok(()) + } + 2 => { + let input: String = read_file("data/day02.txt")?; + println!("Part A => {}", day02::solve_part1(&input)); + println!("Part B => {}", day02::solve_part2(&input)); + + Ok(()) + } + 4 => { + let input: String = read_file("data/day04.txt")?; + println!("Part A => {}", day04::solve_part1(&input)); + println!("Part B => {}", day04::solve_part2(&input)); - println!("Solution for Day {}", day); - println!("Part 1: {}", solver.solve_part1()?); - println!("Part 2: {}", solver.solve_part2()?); - Ok(()) + Ok(()) + } + _ => Err(anyhow!("No Solution Found!")), + } } diff --git a/src/solutions/cube_conundrum.rs b/src/solutions/cube_conundrum.rs new file mode 100644 index 0000000..ac1414f --- /dev/null +++ b/src/solutions/cube_conundrum.rs @@ -0,0 +1,183 @@ +#[derive(Debug, Clone, Hash, PartialEq, Eq)] +enum Cube { + Red(u32), + Blue(u32), + Green(u32), + Invalid, +} + +#[derive(Debug, Clone)] +struct Game { + id: u32, + pub sets: Vec>, +} + +#[derive(Debug, Clone)] +struct Config { + red: u32, + green: u32, + blue: u32, +} + +impl Game { + pub fn is_valid(&self, config: Config) -> bool { + self.sets + .clone() + .into_iter() + .filter(|cubes| { + cubes.iter().any(|cube| match cube { + Cube::Green(count) => count.gt(&config.green), + Cube::Red(count) => count.gt(&config.red), + Cube::Blue(count) => count.gt(&config.blue), + _ => false, + }) + }) + .count() + .eq(&0) + } + + pub fn min_cubes(&self) -> u32 { + Ok::<(u32, u32, u32), anyhow::Error>(self.sets.iter().fold( + (0, 0, 0), + |(max_red, max_blue, max_green), cubes| { + cubes.iter().fold( + (max_red, max_blue, max_green), + |(red, blue, green), cube| match cube { + Cube::Red(x) => (red.max(*x), blue, green), + Cube::Blue(x) => (red, blue.max(*x), green), + Cube::Green(x) => (red, blue, green.max(*x)), + _ => (red, blue, green), + }, + ) + }, + )) + .map(|(max_red, max_blue, max_green)| max_red * max_blue * max_green) + .unwrap_or(0) + } +} + +mod parser { + use super::{Cube, Game}; + use nom::{ + branch::alt, + bytes::complete::tag, + character::complete::{digit1, line_ending, space1}, + combinator::{eof, map_res}, + multi::{many1, separated_list1}, + sequence::{terminated, tuple}, + Err as NomErr, IResult, + }; + pub struct Parser; + + impl Parser { + pub fn games(input: &str) -> IResult<&str, Vec> { + map_res( + many1(tuple((Self::game_id, many1(Self::game_set)))), + |games: Vec<(u32, Vec>)>| { + Ok::, NomErr<&str>>( + games + .into_iter() + .map(|(id, sets)| Game { id, sets }) + .collect(), + ) + }, + )(input) + } + + fn game_id(input: &str) -> IResult<&str, u32> { + map_res( + tuple((tag("Game "), map_res(digit1, str::parse::), tag(":"))), + |(_, id, _)| Ok::>(id), + )(input) + } + + fn game_set(input: &str) -> IResult<&str, Vec> { + map_res( + terminated( + separated_list1( + tag(","), + tuple(( + space1, + map_res(digit1, str::parse::), + space1, + alt((tag("blue"), tag("red"), tag("green"))), + )), + ), + alt((tag(";"), eof, line_ending)), + ), + |combinations: Vec<(&str, u32, &str, &str)>| { + Ok::, NomErr<&str>>( + combinations + .into_iter() + .map(|(_, count, _, color)| match color { + "red" => Cube::Red(count), + "green" => Cube::Green(count), + "blue" => Cube::Blue(count), + _ => Cube::Invalid, + }) + .collect::>(), + ) + }, + )(input) + } + } +} + +use parser::Parser; +pub fn solve_part1(input: &str) -> u32 { + Parser::games(input) + .map(|(_, parsed)| parsed) + .unwrap_or_default() + .into_iter() + .filter(|game| { + game.is_valid(Config { + red: 12, + green: 13, + blue: 14, + }) + }) + .map(|game| game.id) + .sum::() +} + +pub fn solve_part2(input: &str) -> u32 { + Parser::games(input) + .map(|(_, parsed)| parsed) + .unwrap_or_default() + .into_iter() + .map(|game| game.min_cubes()) + .sum::() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_part_a() { + let test_data = vec![ + "Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green", + "Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue", + "Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red", + "Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red", + "Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green", + ] + .join("\n"); + let solution = solve_part1(&test_data); + assert_eq!(solution, 8) + } + + #[test] + fn test_part_b() { + let test_data = vec![ + "Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green", + "Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue", + "Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red", + "Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red", + "Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green", + ] + .join("\n"); + let solution = solve_part2(&test_data); + assert_eq!(solution, 2286) + } +} diff --git a/src/solutions/mod.rs b/src/solutions/mod.rs new file mode 100644 index 0000000..254c433 --- /dev/null +++ b/src/solutions/mod.rs @@ -0,0 +1,3 @@ +pub mod cube_conundrum; +pub mod scratchcards; +pub mod trebuchet; diff --git a/src/solutions/scratchcards.rs b/src/solutions/scratchcards.rs new file mode 100644 index 0000000..8d52c0b --- /dev/null +++ b/src/solutions/scratchcards.rs @@ -0,0 +1,116 @@ +use anyhow::Result; + +#[allow(unused)] +#[derive(Debug)] +struct Card { + id: u32, + winning_numbers: Vec, + own_numbers: Vec, +} + +impl Card { + fn points(&self) -> Result { + Ok(self + .winning_numbers + .iter() + .filter(|winnum| self.own_numbers.iter().any(|ownnum| ownnum == *winnum)) + .count()) + .map(|cnt| { + if cnt.eq(&0) { + 0 + } else { + u32::pow(2, (cnt as u32) - 1) + } + }) + } +} + +mod parser { + use super::Card; + use nom::{ + branch::alt, + bytes::complete::tag, + character::complete::{digit1, space0, space1}, + combinator::{eof, map_res}, + multi::many1, + sequence::{terminated, tuple}, + Err, IResult, + }; + + pub struct Parser; + + impl Parser { + fn card_number_parser(inp: &str) -> IResult<&str, u32> { + map_res( + tuple(( + tag("Card"), + space1, + map_res(digit1, |s: &str| -> Result> { + Ok(s.parse::().unwrap()) + }), + tag(": "), + )), + |(_, _, card_id, _)| Ok::>(card_id), + )(inp) + } + + fn own_numbers_parser(inp: &str) -> IResult<&str, Vec> { + terminated( + many1(map_res( + tuple((space0, terminated(digit1, space0))), + |(_, n): (&str, &str)| Ok::>(n.parse::().unwrap()), + )), + alt((tag("\n"), eof)), + )(inp) + } + + fn winning_numbers_parser(inp: &str) -> IResult<&str, Vec> { + terminated( + many1(map_res( + tuple((space0, terminated(digit1, space0))), + |(_, n): (&str, &str)| Ok::>(n.parse::().unwrap()), + )), + tag("| "), + )(inp) + } + + fn card_parser(inp: &str) -> IResult<&str, Card> { + map_res( + tuple(( + Self::card_number_parser, + Self::winning_numbers_parser, + Self::own_numbers_parser, + )), + |(card_id, winning, own)| { + Ok::>(Card { + id: card_id, + winning_numbers: winning, + own_numbers: own, + }) + }, + )(inp) + } + + fn card_list_parser(inp: &str) -> IResult<&str, Vec> { + many1(Self::card_parser)(inp) + } + + pub fn parse(input: &str) -> IResult<&str, Vec> { + Self::card_list_parser(input) + } + } +} + +use parser::Parser; +pub fn solve_part1(input: &str) -> u32 { + Parser::parse(input) + .map(|(_, res)| res) + .unwrap_or_default() + .iter() + .map(|card| Card::points(card).unwrap_or_default()) + .sum::() +} + +pub fn solve_part2(_input: &str) -> i32 { + 0 +} diff --git a/src/solutions/trebuchet.rs b/src/solutions/trebuchet.rs new file mode 100644 index 0000000..dff4a52 --- /dev/null +++ b/src/solutions/trebuchet.rs @@ -0,0 +1,88 @@ +use itertools::Itertools; +use regex::Regex; + +pub fn solve_part1(input: &str) -> u32 { + input + .lines() + .map(|line| { + line.trim() + .chars() + .filter(|c| c.is_numeric()) + .map(|c| c.to_digit(10).unwrap()) + .collect::>() + }) + .map(|n| (10 * n.first().unwrap()) + n.last().unwrap()) + .sum::() +} + +pub fn solve_part2(input: &str) -> u32 { + let patterns = [ + "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", r"\d", + ] + .into_iter() + .map(|pattern| Regex::new(pattern).unwrap()) + .collect::>(); + + let parse_int = |s: &str| -> u32 { + match s { + "one" => 1, + "two" => 2, + "three" => 3, + "four" => 4, + "five" => 5, + "six" => 6, + "seven" => 7, + "eight" => 8, + "nine" => 9, + "zero" => 0, + x => x.parse::().unwrap(), + } + }; + + input + .lines() + .map(|line| { + patterns + .clone() + .iter() + .flat_map(|pattern| { + pattern + .find_iter(line.trim()) + .map(move |m| (m.start(), m.as_str())) + .collect::>() + }) + .sorted_by(|(i1, _), (i2, _)| i1.cmp(i2)) + .map(|(_, s)| parse_int(s)) + .collect::>() + }) + .map(|n| (n.first().unwrap() * 10) + n.last().unwrap()) + .sum::() +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_part_a() { + let test_data = vec!["1abc2", "pqr3stu8vwx", "a1b2c3d4e5f", "treb7uchet"].join("\n"); + let solution = solve_part1(&test_data); + assert_eq!(solution, 142) + } + + #[test] + fn test_part_b() { + let test_data = vec![ + "two1nine", + "eightwothree", + "abcone2threexyz", + "xtwone3four", + "4nineeightseven2", + "zoneight234", + "7pqrstsixteen", + ] + .join("\n"); + let solution = solve_part2(&test_data); + assert_eq!(solution, 281) + } +} diff --git a/src/template.rs b/src/template.rs deleted file mode 100644 index 5fa8390..0000000 --- a/src/template.rs +++ /dev/null @@ -1,6 +0,0 @@ -use anyhow::Result; - -pub trait Solution { - fn solve_part1(&self) -> Result; - fn solve_part2(&self) -> Result; -}