From 864f0dac87400bf0b7e8cb9da4a7f3d1ef6c5329 Mon Sep 17 00:00:00 2001 From: Bizcochito Date: Mon, 5 Dec 2022 10:50:03 +0100 Subject: [PATCH] Day 5 + changes in tests --- Cargo.lock | 4 + Cargo.toml | 2 +- day01/src/main.rs | 28 +- day02/input.txt | 4558 ++++++++++++++++++++++----------------------- day02/src/main.rs | 17 +- day03/input.txt | 600 +++--- day03/src/main.rs | 32 +- day04/input | 1998 ++++++++++---------- day04/src/main.rs | 26 +- day05/Cargo.toml | 8 + day05/input | 514 +++++ day05/src/main.rs | 109 ++ 12 files changed, 4251 insertions(+), 3645 deletions(-) create mode 100644 day05/Cargo.toml create mode 100644 day05/input create mode 100644 day05/src/main.rs diff --git a/Cargo.lock b/Cargo.lock index 4119d41..6dd89dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,6 +18,10 @@ version = "0.1.0" name = "day04" version = "0.1.0" +[[package]] +name = "day05" +version = "0.1.0" + [[package]] name = "tiesto" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index d1c675e..5324b74 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ members = [ "day02", "day03", "day04", -# "day05", + "day05", # "day06", # "day07", # "day08", diff --git a/day01/src/main.rs b/day01/src/main.rs index 71db3cb..3b200df 100644 --- a/day01/src/main.rs +++ b/day01/src/main.rs @@ -41,10 +41,7 @@ fn get_max_3_elf(elfs: &mut Vec) -> u32{ #[cfg(test)] mod test { - use super::*; - #[test] - fn it_works() { - let input = r#"1000 + const INPUT: &str = r#"1000 2000 3000 @@ -58,26 +55,15 @@ mod test { 9000 10000"#; - let tst = get_elfs(input); + use super::*; + #[test] + fn calories1() { + let tst = get_elfs(INPUT); assert_eq!(get_max_elf(&tst), 24000); } #[test] - fn it_works2() { - let input = r#"1000 -2000 -3000 - -4000 - -5000 -6000 - -7000 -8000 -9000 - -10000"#; - let mut tst = get_elfs(input); + fn calories2() { + let mut tst = get_elfs(INPUT); assert_eq!(get_max_3_elf(&mut tst), 45000); } } \ No newline at end of file diff --git a/day02/input.txt b/day02/input.txt index b955ddb..60a9320 100644 --- a/day02/input.txt +++ b/day02/input.txt @@ -1,2500 +1,2500 @@ -A Z -A Z -A Z -B Z -C X -A Z -A Z -C Y -A Z A Y -B Y -A Z -C X -A Z -A Z -A Z -A Z -A Y -A Z -A Z C Y C X -C X -C X -A Z -A Z -B Y -A Z -A Z -C Z -B Z A Y -A Z -B Y -A Z -B Y -A X -B Z -A Z -A Z -A Z C X -C X -A X -A Z -A Z -C X -A Z -B Y -A Z -B Z -A Z -A Z -B Z -B Z C Y B Z -A X -B Z -A Z -B Y -A Z -B Z -C X -A Z -B Y -B Z -A Z -B Y -C X -B Y -A Z -A Z -A Z -B Y -A Z -A Z -B Y -B Z +A Y +A Y C Z +A Y +A Y +A Y +C Y +A Y +A Y +A Y A X -A Z -A Z -C Z -C X -A Z -C X -A Z -A X -A Z -A Z -A Z B X -B Y -A Z +A X +A Y +C Y +C X +A Y +A Y +C Y +A X +A Y +B Z +A Y +C X +A Y +A Y +C Z +C Y +C X +A Y A Z +A Y +A Y +A Y +A Y +C Y +C Y +B Z +B Z +C Y +B X +A Y +A Y +A Y +C Z +A Y +C X A Z C Y -B Y +A Y +A Y +A Y +A Y +A Y C X -C X -A Z -A Z -A Z +A Y +C Y +A Y +C Y +A Y A X +C Y +A X +A Y +C Y +C Y +A Y C X +A Y +A Y +A Y +C X +A Y +A Y +A Y +C X +A Y +C X +A Y +A Y +C Z +A Y +A Y +A Y +C X +A Y +A X +C Y +A X B Z -C X -C X -A Z -A Z -A Z -A Z +C Y +A Y +A Y B Z +C Y A Y -A Y -C X -A Y -C X -B Y A Z C Z -A Z -B Y -A Z +C Y +B Z +A Y +A Y +C Y +A Y C X +A Y +A Y +C X +C X +C Y +A Y +A Y +C X +A Y +A Y +A Y +A Y +C X +C Y +A Y +A Y +A Y +C Z +A Y +C Y +A Y +C X +C Z +A Y B X A Y C X -A Z -A Z A Y -B Z -C X -C X -C X -B Y -A Z -A Z -B Y -A Z -B Z -C X -C Z -A Z -C X -B Z -A Z -B Y -C X -A Y -B Y -C X -C X -A Z -A Y -A Z -A Z -A Z -A Y -C X -A Z -A Z -B Z -A Z -B Z -A Z -C Z -C Z -A Z -A Z -B Z -A Z -B Z -A Z -B Z -B Y -B Y -B Z -B Y -A Z -A Z -A Z -A Z -A Z -A Z -A Z -A Z -C X -C X -A Z -A Z -C Y -A Z -C Y -B Y -C X -B Z -A Z -A Z -C X -A Z -B Y -A Z -A Z -A Z -B Z -A Z -B Y -A Z -B Y -A Z -A Z -C Z -A Z -C X -C Y -C X -C Y -C X -A Z -B Z -A Z -A Z -A Z -A Z -A Z -B Y -A Z -C X -C X -A Z -A Z -C Z -C Z -A Z -A Z -A Z -C X -A Z -A Z -A Z -A Y -A Z -C X -A Z -A Z -A Z -C X -C X -A Z -C Y -A X -A Z -A Z -A Y -B Z -A Z -A Z -A Z -C X -A Z -A Z -A Z -B Z -B Z -A Y -B Z -C X -B Y -A Z -A Z -A Z -A Z -A Z -A Z -B Z -C X -A Z -A Y -A Z -B Y -B Z -C Z -A Z -A Y -A Z -B Z -A Y -C X -A Z -A Y -A Z -C Y -A Z -A Z -B Y -C X -A Z -A Z -A X -A Z -C X -A Z -B Y -A Z -C X -A Z -B Y -A Z -C Y -B Z -C X -A Z -C X -B Y -A Z -C X -A Z -B Y -A Z -A Z -C Z -A Z -A Y -A Z -A Z -C X -A Y -A Z -B Z -A Z -A Y -C X -A Z -B Y -A Y -A Z -A Z -A Z -A Z -A Z -A Z -B Z -B Y B X +A Y +C Z +A Y +A Y +A Y +A X +A Y +A Y +A Y +C Y +A Y +A Y +A Y +A Y +C Y +C X +A Y +A Y +A Y +A Y +C Y +A Y +A Y +A Y C Y B X -A Z A Y -C X -A Z -A Z -C X -C Y A Y -A Z -C X -B Y -B Y -C X -A Z -C Y -A Z -A Z -A Z -A Z -B X -A Z +A Y +A Y +A Y A X -B Z -C Z -A Z -A Z +C Y A Y -A Z -A Y -A Z -A Z +C X +A X B Y -A Z -A Z -A Z -C X -A Z -A Z -A Z -B Z -A Z -A Z -A Z -A Z -A Z -B Z -A Z -A Z -C X -A Z -A Z -A Z -A Z A Y +C X +A Y +C Y +C Y A Z -A Z +C Z +C X +B X +C Y +A Y C Z A Z A Y -B Y -B Z -A Z -B Y -B Z -A Z +C X +A Y +A Y +C X +A Y +B X C X A Z +C Y +A Y +C X +A Y +A Y +A Y +B Z +C Z +A Y +A X +C X +A Y +A Y +C Y +A Y +A Y +A X +A X +C Y +C X B X +A Y +A Y +A Y +A Y +B Y +A Y +C Y +A Y +A X +B Z +A X +C Z +C X +C X +C Y +C X +C X +A X +C X +A Y +C Y +A X +C X +B Z +C Z +A Y +C X +B Y A Z -A Z +C Y +C X +A Y +A Y +A Y +C X +A Y +A Y +A Y +A X +B Y +C Y +C X +B Z +A Y +A Y +B Y +A Y +A Y +A Y +C X +A Y +A Y +A Y +A Y +A Y +A Y +A Y +A Y +A Y +C Y +C Y +C Z +A Y +C Y +A Y +A Y +A X +A X +A Y +A Y +C Y +A Y +A X +A Y +A Y +C X +A Y +C X +C X +C Y +B Y +A Y +C X +A Y +A Y +A X +A Y +A Y +A X +A Y +B Z +C Y +A Y +A Y +A Y +C Y +C Z +A Y +A Y +A Y +A Y +A Y +C Y +C Y +C Y +C Y +C Y +A X +C Y +A Y +A Y +A Y +A Y +C X +A Y +C Z +A Y +B Y +A X +A Y +A Y +A Y +C Y +C Y +A X +C Y +A Y +A Y +A Y +B Z +A X +A Y A Y A Z +C Y +A Y +C X +C Y +C Y +C Z +B Y +C X +C X +A Z +C Y +A Y +A Z +A X +A Z +C Y +C X +B Z +A X +C Y +A Y +C Y +B Z +A Y +A Y +C X +C X +C X +A Y +B X +C X +C Y +C X +A X +A X +B X +A Y +A Y +A Y +C X +A Y +C Y +C X +A Y +B Z +A Y +A Y +A Y +B X +A Y +A Y +A Y +C Y +A Y +C X +C Y +C Y +A Y +B Z +C Y +C X +C Y +C X +C X +C Y +A Y +A Z +A Y +A Y +A Y +A Y +C Z +A Y +A Y +C Y +A Y +A X +C Z +C Y +C X +C X +A Y +A Z +A Z +B Y +A X +C X +C X +A Y +A Y +A Y +C Z +C X +C X +C X +A Y +C Z +A Z +C X +C Y +A X +C X +C X +A Y +C Y +C Y B X B Z -A Z -B Z A Y -A Z -A Z -A Z -B Y -A Z -B Z -A Z -B Z -A Z A Y -A Z -B Z -A Z -C X -C X -A Z -A Z -B Z -A Z -A Z -C X -A Z -A X -A Z -A X -C X A Y -C Y -B Y -A Z -A Y -A X -A Z -A Y -A Z -A Z -A Z -C X B Z -A Z -B Y -A Z -A Y -A Z -A Z -B Z -C X -A Z -A Z -A Y -C X -C Y -B Z -A Z -A Z -B Z -C X -A Z -A Z -A Z C Y A Y -A Z -B Z -B Z -A Z B Z A X -A Z -B Z -A Z -A Z -B Y -A Z -A Y -B Y -A Z -B Z -C X C Y -A Z -B Z -C X -A Z +C Y B X -A Z -A Z -C X -A Z -A Y -B Z -B Y -A Z -A Y -C Y -A Z -C X -B Z -A X -A Z -A Z -A Z -A Z -A Z -A Z -A Z -A Y -A Z -A Z C X B Y -B Z -C X -C X -C X -A Z -A Z -B Z -B Y -A Z -A Z -B Y -B Y A Y -A Y -A X -A Y -B Y -A Y -C X -A Z -A Z -A Z -A Y -B Y -A Z -C Y -B Z -C X +B X +C Z A Y A Z C Z +C Z +A Y +A X +A Y +A X +C Y +A Y +A Y +A Y +C X +C X +C X +A Y +A Y +A Y +A Y +A Y +C Y +A Y +C Y A Z -B Z C X -B Z -C X -B Z +C Y +A Y +A Y B Y +C Y +A Y +C Z +C Z +A Y B Y +A Y +A Y +A X +C Y +A Y +A Y +A Y +C Z +C Y +C X +A Y +A Y +B Z +C Y +C X +C Z +A Y +C Y +A Y +A Y +C X +C Y +C Y +A Y +C Y +C X +C Y +A Y +A Y +A Y +A Z +B Z +A Y +A Y +A X +C Z +C X +A Y +A Y +A Y +C X +C Y +B Z +C X +A Y +A Y +A Y +C Y +A Y +C X +C Z +C X +A Y +A X +A Y +C Z +C X +B Y +A Y +A X +A Y +B Y +A Y +A Y +C Y +C Z +C Y +C Y +C X +A Y +A Y +A X +A Y +A Y +A Z +A X +C Y +A Y +C Y +C Y +C Z +C Y +C Y +A Z +A Y +C Z +C Y +C Y +C Y +B X +C Y +A Y +C X +A Y +B X +C Z +C Z +C Y +A Y +C X +A Y +A Y +A Y +A Y +C Z +A Z +A X +C Y +C X +A Y +A Y +C X +C Y +C Z +C X +C Y +A X +A Y +A Y +B X +A Y +A X +C X +A Y +A Y +A Y +B Z +A Z +B Z +C X +B Z +A Y +C X +A Y +C X +A Y +A Y +C Y +A Y +A Y +B X +A Y +C Y +A Y +A Y +A Y +C Y +A Y +A Y +A Y +B Y +A Y +C Y +A Y +A Y +A Y +A Y +C Y +A X +B X +A Y +B Z +C X +A X +B X +C Y +A Y +B X +C Y +A Y +B X +A Y +C X +B X +A Y +A Y +A Y +A Y +C X +C X +A Y +B X +C Y +A Y +A Y +A Y +A Y +B X +A Y +B Z +C X +A Y +B Z +C X +C Z +C Z +B X +C Y +A Y +A Y +A Y +A Y +A Y +A Y +C Y +A Y +A Y +A X +A X +C X +A Y +C Z +C Y +A Y C X A Z A Z +A Y +C Z +A Y +A Y +A Y +C Y +A X +C X +C Z +A Y +A Y +C X +B X +A Y +A Z +C Y +A Z +A Y +A Y +A Y +A Y +A Y +B X +A Y +C Y +C X +A Y +A Y +C Z +C Z +C Y +A Y B Z -B Z -B Z -A Z -A Z -A Z +A Y +A Y +A Y +A Y +A Y +C X A Z +A Y +C Y A Z C X +A Y +C X +A Y +A Y +C Z +C Y +A Y +A Z +C X +C X +A Y +B Z +A Y +B X +C Y +C X +C Z +A Y +A X +C X +C Z +C Y +C X +A Y +A Y +A Y +A Y +A Y +A Y +C Y +A Y +C Y +A Y +C Y +B Y +A Y +A Y +A Y +A Y +B Z +C Y +A Y +C Y +A X +C Y +A Y +B Y +C Y +C X +C X +A Y +A Y +A Y +C X +A X +A Y +A X +C Y +A Y +A Y +C Y +C Y +A Z +A Y +A Y +B X +A Z +B X +A Y +C Y +A X +C Y +C Z +B Z +A Y +A Y +C Y +A Y +C Z +A Y +A X +A Y +C Y +A Y +A Y +A Y +A Y +A Y +A Y +A Y +A Y +C X +C Y +A Y +A Z +A Y +C X +A Y +C Z +A Y +C X +A X +A Y +C Y +A Y +C X +A X +A Y +A Y +A Y +C Y +A Y +C Y +A Y +B Y +C Y +C Y +A Y +A Y +A Y +A Y +C Z +A Y +C Z +A Y +C Y +B X +A X +C Y +C Z +A X +A Z +A Y +A X +C Z +C Y +A Z +C Y +A X +A Y +A Y +A X +C Z +A X +A Z +C Y +A Y +C Y +A Z +B Z +A Y +C X +C X +A Y +A Y +A X +A Y +A Y +A Y +C X +A Y +B X +A Y +C X +A Y +C Y +A Y +C Y +C Z +C Y +C Z +A Z +A Y +C Y +C Z +C Z +A Y +A Y +C Y +A X +A Y +C Y +A Y +A Y +A Y +A X +A Y +B Z +C Y +C X +A Y +C X +B X +C Y +C Y +A Y +C Y +C Y +A X +A Y +A X +A Y +A Z +C Z +B X +A Y +C X +A Y +C Z +A Y +C Y +A Z +A Y +A Y +A Y +C Y +C Y +A Y +A Y +C Y +A Y +C Y +C Y +A X +A Y +C X +C Z +A Y +A Y +A Y +C X +C X +C Y +C Y +C Z +A X +A Y +C Y +C Z +A Y +B Y +A Y +C Z +C Z +A Y +A Y +A Y +B Z +A Y +A Z +A X +C X +C X +C Z +A Y +C Z +A Z +C Y +C Z +C X +C Y +C X +A Y +C Y +A Z +A Y +A Y +A Y +A Y +C Y +A X +C X +A Y +A Y +C Z +B Z +A Y +A Y +C X +A Y +C Y +C Y +B Z +A Y +C Y +A Y +C X +C X +A Y +C Y +A X +C X +A Y +C Z +A Y +C X +A Y +C X +A Y +C Y +A Y +C Z +A Y +C Z +A Y +A Y +A Y +C Y +A Y +A X +A Z +A Y +C Y +C Y +A Y +A Y +B Z +A X +A X +C X +C X +C Z +C Z +A Y +A Y +A Y +A X +A X +A Y +A Z +C Y +C Y +C X +A Y +C X +B X +A X +A Z +A Y +B X +A Y +B Z +B Z +A Y +B X +C Y +A Y +A Y +C Y +C Y +A Y +A Y +A Z +A Y +C Z +B X +A Y +C Y +C Y +A Y +B X +C X +C Y +A X +C X +A Y +A X +A Y +A Y +B Z +A X +C Y +A Y +A Z +B Y +A Y +B X +A Z +C Y +C Z +C Z +C Z +C Y +A Y +C Y +C Y +B Y +A Y +C Z +B Y +A Y +A Y +A Y +A X +B Z +A Y +C Z +A Y +A X +C Z +C X +A Y +A Y +A Y +B Z +B Z +A Y +C Z +A Y +A Y +A Y +C Y +C Z +C X +A Y +B Z +C Y +B Z +C X +C X +A Y +A X +A X +B Z +C Y +C Y +C X +A Y +C X +C X +A Y +C X +C Z +A X +C Y +C Y +C Y +A Y +A X +C Y +A Y +A Y +C Y C X C Y B X C X A Z -A Z -A Z -A Z -A Z A X -A Z -C X -A Z -C Z -A Z -C X -C Z -A Z -A Z -A Y -B Z -A X -A Z -A Z -A Z -C X -B Y -A Z -B Y -A Z -B Y -A Z -C X -A Z -C X -A Z -A Z -A Z -A Z -A Z -B X -B Y -C X -C X -A Z -C X -A Z -A Z -A Z -A Y -A Z -A Y -A Z -A Z -A Z -C Y -A Z -A Z -B Z -B Y -C X -A Y -A Z -B Z -A Z -A Z -A Z -B Y -C Z A Y C Y -A X -A X -B Z -A Y -C X -C X -B Z -A Z -B Z -A Z -A Z -A Y -B Z -C Y -A Z -A Z -A Z -C X -B Y -A X -A Z -C X -A Z -B Z -B Y -C X -B Y -A X -A Z -A Z -A Z -A Y -A Z -A Z -A Y -A Y -A Y -A X -A Z -A Z -B Z -A Y -A Z -C X -C X -A Z -A Z -B Z -B Y -A Z -A Z -C X -A Y -C X -B Z -A Z -A Z -A Z A Y A X C Y -C X -C X -A Z A Y -A Z -A Z -A Z -C X -A Z -A Z -B Z -C X -C X -B Z -B Z -C X -A Z -B X -A Z -B Z -A Y -A Z -A Z -C X -A Z -C Z -A Z -B Z -C X -A Z -B Y -A Y -A Z -A Z -B X -C X -B Z -C X -C X -C Y -B Z -C X -A Y -C X -A Z -A Z -A Z -A Y -A Z -C X -C Y -A Z -A Z -B Z -A Z -B Y -A X -A X -B Z -C X -B Y -A Z -C X -A Z -B Z -A Z -B Y -B Y -A X -B Y -A Z -A X -A Z -C X -A Z -A Z -B Y -C Y -A X -A Z -C Y -C X -A Z -A Z -A Z -A Y -A Z -C X -A Z -B Y -A Z -B Z -B Z -C X -B Y -A Z -C Y -A Y -A Z -A Z -C X -A Z -A Z -A Z -A Z -B Y -B Z -A Z -A Z -C Y -A Z -A Z -A Z -A Z -A Y -A Z -A Z -C Y -B Y -B Z -A Z -B Z -A Z -B Z -A Z -A Z -A Y -A Z -A Z -B Z -C Y -A Z -B Z A X C X +A X C X -A Z -A Z -A Z -A Z -A Z -C X -A Z -C X -A Z -B Y -A Z +C Y C Y A Y -B Z C X A Y -A Z -A Y -A Z -B Z -B Y -A Y -B Z -A Z -A Z -C Z -C Z -A Y -A Z -A Z -C X -A Z A X C Y -C X -A Z -A Z -B Y -B Z -C Y -A Z -B Z -A Z +A Y C Z A Z A Y -B Y -C X -A Z -A Z -A Z -C X -A Z -A Y -A Z -A Z -B Z -C X -C X -C X -A Z -A Z -A Z -C X -A Z -A Z -A Z -A X -A Z -C X -C X -B Z -A Z -A Z -A Z -B Y -A Z -C X -A X -B Z -C X -A Z -C X -A Y -A Z -A Z -A Y -A Z -A Y -A X -C X -A Z -A Y -B Y -A Z -A Y -C Z -B Y -A Z -A Z -A Y -A Z -C X -A Z -B Y -B Z -B Z -A Z -A Z -A Z -C X -A Z -B Y -B Y -A Z -A Y -C X -A Z -C X -A Z -C X -C X -A Y -B Z -A Z -A Z -A Z -A Y -A X -B Y -A Z -B Z -B Y -C Y -C X -C Y -A Z -B Z -A Z -A Y -B X -C Z -A X -A Z -A Z -A Z A Y A Y A Z A Y -C X -A Z -A Y -C X -A Z -A Z -C Y -A Z -B Z -A Y -B Z B X B Z C X A Z -A Z -C X -A Z -A Z -C X -B Z -B Z -B Z -A Z -A Z -B Y -A Z -A Z -C Z -C Z -B Z -A Z -B Y -A Z -A Z -C X -B Z -A Z -A Z -A Z -C Y -B Y -C X -A Z -A Z -A Z -A Y -A Z -C X -A Z -C X -A Z -A Z -C Y -C X -C X -C X -C X -C X -B Z -B Z -B Y -B Y -C Z -A Z -B Z -A Z -A X -A Z -A Z -A Z -C X -A Z -C X -A Z -A Z -C X -C X -B Y -A Z -C Y -A Z -A Y -C Y -B Z -B Y -C X -A Z -C Y -A Z -A Z -A Z -B Y -C X -B Z -B Z -C X -B Y -B Z -A Z -C X -A Z -B Y -B Z -A Y -A Z -A Z -A Z -A Z -C Y -A Z -C Y -A Z -B Y -C X -B Z -A Z -A Z -B Z -C X -B Z -A Z -A Z -A X -B Y -A Z -A Z -A Z -A Z -A Y -B Z -A Z -A Z -A Z -B Z -C Y -C X -C X -B Z -A Z -B Z -C X -A Y -C X -B Y -B Z -C Y -B Y -B Y -A Y -C Y -A Z -A Z -B Z -B Z -A X -A Z -A Z -B Z -A Z -B Z -A X -A Z -A Y -A Y -A Z -B Z -A Z -B Z -A Z -B Z -C X -A Z -A Z -C X -A Z -A Z -A Z -C X -B Y -A X -B Z -B Z -C Y -A Z -A Z -C X -B Y -C X -A Z -A X -A Z -A Z -A Z -A Z -A Z -A Z -A Z -A Z -A Z -C X -B Z -B Z -C X -A Y -C Z -A Y -A Z -C Y -A Z -A Z -A Y -A Z -C X -C Z -A Z -A Y -A Z -A X -A Y -A Z -C X -B Z -A Z -B Z -C Y -C X -A Z -A Z -A X -A Z -B Z -C X -A Z -B Y -A Z -A X -A Z -B Z -A Z -A Z -C X -B Z -B X -A Z -A Z -C Z -A Z -A Z -A Y -B Z -A Z -C X -B Z -A Z -C Y -A Z -B Z -B Z -A Z -A Z -C X -B Z -C Y -A Y -A Y -B Z -A Z -A Z -C Z -B Z -A Y -A Y -C Z -C Z -A Z -B Z -B Y -A Z -B Y -A Z -A Z -A Z -C Y -A Y -A Z -A Z -A Z -A Z -C Z -A Z -B Y -A Z -B Z -C Y -A Z -B Y -B Z -A Z -A Y -A Z -A Z -B Z -A Z -A Z -A Z -C Z -B Z -C X -B Z -A Z -A Z -A Y -A Z -A Z -A Z -A Z -C Y -A Z -A Z -A Z -A X -A Y -B Y -C X -A Z -A Z -B Y -A Z -C X -A Y -A Z -A Z -C X -A X -A Z -A Z -A Z -B Y -B Z -A X -A Z -C X -A Z -C X -B Z -B Y -A Z -B Y -A Y -A Z -A Y -A Z -B Y -C X -B X -B Y -C X -A Z -A Z -A Y -A Z -A Y -B Z -B Y -B Y -A Y -A X -A Z -C X -A Z -B X -A Z -A Z -C X -B Y -B Z -B Z -B Y -B Z -A Y -C X -C Z -A Z -A Y -B Y -B Y -A Z -A Y -C Y -B Y -B Z -A Z -A Y -A Z -B Z -A Z -A Z -A Z -A Z -B Z -A Y -C X -A Z -A Z -B Y -A Z -B Y -B Z -A Z -C X -A Z -C X -B Y -A Z -B Z -C X -A Z -A Z -A Z -C X -C X -A Z -A Z -A Z -B Y -A Z -A Z -A Z -A Z -A Z -A Y -B Z -C Y -A Y -C X -A Z -A Z -B Y -B X -A Z -C Z -A Z -A Y -A Z -A X -A Z -A Z -A Z -C Z -C X -C X -B Y -C X -C X -B Y -C Z -C X C X A Y A Z -C X -C Z -B Y -A Z -C X -C X -A Z -A Z -A Z -A Y -A Z -A Y -B Z -A Z -A Z -A Z -A Z -A Z -A Z -C X -C X -C X -C X -A Z -A Z -B Z -A Y -A Z -A Z -B Z -A Z -A Z -A Z -A Z -A Z -C X -C X -A Z -A Z -C X -C Z -C Z -A Z -A Z -B Y -B Z -A Z -A Z -B Y -B X -C X -B Y -C X -C X -A Z -C X -C X -C Y -C X -C X -C X -B Z -B Z -A Z -A Z -B Z -A Z -C X -A Z -B Y -A Y -A Z -C Z -B Y -B Z -B Z -A Z -C X -B Z -A X -B Y -A Y -B Y -B Z -A Z -A Z -A Z -A Z -A Z -A Z -C X -C X -B Z -A Z -B Y -A Z -B Z -A Z -B Y -A Z -A X -A Z -B Y -B Y -A Y -C X -A Z -A Z -C Y -A Z -A Z -B Z -C Z -B Z -A Z -A Z -C X -C Y -B Z -A Z -C X -A Z -C X -B Y -C X -B Z -A Z -A Z -C X -A Z -C X -A Y -C X -C X -C Y -B Z -C X -B Z -C X -A Z -A Z -C X -A Y -B Z -C X -B Z -C X -A Z -C X -C X -A Z -A Z -B Y -C Z -A X -A X -A Z -C X -A Z -A Z -A Z -A Y -A Z -A Z -A Z -A Z -B Z -C X -B Y -A Z -A Z -B Y -A Z -A Z -A Z -A Z -B Y -A Z -B Z -A Y -A Y -A Y -A Z -A Y -A Z -B Z -A Z -B Y -A Z -C X -A Y -C X -A Z -B Y -A Y -A Z -A Y -A Z -C Z -A Z -B Z -A Z -C X -B Z -A Z -A Z -C X -B Y -A Z -C X -C Y -A Z -B Y -A Z -B X -B Y -B Y -C Z -C X -A Z -C X -A Y -A Y -B Z -A Z -C X -B Z -A Z -A Z -A Y -C X -C X -A Z -A X -B Z -A Z -A Z -A X -A Z -C X -A Z -B Y -A Z -B X -B Y -A Y -C X -A Z -A X -A X -A Y -B Y -A Y -A Z -C X -B Z -A Z -A X -A X -A Z -C X -B Z -C X -B Y -A Z -C X -A Y -A Z -A Z -A Z -A Z -C Z -B Z -C Z -A Z -A Z -C X -B Y -A Y -B Z -C X -B Z -A Z -A Z -A Z -A X -B Y -C X -B Y -B Z -B Z -A Z -A Y -C Y -A Y -A X -A Z -C X -A Z -A Z -A X -A Z -A Z -C X -A Z -A X -A Z -C Y -A Z -B Z -A Y -A Z -C Z -A Y -A Y -B Z -A Y -A Y -A Y -A Z -A Z -A Z -A Z -C X -A Z -A Z -A Z -A Z -A Z -A Z -A X -A Z -A Z -A Z -A Z -A Z -A Y -B Z -A Y -A Z -C X -A X -B Z -A Z A X C Y -B Y -B Y +C Y B Z -C X -C X -A Z -A Z -C X -C X -A Z -A X -A Z -A Z -A Z -A X -C X -C X A Z A Y -A Z -A Z -A Z -A Z -C Z -A Z -C X -B Z -C Z -C X -A Z -B Y -C X -C X -B Z -C X -B Y +A Y A Y B X -A Z -A Z -A Z -B Z -C X +C Y +A Y A X +A Y B Z -A X -A Z -C Z B Z -A Z -A Z +A Y +A Y +A Y C X C X -A X C X C Y -A Z -A Z -A Z +A Y +C Y +C Y +A Y +A Y +A Y +A Y +C Y +A Y +C X +A Y +C X +C Y +C Y +C Z +B X +A Y +C Y +A Y +C Y +A Y +A Y +A Y +A Y B Z C Z -A Z -A Z -A Z -A Z -A Z +C Y +A X +C Y +A Y +C Y +C Y +A Y B Z -A Z -A Z +C Y +B X +B X +A Y +A Y +C Y +C Y +B X +A X +C Y C X -B Y +C Y +A Y +A Y +C X +A X A Z +A Y +A Z +A Y +B X +A X +C X +A X +C X +C Z +A Y +C X +C Y +C X +C Y +A Y +C Y +A Y +A Y +C Y +C Z +C X +A Y +A Y +A X +C Y B Z -A Z -C X -A Z -A Z -A Z +A Y +C Y B Z +C Y +A Y +C Y +A X +A X +A Y +B X +A Y C X -B Y -A Z -A Z -A Z +C Y +A Y +A Y +A Y +C X +C Z +A Y C Y A Z +C Y +A Y +C Y +A Y +C Z +C Y +C X +A Y +C X A Z +B Z +A Y +A X +A Y +A Y +A X +A Y +A Y +A Y +A Y +C Y C X +A Y +A Y +A Y +A Y +A Y +C Y +C Y +C Y +A X +A Z +A Y C X A Y +A Y +C Y +B Y +C Y +A X +A Y +A Y +A Y +C X +A X +C Y +C Z +A Y B Z A Z C Y -C X -A Z -A Z -A Z -C X -A Z -A Z -B Z -B Z -A Z -A Z -A Z -C X -C X -A Z +A Y +A Y B Z A X -B Y -C X -C X -C X -A Z -C X -A Z -A Z -B Y A Y -B Z -B Z -A Z -A Z -C Z -A Y -A Y -A Z -A Z -C X -C Z -A Z -A Z -A Z -A Z C Y -B Y -B Y +A Y +A X +B X +C Z +B X +A Y +A Y +C Y +A Y +A Z +A Y +A Y +A Y +C X +A Y +A Z +A Z +A Y +C X +A Y +C Z +C Y +B X +C Y +A Y +C Z +B Z +A Y C Y A Z -C X -B Z -A X A Y -B Z -A Z -A Z -A Z +C X +C Y A X -A Z -A Z -A Z A Y C Z A Y +A Y +A Y +A Y +B Z +A Z +C Z +A X +A Y +A Y +A Y +A Y +A Y +C Y +C Y +A Y C X A Y +A Y +A X A X -C X -A Z -B Y A Y -B Y -A Z -C X +C Y C Z A Z -C Z A Y -A Z -A Z -B Z +A X +B X B X B Z -B Z -B Y -C Z C X -A X -C Z -B Z -A Z -A Z -B Z +C Y +A Y A Y -A Z -B Y -C X -A Z -B Z -C X -A X -B Z -A Z -A Z -C X -C X -C X -B Z -C Z -A Z -C X -A Z -A Z -A Z -A Z -C Z -C X -A X -B Y -A Z -C X -C Z -A Z -C X -B Z -B Y -A Z -C X -A Z -B Z -C Z -A Z -A Z -A X -B Y -C X -A Z -C X -A Z -A X -C X -A Z -C X A Y -A Z -C X C Z +A Y +A Y +A Y +C Y +C Y +B Y +C Z +B Z C Y B Z -B Z A Y -B Z -A Z -A Z -A Y -A Z -C X -C X -A Z -A Z -C X -B Z -A Z -B Y -A Z -A Z -A Z -C X -A Z -A Y -B Y -A Z -C X -A Z A X +C X +A X +C X +B Y +A Y A Z +A Y +A X +A Y +A Y +C X +A Y +A Y +C X +C X +A Y +C X +C Z +C X +B Z +B Z +B Z +C Y +B Z +C Y +C Z +B Y +A Y +C Z +A Y +C X +C X +B Z +B Y +A Y A Z +C Y C X C Y A Z C X -A Z -A Y C X -B Z +C X +A Y +A Y +C Y +A Y +C Y +C Y +A Y +C Y C Z +A Y B Y -A Z -A Z -B Y -A Z -B Y -A Z -A Z -A Z +C Y C X A Y -C X -A Z -C Y -A Z -A Z -A Z -B Y -B Z -B Z -C Z +A Y A X -A Z -A Z -C X -A Z -C X -A Z -A X -C Z -C X -A Z -A Z -A Z -A Z -B Z -A Z -A Z +A Y C Y +B Z A Y -A Z -C Y -C Y -A Z -B Z -A Z -B Z -A Z -B Z -C Y -C X -C X A Y -A Z -B Z -C X -A X -A Z -A Z A Y -A Z -A Z -A Z -C X -C X A Y -A Z -A Z C X -B Z -B Y -A Y -A Z -B Z -A Z -A Z -A X -A Z -A Z -B Y -A Z -A Y -B Z -C X -A Z -A Z -A Z -C X -A Z -B Z -B Z -A Z -A Z -A Z -A Z -B Z -A Z -A Z -A Z -A Z -C X -C X -A Z B X -A Z -B Y -C Z -A Z -A Z -A Z -C Z -A Z -B Y -A X -A Z -C Z -A Z -C Z -A Z -C X A Y -C X -C Z A Y -A Z -A Z -C X -C X -A Z -A Z -A Z -B Z -B Z A Y -B Y -C Z -B Z +A Y B X -A Z -A Z -A Z -C X -B Y -A Z -B Z -C X -A Z -A Z -C X -C X -A Z -A Z -A Z -A Z -B Z -A Z -A Z -A Z -A Z -A Z -B Z -A Z -A Z -B Z A Y -A Z -B Y -A Z -A Z -A Z -B Z -A Z -A Z -C X -B Y -C X A Y -C X -A Z -A Z -A Z -C X -B Z -A Z -A Z -A Z -A Z -A Z -C X -A Z -A Z -A Z -A Z -A Z -A Y -C X -B Y -C X -A Z -A Z -A Z -A Z -A Z -B Y -A Z -C X -A Z -A Z -A Z -A Z -A Z -A Z -A Z -C X -A Z -C X -A Y -B Z -A Z -C X -A Z -C X -B Z -B Z -A Z -A Z -A Z -C X -A Z -B Z -B Y -C X -C X -C X -B Z -A X -A Y -A Z -A Z -A Z -A Y -A Z -A Z -A Y -A X -A Y -C X -A Y -C X -B Z -B Y -C X -B Y -B Y -C X -A Z -A Z -B Z -C X -A Z -A Z -B Y -A Z -B Y -A Z A X C Y -C X -B Z -C X -A Z -A Z -A Z -C X -A Z -C X -A X A Y +A Y +C X +A Y +A Y +A Y +C X +B Y A Z -A Z +C Y C X A Y A Z B X A Y -A Z -A Z -A Z -A Z -A Z -A Z -C X -A Z -C X -A Z -C Y -A Z -A Z -B Z -A Y -A Z -B Y -B Y -A Z -C X -A Z -C X -C Z -A Z -B Z -B Z -A Z -A Z -C X -C X -B Y -A Z -A Z -B Z -C Z -B Y -B Y -C X -A Z -A Z -B Y -A Z -C X -C Z -A Z -B Z -C X -A Y -C X -A Z -B Y -B Y -A Y -A Z -A Z -A Z -A Z -A Z -A Y -A Z -A Y -A Z -B Y -B Y -B Y -C X -A Z -A Z -A Y -A Z -A Z -C X -A Y -C X -A Z -A Z -A Z -B Y -A Z -A Z -B Z -C X -A Z -B Y -B Y -C X -C Z -B Y -A Z -A Z -A Z -C X -A Z -B Z -C Z -C X -B Y -A Z -A Z A Y A X -A Z -A Z -A Z -A Z -A Z +C Y +C Y +C Y A Y -B Y -A Z +C Z +A Y +A Y +C Y B Z +A Y +A Y +C X +A X +A Y +A Y +A Y B Z -A Z +C Y +A Y +C Y +C Y +A Y +A Y +C Y +C Y +A Y +C Y +A Y +B X C Y A X A Z +A Y +A Y +C Y +C Y +A Y +C Z A Z +A Y +A Y +C Y +C Y +C X +C Y +A Y +C X +C Y +A Y +C X +C Y +C Y +A Y +A Y +A Y +C X +C Y +A Y +A Y +C Y +A Y +C Y +A Y +A Y +C Y +C Y +C Y +A Z +A Y +C Y +C Y +A Y +A X +C X +A Y +C Y +B X +C Y +A Y +A Y +C Y +C Y +A Y +A Y +A Y +B Z +A Y +C Y +A Y +A Y +C X +C Y +A Y +A Y +C Y +C Y +C Y +C Z +A Y +A Y +C X +A Y +C Z +A X +C X +B X +A Y +C Y +A Y +A Y +A X +A Y +A Z +B Y +A X +A Y +C Y +C Y +C X +A Y +C Y +A Y +C Y +A Y +C X +C X +A Y +C Y +C Z +C X +B X +A Y +B X +A Y +A Y +C Y +A Y +C Y +A Y +A Y +A Y +A Y +A X +A Z +A Y +B X +A Y +A Y +C X +A Y +C Z +A Y +A Y +C Y +C X +C X +A Y +A Y +B X +C X +A Y +C Y +A Y +C Y +A Y +B Z +A Y +C Y +A Y +A Y +A Y +C Z +A Y +A X +C X +A X +A Y +A Y +A Y +C X +C Y +C Y +C Y +A Y +A Y +A Z +C X +A Y +A Y +A Y +C Y +C Y +A X +A Y +C Y +B Y +A Y +A Z +C X +A Y +A Z +A X +A Y +A Y +A Y +C Y +A Y +A Y +A X +C Y +A X +B X +C X +C Y +A Y +A Y +A Y +C Y +A Y +A Y +A Y +A X +C X +A Y +A Y +A Y +C Y +A Y +B Y +C Y +C Y +C Y +C Y +A Y +A Y +C Y +C Y +A Y +C Y +C Y +A Y +C Y C X C X C Y +A X +C X +C X +A Z +C Y +C Z +A Y +B Z +A Y +A Y +B X +C Y +A Y +C Z +A Y +C Z +A Y +A Y +A X +C Y +C X +C X +C Y +C X +A Y +A Y +C X +A Y +A Z +B X +C X +C Y +B X +B Z +A Y +A Y +A Y +C Y +A X +C Y +C Y +C X +A Y +C X +A Y +A X +C X +A Y +A Y +A X +C Y B Y +A Y +A X +A Y +C Y +A X +C Y +A Z +A Y +A Y +C Z +A Z +C Y +A Y +C Y +A Y +A Z +C Y +C Y +B Z +B Y +C X +C X +B Z +A Y +A Y +A Y +A Y +A Y +A Y +C X +A Y +C Y +A Y +B Y +A Y +A Y +B X +A X +C X +C Y +A Y +C Y +A Y +A Y +A Y +A Y +C X +B Z +A Z +C Y +B Y +C X +A Y +A X +A Y +A Y +C Y +C Y +A Y +A Y +C Y +B Z +C Y +A X +C Y +A Z +A Y +A Y +A Y +B X +A Y +C Y +C X +B Y +C Y +A Y +B Y +A Y +A Y +C X +C Y +C Y +A Y +A Y +C X +C X +C Y +A Y +C X +C X +B X +C Y +A Y +C Y +B Z +A Y +B X +C Y +C X +A X +A Y +C Y +A Y +A Y +A Y +C X +A Y +C X +C X +A Y +C Y +A Y +B Z +C X +C Y +C Y +B X +A Y +C Y +A X +A X +B Z +C X +A Y +C Y +A Y +A X +C Y +A Y +A Y +A X +A X +A Z +C Z +B Y +C Y +C X +A Y +A Y +C Y +A Y +C Z +C X +C X +C Z +C Y +C X +C X +A Y +C Z +B X +C Z +A Y +A Y +C Y +C X +C Z +C X +C X +C Y +C X +C Y +A Y +A X +A Y +C X +A Y +A Y +A Y +A Y +A Z +C X +A X +B X +A Y +A Y +C Z +C Y +A Y +A Y +C Y +C Y +C Y +A Y +A Y +A Y +B X +A Y +B Z +A Z +A X +A X +C Y +A Y +C Z +A Y +A Y +C Y +A Y +A X +C Y +C Y +A X +A Y +C Y +A Y +C X +A Y +C X +A X +A Y +A Y +A Y +B X +C Z +A Z +B Y +A Y +B Z +B Z +A Y +C Z +B Z +A Y +A Y +A Y +C Y +B X +A Y +C X +A Y +C Z +C X +B Y +C X +C X +B X +C Y +B Z +A X +A Y +B Y +C Z +A Y +A Z +A Y +C X +A Y +A Y +C Y +C X B Y B X +C Y +B X +C Y +A X A Z +A X +C X +B Z +C Y +C X +A Y +A Y +A X +B X +C X +A Y +B Y +C Z +A Y +C Y +A Y +A Y +A Y +B X +A Y +C X +A Y +A Y +A Y +A X +C X +A X +C Z +C Y +A Y +A Y +C Y +A X +C Z +A Y +A Y +A Y +B Y +C Y +C Y +C Z +C Z +C Z +A Y +C Y +A Y +A Y +A Y +A Y +A Y +B Y +C Y +C Y +A X +C Z +C Y +A Y +A Y +A Y +C X A Z +A Y +A Y +A X +A Z +C X +B Y +A Y +A Y +C Y +B X +A Y +A Y +C Y +C Y +C Z +A X +C Y +C X +C X +C Z +A X +B Z +C X +C X +C Y +C X +C Z +C X +C X +B Z +B Z +A Y +B Z +A Y +A Y +A Y +B X +C X +A Y +C Z +A Z +A X +A Y +B Y +B X +B Z +A Y +A X +A X +A Y +C X +B X +A Y +C Y +A Y +A Y +C X +C Y +C X +C Z +B X +C X +C Z +A Z +A X +A Y +A Y +A Y +C Z +A Y +C Y +C X +A Y +A Y +C X +C X +A Y +C Y +C Z +C Y +C X +B Y +C Y +C X +A Y +B X +C X +A Y +A Y +C Y +C Z +A Y +A Z +B Y +A Y +B X +C Y +C Z +B X +B X +C X +A Y +B Z +A Y +A Y +A Y +A Y +C X +A Y +A Y +C Z +C X +B Y +C Y +C Y +A Y +C X B Z A Z +C Y +A Y +B Y +B X +B Y +A Z +C Y +C Z +A Y +C Z +C X +A Y +A Z +C Z +A Y +A Y +A Y +C X +A Y +C Y +B Z +A Y +C X +A X +A Y +C Y +C Z +C Y +A Y +C Z +A Z +A Y +C Y +A Y +C X +A Y +A Y +B Z +A Y +A Y +A Y +C Y +C Y +C Y +C X +C Y +C X +B Z +A Y +A Y +A Z +A Z +A Y +A Z +A Y +A Y +A X +C Z +A Y +A Y +A Y +C X +C Y +C X +A Y +A Y +A Y +C Y +C X +B Y +A Y +C Y +C Y +A Z +C Z +A Y +A X +A Y +A Y +B X +A Y +C Y +A X +C Y +A Y +A Y +A X +C Y +A X +B X +C Y +A Y +A Y +A Y +A Y +C Z +C Y +C X +A X +A Y +C X +C Y +A X +A X +B Y +B Z +A Y +C Z +A X +C Y +A X +A Y +C Y +C X +C Y +C X +A Y +A X +A Y +A X +C Z +A X +A Y +C Y +C X +C Y +C X +A Y +C Y +C X +A Y +A Y +C Y +C Y +A Y +A Z +C Y +A Z +A Y +C Y +A Y +A Y +C Y +A Y +B X +C X +C Y +C X +A Y +B Y +C Z +A Y +C X +A Y diff --git a/day02/src/main.rs b/day02/src/main.rs index 54d9b83..f3d1726 100644 --- a/day02/src/main.rs +++ b/day02/src/main.rs @@ -61,19 +61,16 @@ fn get_points(input: &str, f: &dyn Fn(&str,&str) -> i32) -> i32 { #[cfg(test)] mod test { + const INPUT: &str = r#"A Y +B X +C Z"#; use super::*; #[test] - fn it_works() { - let input = r#"A Y -B X -C Z"#; - assert_eq!(get_points(input, &get_round), 15); + fn rps1() { + assert_eq!(get_points(INPUT, &get_round), 15); } #[test] - fn it_works2() { - let input = r#"A Y -B X -C Z"#; - assert_eq!(get_points(input, &get_true_round), 12); + fn rps2() { + assert_eq!(get_points(INPUT, &get_true_round), 12); } } \ No newline at end of file diff --git a/day03/input.txt b/day03/input.txt index 46aefe5..5533a94 100644 --- a/day03/input.txt +++ b/day03/input.txt @@ -1,300 +1,300 @@ -ZNNvFWHqLNPZHHqPTHHnTGBhrrpjvmwfMmpfpjBjwpmw -sbdzQgzgssgbglRtmjlwhjBlfrSrMt -zgsCRzJbsdRVQCDbcgLGWWLnZNGVLLZMNZnq -tvHhRtZGMvMHvfsrBBCTRbwbccRc -qznnlpzzDppWlDpQpCrcrwnBNwTZnBTZrn -PdVZJJqVZdllDPFtMjMgLjGMHvSgMF -csbhhVDDvzlVDcbccGGvfRjDHCjNLRHRCLfmnZfR -dFrStSTTmrrrHVfV -MMgQMMTMVTdgWtwTPwSgWSgGbbppJzlplvhBlPbzhlhbzG -FDJSTtSGhpPFDmFTZDpTFPmCBBrHqsCBhgBlqqrqrlRrHH -dQwMtfdzVwWfwctwnfnQCHllzRrsNzrrgNlCgqsr -fLfQnVjfwQfMdfvfnVvWDvtJPFGDpvZGbZpmbSPP -TzzCrJcDrTDdLDCJDvGNPCFqlZWlvNvWpq -RRHfjsQBFsjgjBQsWqGpNvZQqQlPPQPN -VnHBnRVssnnjsSfBwbMSrrbTwJTcwSDF -HJCgHCCFFFVGJWTlbqDdlqTDDpgl -cZccSmLrfZcrmmzSQftdpDtTHdbQTDMQ -NZZccrrBwZRPNNzmcLSSjJhGhVWCnsFnHBjGChsJ -qwwwJHTHqdFDtZBFPfFBZFzM -gVRcLnnWVgggnnnQgVWWNZtZrBfLBzZzBrMPPrZvPv -GQgQSVRtsVnNRGSCdpmwspmbmDpHmhwd -bhNgNfgwpbLMhCZMGQBmDm -FrcHrSllcqcFFMGLBDQlMDTGlT -FVSddRSJRjLwbjJPJw -wzhhrTwwTrSsdHQjjSHnBjQj -gRDCmVgRgMvtMfVMRBBBhWCHQQHGJHZJQZ -NtgVgttVbMNmvsNlpcrLhLTNPw -MCgjsfnscgjjgnGgJHHqHDgdHbGr -QSSmRFPpRtPFQLQRmPzvBzzzDWqrqWWHJGGNrJJbdtVWHJDV -BdSFdLQzRFlSLmQplffwncfscChhcsMj -GfVmfnmJVnNVFhnhGmbmhpHvqjrzHZBjfvrtBHHZrwBt -ddWQldlMdWMlQsLWTLQgMNwBrvjrZjNrwzZjswHqrv -QQdTRcgTRPDlMQlQPQdhcNNnbJmbGpVnGchFmm -CjjZCCZfvWZRHHhRtwhvPN -mrnqlqMqBlSSLnBTLBwmHPPWhPPHtFRPWzwt -rBVTrrMMSMLQBrndGcddWQbbdZfCZJ -LFtdjHjLjLqHqstLTjFLFqNMnMhhZdDDNMVbWdDDbhnZ -CrBpBGnzrzmczcllrphCZZWJMDWRbbZNMDMR -GwgvzpzvrcmBrnfHjTgqTsgHjF -rMPPZcplCZlZPwtSwhtBwCQQzB -FvDGffLqqmQFwmmhzt -TjJjJfHHVDVnHVgZZlQppcVscP -hVcqHwhgwwwjHjjGWbvrbBGrsWVWGn -CttPRpMmPDTWbWltlLBnGl -pZmDFMmPMfnZwqqwfcqJdHgz -bSJWhWJCbGGWJPStWTgRQwzDjgQQjsDW -nFBBVQVrVBrNFMFZVpBBZFZrDgdTldgsRsslsljsRzTRjzns -rMcZcHcBQPvbbHGP -mSfmwqfmzrfHwFfmrwvPHqPmMFRlMDDZBCVVRCVZVlZpMRRR -TWjdTWhTsssLTGsJNWhTQddjRMDMtNNBSCDBllMMBVtDMVRZ -QhWTQcdhjThsdGbTLGjWHmffnmHwnwHrwqmmfcwS -LmrsMQnnpfmMLllvTvqvFFzvFHNN -WGRFVWdwZWZvCbJzcvJNzw -VjGhDtWGSFRGjVVSFdjjDPBfspPnnMBLPLrrpMMm -qqqCCJjtqtqCtqLZspHWBdSrWWSzzbzHFWBldb -GhwwcwPFVDcNFRRGwwzmlBrBWvllrvSzlrcd -DGGhQNNDhTpZZqqLQFQQ -QfZmgQQZCCMLfNrgprdNvvdrTg -hhttsBmBDcFRBlJshJcRrnjnTvNqpddNNqvndp -JtsGJGtGGJJJHDbctllhZHmMwMQSPVPzHSLMPZmV -DScSjZcNBZqjDDcLLfFtPfCfjfPvfv -pTmRlWhdMwTLGwCf -mRdWCVVglWrCmVHVrVCmdrbSzNcBDBqBZDNHqssscNzqNc -sPMHGFMsrPNCPnNS -ffJzllbzpZBllttBtfglgBTbSCVCmmrNFmmbFNvCFLLb -cpZqpfgZZJtJqJJJfWHWhHdHWHjcdRdFHD -ZZPfppvzMrlNBFcvFB -shJgstJwWLVJwcrFFVFrBVNNqFFB -HwWJdLHWWLcQgssHwwSQSQtQzCnZZMpZCmdzZCzpPzpCPRCj -QCpLRbsCCQQLbQzCBQDQBBfTTffWtTctJVRNVtnfwtWV -GvlqqlGlmMrdsvrhmlcTvwJtwNwTvfJfcWTW -lMhgqGhddjqFFCzBBpbsSQpD -JJwGJwVQQwVSsSMhQMQgHfgfTtrrfVTNgNNfrt -dFDWCDdFppvDFmWWWnJTPllHmHlgrqrgggtH -DzFbWjdRpbdFCjjRbnFbQBGhhQBBJZwMhScwZwJz -HttvHpHmpJWtHmFNvlvdMSVdPMtLVCCMMMfcfL -GjgzhGSGSSdCcRMVjMdc -QshbnghgnGDnqsFrNSJFrsNs -wJpjMwzjzdVbzPPVpbCHnqGnBqnsBrNCwgrC -ftTLLDTQtLTGTGtFrgHrvqgQnrvQsCHH -fTcFFfLSfFFcGFllcFhPJPjWWJSjSWzMWPdS -ZjNdmjVQVZmvNNZNNZHWZmWtsJnwTpJJswpWwGqJhJqGpp -FcRRcDblDMLRcRMLFFMDGsJnqhwpqTTJGwnsfnlp -LRBrcLbbgLFgBbFqDvdHQvCCjNzzzVrZdV -BdbLWrgdvgWvVJgWnDfNhVnqhCCpDpcq -tSQPSTSGPMmlMPtQQPJGtGQRCcnqqfnRhCcChDqnCfRScf -jTssPsjMQMmszPjlTtsJdFBFrJzrbJdHZFHdWH -vCccctvvTTtZcgLGcZTbssbMWnpMpmLWqnNjpfPPfPjMPp -wwBBlRBBwDDVFRhFlRhdRRVWPnnpMpffmmffrpWqVNPm -ddhddRzHlQHFJcGsCztTgbNzST -fJctfpVWcnfRLfrRwP -vmmnvDQDZTNTmGGTqTMTvMqwBdLjBvRzBRrRBRLjjBPzBB -GMnmqSTFFQqttcbcJWgsSt -rHNfmfRsmfRGfDNcRmcmMQlLCGSnQwwPPCSnzQlSCl -bsJTBsVhFsVpqFWFgPCwnQwBZzwQzZLlzn -qggTTqvqgqbbTTFqVqgWqvNmmMMRdffftNfMDMmscR -rFWQFszrwjsjFWvshPTCmLZLSTLwSLlgSP -BQbcqVHNVqVpVpmClJgJJHSmZLJm -qBNNNVdDMGBpDcDWsvdQsFrFnjttfj -qGhmttmzhtMvhbrLdSHbdSHRzb -WCBgQJJpjCQlgdHZrfPRPSRbNg -jBTTDjlnjnJDJTQCVntcwtwMSvqcGFDhcvsh -ZTrnTqMWWWnfrddMGJPgPLlPbw -VvmGRVpBpNNmvNvjVjtpNpCNLLLJHHBdgLPdwsdsbLlwwlwb -GmCVSCRVGmpCRVvttmpDrQZfhnzhzqnDWnrZZTQq -DQBZHHtWHzSvZvDQWchgqsqqhrrhhcqrcZ -jdMfwlFfFlTfndwpjjwGnNrqhPTmPSPTPPhmgrPSrh -jlGbwGMdlnJpGFGjpnFCSJzzDDtWHCBBQBvtVC -RrbBWBRRWSRsBBVvsPHZDwSjjPdnHwtPtH -fTgfzMmNJpmJgfllgpjVQtDDndVQpdnHVtPp -gGmlNclTGmGFhLVcVrvLqrvc -QcpCTVCZVcCwLcCVvHvvVsCcNzNNSbPRzsDRDSBlsNNzDRtb -fggMfJqgrWFpmjWMggmrfMWNSbRSPBDbNtJRtPJzlStBbN -gdnmpWGnZvdQCvdv -tqqcLqqDDqNtDrqHrrPWlTlTWZTMzTFzQlMPSZ -pfnpmmppmppRGjwbjmnjwspWbQQQTMWZbCTSZCSQlCllZF -gmpVnGmmmpjDvVLBFqqvrH -LqBvJHZvbHGBHrBtGGQTmSVprVzhpVPDPQzQ -CRdRgwCfhTVDzSdQ -fRCcjgSMjfNgMMLGbGZtvBbGHv -HgvtDDzDpvwgvvqdHPZWdMssTTddSs -rJFrGNFVQmNFVmRnWhhsrTbhwhZTrdTd -VQGBBBVNQClpcBvBwD -PWlSzZGmdmGmlGmhggBpvMjvMjFgPJ -TtLRDtQQfTVcQQQRtBsJFFccFjWhJJFMBs -HqVCNtWHCDwdnlGwGqSr -RwdRJgCJRGGmdMbcGbdnTnTtttLLnptMtMtMqZ -DWsWPFrPqVPPLVCB -zQWWsslsQHFhDSszDSFQzJJJmvcgblRgmNvCJmvNgw -tpmFrWTtRpRTtggsSlnQpsnnlSHPsn -bZwZjNNZGLSrVsGndPPV -NvrcjCfbvvLBDBWfWFgRRm -WWFMgWmMhhwDcMMMDcmLWLtQwwsjbsQHvZHbRjZfsZzH -PTCplTCdSJJCpvPGNSvsbsfHtbQZzdHjQtjjsj -vNGJPpqJvJvqghgFgWFmLD -RlRpLTZCjWRjRWwpRsjHjbSbqMqMvvnbnGMnGGqQCq -gddfDNczmgPthNcDdgPVnbbzbnJrJJGSSVJJQS -BmDmcDmcmhffdBHlRwjRLpwlWQ -prQlfzlWRPzgQWzlMPMRppssHHsDsHjwnHHbWDwwbwjL -vFBJJtZNShJvZFtdSqtmqjTDVHVGDHbwVHDVsDnThH -vcjBZZdZqvCfpzRfcgRp -cggpqgRlSpNsgNggbjjj -ZZSSJVLVLFDZWNGjCWWbCjsF -vZLvfZQQfQtJVJDQShLrLfMmnldmwqwTqqMcMTMTndrm -bQBMtBPddtMFbJFhRGzMfzvnRGRSvWnW -TmHTqlVHwVpQqjmwGvSgSpnLpzfWGWSn -TTrDQCDrrTmDCCCVHHQZBdZFPdsNdFBtFDhtFB -fjpQvNZcGhGGTtQS -DVJzvbVmHbbtSTSTRStzTM -VDvmqllmJfjWlnplNs -ZmdHZJjvQLdRjpmLJrqqZBhhtCschPfBPcrDfPffCD -MWWSMMwnwlSgzWFFgSwzVwzqcfDCfChCbbtssbfDChcD -NMqFTwGqMwgwwgjHRdHRjdmQmQTm -TTqWPCWRhTWqPNjPJMNtrlbJFttQwwrBrlbwlc -GfpSDGZvpQffSHDgggDZrHctFmrHncnnwwbBtBrt -SQGfLsSLZsqMTRNMPT -HdBdnBZJTZBBmsfwwBlh -MjCVjzwqWrfzplzW -vVbqCjjRgjwMbnbGHJScScZHLL -dwwwtCdznvDDFrMrrw -GmWLQmgQmHgcdGcsTgTDqDbSfFWfMDMfbSNqvr -QhTLmVQHLmdLTjGGVptRnZpZBZVRpPpP -CzjFpzRHdtBFBCqNqSbJZWcQJTSbQjMTWZ -wGwVLlGrdVGwDnwsgfMSZvJMbWJcWlvbbMSc -rDfsgggrGnGngsPwdVLfDnmDtzzFNCPHtzCtFHpBRqhPztzR -mrgWzBcDtVCcQcCCdscf -LRJhjRjPZvqSRGhGjLgMCdHpMNwQCpMHpHMS -GRvGJRJjqPZbvGGhRjnqLJWtgFgtzTzDrFnTWrlTlllW -cbmcddlffvbTfvFflpZzsMVNznNVlnqnzqHMNM -StWJBQRWLRWNPNMCswRVHC -BJQBhSWhjSthJQGGWWggJDDDfbdbbfHbddbrFrddvFvv -jFqvqvWZWDtBJrrlrq -TzGcbHcrmVzMGNSmTcGDtBthJCNtsJDlBCghgP -bTrnTccnLSrrTHbnwfLjfdvRRwZFdwfR -drHVrdVDfsDbVsdVDbVqRwbZZwCRCCCJlJThwRgT -jFPcFpBSvtNPzSFcjcQpcQjpThZCRltGRRRJhwCwGhwgwhRm -SQSzPBjjPPSvLqqssdnqLZLMsM -bQTWlWlvQclNwwWlCCLStCRSSjStpj -zVZZDdBnBmgzVsjsLthSpshdCL -DfBnrmBmgzHBfDHmnGrNFCwQvTPvqCTwqTFGbF -srSWJnrbmlWlbhzsWszSvPGwvgDhcjdjjfvhjvGv -BRRQFLtNfQNMpqpQHDjdDjDcZZcvwZZHPH -NLCNCtRQfRttRFRCTqMBqQQrzrbzrlJmVVbsSWmVrTbSzJ -RHLfLcSRTFSghLRHGbwZmMZddgJswZsbMm -ptqjtCzzQztqCjDlBGpDpbMZdwmMbZsdwNmdJpbs -tttzCVllDCtDQnQBVHGHWvWTLWcLSLHf -FVlNnPqbGTHftghggJqf -zLcZWZpWWrcrZLLZDWrwMcrhBFBttChBmBgptChhtFftmf -LZZLrDrrDDMrcwrDwsWFzdTlnGQPQQVbdbnsvnvsVQ -BbPNMJNbQvDbvPLwHflczlwwzf -pZjWZGZjFGdgpnVgZhghdmcflrlswzzcstlrLwhtwc -WZSdqFjqSqSWdGFjZpdMTTDNTvLCRRLLqRQMCN -FqgFGtbgTvRwrLqhvw -JCCWJWCdJMQNNsSWsMPQRDDLDSDLwTrrvnwfDvnD -HdPJlBBHCCQdBMWdTtVbgHczGVGjmtzG -PLlZDLZDsFCvbDQv -HVcTmVmJqVzqczfzbjvvCFMRfCsWjMvR -cqHzTqJTTTTzzmnmrctrBlLlvSlgLdZvSwSlpw -SbMMNJjmgMnJdSSbjVFZVSQrlQfWVQVWZh -PtqDqPGcLHzHpqLcRzRsfQFfZlfRfZfRFVsl -cTDLcqGCzDTqzzDLDzqPTtJvbBJMnmvjbdlmJNvmdgNC -tDJDlZVqJGbvHNQbNFFsFPmLns -ppczpzpffGwfBNLGmn -WShzgTTpWzhWztJJGJSvtvvtjq -TbZFTFScnCZFQRTCqQdBjdJqjBqjjQDB -rmmLpLLfzrlmslMBHvdRddNDDJDrqD -MWwLPzmWfpsMmmlMPMWLwRTZTZnnTcVCcZFCwSnZ -SqmClqHssNWCqPTcWcGhBTchVV -ZnnnDflRpBVTTVhPBZ -DpgfvnvMfCsqlMtSll -ZzLMRZpLMwwppZqnQGvQgBSvlNVlBFFNFVrg -HcqhTmhmdDTPFTJgTTFBSgJN -mccPdDDHbssbtwZMqpbzCRGM -TgqnTltgWqLRSRnlqddngFfrvHvrBTfCCFrFVTvVCf -cwNJmPzQwNzczzNsJGhhHfhrfvVHGvtvVVfC -jjtbtDswcmPWlbgRnRdMZL -TmpTBBwvspTptRmsmTGLQDGRHGgVGLSQSMHQ -ZlPWqjWrzjPqdrlzbrbrwfrWLHVMLnHDMVDQnLQfQfVngQLS -zNwbrrFWbFJpmpmvvt -RMQQMwHMMzcFsWsDrWfcpJpS -LLhZmGVLhVlTZfWWfWpCrDsGSp -VLVTnqjjZngtQRFjvzDM -gmRBpjrpRvCfRCrBgvjHShnbnngbgSJnNsHMHS -ZDPTwGWtqwHhSnbcMNJw -DWGGqtVVqldWZzMzWmvjrjprLRFjRVvvff -tCzVzsVtDFzssnSsgdqJdCNqJhmgmpqq -PZccPGvQfRLMQwNdhpwhNh -jLrcbRjPZBrcPdjRHFlWnVtBFslSWznW -vvvbJbWrLvFWHzZzZRhB -chtwTmCNlRRZzRPT -hmcCssCswrMDGMSrsr -LStGBsQLlllhzMzs -dzVZDNWRDdZNDTZTPvWVhhphpMlfMccRmfnlMlRn -VFvgTrNPdFWNNFNFTzTFFSjSQBCqrtQwSBGLLBGwGL -qGJSJhWStdSfWvSvtGRRnzRDDggrgvnzsmRP -lTTLpcljjGlLlLNBpjwFQDQmRnrRDPrPscRrDDng -NCNjFlHNCTVjpwGqGSVbJddqZZJM -MbWdgvHFlMvmzTzShvmm -tqjqpLsNsrrsjstNLpQrGVhVBzrhVcfmchDcTPVVmc -RqwjqjqsGjjGGQNjGpQZpqRFJgmMHwdbFWgnHMFdwmmCFW -HHHLcCcVHjTHglsB -wDSRwzzRpMSdNSPSwSpRbqvgBsdqlgTvBFBjgFvvgB -RpbzPssDMWwNRbRNRPDsDhJthLQVGLJcctQCJQfQJCLm -WsZgbNgZVCCWbVVVmgZbCCRPccGnzPBqJjzWJBJPzvBvGz -SpfThHtrHFBPPzJvPntj -QHDhhrhpTQpHhQHnfwnTCNlbZCCDLNllZlVsNCNl -QtzJFRQLMRnZcZsfcphlPQ -qSBbjmWSCNmVldSqqSqmjCSZshfwfrPPZZfcPVZfhgsgPg -HqBbHqBGSlNBbltnLLHFJMtRvRTD -tcGtDdMcttttHNBlMctldlwjwwqqCLCwDwZjFCZhmnwC -VrJgvWWsPvRgVgrJQvfQfzgVzZwCbLZmnmwCwZqmnhjZbnLj -sJpffsRWWRJVWWpHltSpnMHGcMTl -zNqRbqSbfdcTLLfS -ZVPzPnVvdLwLDPfF -VWnzQCVWZVMzQRHgqgqrHGtGMp -PbHpWfWPvRfbzWPFfRpPDtBwSHMwCBgDwBjDtMMM -hTTdZQlcnTcmqVTdcddrDgBSwsjjBgqBtsCgMD -hlldTmdJJmJdZvzfFfNJFJgRzR -PJWvJBbWsfLQWsLvmCqHCcNLHqHLLcwDqV -dQztrZrdwHhptqDH -ZrMGjgMSrdzQGQRJPvGGbm -RmjljZChlDZBCRRvlmNSLSqMNLzwLvppwQSQ -sTnVnPrVGsGTPddJrfgQgqLgGpMNQtgNtNzg -sbbTfTdcJPnHbsJfHsdcmDDmmqBZlClmjBRDCZ -CJmHLmHFFCFbHsbJsJqvqhQqLDhQZvnQDZnn -wGwppTjdWPdgFpGcScBqNnNqNhQlDqnDlZZW -pGcgGgTpGjFdwpSFVgSdpPjrMCMffzJzRzztRfHCRsVmtbsz -CgBClZfCflPflNZRvfQswwmwmwQsQhgppdhm -qbzDGrjLLNLDHDqtJmmhhmQdhwpQhhbp -NLGqVqjDjjGrMFrvFWPBRBZnCvfFnT -tbrrHsgsVmmmbtgwVsQRqjJMmqMjQfJfLFLD -ZvlBGzdvjGfRFJQJ -dBppnnBBhdzZncBPlznpnNdWHSsbWthbSCgHrVfgSSwVgr -VRvMtRVFHQLvMRQFQtBctrthshTTgCmhTrgWhWZsZZ -lzJlGBSPPhzjgZsTCr -wJlpJPfDSpwBnddqJDdpPpcvMFHFMvNbvnNMFHHRVVbR -CPShbbdlGCdQqlRPGPdlDWDFzjtFjggCDJgWczfF -mrHrTrrBMBsmNsrwsBpnfpggDDcjjDDpjzFJzzjtJz -BvsNvBLHrrrNvwBTNNsNGbdQhlPGGfqhhRGqLGdl -PSSlPtlStGhPNMtwPMPJzDddnbnDNTDDnJqjbz -FFVHRwVLvFvVrVHrZcLmRHggjDmdDnDnznnznzQjzdmJddbn -WrvgRgcRcRrrcRvgcVrHVrwCCSfsCsGsllhMSSSSMttlSCpG -hBPJqVZTqqPSlGlfddfddZvl -JWWMJCpnMrmztzdjnzld -RbWsrwMrpbRspbWgpwhLJPccNVqLLPSVgVPV -hcTrWqcfhwGfWrWMjHjGvDHPmJMDzF -ZtlsnZZtLBSbSssnbndjDJJFHFHJPHPsHMTHHM -ntRZtSbtZgZStTqchwQfRwNpcq -GfLqrsqQGgPgjjQGVcNvTpTpNFcWPvPPpT -bRnRLnMZFdCMcpvT -RnRhzRlmlhhHhhmhRsqLrfzrGVSrGBSGrL -fbMffwdZsncrGcfG -qDBjSSLqhLBSmDbjqNhqTLjCGrCHGrvcGWcpWcrGWnCrpm -STLDqbhTLqNTNSRhlwZlJlRQFFRwMdPQ -TVVGNFggcjPPJzwvQlRRwRvSlcSc -frsBbWhtSRzSLfRf -qDCqddbsWrqzhsdNmdJNJHjTggFFVV -NTWTDrSdFTLtPTGf -lZqjHlVRvRltLtRWFMtFLL -qvjWzzvVbZpjqllggscdchwDrCphwsdhrD +zBBtHnnHtwwHplmlRlzPLCpp +vvhJccJFGFcNsdNNJbhJsJQplQMRLQMlfdfTPCLfQQCT +GPhjcjhZDjWtnSVH +BNhHVhrGNVTbDHdDJdJRPJdSQQSJwPjR +lvtsfbsqzwSnJcvjSm +MftttFLftZMLgtgMbltMqZzbDNrTpVGhNWrDTrpTGNpZGZhD +VSSHcTgTtTdtllZlzmmbljTn +RqMqsFfQLLFLQFMMfRLPZLvPpCfWrbpmCbjCnfjlWmnrmmnm +hqRDqPDRsqNHwtHSNBZtJd +tNFDpDFrtdjfmjjjFmFFdScpZhZScTJgpHccHhMJgS +lLzSlSCQqbsVhBghggBZgCcJ +zRLVVLQnvQqVVzRldfWrwffjjdwSdfjv +bpWqqqWvHBpwGBCCRl +hJdjdJFQqdBBDMMC +tFFzJZFtJSqtZJQsWLbNSTnffHfvTH +lFhRZhFjPlqMlJqZJlJcRLwrLrwStRwtsVVtVSrgRV +WcpDvDfBmpDHzWBDbpbmWmNVSSTzLTtrVswgttVVzwwr +pbWfmGBpHfDmWnvvGbmWnjjMqPJMlMFPdGcjqPqPhP +NjFNRlpVLFCSSlbBWWfw +pssPZQQsMnzmtnQPttzDBbBJBcrrJWbrZSBJSbfC +QTHPHspMNGHdhvRR +QfPdSJfFJmthSthtwbsNLbPLlLTLpbvP +nHnMBnZqqgBMnWrZMqnZVcbCqRwNsvblRwppbllTsRNp +nZHBHznMnWgcrnVBtjFdfmzQNtNddjNF +hFhfPghppPhpRNhzsjsvHVzjpsGnWz +tTjlCCwMqtdMjMctGJWHwWnVwWnwvWGs +rZdrjBBtqdCtlcdgFZQLfhRLFSgRNP +RDHSWrJWffJFlJCgCMCDjCvzjPMP +QtGTndBwBtNzBVjBCMgB +LdwwMpTdwsRHsqSHqHJl +RfsfzvLLFvFzCSvSbDsTpTGMPMZPPTMt +jqWBjwBBNwWqwPGZbTwVwVtD +BnhgglhhNNngqjBjHNWrZLlFLSCJSFFCCQzQvQFCFF +HLvLDQbvnDQDvbHTLhntSnGBSlfGldddcmfMMf +NgFjZjrZZJrlfJfSVcBJGc +scWCNFZpsjzrDLwLhbQzhQwD +SlqJlThDPqpwSTwhcbDdbWDbZGcZNcDb +MsnWWjHjvLvfscjjgdzNdbgbcc +vQQvWVQFLLHfHVBWfsfmFFpJRhhSplqlRJqpBwlqTCPC +DZbDzzZDjQbPGZFFSSgSlFCzTgzm +qLnvwvhddrqMrwrCTLLFJjmtSlFlSH +VdhvsWqdVWvvRhsvqbpbPcZfPpjZGBQNRj +mJNtNFmzDZtzdzrLtwwRqJSchgfGcRfwRB +pWpjQjCTQnHMWCCpjQpHvTqcwTwScfRcBcSGBRThwS +MQHjvjVCCqsvljWnVQzLtNPZzmzLVNLddtPN +QVRPRVDgsRjLssnL +TTGDJDJfbfLHSnsMWWbs +qGqqTFFDqgQgQQQq +nlMnRRjbMjCdJVQJCZ +nGqfLwfNLFNLnPPGFVVCdVGZJtCtCCVzJz +LHHfPNHnPqqLwqPqDPWfNFvMglbhhbMgmclgcllDmgmrcl +cLLWWSThtdLpRcddcgPRZFDMCVPPMCCPCPCZ +NfGbGNzrBNffGNJjbPPZsZmZZPmDHpMH +zlJBfzlQzNjNjfJcpwSdvWhcvLwQWt +cVVQfVCJVrVcTJnfNvlDFmDrmlvrFWlL +snZHpMhZtMbtPNvzHWWvNFNvNW +gppnbbbRgMnZbswRqRwbqTcCCSTCJJdGjgfVGTdcCG +jplgNdrHrrNZgdHmlHNJHddlDSPPSTlzTSlTSDSzCQLfzf +vscvWWWvGWGGscbFMpRWFwQTPzfLQwQwPfLbzSzzDL +GvGBWpqcMVRNNZHgdHdtBJ +LchbZhjjZFjwSmPRqRffqbdtggdR +vWHMWlHJdGqtRqHV +MvzCJlnMnlTNnNNLLdhjjCdjjhDjjL +FNCllHFvCGvwQcPQJfgfmwgh +zjtRpbDLjtsrzbLLQmfBTgTBQQfhbfQB +WLgqRzqsrWvFGFZFZC +qjLlNcLjcNWpQLlQMmvmhCvCgsMZZghj +tGSDJtRGJzHMMGDVZCfvmfhzmZZgZsmv +BSSRDRHBGHtSSSbGJSwHbNcLQddqMNlrqcMQMldBWc +JSfctrtctDpszHvzVQHr +glCWjhWmFjlmlhmdWPhVVznvcHjszbvvpHvznv +FgBmFhCBCGFqglgmhCFmSTSRLJLLZfSRJcDSGMtM +vZGlFFtLMLdShSSShRVtVf +rQNvmznWPNCPNsrCsbWbsPCvjShhhfHBBHJjSJRhjSRnHhSj +mCNsQCmqszNcQzrzrrzWvGgGMgpdFpMLlFZGwcLDdg +QJRJQDlcqLlWbNGL +HCnwwsCrnstLWqtWNgZNgg +rsnTrTCHTnnVwnsVPqqDQcRjcczMPvPRzM +qCzjqnzVdzrdhnhddDbDBMPttcGBDBDPnc +sZgRQWHgWHHLsgsRRZsJbpJlDcDGNcTDFtGNFFcJNFPBPBTc +WggbRQSRRgRSsWWmbHqvVffVwhzvCdmfhmdV +lhqWcNpQGcNmmHmNPWCsQzQsgrQrBMCMbMVM +wDLFFDJvSFFZRDZSzCrzTzsRgVWbCrMW +dFwDtZfdjFZWFFfmHGPnPPmqfmPNcN +lcMRNJRGGLJnNVFbVrwrwZrD +tjCzQjQhQwgWFShVFS +ffHQsQssQTzBsPnLpMPRwsJP +MQSMSBSRFMQLJChLChjTBh +WmVlPrwnpwDlflNpDrNnDlDwThJCCdLJhhdhCfJTccGjvscd +gnDVnNnwgglwDwptSZFzgQHqbjZgZZ +nwBcFgwTDcNrpZMD +WQWCLZmvhMRvNjsNSD +CGGWmZGHHhtVzHbTqgTdbgzz +RmcTCwvssRbsThTcVRJJfSPqfJwJFqfjfMFq +zQNZDWtQlDZGBQPfFQqjJLjL +rrglggZGWnrnrrHlDhsbsPTVCsCVsTRpHv +wFGfzSvCPGttSzqwmtqmvvPRDDRCWgWWDTBTMcBcBWbCRM +hVJJHQHnpWnDTNnnDb +LJsVVdhQqvmdbbSf +srlJztzsVVsSsVtRlNllTWzzmqGhqWLPCDCgmChPLDdqCmCP +bZQMZpbvMBMgmDGmZLSPZd +MpScMSMpvfjMBcBcfMfSBnzlTjssNszrNrtlTVzlzFVN +rCtgrgClprGGClnJCZmwtMjZRjbjjcjZQv +PWVfBHWPdbNfbbRmRj +sPsVqFPsHWLhBVVqHFqPVddWSDLJgpTCnnrRRLGpJSSTRrgT +zjqpGjrQjGqSHCVvCrRZDN +cTdshMhdmcMNmddRHBhvCCBCCvHZDC +JTmTmJnLTdwzNQpPWJWgpP +BmpZmrzZnznHbpprSbQSQbqdSVqbPQcV +fRGTGJZRTTDwJTJRGDfgJgNFlSSFcldfdccFVlPlFFQPSQ +GvTTTZZLmsntzmCL +VhMcrmbhvzMSnhvftbRbllLtglBBtf +HqqqJqDqPjJPNjjDVFDZCdqBtRtGBGlGRfQQgttQfHlTQl +pCZJPqqZpmhvhpVh +dWLBJHJhGJGMBJRcDLDSQsSQpvcR +ZlnnPqglblfRRpSvSsnz +sPTgZVjjmwVTljrwTTlbwVGdJhBNNdFdMGNHHJMjBNFN +FhFrfbfgbLRdfqfrmvDgLdjrcQtSNStHHHQlSjJJPllt +CnspzZWTpCnMVzzZZGZRCzttHNjNlQlSNtNlNjVcjlQS +GCZsZBRwnvwfbqwFwb +bZnJFJgLFRnqQZqJQJFQGpCLNcGlLllClNtccjGc +rVfvwPDhPHGtlcbClr +mBhshsfMvBvqsQJdTbgnqQ +jgWHqMSWMGqWjWjqbWGJQDfVqLfrfDfJhVLfTr +pPplwsRZPFZFtLhfwgfwrhJL +zlRsdgFcRgmjdBCMHdjHWB +qJSGJSPQWzcprtQZtt +mBMVfsNBnZzcNtcc +LMLBsmMlvBgFsghVVvfgLBvbJJSqgGHqPGPtCWwbJHqCPG +ZvZLcdMGVMlHDvDpvqhH +NNSrQNbJbrTnnWZDDZqqhqpW +wbgNJrsrCwwJQZbsrJBFzjCCdzGdjcGzMdzj +JbVmdVLJJJdQMnzmmMgHjPqqjNgvqwngHNNP +ZfffDZZsRpcpRDcCRrlpplcWSSgwgSwjvvsjPSwhNSWggh +cCtfppZrpjtMMmdQQTLz +TtbnmbdmTmgTlPNhqvqj +wrwrLsVZRsJJJsfHjvPPWfhjHqRN +sDZwDvsCCQLJZQJQsMCMzZBtSMpndcSFnnSBFtSBmdBc +mWFTZdmQdZFrFQbCRsrspjSjnvCLRS +GwlDqcNHDzwGfHSRqCgJsSpnvpSL +NGlcNwHLLGfDDHDhDwDcwVczbPddZtMFWttWWtdPPdQdhPWd +mnfcZgcdZqnqdfFqPmHfhqsbgVMCJNMtvCJtMvtblTJtvb +rRLDDjPSjjPDGBQSBNbtLVtbMNNJlTMtbl +SzjDDzRRpGQDDDPHzdsmnnhsqcqdFq +ZDGNRDGjSdwnnmnsVNsHJJ +tMBWWrddLPLhvWTTPLccvmmbVpgsJHmccppJ +ClPrtBWWrhrFLBPlCRzjzGqdRzjRdRGZjF +csTRNQNJcNBDLfhfMf +qGmWpGHqrqPLChPRhVFPDD +tgHrtnrrJnZRTZcv +FLqrfmLDrqCmqjTqcbGqRTGVvb +FMtWMSWzzFStJzPzhWzhQvTvHVjjTjHTTHvbHc +PgtWWstWtSpZWPzWwnrBsdBDdFLfllLlfC +mThbMDMQDCDbwLqWpqPpdhwR +zgrcffgHNZltZSgHLsRsLLWRWgLqppsW +SVlSrfSHlSSVlrJfVctlNDMCmMFbnbRDbDBFJFbBRM +PrBrWqtRPdBLLrBwqpswgpwhgpnZhhzsgw +FTFRSVJQVJflFfQQgggGMZngGQZszZ +TbmfFJFSDFblSTDSFFbmVSDrPLLWtcmBqqRmBtmcLtcrjP +DjPsMwDjLVVTsvNNRTNTRT +ztdQQHqHlFNtfRNNNMgg +FzhMhHQlDcCrhCCc +zSHGzzmHgnnMDLTNTG +lPVBtvhQjpNSMWTLBD +VCftbjvbVCfPbZwsJsrSgSSZwC +CbwgmvMnmnCwMmwRQqJBGBgHZHpJHdtdZpJt +zVSlNSDlrzNhqlNTScDzVWfBBZZZZGBstGsdsWFpdHdJsW +NDlLzhrVcqRPCMRwLLLw +TjTHHLwnLjVlTwLjgVfvsFvDsdWfvDvFMd +qbRRRpmpcmDcczppztSqSvWFssFGfWdMvfQWdfsG +RZpqDBmtrzhzphjTgjHlnwjgJhgJ +dLmMgdgzwDLzDWFhBWvzFzzBZJ +tTVcppbSTfstTMMHfTbhBchhJFCWcjWBZhjGGB +SSSSNbsNRpRRsRrfVHfRpNtlPgQDLPdMmlDLlrPnqPdPLl +qqbTCSqdqqFZdRLZhwhZ +HWWlHtlrBfGtVssnsLnHfJVPPMMFzhPRwMPwFhzPZzPMGM +nfmtsrlsnrfVnHJrVBWlsVfgbbNTNSvmvvpcTjLjLbqvvS +GGhFvGPFcThqffPdnfNLqZZCSwtQSwZpwQQBsL +RglMRrJJgHBCBZSQQpdr +WmbRHHbzDgJMDzRDMdWmWHzHNFFvvGGhnvVvvfcvnFfcbvnT +QsfQmsLfZZZcshnJ +dSgdWgSVVFvzSpqFdqTgWRHbJNcbZNCTJCNNZRRCCh +FcpVjgDvVVFdVWFvzjwwQtBMLtBBGDwftPrB +rqsRrHsvsPqswNcJcNJrnnBrNn +bFjgGFdbVRNNnpRQpV +GSthhggGDSvMRqtHvMfM +ZwVPgMsgVsGzVsRZpgpzzgpFMrNbbLFrDLFFrrSDLfrNBN +qvnjBhQhntbfDLrF +CJlHHcHcTWqvpBdsWRpdPdgs +BjmTDjJBCBWrgQRPFlWWlW +dHphshtdtVHVhpJqspdvRrqFPgrLPPFPrrRPvQ +sdMsMtStVszpwMzHjJGjCcZjmScNfCDf +DmGdDffgDSDDdJstqdJldlRt +MhnvMCZCbbZHMvsCHtrcVrPjJcRqVtlt +LsQbsFZvZhQzZwhQWTNgBWpNwSGpTmfS +RRJQnCzbZZLTZJCBtWvFtsfqBqtfWb +prjlChGNldGNdlSVMhWfqWtfsvwvqsFtdtsq +GGjNDNhpMGMGVhrnZZTzcTHCCJcDHc +RmbMmjgpPjMBsBMfchhVsc +HwFWFTztSrtFpcQvBsSqVscBBC +zWwnJFHtWWHDgbGgdpGpnl +mnbWbRRLRFnmmWcCDTBVwCDBlwNW +ggJPtpdHGfdZtMHgtZgVPPBCVsPNBcsBTTDDCC +hpvJJTpGhdhtJdMHqvmmnLvSbmnFnRFm +WWtrWrNgVbRjMrQCNzqJFwQJFNTJ +LdHPhcdchQQssLzJrz +pBccnHpnrrcGHnnSlWjnRMSlbt +NMMfNFnZgMVThhTMcgTDJDJjsVvvJJqJmHsqHG +LQpwwprCQzBNBdGjGjHswswdvm +CBCzzCrbWbSlNQnTRgPPfFRWnfgc +RFwHVQRwFgTQSFVhdsdHsBdDBnnqnq +LGftLtPGGMzlNrhlPqPsrJ +fvGpWpMtccpTwwpRRQhh +TTJCGdTGtZRQQCnzcnCv +FWWHPSFNFbDbDDqSWnVmLRRjRRQLhcmLjS +qPwPWwFppbwggGZGfdJZgdnGdd +zSTWzrzWTLWpCtCGpqqGgplc +nZWwsJVZZBnJHJCclHllgtChgCgc +DFnVBJsFssVVFBFnBdfvjDSmTMWzrmMfRmTv +MJmgMssrsggqqMVstbwTcTbPbTTwThmw +NRBBGRjHVRRcRbCp +QnSfzLWzNHzNVQQVjrglJMsMFvgJdFWrgZ +ggLLGnhgnPvJHZnN +VBtmVSldbSBVlcNPHvjmNcwNZZ +tdWqSVSSBztVWGrThLhfrfvG +TDqrjdSwLqDppdTCdzPBFmmjQmhHFPFQhPFR +zlGbMcVcVtsPHFRhWRRsPF +btgvlVVcDZZZqgrz +DgwlgbbFDDjjPTHDrmddPhPV +WqtMBBtQsttMNWQBqsbJpGGzdPdTHLVmTzJhmTPhHHPTmH +qQsqGZNQtZGMNsNtZpFnjnCRbZffwwSRljFf +gMdFLCdnMZCTFFCqnTgWLCHfSgPgPHStcQQmfSBBSfHg +vrwwrwzbGjjswjvhGGsjPQmqRmHPbBtcBQtqfmcH +qzJllVsGVGljjsrzwDzhwzDGTddNLFnZWNdpCVWTNTZTLZCF +LtwMhDtctwbwwppdWBJQJBWPvPfDfqvG +FTzrNrgSRFrgzFRHNVFQJvlqHjBvQWlQWqPBfq +sFgNzmVmNzgTvVTMwhMhstMwZtsbsc +MrBDQVzzlrvhQzQrDMVQrzrzgRJnRRwwRbwSwwVRRNSgwwwJ +qFTPTvfTHcqqncpcwR +LmtdGGPmTPGCTLHLWsZMhvZMMMzrzzdlMQ +ZVNpjfpZNpfNgNjzNVfWtnbbWmBHtsZWBSZBGS +MrDrQvvDrPLDMvFvdmBGGsBBCtsHrnrGCm +ltRMwLLDDRlvQwvlQcwhqfcJNpgzjJpjhJ +sRRRlRbcFbBBdnFBwCGppNvGrTCDDGVNlr +PPSLQzHjzZZPLZPjgTNTgpCbVJvGrNCTGr +ZLHHPQjhQmWWSRRnssdtbnmfwF +GRwrMrHJGwJPGWsgfqQgsc +VbTvLQCZLSWWsgWf +TVDvVCvppvTDmzZVTbZpTzBBNQQQJlJBBJBNNJmRBwRH +shJRWJsjZGNjSTrjFS +dMLCddggldQzMCCVgzVVLmLvTwNFFSqpNSqSbFGSqTTpMTFN +VGQvVglCLcVzgdddCDVvlsPZRRBDJPHZWZZnBsWJRR +CrwlwhRCMrswnsHBFccHHWFc +QJTmtfQgLtzQfLQfdPcWSFHHDDSpcFpFBg +jTQTqbfQfmLbLQJbJrRCWjljZGjNrZlZlC +JmthDmLShtJmHphphJQCwjdjdFDzFgzFdgdNlC +sbMTVBrWMbNvVMnsWMnVzjsjwCfjFgfZzfdgdzlj +NvqbbBcMMPPSqLSpGGthmp +RfGWFHlPFFNWGFZRZBjvwCvzBwhhrvvjzmrr +sLJSLMSTSJTbStJtMSqSqbpMrvmrzWdvhmjDCzzwrrpjdDDv +SbQqsqsWcZPcQGFG +BjqbMqMVBsfqGqFqGLmF +ZZQbQPddPcwbPnRQltdtQZdnmFNrvfhGrhrWWFNWWtmNFNNW +dJJQccnRPpcbQcMHsSgSMsDMTJSg +WWGBBvPflnWbBWhvhbPvNfnnVCFZmVRVZmVGMVwRLCCCGwVC +gjszgTMrgzgqCRRdmJRjJLVw +grzQHzqczMSzqSHcgQsqPvPlbNblpPhhPPbHvnhp +sJDDNWdnRLTTvqwSFPCmLCCrCq +thzplgfjglflFcbMclpppMfcwPqCZQCmqCwrzCqmQmHSqPqq +MhcpFBMBlhjbBTdnNJWvNvsvBd +czwwghnWWfcfgwfWthfrvVvrjdrdvDDVrbzrLF +RHPPMRpQPRMPPJRjJQsZsrrvvJBDDVDVdFqrBrFdBv +smjMsGZHRsHSmRQNGHPpSTwwttCflwngnChcCtWW +bprrrwrtLDtrWwrQjRDQDbPPVHVmmmmHNWlPlVNPZZlv +hqqhfnBCTfnnhzJwzsqzfPZZMCCVZVHHFvZMFvZmlC +TzhhdJTqJzcBdJJnzjtQrLdjwgLtpbgrLQ +qzQvzzgWSCqtqqGpddGc +jLrZNZhZrNRLHNffhrjNjNdtdZtGcPFwFwpbGwbVpdwC +nHnhrLNCCMHmhHBMhrzvgJvsWSWMWzzWzSlv +RzcbzdRFzbbzbzbFdZFTHMZPhVhVQMLrlrQPhLZlMM +BNGfBvsNttVmMhlMLm +BwGjpllswfjwpcFDWcWcbpdb +SjzpswrLSDjVSpwlmZJBTBdNJLvBNvHQZT +rCcCtbqgCfthggtbGGMqqghqZQvvQTBNJQHQZQTcZTJFZFFd +CggGMtqMfWbbGghPhhbCMtmsSppSspjpmWzjVSWlVrrm +PmWTPThTQWnLWQFl +VNcSVfMbtsddBQNnNpdl +sSjctwjVSzzccjgnTnDTHRDhqjRR +WfMWfCNCjWWHNTccMjRjfRcMbqSwfVwqwsfGGbssrJSrswVw +llLFQLlvlPFnhQBPBZQBqvBwzSzGGhShJVwShmsJbbmzSG +lnPqvQZBFFBnnpgplFvtvHDjTdcTjTMMjCRNCMWgRC +rprFNFFNjNLmMdgcqL +BvzCQQbBQgffsDbvVHMdbcVqmLVqlmqq +JvJCzBDJwnsRnQDszCBnnnQBrjZPjFpgZFTFZRpTrpZFGFtT +wBHQQZHVCcpwDgdZdMsZjvMZFn +GPSzlNlJLfzzzvsWdWLMmFWLMM +NfqGSfrTNzRTqJfRbptQHFQFrwrFHBHw +sNjVMVNVMzPzQgghcMsNzJtjSJtTFDTJtJnnDLjDnL +CHwrdCpvCrwrWdpZqcpFttJSFJTLLHLJfbnbfD +qrlZCwlqZrqqpWdlRqCRqdqcVNsVMzQzmNgNPBsRhVQVVzMs diff --git a/day03/src/main.rs b/day03/src/main.rs index f9fc74d..43d57c6 100644 --- a/day03/src/main.rs +++ b/day03/src/main.rs @@ -39,10 +39,10 @@ fn grup_repeat(grup: &Vec<&str>) -> char{ }; for c in repeated { if let Some(i) = grup[2].find(c){ - return (grup[2].chars().nth(i).expect("should have failed before")); + return grup[2].chars().nth(i).expect("should have failed before"); } }; - return panic!(); + panic!("Should not get here") } fn get_repeat(s: &str) -> char{ @@ -54,30 +54,24 @@ fn get_repeat(s: &str) -> char{ return s2.chars().nth(i).expect("should have failed before"); } }; - return panic!(); + panic!("Should not get here") } #[cfg(test)] mod test { + const INPUT: &str =r#"vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw"#; use super::*; #[test] - fn it_works() { - let input = r#"vJrwpWtwJgWrhcsFMMfFFhFp -jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL -PmmdzqPrVvPwwTWBwg -wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn -ttgJtRGJQctTZtZT -CrZsJsPPZsGzwwsLwLmpwMDw"#; - assert_eq!(input.lines().map(|l| get_priori(get_repeat(l))).sum::(), 157); + fn backpacks1() { + assert_eq!(INPUT.lines().map(|l| get_priori(get_repeat(l))).sum::(), 157); } #[test] - fn it_works2() { - let input = r#"vJrwpWtwJgWrhcsFMMfFFhFp -jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL -PmmdzqPrVvPwwTWBwg -wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn -ttgJtRGJQctTZtZT -CrZsJsPPZsGzwwsLwLmpwMDw"#; - assert_eq!(get_groups(input).iter().map(|g| get_priori(grup_repeat(g))).sum::(), 70); + fn backpacks2() { + assert_eq!(get_groups(INPUT).iter().map(|g| get_priori(grup_repeat(g))).sum::(), 70); } } \ No newline at end of file diff --git a/day04/input b/day04/input index bdaf92e..fc033a5 100644 --- a/day04/input +++ b/day04/input @@ -1,1000 +1,1000 @@ -38-41,38-38 -18-65,18-65 -1-3,4-39 -41-42,40-40 -1-90,89-90 -30-84,31-85 -2-98,64-97 -75-75,15-76 -81-81,22-81 -29-92,30-30 -95-95,14-95 -12-71,70-70 -12-93,13-99 -31-74,5-32 -5-45,2-44 -17-85,17-20 -75-96,81-99 -67-72,73-85 -77-84,76-81 -6-67,68-68 -41-87,87-89 -55-56,19-56 -1-98,24-97 -13-82,14-82 -2-99,1-99 -4-58,5-57 -20-67,66-66 -22-85,22-86 -41-97,40-40 -84-88,84-85 -12-34,23-69 -35-60,39-61 -16-28,12-27 -89-93,93-94 -52-92,53-91 -63-73,7-64 -3-54,2-54 -76-76,1-76 -10-17,16-83 -84-88,35-85 -23-25,24-63 -3-70,2-38 -21-64,65-65 -1-97,2-97 -11-37,36-93 -43-60,14-44 -15-16,15-52 -53-79,11-78 -2-96,97-98 -19-97,20-99 -33-92,32-92 -19-26,26-64 -66-87,58-66 -58-79,43-78 -88-98,89-98 -3-91,3-38 -47-47,47-93 -27-85,28-85 -1-46,2-47 -1-3,4-78 -26-52,36-51 -41-54,42-54 -35-99,1-34 -55-95,94-96 -18-46,45-54 -93-98,2-86 -5-90,57-99 -2-85,5-86 -13-86,13-86 -91-93,55-92 -41-72,40-86 -68-70,38-69 -3-4,3-97 -57-88,19-87 -44-84,3-45 -3-87,2-87 -2-88,89-89 -9-75,8-10 -33-46,17-32 -14-81,81-82 -19-89,20-89 -38-82,39-81 -3-85,3-97 -16-43,43-43 -10-10,11-90 -2-79,2-96 -19-60,61-86 -2-97,1-98 -11-22,11-12 -2-25,24-25 -21-89,22-90 -10-35,11-35 -33-35,32-35 -41-41,8-42 -4-74,2-3 -1-2,3-90 -60-91,59-92 -5-90,90-97 -95-96,2-96 -49-81,49-81 -9-37,21-57 -41-76,40-77 -93-93,3-93 -9-96,1-6 -9-53,54-95 -66-93,80-92 -32-32,32-34 -73-95,27-72 -47-88,46-46 -57-91,51-92 -78-78,78-81 -8-57,58-81 -5-49,14-18 -87-87,22-88 -3-66,67-67 -94-96,15-94 -3-70,3-70 -9-94,10-65 -11-59,58-59 -32-82,12-83 -44-89,43-89 -55-95,7-54 -5-18,19-49 -88-89,34-89 -1-84,84-84 -62-92,31-63 -93-95,30-88 -10-36,10-36 -32-91,90-92 -72-86,73-92 -54-70,5-70 -20-77,19-78 -14-27,28-86 -19-52,19-70 -5-98,6-94 -74-97,74-75 -23-42,23-23 -13-19,13-19 -21-31,30-31 -22-67,68-69 -18-69,19-76 -6-7,6-97 -3-19,4-20 -2-66,44-67 -39-77,40-84 -15-72,2-9 -81-90,90-93 -45-86,44-72 -21-57,45-58 -23-72,20-22 -10-63,36-62 -15-78,78-79 -59-90,59-90 -55-61,60-82 -75-97,61-97 -71-76,71-76 -62-62,13-61 -5-5,4-54 -74-75,15-74 -83-84,56-84 -25-41,24-42 -4-4,7-87 -19-84,26-83 -1-98,9-97 -7-30,29-29 -11-93,2-12 -71-76,77-77 -44-88,44-89 -1-17,16-37 -62-62,27-61 -11-77,11-77 -80-80,80-82 -90-90,31-90 -6-77,77-85 -30-31,31-93 -36-62,35-36 -69-91,11-90 -4-17,16-16 -5-71,33-96 -1-99,1-99 -83-83,57-82 -12-75,55-76 -41-41,8-40 -1-99,4-92 -30-31,31-57 -25-54,26-26 -7-14,67-78 -17-97,97-97 -10-49,21-50 -12-95,1-96 -90-99,1-98 -92-93,31-92 -15-16,15-48 -33-97,55-98 -29-92,29-83 -58-58,5-59 -23-80,79-86 -7-70,45-71 -5-21,5-20 -34-40,33-39 -41-92,40-99 -13-96,12-77 -28-63,27-64 -10-94,10-93 -25-82,82-82 -32-91,11-32 -16-97,15-96 -27-49,37-50 -23-85,10-84 -2-55,35-56 -98-99,20-93 -2-86,2-87 -12-41,5-11 -59-84,58-84 -20-62,75-89 -8-45,7-45 -25-32,33-44 -27-28,29-77 -2-67,66-67 -41-88,42-96 -40-40,4-40 -1-96,97-98 -42-95,41-93 -8-79,9-78 -7-89,9-25 -99-99,9-99 -88-91,82-87 -21-90,90-90 -53-94,93-99 -26-59,54-78 -30-99,34-89 -51-69,51-69 -7-98,1-97 -30-81,82-82 -16-93,18-89 -10-91,90-91 -2-7,8-50 -35-76,35-35 -49-96,95-97 -45-57,86-91 -7-56,61-65 -12-87,74-83 -92-92,17-92 -4-18,3-19 -36-78,23-37 -5-92,4-93 -4-93,8-92 -59-82,81-81 -18-88,19-88 -24-64,24-65 -28-91,5-90 -74-86,73-87 -20-35,19-31 -99-99,10-97 -9-10,10-70 -94-94,21-94 -27-37,37-94 -3-82,81-84 -55-80,49-54 -77-78,40-77 -16-48,15-48 -3-96,97-99 -32-97,96-96 -14-84,9-60 -17-91,16-16 -94-94,16-95 -12-61,6-61 -14-95,98-99 -63-64,59-64 -64-82,82-84 -4-99,3-62 -4-98,2-97 -85-99,27-84 -19-73,19-73 -35-64,10-93 -5-13,9-20 -8-40,41-76 -90-95,29-89 -24-97,21-22 -53-56,52-56 -21-59,58-59 -41-93,40-94 -2-86,2-85 -42-95,95-95 -37-89,6-89 -52-63,45-51 -9-89,21-88 -32-84,33-83 -11-17,18-90 -13-16,13-16 -97-97,2-97 -68-72,68-69 -18-23,18-48 -28-68,29-70 -11-94,93-96 -11-94,94-94 -97-98,2-98 -19-73,74-74 -40-60,59-60 -38-53,37-54 -10-15,16-74 -46-55,45-67 -19-54,20-53 -32-32,33-97 -20-86,12-19 -23-79,78-90 -12-53,23-52 -20-93,21-95 -3-49,14-50 -67-76,51-66 -1-35,36-62 -36-68,35-35 -12-81,21-82 -33-41,34-42 -13-65,32-64 -37-85,36-86 -6-50,31-50 -13-16,12-12 -36-50,36-50 -16-76,17-66 -71-71,54-71 -6-57,15-58 -3-5,6-52 -3-91,1-92 -69-96,45-68 -36-44,36-46 -21-61,20-50 -71-73,11-72 -7-97,8-90 -7-73,1-6 -39-45,39-46 -16-90,3-91 -25-29,26-28 -49-73,28-89 -95-97,14-96 -26-75,50-74 -70-84,70-92 -27-43,14-77 -34-42,43-43 -38-62,37-63 -73-78,15-78 -83-83,3-82 -16-17,17-91 -4-68,3-69 -8-80,9-79 -4-87,1-86 -2-30,2-30 -66-82,55-81 -78-78,79-86 -45-86,49-86 -2-6,5-98 -12-29,11-30 -48-52,53-53 -45-72,46-54 -82-82,48-81 -93-94,42-94 -1-84,2-98 -14-75,13-28 -19-19,20-91 -63-63,39-64 -2-59,58-60 -63-63,16-63 -2-98,3-99 -52-69,51-52 -16-61,16-62 -29-73,70-76 -41-86,2-94 -84-85,1-85 -13-89,12-89 -7-21,23-93 -42-46,43-70 -27-82,27-82 -93-95,6-94 -52-55,54-54 -60-61,17-61 -66-66,17-67 -25-80,81-85 -35-92,11-36 -68-92,68-92 -98-99,44-72 -31-36,32-37 -5-94,6-95 -16-76,75-99 -23-76,23-76 -14-66,66-94 -7-37,5-58 -59-62,1-81 -31-60,31-93 -54-54,53-59 -15-17,16-16 -7-96,8-97 -66-71,67-72 -49-50,51-92 -3-32,13-31 -74-76,4-75 -4-87,86-87 -4-89,4-89 -37-69,37-70 -67-89,1-23 -89-89,37-89 -3-12,3-12 -4-84,5-83 -10-92,10-92 -18-92,92-92 -6-82,3-99 -6-7,6-90 -3-91,2-92 -68-69,9-69 -22-23,24-67 -60-93,61-94 -47-56,55-60 -8-75,1-2 -20-29,23-30 -39-43,43-51 -7-66,6-38 -43-64,44-63 -70-91,29-90 -55-56,7-56 -66-85,67-84 -56-58,54-57 -33-76,76-76 -6-8,9-70 -25-33,47-89 -24-38,39-92 -13-46,13-45 -45-46,45-54 -8-37,47-92 -8-66,12-67 -9-58,48-59 -94-97,41-95 -67-95,5-67 -8-80,17-78 -69-74,15-71 -27-54,55-58 -8-90,7-91 -9-96,6-97 -2-99,3-33 -1-2,5-85 -54-68,54-67 -46-91,81-92 -6-45,46-46 -7-78,3-58 -20-83,82-84 -26-82,10-27 -45-72,9-72 -2-80,3-77 -96-97,50-91 -46-62,46-62 -1-18,1-2 -1-99,1-97 -9-97,8-97 -43-45,43-47 -10-87,10-11 -30-31,31-54 -6-10,9-98 -46-95,35-96 -13-85,84-86 -10-85,10-85 -85-97,27-63 -1-95,98-99 -3-35,4-36 -21-84,98-98 -85-85,44-85 -42-84,38-82 -2-52,1-99 -14-86,38-95 -24-30,25-30 -76-93,25-75 -6-98,3-99 -10-66,9-66 -83-85,25-84 -8-9,8-11 -16-81,16-93 -5-66,3-66 -26-64,33-63 -32-42,33-65 -78-85,77-94 -99-99,96-99 -12-90,8-91 -34-35,35-84 -79-96,97-97 -18-93,17-94 -26-93,25-94 -12-67,12-12 -26-97,26-95 -3-41,2-42 -37-44,43-44 -17-64,11-78 -3-94,3-94 -5-53,1-1 -34-78,77-90 -29-66,65-66 -23-40,12-41 -8-19,19-79 -45-84,37-44 -2-87,86-88 -38-79,37-68 -19-30,20-75 -3-78,39-78 -9-84,84-84 -16-59,15-58 -37-83,42-84 -49-88,50-89 -32-97,33-99 -31-76,30-68 -10-66,5-67 -25-97,26-97 -40-84,39-85 -37-52,37-53 -11-13,12-91 -25-64,24-54 -4-69,69-70 -9-97,8-97 -7-43,7-43 -9-68,14-69 -17-90,17-90 -21-88,20-89 -10-57,20-56 -12-88,97-99 -32-98,31-98 -45-64,65-74 -59-60,58-62 -9-41,10-41 -3-9,7-10 -32-51,32-51 -48-97,48-73 -15-79,58-80 -4-9,12-76 -24-77,39-78 -6-82,5-6 -28-50,27-49 -40-72,39-72 -24-37,36-38 -14-96,5-95 -88-95,36-87 -22-85,22-27 -10-98,4-97 -46-89,46-89 -22-94,6-23 -3-43,3-97 -29-42,24-43 -2-92,92-92 -27-98,26-98 -2-87,2-94 -87-89,59-87 -29-29,29-83 -33-33,34-42 -7-85,8-86 -20-20,14-21 -22-22,22-34 -7-68,27-68 -5-54,6-53 -12-91,11-90 -54-81,54-81 -2-95,1-95 -6-55,6-54 -49-92,91-95 -5-90,4-91 -30-84,32-83 -13-61,12-60 -11-98,26-98 -7-76,77-77 -4-37,37-38 -71-81,81-81 -6-58,58-70 -31-83,30-31 -48-56,49-55 -4-98,8-97 -3-69,16-68 -40-41,13-40 -60-60,61-76 -38-38,13-38 -37-97,36-54 -65-65,1-65 -18-18,18-90 -87-87,8-87 -6-98,64-71 -79-90,8-80 -11-44,12-69 -12-90,64-91 -6-75,5-6 -18-90,58-91 -67-92,33-93 -95-96,1-96 -73-91,90-93 -84-94,17-94 -25-62,28-84 -26-27,27-71 -94-98,17-95 -33-96,95-95 -1-2,1-91 -25-28,26-26 -28-85,84-92 -91-96,48-87 -46-93,95-97 -4-98,97-99 -51-63,52-61 -56-89,6-55 -5-93,2-94 -9-93,6-8 -6-53,5-52 -70-92,91-91 -28-98,27-95 -3-45,45-55 -1-55,1-54 -75-82,74-81 -52-91,11-51 -29-82,25-81 -32-71,53-72 -31-72,32-71 -2-99,4-97 -54-79,54-80 -89-96,80-90 -4-4,5-93 -63-65,9-64 -9-58,10-25 -14-72,4-76 -23-58,24-59 -96-99,4-95 -17-17,18-80 -6-29,13-30 -97-99,9-98 -97-99,21-96 -44-46,43-53 -87-89,36-88 -42-89,19-90 -12-12,10-14 -22-77,23-77 -81-83,3-82 -47-47,3-47 -16-79,15-80 -25-30,12-24 -3-94,94-94 -34-64,33-63 -24-85,24-85 -52-54,40-53 -63-88,62-62 -12-75,12-12 -11-63,39-64 -95-95,12-95 -89-91,88-98 -59-83,9-60 -97-99,1-98 -22-98,28-82 -96-97,44-94 -5-88,3-91 -53-85,52-84 -50-88,48-71 -5-95,94-95 -71-72,29-71 -18-96,97-97 -39-41,49-59 -46-72,11-47 -34-49,34-49 -88-90,75-89 -2-94,1-92 -66-96,65-66 -29-82,3-81 -19-86,87-91 -65-68,5-30 -66-85,66-85 -6-87,87-90 -26-88,27-88 -6-19,18-19 -20-83,21-82 -32-56,25-32 -37-77,38-77 -1-36,1-36 -11-59,10-60 -81-92,30-91 -21-77,2-20 -80-82,14-81 -1-43,44-99 -1-2,3-79 -21-92,93-93 -1-77,69-97 -70-90,90-91 -10-44,6-9 -63-90,14-90 -64-75,63-76 -72-95,36-95 -1-2,4-90 -23-50,22-51 -12-81,18-82 -12-13,12-90 -29-83,29-30 -2-97,1-96 -7-96,95-97 -15-96,16-97 -1-1,1-83 -43-53,42-53 -14-26,15-64 -12-94,13-85 -40-40,40-46 -13-25,14-22 -90-94,90-94 -9-91,12-26 -4-96,97-97 -1-8,7-58 -27-92,74-91 -27-90,90-91 -19-99,16-18 -42-87,41-88 -51-85,36-52 -7-94,4-6 -2-43,2-3 -26-92,27-96 -7-87,8-88 -2-97,10-37 -2-90,1-2 -31-78,77-77 -1-97,99-99 -67-90,89-98 -45-51,44-85 -70-97,69-97 -71-94,95-96 -1-82,6-81 -3-77,46-77 -4-90,3-3 -57-71,56-70 -68-98,68-69 -50-70,51-70 -94-97,62-95 -13-94,94-96 -13-92,14-14 -67-99,68-98 -9-9,22-94 -21-91,91-94 -37-78,37-79 -21-84,22-22 -27-39,40-99 -26-86,25-74 -1-4,2-24 -5-50,51-94 -9-10,9-76 -70-73,73-73 -69-87,25-68 -34-85,34-86 -44-64,63-90 -58-59,58-58 -45-98,47-99 -4-6,10-44 -31-82,54-81 -20-58,19-58 -12-68,12-13 -64-64,54-64 -19-23,18-22 -60-67,59-67 -7-7,6-96 -14-37,37-38 -28-88,66-96 -72-90,45-57 -50-97,19-97 -6-29,6-29 -15-43,15-43 -14-82,82-82 -10-64,8-8 -70-82,80-83 -11-97,10-98 -23-77,24-77 -6-84,6-6 -98-99,5-98 -65-65,65-72 -48-73,13-88 -41-65,40-46 -50-81,12-82 -42-44,43-43 -55-89,63-90 -4-77,76-76 -37-92,38-75 -60-62,15-61 -12-95,96-98 -19-92,20-91 -4-56,1-57 -27-94,48-94 -85-88,77-84 -58-59,12-59 -1-65,51-66 -70-72,4-70 -86-86,15-85 -78-99,99-99 -7-8,7-94 -23-88,23-87 -69-77,77-83 -39-75,40-75 +8-41,8-79 +1-71,2-71 +11-74,74-75 +44-96,43-96 +79-79,3-78 +67-86,50-93 +15-42,41-93 +21-98,20-99 +42-53,13-41 +51-80,38-79 +13-13,13-93 +14-20,20-66 +34-64,33-34 +93-94,56-93 +28-59,58-90 +9-58,4-8 +39-79,32-87 +60-62,48-61 +1-76,21-75 +1-11,2-12 +7-85,4-7 +5-69,26-69 +10-95,11-96 +73-99,65-97 +6-67,1-35 +26-48,29-44 +3-85,1-3 +51-53,14-52 +38-64,37-70 +19-30,30-55 +73-77,72-73 +28-65,28-66 +30-60,47-87 +32-32,30-34 +82-96,3-97 +12-63,13-63 +42-91,19-91 +38-45,45-80 +4-98,14-76 +22-91,23-90 +9-84,10-41 +79-98,48-92 +41-45,41-46 +15-94,30-89 +13-84,25-83 +60-68,37-69 +35-86,7-87 +32-78,31-78 +4-98,4-99 +20-20,20-93 +5-88,87-88 +9-42,4-12 +44-97,54-86 +32-82,6-26 +39-41,40-42 +10-76,10-75 +5-99,2-99 +48-48,47-99 +1-1,1-91 +60-75,59-61 +31-32,32-33 +21-88,22-88 +11-42,11-11 +57-75,74-95 +94-94,94-94 +60-84,58-86 +18-87,11-18 +14-34,29-33 +64-90,22-69 +33-95,71-96 +10-93,9-93 +18-18,18-68 +3-94,93-93 +38-38,38-78 +79-81,67-86 +24-73,3-73 +93-94,46-94 +10-97,11-35 +5-93,4-98 +3-99,47-97 +31-60,59-86 +1-67,45-68 +22-84,59-83 +24-72,23-73 +15-78,16-77 +90-90,85-92 +43-91,44-92 +2-88,86-89 +4-38,4-37 +43-87,44-87 +4-91,5-91 +23-37,27-46 +1-4,3-99 +77-77,78-81 +33-35,33-37 +80-87,81-81 +5-52,6-99 +66-66,52-66 +6-96,16-92 +16-89,4-98 +60-60,60-97 +5-62,1-6 +38-91,38-38 +4-14,13-57 +7-53,7-54 +1-97,13-97 +2-90,3-46 +19-19,20-96 +3-33,33-33 +28-42,29-42 +25-76,47-76 +16-24,25-44 +55-71,55-71 +29-76,28-89 +17-90,17-89 +1-98,10-99 +6-43,22-42 +7-95,67-95 +4-97,97-98 +62-94,62-95 +4-86,5-87 +6-83,6-89 +18-26,26-69 +95-98,10-95 +7-86,1-7 +91-92,27-91 +3-75,8-87 +38-53,30-52 +11-85,9-12 +39-83,39-83 +62-94,10-63 +12-35,35-97 +15-17,16-87 +2-93,1-92 +33-86,34-87 +4-19,19-92 +5-70,69-90 +10-97,5-97 +82-83,41-82 +16-29,16-29 +1-82,5-81 +62-71,61-72 +6-99,8-99 +10-44,6-10 +14-45,13-92 +36-37,37-91 +11-41,22-68 +51-78,79-95 +19-36,28-36 +4-91,9-92 +3-98,3-3 +1-44,2-43 +4-22,4-22 +24-89,42-89 +72-98,57-73 +28-92,4-29 +60-91,25-61 +2-89,5-88 +71-73,3-71 +17-99,24-98 +88-96,3-88 +39-74,75-75 +52-92,4-93 +18-56,53-97 +27-75,16-71 +81-94,1-82 +65-67,15-66 +77-79,77-79 +16-33,17-34 +83-87,29-84 +84-84,20-85 +26-28,27-82 +6-66,66-66 +8-72,9-59 +9-99,10-97 +48-48,47-47 +7-58,6-57 +46-58,23-70 +2-2,2-93 +20-33,20-20 +7-20,8-15 +17-67,16-17 +2-21,1-99 +5-5,4-72 +79-95,9-96 +7-38,7-38 +8-98,6-99 +68-84,10-68 +19-35,2-34 +5-43,3-9 +15-62,14-14 +82-95,48-96 +75-77,34-76 +33-65,65-66 +95-95,19-95 +12-88,13-87 +28-68,25-30 +12-37,8-91 +38-63,16-63 +41-58,53-57 +12-42,29-71 +68-96,68-96 +6-77,78-78 +22-37,23-36 +65-74,64-75 +36-88,35-99 +3-49,13-32 +84-91,1-84 +13-66,13-66 +9-92,10-91 +26-26,26-27 +10-17,15-35 +68-82,59-83 +27-69,26-58 +82-92,10-81 +12-18,12-18 +29-35,29-46 +60-71,71-71 +6-80,79-95 +2-12,1-3 +19-77,20-77 +95-97,88-95 +55-79,21-54 +3-4,9-97 +23-98,23-98 +1-4,3-47 +2-26,1-2 +22-72,9-22 +3-84,13-83 +43-45,18-44 +49-53,51-51 +15-85,16-85 +7-21,4-21 +1-24,1-25 +16-86,16-16 +79-87,80-86 +1-95,57-97 +4-99,29-99 +97-98,6-98 +46-78,53-83 +28-82,51-93 +59-95,32-96 +11-32,23-33 +13-29,24-47 +7-74,11-73 +28-36,36-89 +17-83,18-82 +2-85,10-66 +4-79,4-78 +36-62,61-79 +50-52,28-51 +22-48,3-28 +51-92,68-91 +29-91,28-92 +9-52,8-53 +7-97,55-96 +16-59,15-92 +98-98,3-97 +67-72,15-72 +15-52,5-77 +1-78,3-79 +6-66,3-3 +48-64,63-63 +6-97,6-97 +27-27,19-27 +2-72,1-71 +47-59,48-79 +12-61,13-65 +50-57,38-62 +30-73,65-70 +79-94,79-93 +81-97,98-98 +26-78,17-26 +46-57,29-89 +86-95,29-95 +57-64,43-64 +14-93,71-97 +4-99,66-98 +77-87,17-78 +25-26,26-96 +34-73,33-73 +36-57,35-62 +41-73,55-91 +41-48,12-47 +21-83,20-82 +15-35,14-73 +19-93,93-99 +50-69,51-95 +59-66,66-66 +5-93,92-92 +37-37,37-94 +38-39,38-54 +8-49,27-57 +43-83,79-82 +64-66,13-70 +40-92,92-97 +13-67,51-73 +29-88,30-71 +16-96,17-97 +25-37,27-77 +20-57,3-36 +91-96,63-99 +21-84,44-83 +4-87,2-4 +9-31,31-79 +33-82,33-33 +4-65,3-64 +18-71,19-22 +18-63,10-18 +87-92,88-93 +62-63,61-72 +20-49,49-68 +77-83,64-84 +10-79,8-11 +33-59,34-49 +5-85,11-85 +95-96,7-96 +59-60,35-59 +19-90,7-13 +16-84,16-47 +61-89,88-90 +24-52,51-51 +51-51,50-93 +39-77,18-96 +49-90,90-92 +37-76,75-76 +12-20,21-83 +2-94,3-95 +83-83,83-88 +3-99,2-97 +48-72,72-78 +14-99,13-99 +10-11,1-10 +4-99,5-92 +4-81,71-81 +5-5,5-93 +17-53,5-53 +38-91,37-37 +27-71,26-70 +1-98,73-82 +13-96,7-14 +14-82,14-14 +5-36,4-46 +9-75,9-93 +83-83,44-82 +34-95,23-35 +58-87,58-88 +70-98,69-69 +1-15,2-14 +22-22,22-24 +8-93,8-92 +50-60,2-55 +39-78,40-78 +55-92,31-92 +3-88,1-50 +23-65,23-66 +63-64,17-64 +15-31,11-91 +19-97,18-96 +12-89,12-88 +6-26,7-10 +45-70,45-69 +53-79,77-79 +31-63,30-30 +66-68,7-67 +22-85,43-85 +9-9,9-82 +1-30,4-80 +36-58,36-37 +15-84,14-83 +41-42,40-71 +38-73,37-98 +1-61,2-91 +71-73,71-73 +31-80,31-80 +12-99,13-99 +1-83,1-83 +9-92,9-93 +3-35,4-34 +15-64,19-63 +36-36,36-84 +15-43,14-57 +96-98,4-97 +36-46,45-79 +27-71,27-27 +6-6,6-53 +2-55,10-19 +8-48,2-53 +17-99,16-97 +13-64,12-65 +75-86,76-85 +63-64,3-63 +5-87,3-5 +56-91,41-91 +7-23,7-22 +3-88,3-86 +3-5,5-53 1-94,2-95 -32-79,31-80 -31-43,32-43 -34-37,33-38 -68-92,67-93 -37-85,33-84 -26-59,25-60 -53-76,54-54 -25-94,94-95 -39-72,72-72 -16-17,17-17 -4-98,98-98 -1-48,1-2 -90-92,28-94 -77-77,65-78 -19-60,60-61 -15-98,16-99 -25-92,25-93 -13-85,12-86 -6-57,57-57 -88-94,56-87 -66-83,84-84 -88-90,57-89 -11-11,10-63 -20-46,21-47 -25-31,29-32 -7-94,6-95 -8-69,8-50 -32-86,33-86 -19-98,99-99 -38-58,37-59 -19-38,39-88 -7-88,2-6 -16-93,17-99 -41-95,42-94 -52-54,51-98 -10-89,89-90 -50-95,26-94 -87-88,13-88 -7-90,7-90 -78-96,86-98 -26-98,42-99 -7-75,6-76 -4-5,4-96 -10-62,10-63 -21-95,95-95 -39-98,26-40 -15-16,10-16 -59-60,17-60 -56-80,48-55 -6-22,7-9 -27-82,33-81 -77-87,38-86 -96-97,34-97 -6-60,6-6 -73-77,71-77 -9-88,9-89 -51-76,53-75 -12-89,13-83 -5-99,4-4 -7-96,5-96 -27-43,22-25 -6-24,4-4 -91-91,3-92 -97-98,22-98 -44-77,76-77 -27-49,18-28 -10-93,12-89 -7-72,8-8 -26-70,21-25 -96-97,15-96 -8-92,6-7 -7-62,32-63 -34-74,21-33 -9-94,10-94 -10-74,49-75 -20-20,21-41 -28-78,29-81 -75-85,76-84 -66-66,41-67 -66-66,10-65 -18-95,17-96 -18-94,18-94 -72-72,6-72 -18-77,17-76 -2-98,3-98 -23-87,24-29 -16-62,63-73 -13-88,9-12 -17-34,11-35 -29-82,28-78 -44-87,86-87 -40-60,39-39 -5-5,8-28 -4-86,47-87 -60-89,60-89 -48-87,49-87 -76-91,77-83 -30-57,29-56 -58-96,18-59 -15-63,14-91 -35-82,16-46 -14-14,15-75 -80-81,3-80 -21-22,20-93 -49-86,87-87 -2-2,4-76 -52-78,77-79 -13-57,65-68 -51-67,48-50 -3-85,5-84 -4-97,1-98 -21-31,32-32 -26-94,25-25 -6-37,6-37 -16-98,15-98 -5-86,85-85 -38-98,5-98 -16-18,31-68 -50-63,51-99 -43-58,42-58 -5-93,5-94 -15-76,64-76 -29-68,29-68 -6-30,30-30 -51-52,52-60 -31-55,56-83 -62-88,88-88 -36-75,74-74 -53-72,54-54 -67-86,68-87 -50-83,2-90 -14-94,14-15 -49-66,32-67 -3-81,16-60 -47-86,48-92 -3-99,4-99 -60-94,59-59 -24-49,6-50 -8-8,9-94 -90-93,1-88 -21-72,71-73 -95-95,12-86 -64-64,10-64 -1-99,1-99 -57-67,64-68 -17-18,17-57 -2-71,70-93 -3-86,4-86 -30-80,30-80 -3-77,76-77 -45-55,45-55 -46-77,65-81 -1-97,1-98 -53-68,52-67 -16-33,32-59 -93-95,70-94 -8-85,86-92 -19-90,89-91 -83-93,94-99 -45-45,46-90 -58-68,57-69 -27-34,28-30 -94-95,1-94 -33-79,30-78 -61-61,24-61 -82-83,59-82 -81-83,80-83 -22-68,96-97 -82-82,17-81 -43-53,43-43 -13-62,14-37 -68-85,67-88 -32-88,32-38 -63-70,52-62 -52-52,51-52 -2-57,57-86 -21-88,21-22 -28-29,28-67 -37-90,37-91 -4-94,3-3 -13-76,13-76 -9-23,22-86 -84-84,24-84 -50-85,49-49 -15-52,14-14 -24-53,30-49 -25-65,25-65 -1-87,3-88 -14-41,14-41 -34-97,35-98 -10-80,10-75 -2-67,19-68 -16-94,15-82 -17-54,25-55 -17-66,66-77 -10-92,91-93 -10-90,10-11 -64-66,18-65 -16-37,15-38 -4-83,6-84 -4-82,3-60 -62-74,63-85 -10-62,9-63 -54-93,53-92 -48-59,60-77 -9-73,72-74 -17-24,25-82 -32-73,31-40 -13-43,13-44 -37-38,71-80 -96-99,84-97 -8-58,32-58 -11-57,5-58 -63-98,62-92 +83-85,81-84 +98-98,82-99 +31-68,4-68 +5-95,12-96 +22-35,35-91 +1-93,3-93 +33-86,28-39 +24-95,95-95 +89-91,10-90 +5-77,4-76 +2-49,21-49 +67-91,54-91 +51-76,51-51 +70-74,59-74 +22-32,31-31 +22-53,21-84 +39-63,25-27 +5-95,2-5 +56-66,67-89 +60-60,58-61 +9-36,1-36 +16-35,15-34 +34-69,69-70 +52-84,54-97 +10-84,36-83 +96-97,24-95 +4-99,2-5 +34-90,33-35 +87-97,97-99 +29-38,30-39 +67-97,66-67 +64-83,76-94 +4-94,2-5 +67-87,14-96 +3-94,7-86 +69-80,74-79 +67-82,66-66 +3-85,29-85 +95-97,94-96 +81-85,3-81 +13-78,19-77 +5-35,16-35 +14-42,14-91 +21-81,3-88 +1-7,7-89 +18-70,17-18 +47-96,96-97 +69-93,73-92 +48-48,11-48 +36-95,35-35 +67-67,11-66 +3-86,5-85 +48-89,2-7 +9-58,10-57 +69-70,69-95 +36-97,96-98 +9-43,9-92 +10-69,12-69 +17-76,76-77 +2-99,98-98 +30-31,29-33 +38-64,41-64 +1-91,1-92 +7-16,2-16 +1-99,1-1 +11-96,12-95 +14-93,13-93 +10-87,2-10 +10-66,10-96 +17-87,16-16 +14-58,57-59 +19-95,20-94 +43-59,22-44 +84-97,84-98 +14-77,34-77 +45-69,44-46 +52-87,51-68 +3-7,6-56 +14-51,46-50 +44-66,49-67 +9-12,1-11 +86-90,86-90 +32-41,29-42 +53-80,11-73 +93-93,13-94 +39-84,40-73 +16-71,71-72 +9-94,9-94 +44-91,3-98 +18-78,18-98 +19-48,18-47 +23-77,68-77 +20-68,63-67 +48-90,48-97 +40-49,39-71 +4-15,15-99 +76-77,60-76 +12-56,17-57 +27-92,28-93 +13-74,12-14 +4-97,5-66 +50-50,50-51 +66-66,44-66 +58-68,23-52 +47-76,48-76 +8-96,48-98 +43-92,7-92 +33-54,15-97 +72-99,71-98 +13-76,31-36 +2-14,11-13 +8-70,7-9 +8-54,8-55 +93-96,94-96 +31-74,73-73 +65-74,53-74 +46-93,45-94 +31-99,8-99 +6-37,10-37 +21-82,22-83 +55-73,17-20 +65-79,66-72 +15-43,14-44 +1-96,6-97 +3-98,5-99 +24-80,18-71 +56-92,57-80 +12-54,40-83 +31-80,16-81 +35-48,22-85 +2-90,1-89 +2-2,2-59 +87-96,51-87 +36-99,37-99 +8-90,37-70 +14-14,14-76 +39-99,20-71 +52-65,52-65 +31-48,31-48 +57-57,57-88 +68-92,68-81 +5-98,6-98 +87-96,25-88 +6-86,87-87 +69-88,33-84 +39-86,40-40 +77-82,77-87 +11-88,97-97 +29-87,87-89 +40-55,39-40 +96-97,47-95 +5-85,85-85 +11-93,93-94 +29-96,89-95 +6-69,26-92 +20-76,15-20 +39-40,38-39 +7-33,6-34 +34-78,35-37 +18-67,9-67 +7-99,6-99 +64-88,47-64 +17-96,18-93 +6-84,4-85 +21-21,21-96 +6-42,5-98 +35-97,38-85 +31-94,9-57 +59-73,62-73 +5-97,5-97 +16-53,16-32 +8-42,7-43 +10-94,11-60 +42-50,17-80 +54-57,57-77 +37-89,88-96 +24-79,20-79 +7-91,24-96 +24-89,88-94 +28-82,10-81 +3-3,3-94 +89-93,92-92 +34-99,34-34 +22-22,23-63 +10-92,3-10 +77-77,77-84 +32-59,28-42 +54-86,55-71 +42-50,11-46 +88-88,6-90 +70-74,72-72 +1-1,1-50 +46-50,9-47 +95-95,3-96 +93-95,12-94 +22-85,14-15 +23-73,22-92 +4-86,4-86 +75-90,75-75 +56-56,55-55 +31-91,32-80 +64-78,3-79 +16-85,15-53 +61-64,62-65 +86-86,23-87 +27-96,68-80 +18-98,18-51 +6-92,49-98 +23-23,23-28 +13-74,5-14 +15-93,16-91 +2-97,12-97 +23-92,17-24 +56-76,75-75 +38-82,39-83 +15-97,97-98 +44-86,45-69 +79-85,35-86 +19-98,20-92 +59-59,7-59 +27-91,28-88 +11-71,66-70 +3-79,5-78 +22-77,21-76 +92-94,12-93 +6-85,6-6 +14-81,14-81 +5-6,8-44 +34-37,36-36 +1-53,29-87 +40-72,67-72 +4-81,1-97 +27-76,10-58 +32-75,2-40 +15-86,86-86 +42-90,2-90 +21-73,20-73 +84-99,3-97 +21-81,2-22 +75-99,53-76 +5-96,5-99 +68-70,21-69 +24-24,23-47 +7-8,7-73 +6-6,6-66 +31-37,30-36 +4-91,5-90 +16-76,18-47 +44-97,25-97 +48-92,47-95 +45-62,45-62 +62-93,48-93 +53-91,77-98 +54-70,12-69 +6-20,17-39 +46-46,12-47 +4-4,5-61 +9-42,43-88 +97-99,1-97 +11-90,89-89 +9-15,4-14 +15-81,4-80 +31-43,44-68 +4-9,1-10 +47-48,32-47 +22-47,46-55 +10-12,11-86 +3-4,4-41 +64-84,18-85 +15-39,14-47 +15-51,11-12 +10-57,9-56 +16-29,15-30 +38-57,10-39 +20-87,20-82 +1-43,3-43 +9-90,7-89 +23-88,25-89 +50-92,51-91 +13-94,94-96 +2-92,47-91 +22-95,1-23 +22-73,21-22 +3-5,4-33 +13-75,12-76 +18-26,17-39 +6-72,10-71 +17-76,3-41 +24-96,17-96 +50-57,51-55 +97-99,80-98 +5-66,5-78 +8-57,14-56 +20-21,20-97 +22-79,21-79 +2-99,99-99 +95-95,38-96 +34-95,35-94 +14-27,6-13 +19-87,18-88 +64-66,60-66 +38-85,37-38 +88-97,4-87 +1-99,2-92 +8-12,12-92 +25-60,26-59 +38-74,19-38 +45-76,15-46 +60-91,60-91 +81-81,12-82 +19-20,20-61 +22-97,19-98 +13-57,28-65 +15-90,12-15 +40-40,23-40 +27-92,17-92 +7-99,8-77 +6-83,16-83 +53-70,37-69 +66-93,42-71 +73-92,89-92 +5-87,6-39 +9-99,99-99 +27-80,81-81 +7-58,58-58 +9-85,50-86 +39-94,14-88 +13-40,2-39 +2-89,1-28 +43-89,72-88 +23-41,24-24 +23-34,34-83 +19-64,19-20 +60-97,61-89 +4-57,56-56 +8-89,40-90 +30-48,17-30 +3-93,2-92 +1-10,10-74 +1-24,5-56 +19-19,18-47 +3-10,5-83 +50-52,48-51 +13-75,13-13 +10-10,16-61 +27-92,27-88 +45-93,46-94 +47-61,16-61 +76-77,76-83 +32-84,84-87 +86-86,87-87 +7-95,8-73 +8-69,20-68 +44-95,44-95 +11-39,12-40 +63-99,70-99 +36-45,35-49 +6-55,55-75 +91-93,91-93 +61-75,49-75 +86-98,87-99 +46-98,10-14 +95-95,74-96 +5-92,91-99 +2-92,2-2 +1-57,11-56 +97-97,14-98 +8-74,74-83 +19-67,61-66 +94-94,24-95 +5-9,69-90 +30-66,30-65 +2-99,1-98 +38-94,63-73 +1-2,1-99 +43-93,20-90 +42-89,40-42 +22-88,52-87 +78-79,23-77 +22-89,21-89 +12-94,11-80 +2-7,6-84 +20-99,20-20 +8-93,38-99 +16-60,17-61 +41-41,41-83 +17-47,4-57 +18-56,18-56 +1-57,1-57 +77-87,1-77 +62-91,63-92 +6-90,10-91 +2-4,3-97 +53-67,54-62 +29-30,5-30 +51-51,7-50 +2-87,1-88 +13-73,55-87 +8-29,7-29 +64-97,15-98 +23-84,22-23 +7-10,3-11 +19-35,35-78 +49-96,50-97 +16-94,17-94 +24-71,9-82 +29-88,9-29 +24-52,43-51 +69-73,8-82 +1-3,2-91 +6-85,7-7 +4-86,16-79 +4-4,6-50 +17-83,82-88 +27-81,28-67 +82-85,56-84 +39-40,40-86 +2-48,8-49 +8-79,7-8 +62-86,61-85 +65-67,47-66 +48-97,49-97 +41-86,66-85 +18-41,17-40 +40-85,67-76 +77-95,58-91 +39-66,31-40 +4-7,7-98 +33-96,44-96 +3-11,3-3 +69-70,8-70 +97-97,3-97 +32-94,81-93 +21-70,20-69 +47-56,28-55 +1-1,1-33 +36-71,35-86 +18-88,19-88 +4-99,8-96 +13-79,14-62 +11-71,11-79 +69-92,68-92 +18-88,88-94 +26-92,26-92 +15-69,16-68 +59-95,95-98 +40-53,39-54 +53-64,32-53 +17-97,16-84 +28-99,7-88 +49-81,49-69 +22-98,97-98 +66-94,5-97 +3-70,1-76 +5-93,2-25 +46-66,65-65 +69-70,11-99 +55-93,56-77 +11-92,12-93 +34-96,95-96 +1-3,3-15 +49-88,19-88 +80-84,63-85 +7-83,56-99 +14-62,55-67 +22-84,23-66 +35-89,31-35 +33-81,7-81 +78-85,77-86 +38-44,46-80 +72-83,12-73 +62-92,65-92 +60-89,26-60 +48-59,41-57 +55-83,56-84 +27-89,48-50 +5-66,5-84 +30-84,21-84 +23-62,22-62 +55-93,37-94 +6-47,15-46 +28-28,29-39 +2-3,13-13 +46-81,18-81 +37-88,38-89 +7-53,17-52 +32-67,18-81 +22-22,22-24 +2-71,15-45 +1-92,1-92 +14-89,10-91 +9-79,12-78 +4-15,3-92 +49-68,29-69 +1-2,3-51 +27-45,28-44 +22-99,21-99 +66-70,64-69 +97-98,67-98 +47-98,47-57 +47-98,48-79 +7-31,9-34 +8-84,8-8 +20-92,6-20 +14-90,5-22 +23-68,29-87 +3-42,41-71 +80-80,81-96 +59-80,79-95 +17-86,35-86 +32-92,91-91 +72-77,53-78 +20-23,23-95 +94-97,8-94 +25-34,26-33 +12-96,13-98 +73-95,73-73 +43-50,44-50 +5-99,1-5 +63-94,63-94 +40-52,41-42 +25-25,25-78 +6-10,9-97 +23-26,26-77 +48-79,48-48 +26-96,88-90 +6-11,9-27 +34-42,43-92 +15-83,16-87 +9-93,82-93 +45-77,76-85 +74-98,18-99 +7-95,8-94 +46-98,97-99 +18-42,42-60 +15-17,16-35 +44-88,64-87 +60-61,56-62 +46-48,49-58 +90-97,6-90 +19-20,15-20 +1-1,1-61 +34-75,33-76 +1-90,5-90 +51-61,5-52 +40-91,90-95 +17-77,1-77 +77-77,17-77 +32-81,33-76 +12-41,13-41 +61-91,59-92 +44-67,44-81 +31-63,31-71 +8-97,6-79 +7-98,6-99 +4-38,3-4 +2-95,94-99 +3-28,1-3 +50-56,3-98 +24-76,24-24 +5-10,4-78 +30-75,30-76 +41-47,40-66 +4-37,3-4 +72-98,71-99 +7-19,8-19 +64-64,19-64 +7-58,7-58 +35-45,36-45 +1-99,99-99 +6-68,2-69 +52-75,53-72 +11-91,38-91 +6-17,6-17 +16-57,17-57 +6-16,7-15 +18-86,17-85 +13-35,7-74 +35-40,34-40 +20-85,37-84 +89-89,21-89 +2-24,21-25 +25-73,3-47 +7-7,7-93 +15-20,14-95 +10-83,11-82 +10-95,9-96 +17-86,47-87 +14-80,78-80 +47-50,53-92 +74-76,63-75 +8-44,3-9 +80-91,16-92 +11-11,12-89 +35-97,34-98 +28-98,98-99 +20-58,58-80 +21-71,8-40 +14-77,14-14 +28-73,27-73 +58-83,59-83 +12-96,44-59 diff --git a/day04/src/main.rs b/day04/src/main.rs index 6a4cc4f..cad6fb7 100644 --- a/day04/src/main.rs +++ b/day04/src/main.rs @@ -31,25 +31,19 @@ fn get_range(s: &str) -> (u32, u32){ #[cfg(test)] mod test { + const INPUT: &str = r#"2-4,6-8 +2-3,4-5 +5-7,7-9 +2-8,3-7 +6-6,4-6 +2-6,4-8"#; use super::*; #[test] - fn it_works() { - let input = r#"2-4,6-8 -2-3,4-5 -5-7,7-9 -2-8,3-7 -6-6,4-6 -2-6,4-8"#; - assert_eq!(input.lines().map(|l| get_ranges(l)).filter(|t| ranges_contain(t.0,t.1)).count(), 2); + fn ranges1() { + assert_eq!(INPUT.lines().map(|l| get_ranges(l)).filter(|t| ranges_contain(t.0,t.1)).count(), 2); } #[test] - fn it_works2() { - let input = r#"2-4,6-8 -2-3,4-5 -5-7,7-9 -2-8,3-7 -6-6,4-6 -2-6,4-8"#; - assert_eq!(input.lines().map(|l| get_ranges(l)).filter(|t| ranges_overlap(t.0,t.1)).count(), 4); + fn ranges2() { + assert_eq!(INPUT.lines().map(|l| get_ranges(l)).filter(|t| ranges_overlap(t.0,t.1)).count(), 4); } } \ No newline at end of file diff --git a/day05/Cargo.toml b/day05/Cargo.toml new file mode 100644 index 0000000..c7d046f --- /dev/null +++ b/day05/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day05" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day05/input b/day05/input new file mode 100644 index 0000000..9f9e78d --- /dev/null +++ b/day05/input @@ -0,0 +1,514 @@ +[V] [B] [F] +[N] [Q] [W] [R] [B] +[F] [D] [S] [B] [L] [P] +[S] [J] [C] [F] [C] [D] [G] +[M] [M] [H] [L] [P] [N] [P] [V] +[P] [L] [D] [C] [T] [Q] [R] [S] [J] +[H] [R] [Q] [S] [V] [R] [V] [Z] [S] +[J] [S] [N] [R] [M] [T] [G] [C] [D] + 1 2 3 4 5 6 7 8 9 + +move 1 from 8 to 4 +move 1 from 7 to 8 +move 1 from 6 to 3 +move 2 from 6 to 5 +move 8 from 5 to 1 +move 5 from 3 to 8 +move 1 from 7 to 8 +move 8 from 1 to 2 +move 3 from 3 to 9 +move 13 from 8 to 7 +move 2 from 1 to 2 +move 1 from 6 to 2 +move 2 from 1 to 7 +move 4 from 4 to 2 +move 10 from 9 to 4 +move 7 from 4 to 1 +move 1 from 6 to 7 +move 2 from 4 to 5 +move 1 from 5 to 2 +move 1 from 5 to 8 +move 3 from 1 to 5 +move 2 from 4 to 6 +move 2 from 6 to 4 +move 2 from 4 to 5 +move 5 from 1 to 5 +move 1 from 9 to 5 +move 1 from 8 to 5 +move 14 from 2 to 6 +move 12 from 7 to 4 +move 4 from 6 to 7 +move 3 from 6 to 4 +move 4 from 4 to 9 +move 2 from 4 to 6 +move 2 from 9 to 3 +move 9 from 4 to 3 +move 2 from 1 to 6 +move 5 from 7 to 3 +move 4 from 7 to 8 +move 2 from 6 to 7 +move 3 from 6 to 7 +move 10 from 5 to 8 +move 8 from 8 to 9 +move 10 from 9 to 7 +move 12 from 7 to 5 +move 1 from 1 to 5 +move 3 from 7 to 2 +move 10 from 3 to 7 +move 6 from 5 to 7 +move 2 from 6 to 1 +move 12 from 2 to 7 +move 3 from 3 to 1 +move 1 from 6 to 5 +move 10 from 5 to 7 +move 3 from 3 to 4 +move 34 from 7 to 1 +move 2 from 6 to 9 +move 1 from 6 to 3 +move 3 from 1 to 3 +move 1 from 7 to 3 +move 3 from 3 to 6 +move 1 from 4 to 3 +move 22 from 1 to 6 +move 2 from 9 to 7 +move 2 from 4 to 9 +move 12 from 6 to 8 +move 1 from 7 to 6 +move 4 from 8 to 2 +move 1 from 7 to 1 +move 6 from 8 to 9 +move 1 from 2 to 5 +move 1 from 2 to 7 +move 13 from 1 to 2 +move 2 from 3 to 1 +move 4 from 7 to 5 +move 3 from 9 to 4 +move 1 from 1 to 8 +move 4 from 5 to 2 +move 12 from 6 to 2 +move 3 from 1 to 3 +move 1 from 4 to 1 +move 9 from 8 to 5 +move 6 from 5 to 7 +move 2 from 4 to 5 +move 5 from 9 to 6 +move 5 from 3 to 7 +move 30 from 2 to 6 +move 11 from 7 to 9 +move 36 from 6 to 3 +move 10 from 9 to 3 +move 1 from 6 to 5 +move 3 from 5 to 2 +move 2 from 5 to 2 +move 28 from 3 to 4 +move 6 from 4 to 1 +move 1 from 2 to 3 +move 2 from 5 to 2 +move 6 from 1 to 7 +move 1 from 1 to 6 +move 6 from 3 to 5 +move 6 from 7 to 2 +move 1 from 6 to 4 +move 2 from 2 to 6 +move 8 from 2 to 1 +move 3 from 2 to 4 +move 2 from 3 to 4 +move 4 from 3 to 4 +move 1 from 6 to 1 +move 2 from 1 to 8 +move 1 from 6 to 4 +move 1 from 9 to 3 +move 2 from 5 to 4 +move 1 from 8 to 7 +move 1 from 7 to 9 +move 1 from 3 to 5 +move 1 from 8 to 6 +move 34 from 4 to 9 +move 13 from 9 to 8 +move 1 from 8 to 2 +move 1 from 2 to 1 +move 4 from 5 to 1 +move 9 from 8 to 7 +move 11 from 1 to 3 +move 1 from 4 to 2 +move 1 from 6 to 7 +move 1 from 9 to 4 +move 1 from 4 to 1 +move 1 from 5 to 3 +move 5 from 7 to 8 +move 1 from 2 to 5 +move 1 from 5 to 1 +move 21 from 9 to 5 +move 19 from 3 to 4 +move 17 from 4 to 6 +move 2 from 8 to 4 +move 2 from 6 to 8 +move 2 from 6 to 9 +move 2 from 7 to 6 +move 1 from 4 to 9 +move 6 from 5 to 6 +move 1 from 9 to 8 +move 8 from 5 to 7 +move 15 from 6 to 2 +move 1 from 9 to 7 +move 2 from 1 to 6 +move 3 from 4 to 7 +move 1 from 1 to 6 +move 3 from 5 to 4 +move 2 from 5 to 6 +move 2 from 4 to 1 +move 13 from 7 to 8 +move 2 from 6 to 4 +move 3 from 2 to 4 +move 2 from 7 to 6 +move 5 from 4 to 6 +move 4 from 2 to 6 +move 1 from 1 to 9 +move 18 from 8 to 3 +move 1 from 4 to 5 +move 1 from 2 to 7 +move 15 from 3 to 1 +move 1 from 5 to 1 +move 3 from 3 to 4 +move 1 from 5 to 4 +move 1 from 5 to 6 +move 1 from 6 to 8 +move 2 from 8 to 2 +move 3 from 1 to 8 +move 6 from 2 to 8 +move 1 from 7 to 6 +move 12 from 8 to 5 +move 2 from 9 to 6 +move 6 from 1 to 5 +move 9 from 5 to 3 +move 1 from 2 to 8 +move 20 from 6 to 9 +move 3 from 6 to 7 +move 1 from 7 to 1 +move 7 from 3 to 4 +move 2 from 7 to 2 +move 1 from 8 to 7 +move 8 from 4 to 1 +move 11 from 1 to 7 +move 10 from 7 to 6 +move 2 from 4 to 9 +move 21 from 9 to 3 +move 6 from 5 to 9 +move 6 from 3 to 2 +move 1 from 4 to 5 +move 1 from 7 to 9 +move 8 from 3 to 2 +move 9 from 2 to 1 +move 14 from 1 to 6 +move 1 from 1 to 7 +move 4 from 3 to 8 +move 3 from 8 to 7 +move 5 from 7 to 4 +move 3 from 6 to 9 +move 2 from 3 to 7 +move 3 from 5 to 6 +move 1 from 5 to 6 +move 2 from 7 to 9 +move 1 from 8 to 3 +move 22 from 6 to 5 +move 3 from 9 to 4 +move 3 from 6 to 1 +move 5 from 4 to 6 +move 9 from 2 to 8 +move 4 from 6 to 1 +move 1 from 3 to 2 +move 1 from 2 to 3 +move 6 from 8 to 1 +move 2 from 4 to 3 +move 10 from 1 to 7 +move 2 from 8 to 7 +move 1 from 9 to 6 +move 4 from 3 to 5 +move 1 from 8 to 3 +move 4 from 9 to 8 +move 1 from 4 to 3 +move 1 from 3 to 8 +move 3 from 7 to 6 +move 1 from 1 to 5 +move 10 from 5 to 9 +move 5 from 6 to 4 +move 5 from 8 to 5 +move 4 from 9 to 8 +move 3 from 3 to 9 +move 2 from 8 to 6 +move 5 from 7 to 5 +move 1 from 4 to 1 +move 1 from 1 to 2 +move 2 from 8 to 6 +move 1 from 2 to 1 +move 1 from 7 to 2 +move 1 from 1 to 5 +move 28 from 5 to 9 +move 3 from 6 to 1 +move 1 from 6 to 9 +move 1 from 2 to 9 +move 2 from 1 to 2 +move 2 from 7 to 5 +move 1 from 7 to 5 +move 1 from 2 to 5 +move 3 from 1 to 9 +move 1 from 5 to 8 +move 15 from 9 to 2 +move 11 from 9 to 4 +move 11 from 4 to 7 +move 2 from 4 to 1 +move 7 from 7 to 8 +move 1 from 1 to 4 +move 20 from 9 to 1 +move 2 from 7 to 8 +move 1 from 4 to 6 +move 1 from 6 to 2 +move 2 from 7 to 5 +move 1 from 9 to 6 +move 1 from 4 to 9 +move 4 from 5 to 2 +move 1 from 6 to 8 +move 1 from 4 to 9 +move 11 from 8 to 3 +move 1 from 1 to 9 +move 1 from 5 to 9 +move 1 from 2 to 6 +move 4 from 9 to 8 +move 4 from 8 to 7 +move 10 from 1 to 6 +move 7 from 1 to 5 +move 8 from 3 to 4 +move 2 from 3 to 5 +move 3 from 7 to 4 +move 1 from 4 to 5 +move 2 from 1 to 6 +move 9 from 2 to 6 +move 1 from 7 to 9 +move 1 from 3 to 2 +move 7 from 4 to 3 +move 3 from 3 to 7 +move 5 from 2 to 3 +move 1 from 1 to 9 +move 2 from 2 to 7 +move 1 from 4 to 6 +move 3 from 5 to 6 +move 4 from 7 to 6 +move 1 from 7 to 4 +move 1 from 4 to 7 +move 1 from 2 to 8 +move 1 from 7 to 1 +move 27 from 6 to 2 +move 1 from 4 to 1 +move 7 from 5 to 7 +move 1 from 4 to 1 +move 1 from 8 to 3 +move 3 from 7 to 3 +move 2 from 1 to 6 +move 2 from 9 to 1 +move 18 from 2 to 1 +move 2 from 7 to 5 +move 12 from 3 to 4 +move 1 from 5 to 6 +move 3 from 6 to 1 +move 24 from 1 to 8 +move 9 from 2 to 4 +move 3 from 2 to 1 +move 2 from 6 to 3 +move 1 from 6 to 9 +move 1 from 5 to 6 +move 1 from 6 to 2 +move 1 from 1 to 7 +move 1 from 2 to 1 +move 1 from 1 to 2 +move 3 from 7 to 2 +move 2 from 1 to 4 +move 8 from 4 to 5 +move 22 from 8 to 1 +move 1 from 8 to 1 +move 13 from 4 to 1 +move 1 from 8 to 5 +move 3 from 3 to 1 +move 1 from 2 to 7 +move 38 from 1 to 6 +move 27 from 6 to 1 +move 2 from 2 to 9 +move 3 from 9 to 8 +move 2 from 8 to 6 +move 1 from 8 to 3 +move 1 from 2 to 1 +move 1 from 3 to 6 +move 1 from 2 to 3 +move 1 from 7 to 6 +move 7 from 6 to 3 +move 20 from 1 to 4 +move 6 from 1 to 6 +move 17 from 4 to 7 +move 3 from 6 to 5 +move 14 from 7 to 9 +move 8 from 5 to 7 +move 3 from 1 to 6 +move 3 from 3 to 1 +move 2 from 4 to 1 +move 4 from 5 to 1 +move 9 from 6 to 2 +move 3 from 6 to 4 +move 4 from 7 to 8 +move 4 from 1 to 6 +move 2 from 3 to 1 +move 6 from 6 to 7 +move 4 from 8 to 7 +move 4 from 2 to 1 +move 4 from 2 to 3 +move 4 from 9 to 5 +move 8 from 9 to 5 +move 1 from 9 to 5 +move 1 from 2 to 1 +move 16 from 7 to 2 +move 10 from 2 to 9 +move 11 from 9 to 8 +move 4 from 3 to 5 +move 3 from 1 to 4 +move 13 from 5 to 7 +move 10 from 8 to 5 +move 2 from 1 to 5 +move 11 from 7 to 4 +move 2 from 3 to 6 +move 3 from 7 to 6 +move 1 from 3 to 2 +move 1 from 1 to 8 +move 2 from 8 to 4 +move 3 from 1 to 2 +move 4 from 6 to 1 +move 7 from 1 to 9 +move 1 from 6 to 7 +move 2 from 5 to 8 +move 1 from 2 to 9 +move 1 from 7 to 8 +move 5 from 5 to 8 +move 1 from 2 to 3 +move 4 from 2 to 5 +move 17 from 4 to 1 +move 10 from 5 to 9 +move 2 from 4 to 2 +move 2 from 4 to 1 +move 1 from 4 to 9 +move 1 from 3 to 7 +move 1 from 7 to 8 +move 12 from 9 to 2 +move 1 from 2 to 4 +move 1 from 4 to 1 +move 1 from 1 to 9 +move 1 from 8 to 1 +move 8 from 8 to 3 +move 2 from 5 to 1 +move 3 from 1 to 9 +move 1 from 2 to 6 +move 4 from 3 to 7 +move 1 from 7 to 6 +move 10 from 9 to 2 +move 1 from 5 to 9 +move 1 from 9 to 3 +move 17 from 1 to 6 +move 2 from 1 to 2 +move 11 from 6 to 7 +move 2 from 2 to 9 +move 2 from 9 to 5 +move 12 from 7 to 9 +move 20 from 2 to 7 +move 5 from 9 to 5 +move 21 from 7 to 1 +move 2 from 6 to 4 +move 11 from 1 to 4 +move 5 from 4 to 6 +move 1 from 7 to 8 +move 5 from 9 to 3 +move 5 from 2 to 8 +move 3 from 9 to 3 +move 2 from 8 to 7 +move 2 from 1 to 7 +move 10 from 6 to 3 +move 1 from 2 to 6 +move 2 from 8 to 5 +move 1 from 6 to 5 +move 2 from 4 to 9 +move 1 from 4 to 5 +move 8 from 1 to 6 +move 4 from 4 to 8 +move 6 from 8 to 4 +move 21 from 3 to 9 +move 5 from 9 to 2 +move 4 from 7 to 9 +move 22 from 9 to 3 +move 9 from 6 to 4 +move 2 from 2 to 6 +move 2 from 2 to 1 +move 2 from 5 to 7 +move 7 from 5 to 4 +move 22 from 4 to 2 +move 2 from 5 to 4 +move 16 from 2 to 5 +move 2 from 6 to 2 +move 13 from 3 to 4 +move 5 from 5 to 7 +move 15 from 4 to 7 +move 3 from 2 to 3 +move 3 from 2 to 5 +move 1 from 1 to 2 +move 1 from 2 to 4 +move 6 from 5 to 9 +move 4 from 3 to 6 +move 2 from 5 to 9 +move 1 from 2 to 7 +move 1 from 1 to 9 +move 2 from 4 to 5 +move 19 from 7 to 8 +move 1 from 6 to 5 +move 1 from 5 to 1 +move 1 from 9 to 4 +move 5 from 8 to 1 +move 3 from 8 to 1 +move 7 from 5 to 6 +move 3 from 7 to 1 +move 1 from 2 to 5 +move 4 from 9 to 8 +move 2 from 5 to 6 +move 10 from 1 to 4 +move 1 from 7 to 2 +move 6 from 3 to 4 +move 9 from 4 to 3 +move 2 from 2 to 8 +move 2 from 9 to 5 +move 5 from 8 to 3 +move 1 from 1 to 5 +move 2 from 5 to 6 +move 1 from 1 to 7 +move 2 from 9 to 7 +move 8 from 4 to 7 +move 3 from 3 to 9 +move 4 from 6 to 3 +move 1 from 5 to 3 +move 1 from 7 to 2 +move 1 from 2 to 1 +move 1 from 6 to 5 +move 1 from 5 to 2 +move 10 from 7 to 4 +move 10 from 4 to 1 +move 10 from 1 to 8 +move 1 from 9 to 6 +move 1 from 1 to 4 +move 11 from 8 to 1 +move 2 from 9 to 5 +move 5 from 6 to 3 +move 1 from 3 to 8 +move 4 from 1 to 3 +move 5 from 3 to 8 +move 1 from 4 to 7 +move 1 from 7 to 2 +move 13 from 3 to 5 +move 2 from 2 to 1 +move 4 from 3 to 1 +move 4 from 5 to 6 +move 3 from 6 to 2 +move 4 from 5 to 4 +move 8 from 8 to 7 +move 1 from 3 to 9 diff --git a/day05/src/main.rs b/day05/src/main.rs new file mode 100644 index 0000000..0e9128d --- /dev/null +++ b/day05/src/main.rs @@ -0,0 +1,109 @@ +use std::fs; +use std::str::FromStr; + +fn main() { + const FILE_PATH: &str = "input"; + println!("Hi this is the fifth day of AOC2022, first we will read the file {}", FILE_PATH); + let contents = fs::read_to_string(FILE_PATH) + .expect("Should have been able to read the file"); + + println!("First we parse this mess"); + let (snacks, moves) = parse(&contents); + println!("Then we do the moves as told!"); + let snacks = operate9000(snacks, moves); + println!("Aaaand, the top crates are: {}", peek(&snacks)); + println!("Aw, it was a CrateMover 9001, no problem we make snacks!"); + let (snacks, moves) = parse(&contents); + println!("Then we do the moves as told, this time the correct way!"); + let snacks = operate9001(snacks, moves); + println!("Aaaand, the top crates are: {}", peek(&snacks)); +} + +fn peek(snacks: &Vec>) -> String{ + let mut top = String::new(); + for s in snacks{ + let ptr = s.len()-1; + top.push(s[ptr]); + } + top +} + +fn operate9000(snacks: Vec>, moves: Vec<(usize, usize, usize)>) -> Vec>{ + let mut snacks = snacks.to_owned(); + for mov in moves{ + for _ in 0..mov.0{ + let c = snacks[mov.1-1].pop().expect("You must be able to do the isntruction"); + snacks[mov.2-1].push(c); + } + } + snacks +} + +fn operate9001(snacks: Vec>, moves: Vec<(usize, usize, usize)>) -> Vec>{ + let mut snacks = snacks.to_owned(); + for mov in moves{ + let mut c = Vec::new(); + for _ in 0..mov.0{ + c.push(snacks[mov.1-1].pop().expect("You must be able to do the isntruction")); + } + for _ in 0..c.len(){ + snacks[mov.2-1].push(c.pop().expect("Always full here lemao")); + } + } + snacks +} + +fn parse(s: &str) -> (Vec>, Vec<(usize, usize, usize)>){ + let mut s = s.split("\n\n"); + let mut snacks = Vec::new(); + let mut moves = Vec::new(); + //Stacks + let mut stacks = s.next().expect("there must be things in the stacks").lines().rev(); + let n: Vec = stacks.next().expect("REASON").chars().rev().collect(); + let n: usize = n[1].to_digit(10).expect("Must be a number") as usize; + for _ in 0..n{ + snacks.push(Vec::new()) + } + for line in stacks{ + let line: Vec = line.chars().collect(); + for i in 0..n{ + let caja = line[i*4+1]; + if caja != ' '{ + snacks[i].push(caja); + } + } + } + //Moves + for line in s.next().expect("There must be instructions").lines(){ + let line: Vec<&str> = line.split(" ").collect(); + moves.push((usize::from_str(line[1]).expect("Must be a number"), usize::from_str(line[3]).expect("Must be a number"), usize::from_str(line[5]).expect("Must be a number"))); + } + + (snacks, moves) +} + +#[cfg(test)] +mod test { + const INPUT: &str = r#" [D] +[N] [C] +[Z] [M] [P] + 1 2 3 + +move 1 from 2 to 1 +move 3 from 1 to 3 +move 2 from 2 to 1 +move 1 from 1 to 2"#; + use super::*; + #[test] + fn stacks1() { + let (snacks, moves) = parse(INPUT); + let snacks = operate9000(snacks, moves); + assert_eq!(peek(&snacks), "CMZ"); + } + #[test] + fn stacks2() { + let (snacks, moves) = parse(INPUT); + let snacks = operate9001(snacks, moves); + assert_eq!(peek(&snacks), "MCD"); + } +} \ No newline at end of file