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)