diff --git a/Cargo.toml b/Cargo.toml index 8a2286f..31f8775 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,11 +6,3 @@ resolver = "2" lto = true panic = "abort" opt-level = 3 - -[workspace.lints.clippy] -correctness = "deny" -suspicious = "deny" -complexity = "deny" -perf = "deny" -style = "deny" -pedantic = "deny" diff --git a/README.md b/README.md index fb9dcce..55325de 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -# Advent of Code 2024 +# Advent of Code 2023 ## Progress: -- [Day 1](https://github.com/ankjevel/adventofcode/tree/2024/day_01) ⭐️ ⭐️ -- [Day 2](https://github.com/ankjevel/adventofcode/tree/2024/day_02) ⭐️ ⭐️ -- [Day 3](https://github.com/ankjevel/adventofcode/tree/2024/day_03) ⭐️ ⭐️ -- [Day 4](https://github.com/ankjevel/adventofcode/tree/2024/day_04) ⭐️ ⭐️ -- [Day 5](https://github.com/ankjevel/adventofcode/tree/2024/day_05) ⭐️ ⭐️ -- [Day 6](https://github.com/ankjevel/adventofcode/tree/2024/day_06) ⭐️ ⭐️ -- [Day 7](https://github.com/ankjevel/adventofcode/tree/2024/day_07) ⭐️ ⭐️ -- [Day 8](#) +- [Day 1](https://github.com/ankjevel/adventofcode/tree/2023/day_01) ⭐️ ⭐️ +- [Day 2](https://github.com/ankjevel/adventofcode/tree/2023/day_02) ⭐️ ⭐️ +- [Day 3](https://github.com/ankjevel/adventofcode/tree/2023/day_03) ⭐️ ⭐️ +- [Day 4](https://github.com/ankjevel/adventofcode/tree/2023/day_04) ⭐️ ⭐️ +- [Day 5](https://github.com/ankjevel/adventofcode/tree/2023/day_05) ⭐️ ⭐️ +- [Day 6](https://github.com/ankjevel/adventofcode/tree/2023/day_06) ⭐️ ⭐️ +- [Day 7](https://github.com/ankjevel/adventofcode/tree/2023/day_07) ⭐️ ⭐️ +- [Day 8](https://github.com/ankjevel/adventofcode/tree/2023/day_08) ⭐️ ⭐️ - [Day 9](#) - [Day 10](#) - [Day 11](#) diff --git a/day_01/src/lib.rs b/day_01/src/lib.rs index ee71f73..c6975c2 100644 --- a/day_01/src/lib.rs +++ b/day_01/src/lib.rs @@ -1,44 +1,29 @@ pub mod part_01; pub mod part_02; -pub type Number = i128; -pub type Input = (Vec, Vec); +pub type Input = Vec; pub fn parse_input(input: &str) -> Input { - input.trim_start().trim_end().lines().map(str::trim).fold( - (vec![], vec![]), - |mut values, line| { - let distances: Vec<_> = line - .split_whitespace() - .map(|string| string.parse().unwrap()) - .collect(); - - values.0.push(distances[0]); - values.1.push(distances[1]); - - values - }, - ) + input + .trim_start() + .trim_end() + .lines() + .map(str::trim) + .map(|string| string.parse().unwrap()) + .collect() } #[cfg(test)] mod tests { use super::*; - const EXAMPLE_DATA: &str = " - 3 4 - 4 3 - 2 5 - 1 3 - 3 9 - 3 3 + const EXAMPLE_DATA: &'static str = " + 1abc2 + pqr3stu8vwx "; #[test] fn it_parses_example() { - assert_eq!( - parse_input(EXAMPLE_DATA), - (vec![3, 4, 2, 1, 3, 3], vec![4, 3, 5, 3, 9, 3],) - ); + assert_eq!(parse_input(&EXAMPLE_DATA), vec!["1abc2", "pqr3stu8vwx"]); } } diff --git a/day_01/src/part_01.rs b/day_01/src/part_01.rs index 10f177a..5451696 100644 --- a/day_01/src/part_01.rs +++ b/day_01/src/part_01.rs @@ -1,16 +1,32 @@ use std::io::Result; -use crate::{Input, Number}; - -pub fn main(input: &Input) -> Result { - let (mut left, mut right) = input.clone(); - - left.sort(); - right.sort(); - - Ok(left.iter().enumerate().fold(0, |sum, (index, left_value)| { - sum + (left_value - right.get(index).unwrap()).abs() - })) +use crate::Input; + +pub fn main(input: &Input) -> Result { + Ok(input + .into_iter() + .map(|row| { + let digits: Vec = row + .chars() + .into_iter() + .map(|c| { + if c.is_digit(10) { + return Some(c.to_digit(10).unwrap()); + } else { + return None; + } + }) + .filter(|o| match o { + Some(_val) => true, + None => false, + }) + .map(|val| val.unwrap()) + .collect::>(); + let first = digits.first().unwrap_or(&0).to_owned(); + let last = digits.last().unwrap_or(&0).to_owned(); + format!("{}{}", first, last).as_str().parse().unwrap_or(0) + }) + .sum()) } #[cfg(test)] @@ -19,18 +35,16 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = " - 3 4 - 4 3 - 2 5 - 1 3 - 3 9 - 3 3 + const EXAMPLE_DATA: &'static str = " + 1abc2 + pqr3stu8vwx + a1b2c3d4e5f + treb7uchet "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 11); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 142); Ok(()) } } diff --git a/day_01/src/part_02.rs b/day_01/src/part_02.rs index 35a6ae3..c6032ea 100644 --- a/day_01/src/part_02.rs +++ b/day_01/src/part_02.rs @@ -1,16 +1,54 @@ use std::io::Result; -use crate::{Input, Number}; +use crate::Input; -pub fn main((left, right): &Input) -> Result { - Ok(left.iter().fold(0, |sum, left_value| { - let occurrences = right - .iter() - .filter(|right_value| right_value == &left_value) - .count() as Number; - let similarity_score = left_value * occurrences; - sum + similarity_score - })) +pub fn main(input: &Input) -> Result { + Ok(input + .into_iter() + .map(|row| { + let digits: Vec = row + .chars() + .enumerate() + .into_iter() + .map(|(i, c)| { + if c.is_digit(10) { + return Some(c.to_digit(10).unwrap()); + } + let chars = row.chars().skip(i).collect::(); + if chars.starts_with("one") { + return Some(1); + } else if chars.starts_with("two") { + return Some(2); + } else if chars.starts_with("three") { + return Some(3); + } else if chars.starts_with("four") { + return Some(4); + } else if chars.starts_with("five") { + return Some(5); + } else if chars.starts_with("six") { + return Some(6); + } else if chars.starts_with("seven") { + return Some(7); + } else if chars.starts_with("eight") { + return Some(8); + } else if chars.starts_with("nine") { + return Some(9); + } else { + return None; + }; + }) + .filter(|o| match o { + Some(_val) => true, + None => false, + }) + .map(|val| val.unwrap()) + .collect::>(); + let first = digits.first().unwrap_or(&0).to_owned(); + let last = digits.last().unwrap_or(&0).to_owned(); + + format!("{}{}", first, last).as_str().parse().unwrap_or(0) + }) + .sum()) } #[cfg(test)] @@ -19,18 +57,19 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = " - 3 4 - 4 3 - 2 5 - 1 3 - 3 9 - 3 3 + const EXAMPLE_DATA: &'static str = " + two1nine + eightwothree + abcone2threexyz + xtwone3four + 4nineeightseven2 + zoneight234 + 7pqrstsixteen "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 31); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 281); Ok(()) } } diff --git a/day_02/Cargo.toml b/day_02/Cargo.toml index b9b0001..9792e74 100644 --- a/day_02/Cargo.toml +++ b/day_02/Cargo.toml @@ -2,14 +2,10 @@ name = "day_02" version = "0.1.0" edition = "2021" -authors = ["Dennis Pettersson "] [lib] doctest = false -[[bin]] -name = "day_02" - # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/day_02/src/lib.rs b/day_02/src/lib.rs index a3437e1..1fc1135 100644 --- a/day_02/src/lib.rs +++ b/day_02/src/lib.rs @@ -1,112 +1,87 @@ pub mod part_01; pub mod part_02; -type Number = i32; - -pub type Input = Vec>; - -pub fn parse_input(input: &str) -> Input { - input - .lines() - .map(str::trim) - .filter(|string| !string.is_empty()) - .map(str::to_owned) - .map(|line| { - line.split_whitespace() - .map(|string| string.parse().unwrap()) - .collect() - }) - .collect() +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +pub struct Bag { + red: u32, + green: u32, + blue: u32, } -pub fn is_safe(row: &&Vec) -> bool { - let mut index = 1; - while index < row.len() - 1 { - if check_if_safe(row, index) { - index += 1; - continue; - } - return false; +impl Bag { + pub fn new() -> Self { + Self::init(0, 0, 0) } - true -} -fn check_if_safe(row: &[Number], index: usize) -> bool { - let current = row.get(index).unwrap(); - if let Some(left) = row.get(index - 1) { - if let Some(right) = row.get(index + 1) { - let change_right = current - right; - let change_left = left - current; - - if is_unsafe_value(change_left) || is_unsafe_value(change_right) { - return false; - } + pub fn init(red: u32, green: u32, blue: u32) -> Self { + Self { red, green, blue } + } - if is_unsafe_change(change_left, change_right) { - return false; - } - } + pub fn power(self) -> u32 { + self.red * self.green * self.blue } - true -} -fn is_unsafe_value(change: Number) -> bool { - change == 0 || change.abs() > 3 + pub fn max(mut self, other: &Bag) -> Bag { + self.red = self.red.max(other.red); + self.green = self.green.max(other.green); + self.blue = self.blue.max(other.blue); + self + } } -fn is_unsafe_change(left: Number, right: Number) -> bool { - let increase_left = left > 0; - let increase_right = right > 0; +pub type Input = Vec>; - increase_left != increase_right +pub fn parse_input(input: &str) -> Input { + input + .trim_start() + .trim_end() + .lines() + .map(str::trim) + .map(|string| { + string.split(": ").collect::>()[1] + .split("; ") + .collect::>() + .iter() + .map(|record| { + let game = record.split(", ").collect::>(); + let mut bag = Bag::new(); + + game.iter().for_each(|part| { + let cubes = part.split(' ').next().unwrap().parse::().unwrap(); + if part.ends_with("red") { + bag.red = cubes; + } + if part.ends_with("green") { + bag.green = cubes; + } + if part.ends_with("blue") { + bag.blue = cubes; + } + }); + bag + }) + .collect() + }) + .collect() } #[cfg(test)] mod tests { use super::*; - const EXAMPLE_DATA: &str = " - 94 94 95 93 95 94 - 4 4 6 3 8 + const EXAMPLE_DATA: &'static str = " + Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green + Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue "; #[test] fn it_parses_example() { assert_eq!( - parse_input(EXAMPLE_DATA), - vec![vec![94, 94, 95, 93, 95, 94], vec![4, 4, 6, 3, 8]] - ); - } - - #[test] - fn it_handles_increased_changes() { - assert!( - !check_if_safe(&[2, 7, 8], 1,), - "Unsafe because 2 7 is an increase of 5" - ); - } - - #[test] - fn it_handles_decreased_changes() { - assert!( - !check_if_safe(&[7, 6, 2], 1,), - "Unsafe because 6 2 is a decrease of 4" - ); - } - - #[test] - fn it_handles_left_inc_and_right_dec() { - assert!( - !check_if_safe(&[7, 6, 2], 1,), - "Unsafe because 1 3 is increasing but 3 2 is decreasing" - ); - } - - #[test] - fn it_handles_no_change() { - assert!( - !check_if_safe(&[6, 4, 4], 1,), - "Unsafe because 4 4 is neither an increase or a decrease" + parse_input(&EXAMPLE_DATA), + vec![ + vec![Bag::init(4, 0, 3), Bag::init(1, 2, 6), Bag::init(0, 2, 0)], + vec![Bag::init(0, 2, 1), Bag::init(1, 3, 4), Bag::init(0, 1, 1)] + ] ); } } diff --git a/day_02/src/part_01.rs b/day_02/src/part_01.rs index 83a4363..0dc7292 100644 --- a/day_02/src/part_01.rs +++ b/day_02/src/part_01.rs @@ -1,9 +1,18 @@ use std::io::Result; -use crate::{is_safe, Input}; +use crate::Input; -pub fn main(input: &Input) -> Result { - Ok(input.iter().filter(is_safe).collect::>().len()) +pub fn main(input: &Input) -> Result { + Ok(input + .iter() + .enumerate() + .filter(|(_, games)| { + !games + .iter() + .any(|game| game.red > 12 || game.green > 13 || game.blue > 14) + }) + .map(|(index, _)| u32::try_from(index + 1).unwrap()) + .sum()) } #[cfg(test)] @@ -12,18 +21,17 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = " - 7 6 4 2 1 - 1 2 7 8 9 - 9 7 6 2 1 - 1 3 2 4 5 - 8 6 4 4 1 - 1 3 6 7 9 + const EXAMPLE_DATA: &'static str = " + Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green + Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue + Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red + Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red + Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 2); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 8); Ok(()) } } diff --git a/day_02/src/part_02.rs b/day_02/src/part_02.rs index b3fa8e1..e5a2ce3 100644 --- a/day_02/src/part_02.rs +++ b/day_02/src/part_02.rs @@ -1,22 +1,13 @@ use std::io::Result; -use crate::{is_safe, Input}; +use crate::{Bag, Input}; -pub fn main(input: &Input) -> Result { +pub fn main(input: &Input) -> Result { Ok(input .iter() - .filter(|row| { - for i in 0..row.len() { - let mut copy = row.to_owned().to_owned(); - copy.remove(i); - if is_safe(&©) { - return true; - } - } - false - }) - .collect::>() - .len()) + .map(|games| games.iter().fold(Bag::new(), |bag, game| bag.max(game))) + .map(|bag| bag.power()) + .sum()) } #[cfg(test)] @@ -25,19 +16,17 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = " - 7 6 4 2 1 - 1 2 7 8 9 - 9 7 6 2 1 - 1 3 2 4 5 - 8 6 4 4 1 - 1 3 6 7 9 + const EXAMPLE_DATA: &'static str = " + Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green + Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue + Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red + Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red + Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 4); - assert_eq!(main(&parse_input("86 87 90 92 91 94"))?, 1); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 2286); Ok(()) } } diff --git a/day_03/Cargo.toml b/day_03/Cargo.toml index 480fee2..b73f0bf 100644 --- a/day_03/Cargo.toml +++ b/day_03/Cargo.toml @@ -2,16 +2,10 @@ name = "day_03" version = "0.1.0" edition = "2021" -authors = ["Dennis Pettersson "] [lib] doctest = false -[[bin]] -name = "day_03" - # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -regex = "1.11.1" -lazy_static = "1.5.0" diff --git a/day_03/src/lib.rs b/day_03/src/lib.rs index cbf1344..16fae7b 100644 --- a/day_03/src/lib.rs +++ b/day_03/src/lib.rs @@ -1,104 +1,138 @@ -#[macro_use(lazy_static)] -extern crate lazy_static; -extern crate regex; +use std::ops::RangeInclusive; pub mod part_01; pub mod part_02; -use regex::Regex; - -lazy_static! { - static ref ROW: Regex = - Regex::new(r"(?do\(\))|(?don't\(\))|mul\((?\d{1,3}),(?\d{1,3})\)") - .unwrap(); +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct Input { + rows: Vec, + max_x: usize, + max_y: usize, } -pub type Number = u64; -pub type Input = Vec; - #[derive(Debug, Clone, Eq, PartialEq)] -pub struct Instruction { - mul: Option<(Number, Number)>, - skip: Option, +pub struct Row { + numbers: Vec<(RangeInclusive, u32)>, + symbols: Vec<(usize, char)>, } -impl Instruction { - pub fn mul(left: Number, right: Number) -> Self { - Self { - mul: Some((left, right)), - skip: None, - } - } +fn parse(input: Vec) -> Input { + let max_x = input.first().unwrap().len(); + let max_y = input.len(); - pub fn skip(skip: bool) -> Self { - Self { - mul: None, - skip: Some(skip), - } - } + Input { + max_x, + max_y, + rows: input + .to_owned() + .iter() + .map(|line| { + let numbers: Vec<_> = line + .chars() + .into_iter() + .enumerate() + .fold(vec![], |mut indices_and_chars, (index, c)| { + if !c.is_digit(10) { + return indices_and_chars; + } - pub fn sum(&self) -> Number { - if let Some((left, right)) = self.mul { - left * right - } else { - 0 - } - } -} + let current = (index.to_owned(), c.to_owned()); + let last = indices_and_chars.last_mut(); -pub fn parse_input(input: &str) -> Input { - input - .lines() - .map(str::trim) - .filter(|string| !string.is_empty()) - .map(str::to_owned) - .fold(vec![], |mut all, line| { - all.extend( - ROW.captures_iter(&line) - .map(|matched| { - if let Some(left) = matched.name("left") { - Instruction::mul( - left.as_str().parse().unwrap(), - matched.name("right").unwrap().as_str().parse().unwrap(), - ) + if last.is_none() { + indices_and_chars.push(vec![current]); + return indices_and_chars; + } + + let last_mut = last.unwrap(); + if last_mut.last().unwrap().0 == index - 1 { + last_mut.push(current); } else { - Instruction::skip(matched.name("dont").is_some()) + indices_and_chars.push(vec![current]); } + + indices_and_chars + }) + .iter() + .map(|v| { + ( + v.first().unwrap().0..=v.last().unwrap().0, + v.iter() + .fold("".to_owned(), |str, (_, c)| { + String::from(str.to_owned() + &c.to_string()) + }) + .parse() + .unwrap(), + ) }) - .collect::>(), - ); + .collect(); + + let symbols = + line.chars() + .into_iter() + .enumerate() + .fold(vec![], |mut symbols, (index, c)| { + if !c.is_digit(10) && c != '.' { + symbols.push((index, c.to_owned())) + } + symbols + }); + + Row { symbols, numbers } + }) + .collect(), + } +} - all - }) +pub fn parse_input(input: &str) -> Input { + parse( + input + .trim_start() + .trim_end() + .lines() + .map(str::trim) + .map(|string| string.parse().unwrap()) + .collect(), + ) } #[cfg(test)] mod tests { use super::*; + const EXAMPLE_DATA: &'static str = " + 467..114.. + ...#.+.58. + ...$.*.... + .664.598.. + "; + #[test] fn it_parses_example() { assert_eq!( - parse_input("xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))"), - vec![ - Instruction::mul(2, 4), - Instruction::mul(5, 5), - Instruction::mul(11, 8), - Instruction::mul(8, 5) - ] + parse_input(&EXAMPLE_DATA), + Input { + rows: vec![ + Row { + numbers: vec![(0..=2, 467), (5..=7, 114)], + symbols: vec![] + }, + Row { + numbers: vec![(7..=8, 58)], + symbols: vec![(3, '#'), (5, '+')] + }, + Row { + numbers: vec![], + symbols: vec![(3, '$'), (5, '*')] + }, + Row { + numbers: vec![(1..=3, 664), (5..=7, 598)], + symbols: vec![] + } + ], + max_x: 10, + max_y: 4, + } ); - assert_eq!( - parse_input( - "xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))" - ), - vec![ - Instruction::mul(2, 4), - Instruction::skip(true), - Instruction::mul(5, 5), - Instruction::mul(11, 8), - Instruction::skip(false), - Instruction::mul(8, 5) - ] - ) } } diff --git a/day_03/src/part_01.rs b/day_03/src/part_01.rs index e6a026a..c4e1094 100644 --- a/day_03/src/part_01.rs +++ b/day_03/src/part_01.rs @@ -1,9 +1,84 @@ -use std::io::Result; +use std::{io::Result, ops::RangeInclusive}; -use crate::{Input, Instruction, Number}; +use crate::{Input, Row}; -pub fn main(input: &Input) -> Result { - Ok(input.iter().map(Instruction::sum).sum()) +#[derive(Debug, Clone, Eq, PartialEq)] +struct IteratedRow { + to_check: Vec>, + row: Row, +} + +fn around( + range: &RangeInclusive, + max_x: usize, + max_y: usize, + row: usize, +) -> Vec<(usize, usize)> { + let start = range.start().to_owned(); + let end = range.end().to_owned(); + + let start_x = if start != 0 { start - 1 } else { start }; + let end_x = if end != max_x { end + 1 } else { end }; + + let start_y = if row != 0 { row - 1 } else { row }; + let end_y = if row != max_y { row + 1 } else { row }; + + let mut values = vec![]; + for y in start_y..=end_y { + for x in start_x..=end_x { + if y == row && range.contains(&x) { + continue; + } + values.push((x.to_owned(), y.to_owned())); + } + } + + values +} + +pub fn main(input: &Input) -> Result { + Ok(input + .rows + .clone() + .into_iter() + .enumerate() + .map(|(index, row)| { + let to_check = row + .numbers + .iter() + .map(|(range, _)| around(range, input.max_x, input.max_y, index)) + .collect(); + IteratedRow { row, to_check } + }) + .fold(vec![], |mut matched: Vec, iterated_row| { + for (i, range) in iterated_row.to_check.into_iter().enumerate() { + let exists = range.into_iter().any(|(x, y)| { + let rows = input.rows.clone(); + let y_row = rows.get(y); + if y_row.is_none() { + return false; + } + + let y_row = y_row.unwrap(); + let x_numbers = y_row.numbers.clone().into_iter().find(|n| n.0.contains(&x)); + let x_symbols = y_row.symbols.clone().into_iter().find(|n| n.0 == x); + + if x_numbers.is_some() || x_symbols.is_some() { + return true; + } + + false + }); + + if exists { + matched.push(iterated_row.row.numbers.get(i).unwrap().1); + } + } + + matched + }) + .into_iter() + .sum()) } #[cfg(test)] @@ -12,13 +87,22 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = " - xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5)) + const EXAMPLE_DATA: &'static str = " + 467..114.. + ...*...... + ..35..633. + ......#... + 617*...... + .....+.58. + ..592..... + ......755. + ...$.*.... + .664.598.. "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 161); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 4361); Ok(()) } } diff --git a/day_03/src/part_02.rs b/day_03/src/part_02.rs index d422c4f..712204b 100644 --- a/day_03/src/part_02.rs +++ b/day_03/src/part_02.rs @@ -1,26 +1,88 @@ use std::io::Result; -use crate::{Input, Instruction, Number}; +use crate::Input; -pub fn main(input: &Input) -> Result { - let mut should_skip = false; +pub const DIRECTIONS: [(i32, i32); 8] = [ + (-1, -1), + (0, -1), + (1, -1), + (-1, 0), + (1, 0), + (-1, 1), + (0, 1), + (1, 1), +]; + +pub fn main(input: &Input) -> Result { Ok(input - .iter() - .filter(|row| { - if should_skip { - if row.skip.is_none() || row.skip.unwrap() { - should_skip = true; - return false; + .rows + .clone() + .into_iter() + .enumerate() + .fold(vec![], |mut v: Vec<_>, (y, row)| { + row.symbols.iter().for_each(|n| { + if n.1 == '*' { + v.push((n.0, y)); } - should_skip = false; - } else if row.skip.is_some() { - should_skip = row.skip.unwrap(); - return false; + }); + v + }) + .into_iter() + .map(|(x, y)| { + DIRECTIONS + .iter() + .fold(vec![], |mut dirs: Vec<(usize, usize)>, (dx, dy)| { + let x = i32::try_from(x).unwrap(); + let y = i32::try_from(y).unwrap(); + let nx = x.to_owned() + dx.to_owned(); + let ny = y.to_owned() + dy.to_owned(); + + if nx == -1 || nx == i32::try_from(input.max_x).unwrap() { + return dirs; + } + + if ny == -1 || ny == i32::try_from(input.max_y).unwrap() { + return dirs; + } + + dirs.push((usize::try_from(nx).unwrap(), usize::try_from(ny).unwrap())); + dirs + }) + }) + .fold(vec![], |mut matches: Vec, positions| { + let m = positions + .clone() + .into_iter() + .fold(vec![], |mut m: Vec, (x, y)| { + let matched = input + .rows + .get(y) + .unwrap() + .numbers + .iter() + .find(|n| n.0.contains(&x)); + + if matched.is_none() { + return m; + } + + let number = matched.unwrap().1; + + if m.contains(&number) { + return m; + } + + m.push(number); + + m + }); + if m.len() == 2 { + matches.push(m.iter().product()); } - row.mul.is_some() + matches }) - .map(Instruction::sum) + .iter() .sum()) } @@ -30,13 +92,22 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = " - xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5)) + const EXAMPLE_DATA: &'static str = " + 467..114.. + ...*...... + ..35..633. + ......#... + 617*...... + .....+.58. + ..592..... + ......755. + ...$.*.... + .664.598.. "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 48); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 467835); Ok(()) } } diff --git a/day_04/Cargo.toml b/day_04/Cargo.toml index 2666cfa..437c2ae 100644 --- a/day_04/Cargo.toml +++ b/day_04/Cargo.toml @@ -2,14 +2,10 @@ name = "day_04" version = "0.1.0" edition = "2021" -authors = ["Dennis Pettersson "] [lib] doctest = false -[[bin]] -name = "day_04" - # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/day_04/src/lib.rs b/day_04/src/lib.rs index 390c049..71a28ec 100644 --- a/day_04/src/lib.rs +++ b/day_04/src/lib.rs @@ -1,14 +1,27 @@ pub mod part_01; pub mod part_02; -pub type Input = Vec; +pub type Input = Vec<(Vec, Vec)>; + +fn numbers(input: &str) -> Vec { + input + .split(' ') + .filter(|string| !string.trim().is_empty()) + .map(|string| string.trim().parse::<_>().unwrap()) + .collect() +} pub fn parse_input(input: &str) -> Input { input + .trim_start() + .trim_end() .lines() .map(str::trim) - .filter(|string| !string.is_empty()) - .map(str::to_owned) + .map(|string| { + let card = string.split(": ").collect::>()[1]; + let split = card.split(" | ").collect::>(); + (numbers(split[0]), numbers(split[1])) + }) .collect() } @@ -16,34 +29,24 @@ pub fn parse_input(input: &str) -> Input { mod tests { use super::*; - const EXAMPLE_DATA: &str = " - MMMSXXMASM - MSAMXMSMSA - AMXSXMAAMM - MSAMASMSMX - XMASAMXAMM - XXAMMXXAMA - SMSMSASXSS - SAXAMASAAA - MAMMMXMMMM - MXMXAXMASX + const EXAMPLE_DATA: &'static str = " + Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 + Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 "; #[test] fn it_parses_example() { assert_eq!( - parse_input(EXAMPLE_DATA), + parse_input(&EXAMPLE_DATA), vec![ - "MMMSXXMASM", - "MSAMXMSMSA", - "AMXSXMAAMM", - "MSAMASMSMX", - "XMASAMXAMM", - "XXAMMXXAMA", - "SMSMSASXSS", - "SAXAMASAAA", - "MAMMMXMMMM", - "MXMXAXMASX", + ( + vec![41, 48, 83, 86, 17], // + vec![83, 86, 6, 31, 17, 9, 48, 53] + ), + ( + vec![13, 32, 20, 16, 61], // + vec![61, 30, 68, 82, 17, 32, 24, 19] + ) ] ); } diff --git a/day_04/src/part_01.rs b/day_04/src/part_01.rs index cf9c476..e631545 100644 --- a/day_04/src/part_01.rs +++ b/day_04/src/part_01.rs @@ -1,61 +1,17 @@ -use std::{ - collections::{HashMap, HashSet}, - io::Result, -}; +use std::io::Result; use crate::Input; -pub fn main(input: &Input) -> Result { - let mut x_es: Vec<_> = vec![]; - - let all: HashMap<_, _> = HashMap::from_iter(input.iter().enumerate().flat_map(|(y, row)| { - row.chars() - .enumerate() - .map(|(x, char)| { - let pos = (x as isize, y as isize); - - if char == 'X' { - x_es.push(pos.to_owned()) - } - - (pos, char) - }) - .collect::>() - })); - - let look = |(x, y): _, v: _, h: _| -> Option<_> { - let m = (x + v, y + h); - let a = (x + (v * 2), y + (h * 2)); - let s = (x + (v * 3), y + (h * 3)); - let x = (x, y); - - if all.get(&m) == Some(&'M') && all.get(&a) == Some(&'A') && all.get(&s) == Some(&'S') { - Some((x, m, a, s)) - } else { - None - } - }; - - let found = x_es +pub fn main(input: &Input) -> Result { + Ok(input .iter() - .flat_map(|x_y| { - [ - (-1, 0), // left - (1, 0), // right - (0, 1), // down - (0, -1), // up - (-1, 1), // down-left - (1, 1), // down-right - (-1, -1), // up-left - (1, -1), // up-right - ] - .iter() - .filter_map(|(v, h)| look(*x_y, *v, *h)) - .collect::>() + .map(|(winning_numbers, numbers)| { + winning_numbers + .iter() + .filter(|n| numbers.contains(n)) + .fold(0, |sum, _| if sum == 0 { 1 } else { sum * 2 }) }) - .collect::>(); - - Ok(found.len()) + .sum()) } #[cfg(test)] @@ -64,22 +20,18 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = " - MMMSXXMASM - MSAMXMSMSA - AMXSXMAAMM - MSAMASMSMX - XMASAMXAMM - XXAMMXXAMA - SMSMSASXSS - SAXAMASAAA - MAMMMXMMMM - MXMXAXMASX + const EXAMPLE_DATA: &'static str = " + Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 + Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 + Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 + Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 + Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 + Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11 "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 18); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 13); Ok(()) } } diff --git a/day_04/src/part_02.rs b/day_04/src/part_02.rs index 0f2accf..63fc1e0 100644 --- a/day_04/src/part_02.rs +++ b/day_04/src/part_02.rs @@ -1,75 +1,27 @@ -use std::{collections::HashMap, io::Result}; +use std::{collections::BTreeMap, io::Result}; use crate::Input; -pub fn main(input: &Input) -> Result { - let mut every_a: Vec<_> = vec![]; +pub fn main(input: &Input) -> Result { + let mut cards = BTreeMap::from_iter(input.iter().enumerate().map(|n| (n.0, 1))); - let all: HashMap<_, _> = HashMap::from_iter(input.iter().enumerate().flat_map(|(y, row)| { - row.chars() - .enumerate() - .map(|(x, char)| { - let pos = (x as isize, y as isize); - - if char == 'A' { - every_a.push(pos.to_owned()) - } - - (pos, char) - }) - .collect::>() - })); - - let is_ok = - |a: &char, b: &char| -> bool { (*a == 'M' && *b == 'S') || (*a == 'S' && *b == 'M') }; - - let xmas = every_a + input .iter() - .filter_map(|(x, y)| { - let top_left = (x - 1, y - 1); - let top_right = (x + 1, y - 1); - let bottom_left = (x - 1, y + 1); - let bottom_right = (x + 1, y + 1); - - if all.contains_key(&top_left) - && all.contains_key(&top_right) - && all.contains_key(&bottom_left) - && all.contains_key(&bottom_right) + .enumerate() + .for_each(|(index, (winning_numbers, numbers))| { + let to_add = cards.get(&(index)).unwrap_or(&1).to_owned(); + for (card, _) in winning_numbers + .iter() + .filter(|n| numbers.contains(n)) + .enumerate() { - Some([top_left, top_right, (*x, *y), bottom_left, bottom_right]) - } else { - None - } - }) - .filter_map(|positions| { - let [top_left, top_right, a, bottom_left, bottom_right] = - positions.map(|pos| (pos, all.get(&pos).unwrap())); - - let ok = is_ok(top_left.1, bottom_right.1) && is_ok(top_right.1, bottom_left.1); - - if ok { - Some([top_left, top_right, a, bottom_left, bottom_right]) - } else { - None - } - }) - .collect::>(); - - #[cfg(test)] - { - let mut field = vec![vec!['.'; input.first().unwrap().len()]; input.len()]; - for col in &xmas { - for ((x, y), c) in col { - field[*y as usize][*x as usize] = **c; + cards + .entry(card + index + 1) + .and_modify(|previous| *previous += to_add); } - } - - for y in field { - print!("\n{}", y.into_iter().collect::()); - } - } + }); - Ok(xmas.len()) + Ok(cards.values().sum()) } #[cfg(test)] @@ -78,22 +30,18 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = " - MMMSXXMASM - MSAMXMSMSA - AMXSXMAAMM - MSAMASMSMX - XMASAMXAMM - XXAMMXXAMA - SMSMSASXSS - SAXAMASAAA - MAMMMXMMMM - MXMXAXMASX + const EXAMPLE_DATA: &'static str = " + Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 + Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 + Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 + Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 + Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 + Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11 "; #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 9); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 30); Ok(()) } } diff --git a/day_05/Cargo.toml b/day_05/Cargo.toml index 3cf42ef..2f6f9a5 100644 --- a/day_05/Cargo.toml +++ b/day_05/Cargo.toml @@ -2,14 +2,10 @@ name = "day_05" version = "0.1.0" edition = "2021" -authors = ["Dennis Pettersson "] [lib] doctest = false -[[bin]] -name = "day_05" - # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/day_05/src/lib.rs b/day_05/src/lib.rs index 8e4fceb..ee44d80 100644 --- a/day_05/src/lib.rs +++ b/day_05/src/lib.rs @@ -1,62 +1,129 @@ +use std::ops::Range; + pub mod part_01; pub mod part_02; -pub type Number = u8; -pub type Input = (Vec<(Number, Number)>, Vec>); +pub type Integer = u128; + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct Input { + seeds: Vec, + maps: Vec)>>, +} + +impl<'a> Input { + pub fn get_location(input: &'a Input, seed: Integer) -> Integer { + let mut current_index = seed.to_owned(); + let mut iterator = input.maps.to_owned().into_iter(); + let mut result = 0; + + while let Some(next) = iterator.next() { + let next_index = next.into_iter().find( + |(_destination_range_start, _source_range_start, source_range)| { + source_range.contains(¤t_index) + }, + ); + + current_index = match next_index { + Some((destination_range_start, source_range_start, _source_range)) => { + destination_range_start + (current_index - source_range_start) + } + _ => current_index, + }; + + result = current_index.to_owned(); + } + + result + } +} pub fn parse_input(input: &str) -> Input { - let input = input - .trim() + let mut last_key = "".to_owned(); + let mut current_array = vec![]; + let mut seeds = vec![]; + let mut maps = vec![]; + let map_identifier = " map:"; + + let numbers = |key: &str| -> Vec<_> { + key.split(' ') + .filter(|string| !string.trim().is_empty()) + .map(|string| string.trim().parse::<_>().unwrap()) + .collect() + }; + + input + .trim_start() + .trim_end() .lines() .map(str::trim) - .map(str::to_owned) - .collect::>(); - - let (page_ordering, page_numbers) = - input.split_at(input.iter().position(String::is_empty).unwrap()); - - let page_ordering = page_ordering - .iter() - .filter(|line| !line.is_empty()) - .map(|line| { - let split = line - .split("|") - .map(|part| part.parse().unwrap()) - .collect::>(); - (split[0], split[1]) - }) - .collect(); - - let page_numbers = page_numbers - .iter() - .filter(|line| !line.is_empty()) - .map(|line| line.split(",").map(|part| part.parse().unwrap()).collect()) - .collect(); - - (page_ordering, page_numbers) + .map(|string| string.to_owned()) + .for_each(|string| { + if string.is_empty() { + if last_key.is_empty() || current_array.is_empty() { + return; + } + maps.push(current_array.to_owned()); + current_array.clear(); + return; + } + + let is_map_start = string.contains(map_identifier); + let is_start = string.contains(": ") && !string.contains(map_identifier); + + if is_start { + seeds = numbers(string.split(": ").collect::>()[1]); + return; + } + + if is_map_start { + current_array.clear(); + last_key = string.split(map_identifier).collect::>()[0].to_owned(); + return; + } + + let numbers = numbers(&string); + let (destination_range_start, source_range_start, range_length) = + (numbers[0], numbers[1], numbers[2]); + let source_range = source_range_start..(source_range_start + range_length); + current_array.push((destination_range_start, source_range_start, source_range)); + }); + + if !current_array.is_empty() { + maps.push(current_array.to_owned()); + } + + Input { seeds, maps } } #[cfg(test)] mod tests { use super::*; - const EXAMPLE_DATA: &str = " - 47|29 - 75|13 - 53|13 + const EXAMPLE_DATA: &'static str = " + seeds: 79 14 55 13 - 75,47,61,53,29 - 53,29,13 + seed-to-soil map: + 50 98 2 + 52 50 48 + + soil-to-fertilizer map: + 0 15 37 + 37 52 2 + 39 0 15 "; #[test] - fn it_parses_example() { + fn it_parses_input() { assert_eq!( - parse_input(EXAMPLE_DATA), - ( - vec![(47, 29), (75, 13), (53, 13)], - vec![vec![75, 47, 61, 53, 29], vec![53, 29, 13]] - ) + parse_input(&EXAMPLE_DATA), + Input { + seeds: vec![79, 14, 55, 13], + maps: vec![ + vec![(50, 98, 98..100), (52, 50, 50..98)], + vec![(0, 15, 15..52), (37, 52, 52..54), (39, 0, 0..15)] + ] + } ); } } diff --git a/day_05/src/part_01.rs b/day_05/src/part_01.rs index 7633fe2..dc7a1ed 100644 --- a/day_05/src/part_01.rs +++ b/day_05/src/part_01.rs @@ -1,37 +1,15 @@ -use std::{cmp::Ordering, io::Result}; +use std::io::Result; -use crate::Input; +use crate::{Input, Integer}; -pub fn main((order, pages): &Input) -> Result { - Ok(pages - .iter() - .filter(|pages| { - let orders = order - .iter() - .filter(|(l, r)| pages.contains(l) && pages.contains(r)) - .collect::>(); - let mut ordered = pages.to_owned().to_owned(); - ordered.sort_by(|a, b| { - if let Some(order) = orders - .iter() - .find(|(l, r)| (l == a && r == b) || (l == b && r == a)) - { - if order.0 == *a { - Ordering::Less - } else { - Ordering::Greater - } - } else { - Ordering::Equal - } - }); - - ordered.eq(*pages) - }) - .fold(0, |sum, pages| { - let middle = (pages.len() as i8 / 2).abs(); - sum + *pages.get(middle as usize).unwrap() as usize - })) +pub fn main(input: &Input) -> Result { + Ok(input + .seeds + .clone() + .into_iter() + .map(|seed| Input::get_location(&input, seed)) + .min() + .unwrap()) } #[cfg(test)] @@ -40,11 +18,11 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = include_str!("../../input/day_05_example"); + const EXAMPLE_DATA: &'static str = include_str!("../../input/day_05_example"); #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 143); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 35); Ok(()) } } diff --git a/day_05/src/part_02.rs b/day_05/src/part_02.rs index 7182ec7..db534b4 100644 --- a/day_05/src/part_02.rs +++ b/day_05/src/part_02.rs @@ -1,54 +1,52 @@ -use std::{cmp::Ordering, io::Result}; - -use crate::Input; - -pub fn main((order, pages): &Input) -> Result { - Ok(pages - .iter() - .filter_map(|pages| { - let orders = order - .iter() - .filter(|(l, r)| pages.contains(l) && pages.contains(r)) - .collect::>(); - let mut ordered = pages.to_owned().to_owned(); - ordered.sort_by(|a, b| { - if let Some(order) = orders - .iter() - .find(|(l, r)| (l == a && r == b) || (l == b && r == a)) - { - if order.0 == *a { - Ordering::Less - } else { - Ordering::Greater - } - } else { - Ordering::Equal +use std::{io::Result, thread}; + +use crate::{Input, Integer}; + +pub fn main(input: &Input) -> Result { + let input = input.clone(); + let seeds = input.seeds.to_owned(); + + Ok(thread::scope(move |s| -> _ { + let chunks = seeds.chunks(2); + + let to_check = chunks.fold(vec![], |mut chunks, chunk| { + let (start, length) = (chunk[0], chunk[1]); + chunks.extend(Vec::from_iter((start..(start + length)).into_iter())); + chunks + }); + + let ranged_chunks = to_check.chunks(100_000); + let mut threads = vec![]; + + for chunks in ranged_chunks { + let chunks = chunks.to_owned(); + let input = input.to_owned(); + threads.push(s.spawn(move || -> _ { + let mut min = Integer::MAX; + let value = chunks.clone(); + let input = input.to_owned(); + for seed in value { + min = min.min(Input::get_location(&input, seed)); } - }); - - if ordered.eq(pages) { - None - } else { - Some(ordered.to_owned()) - } - }) - .fold(0, |sum, pages| { - let middle = (pages.len() as i8 / 2).abs(); - sum + *pages.get(middle as usize).unwrap() as usize - })) + min + })); + } + + let threads = threads.into_iter().map(|t| t.join().unwrap()); + threads.min().unwrap() + })) } #[cfg(test)] mod tests { - use crate::parse_input; - use super::*; + use crate::parse_input; - const EXAMPLE_DATA: &str = include_str!("../../input/day_05_example"); + const EXAMPLE_DATA: &'static str = include_str!("../../input/day_05_example"); #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 123); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 46); Ok(()) } } diff --git a/day_06/Cargo.toml b/day_06/Cargo.toml index a22aa97..209de00 100644 --- a/day_06/Cargo.toml +++ b/day_06/Cargo.toml @@ -2,14 +2,10 @@ name = "day_06" version = "0.1.0" edition = "2021" -authors = ["Dennis Pettersson "] [lib] doctest = false -[[bin]] -name = "day_06" - # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/day_06/src/lib.rs b/day_06/src/lib.rs index eb3fff3..a341004 100644 --- a/day_06/src/lib.rs +++ b/day_06/src/lib.rs @@ -1,76 +1,48 @@ pub mod part_01; pub mod part_02; -pub mod square; -use std::collections::BTreeMap; +pub type Integer = u128; -use square::{ - Guard, - Square::{self, Floor, Obstruction}, -}; - -pub type Pos = isize; -pub type Map = BTreeMap<(Pos, Pos), Square>; -pub type Input = (Guard, Map); +pub type Input = Vec<(Integer, Integer)>; pub fn parse_input(input: &str) -> Input { - let mut current_position = (0, 0); - let map = input + let parse_numbers = |s: &str| -> Vec { + s.split(':').collect::>()[1] + .trim() + .to_owned() + .split(' ') + .filter(|s| !s.is_empty()) + .map(|string| string.parse().unwrap()) + .collect() + }; + + let lines = input + .trim_start() + .trim_end() .lines() .map(str::trim) - .filter(|string| !string.is_empty()) - .map(str::to_owned) - .enumerate() - .flat_map(|(y, string)| { - string - .chars() - .enumerate() - .map(|(x, square)| { - let x_y = (x as Pos, y as Pos); - ( - x_y, - match square { - '#' => Obstruction, - '^' => { - current_position = x_y; - Floor - } - _ => Floor, - }, - ) - }) - .collect::>() - }) - .collect(); + .filter(|line| !line.is_empty()) + .collect::>(); + + let (times, distances) = ( + parse_numbers(lines.get(0).unwrap()), + parse_numbers(lines.get(1).unwrap()), + ); - (Guard::new(current_position), map) + times.into_iter().zip(distances.into_iter()).collect() } #[cfg(test)] mod tests { - use square::Guard; - use super::*; - const EXAMPLE_DATA: &str = " - .^ - #. - "; + const EXAMPLE_DATA: &'static str = include_str!("../../input/day_06_example"); #[test] - fn it_parses_example() { - let expected: Input = ( - Guard::new((1, 0)), - vec![ - ((0, 0), Floor), - ((1, 0), Floor), - ((0, 1), Obstruction), - ((1, 1), Floor), - ] - .into_iter() - .collect(), + fn it_parses_input() { + assert_eq!( + parse_input(&EXAMPLE_DATA), + vec![(7, 9), (15, 40), (30, 200)] ); - - assert_eq!(parse_input(EXAMPLE_DATA), expected); } } diff --git a/day_06/src/part_01.rs b/day_06/src/part_01.rs index 7120c27..a6ee9c8 100644 --- a/day_06/src/part_01.rs +++ b/day_06/src/part_01.rs @@ -1,26 +1,23 @@ -use std::{collections::HashSet, io::Result}; - -use crate::{square::Square::Obstruction, Input}; - -pub fn main((guard, map): &Input) -> Result { - let mut guard = guard.to_owned(); - let mut visited = HashSet::from([guard.position]); - - loop { - let next = guard.next(); - if let Some(square) = map.get(&next) { - if square == &Obstruction { - guard.turn(); - } else { - guard.set_position(next); - visited.insert(next); - } - } else { - break; - } - } - - Ok(visited.len()) +use std::io::Result; + +use crate::Input; + +pub fn main(input: &Input) -> Result { + Ok(input + .to_owned() + .into_iter() + .map(|(time, distance)| { + (0..=time) + .into_iter() + .filter(|warmup| { + let runtime = time - warmup; + let total_time = runtime * warmup; + total_time > distance + }) + .collect::>() + .len() + }) + .product()) } #[cfg(test)] @@ -29,11 +26,11 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = include_str!("../../input/day_06_example"); + const EXAMPLE_DATA: &'static str = include_str!("../../input/day_06_example"); #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 41); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 288); Ok(()) } } diff --git a/day_06/src/part_02.rs b/day_06/src/part_02.rs index aff2846..fbfd201 100644 --- a/day_06/src/part_02.rs +++ b/day_06/src/part_02.rs @@ -1,49 +1,33 @@ -use std::{collections::HashSet, io::Result, thread}; - -use crate::{ - square::{Guard, Square::*}, - Input, -}; - -pub fn main((guard, map): &Input) -> Result { - let start_position = guard.position; - Ok(map - .iter() - .filter_map(|(pos, square)| { - if pos != &start_position && square == &Floor { - Some(pos.to_owned()) - } else { - None - } +use std::io::Result; + +use crate::Input; + +pub fn main(input: &Input) -> Result { + let (time, distance) = input.to_owned().into_iter().fold( + ("".to_owned(), "".to_owned()), + |mut n, (time, distance)| { + n.0 = format!("{}{}", n.0, time); + n.1 = format!("{}{}", n.1, distance); + n + }, + ); + + let (time, distance) = ( + time.parse::().unwrap(), + distance.parse::().unwrap(), + ); + + let n_times = (0..=time) + .into_iter() + .filter(|warmup| { + let runtime = time - warmup; + let total_time = runtime * warmup; + total_time > distance }) - .map(|pos| { - let mut map = map.to_owned(); - let mut guard = Guard::new(start_position); - let mut visited = HashSet::from([guard.current()]); - - map.insert(pos, Obstruction); - - thread::spawn(move || loop { - let next = guard.next(); - if let Some(square) = map.get(&next) { - let key = (next, guard.facing); - if visited.contains(&key) { - return true; - } else if square == &Obstruction { - guard.turn(); - } else { - guard.set_position(next); - visited.insert(key); - } - } else { - return false; - } - }) - }) - .map(|handle| handle.join().unwrap()) - .filter(|loop_encountered| *loop_encountered) .collect::>() - .len()) + .len(); + + Ok(n_times) } #[cfg(test)] @@ -52,11 +36,11 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = include_str!("../../input/day_06_example"); + const EXAMPLE_DATA: &'static str = include_str!("../../input/day_06_example"); #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 6); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 71503); Ok(()) } } diff --git a/day_06/src/square.rs b/day_06/src/square.rs deleted file mode 100644 index ea2b709..0000000 --- a/day_06/src/square.rs +++ /dev/null @@ -1,59 +0,0 @@ -use crate::Pos; - -#[derive(Clone, Copy, Eq, PartialEq, Hash, Debug)] -pub enum Square { - Floor, - Obstruction, -} - -#[derive(Clone, Copy, Eq, PartialEq, Hash, Debug)] -pub enum Facing { - Up, - Right, - Down, - Left, -} - -use Facing::*; - -#[derive(Clone, Copy, Eq, PartialEq, Hash, Debug)] -pub struct Guard { - pub position: (Pos, Pos), - pub facing: Facing, -} - -impl Guard { - pub fn new(position: (Pos, Pos)) -> Self { - Self { - position, - facing: Up, - } - } - - pub fn current(&self) -> ((Pos, Pos), Facing) { - (self.position, self.facing) - } - - pub fn set_position(&mut self, position: (Pos, Pos)) { - self.position = position; - } - - pub fn turn(&mut self) { - self.facing = match self.facing { - Up => Right, - Right => Down, - Down => Left, - Left => Up, - }; - } - - pub fn next(&self) -> (Pos, Pos) { - let (x, y) = self.position; - match self.facing { - Up => (x, y - 1), - Right => (x + 1, y), - Down => (x, y + 1), - Left => (x - 1, y), - } - } -} diff --git a/day_07/Cargo.toml b/day_07/Cargo.toml index 8dbc02a..f2d1844 100644 --- a/day_07/Cargo.toml +++ b/day_07/Cargo.toml @@ -2,14 +2,10 @@ name = "day_07" version = "0.1.0" edition = "2021" -authors = ["Dennis Pettersson "] [lib] doctest = false -[[bin]] -name = "day_07" - # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] diff --git a/day_07/src/hand.rs b/day_07/src/hand.rs new file mode 100644 index 0000000..1536033 --- /dev/null +++ b/day_07/src/hand.rs @@ -0,0 +1,263 @@ +use std::{ + cmp::Ordering::{self, *}, + collections::{BTreeMap, BTreeSet}, +}; + +use crate::Hand; + +#[derive(Debug, Clone, Eq, PartialEq)] +enum HandOrder { + FiveOfAKind = 0, + FourOfAKind = 1, + FullHouse = 2, + ThreeOfAKind = 3, + TwoPair = 4, + OnePair = 5, + HighCard = 6, +} + +use HandOrder::*; + +impl HandOrder { + fn char_to_card(c: char, joker_rule: bool) -> u8 { + let joker_or_knight = if joker_rule { 1 } else { 11 }; + match c { + 'A' => 14, + 'K' => 13, + 'Q' => 12, + 'J' => joker_or_knight, + 'T' => 10, + n => n.to_digit(10).unwrap() as u8, + } + } + + fn from_chars(hand: &Hand, joker_rule: bool) -> Vec { + hand.to_owned() + .into_iter() + .map(|c| Self::char_to_card(c, joker_rule)) + .collect::>() + } + + fn to_map(hand: Vec) -> BTreeMap { + hand.into_iter().fold(BTreeMap::new(), |mut map, card| { + match map.get_mut(&card) { + Some(v) => *v += 1, + _ => { + map.insert(card, 1); + } + }; + map + }) + } + + pub fn from_hand(hand: &Hand) -> Self { + let unique = BTreeSet::from_iter(hand.to_owned().into_iter()); + if unique.len() == 1 { + return FiveOfAKind; + } + + let map = Self::to_map( + hand.to_owned() + .into_iter() + .map(|c| Self::char_to_card(c, false)) + .collect(), + ); + + if map.values().any(|v| v == &4) { + return FourOfAKind; + } + + if map.values().any(|v| v == &3) && map.values().any(|v| v == &2) { + return FullHouse; + } + + if map.values().any(|v| v == &3) { + return ThreeOfAKind; + } + + if map.values().filter(|v| v == &&2).collect::>().len() == 2 { + return TwoPair; + } + + if map.values().any(|v| v == &2) { + return OnePair; + } + + HighCard + } + + pub fn from_hand_with_joker_rule(hand: &Hand) -> Self { + let mut jokers = 0; + let map = Self::to_map( + hand.to_owned() + .into_iter() + .filter(|c| { + if c == &'J' { + jokers += 1; + return false; + } + true + }) + .map(|c| Self::char_to_card(c, true)) + .collect(), + ); + + if jokers == 5 || map.values().any(|v| (*v as u8 + jokers) == 5) { + return FiveOfAKind; + } + + if map.values().any(|v| (*v as u8 + jokers) >= 4) { + return FourOfAKind; + } + + let threes = map.values().filter(|v| v == &&3).collect::>(); + let twos = map.values().filter(|v| v == &&2).collect::>(); + + if !threes.is_empty() && !twos.is_empty() { + return FullHouse; + } + + if threes.is_empty() && twos.len() == 2 && jokers == 1 { + return FullHouse; + } + + if jokers == 2 { + return ThreeOfAKind; + } + + if !threes.is_empty() || (!twos.is_empty() && jokers >= 1) { + return ThreeOfAKind; + } + + if map.values().filter(|v| v == &&2).collect::>().len() == 2 { + return TwoPair; + } + + if map.values().any(|v| (*v as u8 + jokers) >= 2) { + return OnePair; + } + + HighCard + } +} + +fn rank(a_rank: HandOrder, b_rank: HandOrder, a: &Hand, b: &Hand, joker_rule: bool) -> Ordering { + let to_vec = HandOrder::from_chars; + match (b_rank as u8).cmp(&(a_rank as u8)) { + Equal => { + let a = to_vec(a, joker_rule); + let b = to_vec(b, joker_rule); + for (i, c) in a.into_iter().enumerate() { + match c.cmp(b.get(i).unwrap()) { + Equal => continue, + order => return order, + } + } + Equal + } + order => order, + } +} + +pub fn sort_hand(a: &Hand, b: &Hand) -> Ordering { + let parse = HandOrder::from_hand; + rank(parse(a), parse(b), a, b, false) +} + +pub fn sort_hand_with_joker_rule(a: &Hand, b: &Hand) -> Ordering { + let parse = HandOrder::from_hand_with_joker_rule; + rank(parse(a), parse(b), a, b, true) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn c(input: &str) -> Vec { + input.chars().collect() + } + + #[test] + fn it_can_parse_hands() { + let f = HandOrder::from_hand; + let j = HandOrder::from_hand_with_joker_rule; + assert_eq!(f(&c("22222")), FiveOfAKind); + assert_eq!(j(&c("22222")), FiveOfAKind); + assert_eq!(f(&c("22223")), FourOfAKind); + assert_eq!(j(&c("22223")), FourOfAKind); + assert_eq!(f(&c("22233")), FullHouse); + assert_eq!(j(&c("22233")), FullHouse); + assert_eq!(f(&c("22234")), ThreeOfAKind); + assert_eq!(j(&c("22234")), ThreeOfAKind); + assert_eq!(f(&c("22334")), TwoPair); + assert_eq!(j(&c("22334")), TwoPair); + assert_eq!(f(&c("22345")), OnePair); + assert_eq!(j(&c("22345")), OnePair); + assert_eq!(f(&c("23457")), HighCard); + assert_eq!(j(&c("23457")), HighCard); + } + + #[test] + fn it_can_parse_hands_with_joker_rule() { + let f = HandOrder::from_hand_with_joker_rule; + assert_eq!(f(&c("JJJJJ")), FiveOfAKind); + assert_eq!(f(&c("22JJJ")), FiveOfAKind); + assert_eq!(f(&c("222JJ")), FiveOfAKind); + assert_eq!(f(&c("2222J")), FiveOfAKind); + assert_eq!(f(&c("222J3")), FourOfAKind); + assert_eq!(f(&c("22JJ3")), FourOfAKind); + assert_eq!(f(&c("2JJJ3")), FourOfAKind); + assert_eq!(f(&c("22J33")), FullHouse); + assert_eq!(f(&c("22J34")), ThreeOfAKind); + assert_eq!(f(&c("2345J")), OnePair); + assert_eq!(f(&c("23457")), HighCard); + } + + #[test] + fn it_orders_equal_hands() { + let f = sort_hand; + assert_eq!(f(&c("22222"), &c("22222")), Equal); + assert_eq!(f(&c("22223"), &c("22224")), Less); + assert_eq!(f(&c("22224"), &c("22223")), Greater); + assert_eq!(f(&c("22233"), &c("22244")), Less); + assert_eq!(f(&c("22244"), &c("22233")), Greater); + assert_eq!(f(&c("22333"), &c("22444")), Less); + assert_eq!(f(&c("22444"), &c("22333")), Greater); + assert_eq!(f(&c("23333"), &c("24444")), Less); + assert_eq!(f(&c("24444"), &c("23333")), Greater); + } + + #[test] + fn it_orders_equal_hands_using_joker_rule() { + let f = sort_hand_with_joker_rule; + assert_eq!(f(&c("J3333"), &c("22222")), Less); + assert_eq!(f(&c("J2222"), &c("J2222")), Equal); + assert_eq!(f(&c("222J4"), &c("22223")), Less); + assert_eq!(f(&c("222J3"), &c("222J3")), Equal); + assert_eq!(f(&c("2J444"), &c("23333")), Less); + assert_eq!(f(&c("2J444"), &c("2J444")), Equal); + assert_eq!(f(&c("JKKK2"), &c("QQQQ2")), Less); + } + + #[test] + fn it_orders() { + let map = vec![ + c("22222"), // FiveOfAKind + c("23333"), // FourOfAKind + c("22333"), // FullHouse + c("22234"), // ThreeOfAKind + c("22334"), // TwoPair + c("22345"), // OnePair + c("23457"), // HighCard + ]; + + let inputs = map.clone(); + + for (i, input) in inputs.into_iter().enumerate() { + for (j, compare) in map.clone().into_iter().enumerate() { + assert_eq!(sort_hand(&input, &compare), j.cmp(&i)); + assert_eq!(sort_hand_with_joker_rule(&input, &compare), j.cmp(&i)); + } + } + } +} diff --git a/day_07/src/lib.rs b/day_07/src/lib.rs index 8c476ab..2690816 100644 --- a/day_07/src/lib.rs +++ b/day_07/src/lib.rs @@ -1,43 +1,51 @@ +use std::cmp::Ordering; + +pub mod hand; pub mod part_01; pub mod part_02; -pub type Number = i64; -pub type Input = Vec<(Number, Vec)>; +pub type Hand = Vec; +type Input = Vec<(Hand, u128)>; pub fn parse_input(input: &str) -> Input { input + .trim_start() + .trim_end() .lines() .map(str::trim) - .filter(|string| !string.is_empty()) - .map(str::to_owned) .map(|line| { - let mut line = line.split(": "); - ( - line.next().unwrap().parse().unwrap(), - line.next() - .unwrap() - .split(' ') - .map(|part| part.parse().unwrap()) - .collect(), - ) + let line_split = line.split(' ').collect::>(); + let cards = line_split[0].chars().collect(); + let bid = line_split[1].parse().unwrap(); + (cards, bid) }) .collect() } +pub fn sum(input: &Input, sort: Box Ordering>) -> u128 { + let mut input = input.to_owned(); + input.sort_by(|(a_cards, _), (b_cards, _)| sort(&a_cards, &b_cards)); + let iter = input.into_iter().enumerate(); + iter.map(|(i, (_, bid))| bid * ((i as u128) + 1)).sum() +} + #[cfg(test)] mod tests { use super::*; - const EXAMPLE_DATA: &str = " - 190: 10 19 - 3267: 81 40 27 + const EXAMPLE_DATA: &'static str = " + 32T3K 765 + T55J5 684 "; #[test] - fn it_parses_example() { + fn it_parses_input() { assert_eq!( - parse_input(EXAMPLE_DATA), - vec![(190, vec![10, 19]), (3267, vec![81, 40, 27]),] + parse_input(&EXAMPLE_DATA), + vec![ + (vec!['3', '2', 'T', '3', 'K'], 765), + (vec!['T', '5', '5', 'J', '5'], 684) + ] ); } } diff --git a/day_07/src/part_01.rs b/day_07/src/part_01.rs index 5433e25..9fd724c 100644 --- a/day_07/src/part_01.rs +++ b/day_07/src/part_01.rs @@ -1,33 +1,9 @@ -use std::{io::Result, mem}; +use std::io::Result; -use crate::{Input, Number}; +use crate::{hand::sort_hand, sum, Input}; -pub fn main(input: &Input) -> Result { - Ok(input - .iter() - .filter_map(|(test_value, operators)| { - let mut operators = operators.iter().to_owned(); - let mut calibrations = vec![operators.next().unwrap().to_owned()]; - for operator in operators { - let new_calibrations = calibrations - .iter() - .flat_map(|calibration| vec![calibration + operator, calibration * operator]) - .collect(); - let _ = mem::replace(&mut calibrations, new_calibrations); - } - - let calibrations = calibrations - .iter() - .filter(|result| test_value == *result) - .collect::>(); - - if calibrations.is_empty() { - None - } else { - Some(test_value) - } - }) - .sum()) +pub fn main(input: &Input) -> Result { + Ok(sum(input, Box::new(sort_hand))) } #[cfg(test)] @@ -36,11 +12,11 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = include_str!("../../input/day_07_example"); + const EXAMPLE_DATA: &'static str = include_str!("../../input/day_07_example"); #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 3749); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 6440); Ok(()) } } diff --git a/day_07/src/part_02.rs b/day_07/src/part_02.rs index 2cbd42f..b28a172 100644 --- a/day_07/src/part_02.rs +++ b/day_07/src/part_02.rs @@ -1,39 +1,9 @@ -use std::{io::Result, mem}; +use std::io::Result; -use crate::{Input, Number}; +use crate::{hand::sort_hand_with_joker_rule, sum, Input}; -pub fn main(input: &Input) -> Result { - Ok(input - .iter() - .filter_map(|(test_value, operators)| { - let mut operators = operators.iter().to_owned(); - let mut calibrations = vec![operators.next().unwrap().to_owned()]; - for operator in operators { - let new_calibrations = calibrations - .iter() - .flat_map(|calibration| { - vec![ - calibration + operator, - calibration * operator, - format!("{calibration}{operator}").parse().unwrap(), - ] - }) - .collect(); - let _ = mem::replace(&mut calibrations, new_calibrations); - } - - let calibrations = calibrations - .iter() - .filter(|result| test_value == *result) - .collect::>(); - - if calibrations.is_empty() { - None - } else { - Some(test_value) - } - }) - .sum()) +pub fn main(input: &Input) -> Result { + Ok(sum(input, Box::new(sort_hand_with_joker_rule))) } #[cfg(test)] @@ -42,11 +12,11 @@ mod tests { use super::*; - const EXAMPLE_DATA: &str = include_str!("../../input/day_07_example"); + const EXAMPLE_DATA: &'static str = include_str!("../../input/day_07_example"); #[test] fn it_gets_the_example_correct() -> Result<()> { - assert_eq!(main(&parse_input(EXAMPLE_DATA))?, 11387); + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 5905); Ok(()) } } diff --git a/day_08/Cargo.toml b/day_08/Cargo.toml new file mode 100644 index 0000000..ed7dc40 --- /dev/null +++ b/day_08/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "day_08" +version = "0.1.0" +edition = "2021" + +[lib] +doctest = false + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day_08/src/lib.rs b/day_08/src/lib.rs new file mode 100644 index 0000000..6c12674 --- /dev/null +++ b/day_08/src/lib.rs @@ -0,0 +1,138 @@ +use std::collections::HashMap; + +pub mod math; +pub mod part_01; +pub mod part_02; + +#[derive(Debug, Clone, Eq, PartialEq)] +pub enum Direction { + Left = 0, + Right, +} + +pub type Integer = u64; + +#[derive(Debug, Clone, Eq, PartialEq)] +pub struct Input { + moves: Vec, + nodes: Vec<(String, (String, String))>, + indices: HashMap, +} + +impl Input { + pub fn solve(input: &Input, start_index: usize) -> Integer { + let nodes = input.nodes.to_owned(); + let mut current = nodes.get(start_index).unwrap().to_owned(); + + let mut steps = 0; + 'main: loop { + for direction in input.moves.clone() { + steps += 1; + + let next_index = match direction { + Direction::Left => &*current.1 .0, + Direction::Right => &*current.1 .1, + }; + + let next_index = *input.indices.get(next_index).unwrap(); + let next = nodes.get(next_index).unwrap().to_owned(); + + if next.0.ends_with('Z') { + break 'main; + } + + current = next; + } + } + + steps + } +} + +pub fn parse_input(input: &str) -> Input { + let rows = input + .trim_start() + .trim_end() + .lines() + .map(str::trim) + .filter(|s| !s.is_empty()) + .map(|s| s.to_owned()) + .collect::>(); + + let header = rows.get(0).unwrap(); + + let moves = header + .chars() + .map(|c| match c { + 'L' => Direction::Left, + 'R' => Direction::Right, + _ => panic!("wrong direction?! {c}"), + }) + .collect::>(); + + let nodes = rows + .into_iter() + .skip(1) + .map(|row| { + let split = row.split('=').collect::>(); + let index = split[0].trim().to_owned(); + let nodes = split[1].trim().to_owned(); + let nodes = nodes.replace('(', ""); + let nodes = nodes.replace(')', ""); + + let nodes = nodes.split(", ").collect::>(); + let left = nodes[0].to_owned(); + let right = nodes[1].to_owned(); + (index, (left, right)) + }) + .collect::>(); + + let indices = HashMap::from_iter( + nodes + .clone() + .into_iter() + .enumerate() + .map(|(index, n)| (n.0.to_owned(), index)), + ); + + Input { + moves, + nodes, + indices, + } +} + +#[cfg(test)] +mod tests { + use super::*; + + use Direction::*; + + const EXAMPLE_DATA: &'static str = " + LLR + + AAA = (BBB, BBB) + BBB = (AAA, ZZZ) + ZZZ = (ZZZ, ZZZ) + "; + + #[test] + fn it_parses_input() { + assert_eq!( + parse_input(&EXAMPLE_DATA), + Input { + moves: vec![Left, Left, Right], + nodes: vec![ + ("AAA".to_owned(), ("BBB".to_owned(), "BBB".to_owned())), + ("BBB".to_owned(), ("AAA".to_owned(), "ZZZ".to_owned())), + ("ZZZ".to_owned(), ("ZZZ".to_owned(), "ZZZ".to_owned())), + ], + indices: HashMap::from([ + ("AAA".to_owned(), 0), + ("BBB".to_owned(), 1), + ("ZZZ".to_owned(), 2), + ]), + } + ); + } +} diff --git a/day_08/src/main.rs b/day_08/src/main.rs new file mode 100644 index 0000000..ffd55f5 --- /dev/null +++ b/day_08/src/main.rs @@ -0,0 +1,12 @@ +use std::io::Result; + +use day_08::{parse_input, part_01::main as part_01, part_02::main as part_02}; + +fn main() -> Result<()> { + let input = parse_input(include_str!("../../input/day_08")); + + println!("part_01: {:?}", part_01(&input)?); + println!("part_02: {:?}", part_02(&input)?); + + Ok(()) +} diff --git a/day_08/src/math.rs b/day_08/src/math.rs new file mode 100644 index 0000000..85d7387 --- /dev/null +++ b/day_08/src/math.rs @@ -0,0 +1,38 @@ +use std::{ + mem, + ops::{Div, Mul, Rem, Sub}, +}; + +pub fn lcm< + T: Mul + Sub + Div + Rem + Ord + Eq + Copy, +>( + a: T, + b: T, +) -> T { + a * b / gcd(a, b) +} + +pub fn gcd< + T: Mul + Sub + Div + Rem + Ord + Eq + Copy, +>( + a: T, + b: T, +) -> T { + let mut max = a; + let mut min = b; + + if min > max { + mem::swap(&mut max, &mut min); + } + + loop { + let result = max % min; + let zero = result - result; + if result == zero { + return min; + } + + max = min; + min = result; + } +} diff --git a/day_08/src/part_01.rs b/day_08/src/part_01.rs new file mode 100644 index 0000000..31a0d21 --- /dev/null +++ b/day_08/src/part_01.rs @@ -0,0 +1,36 @@ +use std::io::Result; + +use crate::{Input, Integer}; + +pub fn main(input: &Input) -> Result { + Ok(Input::solve(input, *input.indices.get("AAA").unwrap())) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + LLR + + AAA = (BBB, BBB) + BBB = (AAA, ZZZ) + ZZZ = (ZZZ, ZZZ) + "; + + const LONGER_EXAMPLE_DATA: &'static str = include_str!("../../input/day_08_example"); + + #[test] + fn it_gets_the_short_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 6); + Ok(()) + } + + #[test] + fn it_gets_the_longer_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&LONGER_EXAMPLE_DATA))?, 2); + Ok(()) + } +} diff --git a/day_08/src/part_02.rs b/day_08/src/part_02.rs new file mode 100644 index 0000000..82651cb --- /dev/null +++ b/day_08/src/part_02.rs @@ -0,0 +1,40 @@ +use std::io::Result; + +use crate::{math::lcm, Input, Integer}; + +pub fn main(input: &Input) -> Result { + Ok(input + .indices + .keys() + .into_iter() + .filter(|k| k.ends_with('A')) + .map(|k| *input.indices.get(k).unwrap()) + .map(|start_index| Input::solve(input, start_index)) + .fold(1, |acc, n| lcm(acc, n))) +} + +#[cfg(test)] +mod tests { + use crate::parse_input; + + use super::*; + + const EXAMPLE_DATA: &'static str = " + LR + + 11A = (11B, XXX) + 11B = (XXX, 11Z) + 11Z = (11B, XXX) + 22A = (22B, XXX) + 22B = (22C, 22C) + 22C = (22Z, 22Z) + 22Z = (22B, 22B) + XXX = (XXX, XXX) + "; + + #[test] + fn it_gets_the_example_correct() -> Result<()> { + assert_eq!(main(&parse_input(&EXAMPLE_DATA))?, 6); + Ok(()) + } +} diff --git a/input/day_01 b/input/day_01 index fe669c4..e0e1244 100644 --- a/input/day_01 +++ b/input/day_01 @@ -1,1000 +1,1000 @@ -56208 95668 -52621 74203 -95252 33335 -79799 26047 -88005 37435 -61887 93836 -48454 95821 -62543 40154 -68631 73255 -76702 79056 -70838 34466 -18680 46550 -51787 55754 -37646 48228 -85603 29306 -37768 75105 -90135 21612 -35469 74470 -21245 49622 -18699 49193 -21078 61415 -10873 95775 -91781 60483 -56840 42667 -81094 12954 -71762 61434 -64670 22232 -33536 77827 -24607 75889 -37829 78341 -36203 82413 -31747 95700 -22170 79056 -28403 89045 -82265 37081 -10713 74405 -76191 43205 -99737 87526 -75120 72550 -82607 40971 -81396 47693 -11533 39908 -21138 40655 -97567 42427 -11179 89506 -19548 50064 -43080 93836 -90155 37743 -21664 58398 -90621 89990 -52392 94519 -82246 62358 -14857 73475 -56878 69951 -48921 56211 -49545 83117 -84329 12955 -71390 48442 -27461 28450 -94969 86731 -32344 14652 -89304 37435 -61343 61730 -38097 85797 -21480 31806 -79330 58398 -29803 73475 -83903 58398 -82961 37081 -19048 16800 -46338 45021 -65120 97811 -94574 18471 -43129 37435 -80135 20553 -13860 30053 -23228 37081 -75373 99812 -72438 43358 -62029 81330 -46550 11995 -86921 92694 -34790 20959 -98862 85030 -82648 53872 -23156 43559 -86507 43025 -78535 78226 -86410 58158 -23699 18312 -43083 25346 -69925 11280 -93761 82246 -31314 38097 -31775 47098 -50720 24867 -59647 66769 -95275 17550 -12756 82744 -93464 99949 -50801 55400 -12063 60335 -10930 12955 -96820 63957 -51672 40727 -35874 40727 -23608 79584 -94056 80438 -46387 50916 -34304 37081 -83311 93836 -25295 43512 -17263 63763 -70673 30357 -68716 11280 -52238 27269 -99670 49467 -50516 93196 -84006 78719 -61795 33177 -43228 87640 -77557 99949 -98130 64716 -96939 61786 -95849 79056 -16209 89990 -65420 44437 -94486 11280 -66223 99949 -43524 86363 -62859 61786 -90225 84321 -88954 98335 -75285 17907 -38457 73475 -42857 24650 -10995 32077 -91376 57464 -77255 90595 -89361 86284 -59270 46550 -71756 57794 -87966 17022 -58398 55419 -96091 37435 -17150 87526 -39389 12196 -76990 67087 -61924 34998 -95291 73475 -50147 84321 -53391 84401 -36506 93836 -52291 27344 -12731 50538 -60534 89078 -79539 10368 -56787 99949 -54143 40727 -98095 75373 -30744 52795 -12926 38097 -51613 50801 -36198 65515 -28401 27065 -56046 78440 -70329 71912 -95114 36977 -60740 47082 -56549 11280 -57725 26874 -56639 89045 -79567 29741 -94022 76570 -96358 90832 -12302 95795 -76023 82246 -15612 97271 -17185 90595 -46709 45432 -13154 46550 -88519 43458 -32560 90478 -65035 71620 -92462 61237 -69416 79584 -35688 21793 -28438 39240 -82325 27813 -78531 84321 -24899 36148 -85012 89990 -23508 67634 -66264 60161 -66503 38477 -15986 91668 -79146 63922 -37435 85030 -62752 85977 -26512 81606 -40841 82246 -46251 73475 -34026 19249 -50440 41947 -76774 11280 -22007 60880 -94909 87526 -58404 84321 -75320 18175 -76222 89990 -91724 15431 -48733 37574 -36629 12879 -58515 21379 -12471 45395 -37709 79056 -14932 47109 -98634 80670 -97279 38097 -96785 84321 -12591 89556 -36934 61786 -41593 32076 -78262 38097 -60695 50941 -79770 93836 -41948 58398 -84058 63922 -35466 34206 -99842 86919 -57631 53042 -22167 33022 -61786 68147 -69070 89045 -30553 48228 -96972 46550 -49251 79584 -50994 75840 -91178 59794 -29903 18646 -92270 63922 -50470 19887 -68328 87526 -87788 29501 -56579 59667 -23154 37081 -29012 69142 -24751 89990 -12191 38097 -14613 62616 -88157 75476 -78319 74115 -57573 37081 -49634 88296 -80779 23920 -58363 45944 -38626 23891 -44119 43477 -87012 92308 -94285 19887 -47957 58398 -98671 73475 -80957 90536 -75724 97254 -55207 34449 -26929 46570 -88177 67524 -42538 87526 -60062 34610 -31875 89453 -84401 51230 -30370 37435 -77609 26508 -54400 89045 -16998 76877 -53993 49621 -80345 11280 -33089 83000 -59754 54338 -10070 58398 -79056 47218 -38998 94596 -78946 93836 -17022 58398 -26488 96876 -29505 48228 -87585 84630 -11881 50840 -34065 89196 -92780 57959 -84213 19887 -89873 64164 -88432 76456 -27932 48228 -75295 51234 -87532 48228 -89045 79056 -90024 40848 -83717 70022 -44095 35548 -61389 31672 -45153 80712 -53642 46743 -79895 27572 -62353 63922 -31718 43553 -47638 16679 -68079 37435 -99980 82246 -28989 53198 -55315 72011 -39285 57048 -63939 79056 -79274 44485 -67372 46550 -37081 89990 -90006 46550 -78226 14583 -49740 39212 -57801 58398 -99700 89990 -20514 78226 -74207 90650 -30895 37435 -45690 48228 -59599 95569 -36570 43919 -27098 46550 -23232 58398 -64885 62096 -85030 17022 -91242 68818 -32735 79056 -84321 35330 -15556 73475 -65535 20996 -46287 47868 -72870 88715 -26102 28963 -53627 60988 -24886 17144 -96189 76191 -24759 45636 -98950 93836 -47061 90595 -74001 11280 -91701 50701 -35581 79056 -55474 50020 -39955 95451 -16183 78226 -76584 61285 -22474 97165 -23396 37435 -71483 50801 -94355 26883 -16187 82246 -48892 19971 -78206 44272 -90897 53164 -60606 54389 -15976 30489 -64132 87526 -30030 56758 -58524 78226 -37832 38097 -78244 99949 -10124 28222 -45015 95384 -98771 10124 -69753 82069 -71588 56590 -39250 55040 -60302 75373 -44720 75373 -49715 89857 -17921 63358 -20595 41212 -71304 86278 -52931 42672 -12734 79056 -96838 51840 -69950 91553 -20134 46460 -44631 57523 -21834 82246 -87705 67785 -67003 90674 -57615 46550 -24713 27095 -92252 37081 -69531 40818 -95550 98970 -69979 52208 -86183 56378 -97271 66222 -34116 56073 -61862 26938 -69230 60312 -39386 73475 -91297 27731 -91115 71904 -65373 32930 -22264 84534 -42510 24914 -31022 11750 -79868 79584 -52225 11280 -81993 22693 -90622 29200 -10788 36850 -19596 74840 -18745 89990 -95360 48049 -37314 40727 -43291 88941 -16658 42023 -42096 91462 -35810 67282 -60361 64835 -92458 79056 -75435 68039 -28125 44179 -59855 53140 -77935 17022 -54641 63922 -38395 79056 -57487 60560 -28437 42839 -70988 11280 -71731 44391 -71274 97823 -26290 50801 -44854 28186 -48594 90871 -77287 73475 -65614 84401 -15083 12542 -46738 84321 -97269 92183 -70388 79584 -43702 50801 -68959 40727 -85936 67896 -66276 61786 -46788 79046 -75138 51794 -67218 16350 -84121 37435 -85923 46550 -27696 64738 -33242 97663 -53268 90595 -74163 13720 -35519 37435 -95673 76504 -75926 50898 -31828 46367 -13255 34762 -91251 19661 -35165 60459 -89359 57486 -56104 68802 -23120 10446 -27928 94429 -13036 87135 -68217 89045 -90595 77093 -64564 19604 -20580 38456 -95473 99949 -23762 19970 -94918 49478 -95915 73475 -43165 21655 -28604 10124 -77991 89045 -69168 12955 -67281 36803 -63168 34514 -54261 92874 -43629 11280 -58472 56533 -87513 85394 -78278 38097 -27186 53704 -12183 15651 -85071 34888 -74115 71810 -38589 42387 -59858 58282 -81623 50530 -18220 40720 -80203 37435 -25112 95576 -27487 51328 -52735 36378 -57441 83458 -16583 74359 -68008 88649 -93205 93836 -29428 76277 -63669 73090 -27809 91190 -71814 87028 -36345 69002 -19141 71868 -85043 10124 -35017 38242 -72320 53921 -66740 17022 -28399 78733 -22592 81140 -30299 45195 -34919 40727 -19792 89045 -25687 93836 -83082 90916 -40314 82874 -80873 63922 -21542 11066 -55959 94833 -77334 37081 -19353 21529 -19186 73475 -34259 95072 -13064 74519 -41193 49662 -55457 72223 -16381 65670 -50435 19770 -50032 50801 -49806 46550 -18336 37435 -13333 90595 -90334 19267 -60180 82246 -93184 62302 -74440 26507 -63011 87526 -40458 91304 -23721 57800 -63922 17206 -95151 38097 -51880 98112 -20539 54229 -93904 62420 -72851 46550 -42399 61786 -99078 63519 -12254 84321 -10577 44243 -46056 37435 -51235 39472 -50954 12660 -77199 56517 -18283 63922 -52859 87526 -15246 98536 -93836 97622 -49522 88978 -73549 40727 -31118 75373 -51627 61786 -89566 93643 -23542 37435 -54992 11280 -24990 37435 -33159 19657 -53499 17022 -84995 72286 -45818 50732 -41169 14636 -40120 26973 -64286 84321 -63432 30593 -99949 24130 -61077 17022 -36433 82246 -54816 59964 -85544 84321 -60397 52196 -76341 37081 -31479 79027 -16260 17420 -96337 10124 -65067 62284 -26483 44801 -96326 17022 -14058 54149 -13393 65898 -65901 53423 -38500 57276 -20118 79584 -44353 40727 -47498 49739 -93041 47833 -46970 46550 -33688 75373 -68223 90514 -87884 94553 -65159 37435 -58329 74006 -42199 37350 -76135 20844 -46639 93433 -65739 49055 -43290 40727 -31619 86698 -77506 86616 -65377 56317 -31884 84321 -52311 81238 -99796 93836 -51116 95658 -41167 73020 -16379 18876 -12306 97271 -31299 48015 -73188 70147 -11052 42268 -65938 89990 -26961 98705 -95494 58398 -59265 23555 -87502 32132 -70660 84797 -12091 89045 -41613 26719 -68419 20739 -26943 58398 -89349 89990 -16651 17022 -95467 28221 -89990 98021 -85616 86929 -16479 51259 -76664 83454 -78928 74941 -31423 45590 -93437 82778 -85851 52691 -76954 15659 -16646 74584 -48296 46550 -77084 70921 -27964 99119 -41032 78157 -32094 82246 -29499 49175 -79737 13077 -25423 68557 -12219 58628 -70282 29077 -87976 11280 -57871 43034 -81209 58398 -56626 45328 -29128 28793 -14975 38794 -58884 36392 -24278 46550 -77033 27547 -74285 73475 -10130 32903 -34728 11456 -40336 17022 -62399 45936 -95138 53688 -12955 16609 -74887 93836 -18948 93836 -28427 26898 -67749 80949 -94522 17022 -76210 82892 -78717 36081 -13088 80671 -80352 18670 -68720 41082 -62146 69651 -39371 84952 -41619 27315 -90093 58398 -32716 45626 -11280 27624 -22129 94534 -24812 10124 -43238 86431 -35791 97662 -13162 53170 -57534 15678 -66069 63618 -49841 11541 -23345 38097 -36649 79056 -37193 76443 -18519 64707 -34081 61786 -47018 75935 -30452 48882 -12559 58817 -32825 91051 -16051 19974 -80171 17022 -19374 54710 -57295 84738 -81314 38097 -33479 49965 -38611 79056 -63785 49754 -18774 70415 -98510 72330 -85801 73475 -10744 17022 -15097 11280 -52514 37435 -86860 96099 -27804 22005 -62601 79155 -86020 70452 -26991 15399 -98690 69989 -18491 79768 -85009 79056 -11329 20212 -10782 70405 -85026 40727 -26888 34001 -36315 42445 -49098 37435 -59474 38097 -86676 41947 -55178 84321 -53985 87526 -65575 47299 -57292 82817 -24657 37081 -82204 10439 -82639 73475 -81107 74139 -89946 97271 -93306 41394 -62863 46550 -48547 86956 -12374 55301 -81681 95539 -94195 84321 -15303 24017 -36395 93928 -28572 10804 -62931 45406 -33902 88845 -25697 83483 -86956 51476 -73957 55123 -83525 29803 -16581 19887 -96012 90129 -14067 40727 -66384 38351 -43782 75373 -53517 29489 -17126 71797 -10854 68046 -68594 89990 -89786 17022 -81737 11280 -71138 84321 -77457 62041 -99540 54740 -15369 87693 -73475 39716 -35348 99949 -67944 97271 -91345 20757 -48703 99901 -56450 84321 -75169 70680 -27015 45299 -34175 85030 -21184 64377 -95716 97271 -25738 70254 -79049 75062 -54904 68773 -12813 47161 -95857 74505 -17456 87526 -24008 30203 -92925 17022 -17008 98227 -53399 13325 -84080 49498 -23522 62070 -80392 37081 -67497 89518 -31797 46550 -67380 29610 -29237 47817 -32106 13477 -17711 61786 -19802 35480 -46456 37081 -17560 67389 -59598 64837 -30808 10592 -78213 86193 -34411 89045 -22714 61786 -88368 79584 -49172 37435 -28106 30525 -34595 65269 -67363 90595 -50389 33649 -57932 74115 -85665 15566 -68846 84257 -37420 75483 -70969 85030 -53989 74115 -30509 81520 -92232 63922 -12314 64612 -59372 76983 -31019 75373 -28072 58019 -51728 67527 -82597 36949 -66512 46706 -89805 89043 -13220 72753 -19121 31313 -27852 89644 -29411 97271 -10756 88672 -60773 82080 -81746 11688 -90653 23550 -59400 14905 -97489 44079 -20132 40678 -82210 43722 -90436 80985 -92889 18182 -40727 19573 -76922 17022 -27554 78420 -47592 87324 -78580 75728 -91390 63922 -82409 80324 -60005 53958 -46353 90334 -89672 26377 -52436 11280 -71495 41947 -59787 93836 -13621 79584 -16093 31156 -11603 51436 -31593 12955 -70829 89990 -61100 96353 -71072 61786 -33450 17022 -65493 48359 -51250 44884 -49691 61786 -41947 61786 -60973 93836 -44926 87954 -90989 35723 -98883 30386 -83974 67713 -86576 17323 -32534 77745 -57475 32708 -86499 43190 -26325 71687 -16737 58398 -88460 17022 -10798 61963 -59899 54790 -84722 56390 -38117 75766 -12595 97271 -23267 78757 -70504 97271 -44104 63922 -22950 85030 -66137 84321 -18407 99949 -37598 61786 -28201 24323 -19404 79868 -53725 33781 -56941 41947 -88231 83925 -30916 73475 -81019 46011 -91386 23123 -29455 79332 -32603 42378 -61578 46922 -67431 12955 -85884 15692 -40799 89045 -27326 97271 -79681 11280 -35614 38097 -99407 54190 -30288 10124 -59805 66109 -27031 12955 -51952 46550 -63420 17022 -96282 17307 -45123 17022 -95858 32553 -85339 98702 -19887 81650 -20177 66465 -92548 84663 -28915 38097 -48995 58398 -32153 97259 -14697 55843 -15115 31921 -97258 21175 -11833 75150 -20476 37081 -57780 87869 -20868 16813 -55154 72786 -51855 79056 -58551 94071 -32367 60493 -70926 16754 -95196 94004 -30949 32933 -93955 10128 -14553 61786 -67116 11579 -34377 85680 -69983 79584 -92220 38097 -69116 11280 -83291 10124 -63499 30127 -48167 97271 -70014 13990 -40226 78226 -71699 12411 -40455 75750 -74381 11343 -88846 74967 -17219 79739 -78747 30775 -98201 18354 -54571 68841 -85738 49837 -17375 10897 -44862 46550 -15932 11030 -79584 17022 -77641 58398 -54882 38097 -87246 75159 -33635 41878 -75249 60331 -46712 55151 -48228 91967 -17264 39458 -58907 86956 -62693 87904 -72122 43222 -70553 73934 -43027 90334 -69420 97905 -91527 10124 -34146 96995 -77998 88728 -80279 91008 -35125 77608 -33786 63922 -82027 38917 -10855 49903 -66407 38097 -50926 49360 -73591 97271 -97759 84321 -82742 49137 -16002 57753 -53455 38875 -66703 40727 -76244 92842 -87526 49664 -92147 87526 +xt36five77 +two8five6zfrtjj +eightthree8fiveqjgsdzgnnineeight +7chmvlhnpfive +1tcrgthmeight5mssseight +eightoneqxspfzjk4zpfour +fdbtmkhdfzrck9kxckbnft +9six9 +goneightczdzjk18589 +41two3eightfscdmqjhdhtvsixld +t8929 +fourtwoxsxqqmqf3sixfoursixmmjhdlx +bcbsfd14cjg +95three6threendpqpjmbpcblone +tdmvthreeonefive8574 +5eight82sixtwonev +ninemg2shhmsqh +thmlz4 +xtxjmm2tbbntrmdqxpkdjgh1vzjvtvg7nine +vf19fourddfsvmzeight9 +mmg6fivegcthdonesix1eight +7rzzdknxtbxdchsdfrkfivenjtbrjj +2sdzxhxp +vzvkjvngfjsxmponep9jppnqnbt8jtwo +85fourfivetwo6xvhfxone9 +fivecgtwotwo3oneighth +pbmninesixzcqs5 +ztlhxfmr4mcjnd3two +nfr27zdxchz +sgljlqlcxsnjgppxgqxppqszzgbp7 +five78eightthree +mleightwo68 +threemnnbjncqq68fourmjdfqzqxbdqvfftggf +twofive35llpqrhptnv +pslmgrznfzt823sevennx55 +72fivesevenvnxpkoneightgdm +1sixfdjtgxbflfkvv +77three9 +five6skbsrr +fjvlsthreeffzbjlsm2 +6dpkrlbxfdv5nine1499 +jvt9one28nine29 +57pbgvccprdgnine49three +qmthreekcsttzmgd1nineone7dvhsjg +eightqpfhvqnpbbrbmsz76 +vvqjsevenfourhmdn45 +2eightxgkdtdkfbtcjgrlthreefivekm2 +rfpklsh1threenine +nrhbjqpxssmqbkdbzg2 +556ghndxkrg9 +3six8 +zhkkgqllq9eightninebspgktnh1krfbzdcthreekzxzgszgpd +933five +sixsix5qmbqd +7sevenxckssckcrqnpmfiverqtcdclnkzpztt +5eightpdsvjknine813tnz +k81one +6threegsx48 +three3xbqvcfgjjfsixfiveone779 +threenjtlxnonexqhv1 +5ninefourtwofsqdbchtpkfiveninencsdrnvnbf +vdveightsixthree1 +2mrxnnqngfmshdz +qfourmjpltwolblkzlkdfr41vmskjgrqkv +8hbjcnseighttwoseven +28lvggdhbjgqth +nineshpzfshzm68ttlqbqxxrvdxrkvdkbcnfdkrhcqpqrfmpxtwo +9hhfninefourfiveczdbrn1 +2dpzvd39eightwohjc +3zrhnzvq79fourxgldtbthree5 +two1716 +bgkfjkeightsevenf9gclhlprxlk3 +nbf2rdglrfourthree86xfpqckg +hslr84mkdcqpl3qtszqfngthreeonenine +7bhgqcphnb2fpjrbvrlstvghqbkfive1 +6lkfdcddkbsevenxsixseven2fsg2eightwos +3xjprzkdsckltdone +1qbkshbrcddjtjz4jhrdmpnrq3mmfive +27five3sevenfourjhhv +5fivevhkttflkone4 +5jcthxvhglfourkjrhfour +3lbgzfkljfzkf3 +9tmpczsvskqqtveight1 +kfrjhgsixfive9three1 +onesixpdf8onethree1 +onesixnine5 +1lscknhb +fourhrnmcfgpzffhdtbdcpdbxqh3 +twoffcbgcjnsix667 +sevenfc14 +8kzzrbz2threecclhhjn1l +kqqpzbbqkchmkdl46twothree453 +8two3jqxmnz +eightpszqltlncjpfrdfzffltnthree4 +eight8eightsixdcgqnbvt1lbhlchdzkf8j +64nine +3twofivetwosevenfour9 +lhlntlsixtwojqhsevenone74 +2242eight865p +dnhfbgzcvsx5krv26 +szdnjvh9 +hrzczjbfphxvjqs8one19five2six +lvvkjjvgcjbkhbdnf6ninesqgqhthseventbkzhjbnrb +crmcpjhfmgeighteight316 +vmfqlrnjjnv7fourkqbsfsnnqxfqsixthreesix +7sevensj9919one +hrvtbr2lqkkhn25three318 +rngggthlrfoursix2twopv +3srcpjlqt43eighthscbffksixfoursix +885sixbftpfive +qpfkxbqfph9sevenc2 +9zrtbhztseven +5bcgdvdtzjjbseven41nineeight +two3szknm +klfivethreenine2qdpbp4eightwoqf +1b +8llkrslcbcsfivecqclmfrxbkzfive +twoseven1 +six3ninefivehtxjqjgv6onepkfgjcczft5 +oneskjsh5jmnhsxhfoureightfourcml +thjptkn9rpjkbkvgm2 +glpbbfjgfivep1696xhcprcqxone +5fivegnsbzt8gtxvhfmt46 +fivefoursevenjkxqlcx7onenine +lfourghzdksztjmfour4threepdnfsz6 +two7one +1onesixdzh +7ftphkqlonesxsrlgkczjthreefive3nine +62ninefivefkbmhvlltfourtwo2one +rgoneighttwortjczm24seven +chqxcv3fdqnjngqkkkrvlcgtdfdsvztx +three2dvfpsgjfgs16fmvninefourfrvg +five4bgbfrj52 +98sixsevenfourzdsfjddbmbrffkt1two +nine9xhkcmmvb81onehsmxclb +6146four +slmhsix4hhtrdfdjpk2fiveonec +1oneightd +86sevendgdbnrvgjnmtxrmqtt +six56three2hslccxbnzpmbrctd4 +seven8nine3fiveddvpdjgqrjtwovhbdmtz +five32 +769three1 +mdcmrbj19 +threethreevc6bknnspdvbfzsevenghqnkxnhfxjf +sevensevenzvqkvvgzn12two9bfzfpxjhfslqs +8mmqrvzklbfivenineeightwohnp +zngczscnv8threesevenfourtwo +695eight8szhqcklnc1 +sevenjvnfbbnnine9ninefour64two +four5threelqtwoxhvhjnkgz2 +ztnzbgmtdtwonineeight3 +twosxfour6xsshbnhsixsix1 +threesevendmfivesevendxhsdhsevenqnrvfrgpfl5 +71dbpsk4 +eightxqzh1clmrdljnxh +jqjthreetwo3 +23sixhsvmstwofive +mhvttrxpllkfpxzcfvjtpkfsgd21jtrcrgp +1lcqlznsbdzksklm38frfhdpt +8vjtzvxvfive +9xbcgqhdclrzdnzspllpfrqhnxztftninethree1 +seven5two +fourj5ldxlnine +sixtwosix73jjtrvt +9qqbmccrg8xdgcqmnine84 +fivedmsdlsfour2rmjxqthxfcsgkqgsxxqbtwonesj +one631p +6x2 +93nptkkseightkkgnsnqkpfourone +173 +eighteightvzvxr2pqknnccxqkznc +ftbsixnine4 +fiverpz9ldmbrqhg +7pzbjtnqcfour4319eightcxpgl +tchdxgqsqeight8ftllckrz1 +kz2five +scgflstwo6zzdxdcs +535svzdxtwo4 +7fourone2 +kqczhqqttf74seven +ninesixnttqqzmdg264 +sevenfourthree2one9 +eight1rnnsppqbjzv7jknltmlb2 +6eighteight5cljzvzdtqq8sqftf +ninebnpxdqs1 +seven2nineeight +hjnnqsnfftjstkrlknvlqlkfsdbgz8 +rcbhxcfmkc3ptnt2 +threesix378twostfsjjvmnseven +hllssqjbc41 +six9zbkrrvmxngjone5xqjbxcrkhzr +nineone57 +3pls +sfcdbhkdrpkdrtxtvlkqfiveqvbxhvm8 +fourthreemeight7nine9 +five5fivesfnxfour +h3two2sixgkninetwo1 +53ccblnvbqhjxgbxrs1tk +twotwofxvcmsld2zbjlqzvgzkqvnthfvsftwo1 +eightninevdxxdglskbfzz8sevenfour8 +flhjjt6seveneightlqpfvnpxvthreesix +threefiveonegpcjjvv6fourseven +9pbxlqdkprzcxp +cblkxjmpgrfk5 +qbntftctnine5five3bsevenbskhvtm +7eightsix3threehzn +5nhndlxkthreeseventwocdvnhzrcszhd +six5onekbctwo +fivezhtlpveightvdfltnxpvrzmczdzb9q +nine9xsfq8vtdpmcfgm2 +onesl8mqzgdrstwofour +4onedqtrcc58ghlgxqjlbv +132zvtptdrqt +ftwone1tkzzthvdsevenseventtgvqnbzf +prxrsfvdbt73zblz6four84seven +onefive1xllptjtwothreehsdlgrmjssfgk +twofiveeight781mgjxgzlmgkv +483fbgsx5 +four82onefour +229683five +2onevncxhvscnbtngbzlbbpdnnntr +275cpjnine +j4threefour7dzqleight +ddgmsvmfz7brjdxt5 +sevenfzjtxjtbmj8fivefive6 +tqprcctwofive8sixzmgvphmdsmjtwocbpqc +sevenseven4fourbcscfcprcr5647 +tghsix8 +two83six9sfp99 +fourthreefive3seventwo +7threepx +oneeight69sixgdzbbmlsh +23onelrdvbzljtcdjqckntwo7 +six8onefivepgs +83gnxnjgvdr2four5nine6 +lgfcvptthreesixthreeeightthree23 +seven8gsqznnpb3 +dqr478fivezxtwo +4cgkjbl261 +pnjeight84twodnhh4 +zeightwozhxshspt45 +8rzkpmzlvszvdvonesixeight +twotwothreeseven95threethree +sixbr293sixthreesixnine +3sixsixthree9 +q17ninenineseven8 +jmhbhqjxvc72qsrhzzpnljeight775 +456jnrtpfseven +gjcbnbdkt94dsjrgdq1 +five56g6 +rvjq8dkngcfjdd +twofive43 +sixzz9threektkqmfq4gkxxzbg +2four7four +four3eightsvmnfive6 +ninelvxcxdrxk1mvhtptlpqvff +qrbtlxbkdrjzkznqp6 +z2xdrtqzzrbt9five3five5 +twoeightsevenfive83 +73lzgb1 +oneseventwotwothreemr4dfkjlgshjzvlxqqoneightvvr +5twonvhrbtgfxdlvxrgnpkeightzjpd1 +twotwo6rdfc +six84sevenfschptts1fg7 +8kzqv +hnbjfivettpzkb8six +nine8zcrzgqntworxnj2three5 +1qbjtsqqrttwones +gnjmvqrhnsfive5prbzfsjteightqgfcx2one +fivefour8btcrpntwo6oneeight +kfxbxn4283kcjpkbskshjdss9 +3threethreeh +bmzjktnnrl8fcmmbtgzkj +vhnine84seventwonine +gq639rhqlbzp21qbseven +6rnineptdmntjsix6cnhhbcn +sixscrdone3mhgnmflzxftwonvkxvrftqcxzcfhdgxlvreightwos +6nine6gngneightlvqmmjjtdkrklqbthffhtwothree +bsn4rrgvrjdddhdfsvsffbqnrsbvtfive +twozflqcsix53jcsc5twohdeightwofb +73rx +xldqxlmfcdrnthree47tz6 +foursix6ksrzponeonepdbfpjzspp88 +czvdzccj9nine7 +92one +9one8three +onevfzkmmcrtwotwo2five +8eighttwo6xpfxtvvpx +83four9 +3fourdmtqtvqthree2ztvvdjzmfc +8fourpb7jjlcbkxkxfthree44 +9cchfourltlxpbjpdrdplrqgrqpk1 +fiveeightxlxmr5 +bgrczrdsfrcfrpkprdncbkd55qnhjnzkbpninekbmgnlqgmxfqgndc +6jhcjhb57sfive8oner +six6twofive3ckthree3 +xfxkfourtwokqcpvhzjjzsrxjm6 +four85 +p3foureight3rl +f6four2eight295 +1onevonelslgmbq +pzj6pmjone94 +bkmcjnllrmcfpmqckl3fivenljfgeightvrjfb +kgsczqtwo8qnjhtpfltonepvfive +fourfive5pfnlnjqd +vgrsfxtkcxfstsevennine89 +njkblck4phphvmq7 +ghflplsgkljsfk5 +rtbm32lntjflptp435twosmtb +45four +fiveone41pqgcjt +threesdnllrxbxmhtcmjvdktqqkzs1 +5one14zmxblkh3 +4mzzqpmsfour5pnzonerdseven +9bhcxsnxdv7 +twoxxjnsxxjxfnrtnknseven29c +four54gkcrncmjtpvfbdqr +mmvgl8onekzq +tprfvqnine54rqjkchkxtcrk6gxjgbfqpxg1 +threeghtxbhkkrvxxcrvslhnvczxnine5four4 +bkrkeight4jvjvmnine +sevensevenmphmhvhtjxcdcrcgbdvlmcr6mczlh +eight74seveneight5eight4one +bspq9fiveklkbeighttwo +51four +sevent79zngvzhhlxjrnrbkvnine +six3threepsjhtfoureight9 +44mvfhcthpbv +3fourmrdzqlvb63hrzhqxc +7fivesixcnxfourpfour +csix4 +qqtjk43 +eightnhqpxttth9ddbfjpqjmfour83three +slx6fdm9bspmbxdqjfmkhr +stlxrvseven1gnmnqrnlthreenine +56zjfdrb +sbcxqp8 +7eightsix9eightseventwo +7twosixfour +1eight6 +twor59eightfourkpsix +571fivefdpntmjqgnineftpjtkh5 +two7nsdz +pmf5twoseven4prgqz +7vfmvlgtvkbxnq +eightstdrhhtctthree61fourbmcvhmxtkdhcltxpr7 +fdjcssixninetdgtbkgj4snzpqlninehvvkthree +122pqtcthreesixeight8 +hfztkh2ksjnj43nine +sdlnm59onekdbdrdksixktk37 +4mf114 +8foursixninetwoxbcnq +vbhspqrkvcvpfour68xncb3kdbr +eight841 +2fdr7fivehtnvbk7nine34 +eightsixone1qzp4nxzrslmzrsix +two3zdjntkkcmdpheightfive +44one +17txlqkttvtzhzkjeightcqtpqzxlktxm +two8xcvpzppmzntzr +pbqeightwoncjsvrlzrkspcnqsrrfivefour5 +9foursix1onevflhjngtthree +gp3qjmnsksn3nineeight4 +39fdsdqonefleightwopsp +2dfzsfssnpbzfour +stzzclzgskgbztvrfqgbrms6 +5zpq81threegdg +6three9ninethreeeightsevenninehhgqhxfhlv +1tqftcgtwo +zpkrjxfpzf5jmpqvxrgp6threexbjlzclxpneightscbrsgnine +two4bmlztrzn1 +seven9klmsfmjtjr7sph +sixsix4 +stldx46three15four98 +gthb7nine +lninethreebrzzntwo4 +6fvhgpqj5sevencgmm +75two7qktbnpcxtk +fbkzzsixgshhmzdgt9 +xfivenineseven1dtzsfive78 +four3ptvfmkkhzjsix +j9txxgmsvxx +seven9lmxhzthbnbbxjmbqkpsntbfourone +712fourlqknine4 +xlpnrk64qnjjvszbtkgktbn +lznpdmrcxmzhsjqkc2cjm3zcx +615sevensix +phgjnmqfsqgjtqvzhpc3234qpkpjmxbfr +tnrtmcdljzq1three62 +bcndkzgzp5sixhflsix3lgc +dqgmbkxlv4onetwo +freightwomsix916zrcsjgkktprb91 +fourbcmprdvkbl9vxzfkcjfsqdlbndmrsq +sevenninezpblthreesix2threeqrcdpjqjgm5 +5jnnine +j9fivesix1zhplxlvxsninefour +dm68htnmqdsnzjvqrrj +8four9pfvjjhrbzmlvhvtseven +two256six6qdpldblvleight +ninecprgdrmc2eight91mggqdvhcf +sqbccsh81t +1twovfhbngpggbgff8eight +bxdstkqnbhkvt2three2fg29 +one7threehxcttwosixfourpx +brnine1nineone +6fffrqfjprmdx6sixseven +7four4fourx8sixfour +951seveneightnine +fivefoursix5tg6dpdxrckdh +829schqjxjdxncs6 +seven1twockldvjsbeight +csjv58dshcsdrkgsixrdl +nineeightstjnxcgzbxrldsevenfour857 +oneqpndxmthreemnmlnqnffv7 +twotwo8qkdfcxvd253bhd +sevenfour3 +t2sevenfgmjjrg63fourrvlz +4six9fivelbkzffrvsoneightxsj +nkkdsbp7kkjchhfckqqxfourthree9 +7eightone4fiveninevxtrmbhfbrone +onemjzfsvsbh2vmsxdmcncjlnvtsqszv +eight26 +sixseven7four +cpkzctmhpmpgtwoqfeight79 +vplxpx9tndmcpsone2 +eightone2bqlmdmf +8sevenfivetwod5one +fxmhpcdckl5czfcmeight +9216gdptpmninetkfjszftzdfive +ninefivemrvmdt5nshfxgg5 +9qclonefive91 +six28ninethreefive8two +76five +njdtpktmsqvbfourv9mmonesix +5qxckljjpninedstsfdthreevfrsmtn3 +tzrrbjlbq7eight +bzl5 +3eightsrnlmlvhtwo +vthqnine1zfive2six6four +cseight1oneone +mgnkflp4grkdrrrtfzmjkbtblfivebgcrmgggxjgkm3 +5three1vfrseveneight +seven42seven178 +8bnrrzbbvghcqdbtwo +fivegxdzcmbzsix6sktwo2dp5 +xqdtmb2sevenxpvdlfsqqkgfxqjqq8468 +rscsljnnkd2seven +mzeightwo49ngtzr +threesk3four3five +7shzxkjkgrt71 +nxcnnmkqgv1mdmxtkjtwo9bhbbfive +kdxmcg578six7nxqqbm4ddsxzxmtkq +8rjdkmqfivevpfthbjkbt9mnine +5pxfive +hgnfjtwofive2fxxeightmx +pxpqvld69 +onesixtxmxttxqfour1rxfrvsgdsveight +95nine9onetwo +48ftnmcxrmxc2vqsgrsqskzs +one4threeseventhree86 +one9ninensqxone5zqfvmpd6eightwozgb +527two3croneeight +sixzdzfour291eight +5vzlblhll42hnrrrjj +xzdkkpseven9one1vlsixfour +4tbzbrthree +8hceighthtd +9four4 +eighteight7eight6hfthree +6fourbbx1 +5onepfzgneightsixxb +xzrjpnfvxr61 +two1ninenine6pbhkzzgjq6 +sdltwonecbbffldnfdlkh131ggkrqqg +kxrzqltp3vfh39 +nine79djhzhhgxvglg +5four1one833 +1twosevenseven3three +4nineseven +three42kzqllpf +zkxflrctvsevengkpnqkrrj2 +6oneleight9ncnmxbrnkf +qthreenine4vpbzzzfnine +792 +hjmn85vtfjgtqv +one3sblncblnvf +ssxxddpqbdznrczqgsix64three4 +2four4fourtbeighttmm +fournineeightfive1twofkjcsrklpxlsdvxnt7 +lrlzz8eightmpspsk3nineseveneightnine +v4 +eight9gfzone +jscpppmpnfkhcxlj1pbtbltmj6one5 +8nqrmzrbvzrnine +two34m73twoklqqdlcrrh1 +7fourtmpxnf +twocpbznkqnqsixt86 +81sevenfsdldftgzvnhhhf +ggntprxxqrpknineeight8fourlmvsr5 +sevenztwoseventfour7eight +fkcbvhmqqk1sevenseventwoseventhree +three6ltvtkkhgdpsixsixsltgdngvrttwokz +2fourv +c29fsczzfiveqmrfivejbglcqhl6 +4two3 +nine2kphnrztjltxgq1sevenone +lpbcgone8 +vcznvhllrbfx4275 +fhlsdjmppnrgqhqqxt921 +4four2sqzzcvh +19nbcvlmhlkqfshhckzkzpqbxfour +seven19 +6xprmkgfgntwo4bqk +threexf5threefive4 +3fqone +5g2x68cfghcmtwo8 +1fourq +pflnjchgnine25one5eightxvjkkxb3 +twontnqpcqc17 +cxdmgmvmfssevenone6onezdmnltchtnfour +cpcthreeb76zlglhtkdxrlxjsevenzmvd +sixbhjbcpfjeightjcdthzccpzeight1kknxfck +bhkplfzcdqdfsffcone3seven +ninethreeqnxmgmjct2 +ninexjlfivelqznkhngnsvnqhqsqdglsix78 +9zbqrkmvvnine +1ninehqtmlsd6zjmbgbhjm8 +fourvmht91nine551 +8eightmfgjteight4one +6eight1lhfhmqvjsixjpdgnjrzzbtbcgb +lxptvkmftqffksixtpfnvkxzvkldfpeightnhncz6 +lnsvgtjs2nbsqbkjs +8twohtdv32 +9cbdbvvmninekzbrfchsseven1 +8onethree7 +hk7fourxvqdqmnsdnine +hxbjdsk1vkjbsqn6six3nine7four +485 +5four1kmbcxhjseven +2hjfhtmfg3sixonetwo3five +dvfk7sixninethree +onesix827 +87seventhree +twosix16lfdfkxbmbcfive +1mssxhvgvmxfoursbjdnbrts27rllfm17 +rrvpckn9fourgvrhhzppncrqqml7keightwop +knvmsveightxpbmxptkjbtmzzn3pzbl +47eight1 +815vd5gnbgone +xbclfszchvone21 +7ttwofourthreehjhpjmtwogrng4 +twothreeoneseven9qd66 +9dhbgmqgr7threekfhzkqqg +fivekvxpqrkkffc6mjrpksfcqfln9 +63two97 +txbn163qkbddlcgdznine9 +dztphkcfnnninekjqdb89one +mqvtrtz9 +7hcnmcs +foursix7nine +sevenstm9gfjvjcnmjnnhbgmrkgkccsflm +two2jgfqdmlkdndmsp1rqlrqonel +eight2qfive1oneqjnine +mtnxzx7tthreeshdxpcrhrk +vzdgktfcq1xtfxqzzfdpng693btkcqhxpsmczbxq +zbvgtnzmlghvhnklhmhjnxckone4six +98eight2seven3hhbxgvnhbg +seventwo7seventhree5ltlptmhjp +1rf75fivegx +2nineonemlhxmhdt7six3 +nine6sevenlzndhbnpkxdhdtcqpzgvkskvjkhphpqnxl +qnqpnlxcjr3phkkpnccxr2sixrslhrtf2 +12mrkvqsjdcc47six +onehhdveight35jgnmgvqgxdr +hgoneight5 +m9eight384eight1 +1p6 +3sixnine41seventhree4 +5dvssdf +blchhcfourgzvssbhqdxdbxt14zvbknhnll7 +7twotgqrxddm5 +btlkbgbtwotwo5 +five63ninesnqx +fivemkvjpslfoursixfivepjvtx4 +74threeeighteight6cpbxbqgzh +twoeight7bh +rgtwo7fnck7 +five4sixnvjtcmx12one +ghqgdfour33 +tjpdztkfour666dxgzjzlgnz +ninegnqrqpbrz8seven7sevenhfbone +npzlpklnvgone6nrjcpz8 +2seven6m8 +seven3fivegqvxgrjcnine2xppl +nbmvdgk9grz4 +four291 +tdnfgkzkxbfpkpcthreenineoneone1 +7nineflqptxmdjgttpll +one1jnhcvthree1 +foureightkxfcqlkp2fclpr8bzxtfbl8grdsntkrst +six16fivezqbchmjbb +zjhkd5two8 +745shv +l64dqvsixthreethree +rffrrmjsfj2jblgqnl7gjfcqtszfour7 +fcqcmchhc7t +twofour834ninefpvbvps +gmhhjr94svpddnmxvd98threerlljccvq +ninetwosevenb71three +eight4xllkpmjkrp4bv +zhvzsfourrkflmjpjhfourfjbd32jkvrpzqg +2frgbkngmsix9stldncmsczh +eight9three42grlbfps85 +1lrshxpgxlsnrlfjlxk2 +jfhmhcml8mvbfkxhmoneeight9 +five8sevenlzvpzpsbjfourseven1fkcfdf +4vmldcjpbbsnfourseven4three +mfchhbqk7bdlrqhone2fiveone +hnncfrgmnkg5six +dbone55seven +geightwoonevhxbqbpfkx6two67 +sixcrnq1hnrsttfxvjeighteighttwoone +fiveonetwo7six +9nqrmt5n9fkpbhd7 +two1fivesixtsrq +684 +ckbxntxfhthreefour7sixseventwo +stdhzqdpnxnine6tn7kjxftfbksevennhfxznjxgchm +8czxhfptlknjlhn5clhzdfgntx741 +3nine64vvgsfour61pzb +rloneight7lfrfqqb8fivefour3 +vnhbtkbqone4sixsevennmrgmmptvreight4 +bdvjp354992jgfhzzvhv +fourp1 +five7oneseven +oneone954threefivesixsfr +sixfivevmzlzdfjvq5 +4bs +threetwo64ccks3 +onetxqh3ljpnkr9onegsmkq +five24seven6threethreezfqzgzjztgntkcfzt +3fourv2 +eightoneeight6qseven47seven +559ninexcdkqvszsq1 +95sixthreetwo8fourthreesix +ksxtrn1gqxthvxjltfivejpmgvz8 +ninezdkfvgceightnine7sevenfiveeight1 +h43zktkckcjrg5nmzjkrzmjqsix3 +44pqlgmmzvgzpslmnccdjlvq +4threefoursix87 +92gnjfsxzlcn71qzcbvq6nhmgsvmbrvvjzqlndhl +hkmjkc9fourpbgjlvqxhbhnzvmlnfrqsixsixksix +mspbpsgzn31ninesix +7xqtttthreegr4fourrbflxfznfs5three +rtpknqgsix7sixthreethree1one +qqlqh8seven +six11eightkh73one +eight9mjzpmhcr999fourfive +fzeightwo7smqq +7dzzxnttq +4vfk9 +ninermjmpprxmsdgrpgzmmqtjxkpfour5kscxs +h5lnhnrqhvltpsns +twosfdsxcjjhg871755 +1one5 +933zdzz1five2 +4zxh9j +bnlmdd9 +nine4xchhpgnfjtwohggvlkkxthznnf7four +3foursixhmsddvmqkgpjvone34 +bjfxjlseventhreeninesevenfivethree9 +qhqgxtjvslnvbvjsixjplmfq8 +8ffjpthreerzkdjkjjzxvqkspsevenfive +3three4two1 +fiveldkk7ninesevenmfnjfjmdgeightprjrq +4rqbz6eight3lbgbpgcveightthreefive +sixdsmvltdv2six3fourxtkzsvjdbvqfmthree +3one2xgzvczlxvfdpjqgninefourfourzft +sixcnfznvcb8four +3threethree +trzqdpslthree8 +3fivefourninefivethreefive8nine +1sevensevennineninezmghprscjskqppgmh +6zfoneqkxhxmtwofour3four9 +twosix6dxftmjgclkkmzxmkglmqvsrtjcp +ninejkbk8v5fivefivethree +9twoneqv +1cq51lklfoureight2 +8sixfournine3one +5plgtszkt6856six +qoneqjph11hgvhhkglsreight1pkxrltrzm +nine25mlxmkmcg4xlrntfsrrxmlhdtzt1 +fivetfdzmsq2 +pdhnkbjrj5fiverjpgmntqkpmx +fourvgc1msdnxrbpbcjfive +14tbcfmjl3sevenvj +ninezrcfqvg9 +5eighteightkkvtsbrkjlthreegspdm +99four5two9 +pvlvjvhmg5krzl149sixtknbgfsgvf +44tvzgpz1 +8threenmhmptmshpcsix +5rdjmjnmkcd +ctwo6 +two1dhtmsdtsds +ndjd4sbzm5fourseven82 +rfqsxkdhcr1twotwo +4qrt5threetwosevenffjdvtzhgfd +6421 +sjgfshzjg5four +threeqpvpvdhgjhpgqxsrhhp5dqjqlr +five7ncchvpcfmglmfzstrmvhfnqndzrmvb5 +fvnfmcrh684bjq63dxnnlznrn +threedccxvrtbj62bfqfzlpxms8five +893shxkgpvpfour36nine7 +dtoneightbrmthree6 +6seven58nine1mgqqtzfsszlrgghmlknx +four64 +five5dklfour4 +lgv2eightvcp +pnfkrfnncv3lgqlrznone +sgcthreegxrnfkpb731 +8twothreetnxlmjtwoneb +txkrmcklpdhclrklxz41lhddmkp +rqndtwosixq8 +btbndntqsllxc6vzfrdqm2sixfiveeight +rhvfourp1seven5cxcc +jlzzqkvfxqltgbnj1 +24szksixthreeone62 +2fourfpmjltjnqvgrgxxbggtseven6qms +78prqkfbf6sevenfivesixeight +drtwoszsevenckqrxfseven3sixseven +zbsj6four +hrcxgvdbd6 +six9three4onefournnsxgvjtrdthree +441 +fjnjksnvgjznxflonetwovcnmvhdgjfggfvxmmg2hppfcgjqv2 +kjszbvrcqznbf4eight5four +twolmbrdmx8kpltmqznslfsixsix +6bjrfthk8 +gmzzsthreensrx3 +sevenz63xlscxeight +fivehmrcphp7nine53 +fivepmqvjqllgthree5vkpn94nine +seventhree9sbklvfvpsixr6 +one56six +pfivetmqrbqxccpxsbcc87five8 +mtmnvlhfsix75ppk9rrqzbbplmbseven +547mmntlxflkztkkftxkrrk +5four9threelcqlsrlvg2 +gglpjhvjnnnrcbj3n55 +xgdbjcrxdf5jjdfrrkzkdzpjkrlstwogbzcjq +cfmgxkjcfq9bkcpkrpltp +fcqkjhqgpkthree4sixthree84frmfqqkrs +onetwosveight68ftgjft3four +jvlmg2eight3bdptwo4sixseven +three1bhdkfnvt +6eight12fiveseven +onedbxgcqnltfour35 +sxtwone5336psninexnrjsxsix +four79one47jvmmhhggcthreecgkxhnlm +17eight2fivetzcfmrlxvd +rxlhkjlm778oneone +8one1one499nine +six2fqd +9smpkfchhzn8seventrpbvcssscseven +nbmqctcldmnvnbnzns9twofive2three +1five1two +89brvbgnine +vcbrztfjzn4 +4fvmlvxjd +lsixoneplt7two9 +kphbsssvsnjgjnvqjcbh2nkmfeightseven +three4xsrmfldqgpqxbpsevenfour +rzd8xzmcdch +bjffone41xzone +xkmhqhgr2lxpv4jnsrnfour +31cplcztdkhsix +6tkzzqqckvdlkxrfourrveightwoch +26vkvbdvggfcsjccrkzbh +3nr +ninefourklmqgsix3cvnr +mlnzksvhnvvbxpsfnspl6hpqkdmg +btwone1jpgjdmgbfive +817sixqtvhxpfglj5kzmbtwofive +1tworcsevennine +xseven69six11 +four3sevenjmgqzf3two +mbrfzsj2 +8xgsdninefourseven +six14snscgfnconeeight4 +seven4fivefoureightfive1 +threegjgdnqvhqlbdv24fivexdvpdthree +9ldkmtzghbtwohqzzntwofive +fourxh8 +eightfkxhflcone3xscqdqqkrk +qzlbtgc2sevens7 +rfjgmfbjt185hztszz111 +pxsixssnfgtfour9 +zxflhgjnmbgfdqtzs4twojzxbrsix +7cc153fivel8 +bzoneightlrvmnrh98 +threetwogd6bhdkrjhxt2three +hlrscbd8rvppfclqdtseven +twofivelbjh3gbnbdbpthtgpqjmxjlmzjq9zqll +2fczpbhqjqfgzvzzkqgmsevenone58three +fourzvmlt3sggpjzssljc8twoeighttwo +ninescglkgftppbm187 +five1vll26two +czghbj5827 +nine7threerngqxk +four5bjbhfglffourseveneightfourj8 +djqrxfive4five8 +3xzhpqc6six +1htdxrgtrhvpgz +5bkxxsccdftjmhkfjqvjzjnine +pxpdfdnnpqzspxd9xrpvrxhnsix9four3 +gtxlzxdninexxhseven5 +xcdkvdg7nineeightsdjvkhzgmone +zrnrrpxdfcnine2qgjxzfxcqgghbdk9 +twozrckqbppsixhh7pmrmnktnrb7five +tdxpjz2kccgqzcslm8sixsixtwo +8tgcb32 +eight391gxm99five8 +one3fivegrpjr4trqxj5eighteight +7eightzsnndnine8fourgphhbhxn +7five8seven6mhkksix +8jvccfldpqfourgltcqbkpkfourtwohbvnnine2 +rrvmvtvbrmsgnstbghfl28 +66fourninekjzfzrj +seventwoninethree3plvfoureight5 +fmpzrfpqqbfivenine7 +nrkbbdqdthree1fkbfivefourqlksbfdsjtthplhjhlvgh +176seven +3fourfiveseven681 +five88rzxk3mqgtkvgpdx +pgttnnvnhtl4rljpqjzhphmkztwokdqspbth +54eightgngggmdmnxgd +d6jnkq78cgvkrgseven +sixeight7eight1dmvvprm +72twotwo2kntsrccqkmzbn4 +snctbphhl2jgpghbvhg +one5xxvhfive6twozmlxddppmb +145eight5jcpmqhkpgrdbvlzl3 +two4vtlfddtzrzlmkgx15 +2fourseven9pxqzdf3 +6ninec3 +ninefsix54 +sevenbzgrdbbvfmbkvb8 +vntfxdprf91rmgvxlxhntsztmggjr1 +six4spdffrjfthree595four +pxfftjkdnninexkjvskrtpmjkhnncflz26 +dkjmxmhpc7eight7 +hsbdfeight9hhrjcn8twothreehjpnbhslcc +437kzcqvsmxkknfour +8twoone54sixvmlcjdnrgnqbmlrvdtnh +one587 +4kxxsrcseven33dcvbbgkbcd4fourfour +nine56 +oneeightpz4rqbrcdvjbx55 +threefive33ninexrlj +3bxjdxlmlgs +gqmkpqpppfour9fouroneeightseven +492 +one398threetwo6dseven +j8vlfrninebdgnineljtvbeight +nnnhx28sixtwo +fiverbgztggr6ktrsfvbtqlbtdshqjxjhj +qmdjfthzfour318hrffjj +977dpssrfgfxfxkk6 +rvklzfdfour3twofour8five +czbjbfdcbs1rgkfscgntmhksixhqgbrmzvzrg +3xqlbqbcxnfq +six29 +jhnfthree7 +five1821 +578blhpbtrjthree83qtflsj +fgzqnrvfcqkfrdmgkndmrxfctgvsbfive2eight5 +feight8eight +3qmfbdztrgpb5 +ck5three14lzmffcljxcr +3twoqgjqlvjeight5nddhpflj1 +vvdsttjjjgnrzgfournkkhp622onesix +two7seven6 +7941 +28two7 +ninejhxnjctz3jtxmlmjg +vmjpxvqg24pzjfsxvcg5seven2 +xpqbffpvmn5 +32eightseventhreekqdgtcxgjxvv1seven +2eight3tllbkklghb7 +sevenfour1 +tjsjfldclvqq1sxcl +mrdqvsxk15jbxstdph +9fivefivebbtcvhqjjdvvqeight +fourdtbkzvhrbvzqnnzghnpv1231 +bz34five1 +six26two2 +bczkffnrtmsrctwoninelbnxoneeight2 +sevenstvffmtkqqxg57hthreeeight +4fivesevenrdfcdrxd4 +bbbrjsjrmn8px +317vncvpdrh91threetwosix +9sevenzpfivethreefivenineseven7 +twodsnvkbvfbtwo62tt6 +threesctkeight3vdjrnflh9nckgmzhdf4 +eightsixtwo39skhnzf +foursix6 +3sixzp5fdzjv +ntwone9xzspfhrthreehsgpqdone62 +five9597tgrfbl9 +six4rvrcbbjzfdcgctsxjxmjrpc4thmmj8 +3sixmdglgdj2zzrkgsdgk2 +cbfxpgftninekthreexvmhxmkx1fourf +76twoone +7six32two1fivefspjtdsix +nrcntbgdtjsevenztsmsgfmfour9thslsmhgnk2three +21ltslbrnineseven7 +41 +sevencdsnmzkspseven49 +jbzkthreebjgvhfhcftwojbzdbmcdlff29 +sevengjlph11fivexhzdrs +fzkznzxgbsfq4 +gvpqjgrfdbdtrpqseven11mmjpkz5 +ksfjpnchqzqone15eightsixfivenine +2skjmpvdfoursixtwones +dmtzhqfivethree3eighteightoneseven +one6fourrrrtkkjvr +229spkrxlg +4xjqzfourdtmq +mkv5six +8jdzlpqvc89two +2foursix69k +xbqrmktzfive4 +five9rjrvcpfbseightfkmlgbvqkbqj +qnmkvkmckfxqmdtwosevendj6sevensixfive +mkdvknghvsgzrbbjqngbsqeight6mjxfivenineq +6two97mxm +two26jjqjs +1scslcns +pckdk4onesevenpnxq8lxxbzvftcbeightl +qczvprdbeight3twosixsevenfivenbzj +462mfgmhfseven4vmv +gqsrhltninethreedbkrjdfivetwo1 +ppsix99nine8qvhbnn48 +nine35fxlxqfctwonezf +four2twofive1 +847dsgonethree1vkmhmtv +8gnfbqmzszxdfkv5five +22kvqd +five1sevenl59 +kgshxdjdfjqzthhplhjqxbjpbxggtz1 +fourbzbzvtfj8twoone6629 +hn28six1 +xqxknfivevxhljqpsixtwo3 +hsconethree1fourthree +three5gnlgcthree36rkvlpkcvronefour +rvjqkndonenine3hbrtlzhcbfbkcfive +hhrmnbnct6rdxxtkxkcrbdfg5 +6xsqkbthreerjgbzfhb +sixnlxzmblfzx5cspjqthree +4twondrxjb +4three6b +4four3three16 +eight3hshdzptsq6twosfour3 +eight37twotrxvpxk2ksbldctj +fourseven8fkmtqzdbfourseven +6vngvcmplx +jhr6gfplmzpr2fourfive +eightnine49twoeight2nfndmmb +three7threej4xnffjtnckltwo +onegzlnjsgzlg82mkbfhtmhfour +85vnseight5fivevcqrgvgrtp +47chxx6pkrdxvmrvvfxbl5 +34ctkstrjxsnfourseven +two9zcrghthreethree +veight37 +two44nine449 +58eight98cspxfhftvx +cxpththree7pbmhhmkfzfvthree +8nine2hbmdnvbthree +1four6ncdvzqjqhx1 +1bgqspl958lrj +7nvmqrnthreejbzgnzvzpgkr69 +7576threesix +twoc83pt +fourkdnsvcq9sevendmhsdgt54threej +zrjts8sixsix237flm +8eightrndfour +two9jsix5gcxf +fivefour7nineseven1qtcdqbp1four +fourzvkqhdninetwoftscrmsd64nxsgx +q1tdsskthree +mkhttggvjh9ctzffdqdjnheightninegmxqxhqrfqgbgzt +ninep2fourf +fiveeight2zxjpzffvdsevenjhjvjfiveone +15737seven +pdrss6oneone4fournine +7b diff --git a/input/day_02 b/input/day_02 index 7370319..ababd44 100644 --- a/input/day_02 +++ b/input/day_02 @@ -1,1000 +1,100 @@ -9 12 14 16 17 18 15 -86 88 91 94 95 95 -15 18 20 21 23 25 28 32 -70 72 74 77 78 83 -57 60 62 64 63 64 65 -44 45 44 47 46 -33 35 32 33 36 36 -83 86 88 89 87 88 90 94 -56 59 62 65 68 65 68 75 -36 39 40 40 43 -87 90 93 95 95 97 94 -90 91 92 92 95 95 -11 14 14 15 16 19 23 -35 37 39 39 44 -59 61 63 67 68 69 -86 87 91 92 91 -33 36 38 39 43 44 47 47 -82 84 86 89 93 94 98 -4 5 7 10 13 17 24 -51 54 60 63 64 67 68 -38 40 43 45 51 54 56 53 -8 9 10 15 16 17 17 -24 26 33 34 38 -61 62 64 66 68 74 80 -44 43 46 48 49 50 51 53 -5 2 5 8 6 -12 11 14 16 17 18 18 -3 1 3 4 7 9 13 -60 58 59 62 63 70 -45 44 41 42 43 44 46 -12 11 13 12 15 13 -56 53 50 52 53 53 -70 69 72 69 70 71 72 76 -53 51 54 57 55 58 64 -26 24 26 28 28 29 31 33 -33 32 35 35 38 40 43 42 -82 81 81 82 85 86 86 -49 47 47 50 51 55 -39 36 36 39 40 41 48 -65 62 66 67 70 72 75 -20 18 22 24 26 23 -53 51 53 57 60 63 65 65 -22 20 23 26 29 33 37 -47 46 48 51 55 56 63 -55 53 60 63 65 -36 35 36 39 40 47 44 -3 2 3 4 9 9 -55 54 61 64 65 69 -17 16 19 24 26 28 29 34 -87 87 90 92 94 -66 66 68 70 72 69 -69 69 71 72 75 77 77 -74 74 77 78 82 -84 84 85 86 88 95 -55 55 57 58 59 60 59 62 -94 94 95 93 95 94 -38 38 41 38 40 40 -69 69 70 73 76 79 76 80 -4 4 6 3 8 -74 74 74 77 78 -34 34 34 37 36 -55 55 55 57 58 60 62 62 -37 37 39 40 40 41 44 48 -50 50 53 55 56 56 57 64 -11 11 12 16 17 -3 3 6 9 10 14 15 13 -71 71 74 76 80 82 85 85 -2 2 3 6 8 12 14 18 -86 86 87 91 93 94 99 -61 61 62 69 70 71 -61 61 64 71 74 76 79 78 -82 82 84 90 93 94 94 -72 72 73 75 82 83 87 -8 8 11 17 23 -7 11 14 15 17 18 -19 23 25 27 28 30 31 30 -63 67 70 72 74 76 78 78 -51 55 57 60 63 67 -42 46 48 50 53 55 62 -16 20 21 24 27 29 26 27 -37 41 40 42 45 48 46 -90 94 97 99 96 96 -43 47 48 50 52 51 55 -76 80 83 86 83 86 87 93 -81 85 85 88 90 -21 25 25 27 30 29 -11 15 15 17 17 -80 84 84 85 86 88 91 95 -3 7 7 8 14 -24 28 32 33 36 39 -57 61 65 66 68 70 72 70 -9 13 14 18 21 24 24 -28 32 34 35 37 41 42 46 -56 60 64 65 72 -5 9 14 16 17 19 21 -40 44 47 48 49 54 53 -50 54 57 64 64 -7 11 17 18 22 -67 71 73 78 80 82 85 92 -28 34 36 38 40 42 43 45 -69 76 79 82 79 -53 60 63 66 67 70 70 -51 57 60 61 62 66 -78 84 87 88 91 97 -87 92 90 93 94 -31 37 36 39 40 41 38 -2 8 9 12 11 11 -78 85 87 86 88 90 93 97 -27 32 30 33 35 38 40 46 -48 55 58 61 63 63 66 -78 85 88 88 89 88 -52 59 62 64 65 65 65 -52 58 59 62 65 65 69 -33 40 43 43 46 51 -6 12 14 18 20 -51 56 60 63 61 -18 23 24 28 29 31 31 -5 12 13 17 18 19 23 -64 70 73 77 82 -61 66 71 72 74 75 76 -11 16 23 26 29 30 28 -70 77 78 84 84 -57 62 65 72 76 -20 25 28 29 35 38 40 46 -84 81 78 75 73 76 -13 10 8 7 4 4 -12 11 10 9 7 3 -99 97 94 93 86 -95 94 92 94 93 91 90 87 -13 11 9 7 8 5 7 -32 30 28 29 29 -94 92 91 90 91 90 86 -65 62 59 61 59 54 -36 34 34 31 30 28 -53 50 49 46 43 42 42 43 -91 88 85 83 83 80 80 -75 72 70 70 68 65 61 -9 7 7 6 1 -87 84 82 78 75 -46 45 41 39 36 33 31 34 -91 88 86 83 80 77 73 73 -66 64 62 59 58 56 52 48 -33 31 29 28 24 18 -78 75 73 72 65 64 -20 17 15 8 11 -55 53 50 44 44 -46 44 43 37 33 -98 96 90 89 88 86 79 -69 71 69 66 63 -31 33 30 27 30 -91 92 90 87 86 83 81 81 -82 84 82 81 77 -53 55 53 51 46 -38 41 44 41 40 -95 97 96 94 97 94 93 96 -32 33 30 33 33 -46 48 47 49 45 -83 85 84 81 79 82 75 -77 78 77 77 76 -11 12 12 11 8 5 8 -81 82 82 81 78 76 76 -92 95 92 91 89 89 86 82 -21 22 19 18 18 15 14 9 -37 38 34 31 29 -28 31 28 24 22 20 17 20 -42 44 42 41 40 36 33 33 -67 68 64 61 57 -73 74 70 69 67 60 -79 80 78 76 75 69 66 64 -80 83 76 75 73 70 72 -96 97 92 89 89 -44 47 45 39 38 35 31 -68 70 67 65 58 57 52 -51 51 50 47 46 45 42 39 -53 53 50 47 45 43 46 -66 66 65 63 61 58 58 -49 49 46 44 40 -17 17 16 14 13 6 -66 66 65 62 64 61 -57 57 55 56 55 58 -95 95 94 96 96 -65 65 67 65 64 62 58 -35 35 32 33 32 25 -57 57 57 54 52 51 50 49 -47 47 47 45 42 45 -42 42 42 39 39 -54 54 53 51 51 47 -19 19 19 16 11 -56 56 54 50 48 45 -80 80 77 76 75 74 70 73 -90 90 88 85 84 82 78 78 -29 29 28 24 20 -88 88 85 84 83 82 78 72 -18 18 12 9 8 6 4 -18 18 12 10 12 -98 98 95 90 89 86 84 84 -41 41 39 34 30 -98 98 97 95 93 87 82 -96 92 90 87 84 -65 61 58 57 54 53 54 -38 34 32 30 28 25 22 22 -93 89 86 85 81 -58 54 52 51 50 45 -86 82 80 79 76 75 76 74 -54 50 47 49 52 -57 53 52 49 50 48 48 -64 60 57 58 55 51 -56 52 53 50 43 -90 86 85 84 84 82 -66 62 61 59 58 58 59 -86 82 81 81 78 75 75 -63 59 56 56 55 54 52 48 -86 82 79 79 78 75 70 -49 45 44 40 37 36 -95 91 87 84 82 79 76 77 -65 61 59 58 56 52 51 51 -56 52 50 46 44 41 37 -19 15 14 10 9 3 -95 91 85 84 81 -16 12 5 3 5 -95 91 84 83 82 79 76 76 -65 61 60 55 51 -72 68 67 66 59 52 -64 59 57 55 54 52 50 48 -98 91 89 88 86 85 82 83 -32 26 23 20 17 14 14 -88 81 78 76 73 69 -66 61 58 56 53 52 50 45 -63 58 59 57 55 53 -35 29 26 24 26 29 -45 40 41 39 38 37 35 35 -63 58 57 60 57 53 -37 31 30 28 27 24 25 19 -61 56 53 53 51 49 -29 22 21 20 20 18 15 17 -75 68 67 64 64 63 63 -92 85 83 82 82 81 77 -35 29 26 24 24 21 16 -40 35 34 30 27 26 25 -40 33 32 28 27 30 -25 19 17 13 13 -32 26 25 21 17 -87 80 77 76 72 71 65 -67 60 57 52 49 -22 17 11 8 10 -96 90 87 81 81 -40 33 31 30 28 26 20 16 -65 58 55 50 48 45 44 37 -75 75 77 80 85 87 88 85 -93 94 96 93 93 -9 16 13 14 14 -79 79 78 79 79 -20 19 22 23 27 28 30 -26 22 20 13 12 8 -71 64 63 57 56 53 50 50 -60 62 63 63 67 -43 38 37 35 34 37 34 -64 60 59 61 58 57 54 48 -19 14 13 11 11 -89 87 91 94 94 -3 7 10 11 14 19 21 20 -91 90 93 91 91 -26 26 24 20 17 16 -57 53 51 49 47 46 47 -35 32 29 31 28 27 20 -15 15 16 18 21 21 -18 22 23 23 26 26 -29 31 33 34 38 40 41 38 -25 19 16 12 5 -57 54 56 56 61 -7 14 17 21 23 -52 57 62 63 64 67 70 74 -79 75 73 74 77 -55 52 54 55 56 53 -56 55 52 51 51 48 48 -58 60 58 61 59 -84 86 83 77 75 -32 32 33 33 37 -54 50 47 40 40 -43 40 44 47 51 -58 58 60 61 64 65 65 72 -85 88 86 85 82 81 80 73 -42 47 49 50 52 56 55 -12 12 11 11 9 4 -22 26 30 32 35 32 -80 73 72 74 73 71 67 -22 20 17 17 13 -77 72 69 68 61 -75 74 77 79 79 79 -28 32 34 38 41 43 45 -30 30 27 25 24 22 22 18 -34 37 35 33 31 31 -73 77 80 84 90 -55 50 52 50 47 45 39 -89 85 83 79 78 81 -30 34 37 39 41 42 44 47 -26 26 25 25 23 23 -45 38 35 33 30 28 26 25 -73 77 79 79 83 -86 82 82 81 74 -29 32 30 25 18 -30 30 25 23 19 -19 12 13 11 11 -92 88 85 82 79 80 78 74 -65 64 65 68 71 74 77 77 -13 13 13 10 9 12 -74 75 77 80 82 88 86 -34 35 34 32 31 31 28 29 -17 11 9 9 7 -34 38 37 39 41 -50 49 46 46 45 42 39 42 -13 19 20 23 24 27 27 25 -33 40 45 46 46 -21 27 29 30 31 33 33 -81 74 71 65 63 61 60 -74 78 81 83 90 94 -21 21 14 11 4 -70 70 69 65 63 56 -46 50 51 51 54 57 58 57 -52 58 60 61 62 64 64 65 -42 42 36 33 32 29 28 31 -74 75 74 72 75 73 71 67 -62 62 64 67 74 75 78 85 -79 75 72 71 70 68 -53 58 59 56 57 58 61 -85 82 85 86 86 83 -4 6 8 6 6 -27 28 35 38 41 42 43 43 -94 92 90 91 90 87 86 82 -34 34 35 35 37 39 36 -18 19 20 19 16 14 -62 67 70 73 74 78 78 -64 70 75 78 81 -58 58 61 60 59 52 -85 79 75 72 68 -68 68 71 68 65 62 59 55 -75 76 74 68 66 65 65 -43 47 51 54 54 -56 59 57 53 50 48 -33 37 38 38 43 -84 79 72 70 64 -67 65 68 70 69 68 -23 22 23 24 29 -18 24 25 26 26 33 -11 16 20 22 23 26 27 31 -68 68 67 66 64 -44 38 38 37 37 -62 58 58 55 53 50 52 -11 14 15 15 18 21 21 -36 39 41 40 38 41 -42 46 49 53 54 55 57 61 -49 47 44 45 48 51 53 57 -62 68 70 71 73 -32 32 33 39 41 43 44 44 -85 82 86 89 87 -20 24 25 32 35 42 -73 73 75 77 80 84 87 93 -64 64 66 68 70 69 73 -29 27 25 22 21 19 15 9 -25 26 27 29 33 36 39 -14 19 20 22 25 27 26 -55 57 54 54 51 50 -41 34 31 29 25 -44 44 41 39 38 37 40 42 -15 13 15 16 17 20 21 24 -3 5 6 7 12 15 -13 13 15 18 21 26 30 -61 58 61 67 71 -11 8 11 14 20 22 22 -53 53 55 57 60 63 -61 59 54 53 50 48 44 -50 43 39 36 37 -53 52 51 50 46 44 42 -54 50 48 45 43 39 -65 65 62 61 59 57 53 -96 96 95 93 91 90 84 -42 44 48 51 57 -82 80 80 83 87 -78 78 82 85 88 -18 22 25 26 24 26 28 28 -17 17 20 24 25 26 27 31 -81 80 79 77 73 -35 33 29 26 25 23 24 -81 77 74 68 70 -51 53 50 49 51 46 -19 23 24 26 30 -36 36 35 34 32 32 -6 9 9 12 10 -24 22 16 14 11 9 9 -23 20 18 15 13 10 7 8 -70 71 78 79 83 -66 71 74 77 80 87 84 -31 35 38 36 39 40 43 42 -65 63 64 65 70 72 -25 25 23 19 17 14 11 13 -25 31 32 33 36 35 39 -87 83 82 80 80 -45 49 51 53 56 59 59 -84 82 79 77 76 76 -39 45 46 47 50 55 60 -16 16 14 17 19 20 23 -37 35 38 40 42 40 41 41 -82 82 85 87 89 90 94 94 -12 14 13 10 9 -63 67 69 71 73 74 71 -15 19 22 24 22 24 28 -82 82 83 89 90 91 94 95 -42 41 39 36 33 32 26 28 -10 13 14 17 17 22 -85 85 86 84 85 85 -62 57 57 56 51 -91 85 84 84 82 84 -64 65 66 69 72 74 79 -64 57 56 50 48 44 -29 29 29 27 24 22 -99 95 94 92 89 87 83 82 -79 83 85 87 94 96 97 -95 91 88 84 83 80 79 72 -86 86 84 85 84 -83 86 85 81 76 -30 29 28 26 22 19 15 -67 63 62 64 64 -6 6 10 13 14 11 -54 53 50 52 58 -37 36 36 35 33 30 27 21 -86 87 85 82 81 79 76 78 -46 50 53 56 59 65 -76 78 81 85 88 92 -62 58 57 55 54 54 50 -57 57 59 61 62 61 -83 79 78 75 74 68 66 59 -56 52 48 47 44 44 -54 50 48 46 43 43 42 -15 14 15 16 17 19 22 26 -72 73 68 67 64 63 62 58 -12 19 20 22 26 28 29 36 -26 33 30 32 35 41 -27 29 31 32 33 37 -64 64 62 61 57 54 51 51 -54 61 61 62 66 -59 63 66 71 73 76 79 79 -95 88 86 84 83 82 78 75 -61 62 61 61 61 -61 58 57 51 50 48 -39 35 38 36 34 -44 44 47 50 52 54 56 60 -42 40 38 35 32 26 -30 27 24 21 22 20 23 -19 19 22 24 27 28 34 -49 50 47 46 42 42 -82 77 79 78 76 77 -2 1 3 3 4 5 6 -77 77 76 74 69 67 66 64 -49 50 53 54 56 58 58 -83 86 84 82 78 77 74 75 -60 54 50 49 47 46 44 44 -49 48 47 47 44 42 39 36 -77 73 73 70 67 67 -31 27 22 19 18 -64 60 58 56 54 49 -62 66 68 68 70 73 75 -89 94 95 97 99 99 99 -51 53 49 47 46 43 39 -8 10 11 12 17 18 25 -87 88 90 93 91 92 95 99 -70 70 71 68 70 73 80 -57 55 61 64 62 -58 59 61 64 62 64 -26 28 30 31 33 31 -67 71 74 75 74 81 -33 34 33 31 30 28 24 -42 35 33 31 29 27 25 27 -24 22 21 17 17 -70 63 62 62 60 56 -33 35 35 38 39 40 -2 2 4 4 5 5 -43 43 41 40 36 33 29 -85 85 86 86 89 92 95 -26 32 29 32 34 36 33 -26 27 30 28 34 -51 54 54 51 50 48 44 -71 71 65 62 59 59 -58 53 48 45 44 46 -97 93 91 87 84 80 -11 10 13 14 15 16 23 28 -43 48 51 52 57 -43 42 44 48 50 56 -58 63 64 65 66 69 70 74 -80 79 76 73 68 61 -4 4 7 4 3 -82 81 80 78 77 -81 84 87 89 90 91 -67 64 62 61 58 56 53 50 -84 82 80 77 76 -70 71 73 74 77 78 81 82 -24 26 27 29 30 32 -32 30 28 26 25 23 21 20 -36 38 39 41 43 -32 29 26 25 23 22 19 18 -40 37 34 33 32 31 29 -81 84 85 87 89 -20 22 23 25 28 -53 50 49 48 47 -48 49 50 53 55 56 -18 17 14 13 12 9 6 4 -14 12 9 8 5 4 3 -9 10 11 12 13 16 18 -50 48 47 45 44 41 40 37 -46 48 50 52 53 -21 20 19 18 16 -28 26 23 21 19 -82 80 79 76 73 72 70 -70 69 66 65 64 63 -83 86 87 90 92 95 -46 49 52 55 58 59 62 63 -30 27 24 22 19 18 16 -19 17 14 12 11 9 -48 51 54 55 56 59 61 63 -17 16 15 14 12 11 -71 68 66 64 63 61 59 -74 73 72 69 66 64 61 60 -38 39 41 42 44 -38 35 32 31 29 -53 52 51 48 46 44 41 39 -23 22 20 17 15 14 -39 38 37 35 32 30 27 24 -60 59 57 54 52 49 -34 37 39 40 42 -76 79 82 85 88 -65 62 59 57 55 53 52 51 -20 22 24 27 28 31 33 36 -76 79 81 83 85 86 -37 34 32 30 27 24 23 -41 42 44 45 47 50 -6 8 9 10 11 12 -51 53 55 56 59 -65 62 60 58 57 55 54 52 -7 8 11 13 16 19 20 22 -49 46 45 44 42 -50 53 55 58 60 63 65 68 -63 60 58 57 54 -9 11 14 17 20 21 22 -37 36 35 32 31 30 29 28 -82 79 76 73 70 67 66 64 -8 11 12 15 18 20 -78 79 80 82 85 86 -96 93 90 89 88 86 84 -69 72 75 76 77 79 82 -50 47 44 43 42 41 38 35 -67 69 70 73 74 75 77 -52 53 55 58 59 -23 25 28 31 33 35 38 -77 78 79 80 82 83 -91 89 87 84 81 -17 14 11 8 6 -40 43 44 47 49 51 52 53 -62 65 68 69 71 74 76 -34 36 38 40 42 44 -86 83 80 79 76 73 72 -82 83 84 87 90 92 94 97 -14 15 16 17 18 19 20 -77 80 83 84 87 88 -80 77 75 72 70 69 67 66 -44 42 40 38 36 -39 40 41 44 46 48 -17 15 13 12 9 -54 56 57 60 63 -86 89 91 93 96 -36 33 31 29 27 25 23 21 -66 63 60 59 56 53 52 49 -79 81 83 86 89 90 91 -36 35 32 31 29 28 26 24 -80 82 83 85 87 -45 48 51 52 55 57 58 61 -90 89 88 86 83 80 -28 29 31 32 34 36 37 -7 10 11 13 15 -78 81 84 87 89 90 91 92 -73 74 77 80 82 83 -94 93 92 90 87 86 83 80 -72 73 75 78 81 82 84 86 -2 3 4 7 8 -77 79 80 81 82 83 -67 66 65 62 59 56 55 53 -37 38 41 43 46 47 -57 59 62 65 67 -78 80 81 83 86 88 90 -12 15 16 17 18 20 23 25 -59 58 57 55 53 51 -80 82 84 85 87 90 -60 61 62 64 66 68 69 70 -99 96 94 91 90 -80 77 76 74 72 71 69 -44 45 48 51 53 54 56 -22 23 25 26 29 30 -40 39 36 34 32 -11 10 7 6 5 -46 49 50 52 55 57 -83 85 88 90 93 -57 58 60 63 66 -76 78 81 82 85 -5 7 8 10 11 13 15 16 -24 25 26 28 30 32 34 -53 54 55 57 59 -34 37 38 41 43 46 47 49 -68 70 73 74 77 79 -41 39 36 35 33 30 27 26 -62 59 58 56 53 52 49 -27 25 24 22 20 -3 6 9 11 14 17 18 -51 48 45 43 41 40 38 36 -99 98 97 95 92 90 87 -22 19 18 16 14 11 8 -13 15 18 21 24 26 27 -75 73 72 71 68 65 -97 95 92 91 88 -65 66 69 71 72 73 74 -46 48 49 52 55 58 -43 42 40 39 37 35 33 31 -19 18 15 13 12 11 10 7 -63 66 68 70 73 75 -60 62 65 68 71 72 73 75 -97 96 93 91 88 86 -74 75 77 80 81 82 -52 53 56 57 59 60 61 63 -16 19 20 23 25 -44 43 40 39 37 35 -25 23 22 20 19 17 14 -22 20 19 17 16 15 12 10 -32 30 28 27 24 -44 45 48 51 52 53 54 56 -71 72 75 78 80 -65 67 70 71 73 75 77 79 -25 27 29 32 35 37 39 42 -66 64 61 60 59 -65 64 61 60 59 57 -72 71 68 66 65 62 -68 71 74 75 76 77 -19 16 13 11 9 -48 45 43 42 40 38 37 -51 48 47 46 45 42 40 39 -43 44 47 48 49 52 55 -86 83 82 80 78 -80 78 75 72 70 -70 67 64 63 62 59 56 55 -96 94 92 89 88 -83 84 85 88 89 91 -80 81 82 83 85 88 90 -36 37 39 41 44 45 -41 43 44 45 47 48 51 -62 65 68 70 72 75 77 80 -83 84 87 88 89 92 95 -34 37 40 43 45 47 -62 60 58 56 54 -81 83 84 87 89 90 93 -98 96 95 93 92 91 89 -28 31 33 34 35 36 39 41 -35 34 32 30 29 -75 73 70 68 66 64 62 59 -17 18 21 24 25 27 30 32 -31 33 34 36 39 -67 66 65 63 62 59 -45 47 50 53 54 -8 9 11 13 15 16 -22 20 17 15 14 13 11 -81 84 87 89 90 -54 56 58 59 60 61 63 -51 52 55 57 59 62 65 67 -73 76 78 79 81 83 86 89 -94 93 90 89 88 -30 31 32 33 36 38 40 -46 44 41 40 38 35 -66 64 62 61 58 56 54 -14 16 19 22 24 -55 58 60 61 63 66 69 72 -67 66 65 63 61 58 55 -55 57 60 62 64 67 70 -25 28 31 33 35 37 -98 97 95 93 91 90 -58 61 63 65 67 69 70 -75 74 72 69 66 -71 74 75 78 79 80 81 -13 16 18 20 22 25 26 28 -84 86 87 89 92 -10 11 12 15 18 21 23 26 -91 88 86 83 81 78 76 -62 63 64 67 69 72 -32 31 30 27 24 21 20 17 -49 51 52 55 56 58 60 -76 77 79 82 83 86 -76 77 79 80 81 83 85 88 -17 20 22 25 26 29 31 -62 59 57 56 53 -12 10 7 6 5 4 3 -65 64 63 60 57 56 54 -90 91 92 95 97 98 -21 24 25 27 28 29 31 -33 34 37 38 40 -16 15 12 9 7 -71 73 75 78 79 -94 91 90 88 85 82 -80 77 75 72 69 -80 82 83 86 87 89 91 94 -89 91 92 94 95 98 -60 58 55 52 49 46 -44 45 47 49 52 55 -66 65 64 62 59 56 54 51 -49 50 51 52 53 54 56 -15 12 9 7 5 4 1 -19 17 16 14 11 8 -29 28 27 25 22 21 19 -23 20 18 15 13 10 -19 22 25 28 29 32 -55 53 52 51 48 47 45 44 -15 17 20 22 24 25 26 -52 53 56 58 59 62 65 67 -79 80 82 84 85 88 91 -3 6 7 8 11 12 13 16 -21 23 24 27 30 31 -37 40 41 42 43 45 47 50 -66 67 68 69 72 -51 52 53 54 55 -33 34 37 40 41 42 45 -85 84 83 80 77 -54 51 49 46 45 44 -96 93 91 90 87 84 81 80 -82 80 79 78 77 74 71 69 -49 47 46 43 41 40 39 -25 24 22 21 18 -98 95 93 92 89 -35 36 39 41 42 44 -45 44 42 39 38 35 34 31 -68 70 71 74 76 77 80 82 -44 46 48 49 52 55 -87 86 83 80 78 76 -78 76 75 72 70 69 67 65 -56 59 61 62 63 66 69 -64 66 67 68 69 -78 80 82 85 88 90 93 96 -85 88 89 91 93 95 98 99 -33 34 36 38 39 -34 33 31 30 27 25 23 20 -16 15 13 12 9 7 6 -62 59 57 56 55 -72 71 68 65 64 61 60 -6 7 8 10 11 14 17 -78 79 80 83 84 87 88 91 -66 69 70 72 75 76 77 79 -99 96 95 93 92 90 87 84 -4 6 8 11 12 14 16 -39 36 35 32 30 29 -93 91 88 85 84 -31 33 34 36 38 40 43 -59 56 55 54 53 50 47 44 -14 16 18 21 24 27 30 31 -33 30 28 26 24 -83 82 79 76 73 -44 41 40 39 38 37 36 33 -5 6 9 11 14 16 17 19 -11 12 15 16 18 20 23 -33 31 30 28 25 22 20 -43 42 40 39 37 34 31 29 -1 4 7 8 10 13 -30 32 34 35 37 39 -37 39 42 45 46 49 51 52 -72 75 77 78 79 80 82 -85 83 80 77 76 74 72 70 -60 57 56 54 52 51 -62 61 60 57 54 -85 82 80 78 75 -42 45 47 48 50 51 52 54 -40 42 43 46 47 50 -44 47 49 50 51 -42 45 47 48 49 52 53 -24 26 28 29 31 33 -28 25 23 22 19 16 -14 13 11 9 6 3 1 -68 66 63 60 57 56 54 51 -3 4 5 8 11 14 16 -41 43 44 45 48 50 53 55 -62 64 67 70 72 74 76 -16 13 11 10 7 5 3 1 -87 86 83 82 79 -26 29 30 32 35 36 37 -58 61 62 64 67 -83 82 79 76 73 70 -65 67 69 70 72 73 75 77 -64 65 66 67 69 71 -1 3 5 7 9 -51 53 54 55 58 61 -19 16 15 13 11 10 7 5 -82 79 76 74 71 68 67 64 -32 30 28 27 25 22 20 -71 72 73 76 78 81 -45 43 40 38 37 35 34 31 -35 34 32 31 28 -16 17 18 21 22 25 28 29 -24 23 22 21 18 17 16 13 -54 56 59 60 63 66 68 -56 59 61 64 65 -63 62 59 56 54 -43 45 48 50 52 55 56 -80 77 76 75 73 71 -35 36 39 42 45 47 49 -6 9 12 15 18 20 23 -71 73 76 77 80 83 85 -57 59 61 63 64 67 68 70 -30 28 25 22 21 18 15 14 -70 67 64 63 61 58 57 -26 24 21 20 18 17 15 13 -60 59 56 54 51 48 47 45 -93 95 96 98 99 -91 88 86 84 81 80 79 76 -12 10 9 6 3 -22 19 16 15 14 11 8 -40 39 38 35 32 -64 62 60 58 56 55 -31 33 35 38 40 42 -18 17 14 11 9 6 5 2 -82 85 87 88 90 91 -65 64 61 58 57 54 -28 30 32 33 34 35 38 -58 55 54 51 50 47 45 42 -31 30 28 25 22 19 18 -53 55 56 59 61 -16 15 13 10 8 5 3 1 -34 37 40 43 45 47 50 53 -38 35 34 31 29 -20 17 16 14 11 -27 24 21 20 18 -79 80 83 84 87 88 89 -30 29 26 24 22 21 -47 50 53 56 58 61 -77 74 72 69 66 -78 77 75 72 70 67 65 64 -79 77 74 73 70 69 67 64 -54 56 58 59 61 64 -87 85 82 80 79 -59 60 63 65 68 71 72 -82 83 86 89 91 94 97 98 -15 14 12 9 7 6 4 3 -24 25 27 29 31 32 35 -68 65 64 61 58 57 -31 34 36 38 40 41 -49 51 52 55 56 58 61 64 -15 14 13 10 7 -88 87 86 84 82 80 79 78 -60 61 64 65 68 69 -90 92 94 97 99 -62 64 66 68 70 72 73 74 -34 35 36 38 41 43 45 -25 27 29 30 31 33 34 -80 81 82 84 85 86 -22 19 16 15 13 11 10 -45 48 49 52 53 54 57 -60 57 55 52 51 48 45 -95 92 89 88 86 84 -51 50 48 46 43 40 39 -60 58 57 55 53 50 47 -69 67 65 63 60 57 -37 40 42 43 44 46 49 51 -11 14 16 18 21 22 25 -51 48 46 45 44 41 40 -80 81 82 84 87 90 -46 44 42 40 37 35 32 29 -62 63 65 67 68 71 74 -5 7 8 11 13 16 19 20 -19 16 13 10 9 -45 48 49 51 53 54 55 56 -3 4 5 6 8 11 12 15 -44 47 48 51 54 57 60 -83 82 80 77 74 72 71 68 -69 68 65 63 62 61 59 56 -14 11 8 6 4 -82 83 86 87 90 92 -62 59 57 56 55 54 53 -64 65 67 70 72 75 -48 47 44 42 41 40 38 36 -26 25 23 20 19 16 -61 59 58 55 54 52 -70 73 75 76 77 78 79 -68 71 72 74 77 78 80 83 -69 70 71 72 75 76 78 80 -84 85 87 90 91 94 96 99 -2 3 5 8 9 -27 29 31 33 34 37 38 -65 63 61 58 57 56 -59 57 54 53 51 49 -46 47 49 51 54 57 -66 68 70 72 74 77 80 81 -55 53 51 48 46 43 -84 83 80 79 76 75 73 -60 63 66 68 71 72 74 77 -82 84 85 86 88 89 91 -51 53 55 58 61 62 65 66 -55 57 59 61 64 65 -41 42 44 47 48 50 -67 64 63 61 59 58 55 52 -20 22 25 26 28 31 32 -32 35 38 41 43 46 -13 10 9 8 6 3 1 -31 28 27 26 23 20 -61 60 59 57 55 -77 80 83 86 89 90 -29 26 25 22 19 -32 34 37 39 42 43 -76 74 73 71 69 66 -23 26 28 29 32 34 36 37 -34 33 32 30 29 27 24 22 -62 59 57 56 55 52 49 46 -63 62 60 58 57 54 -52 54 57 60 62 65 -1 4 5 6 7 -8 9 12 15 17 19 21 -16 18 21 23 26 29 -72 69 68 67 65 62 60 59 -51 50 47 45 44 41 40 39 -27 24 22 19 18 17 -21 22 24 27 28 31 33 -84 83 80 79 78 76 74 73 -84 85 86 88 90 92 93 -38 39 41 44 47 49 52 -3 6 9 10 13 14 15 -14 12 11 9 6 4 -79 77 74 71 69 67 66 64 -55 54 53 50 49 47 45 -54 55 56 58 60 62 63 65 -41 44 45 48 49 52 -75 77 78 79 81 83 86 -55 57 58 59 61 63 -97 96 94 93 90 87 -78 80 82 84 85 88 89 91 -57 54 51 50 48 47 45 43 -66 65 63 60 59 56 -26 24 23 22 19 17 16 14 -46 43 40 39 37 -71 69 66 63 61 -68 66 64 61 58 55 53 51 -68 65 63 60 58 57 55 -65 68 69 72 74 76 77 79 -82 81 78 75 72 69 66 65 -79 76 73 71 68 67 66 -21 23 24 25 26 -39 36 34 31 30 28 25 24 -6 9 10 12 15 16 -33 30 27 25 23 20 19 16 -46 48 50 52 54 -75 77 79 81 84 85 86 89 -83 84 85 87 88 90 93 -43 45 46 48 51 54 56 58 -29 32 35 38 40 -29 27 26 24 22 -41 38 35 33 30 27 26 -42 43 45 48 50 51 54 55 -93 91 90 89 88 85 83 -10 13 15 17 20 -62 64 67 68 69 -18 17 15 13 10 8 7 -44 46 49 51 54 -41 40 37 34 31 29 -89 92 94 96 97 99 -81 79 76 73 71 69 66 63 -46 49 52 55 58 60 61 63 -40 41 43 44 46 48 -67 69 72 73 75 76 77 -90 87 85 84 81 -8 7 4 2 1 -35 36 37 39 41 43 -72 74 75 76 77 78 80 -87 84 83 80 78 75 73 -78 80 82 85 88 90 91 -57 54 52 51 49 48 45 42 -30 33 34 36 39 40 43 -52 55 58 60 62 64 -72 69 67 66 64 63 -98 95 92 90 88 87 85 82 -96 94 91 89 87 86 -42 41 38 36 34 32 29 28 -73 76 79 82 85 87 -30 32 33 36 39 41 42 -75 72 69 68 67 66 65 64 -94 93 90 87 86 84 -32 34 36 38 40 43 46 -29 26 25 24 21 -89 92 93 94 95 97 -69 72 74 75 77 78 79 81 -77 74 73 72 70 69 -67 65 62 60 59 -11 13 15 17 18 21 22 -21 19 16 15 12 9 6 3 -90 87 85 83 80 78 75 -27 30 31 34 35 36 38 -54 55 57 58 60 62 65 67 -38 41 44 46 49 -24 25 26 29 32 -80 79 76 73 72 -73 70 68 65 63 61 58 -28 26 23 20 17 16 14 -36 34 31 28 26 23 -66 64 63 62 59 58 +Game 1: 2 green, 6 blue, 7 red; 12 green, 6 blue, 3 red; 5 red, 18 green, 4 blue +Game 2: 10 green, 4 red; 2 red; 12 green, 11 red, 1 blue; 1 blue, 11 red, 5 green; 10 red, 9 green, 1 blue +Game 3: 3 green; 15 red, 7 blue, 1 green; 3 red, 6 blue, 1 green; 14 blue, 13 red, 2 green; 1 green, 6 blue, 6 red; 16 red, 13 blue, 2 green +Game 4: 5 blue; 8 blue, 7 red; 9 blue, 5 red, 4 green; 4 red, 1 green; 8 red, 6 blue; 2 blue, 4 red, 3 green +Game 5: 3 blue, 4 red, 10 green; 13 green, 8 blue, 2 red; 2 red, 4 green, 6 blue; 3 blue, 5 green, 2 red; 4 red, 13 blue, 8 green; 9 green, 2 red +Game 6: 3 red, 2 blue; 6 green, 13 blue; 11 blue, 1 red; 4 green, 3 red, 5 blue +Game 7: 14 green, 2 red, 5 blue; 4 blue, 8 green; 2 red, 2 green, 9 blue +Game 8: 10 green, 6 blue; 3 green, 4 red; 7 blue, 7 red, 5 green; 1 red, 11 green; 3 blue, 2 red, 11 green +Game 9: 4 blue, 1 green, 6 red; 5 red, 5 blue; 1 blue, 7 red; 4 red, 8 blue; 6 red +Game 10: 3 green, 7 blue, 6 red; 1 red, 5 blue; 6 red; 1 red, 5 green, 6 blue; 5 red, 2 blue; 6 red, 4 blue, 6 green +Game 11: 8 red, 6 blue, 6 green; 5 blue, 2 red, 5 green; 4 blue, 5 green; 4 blue, 3 red, 8 green +Game 12: 5 green, 1 red, 7 blue; 1 red, 10 green; 6 red, 3 green, 7 blue; 5 red, 6 blue, 7 green; 3 blue, 4 green; 1 red, 3 blue, 3 green +Game 13: 11 red, 9 blue, 16 green; 1 red, 3 green, 3 blue; 14 green, 2 red, 7 blue +Game 14: 4 red, 8 blue, 12 green; 7 blue, 4 red, 2 green; 4 blue, 7 green, 6 red; 3 red, 11 blue, 12 green +Game 15: 6 red; 3 red, 5 blue; 3 red, 10 blue, 1 green; 2 green, 8 red, 2 blue +Game 16: 2 green, 4 red, 6 blue; 2 green, 16 blue, 2 red; 13 blue, 7 green, 3 red +Game 17: 5 blue; 1 blue; 2 red, 2 green, 4 blue; 6 blue, 4 green, 2 red +Game 18: 3 red; 7 green, 11 red, 6 blue; 6 red, 3 blue, 12 green; 5 red, 3 blue; 7 green, 8 red, 9 blue +Game 19: 2 green, 13 blue; 11 blue, 16 red, 7 green; 13 blue, 10 green, 8 red; 18 red, 1 green, 14 blue +Game 20: 10 red, 6 green; 1 blue, 6 red, 15 green; 15 green, 9 red, 3 blue; 3 blue, 11 red, 9 green; 2 blue, 5 red, 10 green +Game 21: 1 green, 5 red, 8 blue; 4 red, 6 green, 7 blue; 13 blue, 10 green, 6 red; 9 blue, 2 red, 14 green; 16 green, 10 blue, 1 red; 9 blue, 3 red, 11 green +Game 22: 4 blue; 1 green, 1 red, 16 blue; 15 blue, 1 red +Game 23: 2 blue, 6 green; 15 green, 2 blue, 10 red; 1 green, 6 blue, 6 red; 8 red, 1 green; 4 green, 3 blue, 10 red; 7 red, 3 blue, 20 green +Game 24: 1 red, 13 blue, 8 green; 3 blue, 7 red, 8 green; 3 red, 11 green, 12 blue; 7 green, 6 blue, 2 red; 11 blue, 5 red, 10 green; 13 blue, 3 green, 8 red +Game 25: 4 red, 6 green, 8 blue; 4 red, 10 blue, 9 green; 5 red, 2 blue, 3 green; 2 green, 9 red, 4 blue +Game 26: 14 red, 4 green, 5 blue; 3 blue, 2 red, 3 green; 1 red, 9 blue, 1 green; 5 green, 15 red, 8 blue; 5 green, 6 red, 6 blue +Game 27: 1 blue, 1 green, 9 red; 4 green, 1 blue, 1 red; 4 green, 4 red; 5 green, 4 red; 1 green, 1 blue, 8 red; 9 red +Game 28: 11 red, 3 blue, 19 green; 3 green, 13 red, 5 blue; 8 blue, 16 red, 18 green; 13 red, 5 blue, 7 green; 8 red, 5 green, 4 blue; 16 green, 1 blue, 15 red +Game 29: 12 red, 15 blue, 1 green; 3 green, 10 red, 5 blue; 4 green, 5 blue, 17 red; 11 red, 2 blue; 6 blue, 3 green, 4 red; 1 blue, 13 red +Game 30: 2 blue, 2 green, 3 red; 1 green, 4 red; 1 red, 2 blue; 1 green, 1 blue, 2 red +Game 31: 3 green, 5 blue, 4 red; 3 red, 1 green; 3 blue, 4 red, 3 green; 8 blue, 8 red; 6 blue; 1 green, 6 blue, 1 red +Game 32: 3 blue, 12 green, 2 red; 13 red, 12 green, 4 blue; 9 green, 1 red; 10 red; 12 green, 9 red; 15 red, 3 blue, 10 green +Game 33: 1 green, 8 blue; 3 red, 7 green; 4 red, 3 green; 5 red, 9 green +Game 34: 12 blue, 3 red, 2 green; 12 blue, 12 green, 2 red; 10 blue, 8 green; 3 red, 3 green, 9 blue +Game 35: 4 red, 4 blue, 6 green; 3 blue, 8 green, 2 red; 5 green, 2 red, 2 blue +Game 36: 12 blue, 4 red, 5 green; 18 blue, 2 red, 5 green; 2 green, 2 red; 3 red, 9 green, 13 blue; 2 green, 12 blue, 1 red +Game 37: 8 red, 3 blue; 6 blue, 5 red; 9 red, 10 blue, 3 green; 4 green, 10 red +Game 38: 1 green, 3 blue, 7 red; 6 blue, 6 green, 9 red; 5 green +Game 39: 7 red, 1 blue, 1 green; 5 red, 2 blue, 3 green; 9 red, 9 blue; 5 red, 3 green, 1 blue; 1 green, 9 red, 1 blue +Game 40: 1 blue, 1 green, 3 red; 3 red, 2 green, 2 blue; 5 red, 1 blue, 8 green; 2 green, 4 red, 2 blue; 13 red, 2 green +Game 41: 17 blue, 5 red, 3 green; 10 green, 4 red, 5 blue; 3 red, 17 blue, 1 green; 11 blue, 10 red, 3 green +Game 42: 8 blue, 2 green, 7 red; 4 blue, 1 red; 9 red, 2 green, 6 blue; 4 blue, 9 red; 1 green, 9 blue, 8 red; 6 red, 1 green +Game 43: 1 green, 6 blue, 14 red; 7 green, 1 blue, 8 red; 3 green, 16 red, 7 blue +Game 44: 5 red, 5 blue; 1 green, 8 red, 9 blue; 6 red, 3 blue +Game 45: 4 green, 17 red, 14 blue; 14 red, 2 green, 2 blue; 9 blue, 1 green, 8 red +Game 46: 1 blue, 10 red, 7 green; 3 red, 4 blue; 2 blue, 1 green, 1 red +Game 47: 8 red, 2 green, 13 blue; 10 red, 9 blue; 4 green, 15 blue, 2 red; 1 blue, 1 green, 16 red +Game 48: 9 red, 8 green, 1 blue; 10 green, 5 red; 9 red, 3 green, 1 blue; 8 red, 1 green +Game 49: 11 blue, 18 green, 1 red; 13 red, 9 blue; 17 green, 18 red, 6 blue +Game 50: 2 green, 10 red, 6 blue; 6 red, 6 blue, 7 green; 7 red, 5 green, 3 blue; 5 green, 2 red, 1 blue +Game 51: 1 blue, 9 green, 7 red; 2 blue, 11 red, 10 green; 1 blue, 9 green, 12 red; 10 red, 5 green, 3 blue; 9 green, 3 blue, 14 red +Game 52: 4 green; 6 blue; 4 green, 7 blue; 1 blue; 1 red, 8 green, 1 blue +Game 53: 6 green, 3 blue, 13 red; 3 blue, 2 green, 16 red; 13 red, 9 green, 2 blue; 1 red, 1 blue, 7 green +Game 54: 1 green, 4 blue, 10 red; 2 red, 6 blue; 2 blue, 5 red; 3 blue, 7 red, 1 green +Game 55: 17 red; 18 red, 3 blue, 4 green; 5 blue, 14 red, 1 green; 4 green, 5 blue, 4 red; 2 green, 18 red +Game 56: 14 green, 2 red, 18 blue; 8 green, 12 blue, 2 red; 1 red, 13 blue, 12 green +Game 57: 2 green, 4 blue, 12 red; 1 green, 3 red, 4 blue; 4 green, 2 red, 3 blue; 3 green, 6 red; 3 red, 3 blue, 3 green +Game 58: 2 blue, 5 red, 2 green; 6 red, 6 green; 8 red, 11 green, 2 blue; 9 green, 1 blue, 11 red; 2 blue, 17 green, 11 red; 7 red, 8 green, 2 blue +Game 59: 4 blue, 1 red, 16 green; 2 blue, 5 green, 1 red; 2 green, 6 blue; 3 blue, 10 green; 14 green, 6 blue; 1 red, 11 green +Game 60: 4 red, 1 blue, 5 green; 2 green, 6 blue; 1 red, 17 green; 2 red, 11 blue, 14 green; 2 red, 8 blue, 14 green +Game 61: 6 red, 7 blue, 1 green; 2 red, 10 green, 16 blue; 14 blue, 10 green, 7 red; 12 red, 15 blue, 3 green; 5 blue, 1 red +Game 62: 9 blue, 4 red; 1 green, 2 blue, 4 red; 8 red, 9 blue; 6 red, 15 blue; 7 blue, 10 red +Game 63: 8 green, 2 red, 4 blue; 2 red, 1 green, 3 blue; 1 red, 3 green; 2 blue, 9 green +Game 64: 4 green, 13 red; 2 red, 6 green, 2 blue; 4 red, 6 green, 2 blue; 6 red, 2 blue; 5 red, 9 green; 3 red, 1 blue, 10 green +Game 65: 8 blue, 3 red, 3 green; 6 red, 8 green; 6 blue, 7 green, 7 red +Game 66: 6 red, 2 blue, 2 green; 15 green, 11 red, 1 blue; 1 red, 2 blue, 10 green; 2 blue, 17 green; 12 green, 2 blue, 4 red; 16 green, 10 red, 3 blue +Game 67: 1 green, 2 red, 12 blue; 2 red, 3 blue, 3 green; 8 blue, 4 green, 1 red; 12 blue, 2 red, 4 green; 2 red, 10 blue +Game 68: 6 red, 4 green, 16 blue; 9 red, 7 green, 11 blue; 7 blue, 16 green, 15 red; 2 red, 2 green; 16 red; 13 red, 15 green, 2 blue +Game 69: 14 red, 3 blue, 14 green; 4 blue, 18 green, 2 red; 4 green, 9 blue, 7 red; 15 green, 9 blue, 10 red +Game 70: 2 green, 5 red, 12 blue; 3 green, 5 red, 4 blue; 5 blue, 4 red; 6 red, 11 blue; 5 red, 2 blue; 5 blue, 1 green, 4 red +Game 71: 3 green, 3 red; 6 green, 11 blue, 2 red; 6 red, 4 blue +Game 72: 9 blue, 4 green, 4 red; 5 blue, 5 red, 3 green; 9 blue, 11 green, 3 red +Game 73: 1 blue, 13 red; 12 red; 5 red, 1 green, 6 blue; 5 blue, 7 red; 8 red, 9 blue +Game 74: 7 green, 17 red, 3 blue; 15 red, 2 green; 5 red, 3 blue, 1 green; 19 red, 1 blue; 3 red, 1 blue, 6 green; 7 red, 3 blue, 1 green +Game 75: 11 blue, 9 green, 4 red; 5 green, 2 red, 16 blue; 13 blue, 2 red; 3 red, 18 blue, 1 green +Game 76: 5 green, 13 red, 10 blue; 5 red, 11 green; 1 red, 5 green, 8 blue; 4 red, 14 green; 7 blue, 12 green, 2 red +Game 77: 5 blue, 2 green, 3 red; 2 red; 1 green, 6 blue; 5 blue, 1 red +Game 78: 9 red, 7 green; 10 red, 2 blue, 6 green; 13 red, 3 blue, 15 green; 9 blue, 10 green, 2 red; 1 blue, 4 red, 12 green +Game 79: 4 red, 3 green; 3 blue, 10 green, 4 red; 1 red, 12 green, 7 blue; 5 blue, 3 green, 6 red; 10 green, 1 blue, 5 red; 5 green, 5 red +Game 80: 3 blue, 18 green; 5 blue, 11 green, 3 red; 2 blue, 13 green, 7 red; 4 red, 1 blue, 8 green +Game 81: 9 green, 18 blue, 10 red; 6 red, 5 green, 13 blue; 8 red, 4 blue, 7 green +Game 82: 9 green, 2 red, 2 blue; 7 green, 2 red, 1 blue; 2 green, 2 red, 2 blue; 2 red, 14 green, 1 blue +Game 83: 10 red, 7 green, 3 blue; 4 green, 12 red, 12 blue; 13 blue, 1 green, 8 red +Game 84: 10 green, 3 blue; 8 green, 2 red; 3 blue, 5 green; 3 blue, 1 green; 5 blue, 7 green, 1 red; 8 green, 5 blue, 2 red +Game 85: 6 blue, 4 green, 5 red; 11 green, 1 blue, 13 red; 11 green, 1 red; 6 green, 2 red; 1 blue, 5 green, 4 red +Game 86: 1 blue, 10 red; 2 blue, 5 red; 1 red, 2 blue, 2 green +Game 87: 11 green, 13 red, 6 blue; 8 blue, 2 red, 6 green; 10 blue, 11 red, 1 green; 16 green, 16 blue, 6 red; 6 green, 12 red, 3 blue +Game 88: 15 green, 4 red, 2 blue; 6 red, 13 green, 4 blue; 3 green, 17 red, 4 blue; 4 blue, 14 green +Game 89: 6 green, 12 red, 7 blue; 3 blue, 6 green, 7 red; 6 green, 13 red, 5 blue; 6 red, 7 green +Game 90: 19 blue, 19 red; 6 blue, 12 red, 6 green; 2 green, 7 blue, 17 red; 3 green, 9 blue, 7 red; 8 red, 7 green, 18 blue +Game 91: 3 red, 1 green; 14 red, 2 blue, 2 green; 7 red, 3 blue; 1 blue, 6 red +Game 92: 2 green, 16 red, 15 blue; 3 green, 3 blue, 11 red; 7 blue, 6 red; 7 blue, 13 red +Game 93: 1 red, 1 blue, 9 green; 12 green, 3 red, 4 blue; 3 green, 3 red, 7 blue +Game 94: 12 green, 5 red, 9 blue; 3 blue, 3 green, 2 red; 5 green, 2 blue; 5 green, 7 red, 10 blue; 7 red, 10 blue, 10 green +Game 95: 3 blue, 15 red, 10 green; 3 blue, 16 red; 1 blue, 13 green, 6 red +Game 96: 11 blue, 2 green, 5 red; 2 green, 10 red, 15 blue; 11 blue, 19 red, 8 green +Game 97: 7 green, 2 red, 1 blue; 5 red, 3 blue, 12 green; 4 blue, 2 green, 3 red +Game 98: 2 green, 5 blue, 9 red; 4 green, 9 blue, 8 red; 7 green, 11 blue, 7 red +Game 99: 2 green, 15 blue, 2 red; 2 red, 6 green, 12 blue; 11 green, 18 blue, 2 red; 3 red, 9 blue, 3 green; 18 blue +Game 100: 13 red, 2 green; 15 red, 1 green; 4 green, 1 blue; 11 red, 5 green; 3 green, 8 red diff --git a/input/day_03 b/input/day_03 index a1d15f0..eb744d3 100644 --- a/input/day_03 +++ b/input/day_03 @@ -1,6 +1,140 @@ -why()$mul(735,469)^?!what()don't()~~('mul(982,758)what()^-^who()mul(294,364)&#/ )&%)[~mul(285,81)what()[{where()+ mul(129,761)^]why()>$^<>who()mul(53,344)select()%mul(567,352),mul(915,20)/#(>+^how()'mul(141,658){&~!how()from()?~?who()mul(830,116)#%;mul(139,634)?,#+who()@mul(169,719)[)?'-who();mul(18,751)},when(){;/mul(691,391)mul(856,314)^mul(558,88)]('/>how()@where()(,mul(274,100)%who()#~*mul(220,748)@how(){$how()/*%$when()mul(718,754)[!when(617,291)!{(what()+*do()[;<+ /from()[mul(840,803)}?mul(429,848)?select()how()^why()],&#select()mul(519,894){ !>:^@+mul(522,225)@!^^/'[>select(118,66)>mul(847,195)when(585,749)]mul(641,667):>mul(317,349) +:/^*what()mul(352,440)select()mul(349,981))@mul(450,917)why()how()mul(471,401)?where():}select():mul(632,956))mul(727,370)!}$~*%+$don't()why()select()^]who():mul(276,773)*^^mul(757,668):}mul(232,346)%[*@$ where()mul(898,992)who()why()~+['mul(43,434),where()who()>what()mul(908,953)select();do()}!select()when()!mul(676,368)how()from(966,785)@:$+)how()mul(414,120)mul(108,395) +~{#!@select(),mul(483,964)&do()?>mul(963,893)$,,/%'mul(318,508)?,{mul(390,813)select()>(select()mul(792,357)!{where();mul(717,18)why()$#]why()$^?mul(948,239)how()&>$from()]:>?select()mul(453,180)&&]&,[how()mul(674,281);*how()mul(548,919)how()]{{who()~+where()where()&mul(962,14)/why(),%>when()mul(31,451)/)&:,>}mul(225,266)-*)where()who()]#mul(224,69)#&-+~mul(309,393)@#;%!(][select()mul(389,558)+*how()*^+when()]when()mul(995,181);(mul(5,74)&(#^from()$~&don't()}? ,($ when()mul(216,767)>()!,/how():@mul(425,905):]>>from()mul(93,831)}select()(mul(70,72)mul(137,510)[]{where()mul(477,400)&?/who()who(335,756){/mul(364,311),$select()what()mul(710,251){mul(351,763)+-}mul(517,661)mul!}?how()where()mul(948,407)-{<]*^from()who()from()mul(979,180)/,:#mul(602,496)%'what(),#}what()~how()mul(343,710))'when()from()#mul(314,877)(+,[?mul(480,685),;do()%*<^)from()what()#@what()mul(502,65)where()why()(!*where()from(){/mul(847,541)mul(116,490)]';how(612,404))when()who()&; don't()mul(446,220)(%'?;{^?mul(784,876);)]mul(959,402)%]];mul(362,432)mul(330,805)where()mul(142,473)~don't()-who()mul(965,688)when()[]):-}from()%mul(949,478)why()>~+,!&~,select()mul(633,237!-who()>where()]mul(809,464){@'/when()when()mul(720,462)&select()select() )@}'~how()mul(518,133)mul(512,118)/}what()*][++mul(56,978when(),where()&don't()who()}where()mul(329,879))&$,:when()#when()@what()mul)~who()(;mul(141,130)'?^}#+#from()'-mul(237,78)&what();];%where(614,809){:mul(391,45)mul(787,970)from()-?&~when()mul(59,790) what()where()~?what()mul(399,503)^from()where()when()mul(190,97);why()who() ,select(){mul(428,654)mul(350,302)?{mul(592,241)when()how()mul(705,191)who() !who()mul(50,6)~'from()% &]mul(902,106),select();/ why()from()>mul(800,867)select(659,586)~ )when()}~&'mul(709,298)-:'do()[who()what() mul(31,997)$%(where(309,559)%: mul(177,184)@mul(58,102) -'^why()>-why()mul(489,67)who(682,115)where()how()>why()~;'^mul(179,994)who()#[+when()}mul(343,121)]^mul(622how()select()<{how()mul(315,335)-:%mul(611,869)who()when()$where()who()mul(242who()from()%&!['do()@:^-})}';*mul(266,851);^[{!&why()how()from()mul(980,269)^{where()how()/where():;+mul(971,795)#>][+^where()mul(279,554)/why()mul(736,24)mul(63,622when()who()how() -;mul(500,888) ]where()where()when();mul(255,25)<]!-,#!+how()@do()mul(670,579)?(//]from(41,426)$do()mul(427,50)/%mul(359,247)'what()~{~-?[#mul(862,40)]{from()when()mul(426,212)>who()mul(653,462)why()mul(15,779))]mul(258,38)how()**$?(}% ;mul(624,853)[;&select()where()*-)<)mul(111,225)mul(440,503)/what()###mul(840,369)who()mul(529,595)>(-/who()mul(168,832)mul(658,544)%:~~)what()why()%+]mul(358,878)who()'$+@-)*mul(30,603)&-do()mul(627?mul(834,46)+when(751,926)-mul(132,173)who()do()-%where()mul(487,54)!$what(),{mul(546,92):$where())&/mul(978,930)-/mul)#mul(693,136)!$select()mul(490,906)%!}({;where()mul(853,453)*]!<%what(85,66)+ mul(720,355)]+mul(65,942)? $mul(736,168)#who()from()< %mul(279,223),,how()select()'mul(949,79)@)-who()when()+;/why(),don't()~(@,^~mul(55,965)what()select()'where()$)?mul(615,265)mul(801,65/why())mul(55,877)[why()+>:~&%~mul(418,463)from()+'who()(how()who()when()mul(176,831)!#'mul(350,399)>'@{ '!mul(847,397):{who()'#$where() @mul(148,609))&,+,<->$@mul(475,800)who()what()do())}from()&why(821,875))mul(675when()select()), %mul(786,308)-[,/,+mul(305,3)how()what(107,974);!}+how()mul(535,976)from()[)mul(820,558):(why(){^mul(715,523);mul(288,378)'why()$why(),@mul(184,850)when()'';^where()mul(957,549)do():~{:{)select()mul(347,642)from():(mul(834,376)>mul(803,111)(,,'select()select()who()[ !mul(143,742)+:# {mul(891,385)where()}<%^>mul(995,109)'?from()$):who()mul(414,498)&/%mul(809,958),why()[!>,mul(591,908!(how()}mul(600,673)'%* *mul(48:$);(/from(371,7)(>mul(261,884)?&don't())mul(246,229) >;*'&!don't(),+mul(131,199),$don't()-(what()mul(13,595)'don't(),who()how() %mul(839,198))do()select()*from()mul(903,555)what()mul(74,674)%;@mul(190,543#)])[^*! ,>mul(428,756)/:>+%?mul(585,685)?@~/*why()){[mul(87,499)],@~!}mul(585,674) [,],]}?[:mul(511,978)!?)don't()&~*mul(735,638)select()[{from()!{>mul(897,633)select() #*mul(680,8)mul(671*how()^mul(580,632)(} how(9,101)from()where()'<&mul(936,112)select()what()how()#mul(720,608)'&^/ &when()@mul(697,116),#from(),what()!where();(:mul(833,800#mul(842,722)why()$from()[(^from()/mul(591,920)how()(don't()}mul(65,254)#why()@mul(696,883)^?what()mul(917,413)from();>{~mul(524,943)mul(465,955)how()select() &how()how()mul(528,18)how()]]do(){who();~>who()&mul(837,821) -+when()mul(957,88){mul(446,234),(%[mul(225,735)mul(616,489)<[]~+@why(274,559)-why(45,518)mul(841,337)@mul(826,883)-(where()don't();@'+~/from()mul(829,811)(what()how()how()#mul(435,969)mul(743,179)from()/'[/,];mul(797,84)[from()>:~&$} mul(934,535)@?})%mul(630,155)]mul(81,271)why();@;%]who()mul(616,154)^do()^)-*;/mul(562,475)select()(select())$mul(119,594)what()?mul(103,712)why()(what()mul(358,496),why()~+select()what()~select()from()mul(316,752):+^mul(851,254)select()from(){when(216,975):*mul(776,658)from()from()?!mul(724,606)from()mul(878what()^%'why()>]mul(920,733)mul(500,262)when()why()do()]!who(333,560)]why()^ ,}mul(594,767)~':}!mul(69,623)})where()where()@-^mul(510,559)from()where()mul(990,412)%)[ how()mul(627,280)@mul(314,481)- from()how()who()}'<^*mul(515,459)$how()do()]mul(307,482)@~( $(@-%:mul(460,946)%mul(942,646) {>mul(160,832)where()when()what()~{where()&@mul(24,840)^#[mul(344,387)#how();mul(525,285)mul(221,638)-!/?#-$^don't()mul(91,395)select(43,376)what()]~mul(677,682)from()$ mul(358,545)$+%mul(697,89):how()who()^mul(599,952)?where()#mul(752,46)where()* ?},#'mul(803,569)select()+()-when()*mul(5,223)'<])#~*^[mul(360,79)<$+mul(784,713)-%when();from()why()<]mul(288,526)';^~do()[;where()}%?<^+<mul(25,575)#^;mul(169,580)when() ^where();]mul(575,888)'who() &::,mul(172,538)@when()*!mul(718,235)%+/mul(281,117)who(),don't();what()how()select(126,34);why(460,565)mul(153,278)~when()*]mul(284,592)what()#@mul(416,344)+how()from(472,343)+]+*? mul(218,315)who()#:$@{}mul(415,704)mul(367,153)*where()!'do()what()[mul(298,416)<'*$:} !mul(8,562 ~#/[{~-$what()&mul(312,424) '??mul-$ -mul(49,590)>[+{how(472,207)]^mul(482,423)&why()(#^' mul(178,565)~^&>from()!#?don't()why()who(596,596))who()from()>how():{@mul(385,718) ~?@//**mul(783,105)~why(22,278):#how()do(),from()!:mul(40,924){[when(),/*mul(694~+mul(311,607)who()[/'mul(744,908)%>: ]~,:mul(310,993)from()%:-(+where()when()[mul(455,786)from()~]?from()^where()mul(460,406)how()when(831,855)'where()>[,:mul(250,253)~:select()){#)[[[mul(825!<{from()mul(205,719))why()@?%mul(729,531):where(); $~ mul(547,617)when()/mul(791,433)from()%select()what()%how()%}}mul(616,548)?%:',when()where()who(),mul(417,691)mul(548,124)<-%mul(459,792)mul(93,742)&from()who()select()mul(38,516)why()$ ; -how();mul(682,71);*why(603,344)mul(588,565)*#:do()'from()!who()-mul(564,344)mul(58,41)mul(881,91) when();/#!/usr/bin/perl!+'mul(791,572) -%mul(264,168)mul(409,229)[#what()mul(393,212)$-from()'*do()mul(274,560)-{+::&>,mul(778,511)when()[;why()'how(701,98)%}mul(630,304){%{>*why(52,488)?}[(mul(149,108&'why(222,790)[mul(8,101)}>;why())what()mul$-%^why()mul(823,831)'*+mul(2,756)>, *don't();/}~&mul(602,479)~%)from()*}-when()%^mul(849,417)$>!-+from() +mul(280,463)'select(),@how(637,7)+&?mulhow(771,951)$mul(373,910)what()when()from()-]:why()mul(835,707):<]&when(915,675)~mul(628,69)&^@&#)mul(419,539):%:mul(534,992)'mul(987,602}why() when()]mul(438,915)~}$why()@!'#>don't()^)}?-select(355,550)},,(mul(649,262)^ *[&}/%mul(867,47)mul(104,808):@why()'@'($$mul(74,805)what(597,630)}(;]>~mul(217,927)>what()mul(669,965)>from()mul(647,126)->mul(52,497) select()mul(22,612from()why()'mul(277,463)!mul(473,104)[!:;mul(655,992)how()>%(what()-mul'why()!&where(11,929)+mul(314,422)$how()what(610,732):&{~}#select()mul(517,349)why()!mul(815,441)#why(349,312)))how()['$where()[mul(593,303)]#$^;mul(901,6)<-}:,who()mul(254,964)select()@['mul(297,705) who()#^mul(794,226)when()who()who(562,667)>}[mul(265,242$'from()@}mul(724,493)mul(313,610)*->%,mul(83,839)^)%mul(149,753)&when()select()from() 'mul(3,784)select()select(715,428)mul(502,975)how()who() !when();{[mul(106,800)<;mul(513,728)select()select()}@;':from():mul(259,697}'$]&':+mul(998,295)how()@who();!mul(947,199)?/what()where()where()]mul(415,221)select(487,105)^mul(688,128)#&mul(394,445)mul(384,810) @!why()do();&!where(424,549)why()mul(934,449)%()-^from()?who()<(do()when()'what()#mul(424select(76,581):<+}from()#>+mul(616,317)#$what()@-select(425,315)mul(146,882)mul(509,291/#from()mul(152,967)why()how()mul(348,501)<[&^who()why():+mul(36/mul(856,681)!mul(46,203) -mul(315,935)mul(451,658)when()when(353,392)<why()]*')mul(21,640)from()mul(755,282)>^why()from()mul(442,981)!when()^why()why()(/mul(876,31),who()/[mul(740,627)]who()/+[mul:+mul(557,285)!(&how()mul(538,865)select()what()~$from()([+when()/mul(826,278):@select(546,967)!?&select()what()mul(847,194)#{mul(468,530)*![%where()^<what()?&mul(277^ mul(780,751)^what()~!#mul(635,606)?*when(): }who()]-don't()mul(42,308)+,(how()how()$-!~mul(29,791)%)mul(248,71)#when()-)]mul(670when():from(505,247)who()>select()what()'(mul(327,578)from()from(){who()who()from()^/mulwhen(801,176)what()};}! :#-:who():/mul(466,327)#~'!),&>mul(776,335where()]why()&]?]:how()how(),do()mul(442,378)when()/^^mul(407,519)'-mul(157,451)+]from()when()when()/mul(689,597#{mul(387,624)><]&$!from()%[-don't()what()why(801,120)how():%select())(mul(847,645)where();&'}#how(698,791)!don't(){)<^mul(694,504)](/*{$who()+mul(480,559)where()#>'who()[}select()!@mul(225,926)when()?%>+mul(631,126)}#@how()mul(712,802)-select()why()~'mul(748,579)from(){%mul(649,879){:select()~&!,[ !mul(147,693)<+}mul(87,949)-{where(345,734)/ mul(351,115)>mul(52,566)&mul(427,269)}mul(901,457)when()&mul(600,957)mul(734,851)!why()/[$/how();mul(383,59)'why(802,790)(;%'from()who()mul(904how()<;select()@{,who()>[don't()why()}[&[!mul(859,668)what()^mul(483,700) -]where()>>>&^@what()mul(320,309)[#<#:]~/mul(497,511)mul(95,653)how():mul(572,330)&mul(809,308)*(&:mul(29,810)who()how():mul(915,147)when()^#mul(849,988);who()?,(/*mul(129,470)select())$select()-&/why()where():do()mul(590,753),@;'/mul(396,339)>%mul(613,991) '{,(mul(899,674))/$}from(656,762)'select()(';do()+-(@mul(502,495)]{$>@)+do()'why()select(),when()mul(454,97)')'where(326,126) select()mul(334,130who(494,552)%@*$who(979,600)mul(876,925)^&^mul(975,151))who()who()&mul(136,404);%!';#mul(450,492[}+[&[$}%//mul(487,75)%mul(870,786),when()why()+~>mul(316,132)-from()who()when()'@who()mul(169,959)~~when()]how()+from()*^mul?&why()how()mul(641,834)^:!(-#mul(197,843why()?}[-mul(479,27)#,/when()when(284,485)from()(mul{)from()+'$~from()*mul(555,485)mul(37,175what()why()who()mul(849,203)who(607,487)how()select():&&;mul(874,736)when()/from(626,997)mul(482,451))who()[};mul(186,966)select()when()*mul(918,369)~who()](%mul(452,814)/&&^-!&$<<{mul(161,632)]mul(434,106):){select()mul(137,656)why()*when()^mul(198,859):mul(589,609) @-mul(79,388)/+}~]}from()how(),do()@<#])-mul(673,936)!mul(999,158)%mul(600,817)%~!#?@<^mul(948,543)$),'mul(108,479)]&mul(359,23)~@{+when()&%^!{mul(186,477)who()from()select()*{where()how()%%/mul(714,701)select()what()why()from(138,787)from()'$ mul(589,314)&what()}]**where()don't()@'?mul(905,694)%~mul(52,222),?]mul(726,995):where()^'[/mul(948,887)how()mul(396,68)what(){;select()$[% (mul(939,722)why()from()$who() &,$]mul(917,716)how()where()']~%'mul(174,257)/how()why()@select()mul(673,441)-<)'?select()do()how():what()]{}?-mul(202,788)[mul(842,734)who(980,842)/?/{+how()select()&how(149,196)mul(533,78),@#select()don't();when()mul(595,87)[(how()-;do()@>what()mul(543,798)/&mul(118,844)who(520,900)>!mul(615,214)'-/select(){where()@do()*#{%/mul(254,489)$@*,who()^mul(209,427)<%how()'^!^{how()mul(112,898)where()-/what()% ^'mul(400,703)mul(347,239)+:who()select()'<,mul(695,520)mul(595,418)why()?!#&^,;,:mul(128,623)$:/@why()$,!$where()mul(489,451):]}mul(426,973)/)don't()-<]what()what()!how()mul(384,927)?select()~:]*])-#mul(210,978)why()-/ +416.........................559...............417...............785.......900.......284...........503...796....992.......................... +.........702*....772............378..569.........&.49..606...14*..............$.453*.........307....*......$.....-.................995...... +.....................458...856......+.........+....&..............680.......104.............%....516.................................*...... +...........822..174..*.....&...........711.746.......&............$....../.............656....#...........265=......634.*.............430... +..827.137..*...*....39................*..............856..............767........522......$..773....619..............*...287....501......... +..........726...511.............*.....320........476...............................*................%...899....72..731...........%....$..... +.....861..............232....223.933...............*.@........424*618.858.......................................$.......338.205........535.. +.......#.............-....................676...713...427.................-.......615.........126...................=..*.......*...&........ +....40..........996..............520.974.*..........#......*.566........907......................&...214...996*911.115.363..960..897........ +....+.............*....................$..172.....559...763.....*............554......*.............*....................................... +.......527...#.....90.+....66.................................890..............=...802.93.131..791...209......&........928......303....$.... +950.....*....773......105..............725........................................................%............886.......*........$.384..... +........383......741..............@..=....#.....179.18..%974..........624.......64.266.................701...........%..671.721.........942. +..................*.............914..548..........+.*.................*...........*...................*.........834.394.....*............... +.......502*80..960........................25........464.........831.846........25.........329..985...458.+.....&................377..659.... +..........................................*.....292...............*............/..................@......350........938............*....$... +...738..............428......+.......311...742.........236*631....816.&......+....86.........81.......................*.973*341.266......... +......*.....673......*......614.........*.......689.48.................450...816.....754...........258..@585.......154..............@....... +...231.....#.........681...........855...775..........*.....=..257...................................*.............................469..=682 +........#...................807...&.............418.19.....259....*459..906...185.356.......778.......230....................556............ +.......924.........459......*..............804.=.........................*...*...........&....*................=........836..+......618..... +.....=............#.......900........+...........702..383........%..*...250..503.......637.808.......97/....@...370.......&........#.....710 +..988........685............../663.273...........*...@..........16.251...........$..............*..........964.......658.....537........*... +...............*......171*......................714.....543............737.....372.............941.............113..*....=.......853....733. +............470..161......508.....56...170.............$...................389.....544.....208.....98.........%.....617...884......-..@..... +.766.591............../.........-......*.......210.........618......*874....-.........#...*....129.=..194......../...................992.... +....../....170@..140+..753....918....467.854....*................989..........979...............*.............-.907...276...931*618......... +..700............................................801....929..859.....#..........*.............594.493......981..........*................... +....+............173..............................................251........629..........970........*................136.........388...*... +......721.......$......911....766..................541.234....=...........47......614....@.....*217..885.680.742....................#..84... +.377*....*81.............*.......&...937...........+...*....155..@......*............*......648............&...*.....&401......493.......... +.....1.................533............*..399...........861......951..709.331..126.....876.....................289.........@.....*.......*... +..........107....452-......594.888.431....*..+660...........79................................$......275*876.......978.....594..400...39.... +.........+................*....*.........925..........$.......*........599.......228..........60....................+....#.................. +...283...................177...708...........642....661........294........*............................288*793.867.....482.479.769....73.... +...........617..855*...&.............605................783.91.........847................&...../...............*..#..........*.......+..... +.672..303+...*........967...............*453.....884@......*...208.949........*..........986.....249.....352..818.596.56.................... +...*..........88...............569.....................975.....*.....*..638....619.......................+.............*.......*.......462.. +....500.....=...................*.................*205..*..-...228.508....&........................395..............845.....683.365....*.... +........197.672.841..............214.=...847...912.....24.349...................%....584.257............152................................. +.626....-..........*..447............714....&.....................463....287...360........*............*...............*.................717 +..........53......334...*........................*167......................*.......................554..246...........295.396......./....... +.......24..............92...........897.......220...........................930..703...414.....711..*.........723.........*....117...146.... +.......&...........548.....324.21......................622.........820.404...............*....../..139......&......*.......578...*.......... +.....*......204......*..........*.............226...........663.......*......555.992.....502...........631..49.#....366........677.......... +..958.350.....*......44...694...449..-39........*...........-...786.........*......*............................140......................... +...............477.........*...................815..............*..........815.................521....................&...273........103.... +.........828............781....464..................276......646....665-............924..........*.......955........759.........934...#..... +........*..........*..........*..........15.193.......*.....................&.................808....347*......963........*....+............ +.........810.....360........638...434.....*....*751....812.....573...........85.........+.........95.......892...*...153...220..........187. +....714*....................................................80*....162=.................214...........842...&...39.......................... +........265.........................51.......285$.......................586.......=.................................*.....*..............948 +..989..........22.=......374.......%....................142.......736..@.....507.636.797.....273.........872.....567.978..334.....382...*... +..........@.......68..=......................116.130.......%.250../......-...=........*.........*486.415..........................*....813.. +.......505............61..140..........435..........*691......*........852..........571....408..............12......80.......228...109...... +.........................*.........207...*..24................402.=...........................@....................../...162................ +....285.................672.552........492....$./..................3..620.391...............................179............*................ +...*..........159...428.......*.................390.111.........$.....*...*..................348.355.481.......&.210..99...41............... +...52......12..@..........808.810.897...................663..280....57..............476.............*............*.....*........208=........ +..........*...............*.........@.286..................*...........................*..........................905.296..............148.. +.......298......119.....172.................622$..637................#......342.......679.111......-968..104*478............#.......*....... +.../.............*........../......................*..............658..........*718..........*136.....................503.899....889.498.... +....691........341.262..36.549...........386........437.............................662...........848............#......*................... +.......................*..........936...*...............................-...........*......516....%......358....707..535...........841...... +......$..............639............*..798.../..67%............137...716.......313.247......................-............@.....371.......... +....433.677..605.267................1.......930........478........*........565*................................869.......372..@....228...... +...........@..*..$...794.........................74.......#./......833.348.......................................+................*......... +......865...............*.........................*..........839.....................=......................................916..84.@....... +.................-....451........541@......468..684....18............759.............499................124.....426*.........*......882..... +...68*...........614........509...............*.........&...956*308.%........&....36...........480+....../..........917....32....#.......... +......363..377.............*..........441.....418..........................279.....*.................139..........................944....... +........................412............*..........%....920*585....526*............931.346&.807..840.....*.626-...#....................923... +.....283.....924...+..................628.......33....................908..766..............*........336..........446...........191......... +...............*.249........@264..35...................502.791.#...........*......=............126....................957....71....*.768.... +.........144&.36.....216.........*...........................&.730..........201..581.704.........$......715.............=......*.......%.... +...349..............*....598...949.........189....981.....#.............524...................*............=................440...847....... +.................967....#..........999*6..%.........-......604............&.189.626...#774.159.647....................168.........../...329. +..............................................481.....*........................*.................................747..%.................#... +..........245...878.......495....57....841.........351.517..........-297........................343.599/........&.......360..........-...... +430........&..............&.....*...&.....*885...........................9....392.......93..336*...........................*321.....86...... +....469......#.................999..796..................899.........250*........$.......*........247............................+.......328 +......*...696...615..300..603..............................*....232...................402...501......*.......77.271.....@.........146....... +......170......%....$.........*..991..........782.49.......128.............................*........161........*.....648......123........... +..........646................901..*.............*......134...........517..2..287........513...............................644...*........... +...................999*620.........541.379.....488..18*.......................*...............208....931.338..%143...........*...19......... +...+.......938...........................*...%.............&........626......268.418......841*..........*...............820.395..........913 +.723...834*..........+............162.667.....84............803.804...*............*................399........172..530*.................... +.....................596............*............................./.287............852....623....@.*..............@........168...965..*17... +.....=488...................758....607.....&......53%......................105.683......-...*.860..244.....&....$....232.................... +.............................*..........333....................197........+....*......334.954.............686...464...............544....... +.139=..............754...993.677..../.......933..........391....*....357*.....952......................@..........................*......... +..........831............../.........94.600................+.121.........183........18..686.....665*..823...........575...........68........ +141...800....*....692...........254@.....*...819-.....................................*..@...................17.......*...815...........686. +........%.602........%.................186..........562.93....774.....................11....948....912.........*328..243.*.................. +.......................................................*..........607....280..................&....+.....................548.&897.100@...955 +......504.....605...........889@.............975..664....$.....#............*....141.................378%.........812....................... +.....=...........*.....730...............%...............899..480.....*....375.....-.444.........47*.........@63...........828.....468..462. +.......607.../...23....=......=........383.............................522............*.............433..360..................*372...*...... +........*...975.............428...................592*......@258...114......%......431...................*......+........658.......560.163.. +........16........................329.......315.......973............*...333....@.......$....782..18...58....533........*...............*... +..327.............563...889.......*...........*..595...............913........671..354..937...%..*...&...........&.787...975.......676...247 +.....+..&...401..*..............713........=.757...#.873*47...#465..................................440..588/..859.%..................*..... +.665....133...%..196....907..............348..................................162........305...................................163.-........ +....*....................*...........170.........222.804....784..............*...................................................=.742...... +..239..338.....27-.437..543.........*....609......*..*......-...............582..-...........343*560....852.../....636..263................. +..........*900.......*............17...........948.....597.....=....922...........682./255................@..35.......*.......211-..#....... +.......*...........686........984..........78......896*......13........+....................985...&....................278.........876.835.. +....630.82....$851.....905.......*..281...*...............................352..........*746........215.877....845..........471.852.....*.... +.........................*.....757.*......625...........924......878..........912...............-.........*../.....538%......+.........871.. +..954*712..977.....-..762..........236.........527*674.*.........*........811*.....228....&.....5........739...483.......................... +..........*.......470..................................707....363.................*......525.......303..........*........463....537......... +...460...947...............130.....757./96........*.................=...529....+..466........527................65..%648....=.....*......... +.....*......................$....../..............968..............479.&....630............................598.................952.......... +.......&..........793...................................514...............-...................311..........=....83......#.............124... +.975....399.......*...-.......*814...663..................*....*...........381../...............*.............@.........284............*.... +...*............367....198..........@.....992.....716*529....96.................729.329.688...%.322.-......67.79......-.......335....997.... +488............................632........*...../......................387.............*....225......491.............391..750...%........... +.......861.527......778.165.......*........187..916.......845....-....*.......873.................................@......................... +..545.....*.....$.....*..*......627............................736.376..845...*....594........+.......171.........292...........*750..-..... +.................407.403............+...342.................+..........*.......897..........400.......$......................910.......350.. +...........................40..284.66...*......494..........255.......653..............866.................942=..................*52........ +....&........827.......296...*........$.401......*..............892*...................$.............1.164.......343..........485........... +.930............*.........*..944...308...........763....../.........62.....113....=...........421........*..........................580+.... +........50*.....934......705............................999..................*....541...............847-.950..............*131.............. +...........209....................................&404...............276..242.............723.652................873...313..............24.. +......*........606....550#.....2./........@..................899.......*.....................*..........235..112...........704.....337...... +.......837....*...............*...83...993.....*416.........-....580%..535......../.....-204...............#..*.....93+....*...723./........ +..............168.....753..593..............504......./........................488..............=.............458.......872...*............. +...#85...................&......911/...................880........315..872..........=....494..349....466..428..................40........... +........939........648......................*................227...*......*.......924...*...........*.....*................................. +918*......&.@........*...902..269..834....87.826.........../...*...919.118...817......109..........933..643...........&..............-...... +....949......883...111..%......*...%..................710.464.943.........../...................................842....305.....469..289..... +..........................%...974......*407..168.647...*..............617.......498/.....848...........@99........*...........+............. +..........176...........120.........469........&...#....997......464.......274.............*......./............477.417../.......738........ +.........*.......964.........291..........................................-.............2..29...272..465...............-..819........718*265 +....298...747.......#.......*.....+745...........460...741*762.275...491.......+.735*34.*............-....*841......+............*.......... +...*........................593..............298...#............%....$......225.........943........................23.....702.601.616....... +..889................695........654..750.....*.............637........./...............................780....*726....233...*............... +..................../.................*.....453.....642....*.........828......@...94...........152/...*....790.......*.....445......../..... +...........................51.......681........................271..........719.......................964......399..426...............456... diff --git a/input/day_04 b/input/day_04 index fe91c33..4db3058 100644 --- a/input/day_04 +++ b/input/day_04 @@ -1,140 +1,218 @@ -SSSMMSAMXSSSSSSMSSSSMAMSMMSMSMXSASMMMMAMXAXMAXXSSMSSSMSMMSXMAXXMAXSAMXMXMAXXMAAMMMMMAASXMSAMXMASMMSMSMSXXMSMSXAXMSMMSXASXSMMSMMXMMMMXMXAMMSX -XAAAASMSAAAASAAASAAXSAAAMMXAAAASAMXAMMSSSSSMXSAXSAAAASMAAXASMSMAMXAMASXMMSMSMMXSMAASAMXAXXXMAMXSXMSMSASMXAAAMMMAMXAASMXSAAMASASAMSAMAMXMSAMS -MSMMMSAMMMMMMSMMMMMMSMSMSAASMXMMAMSXSAAAXAAAAMAMMMMSMMXMMSXMAAAAXMXSAAAMAXXAAAASXSMXMASMMMSSSMAXAXSAMAMAMSMSMAMSMMMMMAXMMMMXSAMAMSASMSAAMXMA -XAAMXMAMXXAAMASXXXXAXMXXAAMXSAXMAMAAMMMXMSMMMMMMXMXMASXMMXMMSMSMSMAXMAMMASMSMMXSAMMSMAAXAAAAAMSSSMMAMMMAMXAMMXMAAAAAXSMMSXMMMXMXMSAMAMMMMAXM -MXMAXMAMMMSXSASMMAMMSMSAMMMASXMSXMMSMAMSXAXXAAAAASXAXAAAASAAXXXAXMASXSXAXXAAXXAMASAAMSMSXMMSXMAMASMMMAMAMMSMMXSSMMXMXMAXSASAAAMAMMSMMMSASXSX -AAMASMSSMAMMMAMMMASAAAMAXXMAMSASAMMMMMSAMXMSSSSSSSMMMSSMMAMXMMMMMSXSAMASMMSMMMXSAMMSMXMAXXMMMMASAMXMSXSASXMAMXXAXSASMSSMXASAMASXSAAXAASAXAAX -SASAXXMAMAXAMXMXSASMSMSXMXMAMAXSAMMSSMAXXMMAAMAMXMAMMAMXMMMMSMAMAXSMAMAXXAXAXXMMASXMXMAMMMMAXSASAXXMAASAMMSAMXMMMMAXASMAMMMMSXMAMXMSMXSASAMM -XXMASMMSMASMMSMAMASAMXXMSMMSXMXMAMXAAMAMXXMXMSMMASAXXXMAMAAAASMMXMXSXMASMXMASXXSXMAMXMMSSMSAMMASMSSMAXMAMASAMMSMSMAMSMMMXMAMXAAAXAMXMASASAMX -MAMAMAAXMXSAAAMASMMAAMSAXMAXAXXSMMMSSMAMMMMAMAAXAXXSSSSMSSSSMMXXMAMMXMASAXMASAAAMMAMMSAAAMXMSMMMMAAMMMMAMXSAMAAAMXXXMASMSMMMSMMXXASXMMMXMASX -AMMAXMMMSMSMMMSASXSXMAASMMMXAMXAAAMAMXAMMASASXSMXSSMMAAXMAAAXMMSMMXAAMMXMMXAXMXMAXXAAMMSMMAXMMAAMMXMAMSSSXMASXMSMMXMSSMXAAAXSMAXSSMMMASASXMX -SMXAMSMMXAXAXXMXSASXMXMAMASMASMAXSMASMMXSASASAXAAMAAMSMMMMMMAAAMAAMMMSAMSSSSSXSXMXXMSSMMMSSSSSSSSSSMMMAMXXXXMAXAMXAMMXASXSMXMMMXMAAMSASXXAAM -MMMSMMAMMSMMMSMXMXMASMXMSAMMAMAXSMXXMAAAMAMXMMMMMMSMMXSSXMASMMXSMMSAAXMAXAAAXASASMXXMXMAAXAAAAXAAAAASMMSXSSMMSSSSSMSAMXXAXMASAMASXMMXMSXXMMM -MXAXASAMXAAAAAAXMAMMMMXXMAXMSSSXSAASMMMSSSMMSXMASXMAXAMMXMASMMMSXAXMMMSSMMMMMMMXAXSXMASMMMMMMMMMMMMXMASAMSAXSAAXXAMMMSMMMMSASASASAMSAMXMASAS -MMMSMSAMSSSMSMMSSSXSASXMMMSAMAXAMXMSMMAXAMXAXMSAAMSSMMMSASXSMSAMMMSAMXAAAXMAXXMSMMMASAMAAXSXXSXXSXXSXXMAMSAMMMXMSMMAAAXASAMXMMMXSMMXAMXAMSAS -XSASXXAMXXMXMXMMAMASXSAMAAMAMMMXMXMSAMXMAMMSSMXSMMAMAAXSASAMAMASMAMMMMSXMMSXMSAMXASXMMSSMMMMMMAMXMAMXMSMMMAMAXSAAASMSSSMSXMMSMXMMASXMMSSXMAM -AMAXAMSMMAMXMAMMAMAMXMAMMSSSSXSMSXASAMXXASAMAMMMXMAXMMMMAMXMAXMMMASMSAMAXXXMXMAXSMSSXAXMAMAAAXSXAMAMAXAXAXAAXMASMXMAAAXASMMAAXAXSAMASAMXAMMM -SMAMSMMASXMASAXSXMXSMSMMMMAAXASAAMXMAXXSMAXSAMASMMMMASAMXMASXXSASMSXMASMMMMAXSXMXXSXMSMSMSSMSAMXXSASMSASMSSMSAMAMMSMXXMSMAMMSSSXMXXAMAXSMMMS -XMAXXASAMXSXXAMSXSAAMAMAAMSMMMMMMXXSXMMXAMXSASMSAASXMMXSAMXXMASASMXAMAMAMSASMXXAXMXXAAXAAMAAAMSAMSAXXMAMAAAAXXXAXASASMSXSXMSMMMAMXMMSXMMXAAA -SMSMSMMAXMXSMSXSAMXMMAXSXXAMMMAMXSAMMSXXSXASXMXSMMMAAAMSAMXMXMMAMAMSMMXAMXXXAAXSXASXSSSMSMMSMXMAMMXMSSMMMMMMMSSSMMSAMSAAMSMAASXXMASAAMSSSMSM -AAAXAXSMMSAMXXAMXMAMXMMMXSASMSMXMMXSASAMXMASXMASMMSSMMASXSAXSAMXMAMXAMSSSMXSXMAMXSMAAXAAXMAMXXSSMMXMAAAXSAMAXMAMAMMAMXMXMASXSMAXMAMMXMMAMAAX -MSMSXMSXAMAMAMMXAMASAMAMXXAMMAMXMMMMASASXMAMAMASAMXMASXMASAMXAMXMXXXAMAMAMASMSAAMXMMMMMMMMMSMXAAXAXMAXMMSASMMAMSSMMXMAMASXSMXXMMMSXSAAAMMMMS -XMXMXMXMXMMMXSMSXXASMXAMSMSMSXSAAAXMMMAMXAASXMMSMMAMMSAXAMMMXSMMXSMSSMMSAMMSASASASXXXXAXAAMAMSSMMSXMMSSXSAMXAAMMAXAXSXSMXASAXXXXMXAMXSMXMSAM -XAAMAMAASMSSMAMASMAMXSSSMAXAXAXXXMXMSMXMXSMSXSAMASXMASAMXXMSMXAMAMXMXAXXXXXMXMXMXMMMSSMMSSSMMXAXAMASAAXMMMMMSMSSMMMXSASXMAMMMSSMSMSMAXAXXMAS -SSXMASXSAMXAXMMAXMASMMMAMXMMMMMSMMXSAMMSAXAMMMAMASMMASAMXSMXASAMASMSMSMSASXSAMAMXSAAAAAMAAMXXSXMASAMMSMMSSMMAMAAMAMAMXMXMXXAAAAAAAAMMSAMXSAM -XAXSAMXXXSSSMXMSSMSAASMSMXMMASASAAMSASAXASAMXSXMASASMMAAAAXMMMASAXXAAAXSAMXSASMSMSMSSSMMMSMMXMASMMXSXXAAAAASAMMSMMMASMMXMXSMMSSMMSMSXSAMAMAS -MAMMSAMXAAAAMXAXXMXMMMXMXAMSMSASMMMSAMMSASXMASXMAMAMXSMMASAMXMMXAXXMMMXMXMMSMMAAMXMXMAMXAAAAAMMMAAAMAMMMMXMMASXMAXSAMXSASXXSAMAAAXXXASAMXSAM -MMMMMXXMAXXAMSAMXXXXASAMMXXAAMAMAXAMXAMMMMAMASMMSMMAMMASAAMMASXMSMXXASAMAMXXMASXMASAMAMSXSMSMSAMMMSSMXSXSXMMMMAMAMAAAMXAMMXMSSMMSXSMMMXSMMAS -SASASMXMASMSMXMXMMMSMXASAMSMMMSSSMXSMXSAMXMMXXAAMXSMASAMXMXSASAAAAAXMSASXXAAMAXMSXSMSAXSAXAMXSXSXAMAMSMASAMSSMMMMMSXMXMSMMSMASXAMMMAMXAXAXXM -MAMASAAMAXAAXAXAMXXXSMSMXXAXAXMAMAXXAMSMMSXSMSMMSXXAMMMSASXMMSMSMXSAMXXMAXSMMASAMXMAMXSMAMAMAXAXMXSAMAXAMAMAAAXSAMXXMMMMAAXMASMXMASAMMSSMSSS -MAMAMMXMSSSMMMSMSMAAMXXSXSASXSMMMSSMSMMAXXAAAAMAXMMSMAMMMAMXAXMMXAAAMMAMXAXASASMSAMAMXSMAMXMMMXMMXXAXMAXSXMXSMMXAXXXXAASMMSMASAMSAXAXAMXXAAA -SMMSAMXSAAAXSXAAMXMXMAMAXMAAAMMXAXMAAMSSMMSMSMMMMAAASXMASMAMMSASMSSMMMMMMASAMXSASXSASAMXAXSAMXMASMSXMXSXSASXAASMMMSMXXMXXAXMAXMMMMMSMMXSMMSM -AAAMAMSMMXMAAXMXMAMAMASMSXSMSMAMXSSSXMAAAAAAAMASMMSMSXSXXXSMXAAMXMXMAMSAMXMXSMMMMASAMMSSMSMMSMSASXSAMXXAMAXSAMXAAAAMMSSMMSXMASXMASAXAXSAAXMM -MMMSSMSASXSAMXSASASASASXAAMXXMAMXMAAMMSSSMMSMMASAAXMXMMSMSMSSMXMXXAMMSSXXMSAMXAAMMMAMXXXMAMAAAMASAMAMASAMAMXXSSSMSXSAAAMAAXMXAXSAXMSSMMSMMSX -MXMXAAXAMAXSXXSASASMSXSMMSMAMMSMXMASMXXMMAMXXMMSMMMMSAAAMSXAMMMSXSMSXMXSAAMASMSSMMSAMXMXSASMMMMMMMSXMASXMASMMAMAAXAMMSSMMSAMXSMMSXMAAAAXXASM -SAMSMMMSSMSAMAMMMASASAMXAXXXXAAAXASMMXMAMSAMXSAMXMAXMMMSSMMXSXAMAXMAMMAXMXMAMMAXAXAAXSAMSASAMXSXAXAXMXMXMAAMMASMMMXMMAXMXXAMAAAAAXMASMMMMSSM -SAMXMXAAAXMAMSXSXXSAMMMMXSASMSMSSMMMMAMXAMMSMMASMSMSAAXMAMASXMAMSASMMMAMXMMXMMAMXMSAMASAMMMXXAXAXMMXSAMMMMMXSASAAXSAMXSMASAMSSMMSSSMMAXSXAXA -SMMAAMMSSMSAMXAAXMMAMMAMAMAMAXXAAMAAXAXMASAMASXMAXMAXMXMAMXXSAAAMXMAMXAXXSMMXMXXAMXSMSMMMASAMSSMMMXMSMMAXASXXAXXMMXMASXMXSAMMAMAXMXAMMMAMMSM -XASMMMAXAMSASMMMMXSSMSASAMAMAMMSSMSXSAASAMXSMXAMSAMXASXSASXMASMXXXMAMXSSMXAMSMMSASAXXXAXSMSMXXAMMXAXMXSXSASAMSSMMSMMMMMSMSAMMAMSSMSSMMMMSMAM -SMXAAMMSMASXMXMASMMMAXASASMMASXXMAXAAMMMASAAXXMMAAMAMAMSAXASXXMSSXSASXMAMMAMMAMXAXXMSMMMAMSXXMAMXSMSSXAAMXMAMAAMSAMXAAMSASXMXXMXAAAAXXAXMASX -AXSSMSMAXAMASMMAXAASXMXMMMXSAMXXMAMMMMXSAMASXMXSMXMMSMMMSMAXAAXAAASAMXXAMMAXMAMMXMAMSAASAMSASMMMMXAAMMMMMAMAMMXMSAMXXXXMXMASXMMSMMMXMSMMSAMX -MMXAAXMMMASAMAMSSSMSAMXAXAXMASXXMAMXAXMAMXMMMAAXXAXXMXSAMMAMXSMMSMMASXSXMXMSSXXAAMAMMSMXMSMAMMXSMXMAMXAAXMSSMXSASAMSXSAAMMAMASMMXSXAASAMSAMS -MMAMMMMXSAMAMSAMAMXSMMSXMMMSAMXMASXSASMAMSXAAMSMSMSSXAMSMMMSMAXMAXMAXMAXSAMXMMMSMSAMMAMSXAMAMSMSMASXMSMSXMAXAAAMMAMAASXMMMAXSMAMASXMSMAMMAMM -SMSMAXMAMASXMMAMXMASMASXXAAMASAMXXMASMMAMAMXXSAMXAAXMXMAXMAAXSMSASXSSXSASASXXAXAASAMSAMASXSASXAMSASAAXAAXMASMXMXXSMMMMMXSSSSXSSMAMXMAMAMSMMX -AAAXXXMXSMMMSSXMAXMXMASXSMSSXMASMXXXAXMXXAAMXXMASMSMSASXSMSSXMAMMSAAAAXXSMMXSMSMMMAMSASMSXXXMMSMMXMMMMXMSMASXMXSAMASXMMAAXMAMAMMMXAMSSMMAMMX -MSMXMSMXSAASMMMXXXXXMMSAMAMXMXMAMMSMSMSSSMSAMXXAMXXASASXAAAMAMAMAMMXMMMMMXAMXAAAASAMXAMXMMMMSAMAMSSSMMAXAMMSMAMMMXAMAAMMMSMMMSMAAXSMMAXSAXSA -MAAASAMXSMMSAMMMSAMXMAMAMXMASASAXMAAAAAAAXXMAXMMSAMMMMXXAMXSMSAMXSXSMMAAAMXXXMMSMSMMMXMAXXXAAXSAMMAAXSXSXSXMASXAMMASMMMMSMASAMMASAXASAMSMMAX -MMSMSASAXXXSAMAAAASXMASAMAMAXAXAMSMSMSMMMMSXSMSAMMSXSXMSMSXSXSAMXAAXASMSSSSXASAMXMMSMSMSSXMASMSMMMMMMAAMAXAMSASAMAASXMAMASAMXSXXMAMAMMXXXAMX -MXAXSAMXMAMXAMMMMXMMSMSASXSSSSMSAMAMAXXMSASXXAMASXXAXMAAAXAXXXAMSSSMAMAAAAXSAMXMAMAAAAAMMAMAXXXAMMAAMMXMASXMMMXSMSXMMSMSAMXXAMMAMAMXMXMAMSXM -XSAMMXMASXXSAMXXMMSAXASMMMAXAXAXMMAXXXAXMASAMMMMXMMSMASMSMXMMMAMXAAMAMMMMMMSXMSXSXSXSMSMSMMMSMSSMSSSSXMMAMAAAXXXXMAAMAMXXMASAAAASAMASAMAMAAS -MSXMAXXXXMAMAMXSAAXMMMMMAMXMMMSMXSSSSMSMMXMXMMAMAMAXAMXAAASMSAMSMMMXMXAAAXXMAASAXAMXAAXAAXMXAXMAAAAAMMAMXSSSMSSMASXMMASXMAXASXSMSASASXMAXSAM -ASAMXMSAMAXMSMASMSMXAAAMXSMSXAAMXMAAXAXXSAMXXXAXSMMSSSMXMXAAXXSAAAAASMSMSASXMMMAMAMSMMMSMSXSXSSMMMSMAMSMMAAAXXASXMMMSAMAAMSMMMAXSXMXSAXMXXAX -SMAMAMSASXSAXMXMMXMXSSSSXXAXMXSMAMMMMXMAXASXXSSSXAXAAAAASAMXMSMMSMSXSAAXMASXAAXAMAMASMAAAMAXAMAMXAXAMXAAAMXMMSMMMMAMMMSSMMXAASAMXXMMXMASMSXM -ASMMXMSAMAMASXMXSMSXAAXAMMXMAAAMSMXMASMSSMMXXMMAMSMMMMSASAXAXSAAMMMMMMMMMXSMSMSXSXSASMSMMMAMMMAAMMSAMSMSXSAAAXXMASASAMXMMAXXMMXMAXSAAXXMASXM -MAXXSAMXMXMAMMAXXAMMMMMAXXMASMSMMAXSSXXAAAMMMMMXMXAAXXAAMAMXMMMMSXAAAAAXXXSAXXMXXMMXMMASAMMXSAMXSAMAMSAAAMXMMSMSASMSASAMXMSSMSASAMXSMSAMAMAM -XXMXMAXSAMMSSXSXMSMSMSSXXSMXMAMAXSMMXSMSMMMAAXSSMXSMSMSSSMSXMAMASXSSSMSASXMMMAXMMMMSMSASMSASMMMXMASXMMMMSMSMAAMMMSMMXSXMXXAAASXMAAAMXSAMSSXM -XMXAXSMMSAMXMAAMAAAAAMAMMASAMXMMMMAXXMXXASXSMSAXMAXXXAAXAAAASMSMSAMAMXMMSAAASAAASAAAXMASAMMMAAXAMXAMAASXMMSMSSSMASAMASMSMSMMMMASAMXMAMXMAAAM -ASMMMAXXAMMAMXMSSMSMSMAMMAMXMXAXASMMSSMSMMAAXMMMMMSMMMMSMMMAMAAASXMAAXMASMMMSMMMMMMXMMXMXMXXSMSXSXMXSMSXMASAAMAMAXAMAMXAAAXSAMXSMMAMASAMXXXM -XMAMSMMMMMSXSXXXAAAXAMXMASXMMSMSMSMAAAAAAMMMMSXSXAAAASAXXXSXMSMMMASXSAXASASASMSASMSSMMMMAMAXMAMASMXMMSXXMMMMMSSMMXSMSSSMSMSSXMASASMSMSASMSMS -MMMMAAAAXASASAAXMASXXXASXMAAMAAAASMMSMXAMAMXAAAXMSSSMSMSSXMAAXAAXXMAXAMASMMASASXSAAXAAAMMMMXMAMXMASASAMXSAMXAAMASMAAAXAAAXMXAMASXMASASASXAAA -AAASMSMSMASAMMSXXXMAMMAMAXMMSMSMSMAMMMMMSAXSAMXMXMAMAXMAXAMSMSXMSXMXMASASXMMMAMAMMMMSSSXASXMSAMXXXMXSAMSAMXMMMMAMMMMMSSSMSMSSMMSAXAMXMAMMMSM -MSXSAXMXXAMAMXMAMMSXMASMXMXAXAXMAMAMXSAMMMMAMXMMASAMXMMSSMMAAAMXXMASMMMASXAAMAMAMAAMAXXXAMAASASMSMMXSAMXMASMAAMMMMASXAAAXXAAAAASMMXSXMMMAMAM -MXAMXMSMMXMXMAMAMAAAAAXAXXMSMMMSXSXSAMMSSXSAMXMXASASMXMMAXSMMMMSAXAAMXMAMMSASXSMSXSMASMMSMMMMASAAAXMXXMAXXXMMMSAASASMMSMASMXSMMMXSASAMXXXSAM -XMAMAMXAXMSASAMAMXXSMMMASXAMAXXAMXXMAMXXAXSXSMXMASMMAAXMMMXAAAASXMMXMAXXXMMXMXXAXXMAMMAAXMAXMAXMSSMASMMXSMXXMAXXMMASXAMXMXAXMMSMAMAMAMAAXMXS -SSMMAAXSAAAXMAASMSMXASXAAMXMAMMASXMMSXXMAAMMSMXAXXASXMSAASXSMMMSAXAASXSSMXMASAMXMMSASXMMSSSXMASMMMXSXAAMMMSASMSXXMAMMMSSXMSMSAAMXMAMXMMSXAAX -XAASMSMXASMSMXMAAAAMAMMXMSAMXMSAMAMAMMXMSMMASAMMMSAMAAXXASAMMXXSAMMXMAAXAAXXMAMXAAXXXAMXXAMMMMXMAMXXSMMSAXXAMAAMSMSAMXAXXAXAMSMMAMAXAAMAMXMX -XSMMSAMXXXXAAAMMSMMMAMASXSASXXMAMXMAXAAXAAMXSAMAXMMMMMMMMMXMSMMSAMXSMMMMSXSAAAMMSSMSSXMMMMMMAMASMSAMASMMMSMSMMMSAAAMMMAXSMMSMMMSMSASXSMSAMXM -MAMXMMSMMMSMSXXMAMXSXSAMMMMMXMASMMSSSMMXSXMAXAMXMAAXASMXSAAMAAASAMAMAXSXAXMMMMMAMAXMAMXAXSASASMSXMASAMSAMXAAMMMXMSMSMMSXAMAMASAAXMASAAAAMXAA -AMMSSMAAAAAXMXXSMXXAMMASMMAXXXAMXMAXXASAXASMMMMXSSMSASAAMSSSMMMSSMAMAMSMMSSMASMMSSMXMMMSMAASASAMXMMMXSMMMMSMSSXMAXAXXAMSSMASXMMSSMMMXMMMSSSS -XAAXASXMMSASMXMMSMMMMSMMASASXMSSSMSSMMMAMAAXAAXXMAAXAMMMMAMXXMAMAMSSSXXAMAAMASXMAXMAAAAMAMAMAMMMXSAMXMASXAAASASAAXMXMAXMMXAMMXAAAAXAAXMAMAXA -MMSXMMMXMMMMMAMAAXAMAMASMMXXAAAAAAAAXSMSMSMSSMSMSMMMMXMSMSSSSMMSMMMAMMSSMMXMMSAMASXSSMSSSMXMXMAAXXASASMMMSSMMAMMMMMASXSASMXSAMMXSMMSMXMAMSMM -MAXAXSMMAAAASXMSXSMSASMXAXXXMMMXMMMXMAAMAMMXMXAMAMMSMAAAAMAMXAMXMXMAMXMASAMXMSMMAXXAXAXAXXMASXMSMSAMAXSAAAAAMAMASASASMSAMAAAMXXMAMXMAMSAMXSX -MASMMAAAMSXMMAMXASASASXSSSSXSASASASXAMXMASXAXMASMSAAMXXMXMAMSMMMMMXSMASAMXSAAXMASXMMMMMMMXMMXASAAMMMXXSMMSMMSSMXSASASAMMMMMSMMSAMXAMAMMASXMS -MASMSSSMXMMSSXMMXMAMAMMAAAAASASMSAMSSXXSSMMMSAXSAMXSXMMSASAMAAAMASMMMAMASASMSMSMXMASASAMAMSASMMMXMSMSASMAXMMMXSXMAMMMMMAMAMXAMMMMMMSMMSMMASX -MAMXAAXMAXAXMMMXXMAMMMMMMMMMMMXXMXMSXMAMAXASAMSMAMMMXXASAMASMSXSASAAMMSXMAXAAAAXAAXXAXASAAMASXAXSMAAMAMMAMAAMMASMXMAMASASASXSMAAXAMAMMAXSXMX -ASAMMSMMMSMSAAAAXXXXXXMASAXXXXAMAAXMAXSSSMMSAMXMAMAAMMAMMSMMMAXMASXMSXMMMAMSMSMMMXSXMSAMXMMAMMAMAMMSMAMMAMSMSSMXMASASASASASAMSSSSMSASXMMSXSX -MMAMXXMAMAASMMSSMMSMSSSXSASMMMMASMMMAMMAMMAMMMXSSSMAXXXAMAXAMXMMMMAXSAMXMAXAAXAMSAAAMXXMMSMAXXXXXXXMXXXMSMXAAMXMAMSMXXMXMXMAMAMAMASXMASMSASM -XXMMXXSASMXMXMAMAAAAAXXXSAXAXAAXMXSMMXMAMMAMAMAMXAMAMSXXSMSXSSSSXSXMXAMSXSMMMMAAXAMSMAAMASMSSMSSXMSSMMSMMAMMMXAMAMXMMMSXMXMSMSMSMMMSMXMAMAMA -AASAMXSASXMSXMASMMMMMXMAMAMSSMSMSASASXMMXSMSSXAASMMSMMAMAXAASXXSAAXMSSMMAMXMXSMMXSXXMXMMASMAAAASAMXAAAAAMSMSMSXSASXSAAAMSAXMAMXMAMASXAMAMMMS -SMSAMXMAMXXASMAMAXMASXSAMSMXAMAAMASAMAXMMXMAAMSMMXAMASXMAMMXMAAMMMSXSXAMAMAMAXAXAXXSMSSMASMSXMASXSSSMMSAMXMAAAMSAMXSMSSXSASMAMMSAMAXAASASAAM -XXXAMXMAMAMMXXXXXMMAXMXAXMMXMAMMMAMASAMXAXMXMAXSMMMSMMAASMMAMMMMAXSXXSMMMXAMSSMMMSASAASAMXXMAMAMMXAXMMMXMASMXMXMMMMMMMMMSXMMASXSAMXSMXSASMSS -SSSSMAMASMAXASAXSAMASMMXMAXMXXXXSSSMMMSMMSSMXAXAXMAAAXXMXAMAXAASMSSMXXSASMMAXMXSAAAMMMSXSSMSSMAXAMMMMAMAMAMAASASASMSMSAAXMASXMASMMMSXAMMMMAM -AAAXSXSAMXXMAXAASAMXSXAXSXMXAMXXXAAAXAAAXAAAMSSMXMSSXMXXXSSMSSMXSAXAMMSXSAMSXXASXMAMXAMAMAXAXXMMSMSAMAMMMSMXMXAXAMAAAXMMSXAAASMMAMAMMXMAAMAS -MMMMXXMASMXSMMXMSAMXXMXMXAAMMASMSSMMMSSSMXSSMMAXXMAMXASXAXAAAMASMSMSAASXSXMXSMMXXXAMAAMAMMMMSAMXAASMSMSMXXAASMSMSMMMMMMAMMMSMMASMMAMASASXMAS -AXAMMXMAMMASASMXSAAXXMSASMSXSASAAXAAXXAAXAMXASXMSMAMMMAMXXMMMSSMAAMAMMSMMMSMAMAMMSMSSXSASXAAAXMMMXMAAAAXAMMMMAXAXAXSASMASAXAASAMXXAMMXMMSMAS -XSMSMAMSXMMSAMAAMSXXXXAXSAAAMAMMMSSMSMSMMSSSMMSAAMSSSMSAASMXAXAMAMXAXMSAMAAAAMASMAMAXXSAXAMXSMSASAMSMSMMSXSAMAMMMMMMAXMMMXSSXMMMXSMMMAMAMMXM -XSAAAMXAAMAMXMMMMXMMMSMSMXMXMXMXAXAAXXXAAXAAMAXXMSXAMAMSMAAMSSMMMXXXSMXAMSSSXSAAXAMMMXMMMSMMXMMAXXXAMXXAAAXMAMAMAAAMXMAAMXMXMASAAAAXSSMSXMAM -SMSMSXMSXSAXMAMMMMMAAMMAMAXMAMXMASMMMXXMAMMMMMSMXMMMMXMAMMXMAAASXXSAMXSMMAMMXXMXSMSXSAMXAXASXSMAMSSSSXMAMSSMSXSXSSSXMXXASXMASXMMMSSMAXSXASMS -AMAMXAMAAXMMMSMMAASMSSSXSASAXAMXAXAAXMAMXSXAXAAMAMXSAAMMMXMMMSMMAAMAMAAAMAXXAXMASAAAMAMMMXXMAASAMXAMMMMSMAAAMAMAAMAASMSMMXSXMMMXXAAMAMMSAMXM -AMAMMAMMSMAXMAASMMSXXAMASASMSSMMSMSMSXXXMAXMMSMSMSMSSSSMMAMXMAMMXMAXMMSSMSMMMSMAMMMMMASAXAAMMMXSAMXMMAAAMMMMMAMMMMSMMAAAXASMSAMAMMMSAMXMMMAS -SSSSSSMAMMMSMSMMASMMSAMXMAMXMAAXMAXAMXSXMAXSAMXSAAAMAMXAXMSMMMSMMSMXSXAMAXMAXXMXSSXSSXSAXSSMXMAXSAMXSMSXSAMXMXMASXMMXSSSMASASMSAAXXAMAAMASAX -AAAAAASXMAAAXXAMMMMAXAMXMXMSSSMMMXMAMAMAMAMSASAMMMSMMMSSMSAXAXXAAAMAXMMMAMSSSMSMXMAMMXMAMXAAXMAXAMMAMXMAMAMAMXMAMAAMMMAXMAMXMAXXMMAAXSMSASXS -MMMMSMMXSMXMSXXXAAMMSXMAMAMXAMMAXSSXMXMAMXMMAMMMAAXXAAMAXSASXSMMXSMSXSXMMMAMAMXMAMAMSXSAAMMMMMSSMSMASAMAMASMSAMMMXMMAMMMMXSXMAMMSMXSAXAMMMMA -XAAMXMMXMASXMMMSMSSMAASASMXMAMXSAXAAMSMMSXXAAMAMMSSSMMSMMMAMAMXSMMAXASXMXMXMXXASMSXMXASXSXSAMXXAAAMXMASXSXMASMSMASMSSSMAAXXMMMSAAAAMASMMMMAM -SSSMAASAMAMAAAAXAAAMAMSAMAASAMAMMAMSMSAXAMXSSSXSXAXXAAAAAMAMXXAXAMAMXMAMSMSMSSXSMAMSMXMAMXSMSAMMXMSXXXMAMXMAMAXMAMAAAMXMSMMAAAMMMMMMAMXAAXSA -AMAMSMSASMSXMMSMASMMMXMAMSMXAMXASMXAASMMASMAMXMAXASMMSSSXSXSXSXSAMXSXMAMAAAAMAMXMSXAAXSAMXXAAXAXAXMMSAMAMXMXSMSMMSMXMAAMAAAMMXSAMAMMMMMXMAAX -MSAMMXSXMXSAXXXAXXMASMSAMASMSMSAMAXMMSXAAMMAMAXMXXXAAMXXMMAMAAAXMMAAMMXMMXMMMMAXSAXXSAMXMMMXMAMSXSAASASXSAMMAXXAXSXSXMASMMSASASXSASAMMSMXMXM -XMXMAXMAMAMAMASMSASMMXSASAXXAASASMXXAXAMXSXMSXSASMSSSSSMSMAMMMMMMMXSXASMMMXXAXXMAMASMMMAAAXMXSAAMMMMSAMMSASAMSMAMXAMXMASXAXAMASMSASMSAAAAMAM -SMSSMMSSMMSMMXAAMAMAAASXMXSSMMMAAXSMMSXMAXAMAMXAAAAAMXAAXMAMAAXAASAXMAXAASMSSSMMMXXXAASXSSMSAXMMMAMXMAAXSMMMAAAAXMXMAMSMMSMXMAMAMAMAMXMXXXAM -AAAAAMAMXMAAXXMAMSMXMASXSSMAASMMMXMAMXAMSXMMAAMXMSMXMXMMMMSXSSMXAMXSXAMXMMAAAMAAXXMSMMSXXXAMXXMXMASXSSMMSAMXSXSMSMMXAXAAXAASMSSXMAMXMSSMSSSS -MMMXSMSSSSMSSSXAAAMXSXMASAMAMMXMSMSXMXSXAASASXSXXXMASMXSXAMXMXMMAXXAMXMMAMMMXMSMSMAMMASMMMMMXASAMMSMMAXAMAMMMXMMXMASXSMAMMSMAAMMSSSMXAAXMAXA -XASAMMXMAAAMXMASMMSAAAMXSAMSXSXMAASMMMXMSMMAMASMXAXAMAAMMMSASAXMMMMMSAAXXMSSMXAAAMAMMASMSAAMMMSASASASMMXMMMAXAAAASMXMAXMXXAMXMAAAAAAMSSXMMMX -MSMASAXMSMMMAMAXSXMASXMMMXMXASMSMSMAAAXAAXMAMMMAXMMSMMAMAXSAMSMMAAXXAAMSAMAAXXXSMSMSMMSASXSSSXSAMXSAMXSXASMMSMMSMSAXSMMASMMMAXMMMSMMMAMXMXMX -SAMXMMMMAMMSMMSMAMSXMMXMASMMAMAXXAMSXSSSMSMXXMASXMAMASAMXMMXMAMXSMSAASMAMMSMMMMAAAMMAMMAMAMAXAMXMXMAXAMSXMAXAAAXMMXMAAAAXAASXSMSAMMXASXMASMS -SXSASAAMASAXXAXAMAXASAXMAMXMAMSMSMAXMAMAXSAXXSAMXMASXXAMXXXAMASXMASMMMMXMXMAAAAMMMMSAMMMMMMAMMMAMXSAMMXMSSXMSMMXSAMMSMMMSSMSAAXMAXAMXMAXAAXA -SASASXSSXSAMMMMSXSMXMASMSSMMAXMAMXAMASXMMMMSMMASMAAXAMASXMSXSASAMMMXAXXMMASXMMSXAAXMSMXMAMSXSAXAMMASMXASAMSAMAMAMASXMAAAMAAMMMMMAMMSAXXMXMAM -MAMAMMMAXMXXAASXXXAAXAMXMAMSSSMXAMXSXXAXMAAAXSAMXAMXMXAMAMAMMMSMMAAMSSMASASAMXXMMSMMXXXMAMXASASXMMAXMXXMAXXMSAMXSAMASMMSSMMMXMAMSSMAMAMSSSMX -MXMXMAMMMMASMXXSAXSMSAMMMAMMMAMSMSASMSXMSMSXXAMXAXSXSMMXAMASAMMMSMSMAAXAMASXXXMASAAMMMMSMSMMMMMMAMSMMXSSSMMMSXMXMAMXMAAAAASXMAMAMAXMAXMAAAXM -MSSSXXXXAXAXXXMMSMAXSAASMSSSMAMAAMAMXSAAXXAMSSMMSXMASXSSXSXSMSAMMAMMMMSXSMMXSAMXMSSMAAAAAXAAASMMSMAASXMAXAMAMXMAXAXSMMMMSMMMSSMSSSMXMXSMSMMA -MMAAASMSXSMSMSMAMSMMMAMXAAXMXMMMMMAMMMMSSMXXAAAAXAMAMAAMAMAMMSASMAMXXAMXXAXMMMSXMAMXSMSMSMSMMMAAMSSSMAMAMXMAXAAMXMXMAAAXMMAAAXAAAMAAMAMXAMXS -MMMMMMAAASXAAAMAMAMAMAMMMMXSASXSAMASAAAAMAMMSSMMSXMSMSMXAMAMXMXMXXSXMASMSSMSAAXXMAXXMMXAMAMMSSMMMXMAXSMMSASAMSXSASXSAMSSSSSSMMSMXMSAMMSXMSAM -SSSSSMXMMMAMSMSMMASASMSXMAMSAXASAXAXMMMXMAXXAXAXAAXXAAASXSMSXMASMXMASXAAAXASMSSMSMSMSMMXMAMXAAMAMMSSMXMASAMAXMASMXAASXMAAAAMXAXMAXMAMASAMXAM -AAAAXSSMMAXMXMAXMASMSMSAMAXMXMXMMMSSMXSASXSSMSMMSSMMMMXMXAXAXSASMAAAXMASMMXMAXMAAXAAAMSMSSSSMSMAMMAMXXMASAMMMMAMXMMMMMMMMMMMMASXXSSXMASAMMSS -MMMMMMSAASMMXMAMXAMXSXSASMSSMMSASXAAMASASXAAMXMAMMMSAMAMSSMSMMXSXXSAMAMXXMMMMXMSMSMSMSAAXMAXAXXXXMASXMMAMXMXSMMMSMXAXAMMSXMMMSSMXXXAMAXAMXAX -XSXSASMSMXAXMMASMAMXSASMMAAXAXSAMMXSMASMMMSMMXMMXAASMSMXAXAXSMAMAXMXASXMXXAAMMMAASAMXMMSMMSMMMAMSMMSAMXMSAMAMAAAMAMXMASAMAMXMAMXMXSSMASMMMMS -XAASMSAXXMXMMMASXSMMMXMAMMMMMMMMMMXMMXXAMXMAMSSSSMMSMAMMMMMMAMXSXSASXXASMSSXSAXMSMAMXSAMAAAASMSMXAASAMAMSXMAXSMSMSSSMAMMSMMAMMSASMAAAAXAAAAX -XMMMMMAMMSMMXMAXAMMXXASMSAAXAAXAAMXMASXSMASAAMAAXSAXMAMAXAMSMXMAMMAMMXAXAAXMXXMXXXXMMMASMXSMMXMASMMSMMSMMMSXMXMXAMAXMAMXAASASXSASMSMMMMXMMMX -MXAAAMAMAAASXSSMAMMSSMMXSXSSSSXSSSMXMAAXSXSMXMMMMMSSSSSSXMXMXSXXXMAMASMMSMXXXASMASMAXMMMMAMAMXMMMAAMMAXAXAAMSMSMAMMMMASMSXSASXMXMXXXXMAMSSSM -ASMSMSSMXMMMAAASXMSAXAAMXAMMAAAXAMMASMMMSMXMSAAMMAXMMXXAASMMASAMMXMMXXXAAAMSMMAMAMXAMXMAMAXMMXSSSXMSMMSSMMXMAAASAMXAMMAMXAMXMASASMAMSMMSAAMA -MSAMAXMASXXMMMMSMMMASMMSMSMAMMMMAMSASXMAXMASMSSSMSSMSMMSMMAMASAMAASMSXMMMXMAASXMASXXAMSAMXSXMAMXMMXXAMXAMXASMSMSMMMXSMAAMXMASAMMAMAAMAMMMMMX -MMAMMMMMMMAAAMXXAMMMMXAXAMAAMXXMXMMASAMMSSXSXAXXXMAAXXAAMSAMMMMMSASAMXMASASMXMMMXSAMAXMXMXAXMXSAMSMSXMXXMSXSAMXSAMXAMMMMMSSMMASMSSMSMMMAXXXX -XSAMXSXSASXSMSXSAMXSSMMMMMMMSXAMMXMASAMAMMMMMMMSMSMMMMSMXAASMMXAMXXAAXAXSASMSAMSAMXSMSMMMSMXXAMXSAAMMSAMXSXMASASASMXSAMAXAAXSAMMMAMMAMMSSMAS -XSAXAXMMASMAAXASXXMASMXAXAAXXXAMXXSXSMMMSAAAAAAAAXAMXXAMAMXAAXMXSAMXSSMMMMMMSAMAAXAXAAAAAAXMMXMMSMSMAAXAXSAXAMASAMXAMASXXMSMMMSMXAMSAMMXAMXA -ASAMSSMMMMMMMMMXMXMAMXSXSSSSMSSMMASAMXSASMSMXMXMMMMSMSMSMXMSXMMASAMAAAAMSXMXSAMSSMSSSSSMMSASXMSAXAMMMMXSXSXMASAMXMAMSMMXSXXMXXMAXSMSMSXMAMXX -MMAMMAXSSXMXSXMAMAMASMSAAAAAXAAASAMAMAMASMMMSSMSMMMAMXMAMAXXAMMASAMSSSMMSAMXMAMXXMMAMXAXXMAMAAMAMXMSAAMXMXMAXMASXSXMAAXAAAMAMMMAMXAMAAXSSMMS -XSAMSMMMAASAMAMSSMSXSAMMMMMMMSSMMMSAMASXMASAMXAAASXSMMSASXMSAMAMMXMAAAXASAMXMXMSXSMAMSMMXMAMMMMASXASMMAMMSXMASXMMMASMSMXMAMAAAMSSMAMMMMAAMAM -MSAXAXAMSMMASAMMAXXMMXXMASXXAXXXXMSMMXSMMXMAMMMMSMAMMASXSAAXMMSSMMMMSMMXMAMSMSAMAASAMAAAASXSMMAAAMAMAMSAAMMSAMMMMSAMAMMMMXSXSSXMAMXMMMMMSMMS -XSXSSSXMMMSMMXMSAMXXAAXMSMSMXSAMXMMMSMMASAXAMXXSXMAMMASXSMMMSAAAMXSMAMSMSMMAAMXMAMSMSSSSMSMSAAMASMASXMXMXXAAMAAAAMASAMSAMXAAXMASMMMXSXSAAASX -AMAMAXMASAXAAAXAAMMMMXMXAAXMASAMMXAAAMXMSXMMXAXMAXSXMASXSASAMMSMMAXSAXXAAXMMMMMXMMXMAMXMASASMMMXXXASXMSASMSMSSSSXMAMAXSSSXMAXAXASAAASAMXSXMX -MMAMMMXXMXSMMMSSMMAAXXSMMSMMXSXMMXMSSSSXSMASMXMASXMAMXSAMAMSSMXAMXXMMSMSMSMSSXXXMASMMSSMAMXMASXXMMMSAXMAMMXXXMAMXMSSMMXAXXXMASMMSMMSMAMAMMMM -AXASXXMMMASXAXMAASXMSMSAAXXMMSMSSMMXAAAAXAXMASAXMASAMSMXMSMMSAXAMXXAASXMASAAMSMXMAXMAAXMAXMSMMMMMAMMMMMMMASMSXSASMAAASMMSMMMAXAAMMMXMAMXXAAA -MSMSMSAAXAMMMMMSMMAAXAMXMXAMAMAXMASXMMMSMMSAMMSMXMMAMXAMMMAMXMSSMASMMSAMAMMMMAMAXMXMMSSSMXMXXAAAXSMMXSAAXMMAAAXASMMSMMAAAAAMMSMMMAXMSSSMSSMS -XAAMAMMXMMSASMXMXSMMMSMSSSSMSSSMSAMAASAMXAXAXMAMASMMMMXMASAMXAAAMMXMASAMAXAAXAMMMMASXMMAAASMSMSXXAASASMMMAMSMMMMMAAXXSMMSMXMMXMASMSMAAAAAXAM -SMSMSMSXXXMAMAAMAXAXXMAMAAXAXAMAMMMSMMMSMSSMMSASXSAMASASASAXXMSMMXAAMMXXMXSXSMSMASASAMXMSMSAAAAXMMMMASAMSMMMAMAAMXMXAXXMXXSMSAMXAMMMASMMMMMM -AAAXAXAXXMASMSMMMSMMMMAMMMMXMAMSMMAXAMASXMAXASASMSAMMSASASMMSXMASMMSMMAASAXASAAXAMASMMAXAAMMMSASMSMMMMXMAXASASXSMAXXXMMXMAXXXXMAMMMMAXXMSSSM -MSMSSSMMXAMXAAAXXAMAXSXSXMAXSAAXAMXXAMXSASAMMSXMASMMMMAMAMAASASAMAXMAMXSMASAMSMMSXMMAMXMMMMXMMAAAAXSMSMSMSMSASAMXXSXMAXMMSSMMSMXSAMSMSSXAAAM -XMAXAAXAMSMSSSMMSMMSMSXXMAXXMMSSSMSSXMSSMMMSAMAMAMAAMMMMXMMXSMMMSMMSAMXXMXMXMXXAAAXSXMAXAASAXMAMXMMMAAMAAMXMMMAMXMAXAMXXAAAAXSAAMMXAAAAMMSMM -SMMMXXMMXAAAXAMXAAXMXSXMASXSXXAAXAAAAMAMAAAMAMAMXXSMSSXSMSXMXXAAAAXSAXMSMSAMXXMASMMAASXSSSSXMMSXMSAMSMSMXMAXASAMAAXXMXSMMSSMMMMMSXSMSMMXMAMS -AAAMSSMMSMSMSMMSSMMMASAMAXMMMMMSMMSSMMASMMSSSMSMSMASXMAMSAXMASMSSSMSAMSAMAMMSMMMAASMMSAMXAMAXSXMASAXAAAMMSMSXSASXSMMSMMAXAAAXSAXSMSMXXXXSASM -SSMSAAAAXAMXXMXAMASMAMAMAXAAAAAAAMMAMXASAAAAAAAAAXMASMAMAMXMAMMAAAMMAMSASXSAAAXXMMMAAXAXMAMSMMAMAXMSMSMSAAMSASAMAAXAAASXMASXMASMSAMXSMSAMXAM -AAMMXSMASAMXMXMASXMASMXMMSSSSMSSSMSXMMASMMMSMMMSMSAMXMASMXSASMMMSMMSMMSXMAMMSSMAXXSMMMMXSASAASXMXSASAMXMMSSMAMAMSXMSSMMMSAMXMAMXMXMASAMXMSMX +Card 1: 9 32 7 82 10 36 31 12 85 95 | 7 69 23 9 32 22 47 10 95 14 24 71 57 12 31 59 36 68 2 82 38 80 85 21 92 +Card 2: 16 35 95 22 59 82 76 60 19 88 | 63 91 16 35 26 82 95 51 53 60 94 59 56 73 28 76 12 44 22 62 8 7 19 38 88 +Card 3: 1 88 48 52 70 19 11 78 94 28 | 19 92 70 18 34 78 83 8 82 87 3 97 66 31 63 17 69 4 75 94 52 54 77 24 45 +Card 4: 72 14 2 92 65 62 16 28 55 91 | 73 8 35 4 9 86 83 51 47 53 3 7 15 52 96 54 49 88 85 30 6 59 81 33 99 +Card 5: 60 61 24 41 30 77 94 50 38 75 | 47 93 82 98 96 5 9 53 17 6 10 21 2 91 80 4 14 71 29 69 62 1 7 87 88 +Card 6: 21 4 16 41 58 68 66 22 64 94 | 72 69 60 62 34 21 75 66 38 25 63 17 81 23 71 73 78 64 89 24 26 56 68 79 51 +Card 7: 10 90 4 56 14 26 7 23 57 19 | 62 10 60 51 46 34 23 49 44 8 53 50 2 56 21 81 69 89 87 91 16 63 38 36 22 +Card 8: 36 27 38 47 16 57 96 31 43 76 | 62 99 87 68 76 44 49 63 47 16 58 81 84 48 45 88 64 34 54 42 72 24 26 12 50 +Card 9: 92 9 35 2 26 97 79 88 43 45 | 89 96 62 1 39 98 72 66 28 78 64 68 42 63 15 25 22 60 31 91 69 94 21 81 29 +Card 10: 40 17 3 9 47 23 82 90 13 87 | 51 2 36 85 34 27 11 53 71 38 8 57 58 17 24 20 54 23 31 37 35 70 9 83 99 +Card 11: 2 21 9 53 45 19 91 74 23 25 | 29 26 91 39 58 18 96 53 31 63 46 21 32 54 22 66 17 25 94 74 4 41 77 35 23 +Card 12: 13 84 68 67 99 97 73 49 86 65 | 97 49 35 40 42 80 45 11 94 53 99 29 72 73 23 77 62 3 38 90 83 68 59 20 95 +Card 13: 70 9 7 11 95 46 69 91 22 71 | 30 56 31 90 91 69 17 71 25 46 66 9 62 89 70 98 36 57 45 94 21 40 75 95 24 +Card 14: 54 37 89 14 18 1 60 34 7 80 | 83 98 11 85 50 35 61 29 18 67 33 63 32 92 68 65 95 56 74 96 27 73 81 47 15 +Card 15: 25 82 90 66 50 40 15 43 32 62 | 49 77 96 36 89 70 50 29 26 1 20 71 37 30 9 91 7 52 5 82 51 55 72 38 12 +Card 16: 26 46 79 29 52 10 87 75 45 49 | 52 25 2 42 73 44 58 85 10 37 4 17 8 86 95 65 35 31 16 12 99 51 70 80 45 +Card 17: 17 96 64 38 73 11 32 24 25 65 | 83 37 25 81 59 18 4 15 98 87 2 1 3 60 5 53 67 46 6 20 79 84 95 50 62 +Card 18: 48 50 90 87 40 71 59 61 30 85 | 85 19 13 39 76 55 72 29 5 84 22 91 67 63 74 73 61 90 62 42 30 9 69 87 48 +Card 19: 4 99 93 55 22 37 41 75 32 79 | 95 7 65 50 40 49 42 64 89 1 59 33 9 53 20 44 23 98 60 30 39 12 66 84 45 +Card 20: 14 34 73 91 30 48 35 44 50 8 | 48 33 35 40 65 29 9 42 18 79 43 89 92 68 75 97 87 69 85 80 98 14 6 25 76 +Card 21: 33 15 83 71 94 61 87 54 36 72 | 56 52 83 46 32 99 36 67 12 47 38 13 14 2 7 26 20 63 90 40 37 6 84 42 92 +Card 22: 66 45 79 71 92 57 47 43 62 9 | 45 89 9 5 53 84 80 19 77 61 68 40 98 23 56 36 6 60 93 1 11 49 71 52 29 +Card 23: 29 53 13 4 76 62 25 94 82 98 | 24 45 85 59 41 11 13 78 54 67 74 21 50 75 16 37 63 86 14 26 92 31 57 33 40 +Card 24: 16 66 90 39 24 92 53 76 52 31 | 21 7 57 65 58 2 10 61 35 73 68 95 84 43 12 18 76 71 83 15 82 88 30 55 5 +Card 25: 9 45 17 42 64 93 54 33 77 62 | 35 81 82 18 47 92 2 20 95 1 6 58 40 73 43 37 15 48 23 75 26 13 50 63 79 +Card 26: 1 99 92 73 57 29 18 97 34 5 | 82 89 61 3 95 39 14 98 15 87 45 48 49 60 22 28 65 16 9 58 4 53 38 56 51 +Card 27: 87 45 35 93 62 1 66 91 6 3 | 51 60 96 84 35 91 6 28 32 40 3 57 29 90 73 12 81 89 31 69 97 66 70 36 18 +Card 28: 72 89 51 45 10 21 84 23 6 94 | 26 45 23 13 68 51 89 66 34 99 83 70 44 56 72 57 73 94 30 84 61 80 85 29 6 +Card 29: 58 80 96 47 13 44 71 38 55 54 | 58 35 3 61 81 96 71 44 43 14 36 54 20 69 63 13 75 28 80 18 73 11 38 55 47 +Card 30: 44 17 81 16 13 65 85 60 34 46 | 60 71 72 13 10 51 65 56 34 59 80 75 18 64 35 92 58 50 97 46 81 37 44 16 17 +Card 31: 84 55 99 95 42 83 26 33 43 87 | 78 59 45 26 28 94 63 17 2 73 38 84 96 34 99 19 75 65 8 92 58 20 11 82 57 +Card 32: 57 67 49 76 15 84 27 39 24 14 | 20 15 21 14 67 97 76 19 17 38 23 41 24 32 27 57 26 81 99 49 34 96 9 84 39 +Card 33: 96 76 23 95 5 37 8 62 65 63 | 59 23 67 51 40 68 70 38 8 36 41 53 62 65 96 76 66 57 37 5 46 34 95 19 69 +Card 34: 52 13 90 81 94 62 91 40 53 42 | 82 90 35 13 55 95 93 74 44 70 89 87 62 5 80 22 53 94 21 77 54 20 18 52 40 +Card 35: 1 75 37 64 17 12 57 18 58 3 | 65 74 89 12 72 64 93 23 51 73 44 80 21 7 35 87 42 82 25 53 71 38 79 43 61 +Card 36: 15 49 18 30 20 90 69 3 60 59 | 14 63 53 86 5 62 69 52 21 9 18 48 13 34 2 67 60 55 10 98 15 81 88 83 94 +Card 37: 48 39 43 81 40 59 70 22 62 61 | 48 14 79 26 12 56 3 89 66 17 87 9 43 27 73 23 47 1 18 97 96 65 59 42 6 +Card 38: 35 94 15 31 22 55 8 2 11 45 | 78 53 41 13 37 64 36 90 26 97 16 99 57 54 20 59 82 24 58 81 14 74 95 93 79 +Card 39: 74 25 37 8 53 36 86 68 91 79 | 48 45 24 80 20 49 86 42 47 28 17 22 93 38 35 34 85 21 18 14 97 61 27 41 88 +Card 40: 41 16 26 14 79 27 62 55 80 99 | 52 83 5 38 69 11 89 6 35 58 4 74 99 97 63 30 90 33 46 60 95 59 22 76 40 +Card 41: 57 77 60 66 35 4 13 89 14 40 | 78 4 97 58 9 65 94 44 89 95 80 7 47 59 37 26 19 76 91 18 45 6 56 3 90 +Card 42: 83 19 31 59 78 54 22 16 44 88 | 53 84 90 39 56 29 44 55 58 13 72 80 49 6 28 97 25 18 99 89 40 43 10 33 71 +Card 43: 81 94 73 42 85 45 28 61 88 19 | 84 86 36 44 51 40 82 72 39 57 13 53 87 83 38 76 63 35 47 15 2 95 79 26 1 +Card 44: 78 28 92 59 51 37 61 55 58 98 | 49 6 30 89 61 98 58 78 31 28 48 92 60 56 59 51 29 14 37 63 38 55 24 42 21 +Card 45: 23 59 74 5 81 53 3 93 54 68 | 68 15 38 45 66 61 87 54 3 81 74 43 5 25 59 23 93 78 44 72 53 52 89 97 48 +Card 46: 79 17 74 72 84 44 3 59 66 76 | 3 44 95 84 66 79 62 97 63 48 76 10 75 72 6 17 74 94 80 59 30 12 20 83 87 +Card 47: 98 18 11 52 66 14 68 89 80 19 | 66 67 23 52 80 89 95 44 60 11 55 34 18 59 19 53 98 82 14 38 63 65 90 68 77 +Card 48: 84 64 87 81 54 61 31 57 53 79 | 99 74 9 45 54 14 96 38 7 82 4 17 43 69 62 83 66 81 41 86 55 75 30 10 21 +Card 49: 95 4 89 38 67 71 70 75 35 39 | 39 71 22 80 75 43 35 89 17 38 4 29 7 69 94 63 85 6 5 95 70 58 67 50 68 +Card 50: 18 59 9 34 83 68 80 21 61 78 | 10 96 19 11 74 15 26 8 65 56 35 79 32 44 55 36 94 95 53 86 3 27 88 67 85 +Card 51: 17 79 69 92 39 51 46 81 14 21 | 49 92 48 29 47 74 76 81 69 85 86 98 73 43 24 45 21 84 25 10 17 44 1 31 28 +Card 52: 39 31 1 21 7 27 85 59 35 67 | 84 29 91 89 70 5 94 23 21 65 71 12 26 41 15 11 61 73 14 52 76 9 16 24 75 +Card 53: 93 21 1 18 54 87 35 98 9 48 | 44 30 79 82 23 43 51 46 34 35 9 75 12 60 77 36 27 86 32 47 85 98 87 1 13 +Card 54: 51 95 69 73 66 61 9 28 75 24 | 42 28 87 69 24 19 56 98 57 66 95 73 9 51 61 50 64 75 76 27 86 1 29 30 79 +Card 55: 73 99 56 8 10 97 26 64 52 2 | 79 47 80 89 5 53 37 63 41 48 12 96 1 25 84 70 9 76 58 75 72 31 20 17 46 +Card 56: 71 43 8 50 95 1 2 77 45 81 | 43 85 24 59 46 15 36 81 3 50 9 45 95 77 71 12 65 1 60 2 8 5 7 20 88 +Card 57: 10 76 62 41 58 67 80 39 9 21 | 58 10 42 60 37 27 51 1 25 18 56 23 67 88 62 50 87 80 9 54 41 81 26 21 7 +Card 58: 41 80 74 71 10 63 58 26 38 21 | 63 66 80 65 12 68 72 10 20 91 88 44 11 70 36 71 3 61 74 7 21 41 67 43 38 +Card 59: 41 60 82 94 90 7 76 69 28 95 | 35 69 77 9 81 65 11 90 19 22 36 75 12 52 98 55 92 79 14 67 47 83 39 74 94 +Card 60: 44 82 36 55 94 72 99 70 6 50 | 35 29 95 62 97 11 33 92 19 91 10 54 56 53 98 1 39 16 64 52 73 66 30 4 43 +Card 61: 55 19 82 18 24 91 99 36 54 98 | 68 58 99 51 79 1 7 50 4 28 59 8 19 14 10 40 57 34 60 82 88 47 52 80 54 +Card 62: 14 20 49 2 94 59 33 72 86 34 | 35 33 54 94 5 14 7 6 60 41 40 38 20 26 72 22 49 13 83 98 36 3 51 82 74 +Card 63: 73 78 8 64 52 7 86 30 98 27 | 95 4 48 24 45 72 60 31 25 18 59 90 51 14 50 65 2 16 3 33 94 11 93 6 32 +Card 64: 26 71 76 85 70 80 81 61 58 77 | 87 10 24 38 4 40 42 96 47 63 99 7 20 68 78 66 53 12 46 90 75 59 60 88 5 +Card 65: 26 37 35 44 45 10 13 85 6 8 | 39 80 93 79 60 89 58 96 44 85 59 94 24 23 48 86 22 42 6 5 25 57 43 90 21 +Card 66: 62 45 67 18 36 84 66 90 98 95 | 1 71 68 54 76 48 42 35 19 94 39 69 80 17 41 20 93 59 29 30 15 37 14 12 88 +Card 67: 33 10 5 94 72 86 84 80 19 85 | 76 26 61 3 93 17 74 42 23 16 18 2 14 46 1 38 72 13 28 29 91 21 12 7 48 +Card 68: 70 73 2 79 88 36 35 13 16 6 | 75 47 30 7 89 78 39 69 96 91 19 83 61 4 10 77 81 44 90 50 29 38 32 53 60 +Card 69: 60 20 40 38 6 49 5 85 84 80 | 38 12 59 94 27 15 85 17 65 69 82 36 7 43 47 99 5 87 61 77 4 83 81 90 40 +Card 70: 85 96 73 11 22 33 9 61 37 42 | 27 70 96 74 9 75 60 88 22 86 13 63 37 80 83 73 42 85 17 33 35 82 61 65 11 +Card 71: 41 47 37 52 73 97 77 69 5 45 | 47 95 78 41 74 54 5 88 63 87 34 18 37 85 26 73 52 50 28 77 97 86 1 69 45 +Card 72: 90 88 85 71 5 59 65 52 30 13 | 5 29 68 62 24 12 90 30 85 18 76 25 40 60 77 14 19 33 61 88 70 17 95 73 2 +Card 73: 44 98 60 49 51 9 21 88 87 70 | 63 3 46 65 49 70 44 7 74 88 35 45 17 24 51 60 25 9 98 87 21 10 81 83 61 +Card 74: 31 23 80 11 13 72 63 57 29 70 | 57 28 70 45 3 94 5 80 14 11 2 29 20 47 72 63 10 31 66 19 79 38 74 13 23 +Card 75: 82 54 62 8 30 7 88 20 71 85 | 83 65 74 44 79 3 29 64 51 35 98 56 41 22 27 13 26 34 39 59 24 4 33 14 63 +Card 76: 16 24 87 73 17 71 69 26 4 76 | 59 71 32 3 56 64 24 41 66 26 12 36 87 65 73 4 75 16 8 17 57 69 49 46 76 +Card 77: 98 57 96 56 39 12 69 37 54 65 | 21 48 87 97 29 27 56 31 18 88 7 79 70 35 64 38 91 15 14 43 3 84 20 85 32 +Card 78: 5 62 37 51 73 78 18 64 42 48 | 35 82 85 62 23 66 3 14 19 64 79 18 93 53 69 58 96 63 90 24 41 65 94 40 95 +Card 79: 8 73 46 15 99 29 96 34 59 75 | 48 65 57 99 63 33 37 73 79 28 72 56 34 3 25 75 70 95 58 27 43 30 54 8 87 +Card 80: 91 81 96 55 44 82 31 23 11 74 | 24 51 96 77 40 28 56 44 54 89 78 38 76 74 17 92 3 23 36 63 80 65 55 7 11 +Card 81: 81 77 30 26 93 28 97 10 84 88 | 57 28 36 33 54 11 96 58 18 99 30 1 5 79 12 24 56 93 25 78 10 40 76 84 81 +Card 82: 31 67 3 90 28 76 55 6 29 26 | 75 34 82 73 38 17 67 91 86 40 43 45 42 60 37 63 55 87 93 84 58 78 80 20 11 +Card 83: 8 97 43 88 62 34 68 50 82 71 | 8 68 2 96 85 36 10 14 35 32 73 16 26 29 67 60 37 89 52 98 74 22 78 1 59 +Card 84: 77 97 5 33 12 73 90 57 31 19 | 97 46 48 57 4 10 94 85 59 31 17 60 81 49 62 58 25 8 79 78 50 36 55 51 32 +Card 85: 74 85 97 19 76 99 21 47 20 50 | 50 69 72 39 45 26 13 7 92 21 63 58 84 9 94 53 43 81 89 49 62 32 70 82 10 +Card 86: 81 96 82 76 97 77 40 3 68 98 | 4 26 69 88 43 15 78 64 79 92 62 30 49 89 37 59 95 63 58 98 75 99 80 51 6 +Card 87: 80 73 51 20 41 67 31 66 97 27 | 16 59 75 86 24 83 95 44 85 13 11 77 70 14 2 39 88 89 93 55 52 6 53 94 98 +Card 88: 18 38 66 87 56 25 46 63 37 15 | 86 22 17 96 10 49 80 21 15 77 66 3 20 95 36 87 16 74 46 26 79 76 38 43 6 +Card 89: 51 55 41 3 20 60 99 70 23 43 | 51 81 99 32 50 96 41 53 80 76 43 3 83 65 20 46 70 60 38 35 57 55 7 74 23 +Card 90: 94 19 23 81 44 15 74 73 22 71 | 83 66 54 43 23 55 69 81 85 71 62 96 19 86 78 22 15 58 94 74 44 73 57 17 8 +Card 91: 72 77 21 83 82 75 1 56 99 43 | 42 77 56 90 68 96 39 72 83 97 21 17 66 70 49 43 69 63 82 75 47 99 87 11 1 +Card 92: 62 58 71 78 38 80 52 94 48 92 | 11 7 56 4 77 59 62 49 14 94 52 80 92 64 71 58 13 1 48 12 78 9 17 38 35 +Card 93: 98 45 63 46 48 97 91 29 90 15 | 95 31 41 15 43 80 24 44 75 83 30 87 98 12 27 36 74 16 86 35 33 85 54 94 78 +Card 94: 27 60 36 26 76 65 86 89 10 54 | 80 78 95 36 88 82 6 46 73 58 22 40 12 50 76 14 65 26 70 60 54 17 27 89 93 +Card 95: 18 62 66 98 24 16 80 58 53 97 | 93 9 15 61 51 19 81 8 21 36 6 71 80 13 52 87 5 37 86 75 68 60 97 54 10 +Card 96: 6 55 40 79 3 67 13 96 91 34 | 54 13 63 17 52 72 7 81 82 69 6 91 90 57 14 2 8 74 75 40 96 21 3 38 55 +Card 97: 40 33 3 59 8 88 99 14 41 74 | 99 48 41 35 69 64 18 50 3 96 40 8 36 63 17 90 59 33 49 26 88 93 74 27 14 +Card 98: 63 44 52 11 32 46 62 19 30 6 | 71 51 48 70 82 44 8 60 92 21 77 62 53 95 31 73 80 96 55 34 86 97 76 88 6 +Card 99: 66 46 22 44 94 50 68 59 25 75 | 40 46 56 32 64 89 80 22 60 87 77 9 59 25 75 38 44 48 8 50 94 68 66 72 20 +Card 100: 15 8 13 93 80 58 66 10 76 32 | 58 68 34 54 53 79 69 18 71 33 66 13 92 77 93 40 80 94 76 75 15 10 83 8 70 +Card 101: 22 25 48 97 63 81 7 84 60 43 | 58 91 10 85 59 76 16 36 96 39 42 50 72 34 86 61 67 11 79 27 83 73 98 57 70 +Card 102: 1 35 10 28 59 2 74 45 25 13 | 47 56 90 19 20 95 64 72 88 28 27 18 31 7 55 61 48 2 10 81 70 25 96 73 74 +Card 103: 28 5 31 23 76 83 25 94 35 18 | 10 85 72 18 23 60 17 50 30 76 35 83 8 42 65 4 34 84 28 39 5 98 25 94 92 +Card 104: 32 45 61 94 5 44 3 15 77 87 | 37 15 84 94 19 33 11 51 1 81 16 61 87 68 74 97 62 88 8 98 45 44 92 70 83 +Card 105: 32 89 96 15 67 83 9 64 60 44 | 76 38 75 54 44 67 3 88 89 46 15 40 96 19 7 36 55 64 1 83 78 72 31 18 21 +Card 106: 78 7 12 67 54 29 76 66 17 35 | 53 19 78 86 36 33 84 63 16 43 64 46 31 58 66 11 39 38 76 14 49 94 47 67 56 +Card 107: 95 91 53 27 12 51 29 1 36 9 | 43 70 74 89 52 12 82 97 96 4 45 37 14 68 15 58 63 51 59 34 50 81 3 6 83 +Card 108: 68 79 91 36 9 55 21 81 2 17 | 26 21 63 91 27 45 73 92 29 24 74 57 43 61 4 82 20 50 84 88 54 89 81 8 15 +Card 109: 68 37 88 22 26 53 67 43 62 35 | 24 19 46 44 49 7 17 51 21 81 96 30 59 3 72 99 71 58 22 28 60 52 43 65 86 +Card 110: 95 66 14 29 71 44 35 73 15 63 | 2 87 82 39 55 92 33 98 51 20 16 89 24 12 64 8 85 41 37 77 42 45 22 48 52 +Card 111: 83 21 90 50 91 82 73 19 41 25 | 47 74 77 86 84 33 3 99 30 93 37 98 42 59 24 12 69 36 61 68 55 17 32 53 18 +Card 112: 72 29 25 73 15 93 4 36 78 56 | 35 80 62 12 88 59 30 17 51 76 70 64 21 42 79 31 96 83 63 57 1 68 52 53 75 +Card 113: 39 52 17 98 34 9 72 53 47 51 | 70 72 17 48 83 98 64 9 15 94 57 68 87 14 27 55 40 38 53 8 47 51 16 28 67 +Card 114: 18 1 14 61 17 28 24 34 63 5 | 62 64 68 67 8 88 18 73 28 17 14 34 65 95 47 1 31 5 24 99 61 89 63 42 80 +Card 115: 31 76 94 50 65 52 21 53 5 43 | 93 38 97 35 2 82 1 45 65 50 43 59 21 27 94 5 31 53 61 52 10 76 99 44 47 +Card 116: 2 13 64 10 14 29 33 55 19 6 | 91 68 22 47 5 65 23 64 20 18 70 21 45 1 42 31 59 17 61 58 30 73 81 14 2 +Card 117: 52 22 10 59 25 80 48 28 99 82 | 93 52 25 19 94 80 85 28 46 90 74 65 48 99 22 66 87 49 83 57 3 10 59 78 67 +Card 118: 22 98 56 42 95 5 62 50 26 71 | 42 50 56 98 41 92 71 69 60 22 59 64 62 27 30 26 21 87 2 51 40 89 24 95 5 +Card 119: 25 61 90 69 15 3 33 14 59 21 | 61 30 25 44 18 90 74 64 33 73 51 3 14 60 45 82 23 69 46 59 27 21 49 15 7 +Card 120: 99 83 2 21 85 47 45 34 58 31 | 18 34 47 91 58 97 40 60 71 85 24 45 83 21 10 53 56 99 32 38 77 31 2 79 23 +Card 121: 91 63 88 9 66 25 48 94 44 51 | 42 24 19 83 43 9 25 28 18 88 91 35 63 69 66 55 3 14 54 75 80 51 73 94 44 +Card 122: 4 32 37 25 8 13 3 67 39 5 | 94 99 11 5 93 60 29 37 45 28 3 8 32 66 98 25 36 97 34 96 80 67 63 71 31 +Card 123: 93 89 1 53 15 98 21 26 82 42 | 17 25 40 63 15 21 28 42 30 46 13 53 81 74 93 85 98 57 39 65 60 38 12 36 92 +Card 124: 14 12 90 59 56 54 94 80 51 63 | 5 7 14 33 86 94 34 3 80 25 40 56 90 65 63 59 71 67 54 12 82 66 46 51 44 +Card 125: 52 37 74 28 4 96 92 40 3 64 | 23 44 64 71 22 34 35 17 10 74 93 37 40 42 52 96 53 91 92 70 28 4 75 3 12 +Card 126: 40 70 12 23 61 99 47 96 77 24 | 58 32 96 66 44 21 83 84 43 11 94 13 99 62 87 1 31 10 71 53 39 14 95 97 56 +Card 127: 9 40 39 4 19 3 25 96 5 95 | 86 9 31 25 14 19 40 55 5 84 66 4 28 3 88 95 27 1 34 52 97 29 12 96 15 +Card 128: 56 35 9 95 93 66 38 85 39 65 | 92 14 12 79 86 95 66 1 38 93 6 94 77 2 34 62 56 87 46 39 65 72 40 10 45 +Card 129: 77 19 10 24 25 68 67 5 38 29 | 73 59 50 39 37 24 58 56 70 72 74 3 20 66 26 92 71 29 83 15 96 79 2 28 27 +Card 130: 19 42 20 87 76 41 83 47 99 51 | 85 27 63 1 55 9 49 28 25 14 76 51 36 34 53 57 73 12 58 66 78 16 22 84 26 +Card 131: 33 82 49 90 74 24 53 48 12 51 | 48 29 52 12 31 99 81 33 80 76 37 32 96 28 8 51 79 56 26 62 53 10 15 42 58 +Card 132: 51 90 31 49 77 64 20 76 91 45 | 77 93 27 16 45 53 57 84 63 42 25 44 4 64 71 8 70 66 95 34 23 85 35 31 87 +Card 133: 76 84 3 16 25 79 35 8 50 60 | 32 97 7 51 49 12 37 54 59 60 27 87 40 64 38 78 8 53 43 39 81 66 68 44 18 +Card 134: 77 36 47 40 44 14 94 91 39 5 | 95 25 45 99 59 27 64 12 15 9 22 4 50 62 73 39 34 6 8 72 56 96 89 90 35 +Card 135: 33 49 25 71 39 75 30 16 46 55 | 94 82 64 10 16 73 79 68 4 12 1 87 6 53 34 98 66 99 78 59 58 2 36 77 52 +Card 136: 53 22 58 94 49 25 6 64 69 73 | 42 23 3 76 77 83 8 1 89 2 33 78 46 12 34 95 26 96 41 93 97 35 5 82 55 +Card 137: 64 25 86 72 6 39 48 95 73 62 | 52 4 29 18 11 84 79 87 19 32 96 71 61 35 17 15 44 27 68 70 98 45 22 51 85 +Card 138: 60 30 89 73 76 11 23 90 86 80 | 11 89 23 86 66 5 80 13 67 73 59 96 90 76 49 20 84 30 82 29 72 87 63 60 92 +Card 139: 82 6 17 76 72 5 70 45 90 7 | 12 50 25 41 9 16 29 20 63 70 28 10 53 90 76 5 7 82 17 15 45 93 72 97 6 +Card 140: 3 88 95 62 81 35 92 16 21 87 | 92 42 18 35 21 12 30 25 27 17 87 71 81 95 88 40 16 29 69 70 14 62 3 2 31 +Card 141: 2 36 5 53 22 30 40 94 84 52 | 86 67 38 32 90 33 18 26 13 2 96 49 25 74 83 31 54 42 52 36 97 55 63 44 47 +Card 142: 84 77 81 89 56 61 39 2 22 7 | 79 40 62 91 39 20 13 80 81 63 7 22 84 77 6 5 2 42 89 61 53 52 56 75 88 +Card 143: 90 86 6 75 67 76 18 41 36 55 | 25 7 30 21 40 65 47 42 77 34 53 60 97 10 49 39 45 57 8 94 83 93 32 80 98 +Card 144: 26 5 82 70 75 88 53 47 29 93 | 23 40 49 74 62 93 60 75 86 98 53 45 47 29 97 67 8 88 4 5 26 37 71 82 70 +Card 145: 8 62 96 13 21 82 42 54 41 61 | 87 13 23 96 29 27 6 14 53 75 5 24 31 60 90 12 82 51 64 65 70 58 9 74 47 +Card 146: 57 20 68 46 52 36 49 48 14 34 | 52 45 92 33 49 57 61 54 44 18 47 59 46 34 63 32 65 53 50 14 20 80 38 42 15 +Card 147: 47 86 79 34 64 91 57 21 1 89 | 14 79 31 91 44 11 89 75 40 97 81 92 63 73 21 49 93 86 64 22 35 8 13 99 57 +Card 148: 83 62 84 25 96 13 30 99 24 82 | 64 2 65 63 60 98 91 76 81 94 23 22 88 85 28 92 15 38 35 72 52 32 47 69 31 +Card 149: 62 32 13 59 96 78 11 73 34 52 | 89 73 13 1 52 24 71 83 53 97 62 85 78 20 17 11 59 96 74 19 32 29 34 43 9 +Card 150: 76 14 58 69 8 21 49 60 29 6 | 29 86 82 88 3 91 72 71 55 57 51 95 9 61 12 79 23 33 19 20 50 37 62 30 4 +Card 151: 68 93 22 66 81 77 16 75 47 34 | 47 76 34 52 25 68 9 26 29 66 37 57 10 54 99 46 77 95 81 93 53 13 97 22 7 +Card 152: 2 9 24 70 11 42 44 98 79 27 | 18 72 91 78 44 77 35 17 79 21 9 5 4 98 43 54 70 42 2 6 76 11 24 68 27 +Card 153: 36 28 10 9 69 25 87 50 77 11 | 7 54 25 40 85 33 15 20 87 71 96 99 77 53 94 9 67 28 69 32 26 18 63 29 43 +Card 154: 41 15 97 7 50 92 9 66 20 6 | 91 53 3 15 66 92 72 67 85 9 20 1 28 32 14 95 81 34 79 8 7 59 82 52 6 +Card 155: 8 1 15 14 44 81 89 37 55 43 | 76 62 83 79 37 24 56 30 34 58 45 64 23 41 84 71 14 22 60 27 18 9 42 54 85 +Card 156: 1 44 85 92 7 35 52 50 72 26 | 62 69 85 60 80 73 94 37 12 63 99 70 17 51 23 8 95 29 32 55 47 41 6 36 25 +Card 157: 12 49 19 14 28 64 17 76 34 8 | 33 87 95 61 84 55 86 19 92 44 3 42 24 96 94 36 38 13 10 51 15 81 27 75 67 +Card 158: 29 88 66 19 41 57 52 30 46 47 | 16 1 36 91 8 70 27 3 38 32 89 84 90 31 88 49 60 22 18 9 62 67 47 7 34 +Card 159: 99 87 7 36 67 23 14 92 52 82 | 93 41 76 15 8 63 50 40 30 85 92 48 1 99 87 53 46 70 34 5 44 79 16 35 17 +Card 160: 40 35 56 38 93 47 42 72 80 79 | 77 90 83 4 65 61 27 41 21 13 25 68 34 11 84 40 94 42 69 64 14 70 58 97 63 +Card 161: 57 54 92 91 51 37 93 55 59 41 | 2 78 35 85 23 41 74 33 8 21 72 94 63 90 95 64 71 12 65 27 38 18 19 9 60 +Card 162: 51 37 4 45 15 59 71 23 61 77 | 72 81 19 35 53 60 11 93 54 2 31 70 40 28 57 63 6 46 89 96 30 36 12 20 29 +Card 163: 52 53 7 23 29 89 86 43 97 77 | 79 18 34 45 80 61 30 41 68 7 52 89 8 49 29 86 67 17 81 98 97 78 26 48 70 +Card 164: 98 61 60 4 5 28 70 37 41 10 | 22 58 68 41 98 53 30 99 60 61 17 12 4 25 49 10 70 92 5 83 36 28 13 37 56 +Card 165: 16 12 15 73 22 31 20 63 42 95 | 26 53 40 17 97 15 8 25 78 46 44 45 54 39 61 23 51 11 90 95 2 35 68 24 18 +Card 166: 14 89 75 8 90 29 18 27 64 19 | 74 76 7 75 23 72 45 54 59 90 80 44 29 27 20 64 12 89 14 52 79 8 83 11 15 +Card 167: 16 78 33 67 66 63 69 59 36 94 | 89 70 42 47 92 34 14 69 37 83 19 25 57 36 3 44 77 26 73 85 18 59 13 65 76 +Card 168: 33 76 58 94 34 84 79 69 60 2 | 49 54 80 51 68 84 71 17 44 12 82 69 4 88 76 8 98 34 93 5 52 95 13 75 39 +Card 169: 2 63 48 44 25 75 51 36 29 52 | 24 84 56 37 17 60 74 36 77 48 62 32 16 2 80 41 15 35 88 72 30 58 20 49 12 +Card 170: 98 14 67 30 5 15 89 28 74 12 | 99 88 7 35 19 27 81 50 70 97 98 61 2 67 92 46 75 30 53 4 59 1 74 26 45 +Card 171: 4 26 44 61 5 75 76 20 56 33 | 34 97 62 70 83 35 23 78 13 3 86 58 56 65 72 59 76 20 39 32 36 71 33 30 46 +Card 172: 47 15 51 8 77 74 7 41 30 35 | 8 30 45 15 99 80 75 52 74 28 49 81 16 2 66 62 32 10 69 65 92 77 38 73 13 +Card 173: 65 57 60 74 69 55 21 59 10 50 | 32 28 78 16 17 79 67 76 35 66 9 63 80 58 62 20 89 88 92 26 64 10 12 97 3 +Card 174: 40 66 82 30 61 27 78 54 8 48 | 73 45 28 49 52 91 25 20 55 34 33 7 23 4 5 56 74 44 9 75 2 24 71 3 70 +Card 175: 49 42 2 59 41 38 32 83 89 23 | 25 57 90 46 99 54 67 40 73 87 9 27 82 58 53 63 22 7 13 37 52 68 15 81 88 +Card 176: 22 81 29 71 28 4 94 32 19 98 | 53 47 84 63 45 73 7 79 52 31 75 49 55 21 96 38 23 58 1 15 40 83 2 90 41 +Card 177: 44 43 42 73 56 74 64 61 29 89 | 91 15 96 77 65 23 84 20 94 45 95 6 33 13 63 50 53 18 12 24 41 47 54 9 14 +Card 178: 12 16 77 20 89 41 55 94 13 50 | 78 36 67 75 55 12 20 28 94 63 45 81 53 26 43 41 16 89 50 68 77 22 32 62 13 +Card 179: 41 64 96 46 85 5 11 79 89 51 | 98 62 92 55 49 93 90 91 41 64 94 17 48 46 70 31 51 74 34 33 75 12 28 35 84 +Card 180: 27 13 89 84 45 16 77 86 72 83 | 55 89 12 83 5 37 38 53 98 77 16 27 22 78 45 87 35 64 68 93 41 84 13 34 88 +Card 181: 79 31 12 61 49 11 68 56 78 54 | 58 23 21 59 62 72 69 17 12 34 68 87 26 98 67 16 1 3 11 38 31 78 89 27 91 +Card 182: 52 55 4 31 57 5 23 66 78 68 | 52 31 87 50 98 83 66 4 26 25 68 63 14 70 54 29 7 22 85 42 17 27 67 32 5 +Card 183: 71 9 31 84 59 32 74 26 85 36 | 5 9 58 26 50 74 80 37 59 16 44 27 98 11 21 48 43 77 57 62 33 86 24 28 63 +Card 184: 47 16 69 11 99 34 79 65 49 9 | 92 97 64 83 49 73 17 36 29 46 1 15 78 25 58 81 51 23 84 39 60 91 67 3 56 +Card 185: 84 21 9 64 45 19 51 90 91 76 | 91 83 76 26 8 6 21 70 32 42 11 51 19 39 9 69 4 67 82 49 61 68 64 45 57 +Card 186: 69 5 36 53 16 65 64 32 62 50 | 8 4 2 92 18 13 33 9 42 78 59 25 68 79 19 28 38 32 16 36 71 69 65 63 17 +Card 187: 37 58 19 57 26 21 55 92 68 50 | 95 61 58 35 6 55 31 45 76 23 22 96 18 30 86 15 94 70 53 13 80 26 68 87 36 +Card 188: 46 30 47 87 12 68 84 51 90 42 | 71 61 95 42 60 14 22 84 83 48 23 20 27 69 47 18 85 94 96 35 66 93 87 5 50 +Card 189: 36 31 8 73 83 14 39 90 67 74 | 89 21 37 74 36 19 8 14 53 32 17 39 23 96 95 38 46 78 90 3 35 52 26 56 84 +Card 190: 41 75 39 18 97 85 30 24 83 40 | 81 95 22 33 97 40 98 48 30 47 37 39 75 78 46 27 59 85 82 41 6 56 24 12 29 +Card 191: 39 29 11 97 41 63 57 87 10 53 | 14 68 22 52 75 35 97 42 13 38 54 23 24 3 71 20 4 43 86 56 34 70 51 94 47 +Card 192: 18 88 98 45 41 71 32 87 29 99 | 99 85 91 7 21 86 5 12 87 35 95 94 65 57 17 58 39 78 22 49 32 2 8 19 97 +Card 193: 5 31 29 36 40 65 95 74 9 69 | 79 64 74 44 9 95 73 65 70 18 48 58 33 22 88 81 26 57 67 46 42 11 30 5 15 +Card 194: 45 87 50 51 64 69 13 83 40 52 | 54 82 76 85 32 61 70 81 44 33 9 77 99 23 39 60 19 35 31 52 65 78 79 34 95 +Card 195: 48 35 73 17 39 44 91 70 45 66 | 76 3 23 30 15 20 22 40 25 8 90 75 24 42 21 46 10 7 77 72 29 64 55 49 28 +Card 196: 45 95 66 40 83 68 96 84 15 89 | 51 86 89 90 70 88 36 53 14 18 22 74 46 17 56 1 9 65 87 24 30 32 38 66 92 +Card 197: 92 25 8 82 33 4 52 55 95 83 | 75 50 53 28 14 76 61 65 90 29 81 39 27 33 15 56 24 97 80 40 70 13 21 78 37 +Card 198: 30 94 70 37 58 66 8 78 71 18 | 97 64 16 13 77 57 87 74 54 92 1 52 35 23 82 9 72 22 80 27 75 10 15 20 43 +Card 199: 20 30 64 54 88 32 16 59 43 48 | 88 2 11 27 21 52 68 99 75 80 84 62 23 37 56 82 89 8 1 24 48 98 7 15 72 +Card 200: 86 18 84 48 80 11 30 72 1 88 | 16 48 55 32 41 51 18 2 76 72 81 84 58 22 88 27 11 89 8 66 30 53 93 20 19 +Card 201: 35 12 66 89 38 67 14 64 51 7 | 6 88 40 49 86 96 47 67 70 71 23 7 32 42 12 51 30 81 20 74 28 34 35 14 15 +Card 202: 89 13 72 16 67 26 37 46 66 33 | 56 95 63 93 67 97 44 74 83 60 36 78 30 45 87 24 90 70 99 88 80 48 82 68 54 +Card 203: 94 55 82 24 41 48 28 14 42 80 | 28 22 78 14 80 41 42 58 48 13 44 57 61 55 15 47 53 11 21 19 29 82 63 65 94 +Card 204: 54 66 41 71 2 91 73 85 78 69 | 24 82 41 38 45 91 4 68 77 18 54 78 85 73 71 2 69 44 76 80 63 89 9 34 66 +Card 205: 76 2 81 21 16 64 10 6 30 45 | 72 38 8 84 64 21 81 45 69 3 22 5 60 23 18 63 74 9 6 29 82 4 46 30 16 +Card 206: 62 17 63 99 1 31 48 89 22 53 | 28 74 78 47 48 97 73 31 68 23 42 14 2 99 49 37 39 8 35 64 66 92 44 54 11 +Card 207: 69 76 21 35 49 91 77 75 72 53 | 88 57 58 16 91 84 21 99 53 70 19 29 3 56 55 22 49 41 1 72 10 35 9 20 60 +Card 208: 33 97 67 76 69 63 13 41 54 21 | 84 69 9 11 21 50 12 45 97 67 54 42 18 63 62 81 96 33 31 95 26 48 17 68 76 +Card 209: 66 35 6 71 82 16 14 97 68 50 | 58 50 82 71 97 90 96 49 16 84 91 21 98 63 76 31 65 51 1 80 52 30 47 93 33 +Card 210: 56 53 62 97 78 68 27 16 50 10 | 48 71 80 87 8 39 22 9 53 58 54 1 11 14 96 6 41 65 37 34 98 17 85 24 20 +Card 211: 52 6 85 59 80 96 77 26 65 36 | 38 77 86 29 98 27 58 51 8 75 87 50 63 2 82 1 41 92 97 53 33 14 16 93 49 +Card 212: 82 69 16 77 49 12 19 29 30 31 | 42 81 22 94 32 78 61 29 11 1 64 87 19 57 88 82 24 8 7 46 5 28 30 77 26 +Card 213: 71 48 25 24 37 40 77 88 44 74 | 51 92 62 34 33 93 54 78 6 25 10 96 70 63 81 82 85 20 48 12 99 40 86 8 58 +Card 214: 12 43 97 95 19 39 98 13 41 93 | 69 89 10 36 50 20 51 33 67 88 73 59 81 29 17 34 85 28 92 55 5 63 79 72 52 +Card 215: 21 31 62 69 74 97 40 45 20 35 | 25 18 1 52 86 84 68 44 15 47 91 99 57 87 98 17 66 56 73 42 33 93 30 8 95 +Card 216: 94 71 33 51 86 70 60 78 12 17 | 98 68 80 56 47 53 41 55 70 37 46 43 8 22 74 48 62 9 10 65 7 60 39 29 97 +Card 217: 70 98 21 38 77 68 67 39 45 72 | 63 57 37 21 94 64 8 96 69 80 84 25 71 26 83 99 81 31 48 42 41 73 54 60 22 +Card 218: 92 44 79 17 16 34 55 78 19 9 | 52 39 85 98 93 46 21 91 20 45 1 89 66 27 4 88 99 41 86 72 38 40 84 81 69 diff --git a/input/day_05 b/input/day_05 index 876517b..4a2a7c8 100644 --- a/input/day_05 +++ b/input/day_05 @@ -1,1388 +1,211 @@ -91|89 -46|43 -46|19 -98|64 -98|18 -98|66 -67|54 -67|86 -67|57 -67|42 -65|61 -65|27 -65|37 -65|79 -65|28 -78|33 -78|75 -78|65 -78|32 -78|24 -78|39 -53|89 -53|65 -53|34 -53|15 -53|47 -53|44 -53|86 -33|13 -33|24 -33|91 -33|92 -33|79 -33|46 -33|32 -33|97 -35|48 -35|18 -35|98 -35|39 -35|53 -35|86 -35|81 -35|47 -35|73 -93|44 -93|95 -93|92 -93|28 -93|26 -93|94 -93|19 -93|67 -93|89 -93|73 -48|55 -48|46 -48|86 -48|41 -48|54 -48|32 -48|24 -48|16 -48|79 -48|65 -48|13 -34|54 -34|78 -34|42 -34|95 -34|73 -34|26 -34|64 -34|12 -34|67 -34|44 -34|75 -34|18 -24|34 -24|57 -24|82 -24|86 -24|79 -24|41 -24|31 -24|65 -24|15 -24|97 -24|71 -24|27 -24|44 -15|92 -15|44 -15|47 -15|46 -15|93 -15|26 -15|97 -15|55 -15|27 -15|28 -15|12 -15|89 -15|19 -15|13 -61|81 -61|16 -61|94 -61|42 -61|19 -61|53 -61|64 -61|82 -61|78 -61|33 -61|48 -61|57 -61|67 -61|24 -61|98 -73|64 -73|66 -73|78 -73|57 -73|47 -73|39 -73|55 -73|18 -73|33 -73|15 -73|86 -73|16 -73|42 -73|75 -73|54 -73|53 -94|42 -94|54 -94|86 -94|48 -94|53 -94|82 -94|18 -94|47 -94|24 -94|33 -94|78 -94|57 -94|75 -94|66 -94|64 -94|16 -94|73 -54|92 -54|66 -54|91 -54|65 -54|93 -54|27 -54|39 -54|15 -54|28 -54|47 -54|79 -54|57 -54|55 -54|33 -54|13 -54|86 -54|82 -54|46 -47|37 -47|31 -47|46 -47|95 -47|19 -47|28 -47|44 -47|92 -47|43 -47|91 -47|26 -47|97 -47|89 -47|13 -47|61 -47|65 -47|71 -47|55 -47|79 -57|86 -57|66 -57|47 -57|13 -57|34 -57|31 -57|46 -57|65 -57|79 -57|97 -57|27 -57|26 -57|15 -57|28 -57|92 -57|89 -57|43 -57|71 -57|44 -57|93 -75|42 -75|79 -75|93 -75|57 -75|81 -75|41 -75|53 -75|55 -75|32 -75|66 -75|39 -75|64 -75|47 -75|54 -75|48 -75|15 -75|24 -75|82 -75|33 -75|16 -75|97 -37|12 -37|75 -37|43 -37|95 -37|42 -37|98 -37|61 -37|67 -37|94 -37|39 -37|18 -37|32 -37|16 -37|33 -37|64 -37|78 -37|19 -37|54 -37|48 -37|81 -37|35 -37|73 -81|46 -81|57 -81|16 -81|53 -81|82 -81|24 -81|39 -81|92 -81|48 -81|41 -81|86 -81|47 -81|13 -81|66 -81|15 -81|32 -81|54 -81|93 -81|65 -81|55 -81|91 -81|33 -81|97 -89|64 -89|33 -89|98 -89|43 -89|24 -89|67 -89|39 -89|75 -89|32 -89|78 -89|16 -89|61 -89|35 -89|94 -89|95 -89|12 -89|48 -89|54 -89|42 -89|82 -89|18 -89|81 -89|19 -89|73 -66|28 -66|26 -66|93 -66|91 -66|34 -66|37 -66|15 -66|43 -66|27 -66|97 -66|55 -66|92 -66|61 -66|79 -66|89 -66|12 -66|31 -66|13 -66|47 -66|46 -66|65 -66|71 -66|95 -66|44 -39|28 -39|15 -39|65 -39|24 -39|34 -39|86 -39|47 -39|91 -39|79 -39|44 -39|46 -39|92 -39|32 -39|41 -39|57 -39|82 -39|97 -39|66 -39|27 -39|71 -39|13 -39|93 -39|55 -39|53 -71|95 -71|61 -71|35 -71|37 -71|34 -71|19 -71|98 -71|81 -71|26 -71|31 -71|12 -71|78 -71|89 -71|73 -71|67 -71|43 -71|42 -71|64 -71|75 -71|48 -71|18 -71|94 -71|27 -71|44 -86|34 -86|28 -86|15 -86|47 -86|26 -86|71 -86|91 -86|61 -86|89 -86|66 -86|65 -86|97 -86|55 -86|93 -86|27 -86|79 -86|92 -86|46 -86|95 -86|43 -86|37 -86|44 -86|31 -86|13 -13|26 -13|89 -13|71 -13|12 -13|55 -13|34 -13|46 -13|61 -13|31 -13|28 -13|19 -13|93 -13|67 -13|79 -13|37 -13|43 -13|65 -13|91 -13|94 -13|27 -13|92 -13|97 -13|95 -13|44 -16|66 -16|13 -16|15 -16|24 -16|97 -16|33 -16|92 -16|86 -16|82 -16|53 -16|91 -16|39 -16|28 -16|57 -16|55 -16|32 -16|65 -16|41 -16|71 -16|79 -16|54 -16|93 -16|47 -16|46 -31|35 -31|37 -31|81 -31|43 -31|26 -31|48 -31|33 -31|18 -31|64 -31|75 -31|42 -31|95 -31|39 -31|16 -31|67 -31|78 -31|89 -31|19 -31|61 -31|94 -31|98 -31|12 -31|73 -31|54 -92|35 -92|12 -92|19 -92|89 -92|73 -92|44 -92|43 -92|37 -92|46 -92|98 -92|18 -92|67 -92|75 -92|28 -92|27 -92|94 -92|91 -92|31 -92|26 -92|78 -92|34 -92|95 -92|61 -92|71 -19|54 -19|41 -19|82 -19|86 -19|57 -19|32 -19|94 -19|39 -19|53 -19|78 -19|75 -19|67 -19|35 -19|24 -19|48 -19|81 -19|16 -19|73 -19|33 -19|64 -19|18 -19|42 -19|66 -19|98 -18|42 -18|86 -18|75 -18|24 -18|93 -18|41 -18|65 -18|64 -18|33 -18|57 -18|55 -18|54 -18|32 -18|13 -18|79 -18|39 -18|82 -18|48 -18|15 -18|16 -18|81 -18|66 -18|47 -18|53 -95|18 -95|81 -95|35 -95|73 -95|42 -95|67 -95|54 -95|82 -95|78 -95|32 -95|98 -95|61 -95|24 -95|16 -95|48 -95|53 -95|12 -95|64 -95|75 -95|33 -95|19 -95|39 -95|41 -95|94 -43|82 -43|54 -43|18 -43|73 -43|42 -43|33 -43|94 -43|67 -43|12 -43|35 -43|16 -43|24 -43|78 -43|19 -43|64 -43|48 -43|75 -43|81 -43|98 -43|61 -43|39 -43|41 -43|32 -43|95 -28|95 -28|98 -28|73 -28|27 -28|26 -28|89 -28|78 -28|34 -28|18 -28|43 -28|42 -28|12 -28|94 -28|64 -28|67 -28|44 -28|61 -28|71 -28|31 -28|75 -28|37 -28|81 -28|19 -28|35 -42|54 -42|86 -42|82 -42|55 -42|47 -42|57 -42|93 -42|92 -42|81 -42|41 -42|97 -42|48 -42|32 -42|91 -42|16 -42|65 -42|13 -42|15 -42|53 -42|66 -42|24 -42|79 -42|39 -42|33 -55|31 -55|89 -55|46 -55|26 -55|12 -55|91 -55|71 -55|94 -55|92 -55|37 -55|67 -55|43 -55|65 -55|28 -55|34 -55|44 -55|79 -55|19 -55|93 -55|35 -55|61 -55|95 -55|27 -55|97 -27|16 -27|35 -27|94 -27|12 -27|37 -27|26 -27|61 -27|44 -27|48 -27|31 -27|98 -27|89 -27|42 -27|95 -27|43 -27|81 -27|75 -27|18 -27|34 -27|67 -27|19 -27|64 -27|73 -27|78 -97|43 -97|92 -97|78 -97|46 -97|89 -97|26 -97|37 -97|91 -97|73 -97|95 -97|94 -97|98 -97|35 -97|34 -97|12 -97|28 -97|61 -97|27 -97|71 -97|67 -97|31 -97|44 -97|18 -97|19 -79|95 -79|12 -79|61 -79|73 -79|37 -79|92 -79|19 -79|94 -79|28 -79|46 -79|67 -79|43 -79|89 -79|71 -79|27 -79|34 -79|97 -79|91 -79|35 -79|98 -79|93 -79|31 -79|26 -79|44 -82|34 -82|26 -82|55 -82|66 -82|44 -82|86 -82|47 -82|92 -82|41 -82|27 -82|13 -82|97 -82|57 -82|79 -82|15 -82|71 -82|46 -82|53 -82|91 -82|65 -82|37 -82|28 -82|93 -82|31 -26|24 -26|39 -26|19 -26|35 -26|73 -26|16 -26|67 -26|95 -26|42 -26|54 -26|78 -26|48 -26|94 -26|64 -26|89 -26|75 -26|81 -26|98 -26|37 -26|12 -26|43 -26|61 -26|18 -26|33 -44|48 -44|61 -44|33 -44|12 -44|54 -44|75 -44|42 -44|43 -44|95 -44|26 -44|35 -44|98 -44|16 -44|78 -44|89 -44|94 -44|73 -44|37 -44|67 -44|31 -44|81 -44|19 -44|18 -44|64 -32|65 -32|34 -32|97 -32|92 -32|66 -32|44 -32|71 -32|26 -32|57 -32|27 -32|13 -32|41 -32|31 -32|91 -32|47 -32|93 -32|79 -32|46 -32|82 -32|53 -32|55 -32|28 -32|86 -32|15 -41|93 -41|46 -41|27 -41|66 -41|37 -41|89 -41|57 -41|31 -41|97 -41|26 -41|71 -41|53 -41|47 -41|44 -41|92 -41|91 -41|79 -41|86 -41|28 -41|65 -41|15 -41|34 -41|55 -41|13 -12|73 -12|64 -12|19 -12|82 -12|78 -12|41 -12|18 -12|86 -12|98 -12|39 -12|42 -12|67 -12|94 -12|24 -12|54 -12|81 -12|33 -12|57 -12|48 -12|16 -12|32 -12|75 -12|35 -12|53 -64|54 -64|33 -64|39 -64|48 -64|13 -64|42 -64|65 -64|82 -64|79 -64|97 -64|92 -64|47 -64|41 -64|55 -64|15 -64|24 -64|53 -64|86 -64|16 -64|81 -64|93 -64|57 -64|32 -64|66 -91|67 -91|61 -91|35 -91|27 -91|12 -91|44 -91|28 -91|98 -91|71 -91|73 -91|34 -91|75 -91|95 -91|26 -91|64 -91|94 -91|78 -91|31 -91|46 -91|37 -91|43 -91|19 -91|18 -46|34 -46|89 -46|75 -46|67 -46|94 -46|35 -46|71 -46|28 -46|61 -46|12 -46|42 -46|98 -46|27 -46|73 -46|64 -46|26 -46|31 -46|37 -46|78 -46|44 -46|95 -46|18 -98|82 -98|53 -98|15 -98|48 -98|32 -98|86 -98|81 -98|47 -98|16 -98|57 -98|54 -98|41 -98|33 -98|78 -98|13 -98|75 -98|42 -98|39 -98|55 -98|73 -98|24 -67|78 -67|94 -67|41 -67|73 -67|64 -67|75 -67|48 -67|81 -67|66 -67|24 -67|35 -67|39 -67|16 -67|18 -67|32 -67|53 -67|82 -67|98 -67|15 -67|33 -65|89 -65|12 -65|93 -65|43 -65|35 -65|91 -65|92 -65|26 -65|31 -65|46 -65|97 -65|71 -65|44 -65|19 -65|95 -65|67 -65|34 -65|94 -65|98 -78|54 -78|47 -78|42 -78|53 -78|82 -78|57 -78|16 -78|13 -78|79 -78|55 -78|48 -78|18 -78|86 -78|41 -78|81 -78|64 -78|15 -78|66 -53|71 -53|97 -53|92 -53|46 -53|66 -53|27 -53|57 -53|28 -53|91 -53|31 -53|13 -53|79 -53|26 -53|55 -53|37 -53|93 -53|43 -33|34 -33|66 -33|27 -33|71 -33|86 -33|28 -33|47 -33|55 -33|93 -33|82 -33|65 -33|57 -33|41 -33|39 -33|53 -33|15 -35|66 -35|16 -35|13 -35|57 -35|42 -35|24 -35|78 -35|15 -35|33 -35|82 -35|75 -35|64 -35|41 -35|54 -35|32 -93|46 -93|27 -93|37 -93|97 -93|35 -93|78 -93|71 -93|61 -93|98 -93|31 -93|91 -93|12 -93|34 -93|43 -48|66 -48|97 -48|15 -48|91 -48|82 -48|33 -48|39 -48|93 -48|47 -48|28 -48|57 -48|53 -48|92 -34|35 -34|37 -34|94 -34|48 -34|98 -34|16 -34|81 -34|43 -34|61 -34|19 -34|89 -34|31 -24|91 -24|32 -24|46 -24|28 -24|93 -24|53 -24|92 -24|66 -24|55 -24|13 -24|47 -15|43 -15|65 -15|91 -15|37 -15|79 -15|71 -15|34 -15|61 -15|31 -15|95 -61|35 -61|32 -61|54 -61|18 -61|41 -61|73 -61|12 -61|39 -61|75 -73|65 -73|32 -73|41 -73|24 -73|82 -73|81 -73|13 -73|48 -94|15 -94|81 -94|35 -94|32 -94|41 -94|39 -94|98 -54|53 -54|32 -54|41 -54|24 -54|97 -54|71 -47|27 -47|34 -47|67 -47|93 -47|12 -57|91 -57|55 -57|95 -57|37 -75|86 -75|13 -75|65 -37|89 -37|24 -81|79 +seeds: 630335678 71155519 260178142 125005421 1548082684 519777283 4104586697 30692976 1018893962 410959790 3570781652 45062110 74139777 106006724 3262608046 213460151 3022784256 121993130 2138898608 36769984 -28,27,31,89,43,95,61,67,35,98,42 -57,15,47,13,55,97,92,27,44,31,37,89,43 -35,73,64,81,82,86,47 -12,98,95,54,94,24,37,39,43 -48,33,39,32,66,15,47,13,93,91,46 -32,53,15,47,13,55,46,71,31 -39,24,32,82,41,53,86,66,15,47,13,79,93,97,92,91,71,27,34 -81,48,16,54,33,39,24,32,82,41,57,86,66,15,47,13,55,65,79,93,97,92,91 -16,94,78,53,98,41,66,33,15,24,73,35,86,75,64,57,42,54,18,82,48 -93,97,44,94,35,98,73 -95,61,12,19,67,94,98,73,78,18,75,64,42,81,48,16,54,33,39,24,32,82,41 -71,32,53,46,41,93,28,47,13,65,55,34,92,66,97,79,39,86,15 -43,54,78,16,82,39,98,48,75,33,12,95,61,35,64,81,94,32,18,67,73,42,19 -33,39,32,82,41,53,86,47,55,65,79,97,92,91,46,28,27 -13,79,93,97,91,28,71,44,31,26,37,89,43,12,67 -81,78,24,32,53,13,66,98,15,57,75,82,41,33,54 -93,97,92,91,34,31,26,37,95,61,12,19,94,35,73 -28,92,97,16,55,66,86,53,57,79,39,32,91,65,47,93,33,41,24,46,15 -13,79,92,46,28,34,31,26,89,43,12 -31,61,95,35,94,46,75,37,71,64,26,67,34,19,44,18,12 -97,82,32,65,47 -66,15,13,44,79,27,71,86,32,57,53,28,82,91,41,46,24,65,34 -65,79,93,46,71,95,67,94,35 -94,35,98,73,78,18,75,64,81,48,16,54,24,32,82,41,86,66,15 -93,97,92,91,71,27,34,44,31,26,37,89,43,95,61,35,98 -15,47,13,55,65,79,93,97,92,46,28,71,27,44,31,26,89,43,95,61,12 -28,71,27,34,44,31,37,19,67,98,78,18,75,64,42 -81,48,16,54,33,39,32,82,41,57,86,66,47,13,55,65,79,93,97,92,91 -78,18,75,64,42,81,48,16,33,39,24,32,82,41,53,57,86,66,15,47,13,55,65 -44,73,46,12,19,43,93,94,34,35,27 -67,94,48,33,82,41,57,86,66 -94,35,16,61,24,42,12,73,19,95,37,18,43,33,89,39,78,98,54,64,81,67,48 -15,13,55,65,79,93,91,46,28,71,27,34,44,31,26,89,43 -66,55,92,28,34,31,89 -24,32,41,53,66,15,47,55,79,93,97,91,46,28,71,27,34 -15,47,13,55,65,79,97,92,46,28,71,34,31,26,37,89,43,61,12 -89,43,95,61,12,19,67,94,35,98,73,78,18,75,64,42,81,16,54,33,39,24,32 -33,39,24,32,82,41,53,57,86,66,15,47,13,55,79,93,97,92,91,46,28,71,27 -24,32,82,41,53,57,86,66,15,13,55,65,79,93,97,92,91,46,28,71,27,34,44 -18,75,64,48,16,24,15,47,79 -44,31,26,37,43,95,61,12,67,35,73,78,18,75,64,42,48,16,54 -43,95,61,12,67,98,18,75,64,42,81,54,33,39,82 -97,79,32,91,65,92,13,33,57,15,24,93,41,71,46,27,53 -54,39,24,32,82,53,66,47,13,55,97,92,46,28,71 -47,13,55,65,79,93,97,92,91,46,28,71,27,34,44,31,89,43,95,12,19 -35,18,86,98,53,57,64,32,66,42,81,16,67 -95,27,13,26,34,89,55,79,61,47,31,12,93,43,15 -27,92,71,28,31,82,53,32,47 -47,65,79,93,97,91,46,28,71,27,34,44,31,26,37,89,43,95,61,12,19 -89,19,48,33,64,67,98,94,73 -13,41,78,55,82,39,48,16,24,54,15,73,66,75,32 -34,44,89,43,95,61,12,19,67,94,35,98,73,78,18,75,64,42,81,48,16 -12,67,94,35,73,78,18,75,64,42,81,48,16,54,24,41,57 -97,92,91,46,28,71,27,34,44,26,37,89,43,95,61,12,19,67,94,35,98,73,78 -27,34,98,78,75,81,48 -27,89,43,95,94,73,78,64,42,81,48 -65,92,91,46,34,95,12,19,67,94,35 -75,65,93,15,54,32,79 -57,78,32,33,65,24,75,81,15,41,47,53,42,66,86,64,39 -19,73,78,18,64,81,54,24,82,57,86 -66,91,79,47,82,34,65,86,28,44,13,53,46,27,57 -34,44,31,26,37,89,43,61,94,35,78,18,64,42,16 -26,37,67,98,73,78,18,75,48,54,39 -75,64,42,48,16,54,33,39,24,32,82,41,53,57,86,66,15,47,13,55,65,79,93 -92,34,31,37,89,43,95,12,67,98,18 -65,97,46,28,37,95,19,94,35 -66,13,55,79,92,34,44,37,61 -82,86,13,91,46,71,26 -37,89,43,61,12,19,67,35,78,75,64,81,48,16,54,33,24 -57,86,66,15,13,55,65,79,93,97,91,46,71,27,34,44,31,26,37,89,43 -54,65,41,48,86,16,57,55,39,79,93,42,24,13,33,53,66,32,64 -98,73,18,75,42,81,54,33,39,32,41,57,66 -48,98,78,18,57,16,54,86,35,42,75 -39,24,66,13,65,79,93 -18,75,42,81,48,16,54,33,39,24,32,82,41,53,57,86,47,13,55,65,79 -79,93,97,92,28,27,34,44,31,37,43,61,12,67,98 -42,81,48,16,54,82,41,53,86,79,92 -54,33,57,47,55,97,71 -89,35,73,78,75,16,54,33,24 -54,39,66,71,47,57,32,91,28,53,97,79,86,24,46,65,92,41,15 -92,91,46,28,71,27,34,44,31,37,89,43,95,61,12,19,67,94,35,98,73,78,18 -71,26,35,89,64,44,75,98,67 -98,64,42,32,57,47,13 -35,28,61,34,65,71,89,92,97,12,31 -19,42,48,67,18,98,32,53,12,16,33 -93,24,79,97,65,33,47,64,81,16,86,41,32,57,15 -81,16,24,86,13,55,65,79,93,92,91 -46,71,27,34,44,26,37,89,61,19,67,94,35,98,73,78,18,75,64 -86,66,13,55,65,93,97,92,91,46,27,44,31,26,37,89,95 -46,89,71,34,67,61,91,28,12,27,94,26,18,44,43,31,73,98,78 -24,73,43,18,54,82,16,64,81,33,61,12,39 -31,26,37,89,43,95,61,12,19,67,94,35,98,73,78,18,75,64,42,81,48,54,33 -33,64,24,61,95,35,41 -54,39,24,82,41,86,15,55,93,92,46,28,71 -93,97,91,46,71,27,34,44,31,26,43,95,61,19,35,98,73 -65,79,93,91,28,71,27,34,44,31,26,37,89,19,67,94,35 -47,55,65,79,28,27,34,31,43,12,19 -39,24,32,82,41,53,86,15,47,13,55,65,79,93,97,92,91,46,34 -12,81,26,19,37,75,61,18,73,39,89,94,98,16,54,95,48,67,33,64,78,42,35 -55,92,47,86,48,82,24,66,79,57,46 -16,42,81,32,35,57,48,94,18,12,98,75,39,24,53 -47,15,64,33,81,13,57,16,41,75,18 -16,13,73,78,24,48,75,33,82,81,57,15,32,98,42,53,18 -98,18,16,54,39,82,41,53,57,86,66,47,13 -33,35,98,39,48,24,94,73,81,61,54,41,64,12,78 -78,18,12,26,16,34,31,81,43,64,19,98,44,89,67,37,75,73,94,48,35,42,95 -55,86,47,54,32,75,48,53,24,65,78 -94,35,73,78,18,75,64,42,81,48,16,54,33,39,24,32,82,41,53,57,86,66,15 -57,86,93,92,46,34,31 -19,94,98,78,42,81,48,39,82,41,53 -24,32,82,41,53,57,86,66,15,47,55,65,79,93,91,46,28,71,27,34,44 -28,27,34,31,43,19,94,35,98,75,42 -47,13,46,27,43,95,12 -34,89,61,67,94,98,78,75,64,81,48 -73,89,44,91,28,18,78,75,31 -61,71,55,28,97 -31,43,95,19,94,98,73,64,48,54,33 -27,44,26,37,89,95,12,19,67,35,98,18,75,64,42,81,48 -39,16,48,92,46,24,53 -71,27,34,44,31,26,89,43,95,61,12,19,67,94,35,98,78,75,64,42,81 -37,91,67,89,18,73,92 -26,44,79,86,15,93,41,55,27,47,91,57,97,66,37 -86,66,13,55,79,93,97,92,46,28,27,34,44,31,26,37,89,43,95 -66,47,13,55,79,93,46,28,71,27,44,31,26,89,61 -61,12,19,67,94,35,98,73,78,18,75,64,81,48,16,54,39,32,82,41,53 -39,82,86,15,79,97,71,27,34 -67,97,46,73,61,78,27 -37,97,92,71,12,44,26,34,78,43,94 -66,53,57,33,46,47,71,54,41,86,55 -75,64,81,54,39,24,82,86,93 -92,46,28,71,89,19,35,73,78 -86,47,55,27,26,37,95 -27,44,31,26,95,12,19,67,94,73,18,75,42,81,48 -75,67,64,19,12,42,37,28,35,98,34,61,27,94,89 -31,92,97,93,65,47,19,44,71,46,27,91,61,26,37,34,12,13,89 -97,28,61,26,91,37,34,95,71,19,46,67,92,94,27,89,43,73,93,44,12 -46,28,71,34,31,26,61,12,19,67,94,98,73,78,64 -97,92,91,28,71,27,34,31,26,37,89,43,95,94,35,73,78 -18,75,64,48,16,54,33,39,24,32,82,41,53,57,86,66,15,47,13,65,79 -73,75,18,95,48,61,78,94,54,16,81,19,42,41,67,98,82,39,64 -44,28,65,79,93,97,66,26,55,82,34,27,71,13,31 -41,86,66,15,47,13,55,79,92,91,46,28,27,34,44,26,37 -66,15,47,13,65,79,93,46,71,27,44,31,26,89,43 -28,39,32,54,82,47,93,16,41,33,79 -91,82,79,28,26,65,57,86,66,46,41,31,93,15,27,13,47 -13,55,65,92,28,71,44,89,43 -28,91,65,67,19,89,93,43,55,92,34,12,31,71,37 -24,75,18,67,35,53,16,82,39,73,54,57,86,94,64,98,66 -86,91,13,65,43,66,15,34,46,92,55,37,79,44,31 -93,79,71,12,91,31,92,27,19,44,89,97,37,67,55,94,95,28,43,61,46 -16,39,24,41,53,86,47,55,65,97,28 -34,26,43,94,35,73,42,81,16 -89,43,94,73,18 -79,97,92,91,46,28,71,27,34,44,26,37,89,61,94,35,98 -13,54,42,79,32,47,15,93,48,24,55,41,66,33,16,64,97 -42,81,48,32,82,57,66,79,93,97,92 -78,18,75,64,48,16,82,41,86,15,13,55,65 -97,15,41,53,66,47,33,46,57,86,65,91,39,82,24,13,32,16,55 -55,65,46,44,31,37,95,61,94 -32,92,81,54,24,41,86,91,55,97,39 -61,98,18,73,75,48,19,42,94,64,43,12,81,24,78,35,95 -61,12,94,98,73,78,18,75,64,16,54,33,24,41,53 -73,78,18,75,64,42,81,48,16,54,33,39,24,32,82,41,53,86,66,15,47,13,55 -81,66,33,16,53,57,18,79,15,42,54,65,86,48,13,82,47,24,41,75,55 -64,42,95,54,16,43,24 -81,98,94,33,18,95,75,35,12,48,19,42,43,16,73 -48,16,54,33,24,32,82,41,53,57,47,55,65,79,97,92,91 -48,16,41,32,82 -86,71,89,34,37,92,65,26,43,15,95,47,97,55,93,31,13 -18,41,67,35,61,64,54,73,81,33,24,19,12,78,39,16,98,75,82,94,42,53,32 -33,54,57,66,65,75,55,24,39,81,32,41,42,82,47,48,86,13,16,79,53,18,15 -35,71,44,37,46,27,12,67,19,34,89,91,94,43,97,95,26,93,92 -97,13,81,48,66,47,55,32,39,53,82,33,65,57,64,16,42 -89,19,67,73,92,37,27,44,43 -32,47,13,79,92,27,31 -42,33,31,98,35,43,81 -28,39,34,24,66,46,91,79,47 -89,43,61,12,19,94,35,98,73,18,75,64,42,48,16,54,33,39,32 -67,78,39,24,82,53,66 -79,19,12,91,43,95,92,55,28,61,65,34,46,94,71,97,93,44,31,37,26 -16,33,57,86,79,97,91 -19,67,94,35,98,73,78,18,75,64,42,48,16,54,39,24,82,41,53,57,86 -71,27,67,46,94,43,44,34,55,28,26,92,61 -93,57,91,41,37,53,31 -98,12,16,39,35,61,48,54,78,94,73,81,42,32,64,89,24 -95,61,12,19,67,94,35,73,78,18,75,64,42,81,48,16,54,33,32,82,41 -34,94,26,46,97,19,35,98,44,91,43,92,79,27,67,28,71 -32,13,39,66,78,65,33,24,48,75,82,57,54,81,47,53,41 -54,33,24,82,41,57,47,13,55,65,79,97,92,46,71 -91,28,71,44,43,95,94,78,75 -33,39,86,66,15,91,27 -35,98,73,78,18,75,81,16,24,32,82,41,53,15,47 -75,57,32,15,81,86,82,66,54,18,41,13,79,39,24 -31,37,43,61,12,94,98,73,18,64,42,81,16 -13,55,65,79,93,92,91,46,28,71,27,34,44,31,26,37,89,43,95,61,12,19,67 -32,82,78,24,64,48,94,42,75,41,12,18,81,95,16 -41,82,53,46,13,93,79,47,92,71,55,65,91,27,24,39,33 -41,53,57,86,66,15,47,13,55,65,79,93,97,92,91,46,28,71,27,34,44,31,37 -12,89,71,95,67,81,19,61,18,34,44,75,78,98,31 -53,57,86,15,13,55,97,92,91,46,28,71,34,44,26,37,89 -35,98,73,78,18,75,42,81,48,16,54,33,39,24,32,82,53,57,86,66,15 -75,33,39,32,82,66,93 -61,31,26,95,97,92,34,37,66,71,91,79,43,46,27,28,93 -26,89,61,94,81 -73,19,27,44,71,89,28,37,97,67,91,46,92,61,78,34,43,95,98 -43,95,61,12,19,67,94,35,78,18,75,64,81,48,16,54,33,39,24,32,82 -46,28,71,34,44,31,26,37,89,43,95,12,19,67,94,35,98,73,64 -39,42,75,54,13,65,86,93,16,48,66,55,47 -91,28,89,95,19,78,67,75,94,27,31,98,44,12,71,37,46,26,35,18,61 -95,65,79,89,46,31,19,97,47,55,34,43,12,44,13,93,61,27,37 -42,98,24,32,75,12,67,39,89 +seed-to-soil map: +2977255263 3423361099 161177662 +3464809483 1524036300 40280620 +1278969303 2583891002 282823382 +3766263020 1796922321 171061976 +411885923 23002578 152894367 +564780290 442452799 75000259 +2421385924 1454220354 69815946 +3348169880 3014668733 58677303 +903828313 1975611534 37514769 +3406847183 1396258054 57962300 +4043490501 3171884304 251476795 +941343082 2866714384 147954349 +1089297431 1206586182 189671872 +2891116902 3584538761 18778869 +0 517453058 122327491 +2491201870 932395829 274190353 +388883345 0 23002578 +3944952233 3073346036 98538268 +3505090103 671222912 261172917 +2073455492 2013126303 347930432 +2909895771 2361056735 67359492 +1561792685 3603317630 511662807 +2765392223 2458166323 125724679 +3168183021 4114980437 179986859 +3138432925 2428416227 29750096 +122327491 175896945 266555854 +671222912 1564316920 232605401 +3937324996 1967984297 7627237 + +soil-to-fertilizer map: +895998030 0 382128379 +2851625320 2664267363 205943350 +2518444693 3961786669 333180627 +1879667741 2025490411 638776952 +0 1243838521 558555556 +3280896340 2870210713 1014070956 +558555556 906396047 337442474 +3057568670 3884281669 77505000 +3135073670 1879667741 145822670 +1278126409 382128379 524267668 + +fertilizer-to-water map: +0 1845976330 336090970 +3299138007 3322545218 12048535 +336090970 0 11457152 +1280501317 1371665084 474311246 +2583893821 3334593753 715244186 +3311186542 2468197905 738651397 +2468197905 3206849302 115695916 +347548122 11457152 932953195 +1754812563 944410347 427254737 + +water-to-light map: +1121222108 519789808 4326619 +1125548727 524116427 429792955 +1052043895 3930896885 69178213 +3210593080 0 36442681 +1669405426 2787769857 138341045 +1919839172 3142586910 277606697 +2197445869 2466152271 321617586 +1555341682 3816833141 114063744 +3431283943 3092543143 50043767 +3481327710 1975836414 28620233 +136025352 1371812880 335069822 +0 3420193607 136025352 +2600375975 3610804829 206028312 +3247035761 36442681 184248182 +3676380184 1048117966 323694914 +2519063455 966805446 81312520 +483991238 1706882702 268953712 +3509947943 2926110902 166432241 +1862332341 2408645440 57506831 +752944950 220690863 299098945 +2806404287 2004456647 404188793 +1807746471 3556218959 54585870 +471095174 953909382 12896064 + +light-to-temperature map: +3941111261 382813357 83783792 +4083751028 2792620142 62769876 +2924924808 517646744 141124785 +10073304 296361721 86451636 +2112077648 3356571260 325360811 +2097723771 930487406 14353877 +1038821361 2233157447 330985253 +1604981575 0 157737476 +4232208439 2231398376 1759071 +3126943010 2564142700 228477442 +3355420452 3681932071 528033316 +3066049593 1302213021 60893417 +2893234140 1091417457 31690668 +4146520904 1005729922 85687535 +764412615 658771529 271715877 +4024895053 4212658256 21309254 +1601614929 3144601228 3366646 +2813498518 3276835638 79735622 +0 944841283 10073304 +3883453768 1363106438 57657493 +1036128492 4209965387 2692869 +1762719051 1160654846 141558175 +2437438459 157737476 138624245 +96524940 1420763931 667887675 +2576062704 3147967874 128867764 +1904277226 2855390018 50699775 +1420621949 2906089793 129943385 +1550565334 466597149 51049595 +2704930468 3036033178 108568050 +4046204307 1123108125 37546721 +1369806614 954914587 50815335 +1954977001 2088651606 142746770 + +temperature-to-humidity map: +3744493855 2753433800 53429527 +3926657179 2806863327 207882975 +567844723 1829271702 6392959 +3797923382 3046866321 128733797 +1711260618 465872733 110275892 +2947786208 2530091374 223342426 +2371290430 3335177849 39675908 +1900678095 703125986 238513863 +1521940365 941639849 16040471 +979702084 962957535 519048585 +2678536664 3987414423 22824189 +316276095 2006380474 251568628 +574237682 576148625 7838036 +2512589774 2369848229 129456424 +1821536510 386731148 79141585 +659847979 2257949102 32337475 +1498750669 0 23189696 +2139191958 1482006120 151094619 +2410966338 2361085516 8762713 +248695366 629624702 67580729 +1705983403 957680320 5277215 +3436386005 3680199681 275987831 +896869843 23189696 23822140 +1540019357 265437244 43521643 +3171128634 4029709925 265257371 +700698880 1633100739 196170963 +2659065351 4010238612 19471313 +1660345362 583986661 45638041 +2642046198 3175600118 17019153 +4134540154 3966392426 21021997 +145503080 1903188188 103192286 +4155562151 3467714480 139405145 +920691983 1844178087 59010101 +2805227630 3192619271 142558578 +692185454 1835664661 8513426 +2732147574 3607119625 73080056 +3712373836 3014746302 32120019 +2361085516 3956187512 10204914 +2701360853 2499304653 30786721 +582075718 308958887 77772261 +1583541000 188632882 76804362 +3882034 47011836 141621046 +0 699243952 3882034 +1537980836 697205431 2038521 +2419729051 3374853757 92860723 + +humidity-to-location map: +3880387060 2052152805 97611299 +2442736538 3295723734 10591308 +3014234548 3058886861 44150293 +2722522139 3413370195 153277538 +2877652345 3226748198 68975536 +678696757 79205913 5515453 +3758528684 3103037154 121858376 +3648288667 2533118408 110240017 +3457871155 4266074310 28892986 +2176930761 3905620500 135283057 +2312213818 2369019482 56130623 +2875799677 3224895530 1852668 +2052152805 3780842544 124777956 +2598433171 3306315042 56382802 +1279041455 278559111 48074772 +2964261570 2302916483 49972978 +344154771 1539624544 79809331 +1030322972 1619433875 248718483 +1905012367 1868152358 115533200 +105230362 326633883 51970437 +4085966662 2880778716 178108145 +684212210 1466450827 73173717 +919250672 396737705 108684083 +868993622 1215278638 50257050 +2962757902 2879275048 1503668 +1847630888 378604320 18133385 +3232700402 4040903557 225170753 +2575587736 3390524760 22845435 +3977998359 2425150105 107968303 +3058384841 3362697844 27826916 +789787709 0 79205913 +4264074807 2272023994 30892489 +3114006964 3594442940 118693438 +460824111 202771015 75788096 +423964102 1983685558 36860009 +2946627881 2352889461 16130021 +157200799 505421788 186953972 +3486764141 2717750522 161524526 +1027934755 692375760 2388217 +2453327846 2149764104 122259890 +2368344441 2643358425 74392097 +0 1407620238 58830589 +2654815973 3713136378 67706166 +1865764273 117123148 39248094 +3086211757 3566647733 27795207 +58830589 156371242 46399773 +536612207 1265535688 142084550 +757385927 84721366 32401782 +1327116227 694763977 520514661 diff --git a/input/day_05_example b/input/day_05_example index 9d146d6..f756727 100644 --- a/input/day_05_example +++ b/input/day_05_example @@ -1,28 +1,33 @@ -47|53 -97|13 -97|61 -97|47 -75|29 -61|13 -75|53 -29|13 -97|29 -53|29 -61|53 -97|53 -61|29 -47|13 -75|47 -97|75 -47|61 -75|61 -47|29 -75|13 -53|13 +seeds: 79 14 55 13 -75,47,61,53,29 -97,61,53,29,13 -75,29,13 -75,97,47,61,53 -61,13,29 -97,13,75,29,47 +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4 diff --git a/input/day_06 b/input/day_06 index e8f8b82..f0187ef 100644 --- a/input/day_06 +++ b/input/day_06 @@ -1,130 +1,2 @@ -..........#.....................#...................#.......................................................................#....# -.........#................................................................#....##......#........##.............#.................. -............#..............#..#.................................................................#................................. -..............#.....#................................................................................#...........................# -............................................................................................................#.............#....... -.........#..........##......................................#......................................#......#...#.......#...#.....#. -..#...................................................#.................#....#........#.....#.................#................... -.....#............#.#..#..................#.......................#................................#......#..............#........ -#.................................................................#..........#.......................................#.#.......... -..##...................#..................................#..#.................................#...#..#.#.#.........#...##........ -..#..........................#...............#...............#..........................#.................................#....... -................##......#......#......................##.............#........#................................#.#..#............. -.............................................................#.#.......................................................#.......... -.....##.............................................#.......................#...............#...............#..#...#....#......... -.#.........................#..................................#..........#....#...............................................#... -.......................#..#.............#......#.....#..#................................................#....#........#.......... -...............#.....................#................#...................................#......#........................#....... -.......................#....#..............#.......#...........................#....................................#.#........... -..#..................#...........#........................#............#...................#......................#.............#. -..............................................#........................................#..............#...........#.........#..... -............#.................#...#..........#.#.....................##.........#................##...........##............#..... -..................#.......#..................................................................#....#..................#.......#.... -..........##......#...............................................#.................................#.......#.............#....... -................................................................................#.......................................#......... -.....#........................#.............##......................#.......#.......#...............................#............. -..#.......................................##........#.............#...............................................#............... -.............#.....#..........................................#...................#.................................#..........#.. -.........#............#..#....................#............##.............#..................................#.................... -........................................................#..........#.............................#................................ -......................#..............................................................................................#............ -.......#............#..#........................#...............#.......#.............................#......................#.... -...................................................................................#........................#........#..#.....#.#. -..#.......#......#...................................................................................#..#.....#................#.. -.....#...#......................................................#...................#.#..............................#.#.......... -..#.#.....................#....................#...........#.................#........#..#.........#........#..................#.. -....#......#.......#.....................................................##...........#........................................... -........................#......#......................#......#.....................................................#.......#...... -............................................................#..........................#...#.#..................................#. -.#..........#..............................#.....#.............................................#.................................. -#..........................................#......#.............#...........................................#.........#........... -......#...............................#..#......................#.....#.......#.....#..#......................#.......#........... -........................................#..#.................................#......#.......................#..................... -.#................#...........#.........#.............................................................#........................... -.....#.......................#.................................................................................................... -.............#................#............................................#...........#......................#..................# -#........................#....#.....................#................#..##.............#......................#...#............... -....#....................#....#.#..................#...........................................................#......##.......... -#............#..........##............................................................#........................................... -...........#..................................#..##................#.............................................................. -..........................#..............................................................................#...............#........ -.......................................................................#...........#...#...........#..#.....#..................#.. -.........................#....#.......#......................#....................................#............................... -..#..................#...................................................#......................................#................. -..............#....##........................................#..................#................................................. -..........................#............................................#...................#............................#......... -......#...............................#..........................#.............................#.................................. -...................................#.............................................................#..............#................. -.................#...#.......#..............#.#...........................................#.......#.....#......................... -........................#.......................................#..#.........................#...##...#........................... -....#..#.............#........#.............#..........#......#.........................................#....#..#................. -.......................................................................#...........#......#.....................#...........#..... -#.#..............................#................................................................................................ -.#.................................................#...................#.......................................................... -..............................#.............#.............................#.....#............#.................................... -.#...............................#.......#...##.#.................#............................................#.................. -.............#....#.................#.........#..............#....#............................................................... -......................#.#..........................................................................#................#............. -.#....................#.....#................#.....................#..................#......................#.................... -.............#.#............#......................................#.......................#......................#............... -.#..#...#...................#..................................................................................................... -...........................................................................#.....................#................................ -...........#.............................#......#................................................................................. -..............#.................................................#.##........#..........................#.........................# -..................#...#........................................................................................................... -........#.....#......................#..#....#...#.#......................................#.#............#........................ -.....#..#.........................................................#......#.....#...........#..................#...#..........#.... -......#.........................................#......................#........#...................................#............. -..........................................#........................#........#.............#........#..#........................... -.......#..............#...................#...........................................#.............#............................. -..............#....#....#......#...........................................................#..........................#........... -..................................................................................#.......#...................#...#....#.......... -.................#........................#........#...#.....................................................#........#........... -...........................#......^.#..............#.#.....................#.#...........#....##.......#.......................... -.............#.....#.........................................................................#..........#......#..#.#............. -...................................................................#.......#.......#...........................................#.. -.......#.........#.......................#...................................................................#..........#.....#..# -.....................#...............#...#..#.....................................................#.....##.##..........#.......... -.......................#.......#..................................#.................#.....................................#....... -................................................#........#....................#........................#.......................... -......#....#..#....#.......................#....#...#.............................#............................#......#........... -...................................................................................................##.#.....#.................#... -.................#...#....................#........................#...............##.....#...........#........#.............#.... -.....#............#......................................................................#................#....#.................. -........#.............#..................................................................#....#.......#........................... -.#.......................................#.......................................#....#.............................#............. -...#.............................#..................#............................#.....................#.....#...........#........ -....#......#.................................................................................................................#.... -.....................................#..........#.............#......................................#............................ -..#...#....#............#.....................................................#..#................................................ -.....#.......................................................#............#..........................#...........#................ -#.....................#..............#................................................#..........................#......#........# -........#.........................#........................#................#.......................#............................. -...........................#........#............................#.......#..............#......................................... -......###.........................................................................#.........#........#................#...#....... -............#........................#................#.................#........................#.............#.......#.......... -........#.#................................#.....................................................#................................ -.#...#............#........#........#..#...............................................#............................#............# -...#.............#.........#....................................#..............#.......................................##......... -...#...........#.....................................#.........#................#......................#............#............. -..................#....................................................##.......##..........#...............................##.... -........................#.........#...........#............................................................###.................... -....................#.......#....................................................#...#..............................#............# -............................#..................................................................................................... -......#........#........................#..........#..........#.......#..........................#................................ -....................................#..............#...#.#......................................................................#. -.....#.....#...#..............................................###......#..............#.........##......#...............#......... -........................#.........................#...............#...............#.#........#.....................#.#............ -...............#..............#........#........................................#..........#........#......#...................... -.....................#..........................#...............................#........#.......#.....#...................#...... -.........#...........................................#.............................#....#.......#......#..#....#.................. -.........#...#........#....................#.......#..#...#..............................................................#........ -..................#......................................#........................................................................ -........#.....................................................#..#...........#........#......................#...#....#.....#..... -...........................#........#....#.........................................................#.............#................ -.....#.#.........#................................................................................#............................... -...#............................................#......................#.......#.#...............#............#................... -.........#................................#.....#...........#.#....................#...#.....................................#.#.. -..........#.#....#......#.........#....#.....#........#...........................#............................................... -............#...............#............#..........#.............................#............................................... -#.#............#.....................##................................................#....#.................##.................. +Time: 58 99 64 69 +Distance: 478 2232 1019 1071 diff --git a/input/day_06_example b/input/day_06_example index a4eb402..28f5ae9 100644 --- a/input/day_06_example +++ b/input/day_06_example @@ -1,10 +1,2 @@ -....#..... -.........# -.......... -..#....... -.......#.. -.......... -.#..^..... -........#. -#......... -......#... +Time: 7 15 30 +Distance: 9 40 200 diff --git a/input/day_07 b/input/day_07 index ccef8a7..c9507dc 100644 --- a/input/day_07 +++ b/input/day_07 @@ -1,850 +1,1000 @@ -644197722674: 5 9 46 99 1 5 9 2 22 6 74 -3424919: 67 51 7 561 358 -7160145: 9 9 7 4 8 3 91 2 3 3 5 731 -1133404163: 231 3 49 2 32 128 36 -198444: 9 77 90 347 308 46 3 -258135: 7 61 68 6 249 6 -10677865: 864 7 4 1 9 4 7 7 1 5 367 -1134: 54 7 3 -28760910: 1 6 627 9 752 831 -6740: 82 236 356 10 -983873830: 977 6 267 606 830 -101904: 5 71 29 2 264 -8536122: 5 3 7 388 120 -818217: 8 27 21 484 92 5 214 -9221: 219 23 270 18 5 -216699547: 2 24 46 9 1 55 6 61 9 88 -19040: 434 4 5 2 41 713 28 54 -113740483608: 52 951 38 417 23 17 -1837300: 627 46 5 1 91 6 6 4 -21564: 6 143 330 9 5 9 -100992468: 4 4 2 9 7 69 3 24 92 8 6 8 -522672: 5 226 7 5 -72660535: 181 857 70 5 2 4 1 11 -1553455: 57 842 4 650 374 79 -177565304: 177 5 6 530 7 -123464883: 65 67 315 7 2 45 -162378: 47 799 75 702 74 3 -75882558: 4 4 9 3 8 7 5 29 5 4 57 5 -15486: 5 771 6 1 2 2 8 8 8 8 2 4 -195018949: 237 9 76 61 19 95 4 9 9 -120067914: 12 7 1 282 9 17 7 2 7 79 -10625355: 6 16 906 3 533 -714034: 2 3 60 7 7 90 325 9 -147283595568: 3 311 33 3 57 822 8 93 -2316922: 8 26 41 831 2 94 -182954295: 438 22 56 5 993 4 -17143497694679: 73 169 33 1 4 71 6 79 -758512003463: 3 2 790 700 4 2 2 34 63 -4146569285: 280 8 9 5 6 7 68 4 9 1 2 5 -31770235539495: 589 8 9 1 1 95 3 63 492 -2140548: 7 6 1 4 3 4 8 929 1 3 8 12 -12113461: 291 3 50 772 17 5 2 2 -9197820380208: 1 58 583 110 58 207 -1539915: 88 340 19 5 689 -198635345304: 19 711 980 6 44 341 -43172: 426 8 4 318 1 1 439 3 5 -53202: 5 3 7 1 4 79 62 6 6 -999074: 1 4 221 5 9 71 -107010: 2 1 29 410 3 -1207: 8 600 5 9 567 17 1 -963: 56 902 7 -3661: 87 42 4 3 -55680: 8 7 2 58 8 4 -1443280: 1 33 16 68 39 592 -11791444132: 954 3 412 412 9 -40408: 8 8 513 70 19 -895: 45 9 784 52 8 -3630590257: 5 787 5 98 113 94 57 -1219939: 9 5 183 9 3 -7243377: 1 231 8 2 1 36 6 5 795 3 -10281688290: 728 359 69 874 8 45 -52129140: 78 1 7 407 547 5 2 4 5 -844925: 778 18 78 6 8 -1517768001: 56 213 629 27 17 -1586: 26 1 18 35 9 -897822305: 10 89 7 8 222 55 52 -307677984: 38 946 58 79 2 -11629377: 7 10 83 82 37 548 6 79 -5706366: 203 30 937 6 1 26 -545930: 1 8 696 5 770 -21436: 57 94 4 4 1 -601219587: 2 5 1 2 1 1 4 1 1 912 327 -1210568: 5 3 9 86 1 1 98 2 8 97 6 8 -163672: 311 939 4 1 130 522 -816: 3 9 7 9 5 25 84 186 56 -413330: 71 9 181 504 50 -275151204: 5 8 9 8 4 3 433 1 5 6 7 3 -5565: 47 19 8 7 1 276 -5528836: 1 552 789 9 936 -30771: 42 81 5 12 9 -113510: 99 58 723 -2552925934889: 802 8 795 54 8 372 4 6 -13201: 45 124 77 31 159 -720468: 17 6 92 4 7 -22380384159: 7 8 166 29 159 1 3 2 8 2 -45770: 4 41 765 2 3 -32957: 4 28 886 71 -5110126: 6 173 214 66 8 -1762745: 982 227 3 3 27 3 6 5 -130796643: 131 32 1 5 5 624 -78364255: 8 9 694 57 7 253 -844276: 8 42 224 792 1 -362023: 9 25 594 5 5 40 87 103 -1291399844: 5 6 1 9 39 1 73 9 6 44 -228417920: 25 37 71 9 26 794 8 4 -40050828: 3 27 763 6 9 9 5 1 9 12 -116627652: 7 4 7 1 446 8 4 5 2 4 75 6 -2516095717: 7 385 8 43 59 8 5 46 -655270872: 9 2 8 159 89 2 9 3 89 95 -35298709: 6 41 170 3 2 422 97 -558606: 4 6 5 74 6 53 7 7 100 1 5 -96911: 5 9 75 6 9 665 2 7 9 2 7 8 -429735: 7 72 58 6 9 -9402: 3 453 9 86 920 1 7 88 6 -2948456: 69 251 9 68 456 -254061: 603 70 2 6 789 -27948: 485 575 322 262 17 -90873: 58 49 8 27 31 31 725 -6444009: 5 6 195 7 6 33 13 -17255343: 78 867 42 3 85 -144630242: 490 2 39 11 7 4 39 86 1 -444869: 4 7 8 878 5 479 -253242155: 42 203 6 7 234 57 -1823338: 2 414 9 487 4 6 -25234118: 91 683 58 7 1 -642484013: 917 822 4 6 1 7 9 1 2 -10018629: 99 944 235 99 628 -52518012: 663 80 8 5 99 -52968775714: 217 3 8 2 3 2 9 6 9 9 94 6 -7014: 1 666 9 933 8 70 -1210591: 39 8 40 97 31 -61925382: 366 648 1 1 9 837 29 -1392623100: 92 3 6 6 8 18 8 815 990 -146952: 66 53 92 6 677 43 -16148106: 41 31 9 5 4 39 -972134: 4 36 905 3 28 9 75 54 3 -1699: 9 7 94 2 -38915712: 66 83 4 3 296 2 1 -24871732: 71 178 3 656 148 -1016303031: 229 634 7 499 532 -553520: 7 3 7 22 69 -588423590: 2 1 9 143 8 3 6 923 1 3 4 -8360806312: 1 3 9 850 24 7 857 5 7 5 -462718: 4 6 26 93 26 -21935424: 280 60 96 2 4 2 84 -885836: 8 850 4 5 2 27 704 58 9 -797703006: 1 3 1 8 9 4 9 495 3 7 60 6 -7714822: 2 4 757 959 3 25 -233319196: 881 27 45 10 4 979 -451620568437: 170 6 57 4 9 5 56 8 439 -2836062720: 7 88 111 9 6 6 2 4 3 8 3 2 -81217110: 827 98 9 501 2 -21081: 6 3 41 6 3 1 6 324 8 5 8 -861: 7 7 2 44 801 -88: 4 4 73 5 2 -1570446660: 9 198 6 7 4 39 9 9 1 6 5 1 -14270753: 5 934 7 5 6 6 2 3 2 6 99 -56568223: 845 8 523 34 16 1 -650438051: 8 3 17 8 3 7 4 743 3 7 2 4 -3543: 7 57 24 125 61 80 1 -41612: 26 7 70 18 24 8 -198303162: 82 81 8 142 7 3 5 6 6 6 -4195337168: 8 3 17 948 5 3 3 3 4 7 68 -2593123: 40 76 853 -5764808331: 1 18 3 4 9 7 573 4 7 9 6 -109985400: 7 6 2 848 1 97 4 7 3 35 -386253: 81 7 5 5 603 551 -70791407: 2 2 5 2 22 96 2 8 3 52 2 2 -10455350486: 758 2 33 965 8 54 86 -412382916057: 1 9 39 6 45 627 184 58 -205995206: 6 112 4 7 77 933 9 -138335075997: 1 6 3 7 9 3 2 550 990 8 -360062993: 3 4 85 4 8 896 4 966 8 9 -8288395: 89 45 4 273 1 22 1 90 -75413380: 63 748 9 3 2 2 1 4 21 4 -2737489: 5 9 53 9 48 6 -5050164: 1 7 297 55 4 613 -372470: 1 4 15 230 9 3 85 -43071377128: 4 307 1 3 7 25 9 7 365 5 -1388: 6 99 32 59 554 149 -727612: 4 478 380 6 1 838 228 -6994892: 37 50 5 378 1 -5686664574: 5 68 62 3 6 9 3 2 9 569 7 -1143128724150: 92 287 6 8 5 525 859 2 -41306: 910 82 19 76 38 -1986: 84 65 9 540 74 31 -10921388868: 61 74 113 61 66 351 -1617983: 38 91 67 459 8 -7273: 79 82 764 2 23 6 -1681: 8 1 788 379 506 -1733837: 3 9 443 61 37 -426492: 78 9 57 1 2 315 9 22 1 2 -21672129332: 86 252 1 293 31 -131979: 936 47 3 1 2 -21284859377: 3 7 161 854 5 7 75 625 -194833581: 5 954 6 88 5 5 9 198 8 -1358996: 1 71 567 5 8 66 5 4 960 -213170975: 88 821 24 24 -1753764808: 41 7 4 6 8 7 4 1 5 7 5 810 -15881128: 28 544 24 2 6 9 1 4 578 -1911: 46 809 68 38 7 938 1 5 -4907534410: 1 6 1 9 5 6 409 2 9 7 43 6 -8189947079: 5 4 8 8 9 3 808 1 7 77 6 5 -507174405: 3 675 561 82 784 3 2 -470600798: 1 9 6 5 5 359 5 3 69 90 7 -77885: 784 33 27 55 3 22 -26494743: 95 90 62 549 5 -886638: 54 4 8 8 8 5 4 2 1 5 4 1 -81696: 822 2 2 56 48 -199643920: 509 6 3 20 67 2 952 -24054306505: 67 534 955 59 704 9 -36855: 5 9 39 21 -70289942: 370 7 91 1 91 4 1 6 6 7 2 -72733596: 12 9 619 335 99 -6222893: 620 2 260 9 20 3 -19516095: 30 3 6 7 7 59 42 8 94 2 -891796: 84 807 794 -49196: 182 1 3 6 9 -2717456088: 4 3 53 5 647 9 2 89 59 6 -4767272: 88 1 878 9 1 61 -881931: 74 7 68 5 301 -358318816: 9 95 33 36 15 -15261700: 4 75 137 4 48 8 46 4 -7480: 430 408 4 9 249 2 260 -55931515717: 7 18 819 9 83 5 5 7 3 1 7 -188671: 762 2 6 7 35 21 -120025246: 56 893 6 8 48 3 948 4 -123188: 2 74 58 598 -36478821: 725 4 57 5 2 8 8 1 3 1 27 -89822860: 6 9 20 5 3 9 9 9 5 5 1 13 -3333672: 9 76 9 6 8 9 1 1 8 8 1 9 -334667916: 2 9 681 219 204 -37897612: 4 8 6 3 9 6 7 8 74 7 31 1 -3585801: 78 9 5 2 406 6 8 2 7 -225846: 4 93 994 207 9 -97481836858: 974 736 82 3 68 59 -8798000: 74 494 262 106 2 50 1 -987: 9 606 19 349 4 -35956582523: 420 855 465 82 526 -19426789: 66 1 545 4 6 6 9 1 775 -455625: 4 5 1 4 89 15 55 2 1 2 5 9 -1140143: 705 49 33 132 26 -30028: 50 6 22 1 5 -100704802450: 5 91 96 1 2 6 4 3 577 7 -11364984: 163 163 58 1 58 6 -1337700: 3 66 5 86 9 510 5 -2110176: 58 4 2 2 237 1 2 4 431 8 -28139: 540 97 44 8 1 33 1 68 -2747718494: 392 53 7 77 7 7 8 15 -2660397: 2 8 49 613 1 2 9 8 5 5 1 6 -54157: 902 200 7 7 159 -35995590749608: 891 8 8 8 9 7 6 87 4 5 8 8 -9459: 3 3 3 15 9 -802075: 751 89 12 6 1 -2187785: 937 6 334 708 7 1 3 5 -83880596467: 931 1 9 5 33 134 3 6 1 3 -3960: 944 4 89 95 -3201184: 531 855 5 14 461 -44968268: 58 7 89 292 266 -297099078: 79 5 885 45 35 1 -1888: 83 96 9 10 8 -4185068: 616 8 122 85 66 8 -461760: 94 296 4 74 4 -4655: 19 6 19 5 7 -4668693144946: 59 38 4 91 40 453 9 6 9 -69615016: 974 1 1 714 14 -114617661: 992 917 126 -971801: 7 5 3 3 3 51 47 965 5 4 -795940491: 355 3 3 1 2 28 3 2 5 8 9 -13321847987: 6 9 3 84 81 8 7 8 72 7 87 -18738947047: 1 4 92 5 6 2 1 19 3 52 2 7 -25010: 28 6 5 637 77 90 -1088100: 5 98 899 1 14 775 -32567: 9 88 2 20 887 -1821252960: 7 871 6 430 804 -137875: 684 6 46 4 5 35 -56572801202: 2 4 15 421 458 36 2 -87958367: 6 808 6 62 23 997 36 -13422: 497 27 1 3 -11257638: 3 784 6 40 6 1 276 119 -453647563: 2 935 6 2 8 79 6 1 3 3 6 -181924028: 91 7 3 5 25 6 2 9 3 7 44 -48196638: 89 7 80 10 43 966 -379859368: 219 8 3 9 54 6 4 9 1 6 6 4 -218625: 364 28 6 3 53 -545: 14 6 2 333 66 -12800868: 48 6 342 33 77 -14669424: 8 2 1 8 2 7 3 2 378 7 4 42 -124997919: 74 5 9 2 49 89 6 2 987 6 -20750680: 3 2 91 9 6 4 4 5 6 3 955 2 -66450: 949 3 7 -13632: 15 91 4 2 32 -54210949: 9 8 3 2 85 8 8 54 1 9 7 7 -18118147545: 731 4 3 66 12 41 3 5 46 -5480584325: 782 9 406 7 48 4 8 68 -21390324251: 21 18 602 641 94 -1986513: 662 1 67 3 9 -19984807398: 757 4 660 73 99 -25152285068: 2 4 3 776 5 49 1 1 7 6 3 9 -26473: 3 8 2 47 3 -6177: 1 8 30 8 7 51 4 52 4 1 -769278135: 7 687 3 9 45 4 4 128 2 6 -923145787440: 782 3 2 538 77 590 8 -1631: 1 6 4 51 3 19 1 1 3 8 403 -40729: 93 2 2 796 2 8 2 3 236 -2654: 4 40 2 30 3 8 -51429247: 2 2 853 153 6 2 24 7 33 -132157: 1 241 53 8 297 2 -1449808: 3 39 6 875 52 890 -4332: 5 34 513 4 5 47 7 12 64 -21620085167613: 1 3 90 251 8 51 67 616 -22498560: 37 5 31 80 8 27 -13943884: 6 28 5 7 5 177 1 38 8 2 2 -35728046482: 2 49 852 2 14 94 4 8 3 -45088: 20 83 27 191 77 -561675243: 4 4 5 7 2 8 2 3 1 629 63 3 -46480040: 50 798 3 2 332 5 2 29 2 -606184069431: 1 86 59 7 7 242 7 22 4 6 -2425653532803: 2 320 658 405 30 3 64 -424844740: 643 11 7 677 1 67 7 6 -398668004514: 52 15 43 7 78 98 23 4 -2137402: 533 88 47 4 3 -6048720: 19 97 426 93 120 -5351978974: 94 295 461 193 1 -8222557572: 8 33 17 1 501 12 981 -323197: 1 619 5 4 73 19 5 2 -1243: 3 274 421 -4105039: 5 3 3 386 50 40 -363325010: 9 7 99 588 52 949 58 -111187760: 4 75 482 5 2 292 -11212420: 2 5 16 11 686 732 -2830619: 763 75 2 639 3 191 1 -2043461: 3 64 662 8 4 3 7 -18472960510: 67 9 6 91 45 3 231 68 -1882444276631: 9 64 5 9 90 4 4 276 631 -2130224: 91 660 2 4 3 938 26 -325749: 7 989 47 368 -45497: 3 4 7 5 6 1 5 933 6 6 5 60 -38655649296: 2 44 642 97 2 5 8 9 968 -46001759909: 5 351 55 5 274 5 6 215 -78513754: 4 128 4 210 7 86 19 -1471036396: 2 87 92 79 8 7 398 -4803: 7 5 2 9 79 42 2 2 515 -156208548: 5 8 31 97 37 6 4 9 88 3 -1055599537: 65 974 971 2 8 1 -5025498431: 502 549 843 1 1 -102599297: 43 71 95 33 1 89 91 4 -83434050: 9 315 5 654 9 -9566: 3 44 96 269 2 2 -276596: 10 60 26 99 6 -735428921940: 90 50 319 956 85 -1197162258: 2 98 8 8 6 89 245 25 2 9 -2315466299: 54 992 775 79 28 -13330803666: 5 576 823 360 36 3 3 8 -15657: 25 4 98 37 908 8 3 4 -262990: 4 8 3 26 289 -79663: 56 9 28 5 3 -1076093: 80 160 1 84 28 1 2 779 -503308: 53 419 966 35 8 -1052110: 923 128 390 720 1 -3281758304: 5 1 3 258 79 156 5 64 5 -33098493: 64 852 47 17 3 4 -5141121: 722 30 4 501 8 8 8 3 -472447488: 21 3 93 4 9 702 618 84 -76752518: 4 3 1 848 6 3 9 30 8 13 9 -36746210: 2 9 3 1 2 8 59 4 86 148 9 -57519732: 390 5 5 5 866 164 5 7 -337213: 98 6 539 146 6 1 -38484: 27 249 70 3 9 19 3 9 4 -140760: 95 4 821 51 3 -37597: 625 60 2 96 -1834717746: 3 61 4 717 746 -6159947: 7 510 28 99 235 992 7 -37702450: 700 43 7 87 317 9 5 1 -77382285: 1 773 82 1 287 -50794203: 8 419 4 11 3 8 517 5 36 -1926604832: 75 25 8 256 30 2 -84094: 1 7 3 4 1 2 298 4 2 3 8 26 -1585371522800: 5 53 3 18 42 87 8 8 850 -10736695: 201 8 7 760 935 -102989717: 258 677 91 398 56 -4989012: 56 30 1 886 832 -126070960: 9 3 2 31 4 65 875 8 4 80 -12281236052: 2 6 9 19 54 6 1 69 95 -348194845864: 6 215 6 279 967 65 -34950330354: 1 1 89 357 303 12 39 -15988: 5 2 4 3 884 8 785 1 1 2 -33325110: 9 7 338 313 5 -93162624: 7 8 5 2 7 9 5 8 6 8 8 912 -234504147: 830 663 910 2 47 3 2 -27489: 1 74 2 389 96 49 -11389842: 2 619 1 1 115 3 2 40 3 -3432004223: 901 9 6 96 905 44 4 4 6 -1973: 95 398 4 1 -21238: 2 5 426 6 5 8 2 54 356 2 -67284504: 670 754 71 2 9 4 6 5 5 -365693742: 63 8 9 8 2 1 3 5 1 99 3 6 -2825: 66 3 194 3 5 52 196 1 -131124: 36 6 204 312 76 5 -1565071058656: 687 70 411 7 8 8 707 2 -21424808448: 617 5 3 3 7 9 9 4 6 976 6 -46699: 56 136 3 81 36 1 4 -71483342503: 7 1 219 15 6 4 1 8 5 34 2 -274006: 301 3 4 90 47 -12744: 4 805 784 8 -2562: 1 5 505 37 -441997: 95 91 563 48 13 -2065280098: 16 99 569 250 81 3 3 5 -8238200993478: 1 2 98 8 8 584 9 7 2 7 7 9 -9968200682: 996 8 19 3 6 5 6 5 6 5 8 8 -21757761: 60 438 2 9 4 5 3 78 -7380: 72 1 79 -142146046: 62 5 5 7 7 7 2 2 3 602 -288475489801: 26 7 4 427 7 400 9 3 -1302: 3 7 62 -2920860: 26 4 601 1 162 -10662680: 3 1 80 952 8 7 5 -1944870: 8 1 15 7 4 1 5 7 1 338 3 6 -21107774: 5 97 386 8 536 94 -5958425: 7 744 9 5 7 1 56 4 2 4 2 1 -1451281979: 1 9 656 88 1 419 5 6 29 -487083093562: 3 6 4 4 5 7 4 23 55 5 952 -7048222: 84 3 452 8 222 -23400979: 812 4 4 9 2 8 6 8 326 1 9 -97944: 9 8 54 2 7 8 17 8 8 88 -18499581: 9 4 1 32 2 8 32 -184237: 8 6 4 5 4 4 1 1 836 4 53 9 -6859352895: 836 2 9 99 4 8 8 8 3 41 5 -531090: 7 542 13 9 105 -4744582: 176 6 478 6 26 -269093732: 1 4 268 9 2 1 722 662 -120462839: 6 856 7 7 5 5 134 186 -14976272: 23 4 16 4 22 4 49 -1875735: 14 253 848 81 7 1 230 -22760: 3 19 171 8 5 6 4 5 86 6 9 -11193: 9 3 843 6 13 -248540: 9 32 27 22 2 3 2 5 990 5 -24387814947: 382 5 2 7 1 698 255 5 -2381794505735: 8 1 416 235 283 73 5 -152131950: 35 4 8 92 53 40 711 -22865878: 94 20 2 65 877 -189075841: 2 99 1 3 5 8 2 7 2 31 6 40 -81091: 937 66 80 5 3 842 -557721414: 92 640 1 74 1 2 7 64 4 2 -113171295757: 9 3 9 3 9 27 4 1 3 957 5 6 -43780442: 3 4 65 40 561 -1362932167: 170 1 3 57 1 6 78 8 4 8 5 -193046119: 3 93 355 2 6 59 48 6 1 -6596126878: 8 10 9 349 205 63 78 -145305: 9 682 5 15 1 -172032954: 19 1 8 652 1 2 57 72 54 -2836938: 76 1 70 402 3 8 47 6 -787578: 93 89 978 85 868 35 -208608701: 5 729 26 6 46 2 43 7 -4667: 23 95 39 63 2 -136093592: 848 987 815 1 9 91 -124671: 27 2 5 7 9 64 -328235241523: 694 23 2 74 91 514 7 4 -294810390: 9 8 6 7 9 2 9 8 298 8 26 7 -24048413505: 674 4 892 9 34 9 1 8 -53013993575: 78 3 401 729 167 775 -8984: 937 81 99 6 8 -21995734134: 32 64 895 4 71 3 78 3 -264862905: 87 516 5 118 7 3 5 -255776495: 9 257 2 307 9 47 7 2 -1908918: 7 81 34 4 99 -973680: 32 72 3 39 3 10 8 -410673999: 76 8 85 88 550 -166255766537: 9 8 7 2 1 6 8 673 2 6 1 9 -128304: 81 6 4 66 -27879153: 640 74 1 2 3 7 44 65 5 -44232: 7 5 191 2 194 -18187369: 42 296 5 1 86 -47785: 9 747 36 7 472 -301356: 27 1 9 1 80 1 4 99 -380883: 94 6 6 4 85 -8858507: 8 1 858 495 7 2 -10086: 8 986 5 9 6 -5472230949: 73 1 9 7 7 8 24 9 7 9 6 7 -242207: 202 109 11 9 -6507402: 3 357 98 62 6 -257308250: 82 63 74 982 485 50 -46347841: 3 4 44 2 38 6 1 33 4 -4063680: 196 70 2 3 2 2 4 9 415 -902880: 316 6 934 6 7 199 3 -97144: 501 838 8 9 5 2 8 2 722 -66767570413: 7 6 5 69 5 56 7 10 6 4 1 6 -1121988: 16 73 240 4 708 -2048596: 560 8 8 64 3 9 2 2 5 41 2 -25139200: 51 6 23 982 320 -136552: 57 3 6 9 367 993 93 43 -890: 84 1 6 1 382 -667845017: 8 73 5 75 3 340 2 3 17 -210544: 36 299 9 6 51 4 4 2 -307152: 575 57 27 2 9 -174196113: 28 7 801 640 1 21 13 -488160: 55 6 71 971 7 20 -19025410: 5 1 7 734 6 4 5 18 130 -2556797688: 5 6 958 6 4 7 6 9 7 22 1 -401: 276 1 95 27 5 -2606: 21 79 901 28 18 -1008: 8 2 5 2 8 -30280923107283: 7 3 7 8 3 87 5 57 6 95 9 8 -1112133: 2 19 88 6 8 8 134 -1156070: 58 619 767 36 73 8 -8595258: 58 18 686 4 350 3 -27176091: 8 60 316 9 4 -1396445753: 9 932 185 2 76 502 1 2 -3152523: 386 58 71 45 78 -46561: 75 3 1 4 3 1 96 905 2 8 7 -74455179: 7 2 3 9 1 4 5 3 753 657 -378892728: 3 78 892 7 28 -30660568493: 51 3 4 915 74 62 8 -174848: 74 604 16 80 16 -3369813: 26 37 78 967 573 -6425: 227 4 7 70 -74081532: 681 681 34 57 931 -269511317: 3 88 83 608 6 66 62 5 5 -10740: 7 88 30 54 30 2 -32487007: 49 390 50 34 7 -31801728: 555 57 166 73 1 -1251384: 102 73 4 6 1 64 7 -6167863296: 130 2 3 484 5 6 5 6 666 -1750505577603: 33 68 237 920 780 -692005: 80 865 5 -404677: 24 8 13 162 325 -445704481829: 6 913 334 5 6 9 406 9 2 -51026: 160 15 60 7 1 31 -4395396697: 7 1 865 1 4 7 7 18 9 3 4 -3597445173: 73 8 560 47 11 3 -238958: 4 68 4 3 335 1 77 6 1 9 8 -4845972440: 3 7 741 1 505 35 18 -1047: 451 3 94 473 26 -3366: 8 437 1 676 3 -2310950: 9 51 3 1 6 228 272 38 -1204001: 43 28 4 5 50 -1770832476: 4 3 9 885 1 88 8 9 3 574 -89: 7 2 76 -3962488418: 2 27 5 381 9 16 349 4 -49284: 5 240 5 2 288 2 9 -78660218288: 65 550 18 5 6 5 7 4 8 -37209: 3 6 179 4 62 6 961 -138: 2 7 7 69 6 -16171846: 485 521 64 3 -28710: 9 78 3 22 5 -6511835: 7 6 2 5 39 18 7 8 6 152 2 -1530367213: 1 6 6 5 183 1 5 6 2 8 8 6 -14945092032747: 28 5 21 168 524 73 1 6 -99320779809: 408 93 620 1 33 6 10 -6606342065: 6 738 4 4 6 817 3 -16207982550: 193 715 3 2 3 6 675 29 -580720115: 82 6 522 952 115 -101346: 87 8 7 6 1 6 353 2 8 7 2 7 -43782921: 8 935 29 7 7 -350811824: 907 58 36 79 46 -51161294: 15 297 348 33 59 15 1 -56283832271: 556 6 83 832 271 -11999796: 5 9 1 4 3 9 1 25 2 4 9 7 -151528089: 8 947 2 7 60 9 357 123 -10552401805: 5 711 3 7 4 5 74 904 2 1 -6975525183444: 75 8 2 4 3 694 9 628 23 -221946: 212 29 389 576 3 -32164662625: 47 3 68 608 7 539 18 7 -193348: 9 54 6 973 51 -147818390: 803 752 98 3 95 3 -13461188087: 11 6 372 4 3 2 676 1 85 -1595250: 4 4 2 4 5 57 583 5 5 90 -163120921251: 8 33 4 29 1 599 534 81 -627115008: 4 6 3 70 9 4 6 36 2 8 24 8 -262845099: 11 25 59 162 99 -158070817: 576 214 35 2 816 -27810: 67 826 7 27 30 -108334487: 5 299 3 21 345 -377712: 6 88 7 9 46 77 3 122 -4403487698: 1 123 32 7 6 6 7 7 6 8 9 9 -18000: 243 7 1 9 8 -1133048448: 9 5 64 7 4 7 4 82 46 7 2 9 -22753166439: 3 2 7 9 6 2 8 78 3 9 462 2 -401539425944: 7 7 4 9 5 721 6 3 5 3 944 -151632037: 6 8 975 8 405 1 18 7 12 -2061467: 9 8 4 1 1 5 303 7 458 9 -469247481: 184 9 6 83 569 9 -804: 48 2 5 79 475 -25426: 9 556 1 9 5 -530948520: 233 179 8 37 344 -1597575488350: 2 1 921 70 7 532 5 59 2 -60636199518: 60 7 373 533 4 9 9 9 18 -421157880: 701 92 5 6 42 60 -174249: 54 4 6 2 4 1 22 9 3 90 2 4 -118727669: 76 8 3 6 50 9 18 94 6 3 3 -23125500: 5 3 9 300 571 -1128838032: 59 74 54 1 57 84 -6227: 6 2 1 2 8 1 -13634: 85 2 79 188 7 9 -2594: 9 7 8 131 4 -3244398: 1 52 602 3 534 97 -18391275: 64 79 473 645 6 -197178930620: 293 41 4 4 410 6 6 5 4 7 -1635252: 10 6 81 96 87 -38430183166560: 84 2 91 53 810 8 774 -541205145: 853 6 7 39 9 48 -260245: 4 962 95 66 7 -5585256181: 6 958 54 991 5 3 -2134740037: 3 21 91 6 42 29 6 2 7 7 -2342051: 8 731 7 4 48 -241588625520: 301 686 39 173 5 6 3 2 -5651246579: 253 124 712 79 11 23 -10416: 8 182 608 5 96 -2406: 62 94 16 12 342 1 -1330567: 873 7 18 84 7 -211152912: 47 57 98 86 804 -128953684: 295 23 2 17 41 95 19 -3037977: 5 6 379 36 40 -9013235: 8 3 1 65 2 1 50 9 1 3 35 -2857052260: 3 8 444 7 4 9 1 4 12 62 4 -174249422: 7 15 5 6 24 94 23 -17628: 545 5 4 8 22 6 -856437: 1 874 3 8 513 896 260 -1226796924297: 63 59 205 66 7 23 6 7 6 -581803349533: 2 8 4 29 66 7 8 39 12 7 7 -254021342023: 396 7 2 9 7 6 308 6 5 7 7 -31922147: 316 3 221 4 6 -160080860160: 5 6 7 7 9 5 7 7 85 23 52 3 -350150744: 7 34 9 7 1 4 6 7 9 2 393 6 -513992157: 2 787 3 8 2 55 74 -388382: 8 5 5 23 80 2 9 59 7 2 30 -114598776: 3 3 4 6 7 743 6 608 17 8 -852: 5 6 2 2 818 -51991107: 62 930 107 90 9 -19471914893: 1 432 8 54 63 7 891 1 -14769263: 135 547 60 73 2 -264950665: 98 8 1 4 69 457 970 9 7 -65665642: 67 97 77 52 44 -7086506: 808 4 1 7 102 9 854 14 -2373244: 5 9 315 4 7 1 51 6 47 -2222101: 7 34 148 2 54 -196383915008: 91 65 558 35 20 85 4 7 -1882566840: 77 276 482 68 20 79 7 -3192380: 1 95 1 62 542 -1780325358305: 73 96 5 514 52 70 9 7 -31652: 3 8 6 14 2 23 1 883 4 8 4 -2039767: 4 23 86 942 4 -16443: 1 203 71 508 21 -1525639: 4 39 70 675 4 5 97 -1244447: 85 42 51 2 590 9 9 7 1 -79891266: 23 777 292 57 6 66 -133899684: 1 9 858 51 6 34 -158472: 44 7 118 4 93 -577827: 655 882 8 99 2 8 -26524897: 5 2 2 4 8 2 74 9 4 6 92 5 -619029948: 7 332 718 6 98 6 83 6 2 -21865593: 2 2 315 48 7 68 18 1 3 -59317495: 38 8 195 784 52 -651741664: 49 9 821 2 3 8 3 8 9 2 9 7 -99185020: 495 9 251 4 5 -107005920: 26 3 8 7 7 2 1 4 91 1 672 -2516184: 23 414 9 44 6 -127258624821: 2 9 1 3 209 77 6 482 1 -591136864: 812 728 851 1 11 -7150171: 5 18 6 5 3 5 2 14 1 1 161 -45473775683: 21 7 3 745 23 296 205 -267884545235: 9 8 3 930 6 6 4 98 3 7 9 7 -15888479044: 85 8 5 9 6 932 8 6 1 3 5 -156: 49 5 99 -2274323159: 4 2 8 7 39 50 7 951 2 -75744398: 37 864 8 2 397 -38121863061: 679 185 555 29 795 6 -708: 7 2 685 1 9 -2010678: 268 2 17 7 1 681 -7009005: 48 1 5 8 32 5 9 808 57 -3851784101224: 402 8 7 3 1 98 974 2 1 -70133821172: 273 734 3 35 13 3 172 -2334045177: 3 2 6 3 3 8 4 938 5 3 6 57 -11318244: 16 714 2 120 3 7 5 8 4 7 -1135489: 71 53 978 1 9 239 -97872: 9 35 7 36 70 2 1 -3565690187: 7 9 5 936 853 91 48 59 -27911345: 906 2 4 5 77 -20117244: 425 966 7 7 35 7 -5226102: 4 4 8 9 12 6 2 5 5 3 21 1 -20284677: 22 91 9 75 2 7 2 32 3 63 -59192019234: 8 6 755 56 186 2 2 59 6 -414: 1 48 266 -202496805: 836 193 5 18 251 547 -1756291: 1 76 2 7 7 6 4 2 1 2 3 521 -58130586: 58 1 2 998 9 47 4 42 -185377333373: 9 128 10 51 579 687 -92208192556: 243 937 9 1 39 6 7 718 -70202: 83 845 67 -632631: 79 8 627 1 4 -2308446: 8 62 1 5 3 49 670 2 1 31 -7652167: 7 6 520 79 91 -268204881: 9 3 56 7 976 20 4 -27714632: 6 63 88 6 7 9 467 50 -1199676: 159 26 29 4 629 184 -1168: 53 807 308 -1359889181: 8 5 9 57 62 41 5 1 6 97 9 -43: 5 7 2 4 1 -450410: 33 91 5 77 146 -225806336: 9 5 20 5 7 2 2 2 2 8 4 56 -930622: 92 638 423 2 13 -86493858: 2 158 1 5 90 205 9 2 6 6 -49753745289: 5 5 27 5 7 62 38 2 9 1 9 6 -60371025: 5 95 4 837 46 591 5 75 -3562461: 17 617 609 321 2 1 -145184643: 7 9 3 985 4 757 32 60 -732323: 435 3 7 133 8 4 9 7 2 6 5 -1032885: 679 4 56 7 3 9 -945945: 1 13 86 49 195 -6692478: 97 621 239 39 -12437644755: 238 84 455 5 9 4 551 7 -2886: 703 714 2 8 42 -571: 8 7 9 -1198792: 341 87 14 4 7 -83064502: 281 549 1 64 502 -78565542681: 78 565 542 68 2 -216603: 319 679 4 -337030: 90 1 6 4 93 -225178398: 9 7 6 494 6 25 8 6 5 6 5 3 -359260441: 8 8 4 5 71 11 4 40 3 -7684870400: 68 37 736 166 25 -4836753: 89 6 57 11 124 6 1 9 -448559: 2 3 897 59 -178599251: 5 8 60 5 9 6 2 2 9 38 6 2 -178868: 9 2 75 7 94 922 -28968: 18 8 219 1 71 -13362405963: 7 95 4 76 227 74 17 98 -262350: 795 55 6 -65696728: 6 145 82 397 751 -389312: 81 6 7 7 632 -707357: 4 1 63 30 6 3 50 96 5 7 -19717: 1 42 55 1 7 -20394032681: 5 122 79 5 1 2 1 9 1 28 2 -4784: 2 8 9 6 12 41 8 2 6 516 4 -1609910: 1 37 614 69 -523221: 962 4 70 7 1 5 64 6 99 6 -6181619: 77 9 892 6 53 -213398378: 26 7 872 63 47 77 -1283136751: 1 26 32 6 1 41 6 750 7 -437556672: 518 2 36 14 838 -2050513997: 50 41 51 399 7 -669844: 66 89 86 1 858 -163612855: 78 64 75 437 5 50 -1153638940155: 282 8 671 5 63 3 9 965 -147012685: 639 23 4 264 7 18 18 -41376667393: 628 94 77 524 83 7 4 8 -48762054: 5 11 9 58 9 6 1 7 6 618 9 -31668453: 9 951 37 59 94 -2668647: 347 93 262 82 940 1 -75501141: 5 807 72 6 130 -3054130: 3 31 821 4 1 9 -118264252: 722 25 819 59 8 180 -212285289: 60 5 35 6 64 2 9 9 3 3 -102104550993: 29 5 8 6 2 5 9 850 7 4 9 1 -1640167: 16 39 24 92 4 5 -454855747068: 827 55 574 625 81 8 -101649: 607 164 868 62 31 -586: 8 27 4 6 4 -1995211: 1 82 117 5 210 -6293: 86 870 91 6 10 -173274931255: 773 5 476 3 9 56 13 4 3 -979213568: 450 64 2 2 2 54 144 17 -228477312: 4 977 87 672 -1958906346: 6 529 6 811 65 1 1 3 6 1 -3982693130574: 66 93 60 19 595 74 -113280: 385 8 7 81 8 5 1 1 -176418: 9 1 27 121 6 -483888323: 2 3 8 3 8 8 741 90 8 1 6 -125276: 4 5 533 231 73 -2031843: 502 9 994 27 4 -181636303883: 920 3 3 1 6 7 94 1 4 7 8 2 -11711860: 2 8 89 8 70 3 2 36 862 -42810645671: 828 70 861 6 6 70 -32393: 3 18 14 5 11 -142818114700932: 6 98 46 885 3 6 88 2 2 6 -80412: 5 23 291 787 9 -5756790: 8 3 4 21 31 919 6 5 89 -30328450223: 3 9 12 2 8 4 9 8 5 5 1 226 -1152: 60 4 3 2 3 -926: 1 456 7 2 -2560803: 3 77 8 4 803 -259920: 5 5 192 6 543 50 4 9 1 4 -40430292: 2 139 6 6 416 75 2 21 -3058611251: 942 2 20 3 54 51 252 -371442757: 54 8 901 78 278 875 8 -1976: 24 2 76 -17440633: 253 173 8 2 5 8 634 -10894: 7 996 4 855 5 -1026899793: 3 2 9 2 2 3 91 4 249 49 4 -9527619: 9 943 710 2 2 8 510 -16018794: 4 86 597 78 90 -220925803882: 517 2 7 60 828 5 6 26 7 -2781157936: 235 74 9 153 4 23 70 6 -5345188071954: 962 923 45 61 6 5 91 -2498015: 356 859 7 -499591377: 42 3 19 539 3 9 699 1 -1090215: 5 3 57 45 7 -15519652344: 23 10 4 24 84 90 9 7 72 -907143: 3 6 90 97 1 4 6 -117077387: 9 5 2 3 1 9 9 9 550 346 4 -18354138559: 32 20 57 7 6 8 55 1 2 4 -275237: 9 23 114 77 2 687 437 -214176: 8 335 9 36 138 4 -2089632912: 74 51 7 83 8 4 813 97 -19904427: 8 7 196 8 1 53 9 5 2 7 -308810886: 222 21 69 96 3 -132301: 6 14 1 47 294 7 -25284884: 43 84 7 8 79 3 -1155: 552 50 73 430 50 -250971: 1 296 55 715 6 -5544: 84 3 22 -36731: 47 20 71 59 3 62 89 -801108: 153 77 68 -1846900: 95 2 970 10 2 -2041: 5 73 1 2 4 6 8 6 2 9 3 52 -29295248: 4 6 62 34 1 4 51 6 5 3 4 6 -6911470: 15 23 57 2 68 -17332770: 92 8 8 9 6 1 16 7 14 39 -12908392: 4 7 75 7 474 9 6 4 8 9 9 2 -732368: 653 8 3 1 7 9 5 4 90 5 3 4 -107000: 377 19 25 799 5 5 -609810: 7 2 44 7 9 713 92 5 -34492227: 9 7 993 77 7 3 -1351: 2 597 1 78 78 1 -32345: 9 908 7 50 5 -17411670783: 80 147 90 139 1 6 764 -477603: 55 24 397 4 623 7 27 -3177414: 317 7 395 8 9 -1464027960: 7 742 4 3 3 3 20 9 7 3 3 1 -338846: 33 270 2 5 38 -1289680998: 515 872 4 250 -206989: 3 70 5 81 4 7 6 -410915: 8 8 5 63 50 949 -16407452695: 95 95 57 3 185 84 4 4 -241574: 22 4 8 3 2 55 36 3 3 53 -5815: 8 7 949 8 4 6 899 856 -132336722: 292 9 513 91 148 421 -33640: 7 50 6 499 40 -487790318: 97 5 3 6 8 615 31 3 9 6 2 -1191828: 116 3 177 1 57 -1419906212: 3 99 7 6 41 86 1 94 7 7 8 -1096940: 11 78 150 1 826 12 -12634809: 126 33 110 868 828 -13938175: 9 15 13 425 17 2 -26174932: 749 399 5 4 3 5 1 6 1 76 -24376672: 4 90 8 4 46 6 1 46 69 7 -636: 59 1 91 9 4 -3318871: 713 8 30 207 9 5 2 2 8 3 -787624929631: 984 531 161 8 8 31 -1632805574: 5 6 5 5 1 8 7 6 461 2 94 5 -10582: 4 343 4 9 731 5 -1181968602: 555 31 2 47 2 9 7 860 1 -521044974: 3 17 973 123 9 474 -4540536945: 100 84 858 6 5 44 3 3 7 -2303: 3 93 9 8 -549077983: 6 908 60 52 997 6 -349510: 3 587 66 1 126 3 451 -48428832716: 751 89 363 641 713 -10481558632: 3 7 481 55 8 630 -581225299324: 81 75 1 2 91 876 6 1 24 +32T3J 893 +A9942 54 +J57Q8 571 +779TK 931 +69696 457 +Q55Q5 478 +99399 735 +TA756 782 +QQQKQ 838 +QTJJA 995 +J7T7T 8 +22792 790 +588K8 376 +J77KT 191 +72T29 575 +58585 196 +58535 394 +263K5 566 +ATAAA 352 +7K7AK 477 +A3829 14 +22349 954 +KT647 244 +84848 208 +82A8A 77 +3A383 698 +97788 820 +QQ4Q7 991 +67Q66 837 +73QQ7 879 +Q4Q5Q 69 +Q5Q33 767 +585TT 52 +5K859 943 +238A3 170 +48887 668 +QAQQQ 591 +A8755 666 +4AK62 157 +4A9J4 350 +TJAAA 280 +AT9T9 592 +7Q497 390 +56748 681 +9425A 414 +5357J 737 +5QQQQ 597 +383QT 583 +TQTJT 81 +T36AQ 441 +899A9 485 +AKA22 667 +73K73 676 +782AJ 361 +TKKTK 608 +8J8JJ 317 +2J222 579 +TJ224 259 +6AK5Q 484 +Q5T9K 618 +JAKJ7 687 +KT9J2 348 +7775J 653 +9297A 798 +A72AA 642 +49749 794 +22282 733 +22Q8Q 810 +QK456 308 +853K9 568 +99A88 573 +88A8Q 20 +8Q47T 855 +39548 184 +7J478 92 +75755 710 +986T5 407 +8837K 999 +64J7A 345 +444K4 364 +39475 775 +J332A 413 +77JTJ 921 +47272 154 +K2T3A 318 +222A2 211 +7J695 935 +344QQ 683 +36Q26 728 +7QJ56 543 +25QTJ 555 +8Q88Q 928 +T5KTT 559 +A8T96 365 +44446 319 +A6A3J 880 +43KK3 948 +9J244 882 +6A66A 804 +88868 117 +J86T7 140 +969J9 18 +J2387 742 +79Q9Q 766 +83888 194 +43556 16 +8AA88 233 +Q2895 65 +QQ879 90 +TTT99 729 +64633 548 +A8K7A 884 +68A9A 429 +85A33 635 +J2A22 876 +49AAA 906 +25222 625 +TA33K 454 +99499 759 +78T4K 753 +76QQJ 89 +34TTT 445 +6K4J5 100 +4TQ82 114 +T7T75 28 +TJJTT 490 +4KKK6 716 +KKK5J 119 +642TJ 781 +227AJ 189 +89388 590 +865J3 553 +29962 997 +43Q7Q 736 +AJ792 351 +4Q4J6 572 +A6JA6 652 +74477 799 +KA889 593 +JJ56K 556 +AA787 867 +JAAJJ 35 +J4625 640 +52829 295 +97772 192 +Q79Q7 474 +8A2AJ 748 +525TJ 278 +69639 360 +T222T 58 +777J7 832 +QQJQQ 245 +66A63 725 +T7222 594 +955TT 430 +3373Q 703 +33KJ3 173 +9Q8TQ 122 +9KKK7 27 +88828 632 +AQTAT 524 +955J3 420 +77472 76 +T535K 585 +6K677 107 +TAJAT 85 +J64T5 646 +83QJ8 609 +88KKK 195 +TT8J8 897 +QTQTA 243 +78267 202 +3AKJK 32 +T8664 246 +84KK8 821 +JQQQT 178 +85Q88 288 +A93K8 23 +J2J24 582 +62622 498 +97A34 953 +6JK2J 149 +53322 788 +79A83 898 +73429 491 +33QTQ 201 +A9999 160 +2T26K 866 +JTJ39 770 +Q422T 881 +35333 833 +J4262 795 +6QJ8Q 289 +J69J9 908 +3433K 565 +226Q2 606 +JAKKK 786 +6Q22Q 258 +4454Q 421 +QAQ33 287 +KK68K 648 +3T4K2 3 +78526 489 +K66KK 980 +J99J9 56 +AA3JA 705 +A486T 33 +K4999 144 +6QA29 950 +69999 892 +KAKAK 480 +A5A23 675 +T5T6T 458 +TT5A5 774 +T7857 465 +A79QQ 532 +6T66T 388 +5556T 717 +4949A 695 +27227 650 +QA8J5 545 +44949 341 +76JA2 104 +J568K 511 +TK7A2 239 +63AK2 432 +67876 419 +J2J99 519 +JAAJA 680 +8TA7T 281 +85249 162 +89Q99 367 +6K664 526 +66J96 273 +QJ995 422 +K2KK2 521 +KJKKJ 322 +22A8A 584 +96A47 925 +9QJ52 50 +29J52 515 +4Q6J6 124 +2522Q 993 +7J922 596 +TT9T2 875 +49484 677 +A5KKA 500 +J9Q9Q 701 +TK228 577 +42224 911 +66K96 126 +4T7K2 241 +3Q267 706 +8J22K 111 +TTT55 481 +6555K 901 +55557 152 +859JJ 933 +Q44AA 408 +27J88 974 +44J44 947 +A42K8 777 +QQQ6Q 49 +AJ529 418 +TATTT 93 +A5AAA 562 +TTTT6 504 +AAA78 496 +T549J 7 +Q332Q 276 +T4434 382 +JTJTA 123 +A7A9A 678 +44JJ4 406 +T934K 130 +444TQ 358 +J64J4 917 +9Q9QA 981 +J33J3 549 +TK68J 29 +Q7956 186 +A5TAT 400 +KTKT3 529 +J7887 707 +6KA6K 383 +Q4Q6A 976 +76565 870 +8T9J8 578 +KAJKA 333 +AK4J9 926 +KQQJQ 190 +88588 914 +45T4J 621 +7Q777 796 +Q8Q3Q 803 +J7755 449 +65K74 626 +8787Q 847 +QJJ9J 904 +Q8Q8Q 227 +Q9J5K 567 +K2K9K 369 +T7T7T 145 +K3366 731 +AK3T7 79 +TQ328 397 +JQJJQ 297 +77799 886 +35J6J 745 +K6T78 890 +88AA5 638 +J3Q38 301 +36T74 392 +666QA 814 +43JQ8 613 +J7J79 570 +KQK55 768 +TT5TT 61 +49TA5 109 +2QQ2Q 336 +9J9AQ 561 +J8866 512 +A2JAQ 309 +KKTTT 518 +6J692 826 +8Q2A2 403 +9J899 990 +9966A 887 +55J25 620 +4TT66 125 +62JK8 68 +44766 342 +2A475 513 +KJKK4 385 +324J8 569 +66636 785 +438KQ 143 +54855 749 +93929 337 +58886 853 +9AT99 266 +59535 547 +99599 451 +7367Q 335 +534A9 409 +AAJQQ 758 +68K54 909 +JK259 859 +A3535 938 +J6446 969 +97999 659 +446A6 851 +48T9T 848 +K5T7A 412 +8J696 517 +JT664 306 +TQ6Q2 416 +66667 60 +T89AQ 235 +54J34 824 +64969 141 +73JKJ 427 +AAT3K 249 +T7T77 891 +8JA88 861 +74T57 514 +69A9K 937 +JJK7K 651 +AAQQQ 827 +622TJ 142 +72882 822 +44595 71 +KKKJ8 257 +6656T 151 +64725 78 +J65AA 193 +68744 920 +63943 399 +9KQQ9 685 +4K2A9 240 +A236A 282 +77575 442 +648JJ 463 +55655 520 +99K99 973 +9J9AA 699 +72K22 460 +JK47A 817 +3Q3Q3 713 +J4628 44 +Q88AQ 986 +J6668 375 +T85T8 988 +4T44T 506 +K9989 311 +48888 368 +7753K 952 +88666 761 +J8AJA 136 +74494 175 +KK373 657 +4KT4T 712 +9339J 99 +K52T7 47 +JJ8QQ 42 +32222 210 +62626 212 +65552 213 +47A82 260 +T4J6A 41 +345J3 82 +4799J 924 +JT5K9 181 +8JJ88 791 +T4672 476 +A675K 204 +7A499 354 +848JK 377 +3863K 787 +4929Q 183 +KKK78 872 +65KK9 958 +94355 434 +37T7Q 523 +338T6 447 +52JA5 39 +JAAKA 326 +8KKQ8 715 +5T333 533 +44T2J 131 +233K3 831 +935T6 689 +A64K8 929 +T7699 630 +2QJ66 669 +A2KJJ 922 +AT992 588 +93QTQ 251 +66668 440 +7KJTT 393 +8T674 269 +8AA32 324 +97AJ9 692 +3J335 563 +2A3K7 229 +QK7KQ 772 +QQAA9 834 +73232 916 +296Q7 464 +65J65 272 +KKK55 721 +66333 223 +QQQTA 663 +9AKAA 604 +888J8 261 +64646 605 +636J6 452 +6J665 873 +94TTT 507 +KT9K9 616 +K2K53 426 +4T944 751 +43423 809 +889T8 509 +3AKQJ 655 +QQQ98 146 +9Q444 359 +993J4 59 +22K26 75 +T58K2 118 +5T55Q 808 +6A4Q4 492 +T4JT9 516 +TJ8A5 552 +3AQ59 4 +297K3 915 +7Q288 815 +44KJK 726 +8J496 531 +88A3A 979 +2AQ76 21 +K5K8K 248 +2373Q 603 +Q5666 660 +Q2424 472 +J2422 828 +TT7TT 304 +KJKQ7 960 +2AT68 24 +T66Q6 899 +A9852 225 +TT2TT 852 +75975 720 +73AT3 671 +J7773 155 +52225 15 +ATJKT 299 +6KKKJ 168 +667J4 732 +44J47 188 +77Q78 43 +Q63K8 741 +4T4A4 939 +Q7Q77 905 +KKK9K 294 +KAJ4K 330 +977TJ 842 +56JKQ 300 +67K5T 26 +J944K 468 +Q3Q3Q 187 +777AQ 975 +42Q7J 264 +J5KQ5 994 +9J42A 670 +8A4QA 525 +7TTT6 877 +K8KKK 497 +67T62 483 +6222A 197 +Q4584 381 +5595J 714 +3T6T6 987 +QQTQT 64 +KKTKK 495 +QKAA9 863 +KKKKQ 200 +3QAJ8 989 +222T5 797 +T9Q73 595 +TKK7T 945 +76767 871 +3837K 674 +99Q96 40 +JJ296 762 +KJ3KQ 98 +Q73A7 747 +5Q757 105 +447JT 373 +28298 356 +KK3KT 755 +266TT 992 +Q5JQ5 840 +KK59Q 538 +4A94Q 113 +T4TTT 268 +AAAJA 158 +T3T88 252 +JKKKK 690 +2339T 153 +QQ9Q9 718 +AA2AA 586 +666AK 602 +8Q55Q 743 +J4J4K 740 +9AK2J 600 +TTTT9 256 +94989 128 +K3KKK 387 +6K6TK 540 +3Q333 72 +QKQKQ 346 +Q7A8K 1 +2T222 679 +6AJJJ 378 +45A55 316 +TTT44 622 +A42K3 315 +49QTK 711 +4562Q 462 +58K27 818 +6Q8A8 539 +KJQQK 293 +Q28TK 946 +K8J49 220 +3333T 17 +T774K 48 +883J2 94 +5QQQ5 433 +T9325 971 +55855 998 +55K5K 96 +3T32K 167 +92229 226 +33KJ7 972 +Q7A3T 868 +6JQ6Q 177 +Q2Q55 756 +68K6A 581 +5555A 286 +85QQ6 185 +TTTTJ 934 +2JJ64 91 +46QQ6 254 +626J8 30 +43444 471 +TKQAK 550 +8KK5J 277 +A46K4 371 +48A8A 587 +88842 541 +JK9J9 405 +T225T 944 +TTTAJ 349 +J7629 320 +2K44K 843 +59857 754 +KKJ54 849 +T85QJ 36 +8T888 574 +99333 968 +44258 907 +9A37J 355 +QAAA2 53 +TT3TT 805 +6T696 878 +74A23 482 +6KJTT 784 +42QAT 488 +J874J 792 +2Q8JK 654 +89K87 967 +QQQQT 615 +A4A49 475 +QQJJK 885 +JAAA8 508 +AKA4K 384 +82T88 12 +99A55 658 +33338 614 +A93JA 214 +K386T 978 +4443J 428 +3KTT3 910 +22T62 888 +82637 487 +3T344 850 +J4424 874 +J734Q 302 +KJ4Q8 395 +JA9J5 636 +2AT5J 263 +9AK4Q 9 +KTTTT 174 +336J6 896 +JJJ8J 836 +Q7K25 530 +52AQT 672 +A6886 179 +6JJ66 148 +QJJQQ 165 +85685 291 +7QQJ7 31 +7KK87 171 +45534 112 +K55K2 106 +6A666 764 +38AA3 956 +KKAJT 940 +55578 846 +333J3 984 +3Q3J5 313 +8946K 13 +93J43 236 +8T9A3 869 +4K48K 823 +J222J 325 +TTJ99 279 +664Q6 628 +6QQQ6 87 +QJQQ8 2 +2TT2T 132 +65Q5K 607 +3K3KK 637 +777JJ 224 +9T84J 912 +99JA9 461 +5K332 923 +A57Q4 839 +46J59 844 +3768T 793 +JQ966 389 +KKK7A 723 +J4QKJ 645 +TQJ7A 110 +QJ2Q6 647 +22894 665 +22363 502 +KAKKK 682 +5KKKA 265 +K35K5 734 +Q6666 470 +T24TT 996 +8JQQT 163 +A6934 232 +98AA4 343 +KJJ77 332 +5TQ5J 697 +38Q89 627 +QQJ56 247 +T28T2 486 +55JQ5 551 +836Q9 629 +A88Q7 6 +52555 62 +84548 230 +9KKK9 37 +AA2AJ 789 +Q2222 854 +77K7K 900 +T8QT6 505 +95393 292 +783JQ 902 +8888A 97 +99779 86 +KKJJJ 961 +87558 951 +58T32 238 +QJ29J 528 +A7KJ3 323 +5T38K 860 +AKKK8 121 +J5589 366 +J99JJ 580 +J7QJK 829 +K7847 180 +44TQQ 825 +76266 760 +23Q6T 895 +73Q87 234 +A6282 328 +QQ9Q2 417 +J5224 599 +T66TT 215 +35555 862 +77787 536 +7TQ2J 228 +T5JTQ 431 +K24Q9 816 +53KKK 410 +Q666Q 402 +6K67K 334 +T8TTT 962 +66664 147 +AKAKA 446 +J844A 773 +2JQQ2 510 +92Q99 73 +44Q4Q 129 +42K9K 479 +66Q34 290 +33322 783 +A6AAA 401 +2JQJ4 927 +J5558 218 +3Q343 303 +995J5 779 +TJJTJ 70 +557K5 466 +86656 134 +3AQQK 275 +65J3A 339 +A584T 558 +A9A99 644 +J5J74 641 +3A9JK 127 +67KQJ 469 +Q3QKK 631 +88A7J 830 +JJK67 115 +47AKQ 231 +77677 456 +2T3T6 25 +K24TQ 19 +AQ3AA 46 +92289 57 +66565 95 +345JQ 894 +T7JA8 250 +QQJ88 274 +2QJ2A 253 +77737 913 +KK22J 271 +J66JJ 270 +K9QJ9 380 +75KK7 172 +QQAJQ 769 +33J88 22 +AJ88A 780 +T98Q8 473 +88KK8 363 +36T97 216 +777KA 771 +QT77K 883 +K5KT5 738 +73QJ9 396 +7A59J 296 +J7876 493 +J977A 467 +999J9 903 +6KA95 802 +QA3KK 298 +88558 448 +JA8KT 88 +3A73J 307 +288QA 966 +9Q563 845 +JTAA8 576 +8AJ37 746 +5AQ28 435 +8473Q 964 +JAA5T 423 +QTQTT 918 +44547 284 +66QJ5 776 +65556 340 +3AA33 221 +7975J 398 +54Q94 858 +5666K 83 +2A3J6 169 +5J554 763 +AQ9A4 865 +5468J 812 +QQ7QQ 598 +Q9999 807 +Q2QQQ 459 +46AAA 34 +A788A 702 +JTTK8 453 +5AJ7T 164 +A38K6 159 +QJ5QQ 750 +J54KT 116 +JTKKK 688 +499KK 63 +A5538 404 +6TAA3 242 +Q9J43 379 +6A2JQ 535 +Q8882 643 +535J3 686 +666J6 813 +93963 857 +5TA42 353 +99J53 205 +JQ7K3 222 +92A66 1000 +K5QT5 634 +5AA6A 806 +KKTAK 206 +5242T 708 +26K26 344 +JK8T8 841 +39A92 357 +726J7 719 +33QT7 5 +Q3J6T 554 +9K69T 66 +JJJJJ 503 +866AA 601 +K96A4 267 +T222J 45 +AJQAA 744 +7K7J7 370 +JJJ34 499 +77TTK 161 +98T35 347 +3J8J3 949 +92J2T 941 +2JJJ2 957 +87QQ2 557 +67646 649 +T5T99 166 +6Q26Q 765 +4J538 437 +TAQ67 103 +8TT8T 662 +7A77A 120 +5555J 176 +449J9 709 +JK98Q 811 +K8JKJ 930 +25AA2 752 +222QQ 321 +22K22 386 +76J55 362 +93577 656 +555JJ 589 +42Q54 684 +Q4QQQ 305 +3993A 391 +3JQ2K 544 +844J4 285 +AA222 314 +38467 970 +4Q6T8 331 +J4Q76 101 +33J64 450 +7A326 137 +9977K 10 +9JJK2 564 +2JKA8 739 +9QA72 694 +3K6KJ 527 +J6Q7J 444 +67AJQ 135 +99898 411 +79823 936 +5K643 237 +J62J6 696 +26T26 522 +K8AK3 415 +35553 864 +J23T2 374 +5555K 800 +JT266 977 +77772 639 +8822K 610 +KJQ9Q 835 +A9A9A 338 +J36T6 424 +2586Q 494 +73337 74 +A8AAA 438 +K66J6 199 +87J58 310 +5T4KT 133 +28768 329 +AA3A3 11 +77J27 80 +44442 691 +525KA 198 +86T5A 436 +5K55J 84 +33343 624 +3A733 965 +83523 67 +66896 982 +63JQ4 963 +QQT88 38 +27J42 150 +828T5 439 +3444A 955 +QTQQ8 55 +K839J 217 +64697 156 +43393 546 +K7777 51 +2QKJ2 704 +2A2AA 312 +AA5T3 534 +55544 139 +6572K 255 +6KJK6 425 +T987K 778 +3TA5Q 611 +QTT55 219 +86TTK 664 +TT344 207 +77577 327 +KJK3K 262 +J68J5 730 +43555 727 +TTK2A 537 +K58QA 919 +KAQ97 102 +A444J 443 +4J969 889 +9TTT3 283 +AT399 983 +KKJ98 661 +K22J2 501 +467J7 673 +QJTQJ 985 +787TK 932 +556A5 617 +6JT4T 372 +97343 724 +Q693Q 942 +999TJ 182 +TT9JQ 856 +88Q42 757 +633J3 560 +Q6295 722 +KK6J8 959 +QTTA8 693 +A8688 542 +82434 819 +6T6A9 623 +78J88 138 +83Q34 209 +J8847 619 +6QJ22 633 +59995 203 +99K7K 801 +A3343 455 +84982 108 +T42JT 700 +38383 612 diff --git a/input/day_07_example b/input/day_07_example index fc6e099..e3500c3 100644 --- a/input/day_07_example +++ b/input/day_07_example @@ -1,9 +1,5 @@ -190: 10 19 -3267: 81 40 27 -83: 17 5 -156: 15 6 -7290: 6 8 6 15 -161011: 16 10 13 -192: 17 8 14 -21037: 9 7 18 13 -292: 11 6 16 20 +32T3K 765 +T55J5 684 +KK677 28 +KTJJT 220 +QQQJA 483 diff --git a/input/day_08 b/input/day_08 new file mode 100644 index 0000000..d95e19b --- /dev/null +++ b/input/day_08 @@ -0,0 +1,716 @@ +LRRLRRLLRRRLRRLRLRRRLRRLRRRLRLLRRRLRRRLRLRRRLRRLRRLRLRLLLRRRLRRRLRRLRRLRLRRRLRRLLRRLRRLRLLRLRLRRLRLLRLRLRRRLRRLRLLRLRLLRRLRLRRLLLRLRRLRRRLLLRRLRLRRRLLRRLLLRRRLRRRLLLRRLLRLRRLRLRRLLLRLRRLLLLRRLLRRRLRRLRRLRLRLLRLRRRLLRRLLRRLRRLRRLRRLRLLRRLRRRLRLRLLLRRRLLRRRLRRLRRLLLLRRRR + +VRN = (CSM, GPD) +XDT = (QBK, PJR) +HVC = (MKM, TJS) +KRH = (BHN, PXB) +GTX = (VFD, TXR) +BQB = (MQV, PFQ) +TDV = (VSG, MJX) +VJM = (QHP, XMB) +KLG = (QLJ, HCV) +TSM = (JPG, DNP) +KHS = (QNR, DXJ) +FXM = (PHF, PHF) +RMV = (BMM, KHS) +QXL = (BKG, TLP) +MHS = (QXL, CFQ) +TBT = (TVT, BRD) +QXS = (GPP, RND) +XLL = (JHQ, LDV) +PBQ = (VXK, RJR) +FXB = (HMN, THX) +DPF = (GLX, GNC) +HVG = (HJF, SCH) +QMN = (DQJ, GMN) +MBS = (PFX, JHG) +VGL = (FHX, CCK) +QLV = (BLT, FDR) +MNS = (BDB, BMJ) +MMT = (TSM, SFR) +NRP = (FKB, QPH) +XFQ = (GTS, CCQ) +XFF = (HKG, NVL) +TXR = (VHQ, CKP) +VPL = (GHC, VMT) +SGC = (BGM, MJV) +SMS = (GJV, LSC) +BVC = (PRH, FJJ) +JHQ = (VJQ, XTX) +RJF = (GKK, NKX) +RJR = (JJQ, JTK) +VHQ = (JPS, JPS) +SFR = (JPG, DNP) +RDP = (GPD, CSM) +GGQ = (MVX, XBP) +XGK = (GBB, VPH) +XBH = (PTH, GSL) +MKG = (RBP, MGG) +FSG = (KFC, RMB) +NHC = (RQG, CVF) +SSV = (MVF, QFP) +RLP = (FXC, HCP) +FBZ = (FJF, CRJ) +HFL = (FKB, QPH) +NBM = (QBD, XGK) +NSP = (QKG, NDN) +TQF = (RMH, TDB) +RBB = (QTC, HPT) +CVF = (BSV, VTR) +XQG = (LFJ, JXD) +KXF = (CRJ, FJF) +MQC = (MQL, BSL) +RCC = (NHC, QLC) +TNT = (VKQ, NSX) +TVN = (NDN, QKG) +SCH = (FXB, NTM) +CVD = (XLJ, XDT) +QVF = (MQR, RDB) +GXS = (HCK, SHD) +KBD = (JHG, PFX) +KXV = (HVQ, QCJ) +MQR = (RNQ, SVC) +CBC = (SXB, BVC) +GKK = (HDR, LTF) +FRT = (CFQ, QXL) +VMT = (SQQ, DBB) +QPV = (NVQ, VVV) +XGD = (MPL, PMQ) +MNT = (JDD, NQC) +RGT = (QHD, SQP) +HXV = (RQD, RRX) +LGR = (FHX, CCK) +PHF = (CBV, TMC) +BTP = (JSC, QMN) +CXS = (SCH, HJF) +MQV = (FGJ, QPD) +HRZ = (CCX, BCF) +DDB = (DJK, CVD) +XNL = (QLJ, HCV) +GLX = (MGN, CFV) +QCJ = (NDK, XBR) +XBX = (CQM, VKD) +QPH = (XBH, CFG) +NSL = (LFJ, JXD) +DJQ = (VMN, STS) +RNV = (XFF, KSR) +JTR = (QLG, XRD) +VVV = (MDH, KHK) +TLR = (DMH, NXC) +GBH = (GLS, XLK) +LRN = (QRM, FMC) +BRM = (DCK, DSK) +GQS = (FXV, QPV) +XMT = (NHF, RXG) +KLR = (HFN, KDR) +SVH = (RMR, JLC) +QSG = (KQC, CMH) +VVX = (XGM, FNX) +BCF = (LNR, MTS) +RPJ = (RCC, CKG) +JJD = (NRP, HFL) +FGP = (MFS, RBB) +BJX = (BTD, KSC) +PQC = (VMN, STS) +JPG = (RQL, CSQ) +SLK = (JJC, BPJ) +JTK = (XHN, BFH) +HCV = (BRF, VPT) +VPH = (BVS, RRT) +MSH = (JQF, XFJ) +JHL = (QPF, QPF) +FGD = (MPC, TVB) +DCB = (JBC, XFB) +RKN = (TSL, VQG) +QBQ = (QLV, NRT) +MQX = (JSX, MCV) +XHX = (FNX, XGM) +DTL = (JDM, BDX) +LST = (JHL, CQN) +VGR = (HQV, HRZ) +CTQ = (XCF, TJK) +SQP = (HHB, NBM) +RRL = (TSL, VQG) +NNM = (DDS, XSF) +KHK = (HSG, NDF) +MGN = (VXT, VGV) +TLB = (DPK, MLV) +NMM = (TRR, XJH) +SJG = (XRJ, XBX) +GSC = (RRL, RKN) +KDR = (PSJ, TBM) +LRP = (SQP, QHD) +DKF = (MVR, QQB) +FHC = (BPT, BKC) +PLT = (JGG, GGQ) +XRD = (HMH, PBQ) +RHP = (JPD, XVL) +MXF = (MQR, RDB) +DML = (BRD, TVT) +CKP = (JPS, RBS) +BFK = (BCL, TLK) +KSR = (NVL, HKG) +XQF = (BMM, KHS) +BVJ = (CBL, PLC) +BCS = (RQF, GTB) +JCC = (VTT, VPQ) +BCL = (BNV, PDB) +HCK = (DDB, CBX) +SVG = (FGD, VQL) +BLT = (XNK, LHM) +MVQ = (LRG, NPB) +RND = (QCK, QRN) +HFR = (FBT, CLS) +KNK = (XDS, BCK) +XBB = (BRM, FDC) +XGM = (FFC, GJX) +PTN = (TQF, QKP) +RNQ = (GSC, XKH) +TPT = (CMK, KXT) +HPL = (CKB, QLR) +MVX = (QSG, TKJ) +QFP = (RLP, RSF) +GXF = (LNB, VNJ) +QHD = (NBM, HHB) +KSS = (LLH, PFK) +MFD = (XGJ, GGS) +JJQ = (XHN, BFH) +JDD = (HXV, FVH) +CFR = (FXM, FXM) +FDR = (XNK, LHM) +DHG = (BRS, TLR) +TDB = (SBS, XBB) +BVS = (GQH, BFS) +DGZ = (TMC, CBV) +HQD = (JSC, QMN) +TMZ = (XFB, JBC) +BRF = (MBF, KGJ) +RQG = (VTR, BSV) +CSQ = (FTS, RHR) +FFJ = (QCL, CTQ) +XKH = (RRL, RKN) +VJQ = (BTL, GQS) +NGK = (JGG, GGQ) +RQN = (GVG, SJN) +GRR = (RNV, FHF) +LSR = (VBL, SLK) +VQG = (QBV, NJV) +BHK = (BVJ, LJR) +BRS = (DMH, NXC) +NKX = (LTF, HDR) +QBD = (GBB, VPH) +RGQ = (CLM, FHK) +VXX = (KRH, VGN) +KRF = (VFQ, SMN) +XFR = (XGD, RMM) +JGC = (JGM, PFR) +SHD = (DDB, CBX) +QKG = (QTS, GXP) +CDL = (GLX, GNC) +RBP = (HKK, CMN) +CLN = (HDG, BHM) +XFX = (RNV, FHF) +AAA = (DXX, SVG) +FXC = (MMT, KLS) +PTF = (SKF, SDF) +QPF = (RQF, RQF) +DTB = (HQV, HQV) +RRF = (FNV, MKG) +MGG = (HKK, CMN) +NDF = (KMD, FFH) +DVL = (RKL, CLC) +JRQ = (BXV, BRB) +HVM = (DRT, SSV) +BHM = (KNK, BPP) +TDT = (DPS, VCP) +JPC = (DCH, FHD) +RSF = (FXC, HCP) +KSX = (BVJ, LJR) +NLT = (LTB, QBQ) +SBD = (NKX, GKK) +VQL = (MPC, TVB) +JXD = (MLK, LHN) +XNN = (TNT, LPQ) +HMH = (RJR, VXK) +JGG = (MVX, XBP) +PTP = (MVQ, NPS) +FQC = (XQF, RMV) +FXT = (TDH, JGD) +RGP = (CPN, KGF) +BTD = (NKN, NTQ) +BGM = (NRJ, CJN) +RMM = (PMQ, MPL) +DQJ = (DPF, CDL) +TVT = (TFJ, VJM) +TGL = (CGS, SJG) +NHF = (HVC, LVM) +NMK = (GRR, XFX) +QRN = (MMP, XSL) +FFH = (DJQ, PQC) +PDJ = (NQC, JDD) +CGS = (XBX, XRJ) +NTQ = (RXX, FLX) +CFB = (TVC, PTP) +GXK = (FLC, GXS) +RBS = (DCB, TMZ) +CFQ = (TLP, BKG) +QHP = (KVX, GSG) +HDJ = (RPH, QPK) +VXT = (GXF, JKM) +NCM = (NJL, TGL) +HFN = (TBM, PSJ) +JGF = (CFB, NMC) +JDM = (CLN, PHJ) +DJS = (RMR, JLC) +RDB = (RNQ, SVC) +RRX = (HQD, BTP) +HHS = (MXF, QVF) +MMP = (GTX, HKC) +JRK = (KKP, PTN) +TRR = (VGD, HGC) +JKM = (LNB, VNJ) +BRD = (TFJ, VJM) +TLK = (BNV, PDB) +QTS = (CHL, LSR) +BPP = (XDS, BCK) +RXX = (BKP, TLS) +VFD = (VHQ, VHQ) +BQF = (DHG, DQC) +XDL = (QVF, MXF) +ZZZ = (SVG, DXX) +GGB = (LTB, QBQ) +QTN = (JHL, CQN) +BVK = (BHQ, SSG) +VGB = (BXV, BRB) +QLR = (XFR, KNM) +QBK = (KNC, VJX) +BMJ = (JLK, TDV) +FDC = (DSK, DCK) +XDS = (SMS, TVR) +GBC = (NGK, PLT) +HPT = (XHQ, SXT) +FHK = (JCC, FJS) +KNM = (RMM, XGD) +GTB = (KLR, JVZ) +VCT = (PTN, KKP) +LDV = (XTX, VJQ) +KTK = (MQV, PFQ) +TVC = (MVQ, NPS) +BXV = (XLL, KDL) +BFA = (BCF, CCX) +CCF = (CLM, FHK) +JGS = (VCP, DPS) +RVK = (MKJ, QLH) +FNX = (FFC, GJX) +XBP = (QSG, TKJ) +LMJ = (FPH, JVL) +HKG = (VXX, RNX) +KMD = (DJQ, PQC) +BRB = (XLL, KDL) +NDK = (DJS, SVH) +BSV = (XVC, QXS) +TLS = (FSJ, MNS) +CRJ = (SGC, RNH) +BNV = (QSF, FSG) +SMN = (MNK, QGN) +JVV = (TRN, DVL) +JJC = (HBT, RPJ) +KSB = (XVL, JPD) +JJT = (TLB, DTJ) +TSL = (QBV, NJV) +GNV = (GCS, JLR) +HJF = (FXB, NTM) +VMN = (CFR, CFR) +GVG = (XDL, HHS) +LNB = (HMP, XMP) +RTL = (FXT, RCT) +XVC = (RND, GPP) +GNS = (MFS, RBB) +XTG = (LRM, DKQ) +JVZ = (KDR, HFN) +QQB = (XTG, GFG) +HMN = (FHC, FMN) +XLC = (FXT, RCT) +CKG = (QLC, NHC) +NJB = (DVL, TRN) +VCP = (LRF, HPL) +KQJ = (MXH, MXH) +GJV = (TPT, QNJ) +CCX = (LNR, MTS) +DTJ = (MLV, DPK) +HDX = (JSX, MCV) +XRJ = (VKD, CQM) +DMH = (RGP, KPR) +QGN = (VRF, QDL) +JSC = (DQJ, GMN) +BPT = (LLB, XNN) +CJN = (JJT, PGM) +XDV = (XVD, HJH) +JHG = (LLF, MLJ) +NKN = (FLX, RXX) +TGP = (XJH, TRR) +TLP = (XLC, RTL) +HQT = (SSN, BPS) +BKP = (MNS, FSJ) +VPT = (KGJ, MBF) +JSJ = (PFK, LLH) +CBX = (DJK, CVD) +TJK = (VGL, LGR) +THP = (TGL, NJL) +NSX = (SQL, GNV) +JQF = (VDM, JJD) +SDF = (JPC, KRV) +XNK = (HDJ, MQJ) +DSD = (SJN, GVG) +SBS = (FDC, BRM) +FPH = (NCM, THP) +LMR = (KQJ, BGV) +VKQ = (SQL, GNV) +FMC = (CPV, GBC) +HHB = (QBD, XGK) +HVQ = (NDK, XBR) +KXT = (JKG, NLS) +GJX = (TVP, JTR) +JLT = (MHM, MSH) +VNJ = (HMP, XMP) +TDH = (JGF, GGD) +VPQ = (HDX, MQX) +SKF = (JPC, KRV) +NXT = (RXG, NHF) +TRN = (CLC, RKL) +RRT = (BFS, GQH) +JFJ = (SXB, BVC) +KBR = (CGD, JGC) +PGG = (HFR, TJJ) +CMK = (JKG, NLS) +CBV = (FCX, KBR) +GMN = (DPF, CDL) +BTL = (QPV, FXV) +PFX = (MLJ, LLF) +DCT = (XLK, GLS) +PGM = (DTJ, TLB) +NVL = (VXX, RNX) +RPD = (TLK, BCL) +QDL = (FFJ, SFH) +JVL = (THP, NCM) +NVQ = (MDH, KHK) +TMC = (FCX, KBR) +LPQ = (NSX, VKQ) +RHR = (PPL, LCD) +JSX = (DHM, PMS) +DPK = (KBD, MBS) +LTF = (PGG, QPN) +BPS = (GXK, HCM) +HKC = (VFD, TXR) +PXB = (RPN, BQF) +FLX = (TLS, BKP) +PJR = (VJX, KNC) +PDB = (QSF, FSG) +NMC = (TVC, PTP) +MLP = (MSH, MHM) +PMQ = (KXV, QFJ) +FKB = (XBH, CFG) +JRV = (SMN, VFQ) +SQL = (GCS, JLR) +DXX = (FGD, VQL) +XMM = (GMG, LRN) +PFK = (HDL, XFQ) +XSL = (GTX, HKC) +CLC = (JRQ, VGB) +LMH = (KXF, FBZ) +NMX = (KSC, BTD) +GTJ = (KLG, XNL) +THX = (FMN, FHC) +RMH = (XBB, SBS) +SSG = (MFD, KFP) +QNR = (RBG, HNG) +DSK = (LMJ, FRP) +GQP = (FXM, XVT) +MFS = (QTC, HPT) +VHX = (VBD, RDD) +SQS = (GTJ, MSR) +LJR = (CBL, PLC) +QSF = (KFC, KFC) +DHM = (VFJ, DTL) +MDH = (NDF, HSG) +SSN = (HCM, GXK) +HCM = (FLC, GXS) +PQX = (FGG, BXR) +DQC = (BRS, TLR) +KRV = (DCH, FHD) +FNH = (SKF, SDF) +LFJ = (LHN, MLK) +MVR = (GFG, XTG) +HBT = (RCC, CKG) +VKD = (NMK, PFV) +TKJ = (KQC, CMH) +MRH = (RHV, ZZZ) +CKB = (XFR, KNM) +BMM = (DXJ, QNR) +KDL = (JHQ, LDV) +VFJ = (BDX, JDM) +PLC = (PND, GNP) +MNK = (QDL, VRF) +MXT = (RMV, XQF) +TJS = (PTF, FNH) +PHJ = (BHM, HDG) +FSJ = (BDB, BMJ) +CFV = (VGV, VXT) +XVD = (CBF, SQS) +TFJ = (QHP, XMB) +CPV = (PLT, NGK) +VTR = (XVC, QXS) +BKC = (XNN, LLB) +NPS = (NPB, LRG) +FXV = (NVQ, VVV) +FTS = (PPL, LCD) +HMP = (QMD, SNX) +VBD = (DTB, DTB) +VFQ = (QGN, MNK) +KFP = (GGS, XGJ) +BHN = (RPN, BQF) +PFV = (GRR, XFX) +QMD = (MGK, XDV) +MLK = (RPD, BFK) +GFG = (DKQ, LRM) +NLS = (BQB, KTK) +XLK = (HVG, CXS) +LSC = (QNJ, TPT) +FNV = (RBP, MGG) +HKK = (RCX, MQC) +GPD = (NSL, XQG) +RQL = (RHR, FTS) +HDB = (GHC, VMT) +HJH = (SQS, CBF) +QTC = (SXT, XHQ) +TRS = (BXR, FGG) +MTS = (DML, TBT) +RHV = (DXX, SVG) +XVL = (FGP, GNS) +GSG = (RRF, CSP) +VBL = (JJC, BPJ) +CCK = (RJF, SBD) +QPN = (TJJ, HFR) +PRH = (TGP, NMM) +PQT = (TRS, PQX) +QKP = (RMH, TDB) +XMP = (SNX, QMD) +QPD = (KRF, JRV) +RQD = (HQD, BTP) +XVT = (PHF, DGZ) +GXP = (CHL, LSR) +LHM = (MQJ, HDJ) +STS = (CFR, GQP) +FJJ = (NMM, TGP) +MPC = (CCF, RGQ) +MKM = (PTF, FNH) +QVH = (VBD, VBD) +XMB = (KVX, GSG) +CHL = (VBL, SLK) +XBR = (DJS, SVH) +KPR = (CPN, KGF) +MQL = (KSB, RHP) +CQM = (PFV, NMK) +XHQ = (HCR, HVM) +FFC = (JTR, TVP) +FMN = (BPT, BKC) +SNX = (MGK, XDV) +KNC = (QVJ, NNM) +DPS = (LRF, HPL) +GBB = (BVS, RRT) +BFH = (XMM, XQL) +GLS = (HVG, CXS) +RXG = (LVM, HVC) +MPL = (QFJ, KXV) +NXC = (KPR, RGP) +NJV = (TVN, NSP) +LLB = (LPQ, TNT) +SXT = (HVM, HCR) +LLH = (HDL, XFQ) +MLV = (KBD, MBS) +CBF = (GTJ, MSR) +JBC = (KTX, QQG) +FLC = (SHD, HCK) +FRP = (FPH, JVL) +BHQ = (MFD, KFP) +LNR = (DML, TBT) +CSP = (MKG, FNV) +GHC = (SQQ, DBB) +NRT = (BLT, FDR) +VTT = (HDX, MQX) +HSG = (FFH, KMD) +VGA = (CBV, TMC) +KLS = (TSM, SFR) +PFQ = (FGJ, QPD) +MKJ = (JLT, MLP) +MFX = (RVK, NSF) +QNJ = (KXT, CMK) +QBV = (NSP, TVN) +MSR = (KLG, XNL) +NSF = (QLH, MKJ) +DKQ = (JDR, DQQ) +PLH = (RVK, NSF) +JKG = (BQB, KTK) +LVM = (MKM, TJS) +QLJ = (VPT, BRF) +FVH = (RRX, RQD) +MJX = (DCT, GBH) +QLH = (MLP, JLT) +NPB = (XMT, NXT) +HDL = (CCQ, GTS) +JPS = (DCB, DCB) +CQN = (QPF, BCS) +GNP = (DSD, RQN) +JLK = (MJX, VSG) +PMS = (DTL, VFJ) +BFS = (JGS, TDT) +XJH = (VGD, HGC) +VRF = (SFH, FFJ) +BCK = (SMS, TVR) +DRT = (QFP, MVF) +PND = (DSD, RQN) +VSG = (GBH, DCT) +VGV = (JKM, GXF) +FHD = (MXT, FQC) +GPP = (QRN, QCK) +BDX = (CLN, PHJ) +LLF = (HQT, DCL) +DXA = (HFN, KDR) +MCV = (DHM, PMS) +NTM = (HMN, THX) +JLC = (RDP, VRN) +HQV = (BCF, CCX) +NDN = (QTS, GXP) +QVJ = (DDS, XSF) +MQJ = (RPH, QPK) +FGJ = (KRF, JRV) +LHN = (BFK, RPD) +MXH = (RHV, RHV) +HGC = (DNN, PQT) +MHM = (XFJ, JQF) +JGD = (JGF, GGD) +FCX = (JGC, CGD) +GCS = (LST, QTN) +RCX = (BSL, MQL) +XGJ = (VCT, JRK) +SXB = (FJJ, PRH) +LRG = (XMT, NXT) +XSF = (LRP, RGT) +DNP = (CSQ, RQL) +RKL = (VGB, JRQ) +KVX = (CSP, RRF) +JPD = (FGP, GNS) +GNC = (MGN, CFV) +PFR = (MHS, FRT) +DCK = (LMJ, FRP) +KKP = (TQF, QKP) +XQL = (GMG, LRN) +QCL = (TJK, XCF) +TVP = (XRD, QLG) +HDR = (QPN, PGG) +HLN = (BHQ, SSG) +GGS = (VCT, JRK) +SJN = (HHS, XDL) +DBB = (BHK, KSX) +QPK = (MFX, PLH) +MBF = (NLT, GGB) +BDB = (TDV, JLK) +KSC = (NKN, NTQ) +CPN = (HDB, VPL) +TVB = (RGQ, CCF) +VJX = (NNM, QVJ) +FBT = (JLL, LMR) +TVR = (GJV, LSC) +RNX = (KRH, VGN) +RPH = (MFX, PLH) +VJA = (JBC, XFB) +CLS = (JLL, LMR) +PSJ = (DKF, MSL) +QLG = (PBQ, HMH) +DXJ = (HNG, RBG) +XFB = (KTX, QQG) +TJJ = (FBT, CLS) +KFC = (JRF, JRF) +XFJ = (JJD, VDM) +RCT = (TDH, JGD) +RNH = (BGM, MJV) +VGD = (PQT, DNN) +KQC = (JFJ, CBC) +PPL = (JSJ, KSS) +HCR = (DRT, SSV) +XLJ = (PJR, QBK) +PTH = (QVH, VHX) +RQF = (KLR, KLR) +MSL = (MVR, QQB) +NRJ = (PGM, JJT) +JLL = (KQJ, KQJ) +DCL = (BPS, SSN) +GTS = (MNT, PDJ) +BXR = (NMX, BJX) +CBL = (PND, GNP) +VXK = (JJQ, JTK) +BSL = (RHP, KSB) +NJL = (SJG, CGS) +DQQ = (XHX, VVX) +SQQ = (BHK, KSX) +KTX = (BVK, HLN) +QCK = (XSL, MMP) +SVC = (GSC, XKH) +BGV = (MXH, MRH) +GMG = (QRM, FMC) +KGJ = (NLT, GGB) +LRF = (QLR, CKB) +CMN = (RCX, MQC) +CGD = (JGM, PFR) +LCD = (JSJ, KSS) +HDG = (BPP, KNK) +DDS = (LRP, RGT) +LRM = (DQQ, JDR) +CMH = (CBC, JFJ) +GQH = (TDT, JGS) +BKG = (RTL, XLC) +RMR = (VRN, RDP) +MGK = (XVD, HJH) +FJS = (VTT, VPQ) +SFH = (CTQ, QCL) +XHN = (XQL, XMM) +BPA = (CRJ, FJF) +XCF = (VGL, LGR) +TBM = (MSL, DKF) +JLR = (LST, QTN) +QFJ = (HVQ, QCJ) +CCQ = (MNT, PDJ) +VGN = (PXB, BHN) +LTB = (QLV, NRT) +DCH = (MXT, FQC) +CFG = (PTH, GSL) +JRF = (KXF, KXF) +QRM = (CPV, GBC) +XTX = (BTL, GQS) +FHX = (SBD, RJF) +FHF = (KSR, XFF) +CSM = (NSL, XQG) +HCP = (MMT, KLS) +DJK = (XDT, XLJ) +QLC = (CVF, RQG) +MLJ = (HQT, DCL) +CLM = (JCC, FJS) +NQC = (HXV, FVH) +RDD = (DTB, VGR) +RPN = (DQC, DHG) +GSL = (QVH, VHX) +FGG = (NMX, BJX) +BPJ = (RPJ, HBT) +RBG = (NJB, JVV) +FJF = (SGC, RNH) +GGD = (CFB, NMC) +QQG = (HLN, BVK) +MVF = (RLP, RSF) +JGM = (MHS, FRT) +RMB = (JRF, LMH) +VDM = (HFL, NRP) +HNG = (NJB, JVV) +MJV = (CJN, NRJ) +DNN = (PQX, TRS) +JDR = (XHX, VVX) +KGF = (HDB, VPL) diff --git a/input/day_08_example b/input/day_08_example new file mode 100644 index 0000000..9029a1b --- /dev/null +++ b/input/day_08_example @@ -0,0 +1,9 @@ +RL + +AAA = (BBB, CCC) +BBB = (DDD, EEE) +CCC = (ZZZ, GGG) +DDD = (DDD, DDD) +EEE = (EEE, EEE) +GGG = (GGG, GGG) +ZZZ = (ZZZ, ZZZ) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy