Compare commits

...

23 Commits

Author SHA1 Message Date
64cb7fb370 y2024d10 2024-12-10 10:32:05 +01:00
99430e8e26 y2024d9 2024-12-09 13:20:27 +01:00
0dec0bbf82 y2024d8 2024-12-08 16:35:33 +01:00
2a91587ae5 y2024d7 2024-12-08 11:40:52 +01:00
dbf878baf1 y2024d6 2024-12-08 11:40:24 +01:00
013b85fbbf y2016d5 2024-12-06 10:04:09 +01:00
4dcf7001ee y2016d4 2024-12-05 12:54:39 +01:00
05c88e5e56 y2016d3 2024-12-05 10:47:26 +01:00
4c62525fa7 y2016d2 2024-12-05 10:21:06 +01:00
fa52f5bd13 y2024d5 2024-12-05 09:13:24 +01:00
a141026754 y2016d1 genuinely don't understand why this was so hard 2024-12-04 15:44:56 +01:00
6abd6c7d66 fixed justfile as I had some issues when I wanted to generated 2024 2024-12-04 14:39:44 +01:00
b429585457 y2015d25 2024-12-04 14:33:50 +01:00
5a17373244 y2024d4 2024-12-04 11:19:28 +01:00
eae352413b y2015d24 pretty easy also but had to use itertools instead of my own combinations/permutations impl because of an overflow 2024-12-03 15:28:12 +01:00
0b4e2449a1 y2015d23 refreshingly easy 2024-12-03 13:33:49 +01:00
daead25413 y2024d3p2 simplified, anyway, I lost too much time on it already 2024-12-03 13:03:49 +01:00
5b2e4a38d1 y2024d3p2 2024-12-03 12:53:58 +01:00
4e6399f5e2 y2024d3 p2 still incorrect 2024-12-03 10:52:57 +01:00
1db00c45db y2024d3 use regex for part 1 2024-12-03 10:21:13 +01:00
a6731d4a67 y2024d3 second try part 2 2024-12-03 10:12:20 +01:00
5bd059970e y2024d3 first try part 2 2024-12-03 10:11:59 +01:00
9329c9f77a y2015d22 finally, alot of small things to watch out for 2024-12-02 15:51:01 +01:00
61 changed files with 9309 additions and 68 deletions

69
Cargo.lock generated
View File

@ -2,25 +2,84 @@
# It is not intended for manual editing.
version = 4
[[package]]
name = "aho-corasick"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
[[package]]
name = "either"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
[[package]]
name = "genaoc"
version = "0.1.0"
[[package]]
name = "itertools"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
dependencies = [
"either",
]
[[package]]
name = "md5"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
[[package]]
name = "memchr"
version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "regex"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
[[package]]
name = "utils"
version = "0.1.0"
source = "git+https://git.plobos.xyz/projects/PuzzleUtils.git#49b0f24c1bdc2c04df237634607df15f19fb3ead"
[[package]]
name = "y2015"
version = "0.1.0"
dependencies = [
"itertools",
"md5",
"utils",
]
@ -28,6 +87,9 @@ dependencies = [
[[package]]
name = "y2016"
version = "0.1.0"
dependencies = [
"md5",
]
[[package]]
name = "y2017"
@ -60,3 +122,8 @@ version = "0.1.0"
[[package]]
name = "y2024"
version = "0.1.0"
dependencies = [
"itertools",
"regex",
"utils",
]

View File

@ -19,4 +19,7 @@ members = [
]
[workspace.dependencies]
utils = { git = "https://git.plobos.xyz/projects/PuzzleUtils.git" }
utils = { path = "../utils" }
itertools = "0.13.0"
regex = "1.11.1"
md5 = "0.7.0"

View File

@ -1,8 +1,8 @@
gen year day:
gen year *day:
cargo run -- {{year}} {{day}}
run year day:
cargo run --package y{{year}} --bin d{{day}}
test year day *part='1':
cargo test --package y{{year}} days::d{{day}}::tests::part{{part}} -- --nocapture
cargo test --package y{{year}} --lib days::d{{day}}::tests::part{{part}} -- --nocapture

View File

@ -4,5 +4,6 @@ version = "0.1.0"
edition = "2021"
[dependencies]
md5 = "0.7.0"
md5 = { workspace = true }
utils = { workspace = true }
itertools = { workspace = true }

View File

@ -0,0 +1,49 @@
jio a, +19
inc a
tpl a
inc a
tpl a
inc a
tpl a
tpl a
inc a
inc a
tpl a
tpl a
inc a
inc a
tpl a
inc a
inc a
tpl a
jmp +23
tpl a
tpl a
inc a
inc a
tpl a
inc a
inc a
tpl a
inc a
tpl a
inc a
tpl a
inc a
tpl a
inc a
inc a
tpl a
inc a
inc a
tpl a
tpl a
inc a
jio a, +8
inc b
jie a, +4
tpl a
inc a
jmp +2
hlf a
jmp -7

View File

@ -0,0 +1,29 @@
1
2
3
5
7
13
17
19
23
29
31
37
41
43
53
59
61
67
71
73
79
83
89
97
101
103
107
109
113

View File

@ -0,0 +1 @@
To continue, please consult the code grid in the manual. Enter the code at row 2981, column 3075.

20
y2015/src/bin/d23.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2015::days::d23;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/23_input.txt")).unwrap();
println!("{:?}", d23::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/23_input.txt")).unwrap();
println!("{:?}", d23::process_part2(&content));
}

20
y2015/src/bin/d24.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2015::days::d24;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/24_input.txt")).unwrap();
println!("{}", d24::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/24_input.txt")).unwrap();
println!("{}", d24::process_part2(&content));
}

9
y2015/src/bin/d25.rs Normal file
View File

@ -0,0 +1,9 @@
use y2015::days::d25;
fn main() {
part1();
}
fn part1() {
println!("{}", d25::process_part1(3075, 2981));
}

View File

@ -24,20 +24,20 @@ pub fn process_part1(input: &str) -> u32 {
};
let mut smallest = u32::MAX;
let mut leafs = vec![start];
let mut test = 0;
println!("start");
// Playing, Win, Loss
let mut stats = (0, 0, 0);
loop {
println!("iter: {test},");
let current_leafs = leafs.clone();
println!("leaf count: {}", current_leafs.len());
leafs.clear();
// create potential rounds
for leaf in current_leafs {
if leaf.state == State::Playing {
//println!("try for leaf");
for spell in Spell::get_all() {
match spell.name {
SpellID::MagicMissile | SpellID::Drain => {}
SpellID::MagicMissile | SpellID::Drain => {
leafs.push(leaf.use_spell(spell, false));
}
SpellID::Shield => {
if !leaf
.player
@ -45,68 +45,151 @@ pub fn process_part1(input: &str) -> u32 {
.iter()
.any(|effect| effect.name == SpellID::Shield && effect.duration > 1)
{
continue;
leafs.push(leaf.use_spell(spell, false));
}
}
SpellID::Poison => {
if !leaf
.player
.boss
.status_effects
.iter()
.any(|effect| effect.name == SpellID::Poison && effect.duration > 1)
{
continue;
leafs.push(leaf.use_spell(spell, false));
}
}
SpellID::Recharge => {
if !leaf.player.status_effects.iter().any(|effect| {
effect.name == SpellID::Recharge && effect.duration > 1
}) {
continue;
leafs.push(leaf.use_spell(spell, false));
}
}
}
leafs.push(leaf.use_spell(spell));
}
}
//leafs.iter().for_each(|leaf| println!("{:?}", leaf));
}
println!("leaf count: {}", leafs.len());
stats.0 = 0;
for leaf in &leafs {
if leaf.state == State::Win && leaf.spent_mana < smallest {
smallest = leaf.spent_mana;
}
match leaf.state {
State::Playing => stats.0 += 1,
State::Win => stats.1 += 1,
State::Loss => stats.2 += 1,
};
//println!(
// "player hp: {}, boss hp: {}, spent mana so far: {}",
// leaf.player.hp, leaf.boss.hp, leaf.spent_mana
//);
}
leafs = leafs
.clone()
.iter()
.filter(|&leaf| leaf.state == State::Playing || leaf.spent_mana <= smallest)
.map(|leaf| leaf.to_owned())
.collect();
println!("Playing, win, loss: {stats:?}");
leafs.retain(|leaf| leaf.state == State::Playing && leaf.spent_mana < smallest);
if leafs.is_empty() {
break;
}
// already know it's higher than this
if smallest <= 2000 {
let mut count_losses = 0;
for leaf in leafs {
if leaf.state == State::Loss {
count_losses += 1;
}
}
println!("Losses: {count_losses}");
break;
}
test += 1;
println!(" smallest: {smallest}");
}
smallest
}
pub fn process_part2(input: &str) -> u32 {
0
let mut boss = Character::default();
input.lines().for_each(|line| {
let (attribute, value) = line.split_once(": ").unwrap();
if attribute == "Hit Points" {
boss.hp = value.parse::<u32>().unwrap();
} else if attribute == "Damage" {
boss.damage = value.parse::<u32>().unwrap();
}
});
let player = Character {
hp: 50,
mana: 500,
..Default::default()
};
// Initial state, nothing happened yet
let start = RoundNode {
player,
boss,
spent_mana: 0,
state: State::Playing,
};
let mut smallest = u32::MAX;
let mut leafs = vec![start];
println!("start");
// Playing, Win, Loss
let mut stats = (0, 0, 0);
loop {
let current_leafs = leafs.clone();
leafs.clear();
// create potential rounds
for leaf in current_leafs {
if leaf.state == State::Playing {
for spell in Spell::get_all() {
match spell.name {
SpellID::MagicMissile | SpellID::Drain => {
leafs.push(leaf.use_spell(spell, true));
}
SpellID::Shield => {
if !leaf
.player
.status_effects
.iter()
.any(|effect| effect.name == SpellID::Shield && effect.duration > 1)
{
leafs.push(leaf.use_spell(spell, true));
}
}
SpellID::Poison => {
if !leaf
.boss
.status_effects
.iter()
.any(|effect| effect.name == SpellID::Poison && effect.duration > 1)
{
leafs.push(leaf.use_spell(spell, true));
}
}
SpellID::Recharge => {
if !leaf.player.status_effects.iter().any(|effect| {
effect.name == SpellID::Recharge && effect.duration > 1
}) {
leafs.push(leaf.use_spell(spell, true));
}
}
}
}
}
//leafs.iter().for_each(|leaf| println!("{:?}", leaf));
}
println!("leaf count: {}", leafs.len());
stats.0 = 0;
for leaf in &leafs {
if leaf.state == State::Win && leaf.spent_mana < smallest {
smallest = leaf.spent_mana;
}
match leaf.state {
State::Playing => stats.0 += 1,
State::Win => stats.1 += 1,
State::Loss => stats.2 += 1,
};
//println!(
// "player hp: {}, boss hp: {}, spent mana so far: {}",
// leaf.player.hp, leaf.boss.hp, leaf.spent_mana
//);
}
println!("Playing, win, loss: {stats:?}");
leafs.retain(|leaf| leaf.state == State::Playing && leaf.spent_mana < smallest);
if leafs.is_empty() {
break;
}
println!(" smallest: {smallest}");
}
smallest
}
#[derive(Debug, Clone, PartialEq, Eq)]
@ -125,7 +208,7 @@ struct RoundNode {
}
impl RoundNode {
fn use_spell(&self, spell: Spell) -> RoundNode {
fn use_spell(&self, spell: Spell, hard_mode: bool) -> RoundNode {
if self.state != State::Playing {
eprintln!("State: {:#?}", self.state);
eprintln!("spell: {spell:#?}");
@ -133,10 +216,25 @@ impl RoundNode {
}
let mut player = self.player.clone();
let mut boss = self.boss.clone();
let mut recharge_actif = false;
if hard_mode {
player.hp -= 1;
}
if player.hp == 0 {
return RoundNode {
player,
boss,
spent_mana: spell.cost + self.spent_mana,
state: State::Loss,
};
}
// Player turn
for effect in player.status_effects.iter_mut() {
if effect.name == SpellID::Recharge {
player.mana += effect.mana;
if effect.duration > 1 {
recharge_actif = true;
}
}
effect.duration -= 1;
if effect.duration > 0 && effect.name == SpellID::Shield {
@ -167,8 +265,15 @@ impl RoundNode {
.into_iter()
.filter(|&effect| effect.duration > 0)
.collect::<Vec<Spell>>();
let used_mana = spell.cost;
let mut dmg = 0;
if player.mana < spell.cost {
return RoundNode {
player,
boss,
spent_mana: spell.cost + self.spent_mana,
state: State::Loss,
};
}
match spell.name {
SpellID::MagicMissile => {
player.mana = player.mana.saturating_sub(spell.cost);
@ -198,15 +303,15 @@ impl RoundNode {
return RoundNode {
player,
boss,
spent_mana: used_mana + self.spent_mana,
spent_mana: spell.cost + self.spent_mana,
state: State::Win,
};
}
if player.mana == 0 {
if player.mana == 0 && !recharge_actif {
return RoundNode {
player,
boss,
spent_mana: used_mana + self.spent_mana,
spent_mana: spell.cost + self.spent_mana,
state: State::Loss,
};
}
@ -236,7 +341,7 @@ impl RoundNode {
return RoundNode {
player,
boss,
spent_mana: used_mana + self.spent_mana,
spent_mana: spell.cost + self.spent_mana,
state: State::Win,
};
}
@ -252,14 +357,14 @@ impl RoundNode {
return RoundNode {
player,
boss,
spent_mana: used_mana + self.spent_mana,
spent_mana: spell.cost + self.spent_mana,
state: State::Loss,
};
}
RoundNode {
player,
boss,
spent_mana: used_mana + self.spent_mana,
spent_mana: spell.cost + self.spent_mana,
state: State::Playing,
}
}
@ -401,17 +506,15 @@ mod tests {
};
let mut smallest = u32::MAX;
let mut leafs = vec![start];
let mut test = 0;
println!("start");
loop {
println!("iter: {test},");
let current_leafs = leafs.clone();
leafs.clear();
// create potential rounds
for leaf in current_leafs {
if leaf.state == State::Playing {
for spell in Spell::get_all() {
leafs.push(leaf.use_spell(spell));
leafs.push(leaf.use_spell(spell, false));
}
}
}
@ -423,15 +526,14 @@ mod tests {
if leaf.state == State::Playing {
all_done = false;
}
println!(
"player hp: {}, boss hp: {}, spent mana so far: {}",
leaf.player.hp, leaf.boss.hp, leaf.spent_mana
);
//println!(
// "player hp: {}, boss hp: {}, spent mana so far: {}",
// leaf.player.hp, leaf.boss.hp, leaf.spent_mana
//);
}
if all_done {
break;
}
test += 1;
println!(" smallest: {smallest}");
}
assert_eq!(smallest, 226);
@ -458,17 +560,15 @@ mod tests {
};
let mut smallest = u32::MAX;
let mut leafs = vec![start];
let mut test = 0;
println!("start");
loop {
println!("iter: {test},");
let current_leafs = leafs.clone();
leafs.clear();
// create potential rounds
for leaf in current_leafs {
if leaf.state == State::Playing {
for spell in Spell::get_all() {
leafs.push(leaf.use_spell(spell));
leafs.push(leaf.use_spell(spell, false));
}
}
}
@ -480,20 +580,34 @@ mod tests {
if leaf.state == State::Playing {
all_done = false;
}
println!(
"player hp: {}, boss hp: {}, spent mana so far: {}",
leaf.player.hp, leaf.boss.hp, leaf.spent_mana
);
//println!(
// "player hp: {}, boss hp: {}, spent mana so far: {}",
// leaf.player.hp, leaf.boss.hp, leaf.spent_mana
//);
}
if all_done {
break;
}
test += 1;
println!(" smallest: {smallest}");
}
assert_eq!(smallest, 641);
}
#[allow(dead_code)]
fn init_characters() -> (Character, Character) {
let player = Character {
hp: 50,
mana: 500,
..Default::default()
};
let boss = Character {
hp: 14,
damage: 8,
..Default::default()
};
(player, boss)
}
#[test]
fn part2() {
let result = process_part2("");

155
y2015/src/days/d23.rs Normal file
View File

@ -0,0 +1,155 @@
use core::panic;
pub fn process_part1(input: &str) -> (i32, i32) {
let mut a = 0;
let mut b = 0;
let instructions = input
.lines()
.map(|line| line.to_string())
.collect::<Vec<String>>();
let mut idx: i32 = 0;
loop {
if let Some(instruction) = instructions.get(idx as usize) {
let (instruction_name, instruction_action) = instruction.split_once(" ").unwrap();
match instruction_name {
"hlf" => {
if instruction_action == "a" {
a /= 2;
} else if instruction_action == "b" {
b /= 2;
}
idx += 1;
}
"tpl" => {
if instruction_action == "a" {
a *= 3;
} else if instruction_action == "b" {
b *= 3;
}
idx += 1;
}
"inc" => {
if instruction_action == "a" {
a += 1;
} else if instruction_action == "b" {
b += 1;
}
idx += 1;
}
"jmp" => {
let offset = instruction_action.parse::<i32>().unwrap();
idx += offset;
}
"jie" => {
let (reg, offset) = instruction_action.split_once(", ").unwrap();
let offset: i32 = offset.parse().unwrap();
if (reg == "a" && a % 2 == 0) || (reg == "b" && b % 2 == 0) {
idx += offset;
} else {
idx += 1;
}
}
"jio" => {
let (reg, offset) = instruction_action.split_once(", ").unwrap();
let offset: i32 = offset.parse().unwrap();
if (reg == "a" && a == 1) || (reg == "b" && b == 1) {
idx += offset;
} else {
idx += 1;
}
}
_ => panic!("Unknown instruction {instruction_name}"),
}
} else {
return (a, b);
}
}
}
pub fn process_part2(input: &str) -> (i32, i32) {
let mut a = 1;
let mut b = 0;
let instructions = input
.lines()
.map(|line| line.to_string())
.collect::<Vec<String>>();
let mut idx: i32 = 0;
loop {
if let Some(instruction) = instructions.get(idx as usize) {
let (instruction_name, instruction_action) = instruction.split_once(" ").unwrap();
match instruction_name {
"hlf" => {
if instruction_action == "a" {
a /= 2;
} else if instruction_action == "b" {
b /= 2;
}
idx += 1;
}
"tpl" => {
if instruction_action == "a" {
a *= 3;
} else if instruction_action == "b" {
b *= 3;
}
idx += 1;
}
"inc" => {
if instruction_action == "a" {
a += 1;
} else if instruction_action == "b" {
b += 1;
}
idx += 1;
}
"jmp" => {
let offset = instruction_action.parse::<i32>().unwrap();
idx += offset;
}
"jie" => {
let (reg, offset) = instruction_action.split_once(", ").unwrap();
let offset: i32 = offset.parse().unwrap();
if (reg == "a" && a % 2 == 0) || (reg == "b" && b % 2 == 0) {
idx += offset;
} else {
idx += 1;
}
}
"jio" => {
let (reg, offset) = instruction_action.split_once(", ").unwrap();
let offset: i32 = offset.parse().unwrap();
if (reg == "a" && a == 1) || (reg == "b" && b == 1) {
idx += offset;
} else {
idx += 1;
}
}
_ => panic!("Unknown instruction {instruction_name}"),
}
} else {
return (a, b);
}
}
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "inc a
jio a, +2
tpl a
inc a";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result.0, 2);
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result.0, 7);
}
}

106
y2015/src/days/d24.rs Normal file
View File

@ -0,0 +1,106 @@
use itertools::Itertools;
#[derive(Clone, Debug, Default)]
struct Group {
packages: Vec<usize>,
weight: usize,
}
impl Group {
fn new(packages: Vec<usize>) -> Self {
let mut group = Self::default();
for package in packages {
group.add(package);
}
group
}
fn add(&mut self, package: usize) {
self.packages.push(package);
self.weight += package;
}
fn qe(&self) -> usize {
self.packages.iter().product()
}
fn len(&self) -> usize {
self.packages.len()
}
}
pub fn process_part1(input: &str) -> usize {
let packages = input
.lines()
.map(|line| line.parse::<usize>().unwrap())
.collect::<Vec<usize>>();
let group_weight = packages.iter().sum::<usize>() / 3;
let mut best_group = (usize::MAX, usize::MAX);
for k in 1..packages.len() {
let combinations = packages.clone().into_iter().combinations(k);
for combination in combinations {
let group = Group::new(combination.clone());
if group.weight == group_weight {
if group.len() < best_group.0 {
best_group = (group.len(), group.qe());
}
if group.len() == best_group.0 && group.qe() < best_group.1 {
best_group = (group.len(), group.qe());
}
}
}
}
best_group.1
}
pub fn process_part2(input: &str) -> usize {
let packages = input
.lines()
.map(|line| line.parse::<usize>().unwrap())
.collect::<Vec<usize>>();
let group_weight = packages.iter().sum::<usize>() / 4;
let mut best_group = (usize::MAX, usize::MAX);
for k in 1..packages.len() {
let combinations = packages.clone().into_iter().combinations(k);
for combination in combinations {
let group = Group::new(combination.clone());
if group.weight == group_weight {
if group.len() < best_group.0 {
best_group = (group.len(), group.qe());
}
if group.len() == best_group.0 && group.qe() < best_group.1 {
best_group = (group.len(), group.qe());
}
}
}
}
best_group.1
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "1
2
3
4
5
7
8
9
10
11";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 99);
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, 44);
}
}

38
y2015/src/days/d25.rs Normal file
View File

@ -0,0 +1,38 @@
use utils::number::Number;
// 31562160 too high
pub fn process_part1(x: u32, y: u32) -> Number {
// the grid is actually a pyramid
// 1
// 2 3
// 4 5 6
// etc
// Num on top == 20151125
let mut current = Number::from(20151125);
let mut starting_y_idx = 2;
loop {
let mut x_idx = 1;
for y_idx in (1..=starting_y_idx).rev() {
current *= Number::from(252533);
current %= Number::from(33554393);
if x_idx == x && y_idx == y {
return current;
}
x_idx += 1;
}
starting_y_idx += 1;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn part1() {
let result = process_part1(6, 6);
assert_eq!(result, 27995004.into());
let result = process_part1(1, 2);
assert_eq!(result, 31916031.into());
}
}

View File

@ -8,7 +8,14 @@ pub mod d15;
pub mod d16;
pub mod d17;
pub mod d18;
pub mod d19;
pub mod d2;
pub mod d20;
pub mod d21;
pub mod d22;
pub mod d23;
pub mod d24;
pub mod d25;
pub mod d3;
pub mod d4;
pub mod d5;
@ -16,11 +23,3 @@ pub mod d6;
pub mod d7;
pub mod d8;
pub mod d9;
pub mod d19;
pub mod d20;
pub mod d21;
pub mod d22;

View File

@ -4,3 +4,4 @@ version = "0.1.0"
edition = "2021"
[dependencies]
md5 = { workspace = true }

View File

@ -0,0 +1 @@
L5, R1, L5, L1, R5, R1, R1, L4, L1, L3, R2, R4, L4, L1, L1, R2, R4, R3, L1, R4, L4, L5, L4, R4, L5, R1, R5, L2, R1, R3, L2, L4, L4, R1, L192, R5, R1, R4, L5, L4, R5, L1, L1, R48, R5, R5, L2, R4, R4, R1, R3, L1, L4, L5, R1, L4, L2, L5, R5, L2, R74, R4, L1, R188, R5, L4, L2, R5, R2, L4, R4, R3, R3, R2, R1, L3, L2, L5, L5, L2, L1, R1, R5, R4, L3, R5, L1, L3, R4, L1, L3, L2, R1, R3, R2, R5, L3, L1, L1, R5, L4, L5, R5, R2, L5, R2, L1, L5, L3, L5, L5, L1, R1, L4, L3, L1, R2, R5, L1, L3, R4, R5, L4, L1, R5, L1, R5, R5, R5, R2, R1, R2, L5, L5, L5, R4, L5, L4, L4, R5, L2, R1, R5, L1, L5, R4, L3, R4, L2, R3, R3, R3, L2, L2, L2, L1, L4, R3, L4, L2, R2, R5, L1, R2

View File

@ -0,0 +1,5 @@
LLULLLRLDLLLRLUURDDLRDLDURULRLUULUDDUDDLLLURRLDRRLDRRRLDUDLRDLRRDLLDUDUDUDRLUDUUDLLLRDURUDUULUDLRDUUUDUUDURLDUULLRDLULDUURUDRDDLDRLURLRURRDUURLRLUURURUUULLRLLULRUURLULURDLLRRUDLUDULDRDRLRULUURRDRULLRUUUDLRLDLUURRRURDLUDDRRUDRLUDRDLLLLLRULLDUDRLRRDDULDLRUURRRRRLDLDLRDURDRUUURDLRDDDDULURRRRDUURLULLLDLRULRDULRUDLRRLRDLLRLLLUDDLRDRURDDLLLLDUDRDLRURRDLRDDDLDULDRLRULUUDRRRUUULLLURRDDUULURULDURRLLULLDRURUUULRLRDRRUDRDRRDURRUUUULDRDDDUDLDDURLLRR
LDLRRRUURDLDDRLRRDLLULRULLLUDUUDUDLRULLDRUDRULLDULURDRDDLRURDDULLLLDLRDRDRDDURLURLURLUDRDDRDULULUDDRURRDLLDUURDRDDLRLLURRDLRDDULDLULURDRDLUDRRUUDULLULURRDUDRUUUDRULDLDURLRRUDURLDLRRUURRRURDLUDRLDUDRRUDUURURUDDUUDRDULRDLUDRRRLDRURLLRDDDLUDRDUDURDDDRRDDRRRLLRRDDLDDLRUURRURDLLDRLRRDLLUDRRRURURLRDRLLRLRLRULLRURLDLRRULLRRRDULUUULDRDLLURDDLDLRDRLUUDLLUDDLDRRLDLRUDRUDLLUURLLULURUDUDRLULLUDRURDDLDLDDUDLRDDRRURLRLLUDDUDRUURRURRULDRLDDRLLRRLDDURRDLDULLLURULLLRUURLRRRRUUULRLLLURRLRLRUDRDUUUDUUUDDLULLDLLLLDLDRULDRUUULDDDLURLDLRLULRUDDDDURDDLU
RURLURRDLDULLULDDDLRUULLUURLRUDRUDRRUDDLDDDDRRDLRURLRURLDDDUDDUURRDRULDRRRULRDRDDLRUDULRLURDUUDRRLDLRDRURDLDRRRRDRURUUDDDLLRDRDUDUDUDLLULURULRRLRURUULUULDDDDURULRULLRUDUURLURDUDLUDLUDRLLDUUDUULRLRLUUDRDULDULRURDRRRULRUDLRURDDULUDULLRLRURURUULLULDRURLLRRUUDDUUURRDLURUURULRDRRDDUDULRDDLUDLURURUURDRULLRDDLLRDDLDRDUDRRDLUURRLRLUURRULUDURLDDRLLURRDDDLDDRURULLDDRLUDDLRLURDUDULLRDULLLDLLUDDRUDRUDDUUDRDRULRL
RLRDRDULULUDLUDRDRLUDLDLLUDURULDDDUDLRURLLRLRLDLDRLDURDLRRURLULLULURLLDRRDRLUDRLRDLLULRULURRURURUULRDUDLLRDLRRRRRLUURDRRRDLRUDLLDLLDLRUUUDLLLDDDLRDULLRUUDDRLDDURRRDLRLRLDDDDLRDRULLUURUUDRRLLRLLRDDLLRURRRRDRULRRLLRLLLRLDRRLDDDURRURLDURUURRLRLRLDRURULLRLRUDLDUURDLLRLDLURUUUDLLRDRDDDDDDRLDRRRLRRRRURUDLDDRDLLURUDLRRLDDDLUDUDUULRDULULUDDULUUDLLLLRLDDUUULRLRDULURDURRRURRULURRRDRDLDDURDLURUDURRRDDRLRLUDLUDDLUULLDURLURDDUDDLRUUUDRLLDRURL
ULUDLLUDDULRUURDRURDUDUDLUURDDDRRLUDURURDRURRLDRDURLRLLRRDDRRDRRRUULURUDURUDULRRRRDDLDURRLRRDUDDDRLLLULDRLRLURRDUURDURRRURRDLUDUDDRLDLURRRDDRLLRDRDDRDURRRRLURRLUDDURRULRUDUDULDRUDDRULLUUULDURRRLDRULLURULLRUDLDUDDLDULDLUUDRULULDLLDRULLRUULDUDUUDRLRRLDLUULUDLLDDRLRRDDLLURURDULRRDDRURDRLRLULDLDURULLUUUDURURDLDUDDDDUUULUDLUURRULLDLRLURDLURLRLDDURRLDDRRRDUUULLUULDLLDLLDDRLRRUDLULDRLULDULULRRLRULUUURURUUURDUUDDURLLUDDRLRDDLUURRUULRDLDDRLULUULRDRURLUURDRDUURUDLRR

1992
y2016/resources/3_input.txt Normal file

File diff suppressed because it is too large Load Diff

980
y2016/resources/4_input.txt Normal file
View File

@ -0,0 +1,980 @@
bkwzkqsxq-tovvilokx-nozvyiwoxd-172[fstek]
wifilzof-wbiwifuny-yhachyylcha-526[qrazx]
jvyyvzpcl-jhukf-shivyhavyf-487[zhtsi]
kwvacumz-ozilm-kivlg-kwvbiqvumvb-694[gknyw]
mvhkvbdib-kmjezxodgz-mvwwdo-omvdidib-837[dmvbi]
nzydfxpc-rclop-qwzhpc-lnbftdtetzy-171[cptzd]
vhehkyne-unggr-inkvatlbgz-813[gnehk]
tcorcikpi-hnqygt-octmgvkpi-570[nzewo]
xmtjbzidx-wvnfzo-jkzmvodjin-447[uyzlp]
willimcpy-mwupyhayl-bohn-mufym-734[stjoc]
sbejpbdujwf-cvooz-xpsltipq-961[azfnd]
jchipqat-qphzti-rjhidbtg-htgkxrt-271[thigj]
npmhcargjc-zsllw-pcqcypaf-158[mzwnx]
luxciuwncpy-jfumncw-alumm-qilembij-318[mucil]
bxaxipgn-vgpst-rpcsn-rdpixcv-htgkxrth-427[ywazt]
zekvierkzferc-tyftfcrkv-ivtvzmzex-295[evzfk]
enzcntvat-qlr-hfre-grfgvat-143[rtaef]
mvkccspson-bkllsd-nofovyzwoxd-224[oscdk]
enzcntvat-zvyvgnel-tenqr-pnaql-pbngvat-ratvarrevat-429[zymbs]
nwzekwypera-xwogap-pnwejejc-992[lkiwn]
ajmrxjlcren-ajkkrc-lxwcjrwvnwc-667[ezynd]
bxaxipgn-vgpst-hrpktcvtg-wjci-advxhixrh-661[lytku]
owshgfarwv-vqw-kzahhafy-190[ahwfv]
jqwpihizlwca-moo-twoqabqka-512[ncdyv]
apwmeclga-pyzzgr-rcaflmjmew-886[amceg]
tyepcyletzylw-ojp-wzrtdetnd-951[mxqsy]
dlhwvupglk-kfl-hjxbpzpapvu-773[nrotd]
fab-eqodqf-dmnnuf-bgdotmeuzs-612[dchyk]
qjopwxha-bhksan-skngodkl-940[kahno]
lsyrkjkbnyec-dyz-combod-cmkfoxqob-rexd-bomosfsxq-718[lktzs]
zixppfcfba-bdd-jxohbqfkd-939[sqtor]
vxupkizork-kmm-ktmotkkxotm-852[dsqjh]
excdklvo-mkxni-mykdsxq-nozkbdwoxd-952[zspmc]
bnqqnrhud-eknvdq-sqzhmhmf-391[qhndm]
gzefmnxq-otaoaxmfq-ogefayqd-eqdhuoq-716[zinwb]
qzoggwtwsr-qobrm-ghcfous-428[goqrs]
gpbepvxcv-ltpedcxots-qphzti-steadnbtci-193[ignjy]
hvbizodx-nxvqzibzm-cpio-hvmfzodib-265[hixfe]
wkqxodsm-lexxi-kxkvicsc-926[xkcis]
bknsykmdsfo-myxcewob-qbkno-oqq-zebmrkcsxq-380[utqrz]
lejkrscv-wcfnvi-kirzezex-711[ecikr]
htwwtxnaj-idj-btwpxmtu-255[itgmd]
zsxyfgqj-jll-ijufwyrjsy-931[wrpgt]
iuxxuyobk-yigbktmkx-natz-gtgreyoy-384[ygktx]
qjopwxha-xqjju-zalhkuiajp-628[esmxk]
lxaaxbren-ljwmh-anbnjalq-745[stjqy]
gokzyxsjon-zvkcdsm-qbkcc-dbksxsxq-380[tsyqk]
qzoggwtwsr-qobrm-qcohwbu-rsdofhasbh-168[obhqr]
pelbtravp-pnaql-fgbentr-325[pabel]
xzwrmkbqtm-akidmvomz-pcvb-mvoqvmmzqvo-122[mvoqz]
sbnqbhjoh-ezf-fohjoffsjoh-233[xskyb]
jyddc-yrwxefpi-fewoix-hiwmkr-412[pdekg]
fab-eqodqf-rxaiqd-xmnadmfadk-690[sicjl]
xcitgcpixdcpa-rpcsn-htgkxrth-427[stznv]
rflsjynh-rnqnyfwd-lwfij-jll-xytwflj-229[lfjnw]
zotts-wlsiayhcw-vumeyn-fuvilunils-500[ilsun]
odiih-yujbcrl-pajbb-dbna-cnbcrwp-147[bcadi]
udskkaxawv-tmffq-klgjsyw-996[tmnfc]
emixwvqhml-kpwkwtibm-wxmzibqwva-278[zomvn]
dfcxsqhwzs-dzoghwq-ufogg-zcuwghwqg-116[kmijn]
dwbcjkun-ouxfna-mnbrpw-745[nbuwa]
jchipqat-rwdrdapit-pcpanhxh-973[hglvu]
fkqbokxqflkxi-avb-zlkqxfkjbkq-861[wdnor]
wbhsfbohwcboz-foppwh-qighcasf-gsfjwqs-480[fhswb]
dzczkrip-xiruv-szfyrqriuflj-treup-kvtyefcfxp-451[rfipu]
fmsledevhsyw-fyrrc-eguymwmxmsr-698[yzoxu]
udskkaxawv-jsttal-wfyafwwjafy-840[nlkda]
sno-rdbqds-idkkxadzm-sqzhmhmf-287[lngzc]
crwwv-yxphbq-rpbo-qbpqfkd-341[bpqrw]
odiih-mhn-anjlzdrbrcrxw-563[xadcy]
jyddc-ikk-wlmttmrk-698[lmstk]
buzahisl-wshzapj-nyhzz-klzpnu-149[pjxor]
odkasqzuo-eomhqzsqd-tgzf-ymzmsqyqzf-560[frqmp]
gokzyxsjon-bkllsd-yzobkdsyxc-874[nbtmv]
excdklvo-pvygob-bocokbmr-952[tyzxa]
jvsvymbs-jovjvshal-aljouvsvnf-253[zgtdm]
hafgnoyr-qlr-erfrnepu-637[refna]
pelbtravp-sybjre-fnyrf-299[tjoim]
fodvvlilhg-gbh-vwrudjh-621[hvdgl]
kgjgrypw-epybc-bwc-bcnjmwkclr-678[smijy]
myxcewob-qbkno-mrymyvkdo-dbksxsxq-458[bkmox]
joufsobujpobm-fhh-dpoubjonfou-311[uvksy]
rflsjynh-ojqqdgjfs-ijajqturjsy-697[jqsfr]
vetllbybxw-vtgwr-kxtvjnblbmbhg-709[athym]
ajvyjprwp-ajmrxjlcren-kdwwh-lxwcjrwvnwc-433[qsaxt]
zbytomdsvo-mkxni-mykdsxq-myxdksxwoxd-952[xdmko]
esyfwlau-bwddqtwsf-suimakalagf-684[stvip]
jef-iushuj-fhezusjybu-fbqijys-whqii-huiuqhsx-582[uhijs]
tpspahyf-nyhkl-jovjvshal-bzly-alzapun-565[sdprn]
apwmeclga-hcjjwzcyl-umpiqfmn-132[shfrg]
kwtwznct-jcvvg-lmxizbumvb-148[vbcmt]
rmn-qcapcr-aylbw-umpiqfmn-366[juftv]
sorozgxe-mxgjk-hgyqkz-yzuxgmk-748[xuvst]
bkwzkqsxq-wsvsdkbi-qbkno-mkxni-mykdsxq-yzobkdsyxc-822[ksbqx]
ryexqpqhteki-vbemuh-skijecuh-iuhlysu-842[tszmj]
ikhcxvmbex-wrx-wxlbzg-501[zhqis]
lsyrkjkbnyec-mrymyvkdo-nozvyiwoxd-978[enkfi]
wdjcvuvmyjpn-mvhkvbdib-agjrzm-nojmvbz-395[tcxne]
uwtojhynqj-gfxpjy-fhvznxnynts-567[kqpvs]
iqmbazulqp-pkq-dqoquhuzs-534[ntpuq]
gntmfefwitzx-ojqqdgjfs-ijajqturjsy-385[jfqtg]
sebehvkb-fhezusjybu-zubboruqd-husuylydw-972[ytsim]
nzcczdtgp-nsznzwlep-hzcvdsza-405[yotgu]
joufsobujpobm-fhh-ufdiopmphz-675[tsymn]
cxy-bnlanc-snuuhknjw-anbnjalq-823[nabcj]
shoewudys-rkddo-huiuqhsx-374[dhsuo]
vagreangvbany-rtt-jbexfubc-403[ynepo]
aoubshwq-dzoghwq-ufogg-aobousasbh-714[oabgh]
njmjubsz-hsbef-dipdpmbuf-qvsdibtjoh-805[bdjsf]
zovldbkfz-gbiivybxk-lmboxqflkp-653[nyajo]
yknnkoera-xwogap-hkceopeyo-628[ybmzc]
nij-mywlyn-wbiwifuny-guleyncha-396[nyiwl]
ocipgvke-ecpfa-eqcvkpi-vgejpqnqia-258[jsiqz]
encuukhkgf-hnqygt-vgejpqnqia-882[dxzer]
odiih-ljwmh-anbnjalq-927[ahijl]
fkqbokxqflkxi-zxkav-ixyloxqlov-861[nxgja]
udskkaxawv-xmrrq-uzgugdslw-sfsdqkak-216[msfyx]
owshgfarwv-bwddqtwsf-kzahhafy-216[wafhd]
oaxadrgx-dmnnuf-ruzmzouzs-794[uqhse]
ziuxioqvo-akidmvomz-pcvb-zmikycqaqbqwv-616[iqvmo]
bqvvu-xqjju-opknwca-550[yzhum]
xgjougizobk-lruckx-gtgreyoy-670[nbfmk]
bxaxipgn-vgpst-uadltg-bpgztixcv-323[gptxa]
vcibutulxiom-jfumncw-alumm-nluchcha-448[ucmla]
irgyyolokj-xghhoz-uvkxgzouty-930[ogyhk]
kyelcrga-aylbw-amyrgle-umpiqfmn-782[almye]
jsvagsulanw-xdgowj-kzahhafy-138[dblcm]
ixccb-fkrfrodwh-uhdftxlvlwlrq-881[mblzw]
chnylhuncihuf-mwupyhayl-bohn-guleyncha-422[hnuyc]
irdgrxzex-treup-tfrkzex-uvgrikdvek-165[sjbnk]
xzwrmkbqtm-akidmvomz-pcvb-zmikycqaqbqwv-434[sanut]
ykhknbqh-zua-iwjwcaiajp-524[kjlio]
jlidywncfy-mwupyhayl-bohn-uwkocmcncih-916[cyhnw]
nuatmlmdpage-omzpk-eqdhuoqe-326[ljtsm]
xmrrq-kusnwfywj-zmfl-suimakalagf-684[afmkl]
foadouwbu-qvcqczohs-rsgwub-116[oubcq]
etyyx-bgnbnkzsd-kzanqzsnqx-391[pnmlv]
pinovwgz-wvnfzo-hvmfzodib-291[ovzfi]
qekrixmg-gsrwyqiv-kvehi-fewoix-ywiv-xiwxmrk-828[iwxek]
jqwpihizlwca-xtiabqk-oziaa-kcabwumz-amzdqkm-928[aizkm]
qekrixmg-jpsaiv-stivexmsrw-672[etmsq]
excdklvo-gokzyxsjon-mrymyvkdo-bomosfsxq-562[okmsx]
qczcftiz-pibbm-aobousasbh-532[zynvo]
wbhsfbohwcboz-suu-gsfjwqsg-506[bdhxv]
lxwbdvna-pajmn-ajkkrc-anlnrerwp-563[anrjk]
lsyrkjkbnyec-pvygob-cobfsmoc-900[uyrgf]
cqwdujys-sxesebqju-ixyffydw-374[nyjvi]
odiih-ouxfna-anlnrerwp-433[naior]
rzvkjiduzy-xviyt-xjvodib-vxlpdndodji-993[aousd]
ltpedcxots-qphzti-rjhidbtg-htgkxrt-453[rjlkn]
krxqjijamxdb-kdwwh-fxatbqxy-823[wctav]
froruixo-edvnhw-vwrudjh-829[rdhou]
jvyyvzpcl-jhukf-aljouvsvnf-201[uwkic]
nij-mywlyn-vumeyn-zchuhwcha-266[hnycm]
ydjuhdqjyedqb-zubboruqd-tufbeocudj-244[vmkln]
qlm-pbzobq-mixpqfz-doxpp-mrozexpfkd-575[zswni]
qvbmzvibqwvit-moo-tijwzibwzg-330[ibvwz]
pbeebfvir-fpniratre-uhag-freivprf-949[gvxlm]
wfummczcyx-jfumncw-alumm-uwkocmcncih-890[vturj]
dwbcjkun-npp-cajrwrwp-355[kstqo]
dpssptjwf-cbtlfu-vtfs-uftujoh-441[ftsuj]
vrurcjah-pajmn-npp-anbnjalq-303[tozvd]
wfruflnsl-ojqqdgjfs-xfqjx-775[fjqls]
pbafhzre-tenqr-qlr-qrirybczrag-897[yszub]
sehheiylu-rkddo-udwyduuhydw-322[qbyad]
upq-tfdsfu-cbtlfu-nbobhfnfou-103[vpxyh]
ajvyjprwp-npp-dbna-cnbcrwp-901[stevo]
bkzrrhehdc-bzmcx-bnzshmf-qdrdzqbg-833[msuya]
amlqskcp-epybc-aylbw-rcaflmjmew-730[arbyn]
wbhsfbohwcboz-dzoghwq-ufogg-gozsg-272[gobhw]
ksodcbwnsr-dfcxsqhwzs-gqojsbusf-vibh-obozmgwg-194[rwimn]
mfklstdw-usfvq-hmjuzskafy-424[ulgym]
wfruflnsl-ojqqdgjfs-qfgtwfytwd-177[xbofz]
sedikcuh-whqtu-isqludwuh-xkdj-jhqydydw-218[dhuqw]
ltpedcxots-raphhxuxts-qphzti-advxhixrh-765[jahpi]
zgmfyxypbmsq-djmucp-rcaflmjmew-548[aeoiv]
qspkfdujmf-ezf-nbobhfnfou-207[lnkrt]
fbebmtkr-zktwx-pxtihgbsxw-ietlmbv-zktll-kxlxtkva-943[hajmb]
apwmeclga-hcjjwzcyl-bctcjmnkclr-548[yxnzl]
rflsjynh-kqtbjw-btwpxmtu-177[tbjwf]
kfg-jvtivk-treup-uvgcfpdvek-373[vkefg]
upq-tfdsfu-kfmmzcfbo-nbobhfnfou-285[vsglz]
chnylhuncihuf-mwupyhayl-bohn-xypyfijgyhn-266[pwahm]
apwmeclga-zyqicr-dglylagle-886[lagce]
jlidywncfy-xsy-qilembij-188[uxjts]
jqwpihizlwca-lgm-lmaqov-954[laimq]
qcffcgwjs-foppwh-gozsg-246[fgcop]
bqxnfdmhb-rbzudmfdq-gtms-cdrhfm-287[dmbfh]
gifavtkzcv-wcfnvi-rthlzjzkzfe-763[tmniq]
uqtqbizg-ozilm-kivlg-kwibqvo-tijwzibwzg-720[qndzg]
sxdobxkdsyxkv-mkxni-bomosfsxq-848[zyubw]
qfmcusbwq-foppwh-kcfygvcd-662[cfpqw]
sehheiylu-fbqijys-whqii-skijecuh-iuhlysu-660[kdjyq]
sedikcuh-whqtu-uww-bqrehqjeho-660[dtawl]
veqtekmrk-wgezirkiv-lyrx-eguymwmxmsr-464[emrkg]
lqwhuqdwlrqdo-exqqb-uhdftxlvlwlrq-231[ydznk]
sno-rdbqds-bzmcx-otqbgzrhmf-183[gomah]
ujqgywfau-jsttal-hmjuzskafy-476[lghae]
yrwxefpi-jpsaiv-gsrxemrqirx-100[yazxo]
udglrdfwlyh-exqqb-sxufkdvlqj-569[dlqfu]
ugjjgkanw-uzgugdslw-esjcwlafy-736[rnxjs]
pdjqhwlf-sodvwlf-judvv-orjlvwlfv-673[vldfj]
xekdwvwnzkqo-fahhuxawj-ajcejaanejc-524[ajewc]
pwcvonofrcig-pibbm-fsqswjwbu-766[myazu]
tcrjjzwzvu-wcfnvi-glityrjzex-893[bkuyx]
lugjuacha-wbiwifuny-omyl-nymncha-448[mosph]
ckgvutofkj-inuiurgzk-jkvgxzsktz-228[kguzi]
ydjuhdqjyedqb-sqdto-ijehqwu-868[ozqsj]
sxdobxkdsyxkv-zvkcdsm-qbkcc-myxdksxwoxd-640[xdksc]
odkasqzuo-dmnnuf-dqmocgueufuaz-482[wfbke]
wpuvcdng-tcddkv-wugt-vguvkpi-414[hayjs]
lqwhuqdwlrqdo-edvnhw-uhfhlylqj-439[bjzye]
wpuvcdng-dwppa-ceswkukvkqp-674[mxnkj]
qzlozfhmf-bkzrrhehdc-okzrshb-fqzrr-zbpthrhshnm-365[hrzbf]
raphhxuxts-rpcsn-rdpixcv-rjhidbtg-htgkxrt-635[yozvr]
tfejldvi-xiruv-gcrjkzt-xirjj-tljkfdvi-jvimztv-321[veyxs]
ryexqpqhteki-sxesebqju-iqbui-868[qebar]
eqpuwogt-itcfg-hnqygt-tgegkxkpi-648[ywzjl]
uzfqdzmfuazmx-pkq-bgdotmeuzs-482[zmudf]
sbnqbhjoh-cbtlfu-bdrvjtjujpo-441[taquv]
gokzyxsjon-bkwzkqsxq-lexxi-bomosfsxq-354[xoskq]
oazegyqd-sdmpq-iqmbazulqp-dmnnuf-geqd-fqefuzs-456[qdefm]
dwbcjkun-ljwmh-lxjcrwp-anbnjalq-875[hoynm]
udskkaxawv-eadalsjq-yjsvw-xdgowj-klgjsyw-216[cnwyi]
surmhfwloh-exqqb-sxufkdvlqj-439[tspmq]
ksodcbwnsr-foppwh-zcuwghwqg-402[vopuk]
zsxyfgqj-hmthtqfyj-fhvznxnynts-697[fhnty]
yflexwxoalrp-yxphbq-bkdfkbbofkd-653[jzvpm]
ltpedcxots-tvv-rdcipxcbtci-557[ctdip]
slqryzjc-djmucp-qyjcq-756[cjqyd]
rgndvtcxr-qphzti-bpcpvtbtci-817[tcpbi]
ftzgxmbv-fbebmtkr-zktwx-vtgwr-vhtmbgz-lmhktzx-371[wzxvl]
htqtwkzq-hfsid-yjhmstqtld-463[rxszy]
rwcnawjcrxwju-yujbcrl-pajbb-mnenuxyvnwc-979[gkutb]
gokzyxsjon-tovvilokx-kmaescsdsyx-562[dwlah]
iutyaskx-mxgjk-lruckx-iayzuskx-ykxboik-826[kxiuy]
vhglnfxk-zktwx-yehpxk-hixktmbhgl-891[diznt]
sedikcuh-whqtu-kdijqrbu-sqdto-seqjydw-iuhlysui-790[lksjh]
jyfvnlupj-zjhclunly-obua-vwlyhapvuz-617[pirsw]
iuruxlar-sgmtkzoi-hgyqkz-zkinturume-670[qatsn]
wkqxodsm-mrymyvkdo-mecdywob-cobfsmo-250[hgarm]
odiih-kjbtnc-nwprwnnarwp-381[qpodn]
kfg-jvtivk-tyftfcrkv-kirzezex-373[srcvd]
gcfcnuls-aluxy-zotts-wuhxs-omyl-nymncha-552[clnsu]
xmtjbzidx-zbb-xpnojhzm-nzmqdxz-421[mnkio]
qjopwxha-acc-iwngapejc-160[jimst]
emixwvqhml-kivlg-kwibqvo-aitma-564[qspyb]
nvrgfezqvu-avccpsvre-cfxzjkztj-529[lmnsh]
emixwvqhml-ktiaaqnqml-xtiabqk-oziaa-ikycqaqbqwv-746[ozadu]
zhdsrqlchg-hjj-orjlvwlfv-751[hjlrv]
cybyjqho-whqtu-uww-qsgkyiyjyed-478[szxuo]
clxalrtyr-nsznzwlep-wzrtdetnd-405[lnrtz]
sgmtkzoi-yigbktmkx-natz-rghuxgzuxe-722[gktxz]
hjgbwuladw-tskcwl-sfsdqkak-502[txdsw]
yrwxefpi-hci-vigimzmrk-646[hdmzy]
hqcfqwydw-hqrryj-jusxdebewo-946[qwdeh]
wsvsdkbi-qbkno-cmkfoxqob-rexd-yzobkdsyxc-276[wptxs]
qfmcusbwq-qvcqczohs-zcuwghwqg-870[mnybx]
clxalrtyr-nsznzwlep-cpdplcns-743[rtycz]
fbebmtkr-zktwx-ktuubm-ybgtgvbgz-553[osmdy]
jvuzbtly-nyhkl-yhtwhnpun-jovjvshal-ylzlhyjo-773[hlyjn]
slqryzjc-aylbw-pcacgtgle-782[nxkri]
tfcfiwlc-wcfnvi-wzeretzex-971[smobe]
jef-iushuj-uww-qsgkyiyjyed-556[xzrwq]
crwwv-yxphbq-xkxivpfp-653[pxvwb]
hqcfqwydw-zubboruqd-husuylydw-244[lqeho]
oxmeeuruqp-qss-eqdhuoqe-534[equos]
qxdwpopgsdjh-rgndvtcxr-gpqqxi-gthtpgrw-687[gpdqr]
mybbycsfo-mrymyvkdo-bocokbmr-692[pymza]
myvybpev-oqq-yzobkdsyxc-250[sxytw]
fnjyxwrinm-kdwwh-uxprbcrlb-329[natqu]
aietsrmdih-nippcfier-gsrxemrqirx-958[iremp]
xmrrq-tmffq-vwhdgqewfl-138[fqmrw]
oqnidbshkd-bzmcx-sdbgmnknfx-599[nzdyx]
eqttqukxg-ecpfa-eqcvkpi-ewuvqogt-ugtxkeg-128[mytkp]
nchhg-ntwemz-amzdqkma-252[kmbop]
bjfutsneji-jll-zxjw-yjxynsl-775[ndbsw]
ktwbhtvmbox-lvtoxgzxk-angm-mxvaghehzr-319[ijqxb]
kyelcrga-afmamjyrc-pcqcypaf-210[acyfm]
myxcewob-qbkno-mkxni-oxqsxoobsxq-484[oxbqk]
esyfwlau-vqw-kzahhafy-788[jikae]
oqnidbshkd-eknvdq-btrsnldq-rdquhbd-391[njzml]
qjopwxha-bhksan-opknwca-888[ahkno]
udskkaxawv-jsttal-vwhdgqewfl-190[hqmnt]
excdklvo-lexxi-crszzsxq-458[uavnl]
frqvxphu-judgh-fdqgb-frdwlqj-wudlqlqj-179[bimaq]
iuruxlar-kmm-ykxboiky-852[tijpz]
tyepcyletzylw-mldvpe-lylwjdtd-509[lydet]
frqvxphu-judgh-gbh-whfkqrorjb-101[mhbes]
xqvwdeoh-edvnhw-zrunvkrs-699[zmudw]
irdgrxzex-treup-fgvirkzfej-893[fbsyn]
cxy-bnlanc-ljwmh-orwjwlrwp-771[ngpmz]
eqpuwogt-itcfg-gii-ucngu-388[hzgae]
ikhcxvmbex-cxeeruxtg-wxlbzg-553[mvnfs]
mrxivrexmsrep-fyrrc-asvowlst-854[codsq]
npmhcargjc-aylbw-qcptgacq-366[ditsg]
ftzgxmbv-ietlmbv-zktll-phkdlahi-241[ltbhi]
hqcfqwydw-tou-bewyijysi-270[hnvux]
emixwvqhml-kivlg-abwziom-590[imlvw]
pejji-nio-mecdywob-cobfsmo-926[wrjmp]
bknsykmdsfo-oqq-dbksxsxq-640[naysz]
gifavtkzcv-vxx-tfekrzedvek-789[cnwtp]
kmjezxodgz-diozmivodjivg-agjrzm-xjiovdihzio-915[yqktj]
shoewudys-vbemuh-qsgkyiyjyed-946[nqsjd]
htqtwkzq-ojqqdgjfs-rfwpjynsl-749[hryqo]
rmn-qcapcr-zyqicr-pcacgtgle-340[znstw]
bnqqnrhud-bzmcx-bnmszhmldms-729[yfetv]
surmhfwloh-gbh-rshudwlrqv-725[dsaym]
jchipqat-tvv-itrwcdadvn-505[povhu]
zgmfyxypbmsq-njyqrga-epyqq-rcaflmjmew-340[mqyae]
froruixo-exqqb-pdunhwlqj-283[nmuqd]
lnkfaypeha-xwogap-odellejc-784[ytrsz]
jlidywncfy-xsy-fuvilunils-864[ilyfn]
joufsobujpobm-dipdpmbuf-sftfbsdi-545[rwjnm]
tvsnigxmpi-gerhc-gsexmrk-eguymwmxmsr-932[pivem]
tfejldvi-xiruv-srjbvk-ivjvrity-815[vijrt]
zuv-ykixkz-yigbktmkx-natz-zkinturume-410[kzitu]
enzcntvat-pubpbyngr-qrcyblzrag-117[oywbs]
wsvsdkbi-qbkno-lkcuod-nofovyzwoxd-744[xnuqc]
wbhsfbohwcboz-foppwh-aobousasbh-246[nfsml]
uiovmbqk-jcvvg-abwziom-720[nbqaz]
etaqigpke-fag-fgrnqaogpv-674[gaefp]
ejpanjwpekjwh-nwxxep-hkceopeyo-238[bmscu]
qjopwxha-bhksan-wjwhuoeo-940[xenwh]
etyyx-bzmcx-bnzshmf-qdzbpthrhshnm-729[hbmzn]
uqtqbizg-ozilm-lgm-abwziom-356[tspmz]
excdklvo-mybbycsfo-tovvilokx-psxkxmsxq-874[axwon]
mvydjvxodqz-xviyt-xjvodib-pnzm-oznodib-187[nflym]
ixccb-zhdsrqlchg-edvnhw-xvhu-whvwlqj-465[hcvwd]
qspkfdujmf-votubcmf-tdbwfohfs-ivou-bdrvjtjujpo-181[esuzg]
fkqbokxqflkxi-qlm-pbzobq-bdd-jxohbqfkd-601[dcgym]
mtzslklcozfd-prr-nfdezxpc-dpcgtnp-301[tmnrk]
xekdwvwnzkqo-lhwopey-cnwoo-wymqeoepekj-290[rzsnk]
fubrjhqlf-sodvwlf-judvv-pdqdjhphqw-725[dfhjq]
shoewudys-zubboruqd-skijecuh-iuhlysu-608[ushbd]
zlkprjbo-doxab-zxkav-rpbo-qbpqfkd-679[bkopa]
nzcczdtgp-mldvpe-opawzjxpye-587[tkbms]
apuut-nxvqzibzm-cpio-yzkvmohzio-655[rsozd]
rgllk-ngzzk-ymdwqfuzs-300[yhzxu]
cvabijtm-jcvvg-uiviomumvb-538[ixajz]
oazegyqd-sdmpq-otaoaxmfq-pqbmdfyqzf-248[qadfm]
rtqlgevkng-fag-nqikuvkeu-960[nqdom]
bnknqetk-cxd-cdrhfm-183[mfpwa]
ohmnuvfy-wuhxs-wiuncha-lyuwkocmcncih-552[chunw]
hqtyeqsjylu-jef-iushuj-tou-fkhsxqiydw-296[isfmy]
kwtwznct-kwvacumz-ozilm-jiasmb-uiviomumvb-746[qmjyz]
qfmcusbwq-foppwh-twbobqwbu-298[bwqfo]
ykhknbqh-xqjju-owhao-472[hjtck]
dszphfojd-tdbwfohfs-ivou-mbcpsbupsz-103[sbdfo]
lahxpnwrl-ljwmh-nwprwnnarwp-641[srtpm]
ckgvutofkj-lruckx-jkvruesktz-878[zjlyk]
dyz-combod-zvkcdsm-qbkcc-nocsqx-926[yvute]
ktwbhtvmbox-wrx-nlxk-mxlmbgz-345[lsuwt]
nwilwcejc-nwxxep-zalhkuiajp-186[bznxr]
uzfqdzmfuazmx-otaoaxmfq-bgdotmeuzs-846[mzafo]
oxmeeuruqp-omzpk-oamfuzs-oazfmuzyqzf-352[ypdzg]
zhdsrqlchg-fdqgb-ghsduwphqw-361[hdgqs]
nchhg-jiasmb-amzdqkma-278[qklti]
tfiifjzmv-upv-wzeretzex-295[itvos]
eqttqukxg-ecpfa-ujkrrkpi-830[kepqr]
clotzlnetgp-mldvpe-nzyeltyxpye-145[xfpsy]
mbiyqoxsm-myvybpev-mkxni-mykdsxq-yzobkdsyxc-900[ymxbk]
plolwdub-judgh-vfdyhqjhu-kxqw-vhuylfhv-621[zqwmy]
atyzghrk-vxupkizork-jek-giwaoyozout-228[abrmv]
zotts-xsy-mufym-162[mstyf]
vhehkyne-ktuubm-mktbgbgz-293[qmytr]
kwvacumz-ozilm-zijjqb-ivitgaqa-616[fkoxt]
yaxsnlcrun-ajvyjprwp-snuuhknjw-anlnrerwp-771[zpyld]
raphhxuxts-bpvctixr-eaphixr-vgphh-bpcpvtbtci-115[phtxb]
nuatmlmdpage-odkasqzuo-qss-dqmocgueufuaz-768[umnqw]
yknnkoera-lhwopey-cnwoo-nawymqeoepekj-680[eonkw]
pybgmyargtc-aylbw-qyjcq-886[buzfp]
gzefmnxq-ngzzk-iadwetab-638[zaegn]
sbnqbhjoh-kfmmzcfbo-usbjojoh-129[acdkb]
lxaaxbren-lujbbrornm-ljwmh-lxjcrwp-mnyjacvnwc-355[yzsuk]
nchhg-lgm-nqvivkqvo-200[dystz]
plolwdub-judgh-udeelw-rshudwlrqv-335[sihdt]
wlsiayhcw-vumeyn-lymyulwb-292[zbrux]
ytu-xjhwjy-hfsid-htfynsl-qtlnxynhx-411[adxmu]
wkqxodsm-tovvilokx-ckvoc-822[uhgov]
chnylhuncihuf-vumeyn-nluchcha-500[rcbmn]
tfiifjzmv-lejkrscv-tyftfcrkv-jyzggzex-243[fjtvz]
eqpuwogt-itcfg-tcddkv-tgugctej-310[pyemh]
iuruxlar-xgsvgmotm-pkrrehkgt-xkykgxin-956[btwqp]
shoewudys-sxesebqju-qdqboiyi-894[seqbd]
zlkprjbo-doxab-gbiivybxk-pxibp-861[azyjx]
ckgvutofkj-inuiurgzk-lotgtiotm-982[qszly]
thnulapj-jshzzpmplk-jhukf-vwlyhapvuz-747[hpjlu]
pybgmyargtc-hcjjwzcyl-qcptgacq-782[bxsuc]
xgsvgmotm-vrgyzoi-mxgyy-iutzgotsktz-150[gtmoy]
laffe-yigbktmkx-natz-jkyomt-696[ktafm]
zvyvgnel-tenqr-pubpbyngr-znexrgvat-507[wfjhu]
pelbtravp-pnaql-znantrzrag-403[cbyja]
jqwpihizlwca-akidmvomz-pcvb-apqxxqvo-850[oxymv]
cvabijtm-ntwemz-twoqabqka-954[atbmq]
zixppfcfba-avb-zlkqxfkjbkq-809[zlmjc]
sebehvkb-zubboruqd-tufqhjcudj-556[budeh]
lqwhuqdwlrqdo-fdqgb-ghvljq-621[qdlgh]
qlm-pbzobq-crwwv-zxkav-zlxqfkd-rpbo-qbpqfkd-731[ciyxw]
pwcvonofrcig-gqojsbusf-vibh-qighcasf-gsfjwqs-740[csebm]
mvydjvxodqz-kmjezxodgz-kgvnodx-bmvnn-yzqzgjkhzio-239[zdovg]
kzgwomvqk-xtiabqk-oziaa-tijwzibwzg-564[menyj]
ksodcbwnsr-xszzmpsob-kcfygvcd-454[mbaod]
ejpanjwpekjwh-xwogap-hwxknwpknu-472[wpjkn]
mvydjvxodqz-hvbizodx-wpiit-hvivbzhzio-967[ivzdh]
mvydjvxodqz-mvwwdo-nzmqdxzn-681[jryzk]
enqvbnpgvir-rtt-freivprf-871[lgqrc]
hvbizodx-wpiit-kpmxcvndib-291[dyjmn]
molgbzqfib-mixpqfz-doxpp-xkxivpfp-965[pxfib]
fbebmtkr-zktwx-cxeeruxtg-nlxk-mxlmbgz-137[dckut]
luxciuwncpy-luvvcn-mbcjjcha-500[qsvzt]
apwmeclga-hcjjwzcyl-qyjcq-704[cjalq]
wpuvcdng-eqttqukxg-uecxgpigt-jwpv-cpcnauku-830[ucgpt]
iehepwnu-cnwza-fahhuxawj-pnwejejc-940[ewahj]
pbybeshy-pbeebfvir-pnaql-pbngvat-freivprf-715[uyzwp]
htsxzrjw-lwfij-ojqqdgjfs-zxjw-yjxynsl-957[iyonc]
sxdobxkdsyxkv-wsvsdkbi-qbkno-zvkcdsm-qbkcc-bomosfsxq-536[mbyan]
fruurvlyh-fkrfrodwh-uhdftxlvlwlrq-335[rflhu]
froruixo-hjj-orjlvwlfv-387[uyawn]
myvybpev-lexxi-vklybkdybi-978[ybvei]
chnylhuncihuf-vohhs-xymcah-240[yxnmh]
tagzsrsjvgmk-vqw-vwhsjlewfl-606[svwgj]
zbytomdsvo-lexxi-domrxyvyqi-250[oxydi]
qfkkj-clmmte-opgpwzaxpye-821[pekma]
lgh-kwujwl-udskkaxawv-jsttal-hmjuzskafy-320[axyrm]
irdgrxzex-nvrgfezqvu-avccpsvre-cfxzjkztj-191[sclzh]
mhi-lxvkxm-xzz-etuhktmhkr-319[rcomn]
lhkhszqx-fqzcd-dff-sdbgmnknfx-391[ugevx]
apwmeclga-aylbw-ylyjwqgq-314[izfye]
yflexwxoalrp-zlkprjbo-doxab-ciltbo-qbzeklildv-341[byclp]
cvabijtm-kwzzwaqdm-ntwemz-abwziom-252[rdmvn]
qfkkj-upwwjmply-epnsyzwzrj-899[okhgz]
jxdkbqfz-avb-zlkqxfkjbkq-861[wptxb]
gpsxdprixkt-qphzti-hwxeexcv-947[krgwe]
nij-mywlyn-wuhxs-wiuncha-lymyulwb-968[wylnu]
sbnqbhjoh-kfmmzcfbo-ufdiopmphz-987[bfhmo]
guahyncw-jfumncw-alumm-xyjfisgyhn-500[htamn]
ytu-xjhwjy-jll-ijxnls-879[duthg]
lgh-kwujwl-usfvq-ugslafy-esfsywewfl-944[ilszy]
tvsnigxmpi-tpewxmg-kveww-xiglrspskc-152[gipsw]
joufsobujpobm-cbtlfu-dvtupnfs-tfswjdf-129[fubjo]
rwcnawjcrxwju-bljenwpna-qdwc-mnyuxhvnwc-225[wncja]
qzchnzbshud-okzrshb-fqzrr-rzkdr-989[rzhbd]
qzoggwtwsr-pogysh-rsjszcdasbh-896[sghor]
gzefmnxq-dmnnuf-xmnadmfadk-326[tvuiw]
qzoggwtwsr-pibbm-zopcfohcfm-792[jsmfu]
mvydjvxodqz-xviyt-xjvodib-hvivbzhzio-369[iceny]
wkqxodsm-lkcuod-cdybkqo-224[dkocq]
veqtekmrk-ikk-wxsveki-542[keivm]
zlkprjbo-doxab-yxphbq-pqloxdb-419[ckdtm]
buzahisl-ibuuf-klzpnu-721[stjnm]
hwdtljsnh-kqtbjw-ijajqturjsy-515[plnqy]
luxciuwncpy-jfumncw-alumm-lyuwkocmcncih-474[lqpco]
tinnm-ibghopzs-rms-aobousasbh-506[sboah]
pbeebfvir-rtt-ratvarrevat-403[tdokj]
dmybmsuzs-pkq-efadmsq-300[msdqa]
ujqgywfau-tmffq-dgyaklauk-970[yxmid]
ovbunmneqbhf-enoovg-hfre-grfgvat-481[efgno]
hqfxxnknji-kzeed-uqfxynh-lwfxx-wjhjnansl-957[nxfhj]
plolwdub-judgh-edvnhw-pdqdjhphqw-985[dsxhg]
nwlddtqtpo-awldetn-rcldd-nfdezxpc-dpcgtnp-353[dnptc]
bwx-amkzmb-xzwrmkbqtm-ntwemz-amzdqkma-668[swmnl]
bqxnfdmhb-qzaahs-rdquhbdr-443[bdhqa]
egdytrixat-ide-htrgti-uadltg-steadnbtci-297[zampy]
gsrwyqiv-kvehi-gerhc-gsexmrk-erepcwmw-880[bkwts]
nsyjwsfyntsfq-gfxpjy-jslnsjjwnsl-749[lvzus]
dfcxsqhwzs-pibbm-gvwddwbu-246[dqbem]
mtzslklcozfd-ojp-fdpc-epdetyr-613[dpcef]
gbc-frperg-ohaal-erfrnepu-351[reafg]
gvaaz-cbtlfu-efqbsunfou-311[dvnmz]
ugdgjxmd-tskcwl-umklgewj-kwjnauw-892[wgjku]
iruzfrtkzmv-avccpsvre-nfibjyfg-243[jzoyc]
shoewudys-hqrryj-bqrehqjeho-296[heqrj]
hwdtljsnh-kqtbjw-htsyfnsrjsy-827[dntpc]
zilqwikbqdm-kivlg-uiviomumvb-902[imvbk]
rsvxltspi-sfnigx-wxsveki-984[sixve]
surmhfwloh-gbh-xvhu-whvwlqj-387[hwluv]
ubhatstkwhnl-yehpxk-wxlbzg-137[raqjb]
oknkvcta-itcfg-uecxgpigt-jwpv-ocpcigogpv-596[cgpio]
amjmpdsj-djmucp-nspafyqgle-470[ztpqn]
zixppfcfba-avb-abpfdk-471[abfpc]
owshgfarwv-jsttal-vwkayf-944[smcyx]
vjpwncrl-ljwmh-lxjcrwp-lxwcjrwvnwc-589[irbxq]
qvbmzvibqwvit-ziuxioqvo-lgm-amzdqkma-928[hgfln]
lxuxaodu-kjbtnc-jwjuhbrb-147[bjuxa]
etaqigpke-fag-yqtmujqr-440[qaegt]
zekvierkzferc-irdgrxzex-jtrmvexvi-ylek-rthlzjzkzfe-633[gkyzp]
mfklstdw-hdsklau-yjskk-kwjnauwk-762[vnfzg]
pkl-oaynap-fahhuxawj-oanreyao-706[mdfpn]
hwdtljsnh-hmthtqfyj-rfsfljrjsy-359[sxziu]
fab-eqodqf-ngzzk-bgdotmeuzs-144[kxags]
tagzsrsjvgmk-tskcwl-vwhsjlewfl-424[ejuah]
kzgwomvqk-jiasmb-uizsmbqvo-590[mbiko]
qjopwxha-xqjju-oanreyao-758[ubmon]
hvbizodx-xmtjbzidx-nxvqzibzm-cpio-yzkgjthzio-889[rmyqo]
iuruxlar-kmm-jkvruesktz-644[kruma]
ujqgywfau-jsttal-vwhdgqewfl-710[hbdlx]
jlidywncfy-wuhxs-wiuncha-yhachyylcha-630[hycaw]
lugjuacha-wlsiayhcw-dyffsvyuh-uhufsmcm-890[juefh]
hjgbwuladw-xdgowj-hmjuzskafy-398[wqigl]
yuxufmdk-sdmpq-pkq-etubbuzs-456[wldkg]
vcibutulxiom-dyffsvyuh-qilembij-110[jdnmz]
nzwzcqfw-clmmte-dpcgtnpd-509[cdmnp]
aczupnetwp-nlyoj-nzletyr-zapcletzyd-665[zelnp]
htsxzrjw-lwfij-wfintfhynaj-kqtbjw-knsfshnsl-983[kytzm]
enqvbnpgvir-onfxrg-qrirybczrag-611[rgnbi]
molgbzqfib-ciltbo-xkxivpfp-159[biflo]
plolwdub-judgh-fkrfrodwh-ghyhorsphqw-517[hdorw]
gzefmnxq-omzpk-oazfmuzyqzf-872[zkycu]
qjopwxha-lhwopey-cnwoo-naoawnyd-186[cvyno]
jyfvnlupj-ipvohghykvbz-jovjvshal-ylzlhyjo-435[xlenk]
ajmrxjlcren-kjbtnc-jwjuhbrb-329[klcuz]
wdjcvuvmyjpn-ezggtwzvi-jkzmvodjin-603[gmveh]
muqfedyput-fbqijys-whqii-bqrehqjeho-192[vdlge]
ktfitzbgz-xzz-ftgtzxfxgm-605[izfql]
bknsykmdsfo-oqq-wkbuodsxq-458[stifb]
slqryzjc-hcjjwzcyl-yaosgqgrgml-314[qymir]
gpewwmjmih-veffmx-xvemrmrk-126[itcvu]
rdadguja-gpqqxi-ldgzhwde-297[hnvso]
lxaaxbren-mhn-cnlqwxuxph-251[xvjuz]
xst-wigvix-fewoix-gsrxemrqirx-698[xireg]
iehepwnu-cnwza-zua-wymqeoepekj-108[sdnmj]
oknkvcta-itcfg-rncuvke-itcuu-hkpcpekpi-908[pgfbe]
enqvbnpgvir-ohaal-hfre-grfgvat-351[hsgdf]
ixccb-iorzhu-hqjlqhhulqj-647[hqcij]
apuut-agjrzm-jkzmvodjin-915[jamuz]
hqcfqwydw-rqiauj-ijehqwu-530[qwhij]
vhehkyne-ktwbhtvmbox-lvtoxgzxk-angm-kxvxbobgz-683[tsurp]
gntmfefwitzx-idj-knsfshnsl-723[fnsit]
ajvyjprwp-bljenwpna-qdwc-ujkxajcxah-563[yskxv]
joufsobujpobm-dboez-dpbujoh-mbcpsbupsz-259[bopuj]
xlrypetn-prr-nzyeltyxpye-847[yeprl]
zuv-ykixkz-xgsvgmotm-lruckx-jkvgxzsktz-696[ijlfz]
jqwpihizlwca-moo-lmxtwgumvb-798[nkzsr]
jsvagsulanw-kusnwfywj-zmfl-klgjsyw-736[ectrq]
ykhknbqh-nwxxep-nawymqeoepekj-758[cfvdy]
kzeed-gfxpjy-tujwfyntsx-385[aunmy]
slqryzjc-qaytclecp-fslr-dglylagle-184[lcyae]
laffe-vrgyzoi-mxgyy-iutzgotsktz-410[gtyzf]
gpbepvxcv-hrpktcvtg-wjci-stktadebtci-141[zoqhx]
yaxsnlcrun-lqxlxujcn-mnyuxhvnwc-641[nxclu]
tagzsrsjvgmk-kusnwfywj-zmfl-dstgjslgjq-294[gayon]
kwzzwaqdm-zijjqb-xczkpiaqvo-902[mkgjt]
mfklstdw-usfvq-ugslafy-xafsfuafy-684[fsaul]
zvyvgnel-tenqr-ovbunmneqbhf-sybjre-fgbentr-117[shfce]
emixwvqhml-akidmvomz-pcvb-amzdqkma-720[relbk]
rdggdhxkt-eaphixr-vgphh-hwxeexcv-973[xozyv]
bqvvu-zua-iwngapejc-992[nmdax]
bjfutsneji-kqtbjw-wjxjfwhm-203[irjmx]
bdavqofuxq-nmewqf-abqdmfuaze-976[vgzhc]
vdzonmhydc-okzrshb-fqzrr-rzkdr-313[rzdhk]
sawlkjevaz-oywrajcan-dqjp-wjwhuoeo-836[ajwoe]
fruurvlyh-gbh-sxufkdvlqj-413[kftmo]
fruurvlyh-sodvwlf-judvv-ghsorbphqw-569[tadzk]
sbejpbdujwf-tdbwfohfs-ivou-dpoubjonfou-103[rbqio]
oxmeeuruqp-otaoaxmfq-xasuefuoe-222[ozipy]
rdggdhxkt-qphzti-ejgrwphxcv-921[tusrb]
dkqjcbctfqwu-fag-yqtmujqr-882[kzvuf]
gzefmnxq-dmnnuf-mzmxkeue-248[menfu]
kgjgrypw-epybc-aylbw-kylyeckclr-314[mlvhs]
bwx-amkzmb-akidmvomz-pcvb-abwziom-148[nmtyw]
ckgvutofkj-sorozgxe-mxgjk-xghhoz-xkykgxin-670[gkxoh]
zhdsrqlchg-fkrfrodwh-ghsorbphqw-803[cjybd]
hvbizodx-wvnfzo-adivixdib-603[xwstz]
tvsnigxmpi-gerhc-hitpscqirx-204[icghp]
jrncbavmrq-cynfgvp-tenff-npdhvfvgvba-741[ybszn]
mbiyqoxsm-pvygob-psxkxmsxq-952[mjfnc]
gsrwyqiv-kvehi-veffmx-gywxsqiv-wivzmgi-282[bdrgj]
clxalrtyr-xtwtelcj-rclop-awldetn-rcldd-cpdplcns-847[lcdrt]
ahngzyzqcntr-bzmcx-sdbgmnknfx-287[fmyqt]
zgmfyxypbmsq-aylbw-amyrgle-bctcjmnkclr-340[mybcl]
fydelmwp-prr-nzyeltyxpye-717[gfjxa]
rnqnyfwd-lwfij-rflsjynh-wfggny-xfqjx-931[fnjwy]
zilqwikbqdm-xtiabqk-oziaa-twoqabqka-278[ftonr]
bjfutsneji-gzssd-uzwhmfxnsl-827[sfjnu]
ojk-nzxmzo-pinovwgz-agjrzm-jkzmvodjin-733[zjomn]
ygcrqpkbgf-dcumgv-fgukip-570[vmhxn]
dzczkrip-xiruv-srjbvk-jyzggzex-945[uzneh]
bkzrrhehdc-bzmcx-lzmzfdldms-287[eclvd]
ziuxioqvo-kpwkwtibm-lmxizbumvb-564[txsru]
kzgwomvqk-lgm-lmxizbumvb-122[mbgkl]
htsxzrjw-lwfij-idj-xjwanhjx-463[obdze]
gntmfefwitzx-kqtbjw-wjxjfwhm-749[qzutv]
htsxzrjw-lwfij-jll-tujwfyntsx-671[xugan]
ymszqfuo-rxaiqd-etubbuzs-118[ubqsz]
vdzonmhydc-azrjds-lzqjdshmf-989[dzhjm]
dyz-combod-bkllsd-oxqsxoobsxq-354[nrmkx]
pyknyegle-afmamjyrc-yaosgqgrgml-626[zdlfg]
oxmeeuruqp-vqxxknqmz-oazfmuzyqzf-352[rnsyt]
qjopwxha-xqjju-pnwejejc-654[jepqw]
wifilzof-jfumncw-alumm-xypyfijgyhn-604[fjerw]
vagreangvbany-enoovg-fuvccvat-533[gncot]
avw-zljyla-zjhclunly-obua-thuhnltlua-669[wathd]
ynssr-lvtoxgzxk-angm-mxvaghehzr-345[vopnm]
cvabijtm-uqtqbizg-ozilm-xtiabqk-oziaa-lmdmtwxumvb-928[imabt]
frqvxphu-judgh-sodvwlf-judvv-pdqdjhphqw-751[azovy]
qmpmxevc-kvehi-jyddc-fyrrc-qerekiqirx-282[ygmhv]
fodvvlilhg-udeelw-pdunhwlqj-153[sndmo]
gpsxdprixkt-ytaanqtpc-gthtpgrw-765[tpgar]
cvabijtm-kpwkwtibm-bmkpvwtwog-174[wbkmt]
vetllbybxw-yehpxk-wxlbzg-891[yekxl]
nzwzcqfw-nlyoj-dezclrp-275[zclnw]
qmpmxevc-kvehi-glsgspexi-gsrxemrqirx-828[exgim]
xtwtelcj-rclop-dnlgpyrpc-sfye-hzcvdsza-873[xmpon]
jrncbavmrq-pnaql-jbexfubc-793[bacjn]
ohmnuvfy-yaa-lymyulwb-266[yalmu]
nzwzcqfw-aczupnetwp-awldetn-rcldd-pyrtyppctyr-613[pctwd]
vqr-ugetgv-uecxgpigt-jwpv-rwtejcukpi-752[geptu]
tfcfiwlc-lejkrscv-upv-rthlzjzkzfe-607[tcfns]
hwdtljsnh-uqfxynh-lwfxx-knsfshnsl-229[xtngb]
iuruxlar-igtje-iayzuskx-ykxboik-930[kmghr]
xjgjmapg-ezggtwzvi-hvivbzhzio-421[gzivh]
gpbepvxcv-hrpktcvtg-wjci-hwxeexcv-349[xswrp]
tcorcikpi-eqttqukxg-gii-hkpcpekpi-622[ruxyk]
ygcrqpkbgf-ejqeqncvg-ucngu-440[gcqen]
etyyx-dff-qdbdhuhmf-729[wskto]
tfiifjzmv-upv-vexzevvizex-399[veizf]
houngfgxjuay-sorozgxe-mxgjk-jek-aykx-zkyzotm-566[aimhd]
hcd-gsqfsh-dzoghwq-ufogg-aobousasbh-714[ynfie]
foadouwbu-qobrm-qcohwbu-zopcfohcfm-792[obcfu]
ynukcajey-oywrajcan-dqjp-wjwhuoeo-680[jaowy]
rflsjynh-jll-rfsfljrjsy-489[jlfrs]
vkrhzxgbv-pxtihgbsxw-yehpxk-mktbgbgz-917[igtvy]
hjgbwuladw-tskcwl-dgyaklauk-294[aklwd]
cvabijtm-jcvvg-zmikycqaqbqwv-772[vcqab]
odiih-yujbcrl-pajbb-vjwjpnvnwc-849[jbcin]
tinnm-tzcksf-igsf-hsghwbu-220[bnamt]
pbeebfvir-wryylorna-jbexfubc-637[egouk]
xmtjbzidx-xviyt-yzqzgjkhzio-265[vxsry]
avw-zljyla-zjhclunly-obua-klwhyatlua-201[sjayl]
dfcxsqhwzs-qvcqczohs-fsgsofqv-246[dosrp]
rzvkjiduzy-xviyt-xjvodib-kpmxcvndib-291[cwzla]
gcfcnuls-aluxy-mwupyhayl-bohn-wihnuchgyhn-968[hnuyc]
dyz-combod-lsyrkjkbnyec-bkllsd-domrxyvyqi-328[vtxzd]
fruurvlyh-mhoobehdq-dftxlvlwlrq-907[jlves]
mrxivrexmsrep-gerhc-gsexmrk-tyvglewmrk-152[wzuly]
votubcmf-gmpxfs-pqfsbujpot-883[fpbmo]
bljenwpna-qdwc-anbnjalq-329[lcwmy]
xekdwvwnzkqo-ydkykhwpa-wjwhuoeo-550[toavy]
yhkpvhjapcl-yhiipa-jbzavtly-zlycpjl-201[lpyah]
xjinphzm-bmvyz-wvnfzo-nzmqdxzn-681[ykfxe]
pbeebfvir-rtt-ybtvfgvpf-507[bftve]
gvcskirmg-ikk-hizipstqirx-750[iyquj]
yhwooebeaz-lhwopey-cnwoo-oanreyao-108[tmuag]
wlqqp-jtrmvexvi-ylek-nfibjyfg-581[tnrhf]
tfiifjzmv-avccpsvre-jyzggzex-477[mvnjr]
xjmmjndqz-zbb-yzndbi-811[bzdjm]
qjopwxha-xwogap-nayaerejc-160[isjqz]
qzlozfhmf-azrjds-knfhrshbr-573[dfmys]
vhglnfxk-zktwx-vetllbybxw-vtgwr-vhtmbgz-ybgtgvbgz-761[gbtvl]
etaqigpke-ecpfa-eqcvkpi-cpcnauku-336[eyxtb]
lqwhuqdwlrqdo-fdqgb-frdwlqj-zrunvkrs-933[tvijl]
gvcskirmg-tvsnigxmpi-gerhc-gsexmrk-wlmttmrk-828[szawg]
irdgrxzex-kfg-jvtivk-wcfnvi-jyzggzex-269[givxz]
cqwdujys-sqdto-iqbui-270[siyeh]
bnqqnrhud-bgnbnkzsd-trdq-sdrshmf-807[dnbqr]
rgndvtcxr-hrpktcvtg-wjci-prfjxhxixdc-193[yjsht]
qekrixmg-hci-xvemrmrk-282[mreik]
xcitgcpixdcpa-snt-apqdgpidgn-349[mfywv]
wkqxodsm-pvygob-wkbuodsxq-978[ysamp]
aoubshwq-qvcqczohs-kcfygvcd-558[ytvls]
tyepcyletzylw-qwzhpc-opalcexpye-301[gamdn]
tfcfiwlc-treup-uvjzxe-607[nrthm]
ubhatstkwhnl-lvtoxgzxk-angm-inkvatlbgz-865[tagkl]
wihmogyl-aluxy-yaa-qilembij-890[emvct]
bxaxipgn-vgpst-ltpedcxots-gpqqxi-hidgpvt-245[pgtxi]
jfifqxov-doxab-mixpqfz-doxpp-obpbxoze-107[ghpyi]
gvaaz-dpssptjwf-sbccju-fohjoffsjoh-675[pfzwa]
gzefmnxq-eomhqzsqd-tgzf-efadmsq-378[qefmz]
emixwvqhml-kivlg-zmkmqdqvo-876[dcfin]
fodvvlilhg-fdqgb-frqwdlqphqw-725[qdflg]
laffe-pkrrehkgt-rumoyzoiy-670[dyjut]
egdytrixat-qphzti-tcvxcttgxcv-245[tcxgi]
htqtwkzq-wfintfhynaj-xhfajsljw-mzsy-jslnsjjwnsl-645[eynzi]
vrurcjah-pajmn-npp-mnyuxhvnwc-563[npach]
ejpanjwpekjwh-acc-klanwpekjo-576[jaekp]
kwvacumz-ozilm-kpwkwtibm-uizsmbqvo-876[mikwz]
hjgbwuladw-xdgowj-esfsywewfl-866[byzdm]
pbybeshy-wryylorna-npdhvfvgvba-351[stmxy]
qjopwxha-ywjzu-hkceopeyo-654[tysoa]
lhkhszqx-fqzcd-dff-vnqjrgno-417[fqdhn]
rgllk-otaoaxmfq-fdmuzuzs-768[vkqac]
ohmnuvfy-xsy-omyl-nymncha-214[hmtfs]
enzcntvat-cynfgvp-tenff-nanylfvf-455[cuimh]
sedikcuh-whqtu-sehheiylu-tou-bqrehqjeho-868[ydaux]
tyepcyletzylw-ojp-opalcexpye-145[wciks]
udpsdjlqj-hjj-frqwdlqphqw-309[gbpcz]
eqpuwogt-itcfg-lgnnadgcp-vtckpkpi-388[gpcti]
rkpqxyib-pzxsbkdbo-erkq-zrpqljbo-pbosfzb-133[bpkoq]
kdijqrbu-sxesebqju-tufqhjcudj-114[tdbva]
gsvvswmzi-wgezirkiv-lyrx-irkmriivmrk-412[twsrk]
ucynmlgxcb-qaytclecp-fslr-amlryglkclr-704[lcrya]
xst-wigvix-veffmx-wxsveki-100[ocvmr]
surmhfwloh-vfdyhqjhu-kxqw-frqwdlqphqw-829[hqwfd]
xmrrq-usfvq-esfsywewfl-528[alidm]
zhdsrqlchg-lqwhuqdwlrqdo-sodvwlf-judvv-ghsorbphqw-777[rtnmj]
egdytrixat-xcitgcpixdcpa-rwdrdapit-uxcpcrxcv-245[cdabn]
yrwxefpi-ikk-gywxsqiv-wivzmgi-152[iwgkv]
qcffcgwjs-foppwh-obozmgwg-558[zotsu]
veqtekmrk-gerhc-gsexmrk-hitpscqirx-568[nczdq]
gzefmnxq-pkq-pqbmdfyqzf-794[jxrmh]
eadalsjq-yjsvw-usfvq-ugslafy-ugflsafewfl-632[fsalu]
esyfwlau-usfvq-ugslafy-vwhdgqewfl-684[flsuw]
ktfitzbgz-fbebmtkr-zktwx-utldxm-wxlbzg-683[afwhg]
wihmogyl-aluxy-vohhs-uwkocmcncih-292[wzryd]
bkzrrhehdc-idkkxadzm-lzmzfdldms-677[oxwvn]
clxalrtyr-qwzhpc-lnbftdtetzy-249[zryvn]
rgllk-fab-eqodqf-vqxxknqmz-pqbxakyqzf-222[qfkxa]
xjinphzm-bmvyz-xviyt-mzxzdqdib-603[xnhfs]
htsxzrjw-lwfij-hmthtqfyj-wjfhvznxnynts-385[zreuy]
myvybpev-gokzyxsjon-oqq-nozvyiwoxd-692[iyzuj]
hcd-gsqfsh-pogysh-gvwddwbu-480[mysuk]
hcd-gsqfsh-foppwh-rsgwub-428[kvtfs]
frqvxphu-judgh-exqqb-uhvhdufk-621[wtgmn]
vhglnfxk-zktwx-vahvhetmx-vhgmtbgfxgm-345[hnamj]
tagzsrsjvgmk-usfvq-ugslafy-ugflsafewfl-892[yckbv]
joufsobujpobm-gmpxfs-vtfs-uftujoh-233[foujs]
zsxyfgqj-ojqqdgjfs-zxjw-yjxynsl-593[jqsxy]
bnknqetk-atmmx-qdzbpthrhshnm-131[ecnmt]
hmsdqmzshnmzk-dff-sqzhmhmf-859[dnxcz]
hqtyeqsjylu-tou-udwyduuhydw-348[uydhq]
ktiaaqnqml-kpwkwtibm-zmikycqaqbqwv-772[tlrsg]
nzydfxpc-rclop-mtzslklcozfd-mfyyj-nfdezxpc-dpcgtnp-951[cpdfz]
ckgvutofkj-hatte-gtgreyoy-644[tgeko]
iwcjapey-zua-paydjkhkcu-628[hntmg]
bnknqetk-okzrshb-fqzrr-trdq-sdrshmf-729[tuzoy]
qmpmxevc-kvehi-yrwxefpi-glsgspexi-wlmttmrk-828[hsyvf]
amjmpdsj-njyqrga-epyqq-qcptgacq-106[bhysd]
dwbcjkun-ljwmh-mnyuxhvnwc-641[wuyrz]
gspsvjyp-jpsaiv-hiwmkr-854[zthel]
gsrwyqiv-kvehi-gerhc-stivexmsrw-750[whgse]
xjgjmapg-wpiit-ozxcijgjbt-889[ytsop]
xgjougizobk-kmm-rghuxgzuxe-280[cwrty]
zovldbkfz-oxjmxdfkd-oxyyfq-ixyloxqlov-653[snkwb]
qczcftiz-qvcqczohs-gsfjwqsg-142[cqszf]
krxqjijamxdb-mhn-ldbcxvna-bnaerln-771[ravbt]
pybgmyargtc-bwc-bcqgel-860[bcgya]
wyvqljapsl-jovjvshal-shivyhavyf-773[vahjl]
pbafhzre-tenqr-onfxrg-bcrengvbaf-221[zyaro]
glrcplyrgmlyj-bwc-pcqcypaf-132[clpyg]
dpmpsgvm-dboez-dpbujoh-tfswjdft-545[bdmzf]
dkqjcbctfqwu-rncuvke-itcuu-cpcnauku-700[cuknq]
ajmrxjlcren-yujbcrl-pajbb-anbnjalq-459[yslvg]
oazegyqd-sdmpq-bxmefuo-sdmee-fqotzaxask-586[vfmnu]
ugdgjxmd-jsttal-ksdwk-632[hfjix]
aietsrmdih-gvcskirmg-tpewxmg-kveww-vigimzmrk-412[kfcim]
drxevkzt-jtrmvexvi-ylek-uvgcfpdvek-685[vekdr]
excdklvo-bkllsd-nozvyiwoxd-250[dlokv]
uwtojhynqj-hfsid-wjxjfwhm-281[fqsmx]
plolwdub-judgh-udeelw-uhfhlylqj-205[ludhe]
oqnidbshkd-dff-zmzkxrhr-729[cvlkx]
bknsykmdsfo-tovvilokx-bomosfsxq-328[boqly]
dpotvnfs-hsbef-qspkfdujmf-cvooz-tijqqjoh-961[zmnyi]
gspsvjyp-fyrrc-gsrxemrqirx-490[rsgpx]
gifavtkzcv-szfyrqriuflj-wcfnvi-uvmvcfgdvek-139[zadfj]
gsrwyqiv-kvehi-wgezirkiv-lyrx-wxsveki-490[alpzb]
ykhknbqh-ydkykhwpa-zalhkuiajp-862[khayp]
dmybmsuzs-yuxufmdk-sdmpq-bxmefuo-sdmee-fqotzaxask-586[nwikx]
nwzekwypera-bhksan-nayaerejc-940[xnmta]
wrs-vhfuhw-hjj-zrunvkrs-283[hrjsu]
ajyqqgdgcb-pyzzgr-amlryglkclr-782[lozts]
ohmnuvfy-jfumncw-alumm-womnigyl-mylpcwy-110[mqrgd]
foadouwbu-suu-obozmgwg-792[hgkuj]
wdjcvuvmyjpn-ytz-yzkgjthzio-109[jyztv]
ucynmlgxcb-pyzzgr-qfgnngle-210[iftry]
ymszqfuo-omzpk-oamfuzs-pqhqxabyqzf-872[qzfmo]
clotzlnetgp-ojp-opawzjxpye-769[pnhtz]
mhi-lxvkxm-yehpxk-ftgtzxfxgm-657[etajx]
surmhfwloh-fkrfrodwh-uhfhlylqj-699[rkslj]
iruzfrtkzmv-tyftfcrkv-kirzezex-841[emztq]
bdavqofuxq-nmewqf-ogefayqd-eqdhuoq-352[jpmyv]
bdavqofuxq-otaoaxmfq-xasuefuoe-326[aofqu]
gpsxdprixkt-tvv-ldgzhwde-219[dgptv]
pbeebfvir-rtt-bcrengvbaf-897[enlaq]
jchipqat-gpqqxi-bpgztixcv-375[cnqyt]
glrcplyrgmlyj-qaytclecp-fslr-pcqcypaf-574[clpyr]
pejji-oqq-vyqscdsmc-640[qcjsd]
houngfgxjuay-yigbktmkx-natz-xkykgxin-774[mszcw]
ltpedcxots-jchipqat-gpqqxi-bpcpvtbtci-219[isgfv]
gifavtkzcv-tyftfcrkv-drerxvdvek-659[vbdyz]
vjpwncrl-mhn-orwjwlrwp-641[wrjln]
vjpwncrl-ouxfna-bcxajpn-511[ydzfw]
rzvkjiduzy-xviyt-xjvodib-adivixdib-187[idvxb]
tinnm-suu-twbobqwbu-272[datjf]
apuut-xviyt-vxlpdndodji-941[zrtso]
jxdkbqfz-zixppfcfba-mixpqfz-doxpp-jxohbqfkd-705[fpxbd]
zilqwikbqdm-lgm-kwvbiqvumvb-876[bqpme]
jyddc-wgezirkiv-lyrx-wxsveki-256[sjntv]
ahngzyzqcntr-qzaahs-zbpthrhshnm-963[fzvai]
ksodcbwnsr-qfmcusbwq-suu-qighcasf-gsfjwqs-350[wyezk]
atyzghrk-igtje-iugzotm-jkyomt-462[ksuli]
dwbcjkun-ajmrxjlcren-yujbcrl-pajbb-nwprwnnarwp-563[tjsqg]
aoubshwq-dzoghwq-ufogg-aofyshwbu-896[hwcmz]
apwmeclga-npmhcargjc-njyqrga-epyqq-rpyglgle-340[dgtsc]
apwmeclga-aylbw-amyrgle-dglylagle-210[iumzy]
ydjuhdqjyedqb-rkddo-sedjqydcudj-738[ycbmx]
iuxxuyobk-xgjougizobk-pkrrehkgt-sgtgmksktz-644[pzsmw]
bnmrtldq-fqzcd-bgnbnkzsd-vnqjrgno-521[nbdqg]
wfruflnsl-gzssd-wjhjnansl-177[wtmsg]
yhwooebeaz-ywjzu-klanwpekjo-680[eowaj]
pynffvsvrq-cynfgvp-tenff-ernpdhvfvgvba-663[vbduy]
zilqwikbqdm-ntwemz-uizsmbqvo-356[yhenq]
jvsvymbs-zjhclunly-obua-jvuahputlua-721[uajlv]
fhezusjybu-rqiauj-tufbeocudj-400[ecamb]
ftzgxmbv-wrx-xgzbgxxkbgz-293[xgbzf]
chnylhuncihuf-xsy-xypyfijgyhn-578[jigcy]
vhkkhlbox-pxtihgbsxw-cxeeruxtg-wxlbzg-111[hsuty]
foadouwbu-tzcksf-gozsg-246[ofgsu]
xzwrmkbqtm-moo-nqvivkqvo-434[moqvk]
gvaaz-cvooz-dpoubjonfou-415[mcnzb]
pbafhzre-tenqr-enoovg-grpuabybtl-169[bktjl]
uwtojhynqj-gzssd-ywfnsnsl-723[phguv]
dlhwvupglk-zjhclunly-obua-klwhyatlua-227[luahk]
vhkkhlbox-vhehkyne-vahvhetmx-ybgtgvbgz-215[hvbeg]
qlm-pbzobq-gbiivybxk-lmboxqflkp-809[blqik]
forwcoqhwjs-qvcqczohs-ghcfous-792[mtuqn]
eqpuwogt-itcfg-dwppa-fgrnqaogpv-570[gpafo]
lxuxaodu-bljenwpna-qdwc-jwjuhbrb-121[rbqfd]
ykhknbqh-xqjju-oanreyao-680[ahjkn]
ugfkmewj-yjsvw-hdsklau-yjskk-kzahhafy-918[kahjs]
gbc-frperg-fpniratre-uhag-fnyrf-897[dskta]
myxcewob-qbkno-lexxi-wkxkqowoxd-770[spdoc]
cqwdujys-fbqijys-whqii-huiuqhsx-998[uhebs]
ckgvutofkj-igtje-iugzotm-rghuxgzuxe-774[gutei]
excdklvo-lexxi-psxkxmsxq-302[ypsmx]
mbiyqoxsm-dyz-combod-mkxni-mykdsxq-zebmrkcsxq-692[fnhpz]
zlkprjbo-doxab-gbiivybxk-xkxivpfp-809[ydtxn]
wdjcvuvmyjpn-ezggtwzvi-hvmfzodib-603[vzdgi]
njmjubsz-hsbef-fhh-bobmztjt-649[mxkjw]
wsvsdkbi-qbkno-oqq-ecob-docdsxq-796[rglok]
htsxzrjw-lwfij-gfxpjy-fsfqdxnx-307[uyteb]
wpuvcdng-ejqeqncvg-yqtmujqr-882[svamn]
tagzsrsjvgmk-hdsklau-yjskk-ugflsafewfl-606[tysrn]
kwtwznct-akidmvomz-pcvb-zmamizkp-200[skpom]
dpmpsgvm-dboez-dpbujoh-fohjoffsjoh-311[fknst]
rnqnyfwd-lwfij-hmthtqfyj-xytwflj-567[gzkol]
zntargvp-pnaql-hfre-grfgvat-923[yijbm]
dzczkrip-xiruv-treup-tfrkzex-drerxvdvek-347[vrmsu]
ajyqqgdgcb-afmamjyrc-sqcp-rcqrgle-522[cqagr]
pelbtravp-ohaal-erprvivat-715[jnbmz]
irdgrxzex-sleep-ivrthlzjzkzfe-113[bmsnw]
eqpuwogt-itcfg-tcddkv-fgxgnqrogpv-804[gtcdf]
cvabijtm-moo-ivitgaqa-226[darfu]
ytu-xjhwjy-xhfajsljw-mzsy-zxjw-yjxynsl-281[wzjeb]
fkqbokxqflkxi-yxphbq-obxznrfpfqflk-809[dcasb]
gokzyxsjon-sxdobxkdsyxkv-mkxni-ecob-docdsxq-276[zypso]
ibghopzs-suu-kcfygvcd-402[cgsub]
tfiifjzmv-srjbvk-uvjzxe-581[sovtj]
gntmfefwitzx-gfxpjy-xmnuunsl-619[fnxgm]
lgh-kwujwl-bwddqtwsf-vwhsjlewfl-788[tlejf]
hjgbwuladw-wyy-ghwjslagfk-164[wgahj]
nzwzcqfw-ojp-qtylyntyr-431[ynqtw]
sbejpbdujwf-sbccju-vtfs-uftujoh-909[kujit]
vhkkhlbox-wrx-ftkdxmbgz-241[uwzex]
lahxpnwrl-bljenwpna-qdwc-cajrwrwp-381[yjzno]
lugjuacha-jfumncw-alumm-jolwbumcha-838[uamcj]
gvcskirmg-glsgspexi-jmrergmrk-828[smeyi]
thnulapj-ihzrla-thyrlapun-955[ahlnp]
sno-rdbqds-bzmcx-btrsnldq-rdquhbd-937[dbqrs]
vdzonmhydc-eknvdq-dmfhmddqhmf-781[dmhfn]
iehepwnu-cnwza-xqjju-ykjpwejiajp-368[jepwa]
dfcxsqhwzs-dzoghwq-ufogg-cdsfohwcbg-974[gcdfh]
sbqiiyvyut-tou-jhqydydw-608[okbzs]
htsxzrjw-lwfij-gzssd-uzwhmfxnsl-801[nmtjq]
hvbizodx-rzvkjiduzy-xviyt-yzqzgjkhzio-213[zivyd]
ajmrxjlcren-ljwmh-lxjcrwp-bqryyrwp-745[kheat]
vkppo-shoewudys-tou-udwyduuhydw-556[udowy]
dpotvnfs-hsbef-dmbttjgjfe-gmpxfs-nbslfujoh-363[qapli]
glrcplyrgmlyj-djmucp-qrmpyec-158[clmpr]
emixwvqhml-xtiabqk-oziaa-wxmzibqwva-642[rkpba]
qczcftiz-dzoghwq-ufogg-aofyshwbu-298[lmcuy]
cvabijtm-zilqwikbqdm-akidmvomz-pcvb-nqvivkqvo-746[ynxzo]
pkl-oaynap-acc-wjwhuoeo-134[jxlai]
xjmmjndqz-kgvnodx-bmvnn-rjmfncjk-291[njmdk]
ejpanjwpekjwh-nwxxep-nayaerejc-550[lisvd]
htwwtxnaj-htsxzrjw-lwfij-hfsid-htfynsl-wjfhvznxnynts-541[hntwf]
mbiyqoxsm-mkxni-mykdsxq-crszzsxq-770[zhowm]
rmn-qcapcr-ucynmlgxcb-cee-pcqcypaf-886[cpaem]
rtqlgevkng-ejqeqncvg-fgxgnqrogpv-466[zktns]
fydelmwp-mfyyj-nfdezxpc-dpcgtnp-769[anfej]
yuxufmdk-sdmpq-otaoaxmfq-pqbxakyqzf-742[ohxti]
vxupkizork-igtje-xkgiwaoyozout-592[bmwjf]
veqtekmrk-tvsnigxmpi-gerhc-gsexmrk-gywxsqiv-wivzmgi-802[dglps]
nsyjwsfyntsfq-uqfxynh-lwfxx-ijuqtdrjsy-931[ymnhu]
gifavtkzcv-avccpsvre-fgvirkzfej-841[ypigz]
krxqjijamxdb-kdwwh-mnyjacvnwc-641[krnma]
dszphfojd-ezf-sftfbsdi-805[fdszb]
xmrrq-tmffq-lwuzfgdgyq-372[fqgmr]
tagzsrsjvgmk-xdgowj-vwhsjlewfl-788[gjswl]
lsyrkjkbnyec-mkxni-nofovyzwoxd-614[knoyx]
dwbcjkun-mhn-bjunb-173[mykra]
vhehkyne-vtgwr-nlxk-mxlmbgz-319[eghkl]
bkzrrhehdc-bnqqnrhud-bzmcx-bnzshmf-otqbgzrhmf-677[xaszn]
oxmeeuruqp-bxmefuo-sdmee-abqdmfuaze-248[udtec]
jlidywncfy-mwupyhayl-bohn-uhufsmcm-500[yhmuc]
xjmmjndqz-zbb-mzvxlpdndodji-239[djmzb]
yuxufmdk-sdmpq-omzpk-qzsuzqqduzs-534[ofrpg]
tfejldvi-xiruv-vxx-uvgrikdvek-659[cnesm]
yaxsnlcrun-ajkkrc-anbnjalq-979[nmivs]
tvsnigxmpi-ikk-wivzmgiw-880[agunv]
mrxivrexmsrep-tpewxmg-kveww-viwievgl-698[evwim]
nglmtuex-yehpxk-labiibgz-241[begil]
zuv-ykixkz-ixeumktoi-igtje-iugzotm-aykx-zkyzotm-670[pjybl]
forwcoqhwjs-dzoghwq-ufogg-difqvogwbu-272[xkwoz]
ajyqqgdgcb-qaytclecp-fslr-bcqgel-886[mkvsi]
myxcewob-qbkno-mkxni-mykdsxq-wkbuodsxq-770[zmijb]
uwtojhynqj-kqtbjw-yjhmstqtld-333[jtqhw]
wsvsdkbi-qbkno-lkcuod-dbksxsxq-406[biaoe]
gpbepvxcv-rpcsn-rdpixcv-advxhixrh-895[dcwgp]
muqfedyput-isqludwuh-xkdj-mehaixef-712[betdq]
ckgvutofkj-inuiurgzk-xkgiwaoyozout-956[sazyo]
wfruflnsl-uqfxynh-lwfxx-btwpxmtu-541[fxluw]
qfmcusbwq-rms-igsf-hsghwbu-246[sbfgh]
ynukcajey-nwxxep-qoan-paopejc-602[htmbv]
ujqgywfau-uzgugdslw-jwkwsjuz-138[newms]
yflexwxoalrp-zxkav-cfkxkzfkd-705[ctnsy]
vjpwncrl-lqxlxujcn-mnyuxhvnwc-953[nawmz]
willimcpy-wuhxs-lyuwkocmcncih-786[cilwh]
mtzslklcozfd-clmmte-cpnptgtyr-119[tjkgv]
xlrypetn-awldetn-rcldd-cplnbftdtetzy-795[tdlen]
vkppo-rqiauj-huqsgkyiyjyed-452[yijkp]
vxupkizork-lruckx-jkbkruvsktz-124[eumyz]
diozmivodjivg-agjrzm-nzmqdxzn-915[otpfl]
owshgfarwv-hdsklau-yjskk-klgjsyw-918[qcjim]
zuv-ykixkz-igtje-iugzotm-zkinturume-202[plvqf]
zlilocri-oxyyfq-bkdfkbbofkd-835[bswmn]
ziuxioqvo-lgm-amzdqkma-798[maioq]
xqvwdeoh-sodvwlf-judvv-ghyhorsphqw-517[hvdow]
ovbunmneqbhf-enqvbnpgvir-onfxrg-qrfvta-507[nvbfq]
gbc-frperg-pnaql-genvavat-351[pmzkq]
eadalsjq-yjsvw-jsttal-suimakalagf-580[zjghy]
rdadguja-rpcsn-rdpixcv-apqdgpidgn-245[dpagr]
tbxmlkfwba-pzxsbkdbo-erkq-abpfdk-523[vifrq]
ocipgvke-uecxgpigt-jwpv-ugtxkegu-544[abfsh]
ovbunmneqbhf-zvyvgnel-tenqr-wryylorna-ybtvfgvpf-481[hxymg]
pinovwgz-xjinphzm-bmvyz-agjrzm-ozxcijgjbt-681[cqlnu]
tinnm-qobrm-ghcfous-220[hyczt]
iuruxlar-yigbktmkx-natz-ykxboiky-748[kixya]
bkzrrhehdc-bzmcx-bnzshmf-cdrhfm-209[hbcmr]
gpsxdprixkt-tvv-uxcpcrxcv-973[xcpvr]
forwcoqhwjs-rms-hfowbwbu-974[stzrm]
zovldbkfz-fkqbokxqflkxi-mixpqfz-doxpp-cfkxkzfkd-705[tsmfo]
vetllbybxw-lvtoxgzxk-angm-ftgtzxfxgm-371[sbemy]
hwbba-ejqeqncvg-tgugctej-232[iyrqv]
vqr-ugetgv-lgnnadgcp-wugt-vguvkpi-596[gvunp]
xgvnndadzy-wpiit-yzndbi-343[rawyd]
jxdkbqfz-oxyyfq-qbzeklildv-107[qbdfk]
wlsiayhcw-luvvcn-mufym-656[jbvne]
surmhfwloh-fdqgb-ghvljq-621[ymnve]
mvkccspson-bkllsd-vklybkdybi-432[yscux]
dszphfojd-sbccju-dvtupnfs-tfswjdf-129[itbfs]
lsyrkjkbnyec-lexxi-crszzsxq-978[sxcek]
qlm-pbzobq-mixpqfz-doxpp-zlkqxfkjbkq-211[satyb]
bknsykmdsfo-nio-kmaescsdsyx-744[tspif]
bpvctixr-rpcsn-rjhidbtg-htgkxrt-713[rtbcg]
sebehvkb-rqiauj-udwyduuhydw-140[udbeh]
zhdsrqlchg-fdqgb-hqjlqhhulqj-387[zptrs]
qxdwpopgsdjh-rpcsn-sthxvc-635[nbixj]
pualyuhapvuhs-msvdly-klzpnu-721[ulpah]
sbqiiyvyut-shoewudys-isqludwuh-xkdj-jhqydydw-894[dysuh]
wsvsdkbi-qbkno-lexxi-dbksxsxq-614[onzwh]
ydjuhdqjyedqb-rqiauj-efuhqjyedi-894[ocdpe]
kwzzwaqdm-ntwemz-wxmzibqwva-434[nwzml]
qspkfdujmf-fhh-nbobhfnfou-571[zpyau]
bxaxipgn-vgpst-tvv-detgpixdch-583[xwiac]
qfmcusbwq-dfcxsqhwzs-xszzmpsob-fsqswjwbu-402[lstrx]
dpmpsgvm-dboez-sfdfjwjoh-337[dfjmo]
dzoghwq-ufogg-fsgsofqv-636[gfoqs]
nzwzcqfw-dnlgpyrpc-sfye-qtylyntyr-509[milhd]
xgsvgmotm-pkrrehkgt-vaxingyotm-176[jubcm]
xgsvgmotm-jek-cuxqynuv-644[soxwn]
cxy-bnlanc-lahxpnwrl-kdwwh-fxatbqxy-485[zamhj]
irgyyolokj-inuiurgzk-sgtgmksktz-982[vzkrq]
xgvnndadzy-xcjxjgvoz-xjiovdihzio-733[ozhyu]
gvcskirmg-nippcfier-xiglrspskc-334[bastq]
zlilocri-gbiivybxk-obxznrfpfqflk-367[ntyda]
pyknyegle-pyzzgr-pcqcypaf-886[nxvzy]
zhdsrqlchg-gbh-frqwdlqphqw-361[nqzts]
kyelcrga-cee-yaosgqgrgml-808[izdqr]
hplazytkpo-prr-cpnptgtyr-379[prtya]

598
y2016/resources/6_input.txt Normal file
View File

@ -0,0 +1,598 @@
uzmnhwye
jvyyfmhr
eiwokyzj
rghqvfsx
pqjbfqey
ceqkjgny
kbpuzvof
epyeucto
bqhqvbef
tqduwleg
ysadziyj
onvxrwcl
dwbhjkmx
qvgqewkr
qazepxhd
bqtuexvi
vieyforp
kizhadeh
ofpraxry
xamrsokr
jrrottpf
gweaulph
gyctgzpo
mkddcnuk
llbxmhbt
mghoubct
arhrpksk
hzeshlue
loygkukn
asakqobo
vwvjnarb
pmqcgzkj
soucxjes
szsuqdss
hyjyxtyi
qjsjwjuf
cvkuyeit
qvlmnzih
distpoga
dtlpvlub
fszspsdu
zkpxuozx
yumhqgty
wetfiqij
ozpmcegi
ylpbjbru
rqksydxz
ifayduog
xqlhyrhl
wrolqshx
cliyrafn
jtuerdyy
damyknzr
olbtisgv
sdlvkpjg
tvfvrshv
ugywkitq
idjjqpzc
eeowwemi
npplofdm
ouzjrlph
foawnibc
xcdcepzd
irqsuacz
xtnmuzqp
sgsxsjoj
qhkpbuvq
tsvwtvtz
lgqaycod
adttxkwp
kjcyqgoc
bfkxbgxq
iiszhwbf
cgnihihb
gsgvjypz
lgcgjccw
rdkltabk
wnymgwbv
jdfqdvis
yxtuyupx
nsvafgfo
ztmbgjux
axugvumx
tstqlnye
eeyqirow
ovaityku
cdqyjdkz
vuhkumlu
rwebkmlj
prncgnbt
ftuhvnow
lhmnkhmy
unyaizoz
ezshlifw
bllzrnar
uxblibez
fpkclnns
zqocayvl
umoistgi
skmgbxls
jgtlmsux
nulmpeow
rxeyoiwy
xpqouwhq
ogepecdf
paeqseqk
auntemaj
kyorwfkl
tnvbjicg
xazuvzok
noiksasa
tvgkzpcl
jqzwlyvl
zcbzkese
notfmgol
vceqbfbg
qfeabvhv
hejfluqw
yoxvxdes
pbgiqytr
tntrwezn
duadnppa
nqnwslev
okmdpmyr
eljfthrk
fymbhtes
cdyjpcnd
qmaihzyz
cifmitdm
ksjznrxd
jdcmoqpo
caicyvmw
zhgsnmcv
idxndssh
ppykgzto
hvkjejgz
dezkqhas
ddfpqxfu
zabdhasf
qkhgknfl
gqrzmfdv
lnzrgbwm
wrytspbl
bsjzukak
kfpcoyua
zzbpiifh
ygrhxtug
zedbugkr
sienwiyq
vpophmnv
kvrgegtp
azpkkojs
jgwlwtjo
azwbmxgy
wblpgwvu
jwkustki
fmjixbct
ghkclypp
erczaojx
iqmhmlkf
yfqnajza
vhpadprc
hjicylfh
mwbavklg
txhtbhbm
pufqjjei
zazwoxia
yhzexooi
vuqtvkuv
mppianmz
tscbvqrg
hajzaamg
urqizitm
ircgrvlo
jgzcpbjo
erpiqxlw
xvnqbjqc
xauztetw
bcytezdp
sqwrbgjb
tinldoyz
rdkbfbew
kkpmcqid
fjiztfcy
ybdoeafy
burdrehw
uyredvvm
bwvobekv
fniozvjr
ifaoxink
zaoujdun
bykdovxw
wasdjrzy
uxokzwlb
votizlio
leoxtnlc
ymcesetp
mibahaht
ldgfbbar
aaegvpyn
etgdecrd
cbqerkil
myldihga
aycsmksz
sbdprnva
ytlllxsq
shxuxktj
otxymese
hygjpofa
lozdcvfn
ulrvezsj
elflfepx
xtyqbbaz
wombapna
uesqfrfo
amagopph
tdipmqwo
qlfhnwxp
qycwncct
haofnvsq
bwiyooof
fdftgidb
xzntthfa
ouzddcqt
fywssrae
ywmmvhut
gphtugjk
qxfymjuh
dbnxhxac
mvwunqfa
tfrrjcnr
lycvubak
pfxofasn
xiacctnn
vrlncgrn
wjkeqsav
vskxlpkf
iaknsppj
kzexhdzd
jesglqmn
lkqtzgzd
wnwksqbf
htqrcgyq
jjynwudx
lawnwevw
cfewlcwu
ledcrfvq
zlfpilwv
jckvhaly
xhggozqd
hrnuxzwq
ajominjf
bkoaxnil
zcjslwqq
vgexcqtl
ddfannml
ufbfceuh
vuibklnx
tmrtgqxx
izxwfael
njtzahxu
bzwyyycr
ggxoqbvo
oysvzvoi
ejxxjhjl
unwkfzyr
nwycafcu
lfqieudu
natvibge
qzrnpxew
mqjbtpmh
ixdsjywf
nmilafsn
tfwubeot
ccmrtlfs
uajfiusi
jhinkyxm
qwcvvimb
wlbhjanf
vdcedtkw
uiibfsbh
hkgxmybs
lsqlrxll
ihvodcrb
ewrfalkm
kelnqkcd
vroxnjwh
jeneowpg
ozivuper
fxatuncj
dchmobvr
oyxqiszo
uuyxgshp
sxcbjmhu
dorsqxgt
urygoghb
lolotlqh
ytaalnkv
bcspchnq
wbdululm
vzqwkjix
hinyyoag
qkyqkdit
lolhbfkp
zlwjxdoa
yudtkctc
xcvazkiu
ttvfuzxr
rqfrdkcm
rihwltdh
qcpjwsjz
bazpmmmx
grxiwhag
cbljykhx
weooldcv
lumfsfwj
kiunrfgy
fafbvyjx
acpzgmgh
pdyhmtvq
ssismufm
pdlzydrn
sxxbtkqi
gnuxwgui
wcuguqju
jkjkdkph
prpmfknq
csuabssx
khymlrkm
muavohgo
sqgzadar
svzwomsw
zfscsyyh
rhuwuqij
otxcyjya
ftecgqvj
nbdrbipz
sppapkeb
xxysrbxg
pkvvzfwx
mpadytha
iqbdgpwm
aqisvbnk
ipckdhwl
rkivzxzk
tkiykice
jmpfxvqq
shrwhvwl
uxlgxmgf
nhjjylml
ujvjqgao
yekgzrqv
ujbnxfya
pmtovthi
hsazctam
hhmesojw
vgxomjtg
ucudhxze
kzgkdvlj
vtjkjgrj
fticzjct
dwulyubi
fyfiwbkt
orcuggcq
kvxqcwfz
vvjeoumv
xsyobzop
iszghxbl
kxxvtiuf
klwsferz
emzmpfvt
gnsxgbib
nnrmtcdj
qqnfngkm
lkdxvyxe
vkeaswre
kfvpnnpd
mozumbpg
omwjojxc
sjmkijsk
fivvusjy
esmktnbm
mbkizlzq
mscagsvf
twpwpsbj
okwrcirc
hcexoyjh
tzhxxmkr
zfhzgnoe
soldpmdf
ejikyuba
cudjzzmg
xfwpcilo
vpjqpuyk
oprtpooj
djzadomw
shuqtulp
rlspstxi
gxbfmsqv
qoojsatd
rvupwphy
zfgqbrwb
ninnufxt
annvdtct
phwyfyjt
qxwfsujq
bwrbuwxs
ihwlqjbr
zylvjunv
bmmsjzxk
rvfidswe
fjgovnmk
mogllpfx
ddsefzqd
wrssovrq
yaqhesmy
cvvcswup
kpmipygw
xrjtbhze
nqucxgea
kpbbhdhz
fhdsgcdm
pmjidvmk
szbhczpa
tchjtqzu
qzorzcpu
mfnvijyy
wuutyddc
ysupoemc
dunwqmbn
mocewxzi
qiwracmo
rmbbhvud
cltnmdiy
ruutdaeo
wihpnryn
mgajpkys
iahfwmuw
vuocxwiu
mbygminp
kmkjaead
hxnztxbh
flnxmtbj
nkbrfcqg
blkvlojl
ppdielzk
ssclzhip
qvvymayo
cthwrgfx
rjqdlnep
hccjexgw
cbclqcga
cxjjdgvu
puthjawq
gvvzvjac
wtxxtwef
retdqdpn
hifhvrbd
jctkaclz
bftzisge
wofmrtss
fvojyyar
cbnhtlqp
jqozxhny
ybgsemfv
ooaqxove
gqvrbkqy
ppdcrmte
clfxucnu
toenbwtd
jzmywsup
inqsaqid
aehpaztz
gragbfrw
dlrjyzmu
sblqqwsb
gzruigwt
aplpzlui
wmrpyrjm
xyxwaeog
bhkpwzvo
egdpnujd
hbbdjlws
mbphcthb
bykhifcd
rrwkidpm
iztrhfnf
nydlpqze
dgulsfzt
eludirwj
iyvbrttp
aerocrzf
ejaearsc
dxruknqe
zmhbnkls
qnsykqvu
gotmslog
nbprjbxc
gtlykrzb
egethaib
flomperi
xcamglue
zceleqek
cnvgfdwf
dchfyogi
ygtzquvk
xxxunqji
amqehkhx
lsacrdtm
ybnapfyu
aiukmmqc
pepgjpqa
uermcxac
kapeodph
ozdanagr
pdjfzxdb
ioospvis
uhxuoyrd
jnnlwvdv
gnxaqkly
zsiucnpt
gtveajfy
tudfnxqg
pwugrcdu
obeeyadl
yhybzygs
enbwkfwn
iiziwmrj
rmldlsrp
wfqifmcn
aehofonk
bvxavoez
fwelvohr
eviaivqh
yjwslphn
wjdocdoc
dqgiuhli
geinepsk
npaemvap
ngnqfbvw
pobgwlhb
zufxdrkb
ggfdeuts
defhitoc
ndzvtils
oysmqhnq
tdmsbwqi
wwfvshad
btkerpuz
gwqvhvto
nflozwyk
tbiexdrg
okshetxm
mbgrhojh
eluzaxsb
hwqtiqwr
yrsddclj
wrsfnbdb
klfmnoqq
ztmkgmgg
xnkrekxs
qmdwfeuo
jwzfwhkv
nxjlnbiy
vdhnrrxi
smgjcxcp
aphleuvc
ljbadhdn
jkbnkinm
mjtovsxa
xpjsorxu
gicuerdc
azrhkarl
hpgwlzge
bweruitv
vnoglwep
pjwqtqdb
myvyrjye
xiqzlwfn
zqpnhjnn
hkzycpkb
fmoryqng
dfembrgo
dvguwian
rwgwffsn
ixgfpslt
rkxnxyff
ljankcms
kksozyit
cncygufc
agsevmlz
ectijrxs
rhvtaplx
hxddxhda
mpvfoaim
rtxkcevq
qythgaev
lnhqdrzc

20
y2016/src/bin/d1.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2016::days::d1;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/1_input.txt")).unwrap();
println!("{}", d1::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/1_input.txt")).unwrap();
println!("{}", d1::process_part2(&content));
}

20
y2016/src/bin/d2.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2016::days::d2;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/2_input.txt")).unwrap();
println!("{}", d2::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/2_input.txt")).unwrap();
println!("{}", d2::process_part2(&content));
}

20
y2016/src/bin/d3.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2016::days::d3;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/3_input.txt")).unwrap();
println!("{}", d3::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/3_input.txt")).unwrap();
println!("{}", d3::process_part2(&content));
}

20
y2016/src/bin/d4.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2016::days::d4;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/4_input.txt")).unwrap();
println!("{}", d4::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/4_input.txt")).unwrap();
println!("{}", d4::process_part2(&content));
}

14
y2016/src/bin/d5.rs Normal file
View File

@ -0,0 +1,14 @@
use y2016::days::d5;
fn main() {
part1();
part2();
}
fn part1() {
println!("{}", d5::process_part1("ojvtpuvg"));
}
fn part2() {
println!("{}", d5::process_part2("ojvtpuvg"));
}

20
y2016/src/bin/d6.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2016::days::d6;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/6_input.txt")).unwrap();
println!("{}", d6::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/6_input.txt")).unwrap();
println!("{}", d6::process_part2(&content));
}

105
y2016/src/days/d1.rs Normal file
View File

@ -0,0 +1,105 @@
use core::panic;
use std::collections::{HashMap, HashSet};
#[derive(Clone, Copy, Hash, PartialEq, Eq)]
enum Orientation {
North,
East,
South,
West,
}
impl Orientation {
fn turn(&mut self, direction: &str) {
match direction {
"R" => match self {
Orientation::North => *self = Self::East,
Orientation::East => *self = Self::South,
Orientation::South => *self = Self::West,
Orientation::West => *self = Self::North,
},
"L" => match self {
Orientation::North => *self = Self::West,
Orientation::West => *self = Self::South,
Orientation::South => *self = Self::East,
Orientation::East => *self = Self::North,
},
_ => panic!("Wrong direction. Only R and L allowed"),
}
}
}
pub fn process_part1(input: &str) -> i32 {
let mut orientation = Orientation::North;
let mut movements = HashMap::new();
let mut input = input.to_string();
input.pop();
for movement in input.split(", ") {
let (direction, blocks) = movement.split_at(1);
orientation.turn(direction);
let blocks = blocks.parse::<i32>().unwrap();
movements
.entry(orientation)
.and_modify(|distance| *distance += blocks)
.or_insert(blocks);
}
let up = movements.get(&Orientation::North).unwrap_or(&0);
let down = movements.get(&Orientation::South).unwrap_or(&0);
let left = movements.get(&Orientation::West).unwrap_or(&0);
let right = movements.get(&Orientation::East).unwrap_or(&0);
(up - down).abs() + (left - right).abs()
}
pub fn process_part2(input: &str) -> i32 {
let mut orientation = Orientation::North;
let mut visited_coords = HashSet::new();
let mut horizontal: i32 = 0;
let mut vertical: i32 = 0;
let mut input = input.to_string();
input.pop();
for movement in input.split(", ") {
let (direction, blocks) = movement.split_at(1);
orientation.turn(direction);
let blocks = blocks.parse::<i32>().unwrap();
for _block in 1..=blocks {
match orientation {
Orientation::North => vertical += 1,
Orientation::South => vertical -= 1,
Orientation::East => horizontal += 1,
Orientation::West => horizontal -= 1,
}
if visited_coords.contains(&(horizontal, vertical)) {
return horizontal.abs() + vertical.abs();
} else {
visited_coords.insert((horizontal, vertical));
}
}
}
panic!("Did not find easter bunny hq");
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT1: &str = "R2, L3 ";
const INPUT2: &str = "R2, R2, R2 ";
const INPUT3: &str = "R5, L5, R5, R3 ";
const INPUT4: &str = "R8, R4, R4, R8 ";
#[test]
fn part1() {
let result = process_part1(INPUT1);
assert_eq!(result, 5);
let result = process_part1(INPUT2);
assert_eq!(result, 2);
let result = process_part1(INPUT3);
assert_eq!(result, 12);
}
#[test]
fn part2() {
let result = process_part2(INPUT4);
assert_eq!(result, 4);
}
}

133
y2016/src/days/d2.rs Normal file
View File

@ -0,0 +1,133 @@
use core::panic;
pub fn process_part1(input: &str) -> String {
let mut position = (0, 0);
input
.lines()
.map(|line| {
for char in line.chars() {
match char {
'U' => {
if position.1 != -1 {
position.1 -= 1;
}
}
'D' => {
if position.1 != 1 {
position.1 += 1;
}
}
'L' => {
if position.0 != -1 {
position.0 -= 1;
}
}
'R' => {
if position.0 != 1 {
position.0 += 1;
}
}
_ => panic!("Unknown direction {char}"),
}
}
key_from_position(position)
})
.collect::<Vec<String>>()
.join("")
}
fn key_from_position(position: (i32, i32)) -> String {
match position {
(-1, -1) => "1",
(0, -1) => "2",
(1, -1) => "3",
(-1, 0) => "4",
(0, 0) => "5",
(1, 0) => "6",
(-1, 1) => "7",
(0, 1) => "8",
(1, 1) => "9",
(_, _) => panic!("No key at position {}, {}", position.0, position.1),
}
.to_string()
}
pub fn process_part2(input: &str) -> String {
let mut position: (i32, i32) = (-2, 0);
input
.lines()
.map(|line| {
for char in line.chars() {
let v_bound = 2 - position.0.abs();
let h_bound = 2 - position.1.abs();
match char {
'U' => {
if position.1 > -v_bound {
position.1 -= 1;
}
}
'D' => {
if position.1 < v_bound {
position.1 += 1;
}
}
'L' => {
if position.0 > -h_bound {
position.0 -= 1;
}
}
'R' => {
if position.0 < h_bound {
position.0 += 1;
}
}
_ => panic!("Unknown direction {char}"),
}
}
key_from_position_p2(position)
})
.collect::<Vec<String>>()
.join("")
}
fn key_from_position_p2(position: (i32, i32)) -> String {
match position {
(0, -2) => "1",
(-1, -1) => "2",
(0, -1) => "3",
(1, -1) => "4",
(-2, 0) => "5",
(-1, 0) => "6",
(0, 0) => "7",
(1, 0) => "8",
(2, 0) => "9",
(-1, 1) => "A",
(0, 1) => "B",
(1, 1) => "C",
(0, 2) => "D",
(_, _) => panic!("No key at position {}, {}", position.0, position.1),
}
.to_string()
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "ULL
RRDDD
LURDL
UUUUD";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, "1985".to_string());
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, "5DB3".to_string());
}
}

60
y2016/src/days/d3.rs Normal file
View File

@ -0,0 +1,60 @@
pub fn process_part1(input: &str) -> i32 {
input
.lines()
.map(|line| {
let sides = line
.split_whitespace()
.map(|side| side.parse::<u32>().unwrap())
.collect::<Vec<u32>>();
if sides[0] + sides[1] > sides[2]
&& sides[0] + sides[2] > sides[1]
&& sides[1] + sides[2] > sides[0]
{
return 1;
}
0
})
.sum()
}
pub fn process_part2(input: &str) -> u32 {
input
.lines()
.map(|line| {
line.split_whitespace()
.map(|side| side.parse::<u32>().unwrap())
.collect::<Vec<u32>>()
})
.collect::<Vec<Vec<u32>>>()
.chunks(3)
.map(|line_triple| {
(0..3)
.map(|triangle_idx| {
if line_triple[0][triangle_idx] + line_triple[1][triangle_idx]
> line_triple[2][triangle_idx]
&& line_triple[0][triangle_idx] + line_triple[2][triangle_idx]
> line_triple[1][triangle_idx]
&& line_triple[1][triangle_idx] + line_triple[2][triangle_idx]
> line_triple[0][triangle_idx]
{
return 1;
}
0
})
.sum::<u32>()
})
.sum()
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = " 5 10 25";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 0);
}
}

119
y2016/src/days/d4.rs Normal file
View File

@ -0,0 +1,119 @@
use std::collections::HashMap;
pub fn process_part1(input: &str) -> u32 {
input
.lines()
.map(|line| {
let name = get_name(line);
let id = get_id(line);
let checksum = get_checksum(line);
let stats = get_freq_and_position(&name);
let mut sorted_stats = stats.into_iter().collect::<Vec<(char, i32)>>();
sorted_stats.sort_by(|(a, a_freq), (b, b_freq)| match b_freq.cmp(a_freq) {
std::cmp::Ordering::Less => std::cmp::Ordering::Less,
std::cmp::Ordering::Greater => std::cmp::Ordering::Greater,
std::cmp::Ordering::Equal => a.cmp(b),
});
for (char, _stats) in sorted_stats.into_iter().take(5) {
if !checksum.contains(char) {
return 0;
}
}
id
})
.sum()
}
pub fn process_part2(input: &str) -> String {
input
.lines()
.filter(|line| {
let name = get_name(line);
let checksum = get_checksum(line);
let stats = get_freq_and_position(&name);
let mut sorted_stats = stats.into_iter().collect::<Vec<(char, i32)>>();
sorted_stats.sort_by(|(a, a_freq), (b, b_freq)| match b_freq.cmp(a_freq) {
std::cmp::Ordering::Less => std::cmp::Ordering::Less,
std::cmp::Ordering::Greater => std::cmp::Ordering::Greater,
std::cmp::Ordering::Equal => a.cmp(b),
});
for (char, _stats) in sorted_stats.into_iter().take(5) {
if !checksum.contains(char) {
return false;
}
}
true
})
.map(|line| {
let name = get_name(line);
let id = get_id(line);
format!("{}: {id}", rot(&name, id))
})
.collect::<Vec<String>>()
.join("\n")
}
fn rot(name: &str, count: u32) -> String {
let mut decrypted = Vec::new();
for &byte in name.as_bytes() {
if byte == b'-' {
decrypted.push(b' ');
continue;
}
let shift = (byte - b'a') as u32 + count;
decrypted.push((shift % 26) as u8 + b'a');
}
String::from_utf8(decrypted).unwrap()
}
fn get_name(room: &str) -> String {
room.rsplit_once("-").unwrap().0.to_string()
}
fn get_id(room: &str) -> u32 {
let id_start = room.rfind("-").unwrap() + 1;
let id_end = room.find("[").unwrap();
room[id_start..id_end].parse().unwrap()
}
fn get_checksum(room: &str) -> String {
let id_start = room.find("[").unwrap() + 1;
room[id_start..room.len() - 1].to_string()
}
fn get_freq_and_position(name: &str) -> HashMap<char, i32> {
let mut freq = HashMap::new();
for char in name.chars() {
if char == '-' {
continue;
}
freq.entry(char)
.and_modify(|count| {
*count += 1;
})
.or_insert(1);
}
freq
}
#[cfg(test)]
mod tests {
use super::{rot, *};
const INPUT: &str = "aaaaa-bbb-z-y-x-123[abxyz]
a-b-c-d-e-f-g-h-987[abcde]
not-a-real-room-404[oarel]
totally-real-room-200[decoy]";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 1514);
}
#[test]
fn part2() {
let res = rot("qzmt-zixmtkozy-ivhz", 343);
assert_eq!(res, "very encrypted name".to_string());
}
}

83
y2016/src/days/d5.rs Normal file
View File

@ -0,0 +1,83 @@
use std::io::{stdout, Write};
pub fn process_part1(input: &str) -> String {
let mut password = String::new();
let mut n = 0;
let mut col = 1;
print!("________");
loop {
let hash = md5::compute(format!("{input}{n}"));
let hash = format!("{hash:x}");
let mut chars = hash.chars().skip(5);
let char = chars.next().unwrap();
print!("\x1b[{col}G{char}");
if hash.split_at(5).0 == "00000" {
col += 1;
password.push(char);
}
if password.len() == 8 {
println!();
return password;
}
n += 1;
}
}
pub fn process_part2(input: &str) -> String {
let mut password = vec!['_'; 8];
let mut n = 0;
print!("________");
loop {
if !password.contains(&'_') {
println!();
return password.into_iter().collect();
}
let hash = md5::compute(format!("{input}{n}"));
let hash = format!("{hash:x}");
if hash.split_at(5).0 == "00000" {
let mut chars = hash.chars().skip(5);
let position = match chars.next().unwrap().to_digit(10) {
Some(position) => {
if position > 7 {
n += 1;
continue;
}
if password[position as usize] != '_' {
n += 1;
continue;
}
position
}
None => {
n += 1;
continue;
}
};
let char = chars.next().unwrap();
print!("\x1b[{}G{char}", position + 1);
//println!("{}", password.clone().into_iter().collect::<String>());
let _ = stdout().flush();
password[position as usize] = char;
}
n += 1;
}
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "abc";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, "18f47a30".to_string());
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, "05ace8e3".to_string());
}
}

73
y2016/src/days/d6.rs Normal file
View File

@ -0,0 +1,73 @@
use std::collections::HashMap;
pub fn process_part1(input: &str) -> String {
let line_len = input.find("\n").unwrap();
let mut rows: Vec<HashMap<char, u32>> = vec![HashMap::new(); line_len];
input.lines().for_each(|line| {
for (idx, chara) in line.chars().enumerate() {
rows[idx]
.entry(chara)
.and_modify(|count| *count += 1)
.or_insert(1);
}
});
let mut res = String::new();
for row in rows {
let most_common = row.iter().max_by(|a, b| a.1.cmp(b.1)).unwrap().0;
res.push(*most_common);
}
res
}
pub fn process_part2(input: &str) -> String {
let line_len = input.find("\n").unwrap();
let mut rows: Vec<HashMap<char, u32>> = vec![HashMap::new(); line_len];
input.lines().for_each(|line| {
for (idx, chara) in line.chars().enumerate() {
rows[idx]
.entry(chara)
.and_modify(|count| *count += 1)
.or_insert(1);
}
});
let mut res = String::new();
for row in rows {
let most_common = row.iter().max_by(|a, b| b.1.cmp(a.1)).unwrap().0;
res.push(*most_common);
}
res
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "eedadn
drvtee
eandsr
raavrd
atevrs
tsrnev
sdttsa
rasrtv
nssdts
ntnada
svetve
tesnvt
vntsnd
vrdear
dvrsen
enarar";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, *"easter");
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, *"advent");
}
}

11
y2016/src/days/mod.rs Normal file
View File

@ -0,0 +1,11 @@
pub mod d1;
pub mod d2;
pub mod d3;
pub mod d4;
pub mod d5;
pub mod d6;

View File

@ -1 +1 @@
pub mod days;

View File

@ -4,3 +4,6 @@ version = "0.1.0"
edition = "2021"
[dependencies]
regex = "1.11.1"
utils = { workspace = true }
itertools = { workspace = true }

View File

@ -0,0 +1,41 @@
21056789894321015012980123498787601045687
32346543765601156703474544567896012138796
10107632659892349821563678989345643029655
23218101256781015430412101071234754910544
14569870345432016321003012560109867801033
05678963256789127879854303456078105932122
18723450109898038910765210010563254541001
69011201298788945125898998323454569679852
78760345345654876034787677401235378089760
89456896012503876965014586512765432123601
32387987003412965872123298703890101984512
01291876121101234989456107654965278854603
00180145030980325678327890217874369763254
14343232145671013454310691307893454610169
23432165430110302169234582456732108905678
96547078923231231078105673454321097214523
87678432214348940987017894765870986341014
96589541009857654320123765891963475498765
01434630111766789010432143210452560167876
32345721210951999016549054789301001456965
21076890129810878321678945643219812332109
78789001234723765430321238756106734323458
09654160345654210389210109987005125010767
12323271657601345678780125678014056541893
25414987798542343456690034329123987932012
56905677810439652987501145016510345801101
67856298923128721987432156987421256789210
22347107654098910876543087870330107654301
11298231012347654305678898981278798987652
00109545691056763211219767874569678690343
12065456783345894320105656913450569541289
43874321092132101899234541002321256632176
54930010561001234788765432211056746789045
67821123472390545654123101347849839874330
78934010589487698763034567456931028765221
67785697696590101672105698741022210540100
58696788787781234589789789012013307632101
49545459810170301075674654323454458989032
30432365923965432165463210498569567976543
21021876854876523678354112347678678875301
30010966763987014589210001456565589765432

View File

@ -0,0 +1,6 @@
$ mul(402,190))&<why(211,617)how()/;mul(506,313)[^^<!$#when(636,198),]mul(744,268)#&!what()&!;mul(631,641)where()@select()!@?(:;how()mul(25,288)&~^select()mul(683,657)'mul(505,315)+~:-mul(671,741)]{mul(397,54))?mul(511,935)where()select()where()-mul(525,623)mul(206,770){/}don't()from()mul(260,967)-how() -/[^(mul(500,994)!:mul(391,833)#)>who(),where(376,378)why();$mul(394,346)%:]^from()>:mul(130,944)who()>where()select()}:mul(952,439)?/how()from()^$why()do()@*{mul(557,916)&(who()mul(445,933):(,;>?mul(108,268)don't()select(574,441)-mul(132,870)from(){mul(441,660)why(),from();mul(919,820):#/%)why()*mul(194,790);#/^#select()?mul(981,514)$what(796,873)when() %from()mul(164,772):&:select()@mul(396,80)select()what()%),) mul(213,928){?who();@@mul(320,229)where(348,623)*when()when(180,565)mul(214,912)!mul(848,738)from()+):^how()-&[mul(378,433)select():%~mul(696,421)mul(364,341)?^don't()*&mul(89,441)how()select()what(),select()mul(423,822),?&(how()']what())$mul(21,844)&,select()/>^)'mul(469,230))when()where()*,#mul(569,594)why()what():{ select(200,250){())mul(661,628)#)why()from(325,19)who() mul(758,985){%&where()!how(213,616)*mul(394,768)mul(831,12)*where()>who(986,151)mul(962,504)$:<!)where()%$&when()mul(900,577)<>^[>;mul(948,363)$@;]mul(857,273) how() ,:!select(),[mul(31,766)} *mul(372,138)+,#!~(>;%mul(774,958)#}&+why()*when()mul(560,137)}mul(72,718)when()^{]':{how()/mul(985,120)@*[do()$how()mul(891,69)select()mul(546,834)@$mul(767,879)$$!/&why()?mul(876,495){^/&)who()<~]mul(911,71){?#mul(116,462);:%<^'?}~why()mul(258,286)from()^#^?how()&who()mul(97,540)select()who()do(){^~~<why(955,532)@[ how()mul(682,75)~){?where()<mul(63,26)-where()^ <^mul(336,475)&when()mul(637,386)+*when()<^]mul(846,915)!mul(795,805)$what()[~#*@:/@mul(370,651)?$select()^how()}!mul(705,839)~*;%!^+why()do()!:)[#{mul(112,21)*mul(285,252)mul(451,396){&> )'mul(57,589)when()**mul(554,575)*+^mul(856,360)mul(530,200)@/&}*where()mul(588,2)who()$]mul(604,72)who()}from(524,212)mul(250,680)<;@;@how()?#mul(555,956)%(;:+<{(who()select()mul(377,822)+when()@[&{&from();*mul(457,538)mul(52,298)who()%when()%who()how()from(9,264)mul(452,941)where()+?,-don't()when()select()<mul(956,185)^}don't(){$/~how()][ #)mul(717,593,when(64,768):what()%(mul(922,407)#why(646,569)$(~:{#mul(3,438)+/#<*select())how()don't()!where();mul(853,725)%?}/!from()<?*mul!+>$''mul(229,512){{from()what()?!'^select()mul(185,787)<*mul(688,834) @@what(),}select()>mul(825,27))~&!;mul(796,378)*+(-select(); mul!):{!;who()$how()why()don't()select()how(451,129)]#*^mul(852,354)[mul(596,889)mul(476,207):#what()-+mul(467,323) from()why()}(}^&:mul(955,498)]{;mul(797,177)mul(321,350):mul(784,667)mul(707,927)~%#why()why()what();mul(515,511)from(589,691)mul*&[mul(884,558)/mul(824,926))+from(331,316)where()!*!:mul(938,881)]mul(287,358what()@from(226,364)+:^)-when(361,935)select()mul(324,887)@where()select())(mul(430>&][mul(381,417)}*why()why()!*#~mul(729,14)>%what()'where(){}mul(483,820)when(206,921)&when()@how()mul(608,185)how(5,376)%mul(150,182)><when()@:@mul(953,86)mul(332,881)*mul(688,895)^<select()!%<+mul(5,990)>]/!( (+mul(78,588)what()@ why()when()*+from();;mul(837,417)who()mul(786,516)'how()%:~;%]who()<mul(576,960),@why()<<+'mul(160,572)*why()where()-when(353,689){[;mul(634,920)mul(482,207)( (when()<>:;-mul(917,130)
why();[what()(,]mul(177,501)mul(346,27)when(428,856)who(){how()mul(513,432)what()']&where(),>?select(),do()+how()![where()mul(399,972)mul(862,828)when()?^&)mul(200,579)how()who()mul(79,535) <don't()<mul(450,265@/!mul(332,269)/select()why()-mul(436,976)&;$#-;^)what(878,202)mul(114,418}-~<! ,who()mul(394,75)<from()mul(51,262)from()#what()^*don't()%mul(133,6)mul(63,773)$%; ';@^what()!mul(142,703)where(178,667)}/(don't()how()mul(451,569)-~mul(395,265)+@>{select(684,626)){where()?)mul(52,852)&< @what()^what()]mul(807,491)&#@mul(130,14)<what()who():@mul(195,735)]when()<how()where()$,how()where()mul(310,933);[<$)mul(479,998),from()/where()@mul(583,819);select()}+$when()*mul(100,443)/$)mul(300,699)select()# #what()?:(^mul(824,627)#>mul(884,328)when()%who(255,459)mul(434,697)?how(),,*)#mul(522,208) !&/mul(296,945)-~!what()when(),,%mul(127[mul(637,905)~from()/where()/where()mul(375,117)(<;select()how():!^{mul(856from()][from()}&when(331,921)mul(873,410)'@/mul(777,739>when()!^!)mul(460,138)!'{why()<~/<mul(820,107)/<(*;& mul(887,760)/mul(701,198)+@@,{ where():mul(108,795)why()]#&don't()#+where()mul(491,644)mul(148,474)!mul(216,458)<,when()[(#mul(205^from()]@(where()?@mul(808,178)!@from();~%:]})mul(807,17)>when()when()+:(what()@)mul(97,8)mul(324,169)select()mul(396,755)!#select()^&#];when()don't()$where()/^{~{how()mul(856,118)$*who()who()#when()mul(683,431)/mul(946,398)mul(902,742)(mul(448,592)'mul(750,527)]/mul(98,232*,select()(!~/<{mul(104,754)^mul(959,509) '$~@/do()when(642,16);what() <#(+!mul(564,313)$]'mul(945from()*]!who()[%who()'*#don't()<![select()where(387,153)mul(283,666)mul(323,423)what()}where(552,799)@#what()mul(897,782)&why();where()[$#!select(){mul(965,10)?$mul(515,710)why(),!?*:mul(442,335)&<who(526,485)who()!)when():%>mul(410,907)@what()select()select()?mul(21,969)mul(942,472)' what() ?select()why()^do() /$-who()::mul(36,303)~mul(783,530)'$what()$:%?mul(74,743);~^;>do()who()who()>}mul(391@^mul(681,793)where()%!-,mul(171,461)![<<&don't()+mul(707,127)^?mul(641,578)where()how()what()what(89,960)}(]mul(431,871)mul,+mul(610,323)<why()what()mul(343,108)'mul(902,793)[where(661,90)#who())?#![}mul(535,881)mul(782,524)select()>why()why()mul(662,436)'&[^mul(397%from()>*why()%-mul(186,254)?*]!who()!select(839,279)<mul(518,739)}from()don't()(where()how()} who()~mul(394,539)^why()where()+?from()(mul(32,988)]mul(459,826)};mul(95,871)?&{select()&/;mul(626,919) '++{;from()mul(161,733),#%mul(662,339)* +mul(246,943)where()#what()what(){+,;,who()mul(555,251)what()what()%(mul(374,548)>]+select()mul(84,228)[mul(536,784)where()+*how()mul(893,249;what()(mul(917,825)mul&mul(891,755))${,#@@mul(511,464)what()where()'when()mul:who()mul(730,485)][,mul(592,512)[why(52,524),*]@select()(mul(829})' *~- [)mul(111,611)how(838,283)+#{>when()?who(764,939)from()mul(925,978)[*#who(182,485)how()select()mul(538,803)>&where()how()$what() }{mul(671,684)/why(106,337)+<#(mul(453,150)++[--from(475,981)where()&{mul(197,568) &;/mulwhy()~(@*who()/!#mul(466,89)'why(594,849)(select()( mul(30,648)what()from()(select()mul(829,947)mul(903,174),-,@select()from()select()mul(462,421)&when()!when()^%;),mul(631,703)mul(917,971)mul(473,892) don't(){/~>,why()[*mul(800,49)when()why()>%)*who())]mul(571,734)<(mul(283,803)~mul(752,111)why(); %<,(where()'&mul(393,613)mul(257,15)&mul(14,159)]mul(502,324)what()how()when(294,303)-%:when()mul(542,760)>}why(),how()mul(726,492)mul(169,827)^: ^~[ mul(859how()#how()))%@mul(564,652) mul(403,8)~mul(507,846)
!!{[){mul(470,989)#mul(58,989+who()?*{! [mul(498,119)%~{mul(206,173)who()from()how()}%^*;how()@mul(154,721){~mul(451,125)<-mul(386,969)!<:mul(890,369)!*{+]-,where()when()when()mul(657,994)]why():mul(898,340) how()(#who()<mul(352,838)[%)who()?how():&when(173,843)mul(21,663)how()&]^}-^>where()mul(502,23) mul(681,55$( ,mul(807,634)&${what()~what()mul(176,10)'(what()why()@~]mul(564,162)!%select()mul(526,996)!-mul(993,991)/'!?mul(118,854)?~-?mul(74,965)who())-({when()select()]mul(913,115)/[who()where()when()<%!mul, ]~#/ mul(990,573)&from()^}%$mul(226,132)mul(431,657)[who())where(690,880)',- ,mul(21,346)what()how(298,600)-mul(174,190)mul(755,197)who(){>&$what()from(853,522)mul(560,222)what()$when()[mul(933)from(881,714)[when()#~(]{mul(67,261)!mul(775,385)don't()[who()how() where()/mul(381,343)do()<}$%;<>how()'mul(460,761)(mul(83,660)[where()mul(539,808'&select()*don't()(mul(274,997)mul(274,981)}/#who()[]mul(414,738){$do()&<?:what()&why()%who()mul(638,411)&[?don't()when()+ ?> mul(672,195)'}<<mul(772,21)>@[&;select()mul(90,631) $*mul(869,108)^$+:([&#!mul(801when()~}mul(827,339)who(851,624)%&why()'when()'mul(586,599)+:'/>when()[!mul(139,133)*'!$){#~?mul(565,566)mul(618,83)+mul(765,263)why()/+how()#'{how(521,404) !mul(344,377)/select(536,767)@why()-why()'where()why(468,917)mul(302,909){:mul(632,525)from()>who()(@who()mul(383,809)<>select();when();select()who()?<do()$*mul(597,59)when()/(}mul(79,440)$mul(565,850){[how()where()mul(368,953):*}from();!,-mul(767,182)what()from()$why()when()%/&mul(410,122)%!-mul(246,726)$when()%mul(343,179) {-?why()mul(816,33),:;%#;$mul(340,519(mul(858,204)select()@!:mul(739,205)why();*]/'select()mul(891,670)]why(5,493)how()[?when(519,92)when()mul(790,933)/**>'>where()select()mul(142,6)*:(>'mul(963,13),don't() how()when()/'*mul(18,872)'mul(465,102)(#+mul(590,510! from()mul(133,919)}[,from()from() (mul(820,448)[mul(442,548)mul(977,871)}who()+select()who()mul(606,74)^:)mul>!mul(129,889)/+mul(310,726)who()from()*what()mul(49,487)/)where()]:mul(615,825)}}don't()mul(266,421)}don't()(how();select(908,869)+how()where()mul(56,163)mul(288,896)mul(872^mul(391,531)$mul(152,112)'^,from()mul(889,862)mul(562,569)^ *{';when()!(mul(236,30)>]-why()]what(83,46)when()/>how()mul(634,71)?,?{^?mul(438,21)what()mul(993,470){<[when()where()from()mul(190,720)/%where()@mul(339,904why()where()mul(123,502);) /mul(178,842)how()mul(737,234) !mul(985,241)**?~-mul(349,197)<[mul(22,535)&(&why()mul(460,416)when()&do()[how()when(), mul(250,415how()@-%*:who()*mul(181,581):@mul(353,992)*when()what()mul(247,102)where()?why(607,695)#don't()?when()from()%@<mul(624,872)+select()-^mul(589,215)mul(626,138)mul(726,746)>)from()where()mul(738,410)!where(808,172),;:*'mul/^(#mul(545,174)^:when()-$^'mul(670,694(why(117,443):mul(12,180);'@what()mul(314,309)mul(790,161)&what()where(620,466)&who()[-]*where()mul(147,178)why()^][}'~$mul(441,381){ mul(138,111)<+) <mul(795,46)mul(207,817)why()mul(360,197)?,,where()!$select()mul(908,513)'when()*&,~{:don't()mul(976,931)}$]/select()@>what()[mul(842,241):(from()how()$:mul(329,926)don't()-@$-from(245,221)]+mul(161,472):/how()mul(178,909)mul(729,950)>]mul(310,170)mul(868,180)}mul(685,89)}what(690,794)!who()!mul(670,698']>~mul(464,132)-when(827,257)?)when()#/?when()#!/usr/bin/perlfrom()--{where())what()(mul(54,26)
@)+mul(601,827)from()how()]'how()[where()how()]]mul(943,407)what()/why()}}mul(516,728)<-+ why() ?'mul(651,195)who(472,480)select()^{}/]mul(159,449)#{select()]>why(457,182)mul(889,383)mul(717,768)~>{select()from()~@{>'mul(25,532#}who())mul(582,481)where()>$?) !mul(232,573)mul(27,868)^~from()#where()do()how()>mul(24,375)'!;,,mul(34,942)?-mul(511,814)<:{{how()}{what()mul(369,392)mul(643,828)mul(12,913)from()~select(){ +$$mul(384,257){who()!{$ )#/!mul(607,455)how()*(( /-+::mul(747,552)mul(333,364)how()*?select(914,438)% ~,mul(257,957)do()where(){+#mul(85,930)when()^'<~^/ mul(538,737)?,%what()*-^ where()mul(959,252)mul(435,422)#where()mulwhere()mul(634,612),}{select(863,784){[do()who()}*+mul(842,759),#what());[}why(616,35)%mul(631,814);where()/)mul(768,481)>{!)>who()who()select()how()mul(432,507)&)!>{%>(mul:$?(?~@ }mul(60,211)what()what()*what()when()+];mul(960,9)- ~'mul(678]+&!mul(252,399)what()?:?} !@>[mul(510,368)mul(674,905)how()/why()^mul(763,579)mul(771,675)mul(565,944)'who(345,580)#<where(248,141)from()don't()when()who()#from()>~<mul(708,226)$select(856,127),[mul(669,13)mul(228,509)} why()mul(665,556)<]$:])@^<when()mul(820,340) mul(430,345)from()who()<why()#>!who()mul(349,192)[mul(673@#+/mul(623,920)&^where()}#who()mul(331from()$'+from()mul(906,455)select()mul(969,326)where()[$(how()[/;/-mul(342,396)>how()[*mul(319,806)~#mul(374,571)who()mul(767,564)%:-[-;@)mul(724,513)%{[$~mul(559,103)mul(495,144)who()<<why()who();)~mul(966,554)+[]select()>mul(485,851)(mul(935,69)from()mul(745,465)select();/^mul(788,539)}:/+from()select()^/~mul(385,82)mul(939,676)#!%how(){who()?mul(481,330)+[ mul(542,441)%when()!^?select()when()select()$-mul(385,342)?who()how(),who()mul(394,223)@<$@-%%&:#mul(197,885){select()when()+)when():select()[mul(753,360)why()(>;!(mul(91,833*$#mul(979,895)where()@>mul(372,24)%*mul(189,679)mul(97,308)who()>mul(657,601)->*; #&)-mul(906,401) from()(what()mul(808,51)[<{when()mul(723,974)!'@)$^who():mul(947,448)mul(440,545)'<?mul(172,802)where()mul(716,119);when())do()])where()(#where()>who()]mul(319,32)<#select(232,786)select(91,643)what()where()mul(728,960){do())^ })mul(525,770))who(),;why() #&{why()mul(695,142)@]+ )[$&*mul(558,127)how()why(),<,&how()^>!mul(126,171):)}]&don't()^'how()+*^where()where()@mul(331,359) */do()what()):why();where()>mul(715,122)when()(when()from();,)}^$don't()/where()/^mul(242,204)how()mul(910when()what()[,]/&don't()-!how()who()who();from()}where()mul(353,405)where()from()what()who()mul(562,824)mul(333,11)mul(842,629)#}+$^mul(778,805)>mul(806,747)when()!^mul(741,908)why()where()mul(110,482)>&$?mul(579,772)@}select()-mul(636,907)(mul(526,945)-(from()(*what()how():mul(166,764)?'?#mul(246how()#{mul(476,49)*:who()who():,what()-+mul(477,38)&?{;>/mul(544,656),select()*what();what(394,396)[ ?&mul(514,32){^select()@select():#]%mul(964,815)mul(562,410);when();*mul(944,789)~/^$~$-mul(750,209)* ;;how()mul(487,591);?<mul(230,18)mul(380,386),-{,@select()^mul(949,615)!how(900,63)what()+mul(557,379)]@when()] :*(:~mul(423,189)where();:when()}{[ [*mul(844,661)mul(631,480)$mul(484,570)mul(761,125~#)*@~mul(286,807)mul(715,248)&<*,'{)mul(513,214)-what(531,549)*@$where()$#) mul(420,876)*what()!mul(177,619)select()< mul(819,380)?how(): <:';mul(263,636)
[}[%*:mul(763,577)}<<[],@mul(416,291)}<{how()[who()):@mul(80,21)mul(147,560)who()@',what()mul(9,445)]!mul(797,562)%[$-who()mul(128,286)from(){;:mul(331,938)*why()'-[what()mul(159,223)-*where()<who(619,345)-,mul(684,152)who()mul(433,596){mul(793,372)<from(54,483)[select()[where(629,864)mul(935,16)mul(204,768)!mul(864,108)from()don't() }$mul(147,548)^mul(827,996)mul(420,422)how()what()mul(61,127)@&<'^+^>mul(245,365)[[!@),{@mul(651,974)} /<mul(333,723)+mul(198,582)mul(631,8)what(),what()]!who()how()what()<mul(21,630)where()&]~:[mul(358,326)from()+from()mul(372,505)-:do()#?what()where()mul(351,931)>]%why()&mul(809,5~*/&&why()>mul(571,244)where()#why()}what()mul(518,122)+mul(579,300)'/select(898,768)>%][$(don't(){[mul(361,809)>[>&];why()why();mul(294,704)mul(331,74)}mul(694,47)]/-mul(399,272)when()mul(104,924)when()what(347,469)>from()~^mul(642,304)when()<what(){>?why()?mul(429,733)select()#&(}&mul(125,283)select()][who():[ mul(136,666)? when()where()%what()>/how()mul(570,389):]~who()+@!}mul(713,887)?{}select()'mul(98,67)&when()do()when()>mul(536,7)*when()) !'mul(884,110)@#')mul(201,681)from()^,do()'why()#]<why()'(;+mul(593,332)]mul(180,819)/@mul(902,212)-mul(90,446)~];select()why(100,859)!don't()-'mul(893,69),}][from()don't()+(~why())mul(86,991)mul(590,379)how()mul(405,424)?:#>from()! don't()when()how()mul(420,456)%?,'mul(385?select()mul(916,632)]mul)mul(908,719)$*@ <when() <$where()mul(539,350)(+why()# +select()select()mul(405,412)'!>({/{^<when(442,660)mul(143,163) who()why()mul(140,644)mul(250,287))mul#'-when()select()how()+/$mul(822,187)mul(888,819)!<select(908,31)[$/mul(212,723)who()&]mul(372,211)mul(854,457)&;where()??}-+/mul(198,967)from()mul(669,611):what(364,527)*);[select()^)/mul(62,603)-+@mul(215,373))mul(765,970)mul(218,4)^] mul(482,465)how()$^,];from()'mul(677,699)#mul(856,173)#mul(816,115)!mul(647,891)from();<[!select()-how()mul(726,735)who(),#who()how()mul(44,988@++!~mul(298,848): /]where()^where()why()who()mul(2,969)mulwhen(779,246)where(){when()how()>how()<mul(595,699)when(){why()from()mul(270,688)^select()*!~'<}-mul(324,127)(select()-mul(354,982)]+from()&#>?!mul(980,215)>what()where()@?why()-?mul(614,656)mul(220,163)?why()how()mul(355,585)%;mul(419,411)mul(184,742)$what()>;don't()],'$(select()mul(736}when(),mul(626,880)who()*<how();*]%(mul(676,2))+%who() how()-%+<mul(366?((how()>,;mul(765,856)<<>why()mul(553,221)^!>$who();mul(813,625)>]* how()do()]<;$<@where()select(774,55);!mul(496,557)#<>,!>)what()mul(222,55)from()who()]',what()/;where()where()mul(136,746)>(don't()]mul(970,908)select()^@)'%mul(237,672):+<@<%%-}mul(498,420)who(839,971)&select()mul(937,73)$&&from()do()mul(996,665)&where()where()%,#mul(143,849)?from(913,546)*{?([&mul(134,708)why()[,'how(166,502)select()#&mul[-mul(205,222)}select()]}( why()@(+mul(898,124?*how()@select()mul(616,898)where(705,139)]@mul(155,570)who() -$,{&mul(89,802)!+who()$do()&~]%>?{ >mul(676,57)< <from()!((*&mul(91,478)]mul(105,40)when()]'how(669,25)mul(346,548)]]]'when()>mul(738,600):mul(918,629)['when()~where()from()!;:>mul(161,824)what())from()mul(600,436)~{]what()select()!+&%/mul(996,979)}}who()] $+$mul(206,328)$^)@@/,when()}%mul(130,592)when()select()%mul(50,834)';*@when()mul(73,823)mul(865,121)
,^:mul(71,583)mul(316,791)from()when(){&->why()mul(495,908)@}*where(),how()%mul(645,82how(830,734)who()[mul(398,188)(%where()&do(){)from()from()who()mul(221,419)<:]$^'^)from()mul)mul(693,760)#how()>^why()why()[,'why(370,828)mul(516,571)where(425,351)<,>)mul(661,792{))$~-what())who()#[mul(325,165)[$where()%^*]who()+/mul(346,3)do()-@when() when()>+#*mul(698~ mul(248,163)/~]#{from()*mul(57,514)mul(871,508)[mul(498,284)from()who()select()when(277,99)*select()*mul(840,612)%mul(897,30)#</}^(do()<+select()@where()$when();#-mul(405,945)#why(433,827)>/mul(346,138)select()how()?)mul(354,691)?]what()don't();?;when(244,299)who();when()>mul(224,179)%]mul(50,319):mul(34,718)when()^:+where()from()'from()}mul(943,652)+/why()*why()#%don't() when()#'>+*>mul(231,697%how(175,144)mul(507,740)+~where() :from()mul(755,156)/%$)*+(who(212,81)>mul(927,385)#()do()mul(80,489):*,select()%&%where() mul(911,455who()}mul(651,799)~-why()+*mul(202,247);+%^:<mul(854,23){@#mul(961,171)where()!-mul(128,126)%%~#what()@mul(473,221)$do(){ !,&from(188,13)&!:where()mul(153,592)%select(112,432)where()mul(639,252)%]}$do()mul(504,573)how()mul(150,892)?who()+-why()%[}where()mul(602,833))-mul(53,697)%where(); /<where()$<mul(270,818)?how()}mul(185,555)/>mul(940,746),#from()when()mulwho()mul(701,602)mul(183,908)how()mul(12,827)][})how(){~when()$mul(332,704)^)when()when()mul(936,771)#where()/who()who();from()$# do()%where(){^ mul(953,541)mul(207,683),how()~%mul(336,694)why()>@<do()mul(783,475)~@mul(500,657)> *!?[from()@mul(924,686)*)%! / )why()[mul(493,198)when()>;<$how()$(]>do()(?~(!&^select()%mul(355,72)}how()~why()why()what()~'mul(936,935)&{what(803,472)from()]<who()@who()mul(17,105)where()^select()^&[<mul(869,268)what(){mul(135,402) {where()mul(732,550)where()don't()@~mul(240,194)why()~#how()mul(412,850)!$>@ ,do()@why()*why()[mul(149,595)}]mul(867,291)~&)'%<mul(330,855)(<how()%mul(712,568)(why()@when()where()~mul(913,542)$/ mul(370,272)]from()>@where()>from(455,831)%mul(646,518)% mul(522,755)];'who()from()select();what()'%mul(555,59)(how()'?[!@do():@{mul(729,27)when()]'*,/,why()where()mul(949,316)how()^who(84,611)[?:#mul(931,532)<% [where()select()@%%mul(383,846)$why()~{/+(@mul(325,437)who()>],select()#;when()%mul(601,128)<!mul(783,128)who()#select(532,884)how()]mul(928,854)<^where()/:what()(where(831,396)select()?mul(743,757)$}!{)%mul(723,274),!^{'(mul(125,779)+mul(104,510)mul(878,917)( where(389,343)%-)]mul(838,207)(^#$/</&mul(967,47)from()@{%?how()who()why()select():mul(590,941)~why()where()![-(mul(973,686)<!(,#{(/mul(787,692)~+mul(629,517)+why()-(>?mul(10,499)%mul(704,145) >mul(811,825);*{mul(539,875)mul(920,111)mul(509,272)mul(657,901)>mul(464,17)why()what()!why()*])}!mul(736,189)mul(299,45)when()select(169,279)><>[,mul(532,593){mul(627,971)how()who()how()where(291,392)/[): do()!mul(770,718)$&;!what()]?#^%mul(938,624)what():<#how()@!~mul(279,222)from()^++);:?why()$mul(98,818)$(]#{%-mul(891,49)+who(251,742)> what()where()<(mul(526,69)}%when()]/(~#do()select()**+^-from()mul(119,943)what()?from()when()*}<what()<]mul(577,966)select(){select()*['>( don't()mul(370,463)!why()>who()mul(326,383)!~how(59,628)!; %do()mul(671,969)!mul(747,375)mul(257,559)!?#!/<how(315,722)(mul(529,781)<'[%?$mul(118,474)mul(866,674)%mul(99,500)?[who()do()who(394,637)^(+ [#(?{mul(555,282){-[*@!'select()where()don't()*{what();why()&>*mul(353,892)select()why()(mul(648,3)how()don't()<~{mul(771,164)mul(576,453)$why()}-@'mul(967,581)* %{:when()where(){*<

140
y2024/resources/4_input.txt Normal file
View File

@ -0,0 +1,140 @@
MMSMXMSASXMXAXMAXSASXXXMASAMXSMMMXMMXMXMASMXMASMSMXSSXMASXSMMSASMSAXAMXMAMMMSAMXXXMAMSMXMMMXMASXMAXXMMMXMMSAMXAMMSMSSMSMMMSMMXSXXAXMXSAXMASX
XAXMASMXMASASXSXAMAMXMXMAXAMXSASAMXMAMAMSAMSSXMMAXASXAMAMSMAXMXMASMSASASASAAMAMXSMSMSAXAAXXAMSSMXMXSMAMXXAXAXXASXAMAAXAAXXMAXAXXMMSSMSSXSASA
XMASXXXASAMAMASMMMAMMSASXSXMASAMMAXSAXXXMASXMASMSMMMMXMAXAXXMSAMXMAAXSASASMXSAMAAAAXSASMMMMMSAXMASAMSAMSMMSAMSAMAMMXSMSXMASXMASAASAAXMAMMAMM
SSMSMSSXMMMAMSMAXMAXXMAMMAMSXMSMMMXMAMSXSSMXSAMXXAASXMSMSMSMMSXSAMMMMMAMXMXAMASXMSMMMXMAAAXMMMSMAMAMMMMAAXMAMSAMXXXMAMAASXMAAXXMXMSMMMSMMAMX
XXAXAAAMMSSMMXASXSMSSMAMSAMXAXXXASMMSMSASAMXMASMSXMXAAXXAAAAASASAMAXSMSMSSMSSMAAXAXAMXMMMSXXAXAMSSSMMSSMSMSAMSMMSMXMMXSMSASXSXMMSMAMAAMAMASX
MMMMSMMAAAAMASXMAAXAAMSMXAMSAMXSMXAAAAMMMAMASMMMASXSMMSSSSSSMMMMMSAMSXASAAAAAMMXSXSMXSSXSAXAMMMSMAXAAXAMXAASAMXMXAMXMAMXSAMMMXXAAMXMMXSAMAAX
XAAAXAXMMSSMASAMXMMSSMMASMMSASXMXAXMMMMAMMSAMAAMAMXAXMMAXAMAMXSAMMMMMMMMSSMSMMXMAMMMAMXMMAAXMASAMXMMMSAMSSMXMASMASMAMXSAMXMAAMMMMSSXSASASXMS
SSSSSSMMAMXMASXMAMXXXAMAMMASXMASMSMSAMXSSXMASXMMSSSMMAMMMSMMSSMASAAXAAAAXXAMXSASMXMMXSAXMSMMSMSASXSSMMAMAXXXXAXSAMXXSAMASASMSSSXSAMAMXSXMAXS
MAMMMAAMSSSMASXSSSSMMMMAMMAMASAMAAASXMAMMMMMXMASXAAXMXMXAMAXSAMAMXSSSSMSAMXMASASXMMAMSAMXXXAAAMAMXMAMSSSMMMXMSXMMSXXMASAMMXAXAAXMAMASAMASMMS
MAMMSSMMAAXMXSAMMAAXAAXMMMXSASAMMMXMSMMSAAXXAMXSMXMMMASMSSSMSAMXSXXMAXAXXMAMXMAMXAMAXMASXMMSMSMSMMSMMAAMXMMAXMASAMXXMAXAMXMXMMMMSXSAMASAMXAX
SMSXAMMSMSMSAMAMMSMMSMMAAAXXASXMAXSAMXAMXMSXSAMMMSAXSASAAAAASMMASMMMMMXMXSSMSAXXMSSMXMAMAMXAAAAASAMXMMSMSXMASMMMXASMMMSAMSSMSSSXSAMXSAMASMSS
SXMMXXAXXMAXXMAMXAXAAMSSMSXMMMAXMSMSMMMMSXXMAAMAAMMXMASMMSMMXASAMAASAMXSAAMAMAMSAMXMAMSSSMMSSMXMAMMXAXMASXSAXAAMSAMXAAMAMXAAAAAMMAMAMMSMMAMS
SAXMXMMSMMSMMSMSSMXMSAMXAMXSMMSMMAMAMMMASAMMSMMMXXSASXXXMXXMXMMASMMXAMAMMSMMMAMAAMAMASAAAAAMXMXSMMSSMMMSMMMMSSMXXAXMMXXAMSMMMSMASXMMSMAXMMMM
SXMMAMMAXMAXAAXMASAMXAMSASAXAAMMSMSASAMXSAMXXXXMAASXXMXMXAXXAXSXMAXMSMSMMXMXSASXMSSSMSMSMMMSAMXSAMAAAXMAXXAAMXMASMXMASXMMXAMXXXXASXMAMXMXXXX
XMASXSSMSSXSSMXSAMMSXSXSAMAMMMSAAASASXSMSAMXSMAMMXMMSXSAMSMSSXSXSXMAXMXAAXSAXAMAXAXAXXXMASAMAMASAMXSMMSMSSMSSMSAMMASAMASXXXAMXXMAAXSAMXMSMMM
MSXSAAXAAAXXXXAMXMXMAMAMXMXXAAMMMMMAMAXAMAMAXMMXSAXSAAXSAXMAMMXAMSSXMASMMMMASAMSMMSSMMMSXMASAMXXAMXMXMSAMXAAXXMAXSAMAMAMXSSSMSXMXMMMXSAAAAAS
ASAMMMMMMSMMAMXXMMAMAMAMXSMSMXXAXAMMMSMASMMSXSMASXXMMSMMMMSSSSMMMAMMMAMAMSSMAXXXAAAAAMAMASMMMMSSMMXMASXMSMMMSMSMMMMSAMSSMMAMAAMMMXMAAMMSMSMS
MMAMXXAAXAAMMMSAMSASASAXAXAAMXSSSMSXAXMAMMAXAAMMMMXAAMXXMASAAASXAASAMXXAMAAMASMMMMSXXMASMMXASAMAAAAMSMAXXAAAAMAMMMMMXSXAMMAMSMSAAXMMMSAMAMXX
MSSMXSSMSSMMAAXAXSXSMSXSMMSMMAMXAXMMMXMAXMAMSMXSAMSMMSASMSSMSMMMSSMXMMMSMSSMAXMAAMXMSMMSMASAMASXMXMSASXMSSMSMSASAAMMMMMMMMXMAASMSMXXAMXSAXMX
XAAXAMAXAAMSMSSMMMMSAMMAMMMMMAMSAMXAXXSMSMSMXXAMMXAAAXAMMMMMMAMAXAAASASAAMXMASASXSAXMASMMAMXSMMXSAMAXMMMMXMAASASXMMAASASXSMSMXMAMXSMSSMMMMSM
MMMMMSAMSSMXMAAASAAMAMSAMAAMSSMMASXXMAAAAXXAMMMXSMSXMMXMXAAAMAMXMSMMSSSMSMMMASMXAMMMXMMAMXXXXASASASAMXXSAMXMMMAMAMSSMSASAAAAMAMAMXSAMXAXAXXA
SXSAMXMMXXAAMXXMMMMXXMMASMMMAAAXAMAASMMMMMXAXAMAMXXASXXXMXSSMMXSAMXXXXMXMXAMXSXMMSMSAMMXMASMSAMMSMMMMMMMASMXSMSMSMAMAMXMMMSMMAXAXXMMMSSMSXSM
AAMSMASXAMSSSSXSXXSSSSSXMAMMSMMMMMSMMAAXXASXMMMASXSAMAMSMXMXAAAMSMSSSMMASXSMASAMXAASASXMXAAMMXMASAAAAAXMSMMAAAAAAMSMXMSXMMMMSMSMMMXMASXAMASM
MMMXMXSMXMAAAMASXMXAAAMSMXMXMXSAXMAXXXMMMMXMAMSAMXMAMAMAASASMMMMXMAXMASASMAMAMAMMMXMXSASMXMXMSMASXSMSXSXXAMXMMMMMSXMASMMMAAXXMAMAMAMXSMSMAMX
SXMASMXAAMSSSMAMAAMMMMSAMAMMSASXSMSSSMAAXSAMAMMASXSSSMAMMMAMXSAMAMASXXMAXMAMMSSMSXXMAXXXAASAMXMAMXMAMAMXSAMMSXASMXMMSAMXSMSMMSSSMSASAXAAMAMA
AAXASASXMMAAAMSSXXSXSXSAMMMAMXSXXMAAAAXSXXAMXMXAMXXMAMXXXSAMXSASMXSMAXMSSSMMMAMXSXAMSXMMSMSASMSSMMMXMAMASAMAXMMMSASXMASAMXAAXXXAASAMMSXSXSSS
SSMAMASAMXMSMMXMXMXAAASMMSMSSXMASMMSMSSMMSMMASMXSSSSMMSXMSAXASAMXXMASXXAXAAXMAMMMSMAMXSAMXSAMXAAAAXMSXMAMAMSXSXAMMMXMAXAMSSMMAMMMMXAXMAMAMAA
AMMSMAMXMMMAMXAMAAXAMXMAAXAAAASMASAMAXAXAAAXAXMMMXAMAAAXMXXMXSXSMXMAMXMMSMMMSAXAAXMAXMMASAMAMMXXMMXASMMMSMMMASMMSASAMXSXMAAAMXMAXXMXXMAMAMSM
MXAMMSMMAXSAMSASMSAAXXSMMXMMSMMXMMMSXMAMSMSMMMXAMXMMMMSSMAMSAMXXASMAMXAXXAMAXMSXMXMMSAMXMXMAXMMSMSXSXASAAMAMMMAXSASASAMAMSSMMASMSSMMSMXMAMXX
XMASXMAXAAMAMSAXAMMMMMSASAMXXMXAXAAMAMAMXAXMSMSSSMSAASAAMAMAAXAXAXAASXMMSAMSSMSAMSAMMMMAMMSXMSMAASXMSMMSSMXSMMSMMXMXMASAMMAASXSAAXXAAAXMSMSM
AAMMMXAMXSMSMMAMMMAMAASAMXMSMSSXSMSSXSASXMMAMAAAAAXMSMMSSSSMSAMSXXXMSAMXMAXXAASAASMSASMAAXXXSASMSMMMAXMMMAMXMAAAMSMMSXSMSSSMMAMMMSMSSSMAAAAA
SMSASMMMMMMXAXXMAMAXSAMXMAXXAMXXSMMAASASMXMXMMMSMXMXXAAAXAAAMXMAMSSMXASXSMMSMMMAXMASASMSMMXXSMXXAMXSAXSAMXMAMSXSAAAXXAXAAAASMMMAXAAAAAMSMMMS
MAMAXXAAAAMSAMXMSXXXXAMXSXMMAMSMSASMMMMMAMMMMAXAXMSMXMMSMMMMMMMASAAMXMXMASAXAAXXMMAMXSXMAMSAMXSAMXMMMXMSSMSXXAMXMSSMMMMMMSMMMMSXSXSMSMMMSMAX
MXMMMSSSSSXXAMXMAASASAMXMAXSAMAAXAMXXAMAMXAAXMSMXMAAASAMXSXAXAXSMMSMASMSMMSXSMSXMSXMMSASAMMMMAXMMXMAMAMXMMXXXXXMAXAAASXMXAMXAASAMXMAMXAAAMXS
SSSSMAXMAXXSMMXMSSMAMMSAXAMSASMSMAMMSMMSMSSSXMSXSSMSMXAMXSSMXXXAAXMXAXAXMAMMMSMAMSAMAMAMMMAXMMSMMMSASMSAMMSMSMMXSXSSMSASMMSSMMSAMXXAMSMSXSAS
AAAXMMSMAMXMMAMXMAMXMASMMMXSAMAXMSXXAAAXAXAMXAMAMXMXMMAMAXAMASXMMMMMSSSXMASMMAXAMXAMSSXSXSXSAAXAAXXXAXSASAAMAAMAMXXAASAMAAAAXASAMXSSXXXMAMAS
MMMMAAAMMXXAASMSSMMXMAXXAXMMXMXMMAAMMMMSMMAMMMMSSMXAASXMMXXMAMAXAAAMAAASMAXAMSXXXMAMAMMSAAMSMMSMMSMMMXSAMXMMMMMAXXXMMMSMMMMSMXMMMXXMAMMMXMAM
MAAXMSMSAMXSXMAAAASXMSSSSSSMSMMAMMMMAAMXXMAMAXAAAAMSMSAAMMSMMSSXSSSSMAMMMAMSMXAASXSMSXAMMMXXAXXMXXAAXAMXMXSSSSSSSMSAXMASXSXMMSMXSSMSAASMSMAM
SSXSAXAMXSMMAMSMMXSASAAXMAMAAAMXMAASXSSMMSMXSMMSSMAXAMXMMAAAMAXAAXMAXMXXXSXMAMAMXAMAMAXXXXMSSMSAXSSSMMSASXAXAAAASAAXMASAMXAMAAXMXAAMSXMAMXAM
MAAMXMAMAMAMSMAXXAMMMMMMMSMXSSMAMSXSAAXAMAMAMXMXMAXMXMAMMSSSMASMMMSXMMSMMMAMXMMXMMMAMMMSMMAMAAAMMMAXAASAXMMMMMMMMSMMMMMAMMMMXMMAMMMMMMMAMXSS
MMMMXMAMASMMMSXSMMXAXXXAAXMAXAMMXMAMMMSSMXMAXAXMASMSMMAMAXMAMXSAAXXASAAAAMAMAMMMAASXMXAXAMSMMSMXMMSMSMMMSMXAXMASAXXSAAXAMAASASXSMSAMXASAMMAA
XXAXASXSXSAAMAMMAMSMSMSMSMMMSAMXAMXXXMAMAXMMSAMMSAXAASMSXSSXMASMMMSAMXSSMSAXAXAMXMMASMSSSMAAXAMAXMMAMXXAAMASAMXMASASXXMXMXXSAMAXASMSXMSASMSM
ASMSASASASMMSMMSAMAMAMAMMASMMMMXSMMSMMASMMMAAAMXXAMMMMAAAXMSMASAMAXASAMXXSAMXSMSAMSAMMAAASMSSMSSSXMAMMSSMSAXMAXSAMXMASMMSSMMXMXMXSAMXXXAAAAX
AAAMAMAMAMXMAXAXAMXSASMXSAMAAAXSMAMMASAMAASAMXMXSXMAAMMMMMAXMASAMXXAMMSSMMXMXAAXAMMXXMASXMMAAXAXMAMASAMXXMXMAAXASMXMAXAAAAXAMXXMMMAMASAMMSMX
SSXSAMAMAAAAXMMMSMASASAAMXSMMMMMXAMSMMXSAMXMSMMAMASXSXSAXMMMMMXXMMMSXAXAAAAXMMMMSXMMSSXMAMMMMMMXSAMXMASMXSMSMSXSXSXMMSMSMMMMSMAXAXAMSMAXAXXS
XMAXMSSSMSSMSASAAMXMMMMMSMXXAXAMSMXXXXXAMMAAAAMMSAMXMAMAMMAAMMMSSMAMMMSSMMXSASXAMAAAAMASXXSMSSXASAMMSAMXAAXAAXXXAMXMAAXAXAAXAMMMMSASAXMMMXXA
SMSMXAMAAXAAXAMMSMAAXASXSAMSMSMMAMXMMMMXMSXSSMMXMAMAMAMAAXSMXAMSAMASAXMAXAXSAMMMXSMMXSAAAASAMXMASAMMAMXMAMSMSMAMSMAMSSSSSSSSMSAAMMMSASXASXSM
XAXAMXSMMMMSMXMAXAXMSMSMSAMXMAXXMMAXAAMXXMAXAASXSMSXSASMSMXMSAXMAMXSAMXMMMXMAMXSAMXSMMMSMMMMMAMMMMMSAMMXSAMXMMMMAXXMXXXAAMAMXSXMXAMXMAMASAAX
MSMAMAAAAAXMAMXMXAXMAMXAMMMXMXSMASAMSSMXMMXMSMMAAAAXMASAAXAXSMMSMMMSAMMSAMXSXMAMAXAAAAXAMMXSSMMSAMXSAMAAMAAAXAXSSSMSMMMMMMAMMMMMSXSAXMAXMXMM
MAMAMMSSSSSXSSXMMSXSSSMSMMSXSAAMAMMXMAXMXXSAMXMMMMMXMXMXMMMMXSAAAAAXAMXMASAMXMXSAMXSSMSMSMAAAXMXSAAMAMMSSXMXSAMMAAAAAXMASXXSAAAMXMSASXSMSASX
SMSXSMMMMAMMMMAMAMMMASAMXXAAXSSMSASMSAMMMMMMMMSAXSMXXASASMXAXMSMSMSMMSSSMMXXAXAMASXAAAAXXMMXAMMMXMMSAXAMAMXXXXSSMMSSMMAMAXASXMXSXAXAXAMASASA
SAAXXXAAMAMAAMXMXSAMMMMMAMMSMXXAMAAAMXMAAXAXMASAXSAXSAXASAMXSXXMAAAAXAMAMAMXMXMSAMMSMMMMSXSSSXXAXAAMMMMMSAAXAMAAXXXAMSAMXMAMXMASMSMMMAMMMMMM
MSMXMSSXSASMSMSAAMMSXSASMAAAMXMXMXMXMASXSSMSMAMSAMAMMSMMMMMXMASXMMMSMASMMASASAMXAXAMXMAXAAAAAASMMMMSMAMAMSMMMMSAMXXMMXXSASASAMMSAAASXSMSAMSM
MAXAMXXMSXSAAAXMMMAMASAAXMXSMAMSMMXSXMAMMAMXMXSAXMMMAAXMAMMAMXMXMXAMMAMXSXSAMAXSXMXMASMSMXMMMMMAAMMAXAXAMASAXXMAMMSSXSASASAMXSAMXMSMAAASAMAM
SASXSASMXAMXMMSASAMXAMMMSMAMXAXAAAAAAMMSSMMASXAMXXSMMMMSSMSASAMXSMMXMXMAMXSMSSMSXMAMXMAAXAMASXSSMMSSSSSXSAMSAMXSMAAAAMAMMMMMXXXSXXMMSMMMMSXM
MAMXMMSAMXXXXXAAMXXMAMAAMXAMSMSSSMSSXMXMAXSASMAXSAXASXAAAMSASMMXSAMSXMMSSMMAAXMXASAXSMSMSXSASXMAMAXMAAXMMMMMXMAMMMMSMMMMXAASMSMMMMMAAAXSASXS
MAMXMASAMXMXAAMMMXMAMSMSSMMMAAAXAXAMXMXMXMMASASXMASAMMMMSAMMMXAAMAMAAXAAAMMMMSMSMMMSMAMAMXMMSAMXMAMMSMSMMAAXMXSMSAMXMASMMMXAAXMAAAMSSSMMXSAA
SMMMXASXMXSXMXMAXAAAAAAXAAXSMMMSMMSSSMXSAXMAMXXXSAMAMSMAXMXSAXMXSAMSSMASXMXSAXAAMAMAMAMAMAMASMMSMSXAAMAAMXXMSAMXSAMXSASAMSSMSMSMSSXMMXASXMMM
XMASMMSAMXXMMAAXMASXSMSMMSXMAMMAMXMAXMAMMMMMSXSAMXSAMMMMXXAMMMMASAXAMMXMAMMSAMSXSASASMSMXAMAMXXAAMMMMSSSMSSXMASASAMAMXMAMXAAXAXMAXAAASMMXAMS
MSASAXMAMXMAMASMSMAAAAAXAMASMMSASMMMMMAXAAMXMAMXMASASMASAMXSSXMASXMASXXSXMXMAMAAXAXAMAAXXXMMSXMMMMAXXXMAAAAXSAMAMAMSSMSAMXMMMMXMAXXMMSXSMMMM
AMASXMSSMAMSXXXAAXMMMXMMXSAMAAMAMXMXAMMMSMSAMAXAMXSAMXAMAASAMXSASAASAMXSMMASAMMSMMMSMMMSXXAXAXSAMXSMMXXXMMSMSMMSMSSMAASMMMSAAMSSMSSSMSMMASMM
MMMMAMAMXMAMAMMSMMXSMMXXMMMSMMMSMMMSSMSAMASXMMXMSAMAMMMXMMMXSAMAXXMMSMAMAXXMAXAAMAAAAAXAASXMSXSASAXASXMMMXXAXSAAMXAMMMMAAASMSMAASXAAXMAMAMAX
XSASAMASAXMMAMAAASAMAXMSSXMAMAMAAAXMAAMAMMMSAAASMMSAMXMASAMSMMSAMSSMAMASXSXSXMSSSXSSXMMXXSAAMASMMASAMMMASAMXAMSSMSAMSSSMMMXAAMXXMMSMMSSMSSSM
ASASMXASAXMAAXSMMMMSSMAAAASMSMSSSMSMXMMSMSASMSMSAXMASAMASASXAAMAXMASAMXSAAAAAXMAXAAMMSXMMMMAMAMAMAMAMMSASXSMAXAMMSAMMASXMAMSMSSMMAAAAAAAAAXA
XMMMXMASASASMXMMSAMAMMMMSXMMMMAXAMMMMMXXAMAXMMASMMXXMXMASXMMMMSXMSMMSMAMMMMSSMMAMSMMASMMASXSMSSXMXXXMXMASAXMMMMMASAMMAMXMAXAAAASASMSMSMMMSMS
XMXAAMXMAXMAXXAASXMASXMXXMXAAMSSXMAAAMXMXMMMSMAMAMXSMXMASAMXXAAAXXXAAMXSXXXXXMAMAXAMXSASXMAMXMAMXXMASMMXMAMAAAXMAMAMMSSMSMSMSMAMMXAAAXMAXAAX
MSMMMMMMXMXMSMMMSMMXSXMAMAXSSMXXXSXXXSMSASAAXMMMXMAMAAMMSXMMMMMMMAMSMSXMMSMSMMSSSSXMASMMMMSMMMAMAXSAMAMMMMSSSSSMASAMAMSAAAXMAXXAXMMMMSSMSMSM
AAAMASMMAMXXXAAAMAMXMMMMSSMMMMSXMAXSAAASAMMSSXMMXMASMSSMSMMXXMASXMMMXMAAAXMMAMAAMMAMAMAMAXMAMMAMMMMAMAMAAMAMXAAMXAMMAMMXMXMSMSSMXSXAMXMXAAAM
MAXSASAXAXMXSSMSSSXAXAAXAMSXMASAXAAMXMMMSMSAMAASXSASXMAXMAMMMMAMAAAXASXMSSMSSMMSMSAMAMAMSMSAMMMASXMASMSSXSAXMXMMXMASMSMSSXMAMXAXAXMXSAMMMMMS
ASAMMSXSMMSAAMXMAXMASXMSAMXSMAMAMMSMMSAMXMXAMMMMAMASMSMMXSMAAMASXMMSXMMSMMAAMMMMMXMSMSSMMASXMASASASAXMAMAXXMASMXMXAMAAAAXXSASMMMSSMMMASAAAXX
AMAMXXXMAAXMXMAMXMXMAMXSAMXSMMXAXXAAAAXXAAMXMASMSMXMMAXAAXSSSMASAAAXXSXSAMMMSMSMAAMXMAMAMAMAXAAASAMXSMSMSMAXMASASMMMSMMMSMMXSAXAAAXAMAMMSXSM
XSSMMAXMMMSMMSAMSAMXXMASAMXMAMASMSMSMMMSASAMXMXAXMSMSASMXMAXXMAMXMMSASASXMASXAAMSMSXMASXMMSSMSMXMXMXMMAAMSAMXXSMMAMXAAAXSAMASMMMSSSSSMSAMAAM
MAXAXXMASXXXASXSAMASXMXXAMXMAMMXAXMAAAASXXAAMXMAMAAMXAXAAMSMMSMSMSAXAMMMASMMMSMMMAXAMAAAMAAAAMXSAMSMSAMMMMXMAMMXMAXSMSSXSAMXMXXMAMXXAAMAMSMM
XMSMMMSAMXAMMSMAASXSMSMSSSXSASXMASXSSMXMASMMSAMAMSMSXMMSXSAAMAAAAAXMXMASASAAAXMASMMXMMSMMSXMMMAMXMAASMSAAXSSMXSASXXXXAXMXAMAMSSMSSSSMMMAMAXX
MXAXXXAMMMXMASMXMMAXAAAXAAAXASXMASAMXMAMAMXAMXMXXXMAMMAXMXMSSMSMMMMMSSMMASAMASMMMMXXXXAAXXAMMMMSMSMMMAMXSXMAAXSASMMSMSASXSMSMAAMAAMMAAMSSMMS
SSMXMSASASASMSAXSMSMSMSMMMMMMMMMXSXMASXMSSMSMSASMMMSMSASAMXXXAMXMAXXAAXMMMAMAXMAAMAMXSMSASAMXASAMASXMXMAMASMMMMAMXAAMAAMAXAXMAXMMSMSSMSMAMAA
XASAASAMMSASXXMMSAXMAXXXSAXAXAXMXMASXMXAXMAMAMASAASMAAXMXAMAMXMXSXXMSSMMASAMXSSSXSAMXXXMMMMMSXSAXAMXAMMMSXMAMXMMMMMSSMSMMMMMAXMXXAXMAMAMAMSM
SAAMMMAXMMAMMSXMMAMSMSMAMMSMXMSMXSAMMXMAXMXMXMAMMMMMMMMXXXAAMASXMXXMAMASXSASXAAAASMSAMXMXMSAMASAMSSSMXAASASAMMXXAASAMXAAAAAMXMMSAMSMSSSMMXXX
MMMMXSXMSMSMASMSMSMXXAMAMAXXASAXXMAMAXAMMSMMXMXSXSASXMAXSXSMSXXAMXXMASMMASXMMMAMXMASXSAMAMMASAMXMXAAAMMMSASMSXMSSSSXMMMSSSXSAMXAAMMAAAAASMMM
XMXSXXXXAAAMMSAXAMSSMSSMSXMAMSASXSSMSMSXAAASAMXMAAASMXSASAXXSASMMMMSXMXXMMAMXXMASMXMASMSAXSAMMSMMMSMXXXAMMMXAAXAMXMAMSAAAMASXSSSSMXSMSMMXAMX
MMAMMXMMMSMSXMMMSMMSMASAXMAXXMAMXAXAAAMMXSSMXSMSXMXMASMAMAMAMAMAAAAMAMXMXSAMMMSAMXMMAMMSAMMAMXAAXAMXSAMXSASMSMSAMXSAMMMMSMXMAXAXXMXMAXXMXSSS
AMASMAMSAXXXMASAXAAMMAMXMMSMMMXMAMMSMSMSMMMMAMAXMASMXXMSMMMAMMMSSMMMAMXAXSMXAAMAMSAMMSAMXXSMMSXSMXMAAXASMMAXMASAMXMSSSXMXXAMMMMMAXSMMMSAMXAM
XSAMXAASASMXMXMASMMSMXSAAMAMAAAXXMAXAMAXAMAAAMSMXAXAXAAXMASMMSAXXAASXMSSXSMSSMXAMSXXMXAXMASAAMAMXSMASXSAMXMSMXMAMSAXXAASMSXSAAAAMMMAAXMASMSM
MMMXXMXXAMXAMXMAMAMXAXSXXXAXMSMSAASMSMMMMSASMSXMMXMXMASMSMSAAMAMMMMSAAMMMSAAAMSMMMMMMSMMSASMMMAMASAMXMMMMAMXMASXMMMMMXMMAMXSMSSXSASMMSMMSAAX
SASAXSSXSMSSSXMSSSMMSMMASXMSAAAMXMXAAAXAXAAMMMAXSASXAXMAAXMMMMSSXMASMMMAAMMMXMAMMAAMMASXSAMXXMASXMXMAAAXSXSAMAMMMMSSSMXMAMXSAMAAMXMXMXMAMMMS
SAMMSXAAMAMXMASAAAMAMAXXMAAMMMMAMXMSSSMSSMSSXSMMMAAASMXSMMAMXAAMAMAMAXSMSSXAASASMMSMSASXMAMXSAMXAAXSXSXMAXSXSXSAMXAAXAASASXMAMMMMSMXAAMXSAMM
MAMXMMMMMSMASXMMSMMASXSMMXMXMXMASXMAAMMXSAAMAAXXMXMAXMMXMASMMMMSAMSSMMMAMMMSXSASAAMAMAMASXMXAAMXMMMSAMXMMXMASMSXMMMSMXMSAXMMXMAXAAASXSSMXASX
SASAMSAMXXSAMXSAMXSMMAAXAMXASXMXAMXMMAMAXMAMSMMXMASXSMMASXMASAAXAXMAAAMMMMAMASXSMMMAMAMXMAMMSMMSXMASAMXMSAMXMAMMSSMMAXMMMSASXSSMXXMAMXAXXAMX
SASAXMAMSXMXXMXASASMMMMMMASXSASMSMXMMXMASXXMAXSASMMXMASAMASAMMSMMMSAMSMSMMXSAMXXMAMMSXMAMAMAAAMAAMASAMMXAXSAMSMAAAXMSMXAAMAMAAXAASXMXSAMSSMX
MXMMMXSMSAAMSMSXMASXXAAMXXXAXAMAAXMASMMMSAASAMSMSASMSAMASXMASAXAXAXAMXMAAXAMAMMMXMSMAAXSXSSSMSAMAMAXAMAAMMSASMMMMXMMAAMXMMMMMMMSXMAXXMAMAMAM
SMMMAAMASMMMAASAMXMAXSSSXMMMMSMSMMSMMMAAMXMMMXSXSAMXMASXSASXMASXMXSSMXXSSMMSMMMSAMAMMSMXAAAAAAMXMMSSXMXAXAMXMAAAMSXSASMSXMAMAMXMASAMASMMASMA
SASMMSMAMMXMXSMMSAMXMXAXXMAXAXAXAAAAASMMSAMAMAMAMXMASMMASAMXMAMASMXMASXMAXXAAAASASMSAMAMSMMMMMMASAMXMSXMMSSMSSMXXAASAXAXXXASASMSAMXMXMXMASXS
MAMXAAMXMMAASMMXMAXMSMAMMSAMSSMMMMXSMSAASASASAMSMMSMSAMXMAMXMAXAMAXSASASXMSSMMXSXMXSXMAMAAAXXXSAMAMXXMAXSAAAXXSXMMXMAMSMMMMXXXAMMSMMAXAMXXMA
MXMAXXXAAMMXAAXSMSMAAMAMAAAMXAMSMSMAAMMMSMMMMMSMAXXXSXMAMAMXMAMSSSXMXSAMXAMMASMMXMAXXMXMSSMSMMMMSMMAMSXMMMSMMAASMSSMMXMASXSSSMXMAAMSSSXSXMAS
MSSSMASXSMSXSAMXAAAMXMAXSMXXMAMMAASMMMAAXMXMAMAMMMMXMASMSXSAMAMXAAXMAMMMMXMSAMAMXMASMSAMXMAAMSAAAAMXMASMAMAAMXMAMAAASMMSMMAAMXXMMXMAAMASXAXX
AAAAAMAXMAAMXASMSMSAASMMXXMMMAMMXMXXAMMSAMXSXSSXMAXMSAXMAAMMMAXMMMMMAMMAXSAMXXASAMXSAAASAMMMSSMSSSMASXXMASXSMMXSXSMMMAMXAMMMMMASAMMMSMAMMSMM
MMSMMXMXMMMXASMAMAXAMAMXMAAXMMMAXSMSXSAMXMAMAXMASXSAMXMMMXMXSSXSAMMSSSSMXSMSMSASAXXMAMXMASAMXXXMAMXAMSXSMSAMXMAMAMASMMMSAMXAAXMMAXAXXMASAAAX
XMXAMXXMMASXMAMXMAMAXMSXSSSMASMMSAAAAMXMAMASMSMAMSAMXMXSAXSAXMASASAAMAAMXXAAAMMXAMSASXASAMAMXMMMMMMAXXMAAMXMAMAXASAXAAAMASMSXSMSAMMXMSAMXSMM
SXSXMXMASASAMXSMMASXMMSAAAAXAMAMXMMMSMSSMSAMMAMMSXMXAMASASMAMMXMAMMSMSASMSMMSMSMAMSAMMAMASXMMAAAAMXMSMAMXMASXSMSASMXMMASAMXAASAMXXSAXMASAMMM
XXXXXMAMMASMMAAASXSAAAMMMMMMMSAMAXMXMXMAMMAXXAMXSMMSMSAMMMMASMMMAMXXAMAAAAXAXAXSMMMAMAXSXMAXMXSSSMSAAMXSAMXAAAAMMMXMMSXMXMMMMMAMAAMAMXMMMSAX
SAMMMSXMMAMMSSSXMMSXMMSXMASXXSAXSXSAMASXMSAMSMSMSAXAXMMSXMMAAAAMMSSXAMSMSMSMMAMASXSAMSMMASMMSAAAAAMSMMMSMSMMMMSMAAAXXMAMAMSXSXXMMXSASAMMXSMM
MAMXAAAMSMMMAXMAXAMAXAXMMASMASAMXAMMSMMMXMMXAMAXXSMMMSXSAXMSSSMSAXXMAMXAAAAMXXAMMMMAXMAXAMXAMMSMMMMASAAXMAMXSAMXMMMXAMAMAXSASMXXAAMAXASXMXAA
SAMMMSAMAAMMMSSSMMMAMSSSMAXMAMMMMAMXSMAMAMXSASMSMMXSAXAMXMXAMMAMXSMXMMMSMSMSASMXXAXSMSSMSSMXSXMASXSASMSMMSSXMASXSAAASXMSMSMAMAMMMMSSSMMASXMM
SASAAXXSSSMAXMAMASMAMAAMMSSMASMSSMMMMMAMAXAXXMAMAAAMMMSMMMMMSMAMSXMASXAMAMXMXMSASXSMAXMMAAMXAMSMMMMMSAMAXXXMXAMAMMSMXAMXXAMMMMXAMXAXAXSXMASM
SMSMMSAMAXMMMMAMAMXSMMMMAXAMASAAMXAAMSMSXSASXSSSMMSXSAAXAMAMAXAXMASASMMMMMAMMMMXMMAMSMXMMSMSMMAMAMSAMXSMXMAMAAMXXAAXXAMSSSMXAXXXSMXSMMMASAMX
MXXAXXXMMMSMMSXMASAMAXXMMSAMXMMSMSSMXAAAAMXMAAXAXAXXMMMXMSASMSMXSAMXXXXAXSASAAXMASAMXMMXXAXXXMASASMXSAMMASAMSXMSMMSMSAMXAXAMSMSAXMAMMASMMSMX
MSMSMMMMXXXAAMASAMMSAMSAMXAXXAXAAMAMSMMSSMSMMSSSMSSMMMSAASXSXAXAMXSMSMSMMSASMXMMAMAMXAASXMMXSMMSXSXAMAXSAMAXMAMSAAAMMMSXSMXMAAMMMMSMSXSXAAXX
XAAAXAAAXMXMMXAMASXXXSSXMMMMMSSMSMAMAXAAAAXAXAAAAAXAAAMMMMMSMMSMXMAAAAAMXMMMASXSSSSMMMMXAASXSAASASMXMSMMASMMSSMSSMXSAAAAXXSMMMMXAAAMAMXMSSMM
SMSMMSSXSASXMMSMMMMSSXMASAMXMAAMMMMSXMSSSMSMMMSMMSMMMSSMSMAXMMAMASMSMSMSASXMMMAAAAMXMASMSMMASMMMMMAAXXASAMAAXXAMMMMSMSMMSAMXSSXSMSSXMAAMMMAM
XMAMXXXMAMAASAMAAAAMAXXAMASAMSSMASMMAXMAMXSMSMXXAXASAAMXAMSSMMAXMMAAAAASAXAAXMMMMAMSXAXXXAMXMXAAMXSMMSAMXMMMSMMMAAMXMMMXMAMASMAXXAMAXSXSXSAM
XMAMMMASMMMXMASXSMSSMMMSSMSMXMMMMSASXMMMMMXAAAXMAXAMXXSMMMMAMSSSSMSMSMXMSMSMMMXMMXAXMASMSMMAMSSSSMAMAXMXSXMASASMSXSAXMAXSAMXSMMMSSSMMMMMMSAS
AMSSMSAMXSXMMAMAXMAXAAAAAAMXAAASMSMMXSAMAAMSMSSSSMAMSXSASXMAMXMAXAAMXMXAAMAMXMAXSMXSAMAAAASXMAAMXXAMSMSAXAMAMMMMAASMSMXMMAMAMAAAAMAXAMASAMXX
XAAAXMASAAAXMSXMXMASXMSMMMMMSXMXAMXAXMASASAXAXAAAXSMMASAMASMSMMAMMMMASMMMXAXAMXMXAAAMAMXMXSMMMSMMMMMXAMXSSMAMAAXMMMMAMAMXMMASMMMSSSMXSASXXXA
XSMSMSAMXSSMSMSMAMASAAMXSAXXMMSSXMMSMSAMAMMMSMMMMSMAMAMAMMMXAMMXSXXSASAMSSSSSSSXMMMSMXMXMAMASAMXAASAMAMAXXSAMSSSXMASMSXSAMSAMAAMAAASXMASXMSS
XMAXAMXMXAMXAAAMSMMMMMSASAMAAAAAAXXAAXAMXMXAMAMXXAXAMMSXXMXMAMSAMXXMAMAMAAXAAAXAMXAXAMMSMASASMXSXXXAXMMSSMMXXAAXMMMMAAAXAMMASMMMMSSMMMAMAMAA
MMAMAMXSXMXSMMSAMAXXSSMASMSSMMSSMMMMSMSSSMMMSMMMSMMSAMXMXMMSMSXSXMASXSSMMMMMMMMSAMXSMSAAMMMXSAXSSSSSMXAAXMAMMMMMMASMMMSXSMSAMMAXAMAAAMASMMMA
ASAXAMXXAMMXMMXASAMXMAMAMXAAXAAAMAMAAAXAAXAXAXAMAAXMXSAMAXMAMXAXSAXMAXXAXXAAXXAXAMXXAMMSSSMMMXMXAXAMXMMSMMSMSAMASASAMAMAMXMAXSSMMMMMMSASXMXM
MSMSXXASMMAAMAMXMXXXXXMAXMXSMMSMSAXSXSMXMSSSMXSSMXMAAXASAMSMSMSMXMSMSMSXMASMSMASMMXMMMAMAAASXSMMXMXMSMAAAXAMXASMSASMMAXMASMSMAAASMSSXMXXAMMX
ASAAAXXMAMXSSSXXXMMSMXXXSSXXXXMMSAXMAMXMXXMAMAXAMXSMMSAMMMXXXAMSMASAMXAXAXMAAXMXMASAXMXSSSXMAMMAASMMMMSSSMASXXMMMAMXMASMXMAMMSMMSAAMXMAXSMSX
MMMMSAMMAXXAAASMASASXAXSAMXSSSMMMSAMXSXSMMMSMMSAMAAAMMXMMAMSMSAAMMMAMAMXSXMSAMXMXMAMMXXMAMMMSMASXXAAXXAAXMAMXXSAMXMAMSMMAMXMAXMAMMMMAMMSMAMX
XAXAXMASASMMMMAMAMSMMMMSAMASASXXAMXSAMMAAMAAMXSAMMMSMAXXMAMXAMXMSXSAMAXAXXMASMXMAMAXSXSMMMAMAXMXASXMMMMMMSSMMMSXSAMAXMASXMAMXSMSSMXSXXMAMAMM
SAMXSXMMASXSXXMMSMXXASASXMXMAMXMMMXMASMSMMXMSASAMXXAAXMXSSSMXMMSMMSMSAMXAXMAMMMSSSSMXAAXXSSSMXXMMMAAXAAXMAMAAAMXSASMXSAMMSMSMAAAAXAMMSSXSMSS
MXMASMSMMMAXMXXXMASMMMMSAMXMAMMSAMMMXMAMASXSMASMSSXMASMXXAAXAXXAAMXMXXXXSAMASAAMXAAMMMMXXXMAXSMSXSSMMSASMASMSMSAXAMXMMASAAXAASMSSMXSAXMASAAM
MAMMMXAAXMSMSMSXMAMAAXXSXMASAXASASAAMMMMAMMAMXMAMXAXMAMMMSMMMMSSSMAMMSMMAMSASMSSMSMMXAXMMMSMMSAAAAXAXXAXXMMAAAMAMSSSXMSMMXSMXMAMXAXMAMMSSMMS
SXSSSSSSMAMAAXSAMXSSMMMMXSAXMMXXAMMAAAAMASAMSSMXMSXMMMAXMAXAAAXMAXASMSXAAXMMSAAXAAAMSMMASASAAXXXSMMMMMSMSMMSMMMAMAAAAMMAXMAXAMAMMMMXMAMAMAAX
AAAAAAAAMAMSMMSAMAMXMXMXAMSMSXSMXMXMSXMSAXMXAAXMMSMSXMMXSASXXMMSAMXXXMASXSXAMMMSSSSMXAASMASMMSMMAXXAAXAAXXAMAXSXSMSMMMMAMSAMMSXMAXSSMMSASMMS
MMMAMMMSMMMXSAMAMASAMAMMMSXXSAAMXMAXAXMMMSMMSSMMMMAMAASXSASMMSAMXSMMAXXMASMMSMAXAMXMSAMMMAMASAXSAMSMSSMSMMMSMMSXMAXXXXMAMXMMXAMMSMXAAXSAMMSM
XXAMXXXMAXSSMMSSMXSASASASAMAMSMMASASMMMAMXXAAAXSAMAMSMAAMSMAAMASAAASASAMXMASAMMSSMAMXMASMXSMMAMSAMXAAMMAASAAAAMAXSSMMMSASAMXXXSAMSSMMMMAMMXM
MSMMMMMXSMMAAMAMSAXMMMMXSAMSMMMSMAASXAMSMMMSSMMSXSAMAMMXMAXMMMAMXSMMMXXMASXSASAAAMXMAXSXSAAXMXMXMXMMMSSSSMASMMMMMXAXAAMXSASMSMMMSAXAASXMMMAX
XAASMMSAAASXMMAXMMMMSSMMSXMAAAMAAMAMXXXMASAMAXAXMMMSASXMMMSMSMMMAXAXXMASASXSMMMXSMSSSMMAMXMSXMMMMMXAXXXMAMAMASAASMMMSSSMSMMAMAASMMSSXXAAMXMX
MSSMAAMSSMMXXSMXSXSAAAXAMMMMXMMMSMSXSMMSAMASXMSSMSXSMMAMAMSASXSMSSSMXSAMASMSMAXMAAAAAAMMMMXMAMSAAAXMMMMSMMMSAMAMXAAAAXAASXMSMSMSXMAXAMSMMASM
AXMAMMMXMASXMASASAAMSXMAXSASMSSXXAXMMAAMASAMAAAAXSASXSXMAMMAMMSAAAAAXMAMSMMXSASXMMMSMSMAAXAXXMAXSXMAAAAAXAXMMMSSSSMMSSMMMAXMAXAXXMASMMXAMAXA
MMAAMXMAMAXXSASMMSMXMXSXMMAXAAAXMSXAMMMMMMMMMMMSMMAMASMSSMMSMAMXMXMXMMAMMASMMMMXAAAXXMXSSSSSMXMMMASMSSSSSMSAMXMAAXAMXXAASXMMMMSMMSAMXASXMXSS
AMSMSXSAMXSMMASXAAXAAAXSXMSMMMMXXXMSXSMXSASXAMXMXMAMAMMMMAXAXMMMMSMSSSSXSAMAAXXSSMSSMSMMAAXXXASMMAMAAAAXAMSAMXMMMMXXASXMSMSXMAXSAMXSMMSASAAM
SMAAXASXSAAAMXMMMSMMMMSMSAMXXAXMMXAXAMXXMAMMMMAMASAMASAAXMMMMXMAMAMAAAAAMMMSMMAMAAAAMAAMMMMMSMSAMXMMMMMSMMSXMXAAAMMMMSASMMAXMASMXSAMXXSAMMSM
ASMMMMMAMMSMMASMAAAXXXAMSMSSSMXMAMSMMMSSMAMAAMXSASASASMSSXSXAASMSMSSMMMMMXXASXMSSMMSSSMMXXAASXSAMXXXAXXXAAXAMMSMSAAMXMMXAASMSMMAAMXSAXMASXMA
MAMSSXMAMXXAMAXMMSSMAMXXXAXMAMAMXAXAAAAAXAMMXXXMAMAMAXAMMAMASXMAAXAXSXXXAXMAXSAAXXAXAAASMMSXSASXSSXSMSMSMMXAMXAAXXMXAMXSSMMMAAMMMSXMMXSSMASX
XMSAAMSMSSSSMSMSAAAXXSMMMSMXAMMSMAMSMMSSSMSMSAMXSMSMSMASMMMAMMMSMMMSXSMMSSMMMMMMSMMMMSMMAAXAMAMAMAASAAXMAXSASXXSMAMSMMAAAASXSSMMMSAXAASASAMM
SXMMSMAAAAAMAAAMMSMMSXAAAAASMSAXMAMAAMAAAAAASMAAXAXAXSAMAAMASXXMASXSAMXAAAAAXXSAMXSAMXXMMMMAMAMAMMSMSMMSAMSAMAXXMXMASMXSSMMMXAAAASMMMSSMMMSA
XXXXXXMSMMMMMMSMXAXMASXMSXMAAMMSSMSSSMXSMMMMMMSAMSMMMMMSSMSXSASXMMSMAMMMSSMMAMXXMASXSAXMAMSXSXSXSXXMAMXMXXMMMAMXAXMAMSAAXMXMASXMMSXXMAMXXMAX

1380
y2024/resources/5_input.txt Normal file

File diff suppressed because it is too large Load Diff

130
y2024/resources/6_input.txt Normal file
View File

@ -0,0 +1,130 @@
.........................#...........#.#...#...............#..............##.....................#...........#..#.........#.......
.....................#.................#.......#.........................#...........#.#.......#..................................
.........#...........#........#.........#.........#...........#........................................#.........................#
.......#.........................#...........................#.............#......................................................
..................#................##...............#.#.....................##............#.......................................
......#...#................#..................................................................#....#.#............................
.......##................#........#..#.......#......................................#........#............#......###..........#...
.....................#....................................................#...........#..#...#..........................#.........
...........#....#...........................#.#...............#..#....................................#..............#......#.....
.....#........##...............#.......#..#..............................................#..........................#.............
.#.........#.#...........................#..........................#......................#...........#........#.................
.................................................................#..#.#.......#..#................................................
...............................................#.......#...................#....................#.................................
.......#......#......#......................#...............................#.....##........#...........#......#..................
........................................................................................................#.....#.#.................
..#...............................#.#..................................#.............#............................................
..............#..........................................#.....#.....#..........................#....#.........#..................
...................................#........................................#................#...........##.....#....#............
.#.....................................#.......#........................#...................##............#.......................
.#..................#...........#...........................................................................................#.....
........................#...................................................##.................................#..#..........##...
........#............................#.......#...........................#.#...#...................................#.....#........
...............................#............#.....#......................#.......#...#........................#...................
.........#.............#.................................................#.......................................#....#...........
...................................................................#...#.................................#...................#....
...#.....................#...#...............#..................................................#...#...#.........................
...................#........#....#....#..#..#...................#.........#..................#..#....#.......#.#.................#
..............................#........................................#......#.....#..............##................#............
............#..#.............#.......#........................................................##........#.....#...................
.....#.............................................................#...#.#.#.............................#..#.#...........#.......
.......#....#............................................#.................................#...................................#..
..#.................#.......#..........................#........................................#...............#..............#..
....#.#...................#............................#..#.......................................................................
.......................#...............#..............#......#......................#.....................#..............#........
.#..........#.......................................................................#....................................#........
.#.......#..................................................................#.....................................................
..................................................#.............#.............................................#................#.#
.......................#......#....#................#......................................................#.......#.........#....
..........................#.#........................................................#......#................................#....
....................................................................#...............................#.............................
..#...........#..............................#..#....#............................#...............##..............#...#...#...#..#
...................................#................................................................#....#...................#....
..#....#........#..##....#........................#...#...................................#.......................................
...................#................................................................................................#.............
.......#........#................#...#.......................................................................#....................
..............#....................#..........................##.........#.....................................#..................
.........................................................................#.................#........................#.............
.............................#..........#.......................................................#......................#..........
............###....................................................................#.......................#......................
........#........#...........#.............................#....................#..........#.........................#.#.....#....
.........................................................................................................#..#.....................
#.#.....#..........................................................#.....................#........................................
........##..........#....................................................#..#........#.......#........#................#..........
.............................................#..........................#.........#........................#......................
...........................##.............#........................#.#........................#..#................#.....#........#
#...#..............................................#........#...................................................#.................
.............#................#............................#............#.........................................................
#..........................#............#.....................#.....#.................#......#...##...#.............#.#...........
.....................#...#..#....#...................................#....................#..............#........#...............
.......................#.................#...........#....#.......#...........................................#..#................
.........#...........#.#.........#.........................#.....#................................................................
....................#........#...................................................................#............#..#.#.#............
..........#.......................#.......................#.......................................................................
......................................#......#............................#..............................................#........
.....................#...#.................#.............................#....#...................................................
..............##...................................................................#......................................##......
.....#....#...............................................#.......#.##........#.#.............#...............#...................
....................................#......................#........#.......................................................#.....
.....#.........................................#.....................#.............#.................#..................#.........
................................#.........#..#............................................#.........................#.............
....#.#.....................#......#...................................#..........................................#..#.....#...#..
.........##.......................#..........................................#.........................#...##.....................
...............................................................#................................................................#.
............#.........................................##.......................................#..................................
.............................#..............................#..................#.........#.....#..................................
..........................................................#...#.....#..................#................................#.........
......#...................#.........................................................................................#.............
#...............................#...........................#.....................................................................
.......#........#.................................................#.......................................................#.......
.#......................................................#..............#..................................#...........#...........
.............#..#.#.......................#..........#......#.##.........................................................#..#.....
.......#...............#........#......................................................................#..#...........#...........
............#.........................................#................................................#...................#......
............#...........................................#.#.......#....................................#..........................
...........................................#.........................................................#..............#.............
..................#..#....................................................#..................#....................................
..#........................#........#.............................................................................................
.............#........#......................#.......................................#...#....#............................#......
............#.......#.............#...#...........#.#.................................#.................##........................
.....................................................................................#.........#.......................#.....#....
.................#................................#..#....#......#..........................................#.....#...............
..#...............................#........................................................#.......#...#............#.............
#.........#..#..#.....................................#....................................#................#.................#...
.......................#..#...#............................................................................#..#.....#.......##....
..........#............#.......................#.........................^......#.#...................................#...........
...##........................##..........#..........#.................#...............#...........#.....##........................
..............#............#..........................#....#...........#......#......#......................#.....................
......#.....#....................................................#............#.#......................................#..........
......#.............................#......................#...............................#........#.............................
.#..........#.............................................#.............................................#.........................
...............................##.................................................................................................
.....................#................................................#...............#............#...............#.....#.....#..
..................#...........................................................................#...........#...................#...
##..............................#.#...#.#...............................#...........#.#...................#.......................
......................#.........#...................................#.................#...........................................
.......................#............................................................................#.........##...........#......
.....................................................................#.......#.....#.......................................#......
#....................................#........#.#.................................................................##.....#........
..............#..............................#......#..........###.........#................#..............#..................#...
..................................#..............................#.................##.............................#...#...........
...............#......#........................#....#........#............#.........#..........#..............#......#............
...#...........#........#...#...........................#.............#.....................................#.....................
..............###............#...........................................................#.............#.........##..#............
............#................................................#.......#..................#....#....................................
.........#.#...#.....#...........................#.....##......#.....................#..#........#......#.........................
.#....#.......#.......................#.................................................................#.......#..............#..
...................#................................................................#.............#...#...........#.........#.....
.......#.#.......#.......................#....#.....#...............#...#.....#...........................................#.......
.......#........#...........................................#...........#.........................#....#.......#..................
..................................#.#.................#.#............................................#...........#....#...........
....##......#.............#...................................#...#.........#...........................#......#..................
.........................#......#....#...#........................................................................................
...#...............#............................................................................#...........................#.....
....##.#..............................................#............#................#................................#......#.....
.........#...........................................#...#.......##..............................#................................
..................#..........#......#.......#......................................#........#...............#......#...........##.
........................................#......#..........#......................................................................#
..............#...#...................#.....#..........................................................#..............#......#....
...#........#........................#...#................#........#.............................##..........................#....
............#............................#.#........................#.................................#..........................#

850
y2024/resources/7_input.txt Normal file
View File

@ -0,0 +1,850 @@
27905293: 1 3 67 91 5 5 293
2656278: 383 3 7 99 1 8
5824995: 5 1 8 2 1 89 1 6 4 2 47 3
777381126: 9 749 93 7 31 8 4 2 1 5 6
1315092: 3 29 76 4 46 83 6
1746: 680 675 375 9 7
3811598532: 17 1 60 697 7 35 7 6 6 7
1698008: 2 5 63 5 81 47 86
3308151: 8 367 1 33 36 9 2 59 3 7
304128: 8 44 864
271358: 1 1 4 1 8 5 3 7 35 53 35
2822415: 658 1 2 1 683 7 300 7 8
151115404843801: 616 5 62 9 225 76 578
10594914304: 4 88 844 533 256
137763: 1 7 123 16 3
957305: 90 408 30 66 26 89
11046: 83 9 40 3 6
4055108: 584 289 929 5 5
517632: 191 820 8 8 8
58113832155: 23 95 9 7 781 1 5 969
138631373: 19 1 1 912 922 8
29300652: 59 66 930 28 628 9
4910830: 613 8 6 1 830
432310: 199 5 2 6 1 5 8 5 1 1 17 5
1692639962: 7 3 85 9 33 76 3 8 996 2
1051087603: 20 689 2 499 760 2 5 3
132193862: 5 47 99 79 501 2
10468: 443 651 3 930 1 5 333
225: 17 8 7 2 48
8849850: 884 96 2 48 2
7998370616: 9 3 3 932 457 856 77 6
197685: 625 7 5 90 9
23362468: 53 5 76 53 68
146418: 83 580 665 3 2 1
80662: 29 4 31 3 2 7 4 82 49 6 2
86857594: 8 674 4 70 9 34 593 1
29621764: 5 447 6 93 7 8 5 4 6 8 1 4
62943216: 49 79 1 1 83 592
263797648: 8 7 90 3 3 3 4 2 5 6 4 9
106637574552: 8 6 8 9 7 1 2 6 96 819 8
31539503114: 9 2 41 8 6 3 88 874
44281: 14 53 66 8 29
627: 2 9 60 8 3
7986693: 387 737 1 28 561
61698: 70 4 2 5 941 5 1 4 5 6 2 7
4065686352: 528 77 858 11 544
111069384: 6 723 758 3 6 67
110111: 7 650 4 6 911
48258: 7 23 3 46 1 619 66 2 7 9
186553437: 12 955 10 18 8
20190745: 1 9 343 2 19 3 43 8 9
14450403260: 29 983 2 567 85 1 16
2309768370: 225 179 7 98 90 91
1606331569716: 5 568 3 538 56 7 93 6
11725: 854 51 264 3 8
102771365: 223 3 95 116 12 23 1 8
644732: 86 8 6 929 6
44043274814: 944 90 6 8 2 8 4 9 3 1 3 9
23433: 5 2 42 2 139 2 8 41 8 7 7
2543688: 2 309 7 7 84
12624245: 5 574 4 36 4 5 2 6 424 5
294110: 5 474 614 4 1
12960696: 61 2 49 8 6 7 2 5 9 428 3
49735: 4 608 8 1 774
24927276192: 263 7 59 290 8 58 78
5671488: 77 766 96 2 48
6620: 92 7 390 20 13
470191854: 59 754 34 123 47
3798480: 8 43 1 4 4 46 146 665
55957973060: 3 3 64 7 8 1 2 63 1 9 58
1516: 6 682 828 1
122967: 3 6 1 44 8 1 724 67
436407154: 25 5 931 25 3 18 5 5
1552941: 24 647 45 5 90 1
4341530601: 156 6 1 453 4 7 90 9 17
64528843: 94 893 2 34 34 125 5 8
14176705232: 4 97 685 889 6 3 1 5 1 2
477175854523: 592 14 2 73 133 3 83
1506816: 5 64 76 9 24
1108966: 158 33 2 58 5
53886806512: 5 4 6 7 1 2 8 49 8 2 77 8
10564: 2 137 4 19 1
14965861605: 864 632 584 2 16 2 1 5
1744751: 9 7 273 3 7 74 21 6 19
310301175: 306 73 281 331 33 4 9
56733603: 30 70 28 66 3
14200304: 22 49 257 585 2 8 6 74
2058562: 5 219 6 327 13 7 8
55940568098: 931 8 8 46 28 60 98
367211289881: 992 517 93 716 1
171: 56 3 3
68135804: 859 8 708 111 8
19576263: 21 7 1 9 37 263
29648: 2 96 4 8
115798: 39 29 4 22 98 1
284294885: 170 4 3 959 60 62 21 7
1387776767: 8 18 56 96 765
516468: 5 16 46 5 3
64989: 4 6 32 3 83
7703: 836 8 97 2 3 29 884
2593692364: 431 2 3 427 8 7 6 668
67323: 5 119 13 28 748
650573172008: 169 86 24 470 383
359664: 80 5 2 32 88 1 7 8 7 2 1 1
3057397: 4 83 633 3 4
127259832457: 1 755 1 499 84 2 457
4237026: 9 2 58 4 8 2 3 51 2 22 2 6
10830240: 54 54 591 9 88 7 5 960
1617: 15 107 6 6
2420840404: 763 9 3 7 4 9 8 8 3 44 1 2
14890230: 2 49 485 503 310
251591: 8 7 14 974 8 632 28 39
1748935814: 7 347 3 22 5 6 6 6 9 8 9 5
8849341: 758 26 1 449
2067721: 485 1 88 2 6 4 5 2 60 1
188944: 99 3 764 8 4 2 3 2 9 3 49
13561782: 5 5 1 5 8 3 77 3 3 627 7 8
259593: 1 2 2 3 1 8 9 4 92 507 8 1
7419051443: 6 4 8 8 24 119 1 4 2 9 3 4
2193864: 19 2 4 23 3 864
157860: 8 8 360 3 5 1 5 3 2 9 60 1
735258079483: 227 8 81 45 46 717
1397845: 6 908 1 2 22 98 689 2 4
27164919: 9 8 95 7 4 61 1 65 639
9617797: 28 5 2 3 9 8 1 5 8 91 3 7
100267221822: 6 33 93 6 6 1 9 720 3 2 7
1899738: 8 6 4 1 5 3 71 5 257 1 8
788: 4 7 64 4 709
5498294599: 7 3 1 743 935 8 9 9 83 9
705: 696 8 1
1321530: 89 7 40 9 6 5 50 988 7 5
2907: 51 5 37 170 665
36677522025: 1 8 9 1 2 6 1 69 3 3 6 593
488609631430: 86 326 7 9 566 27
25363583907: 2 38 99 922 907 9 9 6
21215: 7 47 56 7 42 5
124533200: 4 5 4 7 8 6 9 913 620 1 2
664025757: 8 3 1 7 568 1 8 7 8 1 1 57
58480049: 1 4 7 3 32 1 4 23 29 882
9718953216: 953 4 7 813 448
5959367270: 9 92 727 29 99
64885475: 2 2 2 1 466 9 573 3 101
101581: 5 1 7 7 4 7 66 19 6 3 3 85
573594: 4 9 3 64 7 8 6 4 7 13 5 42
3872278848: 766 94 506 41 45
1518518570: 4 134 4 8 708 3 8 10 60
95359660: 617 50 24 851 7 4
328296: 122 32 14 60 6
6086: 1 8 8 353 8 8 8 2 1 71 62
5686734: 8 9 77 724 5 2 56 8 1 6 6
91728244: 917 282 44
265091: 5 7 3 6 91 7 94 92 616 9
42537077900: 3 71 773 608 73 826
166742488: 5 9 21 3 4 6 38 652 6 1 1
207065430: 90 73 58 4 429 9 429 5
169143260: 880 336 25 13 44
9409727: 905 31 1 48 727
1830828247: 5 9 112 6 936 9 7 5 12 9
27012357: 2 53 43 1 47 9 6 9 510 3
636: 18 5 38 4 7 8 1 173
10194082033: 8 43 35 80 4 58 4 5 3 3 1
485329600: 43 5 53 29 600
263277: 94 1 1 4 75 9 9 429 3 3 9
4234054029: 36 2 6 370 4 9 206 6 7
903573: 994 909 27
7538939: 84 591 78 893 9
402422855515: 737 886 551 45 55 15
164268: 705 3 29 8 9
32388: 6 302 58 2 1 22 2 88 92
6000999669: 976 26 8 92 67 3 6 9 7 7
9581: 5 383 5 3 3
39886: 67 8 2 62 49
494328620: 617 2 7 4 15 29 8 61 2 6
441490: 7 2 85 7 53
408601440: 7 552 286 1 138 8 438
20555197: 995 74 836 23 465 1
6837515448: 125 229 22 6 91 36
54960872: 45 3 8 9 2 6 4 1 283 7 1 8
126616: 14 9 514 60 42
117207453600: 84 4 663 3 25 496 162
1538: 4 6 2 3 5 6 91 587 2 3 1
27238435993600: 793 85 8 2 335 76 992
20667334: 36 90 2 65 40 1 28 394
11439: 161 71 8
2916: 18 2 926 21 5 3
93277: 92 934 4 29 9 640
75053: 31 60 7 4 7 618
17972: 4 3 93 4 4 7 71 31 7
2679: 3 17 34 1 642
43731525: 9 22 7 790 668 47
17227: 701 221 26 18 163
5666750: 54 17 459 4 661 950
1958196985: 80 993 290 9 85 220
1203446220: 44 132 2 683 219
33165: 2 4 9 165
6523355997: 7 765 9 600 4 35
198552432960: 340 643 53 34 504
194266007: 2 3 31 7 9 4 26 5 4 2 9 5
81637477: 78 3 1 56 92 621 61 77
5579136: 387 949 232 6 3
502464150: 9 919 15 5 9 2 8 8 4 3 5 3
2419: 7 55 1 9 3 5 426 3 4 3 8 1
179766373116: 5 4 4 3 3 7 66 9 419 6
3439571526: 683 5 8 6 4 31 8 6 79 7 6
79292: 43 1 901 2 4
9781384: 155 95 6 8 83
47172: 8 8 5 682 105 9
316827: 93 7 9 54 7 9 252 85 88
5583938067: 140 3 813 73 8 1 345 6
3713632: 1 7 80 97 1 55 8 1 32
1612682: 74 5 851 4 1 55 6 1 961
59165553920: 7 8 97 8 3 3 4 58 6 4 605
9838113120: 24 63 708 44 3 22 55
3916: 6 59 2 92 3 887 629
12385917: 479 87 33 76 928 9
51: 29 8 6 1 8
31010148: 3 868 5 113 7 767 9
370693272485: 8 4 6 6 468 9 3 4 72 485
28267096: 1 283 8 9 34 1 9 12 12 7
1278: 9 5 3 29 18
3848: 25 5 2 64 8
37941: 845 3 215 894 6 905 3
420077: 52 509 8 1 4
734492: 9 11 7 8 91
312542217: 791 542 9 1 1 45 9 8 9
1054840080171: 94 18 215 2 56 168 3
83181687076: 4 5 994 4 10 8 18 82
1760: 293 5 70 9 216
117725: 16 27 1 6 1 9 208 5
2920: 5 8 2 667 4 5 83 6 7 86 5
170679: 283 9 67 1 29
1776762: 355 50 17 62 1
1363805: 987 2 8 539 5 885 8 9 3
2994922: 2 61 8 1 71 7 46
64978320: 346 8 24 8 978
106207: 72 28 6 147 60
160065: 96 75 71 9 7 7 73 3 46
21439242: 660 3 890 830 21 17 9
5306: 38 403 1 12 2
26360813569: 2 6 360 7 55 58 33 23 9
5270496: 7 15 1 496 462
14707533: 76 41 8 590 13
12607591584: 744 9 495 5 1 604 7 8
59935652: 524 71 3 537 8
293059800: 8 74 6 722 825
107802: 49 672 24 663 6
73438429: 50 4 2 158 83 31
12816554: 353 3 6 6 554
219288633: 219 287 712 563 361
13386240: 67 827 31 483 378
432231552: 9 80 2 3 8 108 887 6
996050214: 83 5 30 61 57 8 8 897
1711946: 36 1 24 915 8 958
608141: 11 98 4 562 57
20761436: 3 16 371 5 3 105 4 383
258724950816: 5 212 339 2 9 8 5 1 2 8
6774: 7 6 44 2 86
33705612: 74 9 450 52 556 1
47099: 4 61 193 7
99630864: 688 18 42 7 1 3 48
14300172905: 56 409 7 169 4 362 2 4
39539513: 50 4 2 4 66 13 247
219296465: 679 6 3 8 4 397 25 46
358051294: 8 5 5 20 38 4 6 302 1 94
1542670872: 66 7 812 209 72
83143: 20 50 83 16 127
39731: 9 894 44
935306790: 6 361 9 7 5 9 819 40 5 3
67892: 6 15 8 58 115 4
1996831838: 2 4 817 354 2 80 863
4943769471878: 701 5 25 27 8 1 697 7
2094768: 8 5 9 781 6 23 8 432
1499841509: 774 9 3 78 8 715 9 300
70082: 725 32 3 62 1 418 2
67926144: 27 4 1 6 6 402 3 32 44
270950403: 8 784 72 600 3
31505774: 7 8 7 1 8 9 390 51 14
3725925: 9 8 4 4 1 4 46 7 3 7 5 705
18274522950: 90 203 4 52 29 51
62066: 40 571 9 6 6
37696: 9 69 352 5 340 28 792
2504: 146 29 3 2 3 72 851
50: 35 8 7
244047: 1 8 8 8 23 728 832 7
2571894: 910 5 8 9 8 2 2 43 5 6 39
393543246398: 6 79 887 947 69 8
21805135: 11 93 7 73 58 5 35
40625413986: 677 6 54 1 325 3 726 7
129329: 3 1 2 256 7 1 9 14 5 249
49087845: 40 978 66 894 1 721 2
4216656: 4 212 4 647 9
25442241: 3 22 441 410 737 94
1725308935: 7 6 55 6 1 6 3 9 7 576 8 7
358416154: 2 8 2 2 7 90 41 4 1 61 5 4
5695326: 5 6 24 94 8 19 819
3495960: 3 61 11 9 69 3 15 312
2346392: 313 6 4 415 2 4 37
36979756: 231 4 493 9 4
2323245047: 879 9 6 9 581 6 6 5 6 6 5
922836399: 259 663 8 363 99
385543: 4 919 9 904 2 7 9 6 6 4 3
3605690865: 74 19 6 702 81 3
754553: 6 3 6 568 553
26695441: 7 5 7 6 5 2 1 6 70 7 234
2420298: 94 260 99 38 700
603024776: 3 39 4 9 75 51 779
860160048: 453 47 84 8 80 8 1 6 5 4
19072: 317 6 1 6 44
1251666: 539 43 2 3 8 9 6 5 9 4 6 6
14688: 9 6 139 2 46 34
5405: 6 92 23 44 76 5
10278040: 2 28 318 35 9 8 54 5 8
105740464: 6 94 51 7 404 65
163415: 761 4 37 3 7 29
1220: 446 529 242 3
1489672573: 5 9 89 6 71 603 969
646837: 64 6 5 3 37
29640891424: 807 87 644 4 91 7 424
1231633258: 3 9 5 2 5 497 34 7 9 9 9 1
110635274: 1 5 6 52 75 788 26 47
34292621: 647 53 987 550 84
1415706432: 698 331 2 7 8 74 2 1 83
412: 41 248 27 96
53773308: 4 9 7 6 5 8 7 44 6 9 1 522
10322676: 96 2 808 8 631 299 4
33766: 4 29 9 1 9 5 49 4 3 922 7
316707973: 8 5 732 36 36 317 3 73
239713: 7 1 4 3 65 37 532 5 2 3 1
412616502: 39 6 914 3 114
164080507: 23 209 93 517 76
1147995: 9 518 6 7 9 1 5 85 1 31
38189: 216 165 89
1352: 2 2 338
94848: 52 5 52 4 76
3431: 35 94 75 64 2
78549756: 75 243 431 6
92185289902: 4 5 72 1 8 5 233 56 902
298: 2 6 100 2 46
161028: 1 3 1 555 2 9 6 6 858 3 7
1534525: 816 4 5 94 445
130498923: 7 156 175 4 178 1
4583444550: 476 691 929 5 24 3 18
232294392: 63 9 9 51 24 33
17685502: 739 3 5 34 2 370 7 10 2
720634: 935 2 2 1 8 8 1 103 3 5 2
32327852: 2 463 31 95 547 6 9 1 1
51797: 40 1 8 36 4 7 1 6 5 801 6
140760: 2 6 2 69 85
7438: 2 7 4 122 606
54903: 73 741 174 595 41
27065: 8 8 6 173 9 2 21 2 6 545
52479: 9 8 2 49 7 5 7 9 6 8 89 38
472357: 6 1 80 335 6
682901: 3 29 34 7 61 33 91 4
6885: 1 66 90 553 1 6 288 7
263500: 7 2 54 986 250
18820675235: 743 9 253 52 34
23334339840: 4 1 5 956 5 8 31 4 8 123
1188316: 8 495 90 3 45
20504591: 201 2 2 46 3 1 7 4 2 3 9 6
297797764214235: 297 7 97 76 421 4 235
31726289959: 59 36 666 252 89 1 7
171645166: 2 383 938 9 197 3 8 30
539250093: 345 7 1 98 4 6 31 2 9 4 4
151209: 4 6 7 5 5 7 3 84 18 5 4
3206065541: 3 62 5 19 35 4 6 3 4 8 9 5
43403: 16 27 1 94 9
465630: 80 481 830
40851: 51 9 89
339581134: 1 675 94 578 763 354
1287: 918 26 8 335
563371816: 8 805 9 9 1 3 4 6 90 76
1384644257: 138 46 35 8 8 97 360
10150: 6 5 958 7 452 3
269082: 885 5 82 5 9 3 7 65 480
16754264: 89 1 502 375 5 9
146209073461: 7 615 4 2 3 70 8 2 7 7 60
640: 1 4 64 1 2
138233: 4 520 22 1 8 3 75 854
3289616284076: 60 9 1 1 8 8 3 6 9 203 9 2
78211049650: 752 26 6 7 9 4 96 50
641662: 71 3 619 27 14
756121120: 5 7 5 98 893 8 3 6 88 72
190920180: 6 9 69 55 486 89 1 22
4417: 228 3 5 991 6
1223602: 87 4 20 7 2
128242248923: 93 7 54 48 6 76 92 3
1407: 115 794 498
5665725: 757 15 99 65 65
649: 6 37 12
95292: 584 368 92
621075344751: 5 1 1 210 7 5 3 44 4 3 4 8
78540605508: 4 3 7 4 3 5 13 2 4 550 8
1890: 7 71 2 29 85 7
1052: 97 4 656 1 7
312089120: 8 39 48 3 3 344 44 5 56
618902: 244 634 6 5 2 4 4 62
2330433971: 364 64 2 3 3 3 395 6 6 9
4560701: 876 30 7 503
262: 72 54 98 1 38
3513950211: 29 8 7 10 23 7 20 8 9 64
131948998: 43 1 1 721 7 304 115 2
792500: 3 4 188 7 7 46 2 4 4 2 5 5
3906: 431 3 9 1
8525440: 9 1 80 82 386 84 56 80
9420: 9 5 7 1 65 1 34 36
4556893: 7 65 68 93
611890240500: 669 849 4 5 9 30 7 114
15364411776: 3 7 9 8 60 9 392 12 9 4
456237750: 8 28 32 9 44 45 750
1081609: 8 4 62 8 34 2 34 1
133: 28 90 3 6 6
588127471: 715 615 600 2 737
9506: 9 50 9
664286544: 9 699 95 937 39 4
4437: 4 426 8
964: 9 58 6
4690020: 9 17 7 7 61 7 5 1
470716287: 46 9 729 2 587 4 976 7
9258: 92 25 4 56 2
50672756232: 589 204 900 792 71
264130626: 5 2 73 7 2 118 7 7 49 2 6
5326: 47 6 1 2 6
6206284800: 1 3 656 54 730 80
7307052: 4 45 9 9 91 3 76 16 8 2
1453: 96 27 84 7 4
2963: 98 3 3 16
504: 4 8 6 4
65453473950: 889 7 242 8 38 4 8
1934525: 3 2 3 1 584 92 3 72 3 4 5
77778517: 3 640 5 1 4 7 2 6 6 871
25133525: 623 2 1 4 6 87 52 5
1755293137: 7 538 8 2 6 5 8 2 1 67 5 3
4005056: 267 10 5 11 7 3
489: 1 9 93 8 379
454722246: 5 6 82 7 4 36 3 5 48 5 6 1
79547344: 88 989 914 66 30
13099520: 5 61 4 5 3 4 7 4 2 1 5 43
4458680: 74 7 1 58 2 167 8 681
136160: 7 4 154 8 80
125: 3 2 4 86 3
52991568: 49 5 4 630 843 1 2 4 7 6
12739979: 17 4 276 9 49 244 7
277290067: 3 5 83 260 300 3 65 1
99745: 996 6 1 84
601574910: 18 42 698 1 795
156084: 6 3 4 5 7 77 74 629 3 5 9
117027836800: 5 184 8 115 8 560 7 5
337590: 72 2 41 35 2 55
14137400200467: 693 51 500 4 97 4 4 67
1791503044: 9 622 447 4 8 1 4
38271: 424 3 14 1 5 984 12 3
6756: 4 538 836 26 9 2 7 703
134593: 7 1 5 93 71 2 36 4 841
125750882530: 6 933 8 1 93 4 5 2 8 9 7
94930992: 11 1 94 8 4 1 7 2 408 39
1614: 4 4 214 7 4
2645205: 5 21 451 68 37
120: 8 52 2
7429: 20 4 53 5 28 3 541
1546605578: 85 8 6 419 5 4 3 9 7 7 1 7
5460: 6 2 6 97 7 3 7
1623414: 6 33 9 23 247 388 5 39
3141512: 8 615 1 4 638
1831517: 56 8 6 681 54 935
311326: 99 7 614 81 184
5802827578515: 403 238 505 43 605
773: 726 1 28 9 9
7607050: 5 4 3 5 7 558 4 6 97 4 4 2
4917: 48 4 2 64 7 4
121451402: 69 696 6 70 2 21 9 2
28864528: 42 699 2 338 4
19491507084: 77 7 625 3 84 914 84
6789125: 5 51 64 416 5
43: 4 34 1 5
12168: 335 1 34 757 21
207655426: 207 65 460 74 7 8 7 1
2608735203: 9 2 7 8 9 9 421 8 1 60 7 9
636844203: 16 5 19 452 8 44 20 3
7880787: 71 932 3 1 14 559 8
554491547: 85 7 4 6 90 7 2 81 9 6
1108283832: 601 674 36 18 76
21412: 5 68 4 7 6 58 609 97
117304660: 41 73 77 509 6 5
14571768: 113 6 25 5 513
13450950: 7 8 8 2 1 2 7 4 8 5 842 9
4676209064: 8 7 3 6 58 1 9 9 4 933
5265563525: 62 6 852 8 84 5
3638552: 7 38 7 897 1 3 78 8
254044056: 9 55 1 7 84 7 900 6 68 7
105408: 17 4 627 9 8
1793691533882: 574 90 8 906 1 39 9 4
65565: 715 5 18 463 6 79 9
54255702: 897 1 8 8 7 1 38 135 7 5
1387116: 8 6 7 7 8 44 6 3 963 727
316960839767: 387 91 871 9 766
1782: 5 154 8 990 14
803962: 7 901 138 6 2
420253599: 54 9 206 257 7 2 1 9 3 1
673728381163: 11 4 660 8 13 29 4 160
130275: 8 68 5 416 135
8605: 26 3 9 6 1 27 1 6 6 494 5
9423: 93 5 2 851 9
291: 9 236 2 44
4925376: 6 5 9 77 8 1 93
447661712477: 2 1 610 17 5 1 62 3 7 2 4
11385: 166 41 55
2396: 8 156 5 901 675
7555485: 88 92 2 933 8 43
98852355: 3 14 9 7 965 67 4 7 441
45373925520: 8 4 4 6 421 1 5 396 6 6 7
3852186680: 99 93 96 647 640 439
516188945046: 775 7 723 78 5 59 7 2
16401: 67 4 7 9 7 9 6 9 175 1 25
211540826: 675 8 8 6 865 48 24
999815: 921 8 778 43 82 4 6 80
20460339: 890 237 97 59 70
86357: 952 6 3 1 66 9
2306987: 99 7 51 55 8 22
1432751: 17 30 28 22 47 37
5272: 236 45 16 76 7 1 25 2
26384486: 39 224 84 475 14
24715754: 80 557 97 1 3 8 5 9 1 24
4536: 4 785 4 360 319 713
55339200: 5 7 36 12 5 21 1 183 5 1
73732059198: 4 9 11 906 7 7 14 3 699
11785692665: 5 7 79 11 2 336 73 977
92506: 4 7 20 84 5 6 9 91
5228: 52 2 8
5240069348: 8 131 500 3 66 345 3
7656204532: 7 77 235 24 204 532
507690334: 23 823 6 903 34
152484: 9 3 6 343 2 713 3 1 6
21576094: 586 193 490 1 82 17
5036130: 333 1 333 682 343 45
772: 4 45 3 4 40
18599805: 3 4 49 1 1 6 37 4 142 75
2344: 30 246 21 289 4
54678825468: 9 7 9 1 1 3 1 82 9 7 4 324
2332355134: 134 170 4 20 7 959 4
4031694373: 6 3 30 7 478 78 2 9 373
216365: 7 49 8 7 44 4 2 47 2 42 1
828881432: 225 5 759 493 17 5 32
2829: 3 13 177
77069560740: 7 64 6 686 9 60 7 40
102664: 347 5 5 59 2
87813: 8 78 13
279108: 6 9 49 40 487 571 92
71831: 1 5 8 15 1 85 2 2 79 3 4 6
12536652: 8 7 4 9 4 37 7 9 857 6
18334976: 3 1 744 383 64
319056: 1 280 9 23 8 6
50997665: 893 4 2 163 2 16 174 5
23910075: 849 8 542 305 1 313 5
564033510: 2 4 978 573 201 501 6
78185: 77 44 65 4 91
2408327: 78 325 95 27 50
6847167235786: 175 59 9 64 1 677 84 1
676192027: 38 5 2 5 95 704 1 20 7
9210625: 97 2 5 1 8 8 369 3 6 71 5
149467508: 5 5 44 29 9 4 2 3 39 5 2 7
2881560: 4 548 97 74 60
705581: 4 8 9 5 47 5 457 19 11
7099352: 307 47 123 71 4
105596: 8 4 2 48 5 6 615 3 8 63
1916395393: 3 8 93 53 450 4 21 9 3 1
3046752: 728 5 837 8 64
839964507: 8 82 22 8 1 4 2 3 3 55 2
62763803899: 73 359 8 53 82 29 50
26038272: 39 329 2 962 978
34544966004: 48 58 645 79 6 9
1091857: 9 131 89 9 7 86
8739163: 174 78 5 1 63
1931023586: 8 2 681 3 8 556 42 2
50110335881: 50 3 492 2 679 55 26
18450800: 2 3 558 4 23 46 44 4 4
170480169: 213 5 1 5 8 50 6 6 4 121
1583191718: 22 29 124 20 951 718
58278300: 5 30 77 901 8 3 1 537 3
19954019936: 46 597 974 28 746
47835: 7 5 339 1 4 375
2950614: 3 1 8 4 24 5 8 3 4 657 3 9
20218418039376: 8 733 560 99 9 9 29 16
593645: 9 9 842 5 94 9 3 86 4 1 5
9756318: 9 75 6 3 10 8
81682: 1 816 84
16349319245: 510 1 7 61 8 441 811 4
563: 2 38 298 222 3
202257905: 1 7 3 3 748 9 8 5 5 8 5 5
611: 2 36 7 8 2 24 7 66
3052838376: 86 39 8 76 714 423
24102208: 80 3 40 300 208
101249729: 775 82 4 29 1 45
251037: 597 7 60 297 1
5135827: 73 3 4 8 3 7 7 642 752
765688962: 10 755 6 889 62
46054478: 3 11 392 32 78
3046741074: 5 15 6 9 7 31 4 1 6 1 79 6
78426872: 303 123 23 3 92 2
105615620898: 808 840 247 5 8 14 63
7246: 9 724 48 5 7 2 9 71 20
411185: 45 30 57 51 282 29
49916614734: 6 26 799 19 7 2 9 7 233
20991601: 490 595 72 4
162000: 9 5 6 66 45 24
2376465: 6 74 5 7 586 7 7 5 91
12886208: 3 728 2 6 4 83 976 72 8
2260: 2 481 6 14 9 53 4
2619488: 68 9 886 2 8 872
55508933: 1 76 658 6 5 1 37 1 15 1
622441037: 8 40 741 921 76 38 2
746784739: 9 7 5 7 857 85 38 201
42583: 42 240 58 276 9
2095256607: 301 348 6 16 867 20 7
30464656500: 952 32 656 236 264
5482964: 1 781 5 17 8 7 4
25593445: 30 5 69 9 7 2 4 4 47 6 2 4
89866350: 255 80 659 91 607 7
1056968220: 7 10 3 3 1 9 9 8 3 13 70 6
2310: 62 8 33
1235556740811: 1 68 6 6 5 80 8 738 49 5
101463: 7 1 93 463
1103257: 6 70 583 7 88
8416: 24 310 663 48 265
13214: 55 9 6 675 4
694039781: 2 61 8 9 163 83 9 8 3 81
16108: 2 3 1 2 82 1 6 4 5 9 6 344
258732964: 3 3 36 77 2 3 1 1 4 4 4
18318720000: 8 940 1 7 5 800 87
73183536: 6 9 812 21 905 7 958 4
3324894013: 52 160 664 67 96 541
95257: 81 7 6 28 1
57837: 33 581 97 9 3
662694: 4 354 6 78 2 4
2364889710: 399 1 6 8 2 343 4 9 4 6 5
8610262887: 8 608 2 262 887
3529: 34 20 6 94 9
23103: 39 52 22 517 9
425555: 33 5 17 3 23 54
269307: 49 687 8 2 1
9831334502: 60 687 25 9 90 2
10570: 5 8 7 816 12
23328: 43 2 54
1405963584: 3 784 34 5 64 279
512336794: 9 635 5 7 781 7 9 4
44419: 91 703 55 189 560
24226: 2 33 973 6 8 4 2 1
53087944496: 88 3 542 5 23 96 371 6
14463656829960: 6 762 76 61 754 465
1543514: 92 4 2 926 6 4 17 5 623
108444: 500 83 93 3 2
5081: 4 89 5 2 7 5 5 2 6 806 3
41042792: 5 4 472 9 69 53 963 7
59919316: 49 10 919 310 6
78366193: 9 76 179 8 77 80 993
43544528825: 8 779 496 68 88 25
209352887: 89 961 95 71 7 349 2
17102646: 14 5 300 3 2 645
1759905302: 166 4 872 4 8 371 22
25339311: 620 83 328 406 445
13384271114: 5 5 8 13 2 4 5 41 7 53 13
2267301: 1 63 5 1 14 4 9 8 3 5 32 5
157516: 2 6 71 46 3 67 13 743
42511987: 604 2 31 7 940 49
8559129600: 44 304 50 4 427 72 4
3554208: 92 37 8 6 14 41
11856636: 52 95 6 6 3 3 58 35 4
7040454: 8 368 87 8 198 2 16 9 6
67075662080: 4 88 9 96 6 5 256 973
15365: 9 210 5 7
3522050: 77 625 57 145 9 32
143451167: 13 43 736 69 1 67
6000: 1 2 73 5 3 5 6 643 9 7 7 5
2634: 1 4 75 4 8 136 66
19507917513: 9 7 50 3 6 71 4 5 35 4 5 7
6195: 1 861 7 17 143
25405216: 3 93 8 27 3 5 6 2 1 6 9 16
658362315382: 2 351 635 9 62 7 7 2
24025: 66 630 79 31 1
5988: 527 7 593 38 6 74
1161183: 5 4 66 2 7 29 9 95 7 86
2143980333: 31 9 4 8 3 7 79 3 3 29 4
271600187810: 3 2 8 500 8 2 682 1 2 5 7
179937160: 7 465 4 586 65
883238: 5 83 3 144 94
236603: 234 1 164 790 648
45930082: 416 8 3 24 56 46
361: 44 78 218 14 7
7561056: 5 193 6 328 113 1
40701528: 21 36 997 6 9
29834957064: 6 50 218 2 9 8 88 7 9 3 4
162471582: 84 69 2 514 66 5 9 78
182397: 9 2 23 86 9
90664089: 3 488 983 63 33
254720133: 3 24 446 4 879
123643412: 2 14 1 3 60 637 85 6 9 3
4229339058: 51 831 625 223 441
61828439176: 5 76 640 3 5 4 1 7 599 5
11346604843: 3 7 2 223 1 3 4 8 3 6 8 45
5410078: 4 78 22 658 2
2244856: 22 447 65 1 91
194054: 437 7 9 38 62 91 7
7160807: 8 51 24 196 69 86 17
3121986: 37 98 861
1990763: 71 57 486 4 3 5 6 45 53
447665088: 3 8 776 43 559
165253: 3 18 60 84 253
181939844395: 963 664 43 1 472 4 9
876727800: 7 5 8 5 524 1 45 3 90 52
1210995: 52 4 4 2 66 849 7 1 6 3 6
189588141: 4 337 6 190 6 94 3 7 14
24355: 67 428 1 46 956 620 9
14661: 3 98 1 2 2 6 2 90 453 2 4
733201324719: 1 676 502 7 9 9 46 67 1
76566: 5 17 6 39 4 14 7
1840710690: 827 5 19 88 29 78 315
118727441423: 8 9 3 12 4 849 768 37 5
361804580: 719 2 2 125 29 86 1
3391065514: 1 200 26 1 7 884 651 4
39168: 934 42 3 2 4
1015196283: 194 821 18 6 1 10 283
1202295: 1 4 711 2 6 7 3 3 6 409 8
2620: 88 764 9 92 726 941
2915490003: 247 11 34 24 733 447
121934120: 6 796 322 91 8 59
857710: 420 1 5 8 5 3 7 8 842 7
215: 4 3 3 48 157
378639: 418 1 158 25 7 6 3 1 5 4
731698: 95 876 48 359 2 56
2012249: 515 3 7 1 4 36 9 3 3 776
1207856: 8 298 9 1 4 8 7 706 4 2
360: 5 8 9
337610: 7 80 918 9 2 599 1 35
7436787992: 4 50 205 8 4 876 207 8
412920: 6 783 6 6 87 60
13925: 6 7 3 6 1 419 3 5
13777486: 7 8 6 7 31 2 2 4 3 64 398
4427820206: 779 668 60 51 206
1177848: 798 8 783 7 738
40484341: 2 742 682 2 4 5 5 6 790
1921228890: 48 236 8 212 90
23256164: 238 2 51 19 5 4 4 20 4
16124: 3 34 5 4 707 96 3 4 51 4
7380844: 6 4 2 540 562 2 3 836 6
15190: 78 1 67 9 98
738150: 1 82 2 6 4 8 87 7 52 5 95
2716245: 7 978 645 9 35
557670792: 28 537 21 245 91 47
487: 296 72 90 9 20
11412362: 9 470 5 7 340 262
292852: 6 360 8 44 8
1591130113: 2 3 5 9 6 8 66 88 416 4 1
123867174: 3 8 8 96 7 4 6 8 5 1 4 290
1487: 85 88 655 606 53
4335142: 67 15 173 34 2 9 5
1650: 3 9 55 5 85 75
467739: 2 9 67 387 1 2 653 361
972474: 2 1 1 5 7 3 1 17 51 7 3
13997123: 62 125 86 3 75 6 7 56
1073: 953 68 52
392496: 7 27 531 39 8
1552320: 88 7 63 8 5
150359: 8 3 99 138 2 71 4
27306116366256: 972 440 9 37 38 312
3087758: 43 6 7 9 761
1359414: 9 19 1 9 314 79 7 93 6 7
3511: 1 2 5 5 4 6 408 7 1 49 2 1
1519753975: 5 969 9 2 4 4 1 9 3 4 652
4962043800: 17 72 6 98 4 567 235
713: 3 8 6 2 5 8 9 16 631 23 2
330806768: 59 3 8 8 62 4 7 8 7 7 1 68
3129984840: 6 8 882 2 6 44 6 3 4 9 5 8
9598397: 8 9 942 839 5
59508203: 5 85 56 2 3 3 5 5 3 25 2
732275: 63 6 385 8 66 847 4 5
1102: 98 177 2 1 2
2348312: 15 5 9 62 5 9 1 69 7 8 8
396951061159: 441 9 5 10 56 5 1 57
6953694: 6 952 8 2 86 1 4 1
692000: 6 19 682 7 2 925 10 5 8
2532487: 20 5 324 7 4 13
729354390: 6 50 838 6 74 2 7 5 8 3 6
4302: 4 80 2 50 2
295129889: 316 2 768 35 608
12765102409: 797 81 8 893 7 4 4 6
20661: 50 1 2 8 1 8 7 2 6 3 200 4
139749288: 83 2 3 334 36 7 5 4 3 24
10705351395: 3 929 8 519 2 192 99
51524659: 159 6 54 34 5 823 5 33
248123: 82 49 15 2 653
596338: 1 4 4 910 625 6 1 7 78
313140: 52 190 6
5366: 6 7 33 116 30
24097: 907 85 3 1 3 11 1 8 129
8246068: 82 45 4 85 583
17503168: 587 877 1 34 2
84655465: 3 328 7 50 89 281
11112385: 24 7 24 33 427 2 5
200828160: 468 960 149 3
969669: 15 1 8 6 226 9 79 34 23
7322887248072: 61 8 5 9 620 4 6 9 6 5 72
21805788: 8 756 9 4 5 6 5 73 9 7 9 6
3368004965: 11 22 668 3 965
191964102: 1 75 1 2 56 425 3 9 4 1 8
229452893: 539 43 99 5 93
1750029: 635 7 5 3 393
5224824: 924 3 6 56 23
129416: 191 9 36 36 65
2385184: 32 83 898 1 90 6
290964124306: 299 222 67 748 13
1236001: 454 18 5 37 70 519 52
15177419: 43 7 63 7 4 7 200 9 9 1
11411: 8 30 46 1 151 214 5 1
1790059: 447 4 1 4 59
24755916: 44 2 4 1 4 4 3 944 543
12739803835: 348 5 93 10 653 695
658319: 52 483 5 3 3 1 82 8 6 6 3
1054275964: 971 18 3 60 7 658 9 70
46408869891: 65 5 996 9 59 6 5 99 9
206861450: 881 1 4 60 393 557 5
2330889: 8 1 80 215 1 10 1 83 3
743694786: 3 841 8 583 9 9 26 56 2
274066801: 3 6 7 78 469 5 237 8 7 7
5297771: 298 1 8 7 8 77 2 9 8 2 27
439440: 2 1 15 3 300 2 9 5 907 8
48: 2 6 30 6
297254952: 5 7 36 1 940 6 732
314960685: 729 6 434 72 564 873
153151149060: 782 59 19 67 2 79 35 6
11811000: 19 6 767 87 423 600
7616092: 8 264 875 32 92
73684588: 1 72 68 3 349 331 908
43753200: 44 2 714 606 95
445628: 301 5 74 445 5 331 28
109997568: 6 4 9 584 327
506355: 98 490 861 87
5285667: 5 185 469 75 1 1 3 6 8 3
4124: 787 777 2 990 6
2296: 6 3 52 53 3 19 6 9 699
818730: 3 3 6 66 827
2441: 7 95 9 38 53 4 6 2 813
4517856: 4 35 51 6 63 747
4342: 8 3 7 25 8 2 27 6 9 24 5 7
128806662808: 19 5 5 23 9 696 8 131
303754266816: 664 14 9 22 546 272
31091671: 6 5 2 825 9 157 4 19
4239694: 6 9 3 28 2 20 8 5 3 2 409
120134644: 51 7 558 5 4 937 28
1055661: 9 2 2 58 61
47501: 89 840 1 9 644 30 11 1

View File

@ -0,0 +1,50 @@
....K..........................8.................z
.....n..............r...........z.................
.......................w....8.............3...E...
.....Q.....U..4.........8.........................
...............rc...w........i....................
...........K.........i..2.........................
..................4.....i.........................
K.....n....................w...........z..........
..U......Q........................I...............
..........i.....I.....Q....g....................5E
..Q......................................5........
..........c............8......w...g..........5....
.............................I.O..................
.Z.............4....b.....................k.......
..n........4......r..g..6..c.............3........
....Z............c................................
...................................x..............
.......................................O..........
...............U...................E..........5...
.....f..........................OI3......k........
..m.......o......F.......R........x...............
m...........o..v6..3...............X..............
..............H6v.....F.g.....................W...
...........o....Fb....v...............E...........
...Z.............a................................
......U6.............V............................
.9.............b..............pTk.................
.......m........V.........H1....x.................
...m.................H....................MX......
............t.a............H......................
........Z...a............v.....1..T..p.W..X.......
.............................9...x.......p........
.....J.....................V..1................0..
...........r..j..........a............pT..........
.G..................J...N......f..................
...........G......T....B........W.e...........M...
..........j.............Rk.............M..........
.........q.............MB......R.F..1..P....X...f.
............................V....o...........h....
...........................................W......
......b......u............................e.......
.............................................0....
..CA....Gt..O........................7.....e....0.
C.u......A..9J..N........................h.....e..
uj....q..........N.2..................7...........
G....N.....uJ...............................0.....
.................B................P.......h.......
...C....q...........R.........P...................
.....q..tC....2.9.....B............P....f.........
...............2.................................7

File diff suppressed because one or more lines are too long

20
y2024/src/bin/d10.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2024::days::d10;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/10_input.txt")).unwrap();
println!("{}", d10::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/10_input.txt")).unwrap();
println!("{}", d10::process_part2(&content));
}

20
y2024/src/bin/d3.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2024::days::d3;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/3_input.txt")).unwrap();
println!("{}", d3::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/3_input.txt")).unwrap();
println!("{}", d3::process_part2(&content));
}

20
y2024/src/bin/d4.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2024::days::d4;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/4_input.txt")).unwrap();
println!("{}", d4::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/4_input.txt")).unwrap();
println!("{}", d4::process_part2(&content));
}

20
y2024/src/bin/d5.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2024::days::d5;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/5_input.txt")).unwrap();
println!("{}", d5::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/5_input.txt")).unwrap();
println!("{}", d5::process_part2(&content));
}

20
y2024/src/bin/d6.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2024::days::d6;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/6_input.txt")).unwrap();
println!("{}", d6::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/6_input.txt")).unwrap();
println!("{}", d6::process_part2(&content));
}

20
y2024/src/bin/d7.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2024::days::d7;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/7_input.txt")).unwrap();
println!("{}", d7::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/7_input.txt")).unwrap();
println!("{}", d7::process_part2(&content));
}

20
y2024/src/bin/d8.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2024::days::d8;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/8_input.txt")).unwrap();
println!("{}", d8::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/8_input.txt")).unwrap();
println!("{}", d8::process_part2(&content));
}

20
y2024/src/bin/d9.rs Normal file
View File

@ -0,0 +1,20 @@
use std::fs;
use y2024::days::d9;
fn main() {
part1();
part2();
}
fn part1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/9_input.txt")).unwrap();
println!("{}", d9::process_part1(&content));
}
fn part2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/9_input.txt")).unwrap();
println!("{}", d9::process_part2(&content));
}

332
y2024/src/days/d10.rs Normal file
View File

@ -0,0 +1,332 @@
use itertools::Itertools;
#[derive(Debug, Clone, Copy, Default, Hash, PartialEq, Eq)]
struct TrailTile {
coords: (i32, i32),
height: u8,
up: Option<bool>,
down: Option<bool>,
left: Option<bool>,
right: Option<bool>,
}
impl TrailTile {
fn get_neighbors(&self, map: &[Vec<TrailTile>]) -> Vec<TrailTile> {
let mut neighbors = Vec::new();
if let Some(up) = self.up {
if up {
let neighbor = map[self.coords.1 as usize - 1][self.coords.0 as usize];
if neighbor.height == self.height + 1 {
neighbors.push(neighbor);
}
}
}
if let Some(down) = self.down {
if down {
let neighbor = map[self.coords.1 as usize + 1][self.coords.0 as usize];
if neighbor.height == self.height + 1 {
neighbors.push(neighbor);
}
}
}
if let Some(left) = self.left {
if left {
let neighbor = map[self.coords.1 as usize][self.coords.0 as usize - 1];
if neighbor.height == self.height + 1 {
neighbors.push(neighbor);
}
}
}
if let Some(right) = self.right {
if right {
let neighbor = map[self.coords.1 as usize][self.coords.0 as usize + 1];
if neighbor.height == self.height + 1 {
neighbors.push(neighbor);
}
}
}
neighbors
}
}
pub fn process_part1(input: &str) -> i32 {
let map = input
.lines()
.enumerate()
.map(|(yidx, line)| {
line.as_bytes()
.iter()
.enumerate()
.map(|(xidx, &height)| TrailTile {
coords: (xidx as i32, yidx as i32),
height,
..Default::default()
})
.collect_vec()
})
.collect_vec();
let mut updated_map = Vec::new();
let mut trailheads = Vec::new();
for row in map.iter() {
let mut new_row = Vec::new();
for tile in row {
let up = match map.get((tile.coords.1 - 1) as usize) {
Some(row) => {
let up = row[tile.coords.0 as usize];
Some(up.height == tile.height + 1)
}
None => None,
};
let down = match map.get((tile.coords.1 + 1) as usize) {
Some(row) => {
let down = row[tile.coords.0 as usize];
Some(down.height == tile.height + 1)
}
None => None,
};
let left = map[tile.coords.1 as usize]
.get((tile.coords.0 - 1) as usize)
.map(|left| left.height == tile.height + 1);
let right = map[tile.coords.1 as usize]
.get((tile.coords.0 + 1) as usize)
.map(|right| right.height == tile.height + 1);
let tile = TrailTile {
up,
down,
left,
right,
..*tile
};
if tile.height == b'0' {
trailheads.push(tile);
}
//print!(
// "{}: {}, {} ",
// tile.height as char, tile.coords.0, tile.coords.1
//);
new_row.push(tile);
}
//println!();
updated_map.push(new_row);
}
let mut res = 0;
//println!("0 {trailheads:?}");
for trailhead in trailheads {
let mut neighbors = trailhead.get_neighbors(&updated_map);
//println!("1 {neighbors:?}");
for _idx in 2..=9 {
//println!("{idx}");
if neighbors.is_empty() {
//println!("empty");
break;
}
let inner_neighbors = neighbors.clone();
neighbors.clear();
for neighbor in inner_neighbors {
neighbors.extend_from_slice(&neighbor.get_neighbors(&updated_map));
}
//println!("{idx} {neighbors:?}");
}
res += neighbors.iter().unique().count();
}
res as i32
}
pub fn process_part2(input: &str) -> i32 {
let map = input
.lines()
.enumerate()
.map(|(yidx, line)| {
line.as_bytes()
.iter()
.enumerate()
.map(|(xidx, &height)| TrailTile {
coords: (xidx as i32, yidx as i32),
height,
..Default::default()
})
.collect_vec()
})
.collect_vec();
let mut updated_map = Vec::new();
let mut trailheads = Vec::new();
for row in map.iter() {
let mut new_row = Vec::new();
for tile in row {
let up = match map.get((tile.coords.1 - 1) as usize) {
Some(row) => {
let up = row[tile.coords.0 as usize];
Some(up.height == tile.height + 1)
}
None => None,
};
let down = match map.get((tile.coords.1 + 1) as usize) {
Some(row) => {
let down = row[tile.coords.0 as usize];
Some(down.height == tile.height + 1)
}
None => None,
};
let left = map[tile.coords.1 as usize]
.get((tile.coords.0 - 1) as usize)
.map(|left| left.height == tile.height + 1);
let right = map[tile.coords.1 as usize]
.get((tile.coords.0 + 1) as usize)
.map(|right| right.height == tile.height + 1);
let tile = TrailTile {
up,
down,
left,
right,
..*tile
};
if tile.height == b'0' {
trailheads.push(tile);
}
//print!(
// "{}: {}, {} ",
// tile.height as char, tile.coords.0, tile.coords.1
//);
new_row.push(tile);
}
//println!();
updated_map.push(new_row);
}
let mut res = 0;
//println!("0 {trailheads:?}");
for trailhead in trailheads {
let mut neighbors = trailhead.get_neighbors(&updated_map);
//println!("1 {neighbors:?}");
for _idx in 2..=9 {
//println!("{idx}");
if neighbors.is_empty() {
//println!("empty");
break;
}
let inner_neighbors = neighbors.clone();
neighbors.clear();
for neighbor in inner_neighbors {
neighbors.extend_from_slice(&neighbor.get_neighbors(&updated_map));
}
//println!("{idx} {neighbors:?}");
}
res += neighbors.len();
}
res as i32
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT_SMALL: &str = "0123
1234
8765
9876";
const INPUT_LARGE: &str = "89010123
78121874
87430965
96549874
45678903
32019012
01329801
10456732";
const INPUT_SIMPLIFIED_1: &str = "...0...
...1...
...2...
6543456
7.....7
8.....8
9.....9";
const INPUT_SIMPLIFIED_2: &str = "..90..9
...1.98
...2..7
6543456
765.987
876....
987....";
const INPUT_SIMPLIFIED_3: &str = "10..9..
2...8..
3...7..
4567654
...8..3
...9..2
.....01";
const INPUT_SIMPLIFIED_4: &str = ".....0.
..4321.
..5..2.
..6543.
..7..4.
..8765.
..9....";
const INPUT_SIMPLIFIED_5: &str = "012345
123456
234567
345678
4.6789
56789.";
#[test]
fn part1_small() {
let result = process_part1(INPUT_SMALL);
assert_eq!(result, 1);
}
#[test]
fn part1_large() {
let result = process_part1(INPUT_LARGE);
assert_eq!(result, 36);
}
#[test]
fn part1_simplified_1() {
let result = process_part1(INPUT_SIMPLIFIED_1);
assert_eq!(result, 2);
}
#[test]
fn part1_simplified_2() {
let result = process_part1(INPUT_SIMPLIFIED_2);
assert_eq!(result, 4);
}
#[test]
fn part1_simplified_3() {
let result = process_part1(INPUT_SIMPLIFIED_3);
assert_eq!(result, 3);
}
#[test]
fn part2_small() {
let result = process_part2(INPUT_SMALL);
assert_eq!(result, 16);
}
#[test]
fn part2_large() {
let result = process_part2(INPUT_LARGE);
assert_eq!(result, 81);
}
#[test]
fn part2_simplified_2() {
let result = process_part2(INPUT_SIMPLIFIED_2);
assert_eq!(result, 13);
}
#[test]
fn part2_simplified_4() {
let result = process_part2(INPUT_SIMPLIFIED_4);
assert_eq!(result, 3);
}
#[test]
fn part2_simplified_5() {
let result = process_part2(INPUT_SIMPLIFIED_5);
assert_eq!(result, 227);
}
}

98
y2024/src/days/d3.rs Normal file
View File

@ -0,0 +1,98 @@
use regex::Regex;
pub fn process_part1(input: &str) -> i32 {
input
.lines()
.map(extract_mul_pairs)
.map(|pairs| pairs.iter().map(|(a, b)| a * b).sum::<i32>())
.sum()
}
// Could use this regex but wouldn't know how to solve part 2
// /mul\([0-9]{1,3},[0-9]{1,3}\)/g
// /don't\(\).*do\(\)/g would select anything between first don't() and last do()
// not sure how to fix, invert and combine this
fn extract_mul_pairs(line: &str) -> Vec<(i32, i32)> {
let reg = Regex::new(r"mul\([0-9]{1,3},[0-9]{1,3}\)").unwrap();
reg.find_iter(line)
.map(|m| {
let match_str = m.as_str();
let (a, b) = match_str[4..match_str.len() - 1].split_once(",").unwrap();
let a = a.parse::<i32>().unwrap();
let b = b.parse::<i32>().unwrap();
(a, b)
})
.collect::<Vec<(i32, i32)>>()
}
fn extract_mul_pairs_dont(line: &str) -> Vec<(i32, i32)> {
let reg = Regex::new(r"(mul\([0-9]{1,3},[0-9]{1,3}\))|(don't\(\)|do\(\))").unwrap();
let mut enabled = true;
reg.find_iter(line)
.map(|m| {
let match_str = m.as_str();
if match_str == "don't()" {
enabled = false;
} else if match_str == "do()" {
enabled = true;
}
if !["don't()", "do()"].contains(&match_str) && enabled {
let (a, b) = match_str[4..match_str.len() - 1].split_once(",").unwrap();
let a = a.parse::<i32>().unwrap();
let b = b.parse::<i32>().unwrap();
(a, b)
} else {
(0, 0)
}
})
.collect::<Vec<(i32, i32)>>()
}
pub fn process_part2(input: &str) -> i32 {
let input = input.lines().collect::<Vec<&str>>().join("");
extract_mul_pairs_dont(&input)
.into_iter()
.map(|(a, b)| a * b)
.sum()
}
#[cfg(test)]
mod tests {
use std::fs;
use super::*;
const INPUT: &str =
"xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))mul( 1, 3)";
const INPUT_2: &str =
"xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 161);
}
#[test]
fn res1() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/3_input.txt")).unwrap();
let result = process_part1(&content);
assert_eq!(result, 183788984);
}
#[test]
fn part2() {
let result = process_part2(INPUT_2);
assert_eq!(result, 48);
}
#[test]
fn res2() {
let root = env!("CARGO_MANIFEST_DIR");
let content = fs::read_to_string(format!("{root}/resources/3_input.txt")).unwrap();
let result = process_part2(&content);
assert_eq!(result, 62098619);
}
}

164
y2024/src/days/d4.rs Normal file
View File

@ -0,0 +1,164 @@
use std::cmp;
use utils::grid::Grid;
pub fn process_part1(input: &str) -> i32 {
let grid = input
.lines()
.map(|line| {
line.chars()
.map(|char| char.to_string())
.collect::<Vec<String>>()
})
.collect::<Vec<Vec<String>>>();
let mut grid = Grid::new(grid).unwrap();
let mut res = 0;
for row in &grid.rows {
let row = row.join("");
res += row.matches("XMAS").count();
res += row.matches("SAMX").count();
}
for diag_grave in grid.get_diagonals_grave() {
let diag_grave = diag_grave.join("");
res += diag_grave.matches("XMAS").count();
res += diag_grave.matches("SAMX").count();
}
for diag_aigu in grid.get_diagonals_aigu() {
let diag_aigu = diag_aigu.join("");
res += diag_aigu.matches("XMAS").count();
res += diag_aigu.matches("SAMX").count();
}
for col in grid.rotate_90().rows {
let col = col.join("");
res += col.matches("XMAS").count();
res += col.matches("SAMX").count();
}
res.try_into().unwrap()
}
pub fn process_part2(input: &str) -> i32 {
let grid = input
.lines()
.map(|line| {
line.chars()
.map(|char| char.to_string())
.collect::<Vec<String>>()
})
.collect::<Vec<Vec<String>>>();
let grid = Grid::new(grid).unwrap();
let mut res = 0;
// Irrelevant as this finds + not x
// But actually helpful as I can just create diagonals, left and right pad to create a square
// grid and apply this
//for (row_idx, row) in grid.rows.iter().enumerate() {
// if row_idx == 0 || row_idx == grid.rows.len() - 1 {
// continue;
// }
// let row = row.join("");
// for (match_idx, _) in row.match_indices("MAS") {
// let above = grid.rows[row_idx - 1][match_idx + 1].clone();
// let below = grid.rows[row_idx + 1][match_idx + 1].clone();
// if (above == "M" && below == "S") || (above == "S" && below == "M") {
// res += 1;
// }
// }
// for (match_idx, _) in row.match_indices("SAM") {
// let above = grid.rows[row_idx - 1][match_idx + 1].clone();
// let below = grid.rows[row_idx + 1][match_idx + 1].clone();
// if (above == "M" && below == "S") || (above == "S" && below == "M") {
// res += 1;
// }
// }
//}
let diagonals = grid.get_diagonals_grave();
// new width is as long as the longest diagonal
// the diagonal length goes from 1..min(grid width, grid height)
// then pad on each side by difference / 2
let new_width = cmp::min(grid.width as usize, grid.rows.len());
let mut even_grid = Vec::new();
let mut odd_grid = Vec::new();
for diagonal in diagonals {
let diagonal_length = diagonal.len();
let pad = (new_width - diagonal_length) / 2;
let new_row = [
vec!["#".to_string(); pad],
diagonal,
vec!["#".to_string(); pad],
]
.concat();
if diagonal_length % 2 == 0 {
even_grid.push(new_row);
} else {
odd_grid.push(new_row);
}
}
for (row_idx, row) in even_grid.iter().enumerate() {
if row_idx == 0 || row_idx == even_grid.len() - 1 {
continue;
}
let row = row.join("");
for (match_idx, _) in row.match_indices("MAS") {
let above = even_grid[row_idx - 1][match_idx + 1].clone();
let below = even_grid[row_idx + 1][match_idx + 1].clone();
if (above == "M" && below == "S") || (above == "S" && below == "M") {
res += 1;
}
}
for (match_idx, _) in row.match_indices("SAM") {
let above = even_grid[row_idx - 1][match_idx + 1].clone();
let below = even_grid[row_idx + 1][match_idx + 1].clone();
if (above == "M" && below == "S") || (above == "S" && below == "M") {
res += 1;
}
}
}
for (row_idx, row) in odd_grid.iter().enumerate() {
if row_idx == 0 || row_idx == odd_grid.len() - 1 {
continue;
}
let row = row.join("");
for (match_idx, _) in row.match_indices("MAS") {
let above = odd_grid[row_idx - 1][match_idx + 1].clone();
let below = odd_grid[row_idx + 1][match_idx + 1].clone();
if (above == "M" && below == "S") || (above == "S" && below == "M") {
res += 1;
}
}
for (match_idx, _) in row.match_indices("SAM") {
let above = odd_grid[row_idx - 1][match_idx + 1].clone();
let below = odd_grid[row_idx + 1][match_idx + 1].clone();
if (above == "M" && below == "S") || (above == "S" && below == "M") {
res += 1;
}
}
}
res
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "MMMSXXMASM
MSAMXMSMSA
AMXSXMAAMM
MSAMASMSMX
XMASAMXAMM
XXAMMXXAMA
SMSMSASXSS
SAXAMASAAA
MAMMMXMMMM
MXMXAXMASX";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 18);
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, 9);
}
}

181
y2024/src/days/d5.rs Normal file
View File

@ -0,0 +1,181 @@
#[derive(Clone, Debug)]
struct Page {
number: u32,
before: Vec<u32>,
after: Vec<u32>,
}
fn get_page(rules: &[Page], page_num: u32) -> Option<(Page, usize)> {
for (rule_idx, rule) in rules.iter().enumerate() {
if rule.number == page_num {
return Some((rule.clone(), rule_idx));
}
}
None
}
pub fn process_part1(input: &str) -> u32 {
let mut rules = Vec::new();
let (rules_str, update) = input.split_once("\n\n").unwrap();
for rule in rules_str.lines() {
let (before, after) = rule.split_once("|").unwrap();
let before: u32 = before.parse().unwrap();
let after: u32 = after.parse().unwrap();
if let Some((mut page, page_idx)) = get_page(&rules, before) {
page.after.push(after);
rules[page_idx] = page;
} else {
rules.push(Page {
number: before,
before: Vec::new(),
after: vec![after],
});
}
if let Some((mut page, page_idx)) = get_page(&rules, after) {
page.before.push(before);
rules[page_idx] = page;
} else {
rules.push(Page {
number: after,
before: vec![before],
after: Vec::new(),
});
}
}
update
.lines()
.map(|pages| {
let mut visited = Vec::new();
let pages = pages
.split(",")
.map(|page| page.parse::<u32>().unwrap())
.collect::<Vec<u32>>();
for &page_num in pages.iter() {
let (page_rules, _) = get_page(&rules, page_num).unwrap();
for after in page_rules.after {
if visited.contains(&after) {
return 0;
}
}
visited.push(page_num);
}
pages[pages.len() / 2]
})
.sum()
}
pub fn process_part2(input: &str) -> u32 {
let mut rules = Vec::new();
let (rules_str, update) = input.split_once("\n\n").unwrap();
for rule in rules_str.lines() {
let (before, after) = rule.split_once("|").unwrap();
let before: u32 = before.parse().unwrap();
let after: u32 = after.parse().unwrap();
if let Some((mut page, page_idx)) = get_page(&rules, before) {
page.after.push(after);
rules[page_idx] = page;
} else {
rules.push(Page {
number: before,
before: Vec::new(),
after: vec![after],
});
}
if let Some((mut page, page_idx)) = get_page(&rules, after) {
page.before.push(before);
rules[page_idx] = page;
} else {
rules.push(Page {
number: after,
before: vec![before],
after: Vec::new(),
});
}
}
update
.lines()
.map(|pages| {
let mut visited = Vec::new();
let mut is_ordered = true;
let pages = pages
.split(",")
.map(|page| page.parse::<u32>().unwrap())
.collect::<Vec<u32>>();
'outer: for &page_num in pages.iter() {
let (page_rules, _) = get_page(&rules, page_num).unwrap();
for after in page_rules.after {
if visited.contains(&after) {
is_ordered = false;
break 'outer;
}
}
visited.push(page_num);
}
if !is_ordered {
let mut ordered_pages = Vec::new();
for &page_num in pages.iter() {
let (page_rules, _) = get_page(&rules, page_num).unwrap();
let mut page_idx = ordered_pages.len();
for after in page_rules.after {
if let Some(after_idx) =
ordered_pages.iter().position(|&page| page == after)
{
if page_idx > after_idx {
page_idx = after_idx;
}
}
}
ordered_pages.insert(page_idx, page_num);
}
return ordered_pages[ordered_pages.len() / 2];
}
0
})
.sum()
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "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
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";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 143);
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, 123);
}
}

331
y2024/src/days/d6.rs Normal file
View File

@ -0,0 +1,331 @@
use std::{collections::HashSet, error::Error, fmt::Display};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
enum GuardDirection {
Up,
Down,
Left,
Right,
}
impl GuardDirection {
fn turn_right(&mut self) {
*self = match self {
GuardDirection::Up => GuardDirection::Right,
GuardDirection::Down => GuardDirection::Left,
GuardDirection::Left => GuardDirection::Up,
GuardDirection::Right => GuardDirection::Down,
};
}
}
impl From<GuardDirection> for char {
fn from(value: GuardDirection) -> Self {
match value {
GuardDirection::Up => '^',
GuardDirection::Down => 'v',
GuardDirection::Left => '<',
GuardDirection::Right => '>',
}
}
}
impl TryFrom<char> for GuardDirection {
type Error = Box<dyn Error>;
fn try_from(value: char) -> std::result::Result<GuardDirection, Box<dyn Error>> {
match value {
'^' => Ok(Self::Up),
'v' => Ok(Self::Down),
'<' => Ok(Self::Left),
'>' => Ok(Self::Right),
_ => Err(Box::from(format!("{value} is not a valid direction"))),
}
}
}
impl Display for GuardDirection {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
GuardDirection::Up => write!(f, "^"),
GuardDirection::Down => write!(f, "v"),
GuardDirection::Left => write!(f, "<"),
GuardDirection::Right => write!(f, ">"),
}
}
}
pub fn process_part1(input: &str) -> i32 {
let grid = input
.lines()
.map(|line| line.chars().collect::<Vec<char>>())
.collect::<Vec<Vec<char>>>();
get_visited_positions(grid, true).len() as i32
}
fn get_visited_positions(grid: Vec<Vec<char>>, initial: bool) -> HashSet<(i32, i32)> {
let width = grid[1].len() as i32;
let height = grid.len() as i32;
let mut crates: Vec<(i32, i32)> = Vec::new();
let mut guard_position = (0, 0);
let mut guard_direction = GuardDirection::Up;
for (row, line) in grid.into_iter().enumerate() {
for (col, chara) in line.into_iter().enumerate() {
if chara == '#' {
crates.push((col as i32, row as i32));
}
if chara == '.' {
continue;
}
if GuardDirection::try_from(chara).is_ok() {
guard_position = (col as i32, row as i32);
guard_direction = GuardDirection::try_from(chara).unwrap();
}
}
}
let mut visited_positions = HashSet::new();
if initial {
visited_positions.insert(guard_position);
}
loop {
match guard_direction {
GuardDirection::Up => {
let mut closest = (guard_position.0, -1);
crates.iter().for_each(|&crate_pos| {
if guard_position.0 == crate_pos.0
&& guard_position.1 > crate_pos.1
&& guard_position.1 - crate_pos.1 < guard_position.1 - closest.1
{
closest = crate_pos;
}
});
for idx in ((closest.1 + 1)..guard_position.1).rev() {
visited_positions.insert((guard_position.0, idx));
if idx == 0 {
return visited_positions;
}
}
guard_position.1 = closest.1 + 1;
guard_direction.turn_right();
}
GuardDirection::Down => {
let mut closest = (guard_position.0, height);
crates.iter().for_each(|&crate_pos| {
if guard_position.0 == crate_pos.0
&& guard_position.1 < crate_pos.1
&& crate_pos.1 - guard_position.1 < closest.1 - guard_position.1
{
closest = crate_pos;
}
});
for idx in (guard_position.1 + 1)..closest.1 {
visited_positions.insert((guard_position.0, idx));
if idx == height - 1 {
return visited_positions;
}
}
guard_position.1 = closest.1 - 1;
guard_direction.turn_right();
}
GuardDirection::Left => {
let mut closest = (-1, guard_position.1);
crates.iter().for_each(|&crate_pos| {
if guard_position.1 == crate_pos.1
&& guard_position.0 > crate_pos.0
&& guard_position.0 - crate_pos.0 < guard_position.0 - closest.0
{
closest = crate_pos;
}
});
for idx in ((closest.0 + 1)..guard_position.0).rev() {
visited_positions.insert((idx, guard_position.1));
if idx == 0 {
return visited_positions;
}
}
guard_position.0 = closest.0 + 1;
guard_direction.turn_right();
}
GuardDirection::Right => {
let mut closest = (width, guard_position.1);
crates.iter().for_each(|&crate_pos| {
if guard_position.1 == crate_pos.1
&& guard_position.0 < crate_pos.0
&& crate_pos.0 - guard_position.0 < closest.0 - guard_position.0
{
closest = crate_pos;
}
});
for idx in (guard_position.0 + 1)..closest.0 {
visited_positions.insert((idx, guard_position.1));
if idx == width - 1 {
return visited_positions;
}
}
guard_position.0 = closest.0 - 1;
guard_direction.turn_right();
}
};
}
}
// 1424
pub fn process_part2(input: &str) -> i32 {
let grid = input
.lines()
.map(|line| line.chars().collect::<Vec<char>>())
.collect::<Vec<Vec<char>>>();
let width = grid[1].len() as i32;
let height = grid.len() as i32;
let mut crates: Vec<(i32, i32)> = Vec::new();
let possible_obstacles: Vec<(i32, i32)> = Vec::from_iter(get_visited_positions(grid, false));
let mut initial_guard_position = (0, 0);
let mut initial_guard_direction = GuardDirection::Up;
for (row, line) in input.lines().enumerate() {
for (col, chara) in line.chars().enumerate() {
if chara == '#' {
crates.push((col as i32, row as i32));
}
if chara == '.' {
continue;
}
if GuardDirection::try_from(chara).is_ok() {
initial_guard_position = (col as i32, row as i32);
initial_guard_direction = GuardDirection::try_from(chara).unwrap();
}
}
}
let mut loops = 0;
for possible_obstacle in possible_obstacles {
let mut visited_obstacles = HashSet::new();
crates.push(possible_obstacle);
let mut guard_position = initial_guard_position;
let mut guard_direction = initial_guard_direction;
'loop_finder: loop {
match guard_direction {
GuardDirection::Up => {
let mut closest = (guard_position.0, -1);
crates.iter().for_each(|&crate_pos| {
if guard_position.0 == crate_pos.0
&& guard_position.1 > crate_pos.1
&& guard_position.1 - crate_pos.1 < guard_position.1 - closest.1
{
closest = crate_pos;
}
});
guard_position.1 = closest.1 + 1;
if closest.1 == -1 {
break 'loop_finder;
}
if visited_obstacles
.contains(&((guard_position.0, closest.1 + 1), guard_direction))
{
loops += 1;
break 'loop_finder;
}
visited_obstacles.insert(((guard_position.0, closest.1 + 1), guard_direction));
guard_direction.turn_right();
}
GuardDirection::Down => {
let mut closest = (guard_position.0, height);
crates.iter().for_each(|&crate_pos| {
if guard_position.0 == crate_pos.0
&& guard_position.1 < crate_pos.1
&& crate_pos.1 - guard_position.1 < closest.1 - guard_position.1
{
closest = crate_pos;
}
});
guard_position.1 = closest.1 - 1;
if closest.1 == height {
break 'loop_finder;
}
if visited_obstacles
.contains(&((guard_position.0, closest.1 - 1), guard_direction))
{
loops += 1;
break 'loop_finder;
}
visited_obstacles.insert(((guard_position.0, closest.1 - 1), guard_direction));
guard_direction.turn_right();
}
GuardDirection::Left => {
let mut closest = (-1, guard_position.1);
crates.iter().for_each(|&crate_pos| {
if guard_position.1 == crate_pos.1
&& guard_position.0 > crate_pos.0
&& guard_position.0 - crate_pos.0 < guard_position.0 - closest.0
{
closest = crate_pos;
}
});
guard_position.0 = closest.0 + 1;
if closest.0 == -1 {
break 'loop_finder;
}
if visited_obstacles
.contains(&((closest.0 + 1, guard_position.1), guard_direction))
{
loops += 1;
break 'loop_finder;
}
visited_obstacles.insert(((closest.0 + 1, guard_position.1), guard_direction));
guard_direction.turn_right();
}
GuardDirection::Right => {
let mut closest = (width, guard_position.1);
crates.iter().for_each(|&crate_pos| {
if guard_position.1 == crate_pos.1
&& guard_position.0 < crate_pos.0
&& crate_pos.0 - guard_position.0 < closest.0 - guard_position.0
{
closest = crate_pos;
}
});
guard_position.0 = closest.0 - 1;
if closest.0 == width {
break 'loop_finder;
}
if visited_obstacles
.contains(&((closest.0 - 1, guard_position.1), guard_direction))
{
loops += 1;
break 'loop_finder;
}
visited_obstacles.insert(((closest.0 - 1, guard_position.1), guard_direction));
guard_direction.turn_right();
}
};
}
crates.pop();
}
loops
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "....#.....
.........#
..........
..#.......
.......#..
..........
.#..^.....
........#.
#.........
......#...";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 41);
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, 6);
}
}

124
y2024/src/days/d7.rs Normal file
View File

@ -0,0 +1,124 @@
use std::iter::zip;
pub fn process_part1(input: &str) -> i64 {
input
.lines()
.map(|line| {
let (eq_result, equation) = line.split_once(": ").unwrap();
let eq_result = eq_result.parse::<i64>().unwrap();
let numbers = equation
.split(" ")
.map(|num| num.parse::<i64>().unwrap())
.collect::<Vec<i64>>();
let mut operators = vec!["+"; numbers.len() - 1];
let num_combinations = 2_u32.pow(operators.len() as u32);
for _ in 0..num_combinations {
let mut res = numbers[0];
for (num, op) in zip(numbers[1..].iter(), operators.iter()) {
if op == &"+" {
res += num;
}
if op == &"*" {
res *= num;
}
}
if res == eq_result {
return res;
}
operators = binary_add_operators(operators);
}
0
})
.sum()
}
// permutating all combinations of + and * is like counting in binary
fn binary_add_operators(operators: Vec<&str>) -> Vec<&str> {
let mut new_operators = operators.clone();
for (idx, operator) in operators.into_iter().enumerate() {
if operator == "+" {
new_operators[idx] = "*";
break;
}
new_operators[idx] = "+";
}
new_operators
}
pub fn process_part2(input: &str) -> i64 {
input
.lines()
.map(|line| {
let (eq_result, equation) = line.split_once(": ").unwrap();
let eq_result = eq_result.parse::<i64>().unwrap();
let numbers = equation
.split(" ")
.map(|num| num.parse::<i64>().unwrap())
.collect::<Vec<i64>>();
let mut operators = vec!["+"; numbers.len() - 1];
let num_combinations = 3_u32.pow(operators.len() as u32);
for _ in 0..num_combinations {
let mut res = numbers[0];
for (num, op) in zip(numbers[1..].iter(), operators.iter()) {
if op == &"+" {
res += num;
}
if op == &"*" {
res *= num;
}
if op == &"||" {
res = format!("{res}{num}").parse().unwrap();
}
}
if res == eq_result {
return res;
}
operators = ternary_add_operators(operators);
}
0
})
.sum()
}
// permutating all combinations of + and * is like counting in ternary
fn ternary_add_operators(operators: Vec<&str>) -> Vec<&str> {
let mut new_operators = operators.clone();
for (idx, operator) in operators.into_iter().enumerate() {
if operator == "+" {
new_operators[idx] = "*";
break;
} else if operator == "*" {
new_operators[idx] = "||";
break;
}
new_operators[idx] = "+";
}
new_operators
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "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";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 3749);
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, 11387);
}
}

227
y2024/src/days/d8.rs Normal file
View File

@ -0,0 +1,227 @@
use itertools::Itertools;
use std::collections::{HashMap, HashSet};
pub fn process_part1(input: &str) -> usize {
let mut antennas_freq_pos = HashMap::new();
// group all antenna positions by frequency
let grid = input
.lines()
.map(|line| line.chars().collect_vec())
.collect_vec();
let width = grid[0].len();
let height = grid.len();
for (y, line) in input.lines().enumerate() {
for (x, chara) in line.chars().enumerate() {
if chara == '.' {
continue;
}
antennas_freq_pos
.entry(chara)
.and_modify(|positions: &mut Vec<(isize, isize)>| {
positions.push((x as isize, y as isize))
})
.or_insert(vec![(x as isize, y as isize)]);
}
}
// get all combinations of 2 antennas by their frequency
// and get_antinodes
let mut antinodes = HashSet::new();
for (_freq, positions) in antennas_freq_pos {
let pairs = positions.into_iter().combinations(2);
for pair in pairs {
let (antinode_a, antinode_b) = get_antinodes(pair[0], pair[1]);
if antinode_a.0 >= 0
&& antinode_a.0 < width as isize
&& antinode_a.1 >= 0
&& antinode_a.1 < height as isize
{
antinodes.insert(antinode_a);
}
if antinode_b.0 >= 0
&& antinode_b.0 < width as isize
&& antinode_b.1 >= 0
&& antinode_b.1 < height as isize
{
antinodes.insert(antinode_b);
}
}
}
let mut antinodes = antinodes.iter().collect_vec();
antinodes.sort();
antinodes.len()
}
fn get_antinodes(
antenna_a: (isize, isize),
antenna_b: (isize, isize),
) -> ((isize, isize), (isize, isize)) {
let vec2 = ((antenna_a.0 - antenna_b.0), (antenna_a.1 - antenna_b.1));
let antinode_a = {
let antinode_a = ((antenna_a.0 + vec2.0), (antenna_a.1 + vec2.1));
if antinode_a == antenna_b {
((antenna_a.0 - vec2.0), (antenna_a.1 - vec2.1))
} else {
antinode_a
}
};
let antinode_b = {
let antinode_b = ((antenna_b.0 + vec2.0), (antenna_b.1 + vec2.1));
if antinode_b == antenna_a {
((antenna_b.0 - vec2.0), (antenna_b.1 - vec2.1))
} else {
antinode_b
}
};
(antinode_a, antinode_b)
}
fn get_reasonant_antinodes(
antenna_a: (isize, isize),
antenna_b: (isize, isize),
width: isize,
height: isize,
) -> Vec<(isize, isize)> {
let mut antinodes = HashSet::new();
antinodes.insert(antenna_a);
antinodes.insert(antenna_b);
let vec2 = ((antenna_a.0 - antenna_b.0), (antenna_a.1 - antenna_b.1));
let (mut a, mut b) = (antenna_a, antenna_b);
loop {
let antinode_a = {
let antinode_a = ((a.0 + vec2.0), (a.1 + vec2.1));
if antinode_a == b {
((a.0 - vec2.0), (a.1 - vec2.1))
} else {
antinode_a
}
};
if antinode_a.0 >= 0 && antinode_a.0 < width && antinode_a.1 >= 0 && antinode_a.1 < height {
antinodes.insert(antinode_a);
} else {
break;
}
b = a;
a = antinode_a;
}
let (mut a, mut b) = (antenna_a, antenna_b);
loop {
let antinode_b = {
let antinode_b = ((b.0 + vec2.0), (b.1 + vec2.1));
if antinode_b == a {
((b.0 - vec2.0), (b.1 - vec2.1))
} else {
antinode_b
}
};
if antinode_b.0 >= 0 && antinode_b.0 < width && antinode_b.1 >= 0 && antinode_b.1 < height {
antinodes.insert(antinode_b);
} else {
break;
}
a = b;
b = antinode_b;
}
antinodes.into_iter().collect_vec()
}
pub fn process_part2(input: &str) -> usize {
let mut antennas_freq_pos = HashMap::new();
// group all antenna positions by frequency
let grid = input
.lines()
.map(|line| line.chars().collect_vec())
.collect_vec();
let width = grid[0].len();
let height = grid.len();
for (y, line) in input.lines().enumerate() {
for (x, chara) in line.chars().enumerate() {
if chara == '.' {
continue;
}
antennas_freq_pos
.entry(chara)
.and_modify(|positions: &mut Vec<(isize, isize)>| {
positions.push((x as isize, y as isize))
})
.or_insert(vec![(x as isize, y as isize)]);
}
}
// get all combinations of 2 antennas by their frequency
// and get_antinodes
let mut all_antinodes: HashSet<(isize, isize)> = HashSet::new();
for (_freq, positions) in antennas_freq_pos {
let pairs = positions.into_iter().combinations(2);
for pair in pairs {
let (a, b) = (pair[0], pair[1]);
let antinodes = get_reasonant_antinodes(a, b, width as isize, height as isize);
all_antinodes.extend(antinodes.iter());
}
}
let mut antinodes = all_antinodes.iter().collect_vec();
antinodes.sort();
antinodes.len()
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT: &str = "............
........0...
.....0......
.......0....
....0.......
......A.....
............
............
........A...
.........A..
............
............";
#[test]
fn part1() {
let result = process_part1(INPUT);
assert_eq!(result, 14);
}
#[test]
fn test_get_antinodes_1() {
let antenna_a = (5, 2);
let antenna_b = (7, 3);
let (antinode_a, antinode_b) = get_antinodes(antenna_a, antenna_b);
assert_eq!(antinode_a, (3, 1));
assert_eq!(antinode_b, (9, 4));
}
#[test]
fn test_get_antinodes_2() {
let antenna_a = (5, 2);
let antenna_b = (8, 1);
let (antinode_a, antinode_b) = get_antinodes(antenna_a, antenna_b);
assert_eq!(antinode_a, (2, 3));
assert_eq!(antinode_b, (11, 0));
}
#[test]
fn part2() {
let result = process_part2(INPUT);
assert_eq!(result, 34);
}
#[test]
fn part2_simple() {
let input = "T.........
...T......
.T........
..........
..........
..........
..........
..........
..........
..........";
let result = process_part2(input);
assert_eq!(result, 9);
}
}

129
y2024/src/days/d9.rs Normal file
View File

@ -0,0 +1,129 @@
pub fn process_part1(input: &str) -> u64 {
let mut ids = Vec::new();
for (file_id, chunk) in input.trim_end().as_bytes().chunks(2).enumerate() {
let byte = chunk[0];
for _ in 0..(byte - 48) {
ids.push(file_id.to_string());
}
if let Some(&byte) = chunk.get(1) {
for _ in 0..(byte - 48) {
ids.push(".".into());
}
}
}
let mut ordered = Vec::new();
while !ids.is_empty() {
let id = ids.remove(0);
if id == "." {
while let Some(id) = ids.pop() {
if id != "." {
ordered.push(id);
break;
}
}
} else {
ordered.push(id);
}
}
let mut res = 0;
for (multiplier, id) in ordered.iter().enumerate() {
res += multiplier * id.parse::<usize>().unwrap();
}
res as u64
}
pub fn process_part2(input: &str) -> u64 {
let mut ids = Vec::new();
for (file_id, chunk) in input.trim_end().as_bytes().chunks(2).enumerate() {
let byte = chunk[0];
ids.push((file_id.to_string(), byte - 48));
if let Some(&byte) = chunk.get(1) {
ids.push((".".into(), byte - 48));
}
}
let mut from_idx = ids.len() - 1;
loop {
if from_idx == 0 {
break;
}
let (id, size) = ids[from_idx].clone();
if id == *"." {
from_idx -= 1;
continue;
}
let to_idx = if let Some(idx) = ids.iter().position(|id| id.1 >= size && id.0 == ".") {
idx
} else {
from_idx -= 1;
continue;
};
if from_idx < to_idx {
from_idx -= 1;
continue;
}
let free_space = ids[to_idx].1;
match size.cmp(&free_space) {
std::cmp::Ordering::Less => {
let remaining_free_space = free_space - size;
ids[to_idx].1 = remaining_free_space;
ids[from_idx] = (".".to_string(), size);
ids.insert(to_idx, (id.clone(), size));
from_idx -= 1;
}
std::cmp::Ordering::Equal => {
ids[to_idx] = (id.clone(), size);
ids[from_idx] = (".".to_string(), size);
from_idx -= 1;
}
std::cmp::Ordering::Greater => {
from_idx -= 1;
}
}
}
let mut res = 0;
let mut multiplier = 0;
for (id, size) in ids.into_iter() {
if id == *"." {
multiplier += size as usize;
continue;
}
for _idx in 0..size as usize {
res += multiplier * id.parse::<usize>().unwrap();
multiplier += 1;
}
}
res as u64
}
#[cfg(test)]
mod tests {
use super::*;
const INPUT_1: &str = "12345";
const INPUT_2: &str = "2333133121414131402";
const INPUT_3: &str = "23331331214141314020202";
#[test]
fn part1_simple() {
let result = process_part1(INPUT_1);
assert_eq!(result, 60);
}
#[test]
fn part1_complex_1() {
let result = process_part1(INPUT_2);
assert_eq!(result, 1928);
}
#[test]
fn part1_complex_2() {
let result = process_part1(INPUT_3);
assert_eq!(result, 2842);
}
#[test]
fn part2() {
let result = process_part2(INPUT_2);
assert_eq!(result, 2858)
}
}

View File

@ -1,3 +1,11 @@
pub mod d1;
pub mod d2;
pub mod d3;
pub mod d4;
pub mod d5;
pub mod d6;
pub mod d7;
pub mod d8;
pub mod d9;
pub mod d10;