diff options
| author | Mike Vink <ivi@vinkies.net> | 2023-12-02 22:10:34 +0100 |
|---|---|---|
| committer | Mike Vink <ivi@vinkies.net> | 2023-12-10 20:35:22 +0100 |
| commit | 9dbbbc4fe5d85e917e8efa977501b4ebacb349be (patch) | |
| tree | 06339fa764a7dacd9b1f6e2093e0e9cdba4c2f8b | |
use tree for day1, why not 🐒
| -rw-r--r-- | .envrc | 4 | ||||
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Cargo.lock | 223 | ||||
| -rw-r--r-- | Cargo.toml | 9 | ||||
| -rw-r--r-- | flake.lock | 154 | ||||
| -rw-r--r-- | flake.nix | 58 | ||||
| -rw-r--r-- | input/1/in.txt | 1000 | ||||
| -rw-r--r-- | input/1/test.txt | 7 | ||||
| -rw-r--r-- | input/1/testlong.txt | 14 | ||||
| -rw-r--r-- | run.sh | 16 | ||||
| -rw-r--r-- | src/bin/cli.rs | 20 | ||||
| -rw-r--r-- | src/bin/daemon.rs | 3 | ||||
| -rw-r--r-- | src/bin/main.rs | 117 |
13 files changed, 1626 insertions, 0 deletions
@@ -0,0 +1,4 @@ +if ! has nix_direnv_version || ! nix_direnv_version 2.2.0; then + source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.0/direnvrc" "sha256-5EwyKnkJNQeXrRkYbwwRBcXbibosCJqyIUuz9Xq+LRc=" +fi +use flake 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..87d5a54 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,223 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anstream" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" + +[[package]] +name = "anstyle-parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "aoc2023" +version = "0.1.0" +dependencies = [ + "clap", +] + +[[package]] +name = "clap" +version = "4.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[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 = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[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 = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[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..fd8ecb6 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "aoc2023" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = { version = "4.4.10", features = ["derive"] } diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..6ef4886 --- /dev/null +++ b/flake.lock @@ -0,0 +1,154 @@ +{ + "nodes": { + "fenix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1701498074, + "narHash": "sha256-UNYTZtBYa/4G5+dRzNNXNcEi1RVm6yOUQNHYkcRag2Q=", + "owner": "nix-community", + "repo": "fenix", + "rev": "ce8747b0d8d6605264651f9ab5c84db6d7a56728", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1698882062, + "narHash": "sha256-HkhafUayIqxXyHH1X8d9RDl1M2CkFgZLjKD3MzabiEo=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "8c9fa2545007b49a5db5f650ae91f227672c3877", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1701068326, + "narHash": "sha256-vmMceA+q6hG1yrjb+MP8T0YFDQIrW3bl45e7z24IEts=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "8cfef6986adfb599ba379ae53c9f5631ecd2fd9c", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "dir": "lib", + "lastModified": 1698611440, + "narHash": "sha256-jPjHjrerhYDy3q9+s5EAsuhyhuknNfowY6yt6pjn9pc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0cbe9f69c234a7700596e943bfae7ef27a31b735", + "type": "github" + }, + "original": { + "dir": "lib", + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1695644571, + "narHash": "sha256-asS9dCCdlt1lPq0DLwkVBbVoEKuEuz+Zi3DG7pR/RxA=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "6500b4580c2a1f3d0f980d32d285739d8e156d92", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "fenix": "fenix", + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "systems": "systems", + "treefmt-nix": "treefmt-nix" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1701447636, + "narHash": "sha256-WaCcxLNAqo/FAK0QtYqweKCUVTGcbKpFIHClc+k2YlI=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "e402c494b7c7d94a37c6d789a216187aaf9ccd3e", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1699786194, + "narHash": "sha256-3h3EH1FXQkIeAuzaWB+nK0XK54uSD46pp+dMD3gAcB4=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "e82f32aa7f06bbbd56d7b12186d555223dc399d1", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..eb14a44 --- /dev/null +++ b/flake.nix @@ -0,0 +1,58 @@ +{ + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + flake-parts.url = "github:hercules-ci/flake-parts"; + systems.url = "github:nix-systems/default"; + treefmt-nix.url = "github:numtide/treefmt-nix"; + fenix = { + url = "github:nix-community/fenix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = inputs: + inputs.flake-parts.lib.mkFlake { inherit inputs; } { + systems = import inputs.systems; + imports = [ + inputs.treefmt-nix.flakeModule + ]; + perSystem = { config, self', pkgs, lib, system, ... }: + let + nonRustDeps = [ + pkgs.libiconv + ]; + in + { + _module.args.pkgs = import inputs.nixpkgs { + inherit system; overlays = [inputs.fenix.overlays.default]; + }; + # Rust dev environment + devShells.default = pkgs.mkShell { + inputsFrom = [config.treefmt.build.devShell]; + buildInputs = nonRustDeps; + nativeBuildInputs = with pkgs; [ + (fenix.complete.withComponents [ + "cargo" + "clippy" + "rust-src" + "rustc" + "rustfmt" + ]) + cargo-flamegraph + rust-analyzer-nightly + ]; + }; + + # Add your auto-formatters here. + # cf. https://numtide.github.io/treefmt/ + treefmt.config = { + projectRootFile = "flake.nix"; + programs = { + nixpkgs-fmt.enable = true; + rustfmt.enable = true; + }; + }; + }; + }; + +} diff --git a/input/1/in.txt b/input/1/in.txt new file mode 100644 index 0000000..8478f1b --- /dev/null +++ b/input/1/in.txt @@ -0,0 +1,1000 @@ +9sixsevenz3 +seven1cvdvnhpgthfhfljmnq +6tvxlgrsevenjvbxbfqrsk4seven +9zml +52sevenone +41onevfsgvssxnpsix38four +15ninedzhkpfstrscggbqhktwo +rxbfsvhpnjvsixmxfhhmvdvg26rgrfj43 +gcbq2sghsv4fiveeightrlhchsfs2hsrjknfz +tworgqpdjzrzf7one +fivefive18 +sixfztrcxmbzktwofour3fiveeight +2g4stjrjjmbngvljfvg24 +5jkcdxkltwo71 +vhpttjh2 +3threegmsppjrngfive7 +ktkgsvkthreevone2xxrxzgdqpnone2xnf +llxzczt3seventwotwosix5 +eighteighthvllljmgg82eightseven2 +9hcjzphpktwo76xfpdvnhklzthreejrzkdknhrktwo +fourtwojrvzzctzs5eight2vlm +zoneightthree2hvhfsprqxmlsix7onevn4 +56sixssevenfour5twonine +58fourfour +683 +8fourninenhfpz9eightptsnnb +gddmrzlpn9 +g3qsbqmbhqqp1eightkjggcxpmzgg +6bzjqs7nxpvgtwoseven +271lonepxp2flbmbz +5sgshnrfn9qxt8xsnhtdtx6 +cnhflx4sevensixonethree +595six93 +6eight8jbtmxdqpj96mqkrdxt9tpbpppl +68qvmgth371lqcrglmvqxtwonfk +mbqbhpmhspsbbxgflg98zn +8oneqzvdcrh +kb6 +mhgvpmfgjfourfourtwo4 +81mvcgqxlktbpkkrsgbdgeightbqn65 +hlbhthree1seven9 +vqczmtvqsnd3sh63 +qrzngvmk8 +chpldqtkhqbvdvmnqd5 +6three6two +sevensix4tjvkcfgpone98 +96zgpcq9four +cbvksjgvvklhnksixfive7kmmxg +threeljfr1vzskggfvjsccc +8pfourthreetwosix +l2sbdcvngvmtzrtq +hjdxfj94 +2hbhfbjfteightnr5sixfpfjkn +2sevenjqlpprggjlkddqv9oneightpj +fivebfmkdrrrdkclkscqmtwo6five7 +fourrp8fnbp9d1fl7 +six8pffqfpjl2nine +91sdjlghq5 +fivemrmcnjmfcnck2 +v1 +78htfvqsztlsixeight +5zpjtbgpkvkxbgpsp3cgklflkhdteightwortv +mcxqfgxt49sevenone9 +rt2dsvpf +9dzxmfour76six +tsbmbdrgmzsjeightonezqhqb5qn +seven8zllmz +373onefourthree +1fourfivezthdcxfr +996seven2four +8smnghninezczdlzxxgf +7cbqfzrmhxdmrdr94tz +6vstr65tfivelmhjshhj +248fourlckvrtnzz4sxdqpgkvh +zfivejfgfgdhfrhr6 +one2tworsmtnzfjhvvqjnp +5threefourjsnfzninethreejrknzfn +seven9nine +gthree15fivemzpnqgttcq1 +fivevvvkgtvs3four4 +five121three +7fourn +sixdnineqvfqglmn98516 +ninesixrppx4 +threesevenxbskhlqbone276 +fivesixfour82 +tmdnvgrkjxfour9 +61nine +vtxpkcgb48jzx8rgeight7 +twoonetwo3 +four167bnbdtxq4xvdgckkpb2 +xgbxvx7ninehmvqlldtxls88qhztfldr4 +5qxsfdchthree41 +fournb5gfqzfrlnc5fivethree1 +t6fourh3 +ninefgzksevenseven5sbcpnczgflqptjhk +6three4 +5tnplthreeeightvsk2fivesix9 +three8hcvnmvbhbtwo +6jnfourdbcgzgfzczbc +z53 +fourxzhgjfrrbmkcheightfive7seven8oneightb +2fivehkhnbtm +rptgktsnzvsslcvfsevensixfive72 +95chcvtxv4 +ninenldnphcpn93fivetwo7 +threeeight675vmhvgtxxc2bp +hfdmpv6 +xpffsljjcm27 +8sevensix8 +7hmszcvzpf9eightqqxgjdnhpfour68 +2czrnzdpxsjsdldcxq2vzgfrthsssix +four5bdxdnvtgcbdzzsxjdlbckninetwo5 +35fourfive6 +z5eight3r84hvptgskcclbsgh +2eightljldmconeeightgvhm +4sixsixsixfourthree +tnnthreelfmhone1onepfivevdg +8nine9lmpptxstrrbqbjrjtm4seven +2ltqd9mnrbhcsprz +two5ptcjzbqnk2spvlcxqvglndgvrlm5fiveeight +52sqstnqpdeight55 +2nvskvthreeqhkqvjzqrk1 +gbkqz127four +8zmngr5381rb +klrlqvkhslvbxdtwofour4cmlpbdm6 +eightninenjnmc8zrnrltgfmfour +38sv7 +eightvtkkmhhninebmgdvconenine7sixjkdzxcr +h14bdgvknbnjq4fv +74svtwo +7three5sixone4 +zseightwo6five +shkznseven5ninefivefour8 +mcmztmrgctqszzpqs8tworfvkseven +onejjmdfour15nine4 +7bxqxxxvlthree4tb9five +twoqzpx6hj +68hbdjdd45two +68 +4hxlfbgvtdmbhnpfzxpnltfivemtmczjcbffour4 +fourseven4hfffmtqoneglgnnsrqsmbnxr +dhbbmcxtv7five9ffjjcmshv31seven +foursbgvhgbggnine6three4zznzcvmxxqktpdhff +681cvdh +3ninefivefive +jg4dnnxzdtwoqdbvfsix +g4dbeight6rkc +236bjcppxmlnine +5crthreefive8 +6twoknqfbmeight5c +64eightrkvvtjtsonefour9eightwoqxq +sm7sixfivexbrkvhtl9 +threeninetwotwo1one +tjjeightwoj3gsdmdseventwo1 +63sevenk4blssxzkcq29ztjlnx +ckpleightxgngnhkj2threem +8knckxzrfbbpxldzninennnmkxkzzstsflv9two +rmldrlcvccgdbvdnxvqr3ninefznpqrrtd1cfpjrvjzs +5twojdflbxnlslnsjtklqkrbklvkthreejgxkfzeight +sevenxfpzvss6 +one61 +2seven7eight +fivefive5fourtwo9vjmxmtpv +4pxfour +twofive1eight9ldjbfbzhhffdb +onefive7four93pjchnkrzvz +4194hgfslhdczj1ztjtnccpjseven8 +sixtkjmtcthreezjfcgbdhvqlmbpzmc7 +nineeightvnd55sftvbf4sevenrkgbjskxbj +kqoneighttpqcnsphsfour7eight9sixthree +5foursvfsztnfivekkkftdfbptmrgcone +sevensix8one5zjlfcrqzvp +1hmvpbhzcbgbgvdkblnhgklltxx +55xszsjgbd2fk +hdrhmddj6ninebcfhbd +f91six +3tltgktntqpkeighthbqhlxcqnffgbfvxrkmr2 +3jthree +2eightplclghthree +771 +5gccqqmzmx81twob +6pgnqbsqglk44mvslnxghckcbtffxvkq2 +twooneone5 +twohbxsxj2six826hlkdjnnz +17tbdmntksvn89fivethreeseven +sixplznhmbgzmlh3six1 +h2kvpbnkcxrssevenfive +jhpmnksix7fgnbhgv8fztxfrpfvmnrvhzr +vskpbnine3vjqdlmv9 +vmg86ht36sbnzphxfive +klqxeightnine6 +4nfninelzshl26 +zqsb243hfdtvgx +two9tzcrmrsix81xsgvldl +ggqeightwo5bdpqtjkgzdclxsqptwo1eight1 +pvfzftdxqzfourmmbzlbzcfsevenfivesix5 +fivelt5fivegshvshpvkpqlddmfj6 +cjpzgsvgsz7kzcpr1sixfour +8two4onesevenseven7v +ztwonefouronezdvggfive8eightzflpvlnxfspgrtwo +one7tphmqvfltwo +49seven2three +9rntqtxseveneightgflqzkrxhglrnvrvz1 +four6nine7 +5nine3 +4ddpkhft12hrhjvbtdxthree1tpknk +7k +fmlrpkxqktzdldrs84onefptgdjspldljvnine8 +oneseven4nineqbqlbxf2kqnpr +ffivetwo97mp +47h92ffcd6 +two7tcjvxdvctfivepcqxjnzfourfcndmdmnjseven +cjdjxmnmpqr6cqvcscdpg +onefour95 +seven9onenine +trpvv6six64kfmxqrdvbsevenhqzk9 +tsgpcfxsgsgmhd7rvfz +66788 +five26b +chcbxone1 +6mrlfkqjssdxbtzkshvc8hjltjjxthkl +four5sdsevenvztqmzkm21threenine +snxrlctcztlbntnxkpmbs2 +652nnhvz6vcgx +2zrxljdgsnnfour5fourp4 +85lzkjln55239 +51fourrnbkb4 +xbvsjmgsjdvhjpxdjhl1 +6sevencfhtbm4svgpzeight8three4 +827cclvxpdgqlhrjvrgxbxthree +8pgqr +three2ninesjztqjdhdv +538one59one +6lcmxone4ninehzzb13 +phckzkgtxdcnine8onefour744 +five61 +skbknb9qknrlszdt +fivenine6jnxfsseven7 +lfj2onethree4198 +bb9 +kfljcb5zssbrlzml +twohmspvflmxnine2eight8 +4onegfnxxqpqnfour7 +qvg7seven4 +85bheightghccknine1three +fivedpthreeseven1fiveseven2 +6nine3gzlbtvtvlnine6eightmdn +seven3seven58gzmdjmchdrzxgkgbbfrf4 +2lxbnnsixgdcv6hrqjnfhdmz +8threefiveflbfmthreegtvckvpxkd856 +jbnkkbvfivexqzm238zxvztfl +68kglf7 +9fivetzjsixkvfrngxbfbbjpd69 +ninejgz82fivenltntmfs6xpxc +fourlseight3qrrrrddzlone +seventwoqfkj2qxzddcgtb348 +xgjddt5 +q8bfhspkgmsevenninevdqmlzxznhmdlg +qc2sqqlkfrkj652xpgzjskr3four +two3tpl1cvmldrrghr +qhoneoneseven9zfivevrkkjhtdf +ddjczzpcvkksjzdcmxkhmbds2 +qnvgskzdb3nine77sdvfhfqsnv2kjffgsvz +six8three3vbpnkb +rgjmvgtgfour36qqbqznkjv78cbpdqb +fournshtzbqfourthreefive8hsbpflngrvzdhone +toneightone9four +fourkkxtzpfivetwovnvxmtkeight4t9 +tbxlvkc5vgcmdckzv +7threethree +9ntqnzpldshfqlc2six +8zs7five +3threethreentqthree +jmxjl4four5 +jnmrhzpdvbvvg9qcxjjmv2msrszndl +onezjrkeight4two2seven +32jlkhszgnkklbrsgpplphh +1gsdqlbgt5eight1 +219 +93gcgx2twothree9xggt +5fivenine1fiveplgmlffsvzbtqpb +qv7lthszlgxeightnine +7sevenmhmkcrkkq +mxmmgqp4rptkbhfourvjh +3mrmhgjmdv6pvfkbmconelmlckqkxjfiveznxg +7one1kbjnmtpskgsix99 +bsvjlfgrcvvhmnfjzktdeight9914 +csfrjtwofivebcrcmggfpfsevenlmhncfb1two +3five1vphfournine1kvfvzrtm +nineeight3vxrdvttwo +snncrseventwo5sevencjgl +ngmgxnlsjjhvqpcxjshninesix63 +4threeone2twotzsseven4prqdrnjln +fivegfmn391 +three5xflqlnrjgfpzt5 +28two +six729twoeight7 +eight11 +sevenseven1fqcsevenonekrgxmone +8rvlj62 +one3ninethree +89s6two2twofive +pnhhshxqb312 +vlnj5eight9 +5seven5eights3eight1 +6kqvkbjrfveighttwo6 +5twofour +ztnkthreefive1fivetwovqjpx3three +qs2 +2vft3 +zjr1zjpxndcsc +76threesix +1four88n7 +9mrrkjzlxdc +1ll89 +fgvcseven81 +4789vtvtcseven +2lcfbmqcqt +5sixonefive +cdoneight1onetwo96lpllgksff4hrzjkxng +gntghdtwo1 +eightninefpdttgflvr2 +8zcnfm4krxhfive67seven6 +2hxpgvxgsmc +trlvltteighteightrzkxntpdtpl24 +hkttzcmnck7s1seven +sevensnmhgdxpbksngnflnthreemlqgdvphzk5tvmzjvdzbcseven +eightpsbcshqcbppkgfxcnrgtwoeightfour6four +53xktsrztnxninehpjjjktqnsixfivefive7 +sevenonebkdseven1seven +11sixzdqbbppninehhkpxdbmlv2chddf +3one3fivesevenlljjmxvzbcnqtszvzspsevenb +1txlrnsb1vq28kpvv +1two855 +2lxzhcjl1qfslvldkpdcxf +9seven3fcqtzfive +eight4phtznrb69xqbmxmdvxnsstnine +eightfive2sixnhxcffkq95 +five28cppfive1two6 +p8 +kn8 +6hvzkkr4nine2seventwo4 +39134 +dztwone3kqlbbbknfive +xvvdhddonekcgqqqzgxhlg2seven +237rhppmlcmhsevenvnjxhzfnzbzrsdl +1kgq1qsphhpcdeightjnfsdggnlnckgfbj2 +bnvpzxtnt16two +mkhvcrfqdtwo3qfmhs +1hkjncflcz5four7bbgpgcmnv94seven +7seventmmhfgngfxt4 +98238 +3zmnhxqjqhjtptwoqtptmxfdp3seven +bkqxlrtf4 +onefive8tvb6fiveone6 +1four3seventhree5mvsbsdjz +jtjsjflv5gxvhdgvrbgbdcjjtchkvmf +sixthreefcrbqzqs7psczkdc +dc572twonejgl +2xkrpz9dfslbjvmbdkgsixhkgcvdgktq +five114 +8two85 +9fbh79mqbfsxcnn1two6 +6one9fivetwo +gsjljnkhhvqlmmvcthreemfcbnjsbkvzzsnkb7 +nine49twojdqjsfbzsixrhbjhn4 +3threesix1 +52six1twoseven +eight9dbb6hhjnt +gsnqmninefivefbqcrlneight1 +jxczccqqpxbcq8 +1ckvkgqtvqrpvdrfivejjhhfkxvvhfm +sixdxgvgglfh4qzczn8jpgqmgbzkmcdjfnhmh9 +eight7nine9 +tzqv6fivefourhfz +sixnine2vkmdnkgtgnbbkcxvvsc2bf22 +78two41 +srpeightwovrhmbnkpnsix1 +fourninemfcvlstbmflzqf9lgvlvrlff2srxpzvrp2 +kcgtwone9eight +7three1onesix1m3 +rgk2fiveeightthreegckdbd9dml +sevencx9onenineeight6 +9ninetwocb4thttbkqj +five26vrc2krtfivejpgdmtjg +2ninethree7cnxbkpvthreefiveqclhc +98seven28 +onetwosevensix9three8 +sevensix2 +ninesixlrdgpbrzs7onedrtlqpfour1 +pmvxzronexxxvbdrjr7 +15eight +crksmfive64 +onetwo6fivemqkddjfxndjfpzmeight5xzk +gq3ninetwo9 +8mgkvbpmbzpd7 +xfbvzlbpvb79 +kkbrvppqcg5 +94dkngltfzs98 +rchmjsrh7onejcknbl +9threesixxrbzjt +3963seven48sixeight +98992 +7zqd +sevenseven814htznfour1 +ninefivedfrtwoone5 +qzgrrng8six +3742zsgbqgfvzlgsgfmxql86eight +seven7zdfrhonemfhcfmclxj25three +8pnhpnsqxh +62seven +eightpfgmmdg945ksctbstnh6cdxvgqbl +932zsnvmcone1ktfqfmbnsfive +dglzhqjthreemzpm78 +one7sk13ghnmvsrprg +jdvzccvczspscxj5rzzdqdd44txvprhqx +sevengmtcflgvpzonecvmbtgknine7kngpspbg +xmqk6jmhmdtvh2kbchmsgpjrv2four +tntsjnine3jksrrvone +xfzgbzfive3ninekmnjrlqkzq96foursix +3xbcth723 +zbvtsrxh94s +threesix8mjchcpvmdgfive17xb +8eightnbbzhfhf4fiveeightmnzqldztsnfour +tkglxsb6one62rhzggrtgqxqnvjzfmb +gtj2onempqp34qfjnlxtztvjvsv +2eightzxdgc3 +32dgskjkh2 +sevendnvrcm5166 +5knxkkjh5 +fssjcvvckqjrcghcmlrkcvxl22 +2jbhdlfjtbfivetkjbjmtrgxrdmxsix +fivedm8pzjfngzfsk35 +two31ldnvx +5mfive9ggkq +vqdhfsfkrpp44trqpnkqsdxvvdxc +lkdqckshmn1rgrvtjqj +ttwoneqzmsxzskbbnkfh8onespphhmsix31 +jknbnfvbf1snjscz5 +sevenvjn9 +ninetjzhbdjsffthreecfctlsfrz2 +6ninedqmxfqxssbhrrffpdhjvhqtkxfour9 +6tlrxcvhtllkrhjxqt3two3 +eighteightfive79 +5sixfive7bjlkninefour +xrgrxsvm5bhcmzggbkrljnssxgpgdlv2four8 +1mxlnrtsjgdlcsncktrsfour +8xtkgjjbtjfnc62vsshkjp +91twoninetwo +ninefour5nbnnzhtfiveggrjf7zqzblbml +sixfour42rtbvlpcnv4 +oneczchdtwoglj9279 +jfvv5rdkpzldsxh +ninexghzhdqk67 +gnllbntksevenseven7sixeightvgnfd +qzqjxcqrs8fivesevenrnvnq9nqnchpjpmfkgtjqcsvtv +6sixsixspzppcstlhqlssvt +4hhfndc17rjrrzvbjj +xm6sevenseven2fivendnn +threesixd6nrxmxgcbjfrtlmpkjnoneshmrn +ncnpmsixfour4two +pqvz9fourkkmfvzbjqbfour +szspfourhsqkfkfcndcnineone5khdb +six29sixlkfbphnrzcjl +cdtwonenine73 +mtlqpjcqcseven29 +8onekdvdmjbmbjtdngxhjjchdv7bvsbjqszlhvht +fivevqnjsvnhvnine1kxcsjmzx +6six32twonine +nnsix5fcsrdvoneightcn +11rzzpnrtnsevenmvnhgrsgngthree +3fourjfonefoursevenbbfour +fiveclfour7seventwoeight +4zvzlfive7hkzhbqrleight8 +4eightthreemthreeq +66nine +dlnm59eight +fourthreexvgpp7 +85sixfnrjqvmzmtbpxttrn +one2seven +63fourztwofdssrbjbcvhltg7 +fdstgbg1qdznxnvftfvfnr6djj +5dcmbkrlvsrfvbdfqfour +xp6fourrcfxdnktdctwofour +9three4threeone6 +8pjzglttwofive9 +2gsix9sixthree +ptwofive3t +4hqkqzjkqddnnhxkrfnhgbkthreethree2 +threedthcktqkcthree22 +2gdlntwoseven527tzxbzkdjbv +6hbxrgxzcnlbnz6 +ds7mvjbvfkn +sixrpd7eightfour6 +qfoursspgghsflcrvqeight6 +94hxsj5 +bhhhnfnnkninexnjtjxrphrkc9mdmjp +pbttrcplcsrldftsgk4991threepcbhxxfrgjddpz +6four1fgjmjcnj3nbxxnnxhjhv +6onefourshbzqgxjnhpmz +9onedvscbrdj5 +jgjrpgcjztvkqseven8sznzl16dzrhmhnq7 +ctlbzmcctmkzpqtsdztbmllqnoneoneonenine28 +znkkbdsix23msxkcs +seventwo365one2nlmlbgh1 +mtzthdjtonezfsixms5mxjpftkd +onenine8ksxnslf16njqldnnkjx +pzjl78nztcgnj211zxnmhxzrjjh +twozkf3fiveshpt +seventwo387bnfsix +2xvvtzthreexjfxxg4seven +8vgjxlvjc4twoglhmpgtsbfonethreeqbpcfbmz +mhlgjlbm68rmeightnineone +threezhldnzscqfour9seventfkj +cnprmbrprlhmonesixlksvgzseventhreehdzh2 +smp215344two +5nineonefive8sevenzvlfrprdq +rvf583 +four8nine4crzpff +rhnsqgnncnjzhpx297qmj18 +oneqlx716452 +mg3zptnqbm +4ssgqpsevenznzlnnsbjpxkfvlkrjckxrhqsevenzrgjlkcffb +six9fourshjkhspkcffiveeightqqkvktvjsmmnfrthree +sixdljbtwoninetwo6ninesevenn +kcjqfvldclrmsd52qn +352one +7nine7 +9fourjcveighth +5twoz73 +bbsvvbjc1one5gtts3nine +four2six +7nine5 +nxjfthslhc2sspz +69onethreefour8nq4eightwoqh +8mfpmmthree6eightbksq7 +98bzjlfjm +six541threepklngxmfthreevvkdgxpfour +seventhree4ninesix +7ninejkcxsixsixlvffhbkjkfive2rdnd +9flxnpfddx68mfgnkkdqlonenblbszdvvbfour +threemfk22vf +threeninemh6 +88six +4eightrtthree +4rkjjgppc2lkvnhbnhffnrvqsj8 +65gdpxxz +5fourfour6 +six9m9eightfour +21szgzbcg +krzfvtsgp3 +six2threethreebskteight4twoeight +58bjrnzbqg +8eight4four3 +four6qcrnthree2 +j8nine7gqlvtqxlzdtcbonetwo +sixvlthree55seven37 +48sevengfgzczbg82 +eightsix2qsqfgmsrscfive +zpbxnxbnmjthreebmksffpkd7seight8nine +vfvhcvnsevenkbnhxxhhc3csk79 +147threesixtwo +hldlvjninehnqxd7fiveeight7sixkkbmjxnjf +six3gjbkbpgzdszl3f +donethree3seven7xvfgnthree +3lgpzhzmfftwoeightjhlngfn6five57 +5fnfl6vkncfsrrrsmxsl +7ss +five6gsncdxsixnhphl85 +3rklhfbkhfour884 +xsjseven7 +58mxlmsevennine7cssix +1jnbbfourv +r21kstwo +zrqlghpcsixeightseventlnpnxpzv3 +887 +zeightwo3xzjvmqxpjtbvj +1brtqrcvbrrqsqbpsl1sevenseven22 +4qcddseven +mg3xxlgdkblgg1htdjtfthpv +9eightwoslp +ggqvtwonsfsevenfour73ccmzkz1 +7rfjfqh9nine +gnpnrzzkdtfcseven45hvv +34one1 +xzkfl9fivebxhcxrmfzszonekgzcvk1six +8pzscngsixsrtjqqlk25ldczspzfdxrzhh +zktjxcb72twosix +9mvtk5jqhtwo +two82klbfdf +xstrdlsmx2onesevenrmgpjlrtfsfourfive4 +four1djgssbq8sixfive +j1jkgzrjmnfxonejsvgzznsevenprbqbjn +two65ffglkhgqb8xdxmldhtllj3 +lqqqsrjf27four9dgpjcgz +fptvlnfzpfm99eight8five5xtgqt +sgrdlpplhb2six6 +one4811eightrvkbchcngmone +bcsv46dgxglfxsrn9two +spshpxtwo6c +1sevenrtbxc23 +sxppftvvfx4qvhbrrpcgfb +rmcvzcl8dj4ninenpgjhlblbeight +threeseven7lljggng5two9 +four47bnnine2chscshsrone +kxtknjfourjr1pxxkqlxjsix9 +sixtwoseveneight8sixthree +8djjznt4 +pj48hjlqfour7 +onedvpqsevensncd5fivenhftwo +twonls1fivednlbmttzszjczdjfqcspxpt5 +11hbdpbbrjddrmlghs +7seventhreeonemsszrjxd +4smtgkzzrxlcslkhlnrft14fbtznvq5six +rdv9four39 +four8fourvthreebrnmqmhb +msgrzsdxfxfivecpjqxtphffm3zvgqxkrtwo +1sevenseven3vlcmzlgseight3 +three1bkmpjqxsjmjsmlvhfrnine +213sevenfkslf4ldg +fivegflgdlqrfkmh81 +jrkqklq5sevensevenddlzbljvf +5zjxsxqpthreeone +fvh6 +154xqxjfvt +32fnpjclfgjplmkf83 +6nine785six +5one9fiventcxnine37 +24seveneightrp +hbd6two1knqnfgcftq839six +6eightzzqghd +fiveptonesixnkslhvpkpsbfltfqnnqjfqjlhthree1 +ztdjmvrspdtbqsffive8onetwoblslmlxssjks +876fivenhzmftccrcgvqnssixthreejhg +jpvxbhbrv55ninefive1three +ndpdvz2sevenn +dkzpptsmbfhnnrqqtwodllstjtd87 +eight1fivejftckmgxmzbsq416one +2q16ninesevenfour +thdst7fourfivetwosixgfjsnvftone +ztwone8tjlsrsqpnqsxfll9five39eight +threefive757nzddvxh6three +71two +nbgsnbdvqkqr6nvsqhr +four487eight +mgqtnlqxpvbjrgqffourzbtvcxj4xht3twoone +fourninefivefive97hzfxr +4dhrgdrsr4onejzgs5x1 +cvnmzrdmtwotlvk4five +7sixzghv5rxlbslsninefrsxht +6lcmjnckbjrtwosevenvmtxcnfvkfqvgzp7 +dvndcdmtfxbtznqjrprksseven6twosevennine3 +threethreeone11ninesixeightone +dvvcbsix96cxhgjpmqdsixone +five4sevenmnzgktwo +9rlsseventhree6xhtbxdnn +bxlbjtmone15jsixeighteight +1fivejlsevenmbbfksks +eightsix35fourgcptzrfjhkrnfbbznine +seven8sixfive72eightqjmcfjx +seven8616xszttt3seven +53twoone22 +onefour9ninetsrvczrnbsbrfstwogkkzs +zpsplntwoeighttwo49three +twoeightseventhree4 +eight5twofourgpnlsmppt1 +fourccknqs7dndlqhbsdhfmqgr1lvnpmxjtnkshgm +five9ptrnrfdfgdkgxzlr6three +pjxgrrgmfk57hdgclbftr +gdcxzqldf3z2prsmfivenlklnrtbhfst +999 +85lctfptljktwobtfnfrttlxrvlfvdnbsm +172 +tmrcrhkvnfsixkvzhjxmngcrfmkfpzqcfivermnkxlfive7vtvvmmnfsz +sixseven6two8kfrpjksixeight +75pzmmlvsjn9987dftrvbf +4z1fivethreefive +foureightrdnnpxlnn32knstrmxg71 +svzljxbj113zpnpshmnf +hj2hmvp3eight38gxngvkdmnzzzcxjkl +gnrhzjzvrzsix33vqnnrmgtdvvkbsmglckd8 +onelgjfczsevenninehkhkxcskvcvnncbpj5 +onesevenninethree1 +dqqnkzfv9bnine +8sevensjtppblkhh4seven +ninekggzmfsfpbfnvtv3sevenczrhzztlsfour +eight59hkthhk +blskkshczzone7 +6one4pffxsgmc +4lrbncnn8 +314ninefivesevennine6seven +threeone3ccrfthz2seventwoctg3 +bfxknbtwortcfgnrcqsvqfcrxzmlmk83krb5 +fiveone8 +nine6661 +eight8884zbdzcsseventwonexgg +16ninetnzftqzlpvgd2 +jxfccks1 +sixtfvgpjrvpr6pmsseveneightvbrxnq +6eight5 +tdbs3cbfhglpfdnxlt +nbcgkzchlj6pbcx4 +661 +jcjggnnn1 +eightdbtfgpfivecnlmnkrpgf1nine +33bngjpkhgfqp4tl97one +6rkmbdjztnfninecdlhnbnf6ninekmvxrqzbl +465 +nfklpzppbq65threeeightsix9 +2gddbjlcdkx +kclqnmpsixsix4fivepb +stvlnrfdgcslqmveightbmbgmnzlrq8gfjndq6rsv +sjzcfxn7hs +oneeight32nine2ghx2nine +2lhx9 +6eightseven9 +three9nineone7five +1nrmk +dccbdjqhvfoneeighthjsmfp89hheight9 +sixrfjshf9nhzngkgeight +zsixone5fiveeightsix7 +vkthreesevenq42982 +2h +8five9jkvqtwo9 +lkxvfm7qdhvnkt +8jtttvnmxt +1nine91sixsixfour +8threenmffourone +two2zjj39seventhree +c4eighteight7hssvhvlm2six +9eightfivezmnknpl5eight8seven7 +threenine4eight14vzmmhczfhxppqs +seven22fivehgtttqthreeseven +5nineeightthree +hfffcgvnkrp5threevccpjmnfn3 +19seventwonelj +4nine8 +2sixfggckcdt91three6 +9fpztvd +pbm384 +rqxzzqtlsx8one91tjmqtcmkxhplcmns5three +four13sixgreight64 +seven22four +2six946 +nine1767three +mdpvkhvbqstqpskhdxgbzt2zsdvsclhlzbcskckz +1775 +pgdbfmvffninezhthree6qlrdkbvqthree +29fourtwo +fiveone14bsnrd +loneight1fourpvcgxjsscssftbfxtkq +fhtwobfnmvjxqzbzctxseven8lhxv +ninefive67rqvgnbt +2fivesevenfive4rhpvklfjz9ninezszc +616vvbxfjplsppgpx +rttqfddgone3rcvdljn88jqrlbdmxgv4 +8282eightseven +mkhxlkksgsjrczffqmzzsevenv7seven6zv +5hvkqdnpgtzfjbqrtzx5tncqbmxjpqmmzcf9 +llpkjvonesixlnf7one8oneseven +five65qzjtwo +xhcjxj1jghxktnmbxml5bbpklmdcthreedzt +h3sevenonevdnjp5zpzfmch +seveneight1mrrkcpbqd +8one5rn +qbffrljhl48qtg1jhngrrbsdhxl6 +ndc5sixcxlcgxpbstwoqfffive5 +fpfsqrzfjthreehzbcmhss4fivegbtwo8 +nine2two +mddbqdmtcjrkqhv2dxfvdg8eight +jbrkj2llgmg36twocvhmxnb +mhdbsnine1 +four1mcvjdkmthmhcsz4 +59fbsnx7qrtclvrkfoursdpmhdz +6d6four27zeight +1sevenvjbqrd +9fourlmjqn9rd +gfxsrconexrgdzrhzcsh4six +4one5jhsztrspthree +four5eight2 +onebtwo4eightfourhkrsgeight +51kjcqqxrjcnnine5 +kprdj25twotwovsdhzgmc +htwone4344five1 +dvmkvcfcpsqrh1 +9twogzkc572sixhktmslseven +fivefive7qnll7seven +svbpx64n31onevzjhhhl +8fbjkdcttwofourtwokj +6twotwo5zkcnxczszfive32 +mbfcmsjmg9hmqngl +ninesixsgnfzsmbgrlxbxjstkmmfxc5 +two8fourthree9sdxzvpgseventwonez +td3two +onespktrhrktzrcvdgqvdxgbgctdhjmm7shqcbzvfxhzlt +5zfpfksszthtzxznxgkrpc +8xvmsseven592ssmzjdmz +64fkcmhmqdxnseven +vdhkbktf1seven5 +tzfvfour3three +fourl7four +dkbbtpd5qbqgb +qzdlttqfhn8chxxbnplt4 +qmd78hqdqxtx2rrdvkvvfourtwo +91mmlbnbs5peightmznzhskfjv +2rftqscv +4oneonenineddktjvjlhone +ninetwo5four +1f36xndmtmmbpx1qzqmdkpbp3 +hxsevenjg6fiveeightwodps +4mrndsix18 +r6klzqlz +ndbrrsvp9 +sixsnkh1gvcnine5 +bsstxkninethree5ktwo7five +fiveeight9five7 +3nine5sixkqlfrpdpcfive3 +lrrqkznlrcmbvdr6 +8xklphsevenonetworjgpjlrllgqcrxhlskfhpq +fourmsthcgcxjsixcvnvninebdhttzm85 +8gnqnhptgkfivesix +8onenine +fivesixone3kpzvnbrjf +9four54 +6twothreefthreefivetx +4nxqzkkbgvthree7qxdhtpjv +six5three2ninesevenfive +3cqkmxnbkkh6tnszgzxqk +82tzncrpvjts7 +39one5fivenine +51jrdstpqnjdfbbtjz9three6 +nqrmg8 +7threesix +one6fsxsflbnfivesixthree5 +bxbonethree55one +7onextpttrflql6snmbdtbnvvfive +threeklkjkvqzone2vhzsqdg +eight231eightsix5 +cflpngxndfivefiveeight4rjrsfrmmtwonen +three8sdone +nine4nine +two2dxzjxkbb2knvg +bplttc53 +69hqtkfivesixtwopffgltlsj1rhhslz +6fbg1scccrkjjsnnhpqmphksevendt5pcdl +9onesixsevenfmmxtkdzone +1onetwocrhcqhrxt7sevenr +sixeightxjjqndfqtwo35 +9cqvtmfsqrfqhhbkjgbdk +foursixfrtkpcbxgxx5one +429three +84mxhzmbdk8 +nine79 +xgntrzninemhxtqnine4ltvx +four3seven6qhrzznzctwofour +5h +16eightninejmddlknrxfone +3gjpbjdone +654twocbczrzjnhkgdpqdd +2xkptbxsixnprkhfslj +19mlqcgbfpdonegdvzghjjb +dnslxvmdlpmlsggq1one18 +lbxnz487vjlhhsxvcl +sevengvgkk8mfbplfshlhqnrvbtwofour +djfptvqgmkqgnzdvstwomzpcxfthvzpfsglc7 +1nlsztzzcbmqseven4fourdqq2 +cqcvkcthreeflhbcsbddg8 +sevensvtbtdkfkxzbfqznlh1 +sevenksn54 +4dzv6 +lsixninesevenrxn2seven2 +bsix2hqsvvvxvkpbg +hplfzmghmbddz2htfkcfblqcdzfrvqpssbxdone +19sqgxkn8four +64ksmvcseven1748 +oneoneonedlmsdc1mjn +7218 +3xdskntkmlcldqjgxbgx38rkbddntz13 +tnqnvshmhrkxbjvxcvdhmx1 +twocrzgfourbvtkcthdkrqpbsevenkfv8zczzszpf +fdkdqfgbgnttlpnjrvnine6dvpdhtchfourbv +qqrznptxjseven9twofourtwo +hpdrqkonetvgfour5onepdk +6eightsixninetclcsllxknspxfgxmlxqddvone +twosixmcbbjthreekclp3 +kklgzxnk2eight +zgmnine8oneseven +gmcgzggsixvjzzgrs3gbzmxninezrlcfsphzhseven +7sevensix5fivefourh +rh1qzxvcmqjmtspknine +12threecjltwozchdsfnkmchhgv +vktfhngfb391ghtnrqfourfiveone +9eight46xdxkqtkflqdv59four +839sonesix2btrctxfm +hzpjkvqdfg6three2twocsq8tskmdnvdl +5f +dgmvxqbpbjpbronefivehlf8ls9four +sixm7m8three +vgppvrgdlb26623csvkhsd1 +2hjfccgbjnhl8176xkpftwo +seven12vgdnrvmmp1 +oneoneone7eighttworvpvsjzl +738one99six +sixrjm3 +15six44qndpslhnine8twonehkb +912 +3blcn +eight81fivexsbkzcthree +kdqlzbnbnkh2mrpz82six3six +sckfhxxjxfivejgtlmdhc3threeoneightrc +znjgdjd8six6onesevenfour4qpnmvtdnnf +7gnbonesixninehreightlmjone +six3fhhlfgmdlgvhvqctcrxxh +982vbjgptnc +sgfnlppbvfzrmntwo9ggqzsixsixxgqvjvffour +ninenine8 +kzfmgls5seveneight2 +8ninefourzrgjgrqkxrmjlzqb5 +eight7five +fbjt4eight7rnhvfkl5knpvjhqdhvmvczxbvrx +35five +7gzjqslr13qsqxltsninetwoxmhgzhl +threefour2three +onethree45 +zvt8nvxctwo6 +sevenkfournine1drrmrmljsclgbgsd +jfcnrxjjnbsrlblzpvxc84seven3six +sevenonemt7eightseven6 +sevenrddndpj85fzzn4zhvthzp +78zfdbmrfgeightgjtqnx +ninerdqndgffive2dlsblldpfthree9 +lvzlfqzsixeightkqbnlv5njjsc4plh +jsqhmbt1xvmkgfbghzdplkxdmgvcrkbngrjlpfj +lfnvhdxcx7twoq +five85 +1two3two22bdpbskrlph +ninefc31fnhsnhf5 +2cxnrgtlvfvmvvmnfjllshmdvvfc48sevennjfk +xbglffkvrzsmz1 +czlrrchbkhmz5qkdbtcjlffd5 +eight65sn4 +7seven2four99mlpskrgoneighthm +9kfpfgzdjdgxjkltdkbkeightmxteightthree +9bdsbeightjvkrmhdkghfive73four3 +xeightwoninehcrsdbnvtwovtbkhtxktjslsix3 +15fourlgrsk +5xjqd9 +four8ttpzxpnrqnkz1 +fourvbfhg1rbrngbgfj6nineldqfxvrx +sdpnkkfive9twodz23 +sixone4twoktcx +8rjgbnxsixfivebsnthree2fivenmjxx +fourddtxngtd4jvlttthhmz +2nine95four1six9nine +2gmxtrrkftjfnknknineqjqnscctfourzrqdrgs +flghzhfgmn9tckbpmkgsix9 +jg9svtdrmlzm31rsrqvc4mggcj +eightdpvfplptwofdgrkstvh8qseven87 +eightfour2fourvzksqhxmlkpkfktmdzpmthreetwonehv +nine86kzqvkjqtjfourmpcggd8 +8nstjmtmstcnffnksqh +bvgcmbcrgqfourpvs5xs +8three12 +5398db9sixvnvcrztrqz +7one62fourlndnshczz522 +qxrhp5eight183tfour +fhpzgkt81two57 +ktlfdnbone6 +stsninecqxpfmdhk41vlpq +eighttqcc5fqnfour84 +25gmh12threeltfnfdrxhh5 +57four +mqgdhfour67 +37ninetxkddhfive +rzrsskzrlzjbcgthreeghbqhdpxfvgjfqclcf4 +fourvone2vbpltlrj +xz5four3nineseven +1szrhcmzkftwo9eight2ltjmgjzcblzone +zlnkddtgsb1sixsxvjxgxp2 +26sixpzpsixtwozqff +seven99fzqxfmttfgxm +9twonineonefourpttbgkxt8two +fv9 +5qcmjsfk6zxjld1 +fkjstnvmchsr9q699 +nine78three +4rcs6bhbbgzhsstwomnineksbxfzj8 +4fmblhqninefive6qbkm +zsgjbfrjfour1sp3 +zbfeightfive1oneonernfd +5bxtfvzczbhtzfourqglqdxsc +f9five7five8ddvseven +23bszpdxfjmzg +fivegctmd3vlcgfgnine +63hbdkxljlq +64eight6eight6gxdpmtnbfone +28xcbtt1 +1six5 +four289 diff --git a/input/1/test.txt b/input/1/test.txt new file mode 100644 index 0000000..41aa89c --- /dev/null +++ b/input/1/test.txt @@ -0,0 +1,7 @@ +two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen diff --git a/input/1/testlong.txt b/input/1/testlong.txt new file mode 100644 index 0000000..dd3fa0b --- /dev/null +++ b/input/1/testlong.txt @@ -0,0 +1,14 @@ +9sixsevenz3 +seven1cvdvnhpgthfhfljmnq +6tvxlgrsevenjvbxbfqrsk4seven +9zml +52sevenone +41onevfsgvssxnpsix38four +15ninedzhkpfstrscggbqhktwo +rxbfsvhpnjvsixmxfhhmvdvg26rgrfj43 +gcbq2sghsv4fiveeightrlhchsfs2hsrjknfz +tworgqpdjzrzf7one +fivefive18 +sixfztrcxmbzktwofour3fiveeight +2g4stjrjjmbngvljfvg24 +gthree15fivemzpnqgttcq1 @@ -0,0 +1,16 @@ +#!/bin/sh +day=$1 +token=$2 +inputdir="input/$day" +mkdir -p $inputdir +if ! [ -f "$inputdir/in.txt" ]; then + curl \ + -s \ + -o input/$day/in.txt \ + --cookie "session=$token" \ + -- \ + https://adventofcode.com/2023/day/$day/input +else + echo "already got input!" +fi +cargo run --bin main diff --git a/src/bin/cli.rs b/src/bin/cli.rs new file mode 100644 index 0000000..49c35a8 --- /dev/null +++ b/src/bin/cli.rs @@ -0,0 +1,20 @@ +use clap::Parser; + +#[derive(Parser)] +struct Cli { + pattern: String, + path: std::path::PathBuf, +} + +fn main() -> Result<(), Box<dyn std::error::Error>> { + let args = Cli::parse(); + let result = std::fs::read_to_string(&args.path); + let content = match result { + Ok(content) => content, + Err(error) => { + return Err(error.into()); + } + }; + println!("file content: {}", content); + Ok(()) +} diff --git a/src/bin/daemon.rs b/src/bin/daemon.rs new file mode 100644 index 0000000..1937da4 --- /dev/null +++ b/src/bin/daemon.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, daemon!"); +} diff --git a/src/bin/main.rs b/src/bin/main.rs new file mode 100644 index 0000000..47f2774 --- /dev/null +++ b/src/bin/main.rs @@ -0,0 +1,117 @@ +// This code was made to try and touch as many different rust concepts as possible +// To make it faster I would probably use slice equality somehow +#![feature(test)] +use std::error::Error; + +const WORDS: [&str; 18] = [ + "1", "2", "3", "4", "5", "6", "7", "8", "9", "one", "two", "three", "four", "five", "six", + "seven", "eight", "nine", +]; +const REVERSE_WORDS: [&str; 18] = [ + "1", "2", "3", "4", "5", "6", "7", "8", "9", "eno", "owt", "eerht", "ruof", "evif", "xis", + "neves", "thgie", "enin", +]; + +#[derive(Debug)] +struct Node { + char: char, + children: Vec<Node>, + num: Option<i32>, +} + +fn build_trees(words: [&str; 18]) -> Vec<Node> { + let mut roots: Vec<Node> = words + .iter() + .map(|w| w.chars().nth(0).unwrap()) + .collect::<std::collections::HashSet<char>>() + .into_iter() + .map(|c| Node { + char: c, + children: vec![], + num: None, + }) + .collect(); + + for iw in 0..words.len() { + let w = words[iw]; + let mut node: &mut Node = roots + .iter_mut() + .find(|n| n.char == w.chars().nth(0).unwrap()) + .unwrap(); + + for c in w.chars().skip(1) { + if let Some(idx) = node.children.iter().position(|n| n.char == c) { + node = &mut node.children[idx]; + } else { + node.children.push(Node { + char: c, + children: vec![], + num: None, + }); + node = node.children.last_mut().unwrap(); + } + } + node.num = Some(((iw % 9) + 1).try_into().unwrap()) + } + roots +} + +fn find_match<I: Iterator<Item = char> + Clone>(trees: &Vec<Node>, iter: I) -> Option<i32> { + let mut it = iter.peekable(); + let mut node: Option<&Node> = None; + while let Some(ch) = it.next() { + if node.is_none() { + node = trees.iter().find(|t| t.char == ch); + } + if let Some(mut r) = node { + let orig = it.clone(); + loop { + if r.num.is_some() { + return r.num; + } + if let Some(c) = it.peek() { + if let Some(n) = r.children.iter().find(|t| t.char == *c) { + if n.num.is_some() { + return n.num; + } + it.next(); + r = n; + continue; + } else { + node = None; + it = orig; + break; + } + } + } + } + } + None +} + +fn main() -> Result<(), Box<dyn Error>> { + let trees = build_trees(WORDS); + let rev_trees = build_trees(REVERSE_WORDS); + + let mut sum = 0; + for line in std::fs::read_to_string("input/1/in.txt")?.lines() { + let left = find_match(&trees, line.chars()).unwrap_or(0); + let right = find_match(&rev_trees, line.chars().rev()).unwrap_or(0); + sum += 10 * left + right; + } + println!("{}", sum); + Ok(()) +} + +extern crate test; + +#[cfg(test)] +mod tests { + use super::*; + use test::Bencher; + + #[bench] + fn other(b: &mut Bencher) { + b.iter(|| main()); + } +} |
