From 8bee5bd9a32a20eb8c28918b7d10b6a3c9a2880b Mon Sep 17 00:00:00 2001 From: Nikkuss Date: Tue, 2 Dec 2025 20:48:58 +0400 Subject: [PATCH] init --- .envrc | 1 + .gitignore | 3 + Cargo.lock | 226 +++ Cargo.toml | 16 + flake.lock | 112 ++ flake.nix | 43 + inputs/day1.txt | 4068 ++++++++++++++++++++++++++++++++++++++++ inputs/day1example.txt | 10 + inputs/day2.txt | 1 + inputs/day2example.txt | 1 + src/bin/day01/main.rs | 69 + src/bin/day02/main.rs | 82 + src/lib.rs | 1 + 13 files changed, 4633 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 inputs/day1.txt create mode 100644 inputs/day1example.txt create mode 100644 inputs/day2.txt create mode 100644 inputs/day2example.txt create mode 100644 src/bin/day01/main.rs create mode 100644 src/bin/day02/main.rs create mode 100644 src/lib.rs diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fdf11bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +/.direnv +/result diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..16a33c9 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,226 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addr2line" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aoc_2025" +version = "0.1.0" +dependencies = [ + "color-eyre", +] + +[[package]] +name = "backtrace" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-link", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "color-eyre" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5920befb47832a6d61ee3a3a846565cfa39b331331e68a3b1d1116630f2f26d" +dependencies = [ + "backtrace", + "color-spantrace", + "eyre", + "indenter", + "once_cell", + "owo-colors", + "tracing-error", +] + +[[package]] +name = "color-spantrace" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8b88ea9df13354b55bc7234ebcce36e6ef896aca2e42a15de9e10edce01b427" +dependencies = [ + "once_cell", + "owo-colors", + "tracing-core", + "tracing-error", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "gimli" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" + +[[package]] +name = "indenter" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.178" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "owo-colors" +version = "4.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c6901729fa79e91a0913333229e9ca5dc725089d1c363b2f4b4760709dc4a52" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "rustc-demangle" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "tracing" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d15d90a0b5c19378952d479dc858407149d7bb45a14de0142f6c534b16fc647" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a04e24fab5c89c6a36eb8558c9656f30d81de51dfa4d3b45f26b21d61fa0a6c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-error" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" +dependencies = [ + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +dependencies = [ + "sharded-slab", + "thread_local", + "tracing-core", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..9eaa6e4 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,16 @@ +cargo-features = ["codegen-backend"] +[package] +name = "aoc_2025" +version = "0.1.0" +edition = "2024" + +[[bin]] +name = "day01" +path = "src/bin/day01/main.rs" + +[profile.dev] +codegen-backend = "cranelift" +opt-level = 0 + +[dependencies] +color-eyre = "0.6.5" diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..9991e79 --- /dev/null +++ b/flake.lock @@ -0,0 +1,112 @@ +{ + "nodes": { + "crane": { + "locked": { + "lastModified": 1763938834, + "narHash": "sha256-j8iB0Yr4zAvQLueCZ5abxfk6fnG/SJ5JnGUziETjwfg=", + "owner": "ipetkov", + "repo": "crane", + "rev": "d9e753122e51cee64eb8d2dddfe11148f339f5a2", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1764642553, + "narHash": "sha256-mvbFFzVBhVK1FjyPHZGMAKpNiqkr7k++xIwy+p/NQvA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f720de59066162ee879adcc8c79e15c51fe6bfb4", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1744536153, + "narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "crane": "crane", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1764643237, + "narHash": "sha256-6Ezx9DqVv5UZ7DBK9rcNwBuQUENFyWPS7M09I+FvNao=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "e66d6b924ac59e6c722f69332f6540ea57c69233", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "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" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..00054b2 --- /dev/null +++ b/flake.nix @@ -0,0 +1,43 @@ +{ + description = ""; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + crane.url = "github:ipetkov/crane"; + flake-utils.url = "github:numtide/flake-utils"; + rust-overlay.url = "github:oxalica/rust-overlay"; + }; + + outputs = + { + nixpkgs, + crane, + flake-utils, + rust-overlay, + ... + }: + flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ rust-overlay.overlays.default ]; + }; + craneLib = (crane.mkLib pkgs).overrideToolchain ( + p: + p.rust-bin.nightly.latest.default.override { + extensions = [ + "rustc-codegen-cranelift-preview" + "rust-analyzer" + "rust-src" + ]; + } + ); + in + { + devShells.default = craneLib.devShell { + packages = [ ]; + }; + } + ); +} diff --git a/inputs/day1.txt b/inputs/day1.txt new file mode 100644 index 0000000..2a18d76 --- /dev/null +++ b/inputs/day1.txt @@ -0,0 +1,4068 @@ +R11 +R36 +R1 +L45 +L12 +L9 +R11 +L31 +R29 +R29 +L41 +L40 +L35 +R18 +L15 +L25 +R45 +R22 +R16 +L21 +R35 +L26 +L17 +R6 +R41 +L16 +L9 +R48 +R18 +L46 +L45 +L12 +L29 +L35 +L15 +L40 +R8 +L43 +R20 +R35 +L30 +R12 +L21 +L12 +L4 +L9 +R50 +L2 +L13 +R57 +L38 +L85 +R58 +L47 +R74 +R63 +R21 +R26 +L72 +L81 +R72 +R9 +R73 +R27 +L54 +L1 +L99 +L46 +R87 +L72 +L34 +L81 +L72 +R72 +R2 +L17 +R15 +L58 +R70 +L12 +L7 +L82 +L10 +L29 +L81 +R81 +L72 +L83 +L76 +R59 +L28 +L35 +L72 +R44 +R71 +R42 +R27 +R51 +L92 +L39 +L69 +L92 +L47 +L61 +R845 +R255 +R46 +R32 +L578 +R21 +R379 +R914 +R86 +L478 +R598 +R280 +R93 +R33 +R70 +R45 +R168 +L9 +L666 +R548 +R18 +L91 +L9 +R52 +L25 +L27 +L12 +R41 +R71 +L98 +L2 +R752 +R98 +L25 +R52 +R58 +L65 +L96 +L540 +R92 +R80 +R87 +R29 +L62 +R40 +R45 +L25 +L20 +L410 +L90 +L43 +R43 +R76 +R24 +L38 +R99 +L909 +L81 +L11 +L60 +L92 +R74 +R189 +R29 +L78 +L22 +R35 +R28 +R37 +R22 +L22 +L16 +L84 +R89 +L97 +L53 +R52 +R9 +R25 +L80 +L83 +L27 +R6 +R73 +L90 +L21 +R78 +L93 +L60 +R72 +L10 +L690 +L50 +L66 +R16 +L753 +L96 +L93 +L74 +L363 +R85 +L6 +L14 +L86 +L14 +R65 +L485 +L84 +R218 +R34 +R61 +R38 +R67 +R22 +L22 +R72 +L67 +R38 +L85 +R3 +L33 +R72 +R50 +R321 +R84 +R645 +R27 +L844 +L83 +R51 +R967 +L15 +L29 +L474 +L43 +L657 +R31 +L74 +L35 +R32 +L96 +R102 +R7 +L43 +L40 +R726 +L10 +L866 +R766 +R49 +R51 +R52 +R59 +R47 +R83 +R59 +L45 +L35 +R69 +R111 +R21 +R79 +R482 +L97 +R715 +L646 +R88 +L71 +R29 +R21 +R29 +R877 +L81 +L46 +R35 +L63 +R28 +R1 +L1 +R59 +R741 +R26 +R56 +L848 +L18 +L19 +L59 +L38 +L106 +L94 +L35 +R80 +L60 +R23 +L25 +L813 +R230 +L68 +L73 +L19 +L41 +R628 +L27 +L46 +R46 +L18 +L44 +R21 +L276 +R17 +L7 +R39 +R68 +L72 +L32 +R4 +R22 +R78 +R42 +R43 +R344 +R47 +L71 +R80 +L30 +L55 +R663 +L83 +R18 +R1 +L99 +R15 +L15 +R65 +R335 +L47 +L65 +L788 +R90 +L90 +R415 +L48 +L8 +R41 +L41 +L59 +R904 +L4 +R94 +R6 +R18 +R10 +R34 +L37 +L467 +R63 +R39 +L80 +R120 +L28 +R28 +L22 +L66 +R37 +L52 +L97 +L16 +R35 +L30 +L79 +R41 +R49 +L86 +L64 +R50 +R761 +R39 +L784 +L908 +L185 +L90 +L466 +R36 +L3 +R39 +R89 +L28 +L33 +L1 +R547 +L13 +R3 +L75 +R72 +R92 +R53 +R81 +L16 +R687 +L83 +R15 +L46 +L4 +R49 +R72 +R33 +R679 +R723 +R46 +R19 +R48 +L10 +L938 +L65 +L819 +L16 +R91 +R46 +R63 +R20 +R80 +L99 +L99 +L20 +R37 +L919 +R54 +R46 +R569 +R887 +L456 +R56 +R38 +R205 +R87 +R14 +L22 +L78 +L709 +L3 +R49 +R54 +L91 +R70 +L186 +R81 +R35 +R77 +L341 +L59 +L77 +R20 +R80 +R46 +R85 +L82 +L49 +L89 +L11 +R39 +L60 +L76 +R97 +L63 +R85 +L86 +R64 +R55 +L68 +R13 +L80 +L420 +R80 +R90 +R30 +L47 +L62 +L42 +L477 +R28 +R287 +L76 +R89 +R733 +L354 +L31 +L30 +L18 +L82 +R40 +R859 +R26 +L35 +R91 +L699 +R18 +R82 +L827 +R92 +R52 +L17 +R76 +L9 +L54 +L99 +L14 +R71 +R786 +L94 +L68 +L95 +R35 +R65 +L56 +L744 +R50 +R352 +R98 +L85 +L52 +R56 +R81 +R90 +R10 +L36 +L94 +R30 +L10 +R70 +L60 +L8 +R97 +L92 +L80 +R28 +R37 +R71 +L48 +L89 +R54 +L26 +R56 +R63 +R37 +L47 +L53 +L42 +L55 +L21 +R94 +L167 +L9 +R123 +L28 +L514 +R19 +R5 +L786 +L519 +R8 +L6 +R87 +L933 +L55 +L1 +L621 +L35 +R56 +L46 +R46 +L69 +R56 +R50 +L406 +L731 +L37 +R53 +R684 +R87 +R58 +R64 +R67 +R24 +R80 +L98 +R37 +R27 +R569 +L610 +L81 +R24 +R23 +R29 +R48 +L48 +L60 +R10 +R586 +R14 +R50 +L30 +R88 +R67 +R81 +L88 +R82 +L97 +R97 +L756 +R62 +R288 +R61 +R31 +R14 +R91 +R43 +L91 +L43 +L4 +R15 +L711 +L39 +L361 +R98 +R15 +R60 +R7 +L23 +R43 +L140 +L84 +R24 +R69 +R87 +R40 +L871 +L97 +R14 +L97 +L4 +R159 +R8 +L266 +R58 +R1 +L1 +L46 +L54 +R41 +L41 +R480 +L773 +R93 +L69 +L94 +L80 +L92 +L48 +L28 +R31 +R80 +L313 +R288 +L66 +R3 +R88 +L733 +R33 +R86 +L686 +R36 +L312 +R95 +L837 +L82 +L23 +L77 +L53 +R6 +L53 +L97 +R397 +R93 +L93 +L33 +L923 +R56 +L82 +L719 +L304 +L95 +L96 +L8 +R90 +R14 +L76 +L99 +R251 +L90 +R41 +L27 +L40 +L52 +R824 +R68 +R535 +L123 +R88 +R958 +L49 +L9 +R77 +R9 +L943 +R457 +L816 +R88 +L72 +R72 +L49 +L23 +L50 +R66 +R38 +L31 +L23 +R54 +L72 +R52 +L834 +L233 +L67 +L6 +R70 +L868 +L728 +L70 +R2 +R2 +L2 +R43 +R57 +L4 +R18 +L14 +L48 +L35 +L17 +R55 +L555 +R24 +L20 +R96 +L686 +R887 +L958 +L70 +L73 +L823 +R78 +R62 +R47 +R99 +L46 +L17 +R92 +L92 +L908 +R9 +R83 +R16 +R294 +R72 +L84 +R82 +L50 +R20 +L463 +L971 +L46 +R53 +R91 +L798 +R56 +R4 +R75 +L8 +L55 +L43 +L29 +L64 +R53 +L48 +L41 +L66 +L2 +R68 +R93 +R207 +L81 +L219 +L64 +L34 +L2 +R637 +R80 +R909 +R22 +R52 +L61 +L78 +R39 +L799 +R65 +L82 +R81 +L65 +R13 +L14 +R13 +R4 +R458 +L82 +R8 +L10 +R110 +L38 +R89 +L48 +L29 +L74 +R50 +L650 +L14 +R22 +R2 +L15 +L71 +R76 +L14 +L18 +L68 +L57 +L43 +R79 +L68 +R89 +R7 +R45 +R71 +R77 +L946 +L92 +L93 +R38 +L7 +L44 +R90 +R54 +R51 +L51 +R93 +L93 +R26 +L304 +R26 +L48 +R36 +R64 +R587 +L78 +L36 +L42 +L535 +L63 +R67 +L871 +L7 +R78 +R30 +R409 +R52 +L812 +R4 +R52 +L324 +L11 +L22 +R724 +R90 +L92 +L97 +R25 +L366 +R80 +L892 +R90 +L71 +R4 +R97 +R49 +R212 +R69 +R23 +R36 +L45 +L14 +R16 +R84 +R52 +R78 +R70 +L51 +L949 +R559 +L661 +R753 +R22 +R85 +L58 +L551 +R51 +R7 +R57 +L63 +R12 +R87 +R714 +R55 +R31 +L427 +L808 +L65 +R20 +L35 +R15 +L727 +L473 +R7 +L7 +R61 +L61 +L98 +L47 +R33 +L67 +L36 +R4 +L4 +L23 +L210 +R48 +R27 +R73 +R73 +L73 +R817 +R69 +R714 +L64 +R88 +R90 +L62 +L52 +R794 +L10 +R16 +L5 +R5 +R968 +L42 +L25 +R99 +L554 +L46 +L85 +L15 +R61 +L198 +R50 +R13 +R8 +R70 +R30 +L34 +R43 +R69 +R818 +R21 +R113 +R54 +R82 +R74 +R26 +R133 +R67 +L52 +L55 +L32 +L98 +R95 +R541 +L43 +L17 +L35 +L4 +R23 +L50 +R76 +L49 +L14 +L86 +L75 +L91 +L42 +R82 +L88 +L386 +L82 +R82 +R18 +L836 +L57 +R12 +L37 +R35 +L81 +L99 +R45 +L64 +L41 +L55 +R860 +L411 +L57 +L86 +R341 +L55 +R68 +R460 +R9 +L69 +R620 +L23 +L45 +L52 +L798 +L31 +R61 +R73 +R42 +R15 +L62 +L71 +R71 +R4 +R96 +L59 +L47 +L94 +R855 +R13 +L66 +R98 +R1 +L769 +L52 +L17 +R37 +R853 +L364 +R41 +L17 +R75 +R88 +R6 +R27 +L212 +R64 +L4 +L75 +R74 +R978 +R57 +R9 +R148 +L89 +L96 +L875 +L88 +R868 +L68 +R65 +R90 +R65 +L64 +R98 +L21 +R67 +R62 +R38 +L899 +R99 +L4 +L2 +L993 +L1 +R34 +L796 +R66 +L61 +R32 +L15 +R43 +R97 +L14 +L46 +R84 +L917 +R93 +R58 +R38 +R44 +L40 +R21 +R966 +R13 +L41 +L48 +R19 +L30 +R13 +R12 +R51 +L25 +R76 +L32 +R205 +R922 +R78 +R167 +L75 +R65 +L57 +R318 +L72 +L93 +R47 +R75 +L39 +R40 +L76 +L870 +L30 +R87 +R13 +L963 +R196 +L92 +L90 +L77 +L89 +R35 +R75 +L95 +R85 +L56 +L98 +L146 +L64 +L43 +L13 +L96 +L34 +R73 +L8 +R19 +L37 +L18 +L964 +L335 +L47 +R82 +R37 +L39 +L253 +R96 +L31 +L78 +L76 +R56 +L246 +L504 +L62 +R46 +L46 +L32 +R32 +L67 +R40 +R84 +R54 +R389 +L98 +R507 +R701 +L7 +R22 +L125 +L20 +L80 +L148 +R48 +L51 +R474 +R677 +R77 +R75 +L152 +R12 +R88 +R9 +R892 +R99 +L11 +R169 +R42 +R24 +R3 +L87 +L40 +R12 +L53 +L49 +R70 +L80 +L58 +L44 +R42 +L33 +R87 +L94 +R2 +L202 +L52 +L4 +R56 +R30 +R31 +R65 +R47 +L46 +R690 +R292 +L86 +L6 +R34 +L8 +L43 +L166 +R23 +R43 +R271 +R29 +R24 +R76 +L68 +L232 +L70 +L74 +R44 +L45 +L55 +R30 +L96 +L68 +R34 +R870 +L51 +R58 +L58 +R381 +R2 +R9 +L14 +R903 +L69 +R10 +R86 +R773 +R696 +L60 +R67 +R1 +L91 +L35 +R22 +R80 +L80 +R397 +R3 +R49 +L97 +L56 +L20 +L76 +L85 +R786 +R86 +R50 +L66 +L71 +L96 +L4 +L465 +L35 +L62 +L38 +L61 +R61 +R88 +L74 +L4 +R269 +L467 +L12 +R79 +R21 +R92 +L39 +L24 +L329 +R337 +L337 +L58 +R7 +L73 +L76 +R59 +R92 +L92 +L959 +R72 +L72 +R74 +R26 +L24 +R724 +L10 +L832 +R61 +R81 +R79 +L24 +L97 +L21 +L782 +R67 +R506 +R33 +L55 +L6 +L36 +L98 +R34 +L91 +R991 +L79 +L65 +R59 +L115 +R43 +R12 +L44 +L42 +R11 +L46 +R77 +L706 +L876 +L9 +R87 +R15 +R78 +L30 +R30 +L92 +L8 +L8 +R308 +R59 +L97 +L98 +L64 +L681 +R11 +R33 +L63 +L21 +R24 +R55 +L58 +L95 +L67 +R315 +L53 +L37 +R20 +L65 +R82 +R72 +L672 +L662 +R66 +L4 +R468 +R13 +L35 +L453 +L97 +L89 +L69 +L28 +L72 +R835 +R876 +L649 +L978 +R978 +R469 +L69 +L73 +R13 +R38 +L19 +R38 +R303 +L29 +R29 +L40 +R40 +R32 +L26 +L82 +L12 +R87 +L286 +L93 +R25 +L64 +R19 +L688 +R196 +L693 +L15 +R79 +R47 +L26 +R20 +L64 +L9 +L821 +R97 +L23 +R148 +L3 +L62 +R30 +R65 +L78 +L76 +L24 +L32 +L754 +R543 +R17 +L74 +L43 +R25 +R18 +R32 +R94 +L60 +R86 +R92 +R2 +L46 +R76 +R764 +L7 +L52 +R46 +L63 +R5 +L61 +R33 +L41 +L37 +L60 +R73 +L73 +L20 +R12 +R162 +R1 +L58 +R17 +L17 +R90 +R10 +R49 +R51 +L69 +L13 +L80 +L38 +R33 +R67 +R69 +R31 +R81 +R19 +R526 +R22 +L48 +L850 +L50 +R90 +L90 +L86 +L14 +R94 +R135 +R15 +L944 +R74 +R38 +L75 +L837 +R51 +R82 +R67 +L50 +R23 +R76 +R51 +R98 +R11 +L83 +L51 +R25 +L23 +R151 +L58 +L70 +L3 +R511 +R92 +L272 +R23 +L52 +R56 +L4 +L99 +L454 +L35 +R44 +R46 +R647 +L67 +L21 +R88 +L4 +R204 +L23 +R65 +L84 +R42 +L32 +R732 +R53 +L43 +L36 +L77 +R3 +L33 +R96 +L73 +L984 +L6 +L29 +R79 +R350 +R72 +L72 +L81 +R31 +L997 +R51 +R65 +R45 +R21 +L92 +R35 +R22 +L95 +R95 +L80 +R84 +R96 +R49 +R2 +L99 +R48 +R374 +L552 +L22 +L215 +L76 +L13 +R32 +R72 +R17 +L17 +L50 +L95 +L55 +R908 +R492 +L25 +L74 +L34 +L367 +L12 +R857 +L18 +L27 +L583 +R90 +R67 +L874 +L41 +L14 +R34 +R95 +L52 +L53 +R65 +L305 +R71 +L33 +R33 +R96 +R4 +R82 +L912 +L638 +R82 +L14 +R36 +R332 +L51 +R811 +L96 +L42 +L90 +R29 +R75 +R96 +L22 +R50 +L25 +L12 +L50 +L4 +L23 +R528 +L61 +R192 +L849 +L24 +L60 +R621 +R39 +L85 +R983 +R2 +L38 +R31 +R955 +L748 +R894 +R406 +R4 +L58 +L651 +L95 +L47 +R7 +R476 +R64 +R26 +L7 +R81 +L806 +R6 +L63 +R84 +R841 +R838 +R26 +R58 +L83 +L25 +L76 +R96 +R311 +L6 +L1 +R1 +R4 +R33 +L97 +R41 +R68 +R550 +R51 +R14 +R35 +L20 +R34 +L814 +R46 +R154 +R58 +R61 +R10 +L47 +L26 +R70 +R52 +R25 +L51 +R48 +R85 +R79 +L95 +L17 +R48 +L61 +R8 +R53 +L357 +R29 +R89 +R97 +R60 +L746 +L29 +R48 +R9 +L70 +R46 +L246 +R45 +L22 +R25 +R22 +R82 +R18 +R78 +L676 +L80 +R63 +R15 +R718 +R82 +L86 +L514 +R67 +R42 +R91 +L95 +R57 +R68 +R52 +R18 +R726 +L52 +R26 +R36 +L26 +R90 +L595 +R95 +R75 +R25 +R69 +R21 +L90 +L3 +R33 +L611 +R81 +L71 +L72 +L10 +L39 +R934 +L42 +R72 +R33 +R55 +R8 +L68 +R83 +R906 +L62 +R97 +L36 +R39 +R930 +L68 +R80 +R31 +R83 +R41 +R55 +R89 +L59 +R91 +L18 +R62 +R113 +L2 +R479 +R566 +L98 +R192 +L78 +L65 +L51 +R215 +L559 +L20 +R330 +R45 +L22 +R8 +L97 +L96 +L4 +R688 +R368 +L725 +R69 +R82 +R18 +R46 +L86 +R40 +R43 +R32 +L275 +R42 +L42 +L956 +L44 +R29 +L3 +L90 +L136 +L36 +L3 +L45 +L16 +R64 +R36 +L466 +R66 +R50 +R50 +R75 +L175 +R87 +L92 +L64 +R69 +R58 +L692 +L166 +L22 +R22 +R579 +R121 +L45 +L416 +R26 +R62 +R823 +L50 +L5 +L24 +L7 +R736 +L41 +R91 +R50 +L21 +L15 +L64 +R881 +R19 +R771 +L71 +L545 +R35 +R10 +R48 +L92 +R85 +L737 +R42 +R294 +R15 +L55 +R96 +L42 +L54 +L24 +L64 +R93 +L60 +L87 +L67 +R9 +R99 +L99 +L49 +L16 +L835 +R15 +R985 +L33 +L28 +R61 +R56 +R59 +R48 +R537 +L48 +R148 +R3 +L48 +R45 +L83 +R228 +R83 +L656 +L16 +L56 +R891 +L2 +R711 +R67 +L67 +R1 +R99 +L41 +L41 +R46 +L64 +L53 +L38 +R295 +R36 +R71 +R389 +R18 +R82 +L4 +L83 +R87 +R684 +L19 +R6 +R52 +L23 +L9 +L23 +L74 +L848 +L18 +L37 +R9 +L91 +R860 +L54 +R85 +R20 +L520 +R11 +R379 +R28 +R39 +L30 +R14 +L741 +L33 +L47 +R49 +L69 +L570 +R70 +L730 +L70 +L96 +L82 +L5 +L17 +R35 +L35 +R810 +R90 +R82 +L9 +R88 +R239 +L88 +L90 +L28 +L15 +R478 +L16 +L41 +L44 +L37 +R70 +R91 +L485 +R5 +L362 +L20 +R27 +R19 +L64 +R50 +R50 +L531 +L6 +R3 +R34 +L65 +R136 +R26 +L50 +R553 +R54 +L694 +R40 +R13 +R84 +R61 +L25 +L27 +R560 +R83 +R63 +R883 +R90 +R83 +R63 +L989 +R58 +L35 +R50 +L418 +L6 +L91 +L97 +L90 +R87 +R27 +L171 +L89 +L49 +L18 +R857 +L62 +L95 +R29 +L41 +L4 +R16 +L70 +L30 +R806 +L60 +R35 +R81 +R831 +L84 +L38 +R31 +R98 +R47 +L26 +L27 +R81 +L5 +R284 +L1 +L46 +R22 +L9 +L169 +R49 +L30 +L15 +L796 +R91 +R68 +R628 +L884 +L603 +L59 +R273 +L590 +L83 +R448 +L48 +L17 +R962 +L20 +L25 +R32 +L41 +L991 +L31 +L22 +L125 +L322 +R97 +L97 +L22 +L55 +L18 +L5 +L627 +R27 +L65 +R27 +R38 +L83 +R983 +R81 +R275 +L56 +L265 +L405 +L380 +R92 +L642 +R46 +R54 +L480 +L72 +R8 +L21 +L35 +L42 +R42 +R5 +R4 +R377 +L71 +R85 +L19 +R69 +L57 +L81 +L40 +L333 +L39 +R61 +R94 +L42 +R56 +R78 +R170 +R887 +R96 +L34 +R34 +L36 +L64 +R43 +R57 +R616 +L768 +L848 +R59 +L81 +L408 +L57 +R42 +L196 +L754 +R95 +R71 +L26 +L45 +R95 +L95 +L166 +L94 +L32 +R92 +R58 +L25 +L35 +L61 +R7 +L86 +L36 +L507 +L515 +L92 +R50 +R406 +R45 +R91 +R70 +R95 +R846 +L120 +L77 +L801 +R75 +L988 +L22 +L95 +R17 +R23 +L23 +L21 +L47 +L53 +R56 +R93 +L28 +L7 +R7 +R61 +R39 +R88 +R443 +R69 +L28 +L9 +L354 +L57 +R77 +L681 +L48 +R63 +L463 +L38 +R38 +R46 +R54 +R39 +L39 +R42 +R56 +R126 +L19 +R95 +L40 +R23 +R17 +L30 +L70 +L1 +L99 +L32 +L68 +L597 +R97 +R622 +L69 +L82 +L71 +L228 +R28 +R7 +L5 +L90 +L12 +R29 +R71 +L72 +R69 +L59 +L9 +R894 +L39 +R816 +L884 +L34 +L25 +L849 +L831 +R27 +R26 +R50 +R62 +L943 +L52 +R87 +R66 +L25 +L859 +R671 +R58 +R10 +R77 +L505 +L21 +L6 +L23 +R605 +R68 +L34 +R59 +L37 +L21 +L94 +R416 +R89 +R44 +L7 +R29 +L22 +L12 +L960 +R62 +R34 +L28 +L68 +R10 +L66 +L844 +R71 +R51 +L90 +R468 +R25 +R48 +R87 +R40 +L31 +R515 +R40 +R387 +L11 +L65 +R47 +L282 +L57 +R657 +L70 +L87 +L42 +R99 +R410 +R90 +L53 +L747 +R68 +L68 +L82 +L107 +L11 +L98 +L56 +R88 +L50 +R16 +R996 +L7 +L41 +R31 +R53 +L30 +L877 +L25 +R8 +R35 +L54 +L89 +R359 +R8 +L9 +R10 +L68 +L87 +L97 +R91 +R193 +L87 +L18 +R16 +L11 +R94 +R87 +R49 +R70 +R13 +L72 +L15 +L30 +L60 +R116 +R72 +R68 +L59 +R214 +L447 +R53 +R77 +L4 +R8 +R266 +R1 +L1 +R76 +L61 +R564 +L95 +L75 +L909 +R92 +R308 +R95 +R527 +R19 +R10 +L89 +L9 +R47 +L79 +R12 +R38 +L7 +R12 +R83 +L28 +L31 +R238 +R62 +R88 +L19 +R931 +L20 +L623 +L86 +R29 +R18 +R720 +L10 +R72 +L75 +L25 +R97 +L72 +L26 +R1 +R52 +L23 +R7 +L99 +L75 +R34 +R80 +L87 +L373 +R81 +R91 +R12 +L95 +R302 +R54 +R39 +R80 +R771 +L51 +L62 +L987 +L49 +R33 +R398 +R80 +R87 +L534 +R934 +L79 +L88 +L5 +L224 +L242 +L88 +L40 +R66 +R992 +R88 +R20 +R12 +R4 +L16 +L9 +L414 +L497 +L80 +R646 +L46 +L2 +L39 +L59 +L30 +R40 +L10 +L44 +L238 +R21 +L42 +R199 +R70 +L4 +L51 +R22 +R67 +R88 +L88 +L57 +L920 +L23 +L673 +R26 +L253 +L37 +L918 +R34 +L96 +R82 +R835 +L97 +L3 +L50 +L50 +R79 +R21 +L562 +L14 +R72 +L96 +L39 +R2 +L10 +L70 +R17 +L64 +L88 +L85 +R50 +L6 +L87 +R880 +L780 +L20 +R94 +L237 +R43 +R669 +L69 +R1 +R994 +L95 +R135 +L16 +L19 +R933 +R69 +L49 +L53 +L861 +L47 +R93 +L30 +L76 +R71 +L50 +R21 +R89 +R44 +L46 +L8 +L21 +L547 +R21 +R47 +L219 +R55 +L35 +L69 +L19 +R68 +R53 +L34 +R41 +L46 +R5 +R322 +R24 +R85 +R69 +R932 +L73 +L59 +R97 +R27 +L24 +L637 +L14 +L446 +L675 +L19 +L9 +R73 +L73 +L92 +R44 +R995 +L47 +R26 +R26 +R95 +R603 +R32 +R993 +R111 +L642 +R60 +R26 +R70 +L12 +R12 +R34 +L34 +R47 +L47 +L97 +L65 +L30 +R343 +L27 +L748 +L6 +R21 +R311 +L90 +L59 +L53 +L94 +L6 +R80 +L143 +L37 +R52 +L3 +R86 +L735 +L65 +R45 +R31 +R988 +L99 +R98 +L18 +R60 +R50 +L90 +R19 +L79 +R6 +R54 +L97 +R55 +R986 +R47 +R9 +L57 +R57 +R93 +L849 +L61 +L577 +L6 +L70 +L30 +R85 +L88 +L97 +L946 +L16 +L38 +R54 +R87 +R59 +R81 +R58 +L13 +L74 +R74 +L26 +L7 +R7 +R56 +L856 +R634 +R70 +L4 +L66 +L93 +R399 +R827 +L99 +R29 +R21 +L91 +R73 +R52 +R23 +R29 +L16 +R9 +L97 +R35 +L29 +L299 +L59 +L686 +L1 +R7 +L39 +R57 +L47 +L39 +L10 +L90 +L46 +L15 +R472 +R89 +L285 +R50 +L80 +R71 +L59 +L1 +R40 +R71 +R93 +R611 +L635 +L76 +R80 +L32 +L37 +R31 +R61 +L23 +L569 +L64 +R72 +L59 +R40 +L62 +R74 +R488 +L301 +R501 +R2 +L703 +R83 +L82 +R50 +L83 +L47 +L286 +L18 +L10 +R594 +R49 +L19 +L130 +L63 +L814 +R39 +L62 +L36 +L64 +R41 +L17 +R76 +R30 +L57 +L78 +R20 +L2 +R787 +R71 +L71 +R46 +L87 +L82 +L584 +R57 +R40 +L18 +R312 +L7 +L965 +R37 +L24 +L25 +L60 +R60 +L85 +R85 +L5 +R5 +R96 +R47 +L35 +R40 +L48 +L88 +L36 +R40 +L82 +R66 +R75 +L275 +L58 +L42 +R84 +R33 +L98 +R75 +L25 +L69 +L20 +R29 +L80 +L29 +L78 +L64 +R98 +L82 +L74 +L18 +R48 +R868 +L85 +R87 +L89 +R688 +L93 +R94 +R5 +L74 +R98 +L992 +L54 +L52 +R69 +L36 +L864 +R27 +L11 +R21 +L25 +R405 +R83 +R32 +R35 +R10 +L34 +R57 +L15 +R36 +R79 +L57 +R62 +L26 +R10 +L31 +L41 +L73 +R1 +L857 +L88 +R16 +R47 +R52 +R85 +R53 +R47 +L183 +L9 +L476 +R876 +R13 +R79 +R49 +L48 +L22 +L79 +R126 +L26 +R310 +L31 +R21 +L43 +R47 +L80 +L866 +R80 +L38 +R532 +L32 +R848 +L48 +L55 +L80 +R23 +L88 +R52 +L984 +L968 +R1 +R10 +L11 +R76 +L57 +L95 +L1 +L70 +L53 +L55 +R55 +R5 +L5 +L44 +L639 +R83 +R8 +L554 +R46 +R449 +R23 +R28 +L92 +L8 +L75 +L25 +R595 +R62 +R43 +L862 +L361 +R123 +L936 +L69 +L823 +L498 +R26 +L10 +R12 +L2 +R266 +L499 +L93 +R822 +L93 +L80 +R377 +R788 +L88 +L87 +L23 +L790 +R44 +R23 +L81 +R7 +R207 +L38 +L562 +R86 +L97 +L1 +L88 +L3 +R772 +L95 +R454 +R4 +L32 +R61 +L51 +R93 +L3 +L70 +L413 +L17 +R19 +L91 +L12 +R84 +L31 +L12 +R78 +R59 +R54 +R52 +L78 +R86 +L8 +L99 +R99 +L72 +L17 +L36 +L20 +R29 +L42 +R2 +R56 +R44 +R248 +R99 +R10 +R40 +R89 +L30 +L62 +L880 +R882 +R95 +L23 +R88 +L80 +L55 +R651 +L30 +L75 +L71 +R511 +R61 +L94 +L35 +L49 +L34 +R39 +L39 +R799 +R1 +R24 +L437 +L28 +R308 +R76 +R328 +R29 +R862 +R40 +R98 +R40 +L19 +R35 +R47 +L203 +R48 +R78 +R12 +L38 +L24 +R886 +R73 +R65 +R80 +R67 +L231 +R84 +L29 +L7 +L64 +R77 +L77 +L41 +R40 +L77 +L1 +R79 +R82 +R7 +L25 +L64 +L57 +R22 +L92 +R831 +R96 +R86 +R28 +R7 +R779 +R67 +L44 +L23 +L72 +R1 +R61 +R77 +R145 +R88 +R82 +R983 +R45 +L78 +R91 +L63 +R40 +R24 +L45 +L420 +R13 +L76 +R26 +R86 +R276 +R16 +L95 +L5 +L1 +R27 +R43 +R64 +R67 +L44 +R70 +L26 +R16 +L27 +R96 +R92 +L77 +L13 +L87 +L8 +L17 +R27 +L9 +L93 +R282 +L216 +L57 +L9 +L13 +R41 +L28 +L9 +L82 +R821 +L67 +L263 +R46 +R204 +L50 +R86 +L71 +L65 +R46 +R60 +R209 +L65 +R63 +R38 +R70 +R27 +R2 +R23 +R823 +L16 +R72 +R65 +R74 +R645 +R14 +L13 +R13 +R501 +R64 +L41 +R34 +L69 +L30 +L59 +R95 +L6 +R994 +R594 +L50 +R42 +L257 +R75 +L26 +R11 +R28 +R20 +R40 +L81 +R83 +L40 +R581 +L908 +L20 +L29 +L172 +R27 +L1 +L60 +L94 +R90 +L31 +R595 +L704 +R16 +L61 +R49 +L868 +L1 +L63 +L68 +L79 +R888 +R15 +R62 +R37 +R77 +L18 +R18 +R79 +R921 +L591 +L27 +R277 +L59 +R90 +R10 +R545 +R98 +L20 +L23 +R17 +R8 +R29 +R39 +R7 +R35 +L35 +L630 +R28 +R26 +L74 +L837 +L61 +L52 +L28 +L72 +L61 +L939 +L471 +L129 +R368 +L75 +L93 +L6 +R906 +R86 +R14 +L62 +R71 +L55 +L54 +R9 +L88 +R14 +L4 +L31 +R98 +R2 +R59 +L67 +L3 +L89 +L22 +L6 +L72 +L35 +L614 +R45 +R7 +L67 +R1 +R939 +L94 +R486 +R32 +L14 +R90 +L76 +R458 +L51 +L15 +R8 +R97 +L82 +R719 +R27 +L278 +R942 +R75 +R21 +R4 +L25 +L18 +L82 +R75 +L534 +L41 +R50 +L76 +R26 +R18 +R764 +R37 +L219 +R470 +L90 +R24 +R96 +R1 +L82 +R14 +L57 +L361 +L15 +L53 +L4 +L89 +L254 +L20 +L22 +R42 +L85 +R85 +L75 +L91 +L7 +R57 +L32 +L59 +R17 +R790 +R432 +R24 +R35 +L58 +R67 +R142 +R263 +R88 +L10 +L383 +L14 +L76 +L80 +R92 +L9 +R48 +R28 +L31 +L58 +R75 +R94 +R31 +R56 +R439 +R5 +L2 +L98 +R5 +L166 +L859 +L880 +R71 +R29 +R90 +R10 +R89 +L41 +R10 +L28 +R73 +R66 +R17 +L986 +L76 +R49 +R42 +L15 +L17 +R63 +L94 +L352 +L481 +R58 +R12 +R183 +R68 +R77 +L40 +L57 +R94 +R9 +R51 +R8 +R91 +R27 +L997 +L164 +L83 +R44 +L18 +R918 +R78 +R88 +R29 +R60 +R45 +L94 +L13 +R307 +R5 +R95 +R90 +R973 +R30 +R21 +R886 +R75 +R25 +R79 +L14 +L55 +R42 +L52 +L54 +L26 +L48 +L33 +L39 +L3 +R29 +R212 +L9 +R529 +R687 +L77 +L763 +L11 +R6 +L411 +R11 +L50 +L74 +R338 +R16 +L88 +L49 +R79 +L72 +L67 +R67 +L38 +L78 +R19 +R97 +L23 +R23 +L21 +L79 +R40 +R60 +L867 +R17 +L925 +R87 +R28 +L40 +R123 +R91 +L20 +L55 +R261 +L31 +L46 +L32 +R25 +R39 +L55 +L61 +R58 +L30 +L67 +R95 +R24 +L19 +L23 +L82 +L49 +R70 +L22 +R6 +R17 +L41 +R24 +R8 +R92 +L989 +L810 +R99 +L50 +L1 +R51 +L158 +R658 +R196 +L56 +L104 +R71 +R93 +L33 +R562 +R86 +L94 +R45 +R36 +R9 +R20 +L62 +R46 +L34 +R99 +L42 +L8 +L28 +R10 +R686 +L67 +L31 +R75 +L39 +R164 +L12 +L45 +R34 +R623 +R33 +L70 +L63 +R97 +R403 +R46 +L14 +R49 +R330 +L45 +L79 +L123 +L76 +R112 +R61 +R139 +L62 +R62 +L77 +L97 +L92 +L25 +L90 +R81 +L9 +R9 +R6 +R64 +R97 +L391 +L76 +R15 +L92 +L23 +R44 +L66 +L78 +L70 +R70 +R665 +L65 +R216 +L6 +L10 +R25 +R84 +L3 +L6 +R2 +L2 +L80 +R38 +L81 +R87 +R236 +R762 +R82 +L44 +R65 +L65 +R78 +L121 +L91 +L66 +L81 +R77 +L556 +L13 +L158 +R42 +R48 +L266 +R262 +L576 +L79 +R615 +R85 +L77 +R36 +L56 +L855 +L548 +L83 +L68 +R4 +R99 +R248 +L49 +L45 +L6 +L8 +R8 +R35 +R65 +R62 +R338 +R95 +R5 +L91 +L9 +L95 +R74 +L779 +R99 +R70 +R31 +L537 +L63 +L32 +R80 +R15 +L63 +L6 +R6 +R15 +R685 +L85 +L15 +L87 +R87 +R576 +R12 +R51 +R61 +R31 +L144 +R13 +L74 +R98 +L24 +R39 +R61 +L657 +R657 +R14 +L14 +R92 +L55 +R239 +L76 +R28 +R458 +L854 +L58 +L56 +L218 +R14 +L452 +R3 +R68 +R61 +R6 +R31 +R69 +L96 +R40 +R556 +L827 +L18 +R445 +L95 +R95 +L30 +L70 +R250 +L31 +L55 +L9 +L86 +R35 +L76 +R72 +R29 +L57 +R10 +R368 +R34 +R97 +R19 +R58 +L958 +L54 +L46 +L68 +L69 +R676 +R251 +R5 +R5 +R43 +R80 +L19 +R32 +L67 +L5 +R623 +L387 +R289 +L89 +L34 +R34 +R76 +R624 +L21 +L758 +R799 +R80 +L31 +L803 +R34 +L91 +R48 +R57 +R581 +R5 +L31 +R76 +R34 +R81 +R52 +R78 +L90 +R86 +L53 +L87 +L546 +L43 +R66 +R28 +R613 +R72 +L36 +R15 +R86 +R99 +R64 +R736 +R551 +R64 +L1 +L65 +L474 +R66 +R88 +R51 +L55 +R32 +L98 +R93 +R3 +L55 +R8 +L53 +L26 +L29 +L211 +R71 +R34 +R53 +R53 +R88 +R12 +R34 +L34 +L620 +R65 +R55 +R885 +L685 +R58 +L58 +L35 +R292 +L88 +R5 +L72 +L56 +R49 +L72 +L23 +R55 +R7 +R38 +R984 +R838 +L522 +L56 +R56 +R47 +R57 +L304 +L78 +R48 +L76 +L94 +R75 +R25 +L91 +L31 +L970 +R53 +R960 +R55 +R531 +L37 +R39 +R91 +L96 +R44 +R52 +R15 +R1 +L841 +R85 +L60 +L34 +L30 +L98 +R62 +R69 +L435 +L34 +L33 +L31 +R464 +R8 +R65 +L19 +R36 +L13 +R23 +R92 +L49 +R757 +R70 +L38 +L86 +R34 +L26 +L90 +R10 +R26 +L12 +L132 +L58 +R53 +R49 +L58 +R76 +R974 +L16 +L684 +R26 +R82 +R21 +R81 +L35 +R741 +L8 +R24 +R76 +L21 +R43 +R178 +L68 +L13 +R72 +R97 +R55 +L78 +L27 +L84 +L54 +L54 +L61 +R9 +R6 +R30 +R70 +R79 +L79 +L29 +L71 +L41 +R41 +R18 +L28 +R40 +R4 +R12 +R62 +R90 +R2 +R17 +R48 +L80 +L79 +L6 +L49 +L89 +L62 +L93 +L26 +L81 +L68 +L32 +R18 +L34 +L95 +R90 +R21 +L61 +R61 +L84 +L39 +L33 +R56 +R71 +L71 +R47 +R24 +R29 +R37 +L48 +L40 +R1 +R1 +L35 +R28 +R3 +R37 +L30 +L49 +R40 +L29 +R34 +R5 +L29 +L50 +L9 +L41 +R10 +R14 +R39 +L2 +L5 +R34 +L2 +R35 +L3 +R24 +R47 +R30 +L26 +R36 +L36 +R16 +R1 +R23 +L22 +L15 +L14 +L7 +L50 +R50 +R14 +L29 +L38 +L11 +R19 +L39 +L34 +L24 diff --git a/inputs/day1example.txt b/inputs/day1example.txt new file mode 100644 index 0000000..53287c7 --- /dev/null +++ b/inputs/day1example.txt @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 diff --git a/inputs/day2.txt b/inputs/day2.txt new file mode 100644 index 0000000..d13e668 --- /dev/null +++ b/inputs/day2.txt @@ -0,0 +1 @@ +328412-412772,1610-2974,163-270,7693600637-7693779967,352-586,65728-111612,734895-926350,68-130,183511-264058,8181752851-8181892713,32291-63049,6658-12472,720-1326,21836182-21869091,983931-1016370,467936-607122,31-48,6549987-6603447,8282771161-8282886238,7659673-7828029,2-18,7549306131-7549468715,3177-5305,20522-31608,763697750-763835073,5252512393-5252544612,6622957-6731483,9786096-9876355,53488585-53570896 diff --git a/inputs/day2example.txt b/inputs/day2example.txt new file mode 100644 index 0000000..a3f22ef --- /dev/null +++ b/inputs/day2example.txt @@ -0,0 +1 @@ +11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124 diff --git a/src/bin/day01/main.rs b/src/bin/day01/main.rs new file mode 100644 index 0000000..a70f091 --- /dev/null +++ b/src/bin/day01/main.rs @@ -0,0 +1,69 @@ +use std::{ + fs::File, + io::{BufRead, BufReader}, +}; + +use color_eyre::{ + Report, + eyre::{ContextCompat, eyre}, +}; + +#[derive(Debug, Clone)] +enum DialDir { + L(u32), + R(u32), +} +impl From for i32 { + fn from(val: DialDir) -> Self { + match val { + DialDir::L(v) => -(v as i32), + DialDir::R(v) => v as i32, + } + } +} + +impl TryFrom<&str> for DialDir { + type Error = Report; + fn try_from(value: &str) -> Result { + let prefix = value.get(0..1).context("Failed to get first char")?; + match prefix { + "L" => value[1..].parse().map(DialDir::L).map_err(|v| v.into()), + "R" => value[1..].parse().map(DialDir::R).map_err(|v| v.into()), + _ => Err(eyre!("Invalid Start")), + } + } +} + +fn main() -> Result<(), Report> { + color_eyre::install()?; + // let filepath = "testinput.txt"; + let filepath = "inputs/day1.txt"; + let file = File::open(filepath)?; + let bufreader = BufReader::new(file); + let mut lines = bufreader.lines(); + + let mut total_value = 50; + let mut code = 0; + let mut code2 = 0; + while let Some(Ok(line)) = lines.next() { + let prev = total_value; + let dialcode = DialDir::try_from(line.as_str())?; + total_value += std::convert::Into::::into(dialcode.clone()); + let big_jump = total_value.div_euclid(100); + total_value = total_value.rem_euclid(100); + if big_jump < 0 && prev == 0 { + code2 -= 1; + } + if big_jump > 0 && total_value == 0 { + code2 -= 1; + } + code2 += big_jump.abs(); + if total_value == 0 { + code += 1; + } + println!("{dialcode:?} {prev}->{total_value} {code} {code2}"); + } + + println!("code is {} {}!", code, code + code2); + Ok(()) +} diff --git a/src/bin/day02/main.rs b/src/bin/day02/main.rs new file mode 100644 index 0000000..ad10574 --- /dev/null +++ b/src/bin/day02/main.rs @@ -0,0 +1,82 @@ +use color_eyre::{Report, eyre::ContextCompat}; +use std::{fs::File, io::Read}; + +#[derive(Debug)] +struct IdRange { + start: u64, + end: u64, +} + +impl TryFrom<&str> for IdRange { + type Error = Report; + + fn try_from(value: &str) -> Result { + let mut split = value.split("-"); + let start: u64 = split.next().context("Invalid start ID")?.parse()?; + let end: u64 = split.next().context("Invalid end ID")?.parse()?; + Ok(Self { start, end }) + } +} + +impl IdRange { + fn get_invalid(&self) -> Result, Report> { + Ok((self.start..self.end + 1) + .filter(|v| { + let str = v.to_string(); + let len = str.len(); + if (len % 2) != 0 { + return false; + } + str[0..len / 2] == str[len / 2..len] + }) + .collect()) + } + fn get_invalid2(&self) -> Result, Report> { + Ok((self.start..self.end + 1) + .filter(|v| { + let str = v.to_string(); + let len = str.len(); + (1..len + 1) + .filter(|v| (len % v) == 0) + .filter(|v| (len / v) != 1) + .filter(|v| { + let strchunk = str.chars().collect::>(); + let strchunk = strchunk.chunks(*v).collect::>(); + !strchunk.iter().any(|v| strchunk.iter().any(|x| v != x)) + }) + .sum::() + > 0 + }) + .collect()) + } +} + +fn main() -> Result<(), Report> { + color_eyre::install()?; + // let filepath = "testinput2.txt"; + let filepath = "inputs/day2.txt"; + let mut file = File::open(filepath)?; + let mut string = String::new(); + let _ = file.read_to_string(&mut string); + let ranges = string + .trim_end() + .split(",") + .map(IdRange::try_from) + .collect::, Report>>()?; + + let code1 = ranges + .iter() + .map(|v| v.get_invalid().map(|v| v.into_iter().sum::())) + .collect::, Report>>()? + .into_iter() + .sum::(); + println!("code1: {code1}"); + let code2 = ranges + .iter() + .map(|v| v.get_invalid2().map(|v| v.into_iter().sum::())) + .collect::, Report>>()? + .into_iter() + .sum::(); + println!("code1: {code2}"); + Ok(()) +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1 @@ +