Compare commits
	
		
			23 Commits
		
	
	
		
			64cb7fb370
			...
			9b2497f31e
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9b2497f31e | |||
| ada97e5ad6 | |||
| b457e10a35 | |||
| 961bc666d6 | |||
| f61f1567cf | |||
| 49633b8504 | |||
| 8fd9bcd63a | |||
| a09f89896d | |||
| d12175371e | |||
| 3da784f97d | |||
| b39f312e9f | |||
| f663a57db8 | |||
| 33ba8d72f4 | |||
| 29a122c3ff | |||
| dafe576fc9 | |||
| 900f01913f | |||
| f952db1e0f | |||
| 1ec3c9c939 | |||
| 27e9e60089 | |||
| d06a694543 | |||
| d655185336 | |||
| f468af10f4 | |||
| 4d1477d7c1 | 
							
								
								
									
										69
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										69
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							| @@ -2,25 +2,84 @@ | |||||||
| # It is not intended for manual editing. | # It is not intended for manual editing. | ||||||
| version = 4 | 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]] | [[package]] | ||||||
| name = "genaoc" | name = "genaoc" | ||||||
| version = "0.1.0" | 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]] | [[package]] | ||||||
| name = "md5" | name = "md5" | ||||||
| version = "0.7.0" | version = "0.7.0" | ||||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
| checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" | 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]] | [[package]] | ||||||
| name = "utils" | name = "utils" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
| source = "git+https://git.plobos.xyz/projects/PuzzleUtils.git#49b0f24c1bdc2c04df237634607df15f19fb3ead" |  | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "y2015" | name = "y2015" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
| dependencies = [ | dependencies = [ | ||||||
|  |  "itertools", | ||||||
|  "md5", |  "md5", | ||||||
|  "utils", |  "utils", | ||||||
| ] | ] | ||||||
| @@ -28,6 +87,9 @@ dependencies = [ | |||||||
| [[package]] | [[package]] | ||||||
| name = "y2016" | name = "y2016" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
|  | dependencies = [ | ||||||
|  |  "md5", | ||||||
|  | ] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "y2017" | name = "y2017" | ||||||
| @@ -60,3 +122,8 @@ version = "0.1.0" | |||||||
| [[package]] | [[package]] | ||||||
| name = "y2024" | name = "y2024" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
|  | dependencies = [ | ||||||
|  |  "itertools", | ||||||
|  |  "regex", | ||||||
|  |  "utils", | ||||||
|  | ] | ||||||
|   | |||||||
| @@ -19,4 +19,7 @@ members = [ | |||||||
| ] | ] | ||||||
|  |  | ||||||
| [workspace.dependencies] | [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" | ||||||
|   | |||||||
							
								
								
									
										179
									
								
								day22.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								day22.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,179 @@ | |||||||
|  | 'use strict'; | ||||||
|  |  | ||||||
|  | var bossStats = { | ||||||
|  | 	hp: 71, | ||||||
|  | 	damageAmt: 10, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class Player { | ||||||
|  | 	constructor(initial, isWizard) { | ||||||
|  | 		this.history = []; | ||||||
|  | 		this.initial = initial; | ||||||
|  | 		this.isWizard = !!isWizard; | ||||||
|  |  | ||||||
|  | 		if (this.isWizard) { | ||||||
|  | 			this.spells = [ | ||||||
|  | 				{ | ||||||
|  | 					cost: 53, | ||||||
|  | 					effect: (m, o) => o.damage(4), | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					cost: 73, | ||||||
|  | 					effect: (m, o) => { o.damage(2); m.hp += 2; }, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					cost: 113, | ||||||
|  | 					start: (m, o) => m.armor += 7, | ||||||
|  | 					effect: (m, o) => { }, | ||||||
|  | 					end: (m, o) => m.armor -= 7, | ||||||
|  | 					duration: 6, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					cost: 173, | ||||||
|  | 					effect: (m, o) => o.damage(3), | ||||||
|  | 					duration: 6, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					cost: 229, | ||||||
|  | 					effect: (m, o) => m.mana += 101, | ||||||
|  | 					duration: 5, | ||||||
|  | 				}, | ||||||
|  | 			]; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		this.start(); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	attack(opponent, spellIdx) { | ||||||
|  | 		if (!this.isWizard) { | ||||||
|  | 			opponent.damage(this.damageAmt); | ||||||
|  | 		} else { | ||||||
|  | 			this.history.push(spellIdx); | ||||||
|  | 			var spell = this.spells[spellIdx]; | ||||||
|  | 			this.spent += spell.cost; | ||||||
|  | 			this.mana -= spell.cost; | ||||||
|  |  | ||||||
|  | 			if (spell.duration) { | ||||||
|  | 				var newSpell = { | ||||||
|  | 					idx: spellIdx, | ||||||
|  | 					effect: spell.effect, | ||||||
|  | 					duration: spell.duration, | ||||||
|  | 				}; | ||||||
|  | 				if (spell.start) { | ||||||
|  | 					spell.start(this, opponent); | ||||||
|  | 				} | ||||||
|  | 				if (spell.end) { | ||||||
|  | 					newSpell.end = spell.end; | ||||||
|  | 				} | ||||||
|  | 				this.activeSpells.push(newSpell); | ||||||
|  | 			} else { | ||||||
|  | 				spell.effect(this, opponent); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	damage(n) { | ||||||
|  | 		this.hp -= Math.max(1, n - this.armor); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	duplicate() { | ||||||
|  | 		var newPlayer = new Player(this.initial, this.isWizard); | ||||||
|  | 		newPlayer.hp = this.hp; | ||||||
|  | 		newPlayer.spent = this.spent; | ||||||
|  | 		newPlayer.armor = this.armor; | ||||||
|  | 		newPlayer.turn = this.turn; | ||||||
|  | 		for (var i = 0; i < this.activeSpells.length; i++) { | ||||||
|  | 			newPlayer.activeSpells.push(Object.assign({}, this.activeSpells[i])); | ||||||
|  | 		} | ||||||
|  | 		for (var i = 0; i < this.history.length; i++) { | ||||||
|  | 			newPlayer.history.push(this.history[i]); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if (this.isWizard) | ||||||
|  | 			newPlayer.mana = this.mana; | ||||||
|  | 		else | ||||||
|  | 			newPlayer.damageAmt = this.damageAmt; | ||||||
|  |  | ||||||
|  | 		return newPlayer; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	takeTurn(opponent) { | ||||||
|  | 		this.turn++; | ||||||
|  |  | ||||||
|  | 		for (var i = 0; i < this.activeSpells.length; i++) { | ||||||
|  | 			var spell = this.activeSpells[i]; | ||||||
|  |  | ||||||
|  | 			if (spell.duration > 0) { | ||||||
|  | 				spell.effect(this, opponent); | ||||||
|  | 				spell.duration--; | ||||||
|  |  | ||||||
|  | 				if (spell.duration === 0 && spell.end) { | ||||||
|  | 					spell.end(this, opponent); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	start() { | ||||||
|  | 		this.hp = this.initial.hp; | ||||||
|  | 		this.spent = 0; | ||||||
|  | 		this.armor = 0; | ||||||
|  | 		this.turn = 0; | ||||||
|  | 		this.activeSpells = []; | ||||||
|  | 		if (this.isWizard) | ||||||
|  | 			this.mana = this.initial.mana; | ||||||
|  | 		else | ||||||
|  | 			this.damageAmt = this.initial.damageAmt; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | var me = new Player({ hp: 50, mana: 500 }, true); | ||||||
|  | var boss = new Player(bossStats); | ||||||
|  |  | ||||||
|  | var cheapestSpent = Infinity; | ||||||
|  |  | ||||||
|  | function playAllGames(me, boss, partTwo, depth) { | ||||||
|  | 	depth = depth || 0; | ||||||
|  | 	for (var i = 0; i < me.spells.length; i++) { | ||||||
|  | 		var spellMatch = false; | ||||||
|  | 		for (var j = 0; j < me.activeSpells.length; j++) { | ||||||
|  | 			if (me.activeSpells[j].duration > 1 && i === me.activeSpells[j].idx) { | ||||||
|  | 				spellMatch = true;; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if (spellMatch) | ||||||
|  | 			continue; | ||||||
|  | 		if (me.spells[i].cost > me.mana) { | ||||||
|  | 			continue; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		var newMe = me.duplicate(); | ||||||
|  | 		var newBoss = boss.duplicate(); | ||||||
|  |  | ||||||
|  | 		if (partTwo) | ||||||
|  | 			newMe.hp--; | ||||||
|  |  | ||||||
|  | 		newMe.takeTurn(newBoss); | ||||||
|  | 		newBoss.takeTurn(newMe); | ||||||
|  | 		newMe.attack(newBoss, i); | ||||||
|  |  | ||||||
|  | 		newMe.takeTurn(newBoss); | ||||||
|  | 		newBoss.takeTurn(newMe); | ||||||
|  | 		newBoss.attack(newMe); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 		if (newBoss.hp <= 0) { | ||||||
|  | 			cheapestSpent = Math.min(cheapestSpent, newMe.spent); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if (newMe.hp > (partTwo ? 1 : 0) && newBoss.hp > 0 && newMe.spent < cheapestSpent) | ||||||
|  | 			playAllGames(newMe, newBoss, partTwo, depth + 1); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | playAllGames(me, boss); | ||||||
|  | console.log('Part One:', cheapestSpent); | ||||||
|  | cheapestSpent = Infinity; | ||||||
|  | playAllGames(me, boss, true); | ||||||
|  | console.log('Part Two:', cheapestSpent); | ||||||
							
								
								
									
										4
									
								
								justfile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								justfile
									
									
									
									
									
								
							| @@ -1,8 +1,8 @@ | |||||||
| gen year day: | gen year *day: | ||||||
| 	cargo run -- {{year}} {{day}} | 	cargo run -- {{year}} {{day}} | ||||||
|  |  | ||||||
| run year day: | run year day: | ||||||
| 	cargo run --package y{{year}} --bin d{{day}} | 	cargo run --package y{{year}} --bin d{{day}} | ||||||
|  |  | ||||||
| test year day *part='1': | 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 | ||||||
|   | |||||||
| @@ -4,5 +4,6 @@ version = "0.1.0" | |||||||
| edition = "2021" | edition = "2021" | ||||||
|  |  | ||||||
| [dependencies] | [dependencies] | ||||||
| md5 = "0.7.0" | md5 = { workspace = true } | ||||||
| utils = { workspace = true } | utils = { workspace = true } | ||||||
|  | itertools = { workspace = true } | ||||||
|   | |||||||
							
								
								
									
										49
									
								
								y2015/resources/23_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								y2015/resources/23_input.txt
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										29
									
								
								y2015/resources/24_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								y2015/resources/24_input.txt
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										1
									
								
								y2015/resources/25_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								y2015/resources/25_input.txt
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2015/src/bin/d23.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2015/src/bin/d24.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										9
									
								
								y2015/src/bin/d25.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | use y2015::days::d25; | ||||||
|  |  | ||||||
|  | fn main() { | ||||||
|  |     part1(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | fn part1() { | ||||||
|  |     println!("{}", d25::process_part1(3075, 2981)); | ||||||
|  | } | ||||||
| @@ -24,20 +24,20 @@ pub fn process_part1(input: &str) -> u32 { | |||||||
|     }; |     }; | ||||||
|     let mut smallest = u32::MAX; |     let mut smallest = u32::MAX; | ||||||
|     let mut leafs = vec![start]; |     let mut leafs = vec![start]; | ||||||
|     let mut test = 0; |  | ||||||
|     println!("start"); |     println!("start"); | ||||||
|  |     // Playing, Win, Loss | ||||||
|  |     let mut stats = (0, 0, 0); | ||||||
|     loop { |     loop { | ||||||
|         println!("iter: {test},"); |  | ||||||
|         let current_leafs = leafs.clone(); |         let current_leafs = leafs.clone(); | ||||||
|         println!("leaf count: {}", current_leafs.len()); |  | ||||||
|         leafs.clear(); |         leafs.clear(); | ||||||
|         // create potential rounds |         // create potential rounds | ||||||
|         for leaf in current_leafs { |         for leaf in current_leafs { | ||||||
|             if leaf.state == State::Playing { |             if leaf.state == State::Playing { | ||||||
|                 //println!("try for leaf"); |  | ||||||
|                 for spell in Spell::get_all() { |                 for spell in Spell::get_all() { | ||||||
|                     match spell.name { |                     match spell.name { | ||||||
|                         SpellID::MagicMissile | SpellID::Drain => {} |                         SpellID::MagicMissile | SpellID::Drain => { | ||||||
|  |                             leafs.push(leaf.use_spell(spell, false)); | ||||||
|  |                         } | ||||||
|                         SpellID::Shield => { |                         SpellID::Shield => { | ||||||
|                             if !leaf |                             if !leaf | ||||||
|                                 .player |                                 .player | ||||||
| @@ -45,68 +45,151 @@ pub fn process_part1(input: &str) -> u32 { | |||||||
|                                 .iter() |                                 .iter() | ||||||
|                                 .any(|effect| effect.name == SpellID::Shield && effect.duration > 1) |                                 .any(|effect| effect.name == SpellID::Shield && effect.duration > 1) | ||||||
|                             { |                             { | ||||||
|                                 continue; |                                 leafs.push(leaf.use_spell(spell, false)); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|                         SpellID::Poison => { |                         SpellID::Poison => { | ||||||
|                             if !leaf |                             if !leaf | ||||||
|                                 .player |                                 .boss | ||||||
|                                 .status_effects |                                 .status_effects | ||||||
|                                 .iter() |                                 .iter() | ||||||
|                                 .any(|effect| effect.name == SpellID::Poison && effect.duration > 1) |                                 .any(|effect| effect.name == SpellID::Poison && effect.duration > 1) | ||||||
|                             { |                             { | ||||||
|                                 continue; |                                 leafs.push(leaf.use_spell(spell, false)); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
|                         SpellID::Recharge => { |                         SpellID::Recharge => { | ||||||
|                             if !leaf.player.status_effects.iter().any(|effect| { |                             if !leaf.player.status_effects.iter().any(|effect| { | ||||||
|                                 effect.name == SpellID::Recharge && effect.duration > 1 |                                 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 { |         for leaf in &leafs { | ||||||
|             if leaf.state == State::Win && leaf.spent_mana < smallest { |             if leaf.state == State::Win && leaf.spent_mana < smallest { | ||||||
|                 smallest = leaf.spent_mana; |                 smallest = leaf.spent_mana; | ||||||
|             } |             } | ||||||
|  |             match leaf.state { | ||||||
|  |                 State::Playing => stats.0 += 1, | ||||||
|  |                 State::Win => stats.1 += 1, | ||||||
|  |                 State::Loss => stats.2 += 1, | ||||||
|  |             }; | ||||||
|             //println!( |             //println!( | ||||||
|             //    "player hp: {}, boss hp: {}, spent mana so far: {}", |             //    "player hp: {}, boss hp: {}, spent mana so far: {}", | ||||||
|             //    leaf.player.hp, leaf.boss.hp, leaf.spent_mana |             //    leaf.player.hp, leaf.boss.hp, leaf.spent_mana | ||||||
|             //); |             //); | ||||||
|         } |         } | ||||||
|         leafs = leafs |         println!("Playing, win, loss: {stats:?}"); | ||||||
|             .clone() |         leafs.retain(|leaf| leaf.state == State::Playing && leaf.spent_mana < smallest); | ||||||
|             .iter() |  | ||||||
|             .filter(|&leaf| leaf.state == State::Playing || leaf.spent_mana <= smallest) |  | ||||||
|             .map(|leaf| leaf.to_owned()) |  | ||||||
|             .collect(); |  | ||||||
|         if leafs.is_empty() { |         if leafs.is_empty() { | ||||||
|             break; |             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}"); |         println!(" smallest: {smallest}"); | ||||||
|     } |     } | ||||||
|     smallest |     smallest | ||||||
| } | } | ||||||
|  |  | ||||||
| pub fn process_part2(input: &str) -> u32 { | 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)] | #[derive(Debug, Clone, PartialEq, Eq)] | ||||||
| @@ -125,7 +208,7 @@ struct RoundNode { | |||||||
| } | } | ||||||
|  |  | ||||||
| impl 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 { |         if self.state != State::Playing { | ||||||
|             eprintln!("State: {:#?}", self.state); |             eprintln!("State: {:#?}", self.state); | ||||||
|             eprintln!("spell: {spell:#?}"); |             eprintln!("spell: {spell:#?}"); | ||||||
| @@ -133,10 +216,25 @@ impl RoundNode { | |||||||
|         } |         } | ||||||
|         let mut player = self.player.clone(); |         let mut player = self.player.clone(); | ||||||
|         let mut boss = self.boss.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 |         // Player turn | ||||||
|         for effect in player.status_effects.iter_mut() { |         for effect in player.status_effects.iter_mut() { | ||||||
|             if effect.name == SpellID::Recharge { |             if effect.name == SpellID::Recharge { | ||||||
|                 player.mana += effect.mana; |                 player.mana += effect.mana; | ||||||
|  |                 if effect.duration > 1 { | ||||||
|  |                     recharge_actif = true; | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|             effect.duration -= 1; |             effect.duration -= 1; | ||||||
|             if effect.duration > 0 && effect.name == SpellID::Shield { |             if effect.duration > 0 && effect.name == SpellID::Shield { | ||||||
| @@ -167,8 +265,15 @@ impl RoundNode { | |||||||
|             .into_iter() |             .into_iter() | ||||||
|             .filter(|&effect| effect.duration > 0) |             .filter(|&effect| effect.duration > 0) | ||||||
|             .collect::<Vec<Spell>>(); |             .collect::<Vec<Spell>>(); | ||||||
|         let used_mana = spell.cost; |  | ||||||
|         let mut dmg = 0; |         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 { |         match spell.name { | ||||||
|             SpellID::MagicMissile => { |             SpellID::MagicMissile => { | ||||||
|                 player.mana = player.mana.saturating_sub(spell.cost); |                 player.mana = player.mana.saturating_sub(spell.cost); | ||||||
| @@ -198,15 +303,15 @@ impl RoundNode { | |||||||
|             return RoundNode { |             return RoundNode { | ||||||
|                 player, |                 player, | ||||||
|                 boss, |                 boss, | ||||||
|                 spent_mana: used_mana + self.spent_mana, |                 spent_mana: spell.cost + self.spent_mana, | ||||||
|                 state: State::Win, |                 state: State::Win, | ||||||
|             }; |             }; | ||||||
|         } |         } | ||||||
|         if player.mana == 0 { |         if player.mana == 0 && !recharge_actif { | ||||||
|             return RoundNode { |             return RoundNode { | ||||||
|                 player, |                 player, | ||||||
|                 boss, |                 boss, | ||||||
|                 spent_mana: used_mana + self.spent_mana, |                 spent_mana: spell.cost + self.spent_mana, | ||||||
|                 state: State::Loss, |                 state: State::Loss, | ||||||
|             }; |             }; | ||||||
|         } |         } | ||||||
| @@ -236,7 +341,7 @@ impl RoundNode { | |||||||
|             return RoundNode { |             return RoundNode { | ||||||
|                 player, |                 player, | ||||||
|                 boss, |                 boss, | ||||||
|                 spent_mana: used_mana + self.spent_mana, |                 spent_mana: spell.cost + self.spent_mana, | ||||||
|                 state: State::Win, |                 state: State::Win, | ||||||
|             }; |             }; | ||||||
|         } |         } | ||||||
| @@ -252,14 +357,14 @@ impl RoundNode { | |||||||
|             return RoundNode { |             return RoundNode { | ||||||
|                 player, |                 player, | ||||||
|                 boss, |                 boss, | ||||||
|                 spent_mana: used_mana + self.spent_mana, |                 spent_mana: spell.cost + self.spent_mana, | ||||||
|                 state: State::Loss, |                 state: State::Loss, | ||||||
|             }; |             }; | ||||||
|         } |         } | ||||||
|         RoundNode { |         RoundNode { | ||||||
|             player, |             player, | ||||||
|             boss, |             boss, | ||||||
|             spent_mana: used_mana + self.spent_mana, |             spent_mana: spell.cost + self.spent_mana, | ||||||
|             state: State::Playing, |             state: State::Playing, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -401,17 +506,15 @@ mod tests { | |||||||
|         }; |         }; | ||||||
|         let mut smallest = u32::MAX; |         let mut smallest = u32::MAX; | ||||||
|         let mut leafs = vec![start]; |         let mut leafs = vec![start]; | ||||||
|         let mut test = 0; |  | ||||||
|         println!("start"); |         println!("start"); | ||||||
|         loop { |         loop { | ||||||
|             println!("iter: {test},"); |  | ||||||
|             let current_leafs = leafs.clone(); |             let current_leafs = leafs.clone(); | ||||||
|             leafs.clear(); |             leafs.clear(); | ||||||
|             // create potential rounds |             // create potential rounds | ||||||
|             for leaf in current_leafs { |             for leaf in current_leafs { | ||||||
|                 if leaf.state == State::Playing { |                 if leaf.state == State::Playing { | ||||||
|                     for spell in Spell::get_all() { |                     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 { |                 if leaf.state == State::Playing { | ||||||
|                     all_done = false; |                     all_done = false; | ||||||
|                 } |                 } | ||||||
|                 println!( |                 //println!( | ||||||
|                     "player hp: {}, boss hp: {}, spent mana so far: {}", |                 //    "player hp: {}, boss hp: {}, spent mana so far: {}", | ||||||
|                     leaf.player.hp, leaf.boss.hp, leaf.spent_mana |                 //    leaf.player.hp, leaf.boss.hp, leaf.spent_mana | ||||||
|                 ); |                 //); | ||||||
|             } |             } | ||||||
|             if all_done { |             if all_done { | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|             test += 1; |  | ||||||
|             println!(" smallest: {smallest}"); |             println!(" smallest: {smallest}"); | ||||||
|         } |         } | ||||||
|         assert_eq!(smallest, 226); |         assert_eq!(smallest, 226); | ||||||
| @@ -458,17 +560,15 @@ mod tests { | |||||||
|         }; |         }; | ||||||
|         let mut smallest = u32::MAX; |         let mut smallest = u32::MAX; | ||||||
|         let mut leafs = vec![start]; |         let mut leafs = vec![start]; | ||||||
|         let mut test = 0; |  | ||||||
|         println!("start"); |         println!("start"); | ||||||
|         loop { |         loop { | ||||||
|             println!("iter: {test},"); |  | ||||||
|             let current_leafs = leafs.clone(); |             let current_leafs = leafs.clone(); | ||||||
|             leafs.clear(); |             leafs.clear(); | ||||||
|             // create potential rounds |             // create potential rounds | ||||||
|             for leaf in current_leafs { |             for leaf in current_leafs { | ||||||
|                 if leaf.state == State::Playing { |                 if leaf.state == State::Playing { | ||||||
|                     for spell in Spell::get_all() { |                     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 { |                 if leaf.state == State::Playing { | ||||||
|                     all_done = false; |                     all_done = false; | ||||||
|                 } |                 } | ||||||
|                 println!( |                 //println!( | ||||||
|                     "player hp: {}, boss hp: {}, spent mana so far: {}", |                 //    "player hp: {}, boss hp: {}, spent mana so far: {}", | ||||||
|                     leaf.player.hp, leaf.boss.hp, leaf.spent_mana |                 //    leaf.player.hp, leaf.boss.hp, leaf.spent_mana | ||||||
|                 ); |                 //); | ||||||
|             } |             } | ||||||
|             if all_done { |             if all_done { | ||||||
|                 break; |                 break; | ||||||
|             } |             } | ||||||
|             test += 1; |  | ||||||
|             println!(" smallest: {smallest}"); |             println!(" smallest: {smallest}"); | ||||||
|         } |         } | ||||||
|         assert_eq!(smallest, 641); |         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] |     #[test] | ||||||
|     fn part2() { |     fn part2() { | ||||||
|         let result = process_part2(""); |         let result = process_part2(""); | ||||||
|   | |||||||
							
								
								
									
										155
									
								
								y2015/src/days/d23.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								y2015/src/days/d23.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										106
									
								
								y2015/src/days/d24.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										38
									
								
								y2015/src/days/d25.rs
									
									
									
									
									
										Normal 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()); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -8,7 +8,14 @@ pub mod d15; | |||||||
| pub mod d16; | pub mod d16; | ||||||
| pub mod d17; | pub mod d17; | ||||||
| pub mod d18; | pub mod d18; | ||||||
|  | pub mod d19; | ||||||
| pub mod d2; | 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 d3; | ||||||
| pub mod d4; | pub mod d4; | ||||||
| pub mod d5; | pub mod d5; | ||||||
| @@ -16,11 +23,3 @@ pub mod d6; | |||||||
| pub mod d7; | pub mod d7; | ||||||
| pub mod d8; | pub mod d8; | ||||||
| pub mod d9; | pub mod d9; | ||||||
|  |  | ||||||
| pub mod d19; |  | ||||||
|  |  | ||||||
| pub mod d20; |  | ||||||
|  |  | ||||||
| pub mod d21; |  | ||||||
|  |  | ||||||
| pub mod d22; |  | ||||||
|   | |||||||
| @@ -4,3 +4,4 @@ version = "0.1.0" | |||||||
| edition = "2021" | edition = "2021" | ||||||
|  |  | ||||||
| [dependencies] | [dependencies] | ||||||
|  | md5 = { workspace = true } | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								y2016/resources/1_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								y2016/resources/1_input.txt
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										5
									
								
								y2016/resources/2_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								y2016/resources/2_input.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | LLULLLRLDLLLRLUURDDLRDLDURULRLUULUDDUDDLLLURRLDRRLDRRRLDUDLRDLRRDLLDUDUDUDRLUDUUDLLLRDURUDUULUDLRDUUUDUUDURLDUULLRDLULDUURUDRDDLDRLURLRURRDUURLRLUURURUUULLRLLULRUURLULURDLLRRUDLUDULDRDRLRULUURRDRULLRUUUDLRLDLUURRRURDLUDDRRUDRLUDRDLLLLLRULLDUDRLRRDDULDLRUURRRRRLDLDLRDURDRUUURDLRDDDDULURRRRDUURLULLLDLRULRDULRUDLRRLRDLLRLLLUDDLRDRURDDLLLLDUDRDLRURRDLRDDDLDULDRLRULUUDRRRUUULLLURRDDUULURULDURRLLULLDRURUUULRLRDRRUDRDRRDURRUUUULDRDDDUDLDDURLLRR | ||||||
|  | LDLRRRUURDLDDRLRRDLLULRULLLUDUUDUDLRULLDRUDRULLDULURDRDDLRURDDULLLLDLRDRDRDDURLURLURLUDRDDRDULULUDDRURRDLLDUURDRDDLRLLURRDLRDDULDLULURDRDLUDRRUUDULLULURRDUDRUUUDRULDLDURLRRUDURLDLRRUURRRURDLUDRLDUDRRUDUURURUDDUUDRDULRDLUDRRRLDRURLLRDDDLUDRDUDURDDDRRDDRRRLLRRDDLDDLRUURRURDLLDRLRRDLLUDRRRURURLRDRLLRLRLRULLRURLDLRRULLRRRDULUUULDRDLLURDDLDLRDRLUUDLLUDDLDRRLDLRUDRUDLLUURLLULURUDUDRLULLUDRURDDLDLDDUDLRDDRRURLRLLUDDUDRUURRURRULDRLDDRLLRRLDDURRDLDULLLURULLLRUURLRRRRUUULRLLLURRLRLRUDRDUUUDUUUDDLULLDLLLLDLDRULDRUUULDDDLURLDLRLULRUDDDDURDDLU | ||||||
|  | RURLURRDLDULLULDDDLRUULLUURLRUDRUDRRUDDLDDDDRRDLRURLRURLDDDUDDUURRDRULDRRRULRDRDDLRUDULRLURDUUDRRLDLRDRURDLDRRRRDRURUUDDDLLRDRDUDUDUDLLULURULRRLRURUULUULDDDDURULRULLRUDUURLURDUDLUDLUDRLLDUUDUULRLRLUUDRDULDULRURDRRRULRUDLRURDDULUDULLRLRURURUULLULDRURLLRRUUDDUUURRDLURUURULRDRRDDUDULRDDLUDLURURUURDRULLRDDLLRDDLDRDUDRRDLUURRLRLUURRULUDURLDDRLLURRDDDLDDRURULLDDRLUDDLRLURDUDULLRDULLLDLLUDDRUDRUDDUUDRDRULRL | ||||||
|  | RLRDRDULULUDLUDRDRLUDLDLLUDURULDDDUDLRURLLRLRLDLDRLDURDLRRURLULLULURLLDRRDRLUDRLRDLLULRULURRURURUULRDUDLLRDLRRRRRLUURDRRRDLRUDLLDLLDLRUUUDLLLDDDLRDULLRUUDDRLDDURRRDLRLRLDDDDLRDRULLUURUUDRRLLRLLRDDLLRURRRRDRULRRLLRLLLRLDRRLDDDURRURLDURUURRLRLRLDRURULLRLRUDLDUURDLLRLDLURUUUDLLRDRDDDDDDRLDRRRLRRRRURUDLDDRDLLURUDLRRLDDDLUDUDUULRDULULUDDULUUDLLLLRLDDUUULRLRDULURDURRRURRULURRRDRDLDDURDLURUDURRRDDRLRLUDLUDDLUULLDURLURDDUDDLRUUUDRLLDRURL | ||||||
|  | ULUDLLUDDULRUURDRURDUDUDLUURDDDRRLUDURURDRURRLDRDURLRLLRRDDRRDRRRUULURUDURUDULRRRRDDLDURRLRRDUDDDRLLLULDRLRLURRDUURDURRRURRDLUDUDDRLDLURRRDDRLLRDRDDRDURRRRLURRLUDDURRULRUDUDULDRUDDRULLUUULDURRRLDRULLURULLRUDLDUDDLDULDLUUDRULULDLLDRULLRUULDUDUUDRLRRLDLUULUDLLDDRLRRDDLLURURDULRRDDRURDRLRLULDLDURULLUUUDURURDLDUDDDDUUULUDLUURRULLDLRLURDLURLRLDDURRLDDRRRDUUULLUULDLLDLLDDRLRRUDLULDRLULDULULRRLRULUUURURUUURDUUDDURLLUDDRLRDDLUURRUULRDLDDRLULUULRDRURLUURDRDUURUDLRR | ||||||
							
								
								
									
										1992
									
								
								y2016/resources/3_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										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
									
								
							
							
						
						
									
										980
									
								
								y2016/resources/4_input.txt
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										598
									
								
								y2016/resources/6_input.txt
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2016/src/bin/d1.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2016/src/bin/d2.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2016/src/bin/d3.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2016/src/bin/d4.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										14
									
								
								y2016/src/bin/d5.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2016/src/bin/d6.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										105
									
								
								y2016/src/days/d1.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										133
									
								
								y2016/src/days/d2.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										60
									
								
								y2016/src/days/d3.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										119
									
								
								y2016/src/days/d4.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										83
									
								
								y2016/src/days/d5.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										73
									
								
								y2016/src/days/d6.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										11
									
								
								y2016/src/days/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | pub mod d1; | ||||||
|  |  | ||||||
|  | pub mod d2; | ||||||
|  |  | ||||||
|  | pub mod d3; | ||||||
|  |  | ||||||
|  | pub mod d4; | ||||||
|  |  | ||||||
|  | pub mod d5; | ||||||
|  |  | ||||||
|  | pub mod d6; | ||||||
| @@ -1 +1 @@ | |||||||
|  | pub mod days; | ||||||
|   | |||||||
| @@ -4,3 +4,6 @@ version = "0.1.0" | |||||||
| edition = "2021" | edition = "2021" | ||||||
|  |  | ||||||
| [dependencies] | [dependencies] | ||||||
|  | regex = "1.11.1" | ||||||
|  | utils = { workspace = true } | ||||||
|  | itertools = { workspace = true } | ||||||
|   | |||||||
							
								
								
									
										41
									
								
								y2024/resources/10_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								y2024/resources/10_input.txt
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										6
									
								
								y2024/resources/3_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								y2024/resources/3_input.txt
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										140
									
								
								y2024/resources/4_input.txt
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										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
									
								
							
							
						
						
									
										130
									
								
								y2024/resources/6_input.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,130 @@ | |||||||
|  | .........................#...........#.#...#...............#..............##.....................#...........#..#.........#....... | ||||||
|  | .....................#.................#.......#.........................#...........#.#.......#.................................. | ||||||
|  | .........#...........#........#.........#.........#...........#........................................#.........................# | ||||||
|  | .......#.........................#...........................#.............#...................................................... | ||||||
|  | ..................#................##...............#.#.....................##............#....................................... | ||||||
|  | ......#...#................#..................................................................#....#.#............................ | ||||||
|  | .......##................#........#..#.......#......................................#........#............#......###..........#... | ||||||
|  | .....................#....................................................#...........#..#...#..........................#......... | ||||||
|  | ...........#....#...........................#.#...............#..#....................................#..............#......#..... | ||||||
|  | .....#........##...............#.......#..#..............................................#..........................#............. | ||||||
|  | .#.........#.#...........................#..........................#......................#...........#........#................. | ||||||
|  | .................................................................#..#.#.......#..#................................................ | ||||||
|  | ...............................................#.......#...................#....................#................................. | ||||||
|  | .......#......#......#......................#...............................#.....##........#...........#......#.................. | ||||||
|  | ........................................................................................................#.....#.#................. | ||||||
|  | ..#...............................#.#..................................#.............#............................................ | ||||||
|  | ..............#..........................................#.....#.....#..........................#....#.........#.................. | ||||||
|  | ...................................#........................................#................#...........##.....#....#............ | ||||||
|  | .#.....................................#.......#........................#...................##............#....................... | ||||||
|  | .#..................#...........#...........................................................................................#..... | ||||||
|  | ........................#...................................................##.................................#..#..........##... | ||||||
|  | ........#............................#.......#...........................#.#...#...................................#.....#........ | ||||||
|  | ...............................#............#.....#......................#.......#...#........................#................... | ||||||
|  | .........#.............#.................................................#.......................................#....#........... | ||||||
|  | ...................................................................#...#.................................#...................#.... | ||||||
|  | ...#.....................#...#...............#..................................................#...#...#......................... | ||||||
|  | ...................#........#....#....#..#..#...................#.........#..................#..#....#.......#.#.................# | ||||||
|  | ..............................#........................................#......#.....#..............##................#............ | ||||||
|  | ............#..#.............#.......#........................................................##........#.....#................... | ||||||
|  | .....#.............................................................#...#.#.#.............................#..#.#...........#....... | ||||||
|  | .......#....#............................................#.................................#...................................#.. | ||||||
|  | ..#.................#.......#..........................#........................................#...............#..............#.. | ||||||
|  | ....#.#...................#............................#..#....................................................................... | ||||||
|  | .......................#...............#..............#......#......................#.....................#..............#........ | ||||||
|  | .#..........#.......................................................................#....................................#........ | ||||||
|  | .#.......#..................................................................#..................................................... | ||||||
|  | ..................................................#.............#.............................................#................#.# | ||||||
|  | .......................#......#....#................#......................................................#.......#.........#.... | ||||||
|  | ..........................#.#........................................................#......#................................#.... | ||||||
|  | ....................................................................#...............................#............................. | ||||||
|  | ..#...........#..............................#..#....#............................#...............##..............#...#...#...#..# | ||||||
|  | ...................................#................................................................#....#...................#.... | ||||||
|  | ..#....#........#..##....#........................#...#...................................#....................................... | ||||||
|  | ...................#................................................................................................#............. | ||||||
|  | .......#........#................#...#.......................................................................#.................... | ||||||
|  | ..............#....................#..........................##.........#.....................................#.................. | ||||||
|  | .........................................................................#.................#........................#............. | ||||||
|  | .............................#..........#.......................................................#......................#.......... | ||||||
|  | ............###....................................................................#.......................#...................... | ||||||
|  | ........#........#...........#.............................#....................#..........#.........................#.#.....#.... | ||||||
|  | .........................................................................................................#..#..................... | ||||||
|  | #.#.....#..........................................................#.....................#........................................ | ||||||
|  | ........##..........#....................................................#..#........#.......#........#................#.......... | ||||||
|  | .............................................#..........................#.........#........................#...................... | ||||||
|  | ...........................##.............#........................#.#........................#..#................#.....#........# | ||||||
|  | #...#..............................................#........#...................................................#................. | ||||||
|  | .............#................#............................#............#......................................................... | ||||||
|  | #..........................#............#.....................#.....#.................#......#...##...#.............#.#........... | ||||||
|  | .....................#...#..#....#...................................#....................#..............#........#............... | ||||||
|  | .......................#.................#...........#....#.......#...........................................#..#................ | ||||||
|  | .........#...........#.#.........#.........................#.....#................................................................ | ||||||
|  | ....................#........#...................................................................#............#..#.#.#............ | ||||||
|  | ..........#.......................#.......................#....................................................................... | ||||||
|  | ......................................#......#............................#..............................................#........ | ||||||
|  | .....................#...#.................#.............................#....#................................................... | ||||||
|  | ..............##...................................................................#......................................##...... | ||||||
|  | .....#....#...............................................#.......#.##........#.#.............#...............#................... | ||||||
|  | ....................................#......................#........#.......................................................#..... | ||||||
|  | .....#.........................................#.....................#.............#.................#..................#......... | ||||||
|  | ................................#.........#..#............................................#.........................#............. | ||||||
|  | ....#.#.....................#......#...................................#..........................................#..#.....#...#.. | ||||||
|  | .........##.......................#..........................................#.........................#...##..................... | ||||||
|  | ...............................................................#................................................................#. | ||||||
|  | ............#.........................................##.......................................#.................................. | ||||||
|  | .............................#..............................#..................#.........#.....#.................................. | ||||||
|  | ..........................................................#...#.....#..................#................................#......... | ||||||
|  | ......#...................#.........................................................................................#............. | ||||||
|  | #...............................#...........................#..................................................................... | ||||||
|  | .......#........#.................................................#.......................................................#....... | ||||||
|  | .#......................................................#..............#..................................#...........#........... | ||||||
|  | .............#..#.#.......................#..........#......#.##.........................................................#..#..... | ||||||
|  | .......#...............#........#......................................................................#..#...........#........... | ||||||
|  | ............#.........................................#................................................#...................#...... | ||||||
|  | ............#...........................................#.#.......#....................................#.......................... | ||||||
|  | ...........................................#.........................................................#..............#............. | ||||||
|  | ..................#..#....................................................#..................#.................................... | ||||||
|  | ..#........................#........#............................................................................................. | ||||||
|  | .............#........#......................#.......................................#...#....#............................#...... | ||||||
|  | ............#.......#.............#...#...........#.#.................................#.................##........................ | ||||||
|  | .....................................................................................#.........#.......................#.....#.... | ||||||
|  | .................#................................#..#....#......#..........................................#.....#............... | ||||||
|  | ..#...............................#........................................................#.......#...#............#............. | ||||||
|  | #.........#..#..#.....................................#....................................#................#.................#... | ||||||
|  | .......................#..#...#............................................................................#..#.....#.......##.... | ||||||
|  | ..........#............#.......................#.........................^......#.#...................................#........... | ||||||
|  | ...##........................##..........#..........#.................#...............#...........#.....##........................ | ||||||
|  | ..............#............#..........................#....#...........#......#......#......................#..................... | ||||||
|  | ......#.....#....................................................#............#.#......................................#.......... | ||||||
|  | ......#.............................#......................#...............................#........#............................. | ||||||
|  | .#..........#.............................................#.............................................#......................... | ||||||
|  | ...............................##................................................................................................. | ||||||
|  | .....................#................................................#...............#............#...............#.....#.....#.. | ||||||
|  | ..................#...........................................................................#...........#...................#... | ||||||
|  | ##..............................#.#...#.#...............................#...........#.#...................#....................... | ||||||
|  | ......................#.........#...................................#.................#........................................... | ||||||
|  | .......................#............................................................................#.........##...........#...... | ||||||
|  | .....................................................................#.......#.....#.......................................#...... | ||||||
|  | #....................................#........#.#.................................................................##.....#........ | ||||||
|  | ..............#..............................#......#..........###.........#................#..............#..................#... | ||||||
|  | ..................................#..............................#.................##.............................#...#........... | ||||||
|  | ...............#......#........................#....#........#............#.........#..........#..............#......#............ | ||||||
|  | ...#...........#........#...#...........................#.............#.....................................#..................... | ||||||
|  | ..............###............#...........................................................#.............#.........##..#............ | ||||||
|  | ............#................................................#.......#..................#....#.................................... | ||||||
|  | .........#.#...#.....#...........................#.....##......#.....................#..#........#......#......................... | ||||||
|  | .#....#.......#.......................#.................................................................#.......#..............#.. | ||||||
|  | ...................#................................................................#.............#...#...........#.........#..... | ||||||
|  | .......#.#.......#.......................#....#.....#...............#...#.....#...........................................#....... | ||||||
|  | .......#........#...........................................#...........#.........................#....#.......#.................. | ||||||
|  | ..................................#.#.................#.#............................................#...........#....#........... | ||||||
|  | ....##......#.............#...................................#...#.........#...........................#......#.................. | ||||||
|  | .........................#......#....#...#........................................................................................ | ||||||
|  | ...#...............#............................................................................#...........................#..... | ||||||
|  | ....##.#..............................................#............#................#................................#......#..... | ||||||
|  | .........#...........................................#...#.......##..............................#................................ | ||||||
|  | ..................#..........#......#.......#......................................#........#...............#......#...........##. | ||||||
|  | ........................................#......#..........#......................................................................# | ||||||
|  | ..............#...#...................#.....#..........................................................#..............#......#.... | ||||||
|  | ...#........#........................#...#................#........#.............................##..........................#.... | ||||||
|  | ............#............................#.#........................#.................................#..........................# | ||||||
							
								
								
									
										850
									
								
								y2024/resources/7_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										850
									
								
								y2024/resources/7_input.txt
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										50
									
								
								y2024/resources/8_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								y2024/resources/8_input.txt
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										1
									
								
								y2024/resources/9_input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								y2024/resources/9_input.txt
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										20
									
								
								y2024/src/bin/d10.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								y2024/src/bin/d10.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2024/src/bin/d3.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2024/src/bin/d4.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2024/src/bin/d5.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2024/src/bin/d6.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2024/src/bin/d7.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2024/src/bin/d8.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										20
									
								
								y2024/src/bin/d9.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										332
									
								
								y2024/src/days/d10.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										98
									
								
								y2024/src/days/d3.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										164
									
								
								y2024/src/days/d4.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										181
									
								
								y2024/src/days/d5.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										331
									
								
								y2024/src/days/d6.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										124
									
								
								y2024/src/days/d7.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										227
									
								
								y2024/src/days/d8.rs
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										129
									
								
								y2024/src/days/d9.rs
									
									
									
									
									
										Normal 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) | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,3 +1,11 @@ | |||||||
| pub mod d1; | pub mod d1; | ||||||
|  |  | ||||||
| pub mod d2; | 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; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user