diff options
292 files changed, 60195 insertions, 1 deletions
@@ -1,2 +1 @@ /target -**/*.rs.bk diff --git a/2016/.gitignore b/2016/.gitignore new file mode 100644 index 0000000..9f97022 --- /dev/null +++ b/2016/.gitignore @@ -0,0 +1 @@ +target/
\ No newline at end of file diff --git a/2016/aoc1/Cargo.lock b/2016/aoc1/Cargo.lock new file mode 100644 index 0000000..b771521 --- /dev/null +++ b/2016/aoc1/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc1" +version = "0.1.0" + diff --git a/2016/aoc1/Cargo.toml b/2016/aoc1/Cargo.toml new file mode 100644 index 0000000..096aad6 --- /dev/null +++ b/2016/aoc1/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc1" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] diff --git a/2016/aoc1/input.txt b/2016/aoc1/input.txt new file mode 100644 index 0000000..456904d --- /dev/null +++ b/2016/aoc1/input.txt @@ -0,0 +1 @@ +R4, R5, L5, L5, L3, R2, R1, R1, L5, R5, R2, L1, L3, L4, R3, L1, L1, R2, R3, R3, R1, L3, L5, R3, R1, L1, R1, R2, L1, L4, L5, R4, R2, L192, R5, L2, R53, R1, L5, R73, R5, L5, R186, L3, L2, R1, R3, L3, L3, R1, L4, L2, R3, L5, R4, R3, R1, L1, R5, R2, R1, R1, R1, R3, R2, L1, R5, R1, L5, R2, L2, L4, R3, L1, R4, L5, R4, R3, L5, L3, R4, R2, L5, L5, R2, R3, R5, R4, R2, R1, L1, L5, L2, L3, L4, L5, L4, L5, L1, R3, R4, R5, R3, L5, L4, L3, L1, L4, R2, R5, R5, R4, L2, L4, R3, R1, L2, R5, L5, R1, R1, L1, L5, L5, L2, L1, R5, R2, L4, L1, R4, R3, L3, R1, R5, L1, L4, R2, L3, R5, R3, R1, L3 diff --git a/2016/aoc1/src/main.rs b/2016/aoc1/src/main.rs new file mode 100644 index 0000000..e9b4138 --- /dev/null +++ b/2016/aoc1/src/main.rs @@ -0,0 +1,98 @@ +use std::io::Read; +use std::fs::File; + +#[derive(Clone, Copy, Debug)] +enum Direction { + Up, + Left, + Down, + Right +} + +impl Direction { + fn turn_right(self) -> Direction { + match self { + Direction::Up => Direction::Right, + Direction::Right => Direction::Down, + Direction::Down => Direction::Left, + Direction::Left => Direction::Up + } + } + fn turn_left(self) -> Direction { + //not an ambiturner + self.turn_right().turn_right().turn_right() + } + + fn as_vector(self, dist: i32) -> (i32,i32) { + match self { + Direction::Up => (0, -dist), + Direction::Right => (dist, 0), + Direction::Down => (0, dist), + Direction::Left => (-dist, 0) + } + } +} + +fn main() { + let content = read_file().expect("Failed to read file"); + let (_, dist_x, dist_y) = first_repeated_dest(content); + println!("Total: ({}, {})", dist_x, dist_y); + println!("Net: {}", dist_x+dist_y); +} + +fn net_distance(content: String) -> (Direction, i32, i32) { + content.trim().split(", ") + .map(|action| + ( + action.chars().nth(0).unwrap(), + action.chars().skip(1).collect::<String>().parse::<i32>().unwrap() + )) + .fold((Direction::Up, 0,0), |(facing, acc_x, acc_y), (dir, dist)| { + let new_facing = match dir { + 'R' => facing.turn_right(), + 'L' => facing.turn_left(), + _ => panic!("bad input") + }; + + let (new_x, new_y) = new_facing.as_vector(dist); + (new_facing, acc_x+new_x, acc_y+new_y) + }) +} + +fn first_repeated_dest(content: String) -> (Direction, i32, i32) { + let mut stops: Vec<(i32, i32)> = Vec::new(); + let actions = content.trim().split(", ") + .map(|action| + ( + action.chars().nth(0).unwrap(), + action.chars().skip(1).collect::<String>().parse::<i32>().unwrap() + )); + let mut current_facing = Direction::Up; + let (mut acc_x, mut acc_y) = (0, 0); + for (dir, dist) in actions { + current_facing = match dir { + 'R' => current_facing.turn_right(), + 'L' => current_facing.turn_left(), + _ => panic!("bad input") + }; + + for _ in 0..dist { + let (new_x, new_y) = current_facing.as_vector(1); + acc_x += new_x; + acc_y += new_y; + + if stops.iter().any(|&(x, y)| x==acc_x && y==acc_y) { + return (current_facing, acc_x, acc_y); + } + stops.push((acc_x, acc_y)); + } + } + (current_facing, acc_x, acc_y) +} + +fn read_file() -> Result<String, String> { + let mut file = try!(File::open("input.txt").map_err(|e| e.to_string())); + let mut content = String::new(); + try!(file.read_to_string(&mut content).map_err(|e| e.to_string())); + Ok(content) +} diff --git a/2016/aoc10/Cargo.lock b/2016/aoc10/Cargo.lock new file mode 100644 index 0000000..f8f7189 --- /dev/null +++ b/2016/aoc10/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc10" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc10/Cargo.toml b/2016/aoc10/Cargo.toml new file mode 100644 index 0000000..d6abdaf --- /dev/null +++ b/2016/aoc10/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc10" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc10/input.txt b/2016/aoc10/input.txt new file mode 100644 index 0000000..aeda3b5 --- /dev/null +++ b/2016/aoc10/input.txt @@ -0,0 +1,231 @@ +bot 59 gives low to bot 176 and high to bot 120 +bot 92 gives low to bot 42 and high to bot 187 +value 31 goes to bot 114 +bot 182 gives low to bot 49 and high to bot 176 +bot 17 gives low to bot 181 and high to bot 162 +bot 36 gives low to bot 118 and high to bot 121 +bot 118 gives low to bot 164 and high to bot 55 +bot 172 gives low to bot 79 and high to bot 123 +bot 51 gives low to bot 60 and high to bot 31 +bot 48 gives low to bot 107 and high to bot 58 +bot 142 gives low to output 6 and high to bot 35 +bot 133 gives low to output 4 and high to bot 47 +bot 134 gives low to bot 122 and high to bot 66 +bot 106 gives low to bot 155 and high to bot 99 +bot 77 gives low to bot 93 and high to bot 84 +bot 9 gives low to bot 173 and high to bot 197 +bot 64 gives low to bot 123 and high to bot 48 +bot 177 gives low to bot 21 and high to bot 132 +bot 94 gives low to bot 6 and high to bot 25 +bot 126 gives low to bot 193 and high to bot 56 +bot 74 gives low to bot 187 and high to bot 125 +bot 80 gives low to bot 41 and high to bot 191 +bot 62 gives low to bot 157 and high to bot 138 +bot 66 gives low to bot 1 and high to bot 209 +bot 90 gives low to bot 104 and high to bot 34 +bot 68 gives low to bot 23 and high to bot 87 +bot 121 gives low to bot 55 and high to bot 126 +bot 122 gives low to bot 137 and high to bot 1 +bot 209 gives low to bot 168 and high to bot 26 +bot 141 gives low to bot 170 and high to bot 6 +bot 149 gives low to bot 62 and high to bot 13 +bot 120 gives low to bot 179 and high to bot 71 +bot 160 gives low to bot 194 and high to bot 151 +bot 86 gives low to bot 96 and high to bot 106 +value 13 goes to bot 9 +bot 180 gives low to bot 189 and high to bot 27 +value 67 goes to bot 88 +bot 169 gives low to bot 99 and high to bot 159 +bot 56 gives low to bot 98 and high to bot 147 +bot 197 gives low to bot 174 and high to bot 81 +bot 57 gives low to bot 113 and high to bot 179 +bot 39 gives low to bot 115 and high to bot 3 +bot 79 gives low to bot 22 and high to bot 40 +bot 161 gives low to output 14 and high to bot 185 +bot 21 gives low to bot 114 and high to bot 119 +bot 136 gives low to bot 28 and high to bot 158 +bot 105 gives low to bot 89 and high to bot 19 +bot 168 gives low to bot 126 and high to bot 26 +bot 193 gives low to bot 64 and high to bot 98 +bot 186 gives low to bot 86 and high to bot 178 +value 11 goes to bot 165 +bot 33 gives low to bot 116 and high to bot 150 +bot 32 gives low to bot 154 and high to bot 206 +bot 166 gives low to bot 33 and high to bot 139 +value 7 goes to bot 63 +bot 203 gives low to bot 172 and high to bot 64 +bot 200 gives low to bot 94 and high to bot 25 +value 43 goes to bot 76 +bot 145 gives low to bot 103 and high to bot 128 +bot 119 gives low to bot 186 and high to bot 97 +bot 12 gives low to bot 31 and high to bot 4 +bot 23 gives low to bot 198 and high to bot 171 +bot 34 gives low to bot 10 and high to bot 20 +bot 198 gives low to bot 43 and high to bot 17 +bot 50 gives low to output 1 and high to bot 127 +bot 155 gives low to bot 191 and high to bot 32 +bot 206 gives low to bot 12 and high to bot 43 +bot 96 gives low to bot 80 and high to bot 155 +bot 93 gives low to bot 44 and high to bot 70 +bot 24 gives low to bot 85 and high to bot 83 +bot 30 gives low to bot 159 and high to bot 68 +bot 55 gives low to bot 203 and high to bot 193 +bot 199 gives low to bot 68 and high to bot 135 +bot 170 gives low to bot 97 and high to bot 5 +bot 65 gives low to bot 152 and high to bot 194 +bot 43 gives low to bot 4 and high to bot 181 +bot 113 gives low to output 9 and high to bot 161 +bot 81 gives low to bot 141 and high to bot 94 +value 29 goes to bot 7 +bot 46 gives low to bot 175 and high to bot 195 +value 47 goes to bot 21 +value 23 goes to bot 42 +bot 13 gives low to bot 138 and high to bot 61 +bot 135 gives low to bot 87 and high to bot 111 +bot 194 gives low to bot 190 and high to bot 82 +value 73 goes to bot 109 +bot 154 gives low to bot 51 and high to bot 12 +bot 1 gives low to bot 18 and high to bot 209 +bot 98 gives low to bot 48 and high to bot 45 +bot 147 gives low to bot 45 and high to bot 95 +bot 47 gives low to output 19 and high to bot 152 +bot 26 gives low to bot 56 and high to bot 147 +bot 179 gives low to bot 161 and high to bot 71 +bot 148 gives low to bot 204 and high to bot 137 +bot 5 gives low to bot 67 and high to bot 85 +bot 174 gives low to bot 132 and high to bot 141 +bot 8 gives low to bot 13 and high to bot 75 +bot 82 gives low to bot 146 and high to bot 22 +bot 123 gives low to bot 40 and high to bot 107 +bot 99 gives low to bot 32 and high to bot 201 +bot 41 gives low to bot 196 and high to bot 192 +bot 139 gives low to bot 150 and high to bot 153 +bot 11 gives low to output 16 and high to bot 113 +bot 72 gives low to bot 65 and high to bot 160 +bot 195 gives low to bot 133 and high to bot 183 +bot 54 gives low to output 12 and high to output 10 +bot 158 gives low to bot 102 and high to bot 110 +bot 112 gives low to bot 19 and high to bot 118 +bot 31 gives low to bot 208 and high to bot 143 +bot 167 gives low to bot 7 and high to bot 96 +bot 63 gives low to bot 92 and high to bot 74 +bot 116 gives low to bot 20 and high to bot 131 +bot 184 gives low to bot 39 and high to bot 3 +bot 162 gives low to bot 205 and high to bot 39 +bot 108 gives low to output 11 and high to bot 175 +value 53 goes to bot 207 +bot 111 gives low to bot 202 and high to bot 184 +bot 25 gives low to bot 24 and high to bot 83 +value 71 goes to bot 77 +bot 69 gives low to bot 142 and high to bot 0 +bot 146 gives low to output 13 and high to bot 53 +bot 7 gives low to bot 76 and high to bot 80 +bot 131 gives low to bot 73 and high to bot 204 +bot 102 gives low to bot 195 and high to bot 117 +bot 76 gives low to bot 165 and high to bot 41 +bot 153 gives low to bot 148 and high to bot 122 +bot 208 gives low to bot 90 and high to bot 163 +bot 70 gives low to bot 144 and high to bot 78 +bot 125 gives low to bot 8 and high to bot 156 +bot 83 gives low to bot 199 and high to bot 135 +bot 75 gives low to bot 61 and high to bot 104 +bot 67 gives low to bot 169 and high to bot 30 +bot 14 gives low to bot 81 and high to bot 200 +bot 159 gives low to bot 201 and high to bot 23 +value 3 goes to bot 93 +bot 110 gives low to bot 117 and high to bot 89 +bot 128 gives low to bot 129 and high to bot 182 +bot 87 gives low to bot 171 and high to bot 111 +bot 45 gives low to bot 58 and high to bot 95 +bot 4 gives low to bot 143 and high to bot 166 +bot 60 gives low to bot 156 and high to bot 208 +bot 27 gives low to bot 108 and high to bot 46 +bot 42 gives low to bot 207 and high to bot 149 +bot 117 gives low to bot 183 and high to bot 72 +bot 115 gives low to bot 153 and high to bot 134 +bot 140 gives low to bot 125 and high to bot 60 +bot 173 gives low to bot 177 and high to bot 174 +bot 138 gives low to bot 180 and high to bot 52 +bot 100 gives low to bot 38 and high to bot 59 +value 41 goes to bot 173 +value 59 goes to bot 177 +bot 165 gives low to bot 63 and high to bot 196 +bot 84 gives low to bot 70 and high to bot 78 +bot 2 gives low to bot 160 and high to bot 91 +value 61 goes to bot 29 +bot 114 gives low to bot 109 and high to bot 186 +bot 205 gives low to bot 139 and high to bot 115 +bot 175 gives low to output 17 and high to bot 133 +bot 176 gives low to bot 57 and high to bot 120 +bot 107 gives low to bot 124 and high to bot 15 +bot 52 gives low to bot 27 and high to bot 28 +bot 103 gives low to bot 50 and high to bot 129 +bot 150 gives low to bot 131 and high to bot 148 +bot 16 gives low to output 20 and high to bot 189 +bot 190 gives low to output 18 and high to bot 146 +bot 157 gives low to bot 16 and high to bot 180 +bot 10 gives low to bot 158 and high to bot 130 +bot 202 gives low to bot 162 and high to bot 184 +bot 88 gives low to bot 77 and high to bot 84 +bot 188 gives low to bot 128 and high to bot 38 +bot 58 gives low to bot 15 and high to bot 101 +bot 171 gives low to bot 17 and high to bot 202 +bot 97 gives low to bot 178 and high to bot 67 +bot 163 gives low to bot 34 and high to bot 116 +bot 124 gives low to bot 0 and high to bot 145 +bot 71 gives low to bot 185 and high to bot 54 +bot 78 gives low to bot 14 and high to bot 200 +bot 101 gives low to bot 188 and high to bot 100 +bot 189 gives low to output 7 and high to bot 108 +bot 95 gives low to bot 101 and high to bot 100 +bot 0 gives low to bot 35 and high to bot 103 +bot 207 gives low to bot 37 and high to bot 62 +bot 49 gives low to bot 11 and high to bot 57 +bot 85 gives low to bot 30 and high to bot 199 +bot 89 gives low to bot 72 and high to bot 2 +bot 3 gives low to bot 134 and high to bot 66 +bot 181 gives low to bot 166 and high to bot 205 +bot 91 gives low to bot 151 and high to bot 172 +value 17 goes to bot 167 +bot 20 gives low to bot 130 and high to bot 73 +bot 196 gives low to bot 74 and high to bot 140 +bot 18 gives low to bot 121 and high to bot 168 +bot 185 gives low to output 15 and high to bot 54 +bot 178 gives low to bot 106 and high to bot 169 +bot 129 gives low to bot 127 and high to bot 49 +bot 19 gives low to bot 2 and high to bot 164 +bot 15 gives low to bot 145 and high to bot 188 +bot 144 gives low to bot 197 and high to bot 14 +bot 201 gives low to bot 206 and high to bot 198 +bot 164 gives low to bot 91 and high to bot 203 +bot 73 gives low to bot 105 and high to bot 112 +bot 191 gives low to bot 192 and high to bot 154 +bot 109 gives low to bot 167 and high to bot 86 +bot 151 gives low to bot 82 and high to bot 79 +bot 53 gives low to output 2 and high to bot 142 +bot 37 gives low to bot 29 and high to bot 157 +value 2 goes to bot 44 +bot 204 gives low to bot 112 and high to bot 36 +bot 40 gives low to bot 69 and high to bot 124 +bot 22 gives low to bot 53 and high to bot 69 +bot 104 gives low to bot 136 and high to bot 10 +value 19 goes to bot 88 +bot 127 gives low to output 5 and high to bot 11 +bot 183 gives low to bot 47 and high to bot 65 +bot 192 gives low to bot 140 and high to bot 51 +bot 38 gives low to bot 182 and high to bot 59 +bot 61 gives low to bot 52 and high to bot 136 +bot 156 gives low to bot 75 and high to bot 90 +value 37 goes to bot 37 +bot 28 gives low to bot 46 and high to bot 102 +bot 187 gives low to bot 149 and high to bot 8 +bot 132 gives low to bot 119 and high to bot 170 +bot 44 gives low to bot 9 and high to bot 144 +bot 29 gives low to output 0 and high to bot 16 +bot 6 gives low to bot 5 and high to bot 24 +bot 137 gives low to bot 36 and high to bot 18 +bot 130 gives low to bot 110 and high to bot 105 +value 5 goes to bot 92 +bot 35 gives low to output 3 and high to bot 50 +bot 152 gives low to output 8 and high to bot 190 +bot 143 gives low to bot 163 and high to bot 33 diff --git a/2016/aoc10/src/main.rs b/2016/aoc10/src/main.rs new file mode 100644 index 0000000..c2c18be --- /dev/null +++ b/2016/aoc10/src/main.rs @@ -0,0 +1,155 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::cmp; + +#[derive(Debug, Clone)] +struct Bot { + low: Option<i32>, + high: Option<i32>, + low_dest: Option<Dest>, + high_dest: Option<Dest> +} + +#[derive(Debug, Clone)] +enum Dest { + Bot(usize), + Output(usize) +} + +impl Bot { + fn new() -> Bot { + Bot {low: None, high: None, low_dest: None, high_dest: None} + } + + fn add_input(&mut self, input: i32) { + if self.low.is_none() { + self.low = Some(input); + } + else { + let other = self.low.unwrap(); //already handled none case + self.low = Some(cmp::min(input,other)); + self.high = Some(cmp::max(input,other)); + } + } + fn ready(&self) -> bool { + self.low.is_some() && self.high.is_some() && + self.low_dest.is_some() && self.high_dest.is_some() + } + fn clear(&mut self) { + self.low = None; + self.high = None; + } +} + + +fn main() { + let mut bots = build_bots_graph(); + let outputs = find_outputs(&mut bots); + println!("Outputs {:?}", outputs); +} + +fn find_outputs(bots: &mut Vec<Bot>) -> Vec<i32> { + let mut output = Vec::new(); + + let mut is_stable = false; + while !is_stable { + is_stable = true; + + for i in 0..bots.len() { + if bots[i].ready() { + is_stable = false; + + let low = bots[i].low.unwrap(); + let high = bots[i].high.unwrap(); + bots[i].clear(); + + match bots[i].low_dest { + Some(Dest::Bot(j)) => { + bots[j].add_input(low); + }, + Some(Dest::Output(j)) => { + check_add_output(&mut output, j); + output[j] = low; + }, + _ => {} + }; + match bots[i].high_dest { + Some(Dest::Bot(j)) => { + bots[j].add_input(high); + }, + Some(Dest::Output(j)) => { + check_add_output(&mut output, j); + output[j] = high; + }, + _ => {} + }; + } + } + } + + output +} + +fn build_bots_graph() -> Vec<Bot> { + let lines = read_file(); + let mut bots = Vec::new(); + + let value_regex = Regex::new(r"^value (\d+) goes to bot (\d+)$").unwrap(); + let give_regex = Regex::new(r"^bot (\d+) gives low to (output|bot) (\d+) and high to (output|bot) (\d+)$").unwrap(); + + for line in lines { + if value_regex.is_match(line.as_ref()) { + let cap = value_regex.captures(line.as_ref()).unwrap(); + let value = cap.at(1).unwrap().parse().unwrap(); + let bot_index = cap.at(2).unwrap().parse().unwrap(); + check_add_bot(&mut bots, bot_index); + bots[bot_index].add_input(value); + } + else if give_regex.is_match(line.as_ref()) { + let cap = give_regex.captures(line.as_ref()).unwrap(); + let give_bot_index = cap.at(1).unwrap().parse().unwrap(); + let low_is_to_output = cap.at(2).unwrap() == "output"; + let low_dest = cap.at(3).unwrap().parse().unwrap(); + let high_is_to_output = cap.at(4).unwrap() == "output"; + let high_dest = cap.at(5).unwrap().parse().unwrap(); + + check_add_bot(&mut bots, give_bot_index); + bots[give_bot_index].low_dest = if low_is_to_output { + Some(Dest::Output(low_dest)) + } else { + Some(Dest::Bot(low_dest)) + }; + bots[give_bot_index].high_dest = if high_is_to_output { + Some(Dest::Output(high_dest)) + } else { + Some(Dest::Bot(high_dest)) + }; + } + } + + bots +} + +fn check_add_bot(bots: &mut Vec<Bot>, index: usize) { + while index >= bots.len() { + bots.push(Bot::new()); + } +} + +fn check_add_output(outputs: &mut Vec<i32>, index: usize) { + while index >= outputs.len() { + outputs.push(0); + } +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc11/Cargo.lock b/2016/aoc11/Cargo.lock new file mode 100644 index 0000000..b423029 --- /dev/null +++ b/2016/aoc11/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc11" +version = "0.1.0" + diff --git a/2016/aoc11/Cargo.toml b/2016/aoc11/Cargo.toml new file mode 100644 index 0000000..e0b3f68 --- /dev/null +++ b/2016/aoc11/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc11" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] + diff --git a/2016/aoc11/input.txt b/2016/aoc11/input.txt new file mode 100644 index 0000000..d453804 --- /dev/null +++ b/2016/aoc11/input.txt @@ -0,0 +1,4 @@ +The first floor contains a strontium generator, a strontium-compatible microchip, a plutonium generator, and a plutonium-compatible microchip. +The second floor contains a thulium generator, a ruthenium generator, a ruthenium-compatible microchip, a curium generator, and a curium-compatible microchip. +The third floor contains a thulium-compatible microchip. +The fourth floor contains nothing relevant. diff --git a/2016/aoc11/src/main.rs b/2016/aoc11/src/main.rs new file mode 100644 index 0000000..39a6e2f --- /dev/null +++ b/2016/aoc11/src/main.rs @@ -0,0 +1,166 @@ + +use std::collections::HashMap; + +//const MICROS: usize = 2; //example +const MICROS: usize = 7; + +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +struct State { + microchips: [[bool; MICROS]; 4], + generators: [[bool; MICROS]; 4], + elevator: usize +} + +impl State { + fn is_final(&self) -> bool { + let floor = 3; + + for i in 0..MICROS { + if !self.microchips[floor][i] || !self.generators[floor][i] { + return false; + } + } + true + } + + fn is_safe(&self) -> bool { + for floor in 0..4 { + for i in 0..MICROS { + for j in 0..MICROS { + //need to be on same floor, if any other micro is there + if self.generators[floor][j] && !self.generators[floor][i] && self.microchips[floor][i] { + return false; + } + } + } + } + true + } + + fn valid_moves(&self) -> Vec<State> { + let mut moves = Vec::new(); + + let mut new_floors = Vec::new(); + if self.elevator > 0 { + new_floors.push(self.elevator-1); + } + if self.elevator < 3 { + new_floors.push(self.elevator+1); + } + for &new_floor in new_floors.iter() { + + //items to take can be: one micro, one generator, two micros, two generator, one of each + + //one micro + for i in 0..MICROS { + if self.microchips[self.elevator][i] { + moves.push(self.move_micro(i, self.elevator, new_floor)); + } + } + //one generator + for i in 0..MICROS { + if self.generators[self.elevator][i] { + moves.push(self.move_generator(i, self.elevator, new_floor)); + } + } + //two micros + for i in 0..MICROS { + for j in i+1..MICROS { + if self.microchips[self.elevator][i] && self.microchips[self.elevator][j] { + moves.push(self.move_micro(i, self.elevator, new_floor).move_micro(j, self.elevator, new_floor)); + } + } + } + //two generators + for i in 0..MICROS { + for j in i+1..MICROS { + if self.generators[self.elevator][i] && self.generators[self.elevator][j] { + moves.push(self.move_generator(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor)); + } + } + } + //one of each + for i in 0..MICROS { + for j in 0..MICROS { + if self.microchips[self.elevator][i] && self.generators[self.elevator][j] { + moves.push(self.move_micro(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor)); + } + } + } + } + + moves.iter().filter(|x| x.is_safe()).cloned().collect() + } + + fn move_micro(&self, micro: usize, floor: usize, new_floor: usize) -> State { + let mut new_state = self.clone(); + new_state.microchips[floor][micro] = false; + new_state.microchips[new_floor][micro] = true; + new_state.elevator = new_floor; + new_state + } + fn move_generator(&self, gen: usize, floor: usize, new_floor: usize) -> State { + let mut new_state = self.clone(); + new_state.generators[floor][gen] = false; + new_state.generators[new_floor][gen] = true; + new_state.elevator = new_floor; + new_state + } +} + +fn main() { + //Stronium, plutonium, thulium, ruthenium, curium, electrium, dilithium + let initial = State { + microchips: + [[true, true, false, false, false, true, true], + [false, false, false, true, true, false, false], + [false, false, true, false, false, false, false], + [false, false, false, false, false, false, false]], + generators: + [[true, true, false, false, false, true, true], + [false, false, true, true, true, false, false], + [false, false, false, false, false, false, false], + [false, false, false, false, false, false, false]], + elevator: 0 + }; + + /* + //example + let initial = State { + microchips: + [[true, true], + [false, false], + [false, false], + [false, false]], + generators: + [[false, false], + [true, false], + [false, true], + [false, false]], + elevator: 0 + }; + */ + + let mut states: HashMap<State, u32> = HashMap::new(); + states.insert(initial, 0); + + let mut moves = 0; + loop { + if states.iter().any(|(state, _)| state.is_final()) { + break; + } + + let new_states: Vec<State> = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| state.valid_moves()).collect(); + + moves += 1; + + for state in new_states { + if !states.contains_key(&state) { + states.insert(state, moves); + } + } + } + + + println!("Moves required: {}", moves); +} diff --git a/2016/aoc12/Cargo.lock b/2016/aoc12/Cargo.lock new file mode 100644 index 0000000..24237f4 --- /dev/null +++ b/2016/aoc12/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc12" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc12/Cargo.toml b/2016/aoc12/Cargo.toml new file mode 100644 index 0000000..f224921 --- /dev/null +++ b/2016/aoc12/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc12" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc12/input.txt b/2016/aoc12/input.txt new file mode 100644 index 0000000..bb2a2ff --- /dev/null +++ b/2016/aoc12/input.txt @@ -0,0 +1,23 @@ +cpy 1 a +cpy 1 b +cpy 26 d +jnz c 2 +jnz 1 5 +cpy 7 c +inc d +dec c +jnz c -2 +cpy a c +inc a +dec b +jnz b -2 +cpy c b +dec d +jnz d -6 +cpy 17 c +cpy 18 d +inc a +dec d +jnz d -2 +dec c +jnz c -5 diff --git a/2016/aoc12/src/main.rs b/2016/aoc12/src/main.rs new file mode 100644 index 0000000..2356402 --- /dev/null +++ b/2016/aoc12/src/main.rs @@ -0,0 +1,136 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +enum Instruction { + CpyLit(i32, usize), + CpyReg(usize, usize), + Inc(usize), + Dec(usize), + Jnz(usize, i32), + Jmp(i32), + Noop +} + +impl Instruction { + fn parse(line: &str) -> Instruction { + let cpy_lit: Regex = Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap(); + let cpy_reg = Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap(); + let inc = Regex::new(r"inc (a|b|c|d)").unwrap(); + let dec = Regex::new(r"dec (a|b|c|d)").unwrap(); + let jnz_lit = Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap(); + let jnz_reg = Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap(); + + let cpy_lit_match = cpy_lit.captures(line); + let cpy_reg_match = cpy_reg.captures(line); + let inc_match = inc.captures(line); + let dec_match = dec.captures(line); + let jnz_lit_match = jnz_lit.captures(line); + let jnz_reg_match = jnz_reg.captures(line); + + if cpy_lit_match.is_some() { + let cap = cpy_lit_match.unwrap(); + let src: i32 = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + Instruction::CpyLit(src, dest) + } + else if cpy_reg_match.is_some() { + let cap = cpy_reg_match.unwrap(); + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + Instruction::CpyReg(src, dest) + } + else if inc_match.is_some() { + let cap = inc_match.unwrap(); + let dest = to_register_index(cap.at(1).unwrap()); + Instruction::Inc(dest) + } + else if dec_match.is_some() { + let cap = dec_match.unwrap(); + let dest = to_register_index(cap.at(1).unwrap()); + Instruction::Dec(dest) + } + else if jnz_lit_match.is_some() { + let cap = jnz_lit_match.unwrap(); + let condition: i32 = cap.at(1).unwrap().parse().unwrap(); + let offset: i32 = cap.at(2).unwrap().parse().unwrap(); + if condition != 0 { + Instruction::Jmp(offset) + } + else { + Instruction::Noop + } + } + else if jnz_reg_match.is_some() { + let cap = jnz_reg_match.unwrap(); + let condition = to_register_index(cap.at(1).unwrap()); + let offset: i32 = cap.at(2).unwrap().parse().unwrap(); + Instruction::Jnz(condition, offset) + } + else { + panic!("Invalid instruction line") + } + } +} + +fn main() { + let program = read_file(); + + let mut registers: [i32; 4] = [0, 0, 1, 0]; + let mut pc: usize = 0; + + while pc < program.len() { + let mut pc_next: usize = pc+1; + + match program[pc] { + Instruction::CpyLit(src, dest) => { + registers[dest] = src; + }, + Instruction::CpyReg(src, dest) => { + registers[dest] = registers[src]; + }, + Instruction::Inc(dest) => { + registers[dest] += 1; + }, + Instruction::Dec(dest) => { + registers[dest] -= 1; + }, + Instruction::Jnz(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::Jmp(offset) => { + pc_next = (pc as i32 + offset) as usize + }, + Instruction::Noop => {} + } + + pc = pc_next; + } + + println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]); + +} + +fn to_register_index(name: &str) -> usize { + match name { + "a" => 0, + "b" => 1, + "c" => 2, + "d" => 3, + _ => panic!("Invalid register provided") + } +} + +fn read_file() -> Vec<Instruction> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .map(|line| Instruction::parse(line.trim())) + .collect() +} diff --git a/2016/aoc13/Cargo.lock b/2016/aoc13/Cargo.lock new file mode 100644 index 0000000..d60f2c7 --- /dev/null +++ b/2016/aoc13/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc13" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc13/Cargo.toml b/2016/aoc13/Cargo.toml new file mode 100644 index 0000000..347a1a4 --- /dev/null +++ b/2016/aoc13/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc13" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc13/src/main.rs b/2016/aoc13/src/main.rs new file mode 100644 index 0000000..2c0e70e --- /dev/null +++ b/2016/aoc13/src/main.rs @@ -0,0 +1,64 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::HashMap; + +fn main() { + //let target = (7, 4); + let target = (31,39); + + let mut states: HashMap<(i32, i32), u32> = HashMap::new(); + states.insert((1, 1), 0); + let mut moves = 0; + while moves < 50 { +/* if states.iter().any(|(&state, _)| state == target) { + break; + } +*/ + let new_states: Vec<(i32, i32)> = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| available_steps(state)).collect(); + + moves += 1; + + for state in new_states { + if !states.contains_key(&state) { + states.insert(state, moves); + } + } + } + + println!("Moves required: {}", moves); + println!("Possible destinations: {}", states.iter().count()); +} + + +fn available_steps(current: &(i32, i32)) -> Vec<(i32, i32)> { + let &(x0, y0) = current; + let mut results = Vec::new(); + for &(x, y) in [(x0-1, y0), (x0+1, y0), (x0, y0-1), (x0, y0+1)].iter() { + if x >= 0 && y >= 0 && !is_wall(x, y) { + results.push((x, y)); + } + } + results +} + +fn print_map() { + for y in 0..10 { + for x in 0..10 { + print!("{}", if is_wall(x, y) {'#'} else {'.'}); + } + println!(""); + } +} + +fn is_wall(x: i32, y: i32) -> bool { +// let favourite_number = 10; + let favourite_number = 1352; + let funny_num = x*x + 3*x + 2*x*y + y + y*y + favourite_number; + let bin = format!("{:b}", funny_num); + let number_of_ones = bin.chars().filter(|&c| c == '1').count(); + number_of_ones % 2 == 1 +} diff --git a/2016/aoc14/Cargo.lock b/2016/aoc14/Cargo.lock new file mode 100644 index 0000000..a889c91 --- /dev/null +++ b/2016/aoc14/Cargo.lock @@ -0,0 +1,14 @@ +[root] +name = "aoc14" +version = "0.1.0" +dependencies = [ + "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "md5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd" diff --git a/2016/aoc14/Cargo.toml b/2016/aoc14/Cargo.toml new file mode 100644 index 0000000..eb3f92d --- /dev/null +++ b/2016/aoc14/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc14" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +md5 = "^0.2"
\ No newline at end of file diff --git a/2016/aoc14/src/main.rs b/2016/aoc14/src/main.rs new file mode 100644 index 0000000..d9410ce --- /dev/null +++ b/2016/aoc14/src/main.rs @@ -0,0 +1,84 @@ +extern crate md5; + +use std::collections::HashMap; + +fn main() { +// let input = "abc"; + let input = "yjdafjpo"; + let mut index = 0; + let mut results_found = 0; + + let mut hash_memo = HashMap::new(); + while results_found < 64 { + let hash = stretched_hash(format!("{}{}", input, index), &mut hash_memo); + + let threes = find_concurrent_symbols(&hash, 3, true); + if threes.len() > 0 { +// println!("Found three at {} -> {}", index, hash); + for i in 1..1001 { + let hash = stretched_hash(format!("{}{}", input, index+i), &mut hash_memo); + let fives = find_concurrent_symbols(&hash, 5, false); + if fives.iter().any(|c| threes.contains(c)) { + results_found += 1; +// println!("Five found at {} -> {}", index+i, hash); + println!("Found hash {} at index {}", results_found, index); + break; + } + } + } + index += 1; + } + +} + +fn find_concurrent_symbols(hash: &String, count: u8, exit_early: bool) -> Vec<char> { + let mut last_symbol = None; + let mut last_symbol_run = 0; + let mut matches = Vec::new(); + for c in hash.chars() { + let symbol_matches = match last_symbol { + Some(s) => s == c, + None => false + }; + + if symbol_matches { + last_symbol_run += 1; + if last_symbol_run >= count && !matches.contains(&c) { + matches.push(c); + if exit_early { + break; + } + } + } else { + last_symbol = Some(c); + last_symbol_run = 1; + } + } + + matches +} + +fn hash_to_string(hash: &[u8; 16]) -> String { + let mut result = String::with_capacity(32); + + for &byte in hash.iter() { + result.push_str(format!("{:02x}", byte).as_ref()); + } + result +} + +fn stretched_hash(input: String, memo: &mut HashMap<String, String>) -> String { + memo.entry(input.clone()).or_insert_with(|| { + let mut result = input; + for _ in 0..2017 { + result = string_hash(result); + } + result + }).clone() +} + +fn string_hash(input: String) -> String { + let bytes_to_hash = input.into_bytes(); + let hash = md5::compute(bytes_to_hash.as_slice()); + hash_to_string(&hash) +} diff --git a/2016/aoc15/Cargo.lock b/2016/aoc15/Cargo.lock new file mode 100644 index 0000000..38f1d9c --- /dev/null +++ b/2016/aoc15/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc15" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc15/Cargo.toml b/2016/aoc15/Cargo.toml new file mode 100644 index 0000000..eb75c1d --- /dev/null +++ b/2016/aoc15/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc15" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc15/input.txt b/2016/aoc15/input.txt new file mode 100644 index 0000000..c4cf544 --- /dev/null +++ b/2016/aoc15/input.txt @@ -0,0 +1,7 @@ +Disc #1 has 17 positions; at time=0, it is at position 5. +Disc #2 has 19 positions; at time=0, it is at position 8. +Disc #3 has 7 positions; at time=0, it is at position 1. +Disc #4 has 13 positions; at time=0, it is at position 7. +Disc #5 has 5 positions; at time=0, it is at position 1. +Disc #6 has 3 positions; at time=0, it is at position 0. +Disc #7 has 11 positions; at time=0, it is at position 0. diff --git a/2016/aoc15/src/main.rs b/2016/aoc15/src/main.rs new file mode 100644 index 0000000..a7f0f64 --- /dev/null +++ b/2016/aoc15/src/main.rs @@ -0,0 +1,35 @@ +extern crate regex; + +use regex::Regex; +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + + +fn main() { + let gears = read_file(); + let pass = (0..).find(|&i| can_pass(&gears, i)).expect("Reached end of infinite range without finding output"); + println!("First pass at t={}", pass); +} + +fn can_pass(gears: &Vec<(i32, i32, i32)>, time: i32) -> bool { + gears.iter().all(|&(time_offset, init_pos, gear_size)| (init_pos + time_offset + time) % gear_size == 0) +} + +fn read_file() -> Vec<(i32, i32, i32)> { + let file = BufReader::new(File::open("input.txt").unwrap()); + let line_regex = Regex::new(r"Disc #(\d+) has (\d+) positions; at time=0, it is at position (\d+).").unwrap(); + file.lines() + .filter_map(|line| { + line_regex.captures(line.unwrap().as_ref()).and_then(|cap| { + let time_offset = cap.at(1).and_then(|s| s.parse::<i32>().ok()); + let init_pos = cap.at(3).and_then(|s| s.parse::<i32>().ok()); + let gear_size = cap.at(2).and_then(|s| s.parse::<i32>().ok()); + match (time_offset, init_pos, gear_size) { + (Some(a), Some(b), Some(c)) => Some((a,b,c)), + _ => None + } + }) + }) + .collect() +} diff --git a/2016/aoc16/Cargo.lock b/2016/aoc16/Cargo.lock new file mode 100644 index 0000000..af71beb --- /dev/null +++ b/2016/aoc16/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc16" +version = "0.1.0" + diff --git a/2016/aoc16/Cargo.toml b/2016/aoc16/Cargo.toml new file mode 100644 index 0000000..3e56892 --- /dev/null +++ b/2016/aoc16/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc16" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc16/src/main.rs b/2016/aoc16/src/main.rs new file mode 100644 index 0000000..c5ecd10 --- /dev/null +++ b/2016/aoc16/src/main.rs @@ -0,0 +1,68 @@ +fn main() { + let data = initial(); + let expanded = expand_to_size(data, 35651584); + let check = checksum(expanded); + print(&check); +} + +fn initial() -> Vec<bool> { + to_bit_vec("10001001100000001") +} + +fn to_bit_vec(input: &str) -> Vec<bool> { + input.chars().map(|c| c == '1').collect() +} + +fn expand(a: Vec<bool>) -> Vec<bool> { + let mut b = a.clone(); + b.reverse(); + b = b.iter().map(|x| !x).collect(); + + let mut out = a.clone(); + out.push(false); + out.append(&mut b); + out +} + +fn expand_to_size(init: Vec<bool>, size: usize) -> Vec<bool> { + let mut out = init.clone(); + while out.len() < size { + out = expand(out); + } + out.truncate(size); + out +} + +fn checksum(data: Vec<bool>) -> Vec<bool> { + let mut check: Vec<bool> = data.chunks(2).map(|x| x[0] == x[1]).collect(); + if check.len() % 2 == 0 { + check = checksum(check); + } + check +} + +fn print(data: &Vec<bool>) { + for &bit in data { + print!("{}", if bit {'1'} else {'0'}); + } + println!(""); +} + +#[test] +fn test_expand() { + assert_eq!(expand(to_bit_vec("1")), to_bit_vec("100")); + assert_eq!(expand(to_bit_vec("0")), to_bit_vec("001")); + assert_eq!(expand(to_bit_vec("11111")), to_bit_vec("11111000000")); + assert_eq!(expand(to_bit_vec("111100001010")), to_bit_vec("1111000010100101011110000")); +} + +#[test] +fn test_expand_to_size() { + assert_eq!(expand_to_size(to_bit_vec("10000"), 20), to_bit_vec("10000011110010000111")); +} + +#[test] +fn test_checksum() { + assert_eq!(checksum(to_bit_vec("10000011110010000111")), to_bit_vec("01100")); +} + diff --git a/2016/aoc17/Cargo.lock b/2016/aoc17/Cargo.lock new file mode 100644 index 0000000..488e59b --- /dev/null +++ b/2016/aoc17/Cargo.lock @@ -0,0 +1,14 @@ +[root] +name = "aoc17" +version = "0.1.0" +dependencies = [ + "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "md5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd" diff --git a/2016/aoc17/Cargo.toml b/2016/aoc17/Cargo.toml new file mode 100644 index 0000000..88c211c --- /dev/null +++ b/2016/aoc17/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc17" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +md5 = "^0.2"
\ No newline at end of file diff --git a/2016/aoc17/src/main.rs b/2016/aoc17/src/main.rs new file mode 100644 index 0000000..77fdf2e --- /dev/null +++ b/2016/aoc17/src/main.rs @@ -0,0 +1,98 @@ +extern crate md5; + +#[derive(Clone)] +struct State { + input: String, + path: String, + x: i8, + y: i8 +} + +impl State { + fn open_directions(&self) -> Vec<(char, i8, i8)> { + let hash_input = format!("{}{}", self.input, self.path); + let hash = md5::compute(hash_input.into_bytes().as_slice()); + + let mut results = Vec::new(); + if hash[0]/16 > 10 && self.y > 0 { + results.push(('U', 0, -1)); + } + if hash[0]%16 > 10 && self.y < 3 { + results.push(('D', 0, 1)); + } + if hash[1]/16 > 10 && self.x > 0 { + results.push(('L', -1, 0)); + } + if hash[1]%16 > 10 && self.x < 3 { + results.push(('R', 1, 0)); + } + + results + } + + fn next_states(&self) -> Vec<State> { + self.open_directions().iter() + .map(|&(dir, dx, dy)| State { + input: self.input.clone(), + path: { + let mut p = self.path.clone(); + p.push(dir); + p + }, + x: self.x + dx, + y: self.y + dy + }).collect() + } + + fn is_final(&self) -> bool { + self.x == 3 && self.y == 3 + } +} + +fn main() { + let initial = State { + input: "lpvhkcbi".to_string(), + path: String::new(), + x: 0, + y: 0 + }; + + let final_state = find_final_state(initial.clone()); + let longest_path = find_longest_path(initial); + + println!("Final State Path: {}", final_state.path); + println!("Longest Path: {}", longest_path); +} + +fn find_final_state(initial: State) -> State { + let mut states = vec!(initial); + + loop { + match states.iter().find(|s| s.is_final()) { + Some(final_state) => {return final_state.clone();}, + None => {} + }; + + states = states.iter().flat_map(|s| s.next_states()).collect(); + } +} + +fn find_longest_path(initial: State) -> u32 { + let mut states = vec!(initial); + let mut current_longest = 0; + + while states.len() > 0 { + + match states.iter().find(|s| s.is_final()) { + Some(final_state) => {current_longest = final_state.path.len() as u32;}, + None => {} + }; + + states = states.iter() + .filter(|s| !s.is_final()) + .flat_map(|s| s.next_states()) + .collect(); + } + + current_longest +} diff --git a/2016/aoc18/Cargo.lock b/2016/aoc18/Cargo.lock new file mode 100644 index 0000000..d26659d --- /dev/null +++ b/2016/aoc18/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc18" +version = "0.1.0" + diff --git a/2016/aoc18/Cargo.toml b/2016/aoc18/Cargo.toml new file mode 100644 index 0000000..5eadfea --- /dev/null +++ b/2016/aoc18/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc18" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc18/src/main.rs b/2016/aoc18/src/main.rs new file mode 100644 index 0000000..52ad7a9 --- /dev/null +++ b/2016/aoc18/src/main.rs @@ -0,0 +1,20 @@ +fn main() { + let init: Vec<char> = ".^^..^...^..^^.^^^.^^^.^^^^^^.^.^^^^.^^.^^^^^^.^...^......^...^^^..^^^.....^^^^^^^^^....^^...^^^^..^".chars().collect(); + + let mut map = Vec::new(); + map.push(init); + + for _ in 1..400000 { + let last = map.last().unwrap().clone(); + let mut next = Vec::new(); + for i in 0..last.len() { + let left = if i == 0 { '.' } else { last[i-1] }; + let right = if i == last.len()-1 { '.' } else { last[i+1] }; + next.push(if left == right { '.' } else { '^' }); + } + map.push(next); + } + + let safe_count = map.iter().map(|row| row.iter().filter(|&&c| c=='.').count() as u32).sum::<u32>(); + println!("Safe tiles: {}", safe_count); +} diff --git a/2016/aoc19/Cargo.lock b/2016/aoc19/Cargo.lock new file mode 100644 index 0000000..7dc8a26 --- /dev/null +++ b/2016/aoc19/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc19" +version = "0.1.0" + diff --git a/2016/aoc19/Cargo.toml b/2016/aoc19/Cargo.toml new file mode 100644 index 0000000..17889e3 --- /dev/null +++ b/2016/aoc19/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc19" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc19/src/main.rs b/2016/aoc19/src/main.rs new file mode 100644 index 0000000..1930d8d --- /dev/null +++ b/2016/aoc19/src/main.rs @@ -0,0 +1,42 @@ +fn main() { + part1(); + part2(); +} + +fn part1() { + let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>(); + + let mut eliminate_mod = 1; + + while elves.len() > 1 { + let next_mod = if elves.len() % 2 == eliminate_mod { 0 } else { 1 }; + elves = elves.iter() + .enumerate() + .filter(|&(i, _)| i % 2 != eliminate_mod) + .map(|(_, &e)| e) + .collect(); + eliminate_mod = next_mod; + } + + let elf = elves[0]; + println!("Elf {} gets all the presents in part 1", elf); +} + +fn part2() { + let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>(); + + let mut i = 0; + while elves.len() > 1 { + i = i % elves.len(); + let to_eliminate = (i + elves.len() / 2) % elves.len(); +// println!("Elf {} is taking presents from elf {}", elves[i], elves[to_eliminate]); + elves.remove(to_eliminate); + if to_eliminate > i { + i += 1; + } + } + + let elf = elves[0]; + println!("Elf {} gets all the presents in part 2", elf); + +} diff --git a/2016/aoc2/Cargo.lock b/2016/aoc2/Cargo.lock new file mode 100644 index 0000000..b0dbf6e --- /dev/null +++ b/2016/aoc2/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc2" +version = "0.1.0" + diff --git a/2016/aoc2/Cargo.toml b/2016/aoc2/Cargo.toml new file mode 100644 index 0000000..e4dcc6f --- /dev/null +++ b/2016/aoc2/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc2" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] diff --git a/2016/aoc2/input.txt b/2016/aoc2/input.txt new file mode 100644 index 0000000..ba5a73d --- /dev/null +++ b/2016/aoc2/input.txt @@ -0,0 +1,5 @@ +RUDULRLLUULRURDDRRUDURULLLDRLRLUDDLUDUDDUDRRDUDULDUUULLRULLRLDDLDLDDRLRRRRUDLLDDUULDRLLUDDRRUURLULRRRDLLURRUUDURUDDURLUDDDLUDDUUDUURUDLRDRDRLRDRLDRUDRUUDLRDDRRURDDLRDDRRURDUDDLULLUDRURURRRLRRUDUULULULRRLDLUDUURRLLRUDLLDRDDLRRRULRUDLULDDLLLULDLRUDLLLLRDDLRDRLDRLLRDRRDLRDULULRLLLDRUDRRRUULRUULDRURLUDRURRDLLDLRDLDDDDRRLUDLRRLUUUURDRDDLRRURURRDUULLRLURLURUDDDRDURDUUDRLRLRRLDDLDLDLDDDUDDULURLDDLLRLRRDULUDDLULRLUDDLDLRULUUUDRLDRUDURLUDDRLLRUULDLRRRRDLLLLURULLRDRRUDLUULRRDLLRLRLUDLDDULLDLLRDLDLL +LLUUUUUUDUDRLRDRDLDURRRLLRRLRURLLUURRLLUDUDLULUURUUURDLUDLDDLULLRDLRUULDLRDUDURLLDDUDUDULLUDDUULLLUULRRRLULRURRDLRUDUDDURRRDRUURDURLLULLRULLDRUULLURLDRDUUDDDDDDRRLDRLRRRLULDDUURRLLLLDRURLURDRDRDURUDUURRDUDUDRLLUUDDRLUDDDRDLDLRLDRURRDLLRULDRLLURURRLUULLRLRRURDDRDRUUURUURUUUDLLRRLUDRLDLRLURLDLUDDUDDDLDUDRRLDLRURULRLLRDUULURRRULDLLLRLDDDUURRRRDULLRURRLULULDLRRUDUDDLRUURDLDUDDUDRRDLRRRDUDUUUDLLDDDDLURLURRRUUULLLULRRLLLLLLULDUUDLRUDRRDLRDUUDUDLLRLDLLRUURDUUURUUUDDLLUUDLULDURLULULUUUDRUDULLURRULRULLRDLDDU +RLUUURULLDLRLDUDRDURRDUURLLUDDDUULRRRLRLURDDRUULUDULDUUDDDDUDDDDRUDDLDUUDRUDLRRRLLRDDLLLRLLRUULRUULDDRURRLURRLRLULDDRRRDDURDDRDRDULRUDRUUDULRLLULDLRLLDRULRDDRRDDUDLRLLUDRDRRRLUDULRDLRDDURRUUDDRRUDURRUUUDDRRDUDURLUUDUDUURDDDLURLULLUULULURUDUUDRUDULLUUULURDLDUULLDDLLDULRLRLRDUUURUUDLRLDURUDRLDULLUDLDLLRDUURRDUDURLUUUDLLRRULRLULRLDLLURDURRULRLLRRDUDLLRDRRRRDLUUDRUUUDDLRLUDDDDDDRURRRUUURRDLLRURLDDLLDLRRLLLDRRULRRUDLDRDDRRLULURLLUURURURRRRUUUUURUDURLRLLLULULDLLDLRDRRULUDUDRDRRDRDRRDUDLLLRUDRUDDDULRULRRRDRLRUUUURUDURDUUULLULRUDDULDUUDLDURRD +ULRULDDLDLULLLRRRLRUDDDDDLLDDUDLRRDULUUDRDLRRURDRRLUULRURUDRRULDLLLUDRUUDULULUDDRUDDDRDURRRDRDUUURLRDULUDRDRLDRUDDLLLDRRULUDLUDLDLLRRUDUULULDLDLLUURDLDDLLUUDURLURLLLDRDLDRRLRULUURRDRULRUUURULRRUDDDDLLDLDDLLRRLRRRRDUUDUDLDRDRRURDLRURULDLRDLLLLRUDRLLRDLRLRDURDRUDURRRLRDRDLLRLUDDDDRLRLLDUURRURLUURUULUDLUURDRRUDDLUDUDDDURRDRUDRLRULDULUUUUUUDDUDRUDUUURUDRRDLUDLUUDUULUDURDLDDDLLURRURUUDUDDRRDRLLULULDRLRURRDDDRDUUURDDDRULUDRDDLDURRLDDDLRRRLDDRDURULDLUDLLLURLURRLRRULDLLDDUDRRULDRRRRLURRUULRRRUDLURDLLDLLDULUUDRRLDLLLDRLRUDLUULDLDRUDUDURDRUDRDDDLRLULLUR +LRLUUURRLRRRRRUURRLLULRLULLDLUDLUDRDDRLDLRLULLURDURLURDLLRLDUUDDURRRRLDLLRULLRLDLLUUDRLDDLLDRULDRLLRURDLRURRUDLULLRURDLURRURUDULLDRLLUUULUDRURRUUDUDULUUULRLDDULDRDLUDDUDDDLRURULLDLLLRLLUURDLRUDLLLLDLLRLRUUUDDRUUUUDLDLRDDURLDURUULLLUUDLLLLDULRRRLLDLDRRDRLUDRUDURLLUDLRLLUDUDRDDDRDLRDLRULUULDRLUDLRLDUURLRRLUDDDUUDDDUDRLDLDUDLURUULLDDDURUUULRLUDLDURUUDRDRURUDDUURDUUUDLLDLDLDURUURLLLLRURUURURULRULLRUDLRRUUUUUDRRLLRDDUURDRDRDDDUDRLURDRRRUDLLLDURDLUUDLLUDDULUUDLDUUULLDRDLRURUURRDURRDLURRRRLLUUULRDULDDLDUURRDLDLLULRRLLUDLDUDLUUL diff --git a/2016/aoc2/src/main.rs b/2016/aoc2/src/main.rs new file mode 100644 index 0000000..f4c3bfd --- /dev/null +++ b/2016/aoc2/src/main.rs @@ -0,0 +1,61 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +fn main() { + let lines = read_file(); + let mut current = 5; + for line in lines { + current = line.chars().fold(current, |current, dir| move_char_hex(current, dir)); + println!("{:X}", current); + } +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + + +//assume current in 1-9 range, and char is in UDLR +fn move_char(current: i32, dir: char) -> i32 { + match dir { + 'U' => if current <= 3 { current } else { current - 3}, + 'D' => if current >= 7 { current } else { current + 3}, + 'L' => if current%3 == 1 { current } else { current - 1}, + 'R' => if current%3 == 0 { current } else { current + 1}, + _ => panic!("Bad direction character") + } +} + +// 1 +// 2 3 4 +// 5 6 7 8 9 +// A B C +// D +fn move_char_hex(current: i32, dir: char) -> i32 { + match dir { + 'U' => match current { + 1|2|4|5|9 => current, + 3|13 => current - 2, + _ => current - 4 + }, + 'D' => match current { + 5|10|13|12|9 => current, + 1|11 => current + 1, + _ => current + 4 + }, + 'L' => match current { + 1|2|5|10|13 => current, + _ => current - 1 + }, + 'R' => match current { + 1|4|9|12|13 => current, + _ => current + 1 + }, + _ => panic!("Bad direction character") + } +} diff --git a/2016/aoc20/Cargo.lock b/2016/aoc20/Cargo.lock new file mode 100644 index 0000000..26be916 --- /dev/null +++ b/2016/aoc20/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc20" +version = "0.1.0" + diff --git a/2016/aoc20/Cargo.toml b/2016/aoc20/Cargo.toml new file mode 100644 index 0000000..4c1e873 --- /dev/null +++ b/2016/aoc20/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc20" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc20/input.txt b/2016/aoc20/input.txt new file mode 100644 index 0000000..c3e912f --- /dev/null +++ b/2016/aoc20/input.txt @@ -0,0 +1,1104 @@ +272152717-281364173 +480675455-489214207 +3562619188-3566180938 +474796666-476679929 +1859288016-1859426304 +3500809029-3520779986 +1711620671-1724624325 +376497036-379822744 +2334350029-2336872286 +2880314906-2881510051 +257912946-260566708 +2964360275-2973540924 +889696219-900080622 +2727172832-2737372242 +33674001-51133436 +2718782366-2736816045 +41293631-52546854 +1064827080-1071610531 +1373807967-1374769067 +3261078460-3268114587 +1583129312-1602482863 +1605269651-1617971405 +365345542-377782493 +2858099254-2862714857 +1147380159-1156709753 +1087934555-1093750979 +998603437-1001868893 +234297440-245049936 +427084952-449321291 +3115490453-3126172818 +0-166475 +2859739533-2864404117 +2879116214-2888999956 +4166942312-4169074982 +2693533587-2694200673 +84162473-84534337 +2164071501-2168305216 +3745751095-3750043362 +2647427848-2647977897 +2028900925-2034847596 +876886411-878398110 +2589041333-2589873869 +876959837-878627172 +431139724-458304869 +1877994382-1887344924 +473575203-475773145 +252091135-257535969 +177110001-177143710 +2722497928-2723521816 +2208127-2536514 +1748077674-1751224226 +2362936907-2381045647 +2020385448-2029519771 +3108825744-3123438032 +872292652-885764819 +305053947-314709696 +2717924562-2718755692 +48149217-51160833 +2149726170-2150134226 +1729844094-1745733187 +1375741284-1378782323 +3744515388-3761146958 +78523085-78634151 +1634372345-1650424418 +3199349237-3209140394 +2011853949-2039316392 +769580925-794759455 +3841896290-3862358298 +3360393034-3379747723 +1120644472-1134516526 +815948131-837832345 +1590411139-1596337230 +2894381219-2935549329 +3688775236-3725245783 +963257634-966114246 +3566641344-3578334024 +1402589368-1434296916 +2742164387-2746045182 +3336884060-3357139723 +1529922302-1532912060 +812048355-820600359 +3535903629-3546917858 +3793132304-3794479774 +2441870431-2446591046 +790688046-795287265 +1094905232-1100177740 +2745878705-2749992348 +119256353-127273572 +3046258846-3057351205 +1754142948-1755600336 +1439035504-1441512409 +2099760008-2108426979 +2336936249-2337901885 +886155227-897744302 +278389264-304413122 +2261948686-2274345666 +3650645303-3661861270 +574462284-588550773 +1759196520-1782105094 +965026392-968307163 +2946755906-2963417308 +1766330775-1797112785 +1200115116-1225710522 +2080628180-2093783866 +2259186780-2265576012 +3422484974-3431403368 +2617357126-2619542029 +3535424340-3544236729 +1159703397-1178419333 +3695852451-3731387995 +2624409231-2626475102 +2462304649-2486546066 +1991659530-1991878310 +3675781139-3676295005 +3077370804-3098240471 +2410139047-2412323245 +1441379095-1464833739 +4254940654-4257828865 +3134602505-3135787446 +1531285367-1533939508 +1982248547-1989219645 +3717359312-3718050739 +1149793223-1159703395 +1718841131-1723739366 +1338353885-1363179561 +432322947-450369838 +3592044590-3598404106 +2783263665-2802135338 +2743201911-2758731127 +2940668500-2946140977 +3588363275-3594330069 +3675945049-3679197388 +154488705-187446525 +1653195306-1670854086 +2771303647-2772439896 +84146114-84264353 +1593778990-1622000763 +1580746474-1580917737 +801556682-801983712 +2268279290-2282899033 +3429390560-3432646573 +1355690206-1364432183 +3364827834-3370027309 +1343867080-1356033542 +2769747098-2802096717 +2451978746-2499145061 +3181481071-3202130015 +149287453-193454621 +2907925124-2933668261 +3525815495-3531996642 +892781900-902374081 +801983714-808209514 +1205516416-1207518863 +3475944050-3479276890 +1680662691-1693249318 +441188152-451875207 +3866263742-3869203885 +872306827-886155226 +3641638239-3656867109 +1292372277-1314188693 +1062559245-1064950825 +2334198700-2335529918 +1122962410-1136372412 +623323144-625918342 +2425193847-2429793856 +373315052-379611660 +2418007458-2424289401 +2149571480-2150070836 +1991878311-1994706041 +3043381174-3046887777 +497434379-500148281 +1825422529-1838184381 +137450473-139095016 +248808686-249748629 +1989969134-1990676913 +960553017-960915199 +2336374612-2337150925 +3369599561-3390928276 +113852260-145672651 +2986681144-2989530365 +3856382204-3873203604 +1657674792-1663548211 +2650185850-2651060935 +1647983099-1662799191 +1082357088-1112329267 +3793767754-3794336046 +3705877748-3728561957 +2769813898-2772369413 +3794164058-3801441915 +623200755-625407322 +1241966895-1253020214 +450369839-463131291 +2717038617-2723107862 +961267447-962353699 +193454623-196340979 +4253667440-4261704870 +3269563154-3275293388 +1505893371-1506880655 +3873203606-3889412741 +443548825-444733658 +3045753812-3049382630 +732764611-733035245 +961034623-961300670 +1373470559-1373526698 +2860192109-2867276065 +3312623058-3313008029 +3942424007-3951811891 +1197857710-1214225356 +458105388-462489469 +4259123154-4263336824 +960863927-961733781 +44819071-52470556 +957158383-958041099 +2543986743-2554322396 +339721933-346413740 +1010736956-1030771663 +4288781458-4289261456 +3687051286-3722932714 +2420813443-2424860115 +1989395087-1989698527 +3473694511-3476125935 +2408526816-2412196386 +1989398215-1991201331 +1526350090-1542206580 +2394556084-2399639414 +3510330656-3522250181 +137874061-144376880 +4167095310-4177987517 +2785359721-2785427263 +15024863-23531388 +1625174667-1658679299 +974122151-995631685 +1540947566-1554930456 +2424921025-2429636819 +1993822183-1994839237 +1094823818-1097108689 +69796587-71291314 +37126017-49427721 +3793022166-3794100162 +908189684-911496714 +2911211968-2917349047 +1227212686-1234159311 +3776286544-3783635666 +3531996644-3536250992 +3396302214-3406687062 +1476456536-1478818018 +2443497737-2447228620 +962292354-965288690 +1833703443-1843811212 +998277195-1000562480 +883225973-896212798 +2202815121-2215802598 +3557733372-3563107357 +2648035823-2649474134 +2723831559-2734044916 +1714279973-1738575730 +110217-574651 +1398965758-1409470798 +2330603686-2335139291 +1506286657-1511280423 +3365567975-3371386015 +466326205-480223737 +1989219647-1989438488 +3008188882-3010347685 +1070925288-1071665482 +2111554226-2123836945 +2137226110-2138852181 +1081261041-1091870264 +1081552237-1090538414 +2000657198-2037677988 +2718009384-2720142472 +925940762-939052067 +4179143261-4191765704 +3426378774-3430410036 +3676393933-3680167774 +3271833171-3277125583 +274414401-283893852 +3124560226-3128380638 +1208163309-1215074110 +2465798305-2494706753 +3050317115-3058897888 +1302678331-1315210828 +1751224227-1758206846 +931444766-948598982 +151669773-180559543 +255864690-255985990 +1556987318-1563743144 +16294070-23923782 +1415762720-1421421169 +3853344243-3864268114 +1280237454-1286328218 +2944350248-2976813361 +2187770126-2203436268 +3505239916-3517301515 +3232015564-3235367871 +2146211145-2166090499 +910952647-911877073 +1579658725-1581392690 +1237242317-1258610777 +2589766513-2598433041 +3449310840-3449858133 +745819525-755688297 +3776094116-3783478049 +2108426981-2124149170 +3449389881-3462604413 +2301503968-2324628965 +1005263513-1027181473 +1952664131-1969650551 +1285113553-1288652959 +3896408883-3908694324 +1920600328-1921999554 +1025403493-1031247416 +3905769594-3930128244 +1031247417-1047578444 +3885007170-3895219247 +3598377658-3599404192 +1697890477-1697912613 +954538505-957768997 +2816494072-2842728200 +492165035-498202012 +3137181704-3152588209 +1755735260-1759196518 +1371495492-1371550991 +2501923864-2514064340 +305959083-311818120 +4250019192-4275532230 +114168261-116414851 +2447228622-2451978745 +766211517-801556681 +3376445798-3394303381 +3501155911-3526104374 +2548986102-2564634962 +3263667615-3270390046 +1807095399-1824137700 +856041972-859823687 +3887315148-3892355947 +1030764665-1045428052 +638833662-640333593 +2121184882-2129744090 +2881011537-2885878144 +3588560066-3597713320 +3124980377-3134500989 +489214209-512240639 +3760702359-3764383643 +1090166392-1096894006 +917419134-922706929 +1296067761-1309424658 +689572986-696039127 +2660085630-2660431880 +680230992-716886780 +1592087783-1598197492 +1530767294-1575862739 +2082087967-2085220519 +2424541691-2426736024 +113504564-116385542 +1916132714-1932780572 +503684477-512284558 +2615977363-2622859043 +4035141786-4047227590 +1663548212-1680662689 +3047614614-3051657189 +2634680042-2641014306 +2583260376-2591896929 +2645275066-2647436256 +64047546-86026817 +1071039399-1072162085 +2594771897-2599508024 +83962861-84534191 +902374083-941216585 +2586806577-2599448524 +1274245593-1274516893 +4031038177-4040911753 +983068813-998624841 +534906133-573925401 +3329216543-3336884059 +4125892395-4138236492 +3807924665-3812644495 +1774911-2450996 +446418646-455236779 +2877486448-2884177700 +1373832888-1373901196 +370639181-384962937 +12016954-19316517 +3134500991-3134627688 +1373501126-1373590483 +1777703220-1777741597 +3743473590-3769013947 +2353521003-2362936906 +2468617254-2477279185 +78550601-78698869 +1273031112-1274488766 +968052409-969178069 +3907082563-3913084150 +3322437732-3338709909 +970661335-978617986 +2985507999-2990149897 +1499815926-1518480568 +2047086312-2056763544 +3154050192-3178489168 +1544927329-1559460655 +614918489-621719308 +3733606954-3743473589 +1499734003-1505336823 +1765493480-1780907733 +1112329269-1144192156 +1908189573-1916132712 +2978158245-2980295974 +854842773-855564041 +3851762797-3856667050 +2987912828-2988480807 +3845355673-3864117699 +2372563028-2379155071 +4164107384-4175248779 +206495443-209268583 +2893360924-2906330615 +1374122783-1374244946 +1315210829-1323332739 +2819221138-2820241142 +2987725800-2988399994 +3420480297-3426061444 +1745733189-1750260936 +2771579434-2772910814 +1721651362-1731098010 +1200223043-1222602885 +3431337889-3434193062 +2412323247-2441870430 +3756861847-3771488683 +853629069-857835277 +3744664061-3763198907 +1371491558-1371529465 +1932780573-1939156498 +3661861272-3662675926 +2648267077-2650619730 +3366486664-3371903512 +1268371412-1276470615 +2691106038-2691272785 +3227264064-3240740070 +1906133184-1910990608 +3853470102-3865286420 +2646285040-2646358000 +2196926231-2206264598 +4257710901-4257836607 +242078367-255972629 +4198987003-4201086361 +1240990629-1248211769 +2749992349-2760767131 +2787866331-2806708160 +809302575-853629067 +3032053776-3036049062 +2943717702-2946230991 +4288724821-4289568650 +3215397670-3224618461 +1858955725-1859353621 +2083864513-2101037055 +694973182-718973623 +4168983031-4174451494 +2807055496-2816494071 +1055347167-1064190974 +3424907263-3427071583 +859417782-872292650 +1467661058-1474811610 +2393002352-2403005964 +4197417217-4208856131 +3370246481-3375696999 +1373468974-1373569404 +2905152772-2910933373 +1980855826-1983920990 +732863279-733152241 +4285742284-4286129026 +1614476697-1614835826 +2635427600-2644232203 +1470741851-1479153638 +2944130276-2951908714 +4291064131-4293894991 +1990921080-1991701381 +4227850767-4244632336 +1807565528-1814396331 +2361860677-2376637038 +2943119919-2945768965 +2172859679-2221926662 +249198701-250135569 +2652844144-2657371637 +1885639221-1900413603 +1509729634-1512261818 +3004310417-3011080364 +1694482383-1697891607 +4177987519-4212820708 +4161048921-4161074968 +476220543-480675454 +2588894890-2592105515 +2757311298-2758434349 +4050934926-4082396822 +2034604741-2043305856 +2331464398-2333528059 +1066956928-1067355622 +2646313639-2648035821 +2066636902-2067863299 +2332503976-2334659414 +3180110462-3204410296 +577236362-586064251 +256418607-258764997 +2233705634-2248146735 +3716569187-3719939659 +1386717710-1439035502 +1859175593-1859580659 +3708021302-3722129580 +3976120818-4005662251 +304413124-306709976 +1395309937-1427985546 +4226665082-4232713677 +4212820709-4214429692 +1693249319-1711620669 +2499145063-2503398930 +3721989699-3733606952 +1717757397-1721218576 +1127769041-1132781724 +3644972707-3646872069 +2077152015-2084609524 +1990599678-1991511335 +2335139292-2353521001 +4088569210-4091483373 +1642017342-1657864055 +2588719725-2589121881 +2903005844-2913683635 +194715771-196440167 +3963719430-3974518407 +4288320832-4289172749 +3151726457-3165427383 +23507982-23800784 +2895160172-2940456225 +1001177233-1005263511 +43609109-48863103 +1144192157-1157514424 +734439882-765944362 +695965351-719454865 +856803507-869754401 +1890217805-1904089509 +3300131715-3305283163 +1529237006-1529595328 +2753090359-2757523819 +828668586-831203389 +3427619213-3428732628 +2967859507-2976560941 +2329569453-2332265395 +2239885549-2252296728 +1293808207-1320485733 +2604175022-2624108715 +2697882453-2723829703 +2463205201-2470677980 +3888353469-3890883045 +400102191-427084950 +4150245199-4164107383 +1395492363-1406000929 +3675122217-3676808853 +116414852-148746047 +787563761-789069064 +3197100188-3202418404 +1373782716-1373895006 +2617111647-2617819575 +2550216289-2557881293 +1851804917-1852370216 +2617793199-2618721355 +1939113565-1942772474 +1066259539-1066964651 +2536515-2749485 +3851513911-3872830251 +3315330215-3350319238 +1372313956-1373952939 +270099979-278389263 +2861061889-2874958905 +2982764434-2982918860 +1225710523-1232594859 +3080849793-3087237669 +2168507276-2172859677 +2554045929-2558669015 +2715737041-2742164385 +2564405335-2570912208 +3111405671-3131810967 +1881537985-1906133183 +2327518639-2329278606 +1695964017-1700687554 +2325334299-2328665915 +2329084251-2329569451 +2526389631-2574332443 +2716903062-2718451591 +177141073-177775415 +177103338-177124151 +1072162087-1081552236 +3178535948-3199349236 +2293206667-2314675667 +1889288474-1903754822 +4251848410-4278329656 +697896245-706915923 +1811201479-1827334058 +102113146-112076690 +2390223078-2399260655 +829332527-848880205 +3861878449-3866482364 +1213011864-1220748067 +3580711167-3587101215 +1286680169-1311818230 +3608853495-3610981230 +1511277091-1513257838 +3450147668-3459285977 +2780989504-2803855679 +3882846313-3888163900 +941216586-953952178 +2983401144-2988059936 +2624108716-2624926759 +3402309579-3420480295 +3312749262-3314042171 +3399699391-3418732708 +4105670961-4129433645 +4257493527-4284962279 +23923784-47709067 +953952180-957049748 +2876724088-2878697891 +2416003985-2423463911 +740946393-742024905 +1380318986-1386717709 +2026496387-2041982393 +3072950856-3095969673 +196440168-234297438 +3324520138-3350841770 +1184551931-1197857708 +3723507322-3732029196 +1781641387-1785877866 +2407131596-2409544298 +5689429-5741644 +1739110416-1741141505 +2548794765-2558310137 +808209515-836691306 +2657455751-2663837619 +790539346-793059170 +568516293-569131984 +3321930331-3346790026 +472011317-479941460 +857857646-863011064 +4168502125-4170164107 +588550774-597747807 +1637815642-1662350209 +2460793334-2466026338 +958041100-970661333 +2139217624-2146211143 +2539598-2830629 +1266192646-1268371411 +1323332741-1335959162 +1439736912-1446610546 +4061001198-4065392221 +2524105557-2526389630 +2222452808-2225462596 +1388815777-1397555491 +3612936376-3650645302 +3045926276-3065706826 +3574212945-3575594696 +2827277916-2836024368 +1991475869-1991926125 +3505806023-3528702608 +2414724634-2430851599 +3021588078-3028285988 +2574332445-2592271496 +2057264136-2059202053 +3244432520-3248685694 +1712738962-1729844093 +56528833-64047545 +2971719660-2977620581 +3605787690-3611524810 +3851574035-3854062441 +1235784822-1266192644 +3006793176-3021032700 +3900016789-3922138525 +1234159313-1235784821 +455883118-466326203 +1053312381-1063953379 +2820222101-2821175967 +2502044549-2506260381 +568736374-569251939 +1578664897-1579658724 +344106424-350103368 +1590175536-1595299212 +2273779785-2277363906 +3984562197-4010152611 +45721618-54860968 +3394303383-3402309578 +1511624839-1512608254 +3884829071-3890292172 +2038966626-2047086310 +4103290900-4119641469 +3357139725-3360393033 +2780813493-2807055494 +2225462598-2252329658 +2592271497-2604175020 +1049541136-1055392314 +1533973152-1578664895 +3209140396-3244432519 +3135787447-3178535946 +1873694527-1911946735 +3716488307-3717917511 +1863079077-1868159650 +1852620713-1869463034 +2340761-6722844 +4010806326-4011637774 +2335714002-2344955062 +2503398931-2516105578 +4096488349-4097750835 +495702052-499886980 +2633949022-2643879390 +2230563996-2248676097 +1992368509-1995459736 +725466259-734439880 +3284564906-3289305182 +3006621951-3015555807 +2221926663-2224742001 +1807424325-1816026389 +1876686839-1880758503 +2691158517-2691387740 +3757816372-3758051212 +2956964132-2972741344 +2636000153-2638744402 +678819639-679798433 +250063049-250516719 +3855876124-3866454360 +3312438883-3313193146 +82686086-84339480 +1092916631-1107918456 +1843811214-1852620712 +3809172487-3830073502 +2616993454-2620553751 +2682855477-2715737040 +3863648987-3866503080 +1271724277-1275741880 +2384026814-2393286163 +2957501262-2965749150 +4213745292-4214551645 +2556715457-2565699508 +2263615-2555032 +2510926180-2524105555 +2198333368-2201790504 +983311745-991202543 +326387197-344106423 +3087807140-3088895982 +86026819-109305037 +2504533668-2507452669 +1371550992-1377668791 +1656901715-1676675657 +130445224-140364961 +875328099-885585914 +2299489843-2306253705 +3450835271-3481339653 +4014358521-4031038176 +2340311395-2351064022 +2883149064-2887845481 +2259592077-2278614136 +3810542228-3827200634 +3056035363-3068664010 +722584522-723699159 +1735688023-1740818227 +3537763412-3542953759 +2366293314-2375211143 +1411814377-1424672790 +3100999210-3102484531 +4284962281-4294967295 +1446610547-1465468961 +2874958907-2877486447 +1765556195-1793446949 +4218980804-4226442852 +494048500-497170493 +360027343-374159699 +2651399811-2665409613 +1047578446-1052368079 +2362920294-2374232484 +2570748019-2571266639 +3256410480-3277105765 +3771488685-3794388011 +722551086-722999678 +741060508-762846249 +1479919768-1481248209 +614971153-617471673 +2982621961-2982812184 +2087732105-2106406062 +2302394373-2326071906 +886110869-893987869 +864175670-867272025 +2119076394-2126808897 +1051546928-1062419089 +678814708-679604844 +2168305217-2172141567 +2943803911-2945854166 +321232218-329790306 +391378250-412099930 +539629846-568721146 +3794388012-3806424827 +2894304683-2915255653 +856495621-857857645 +2743551156-2751996369 +1024955451-1026100964 +177078688-177123406 +4018256524-4039886263 +3945209398-3956309725 +2364930647-2378530823 +1006976522-1021887240 +3757741995-3757947507 +1421470109-1432888460 +3160832331-3169658872 +177045468-177087638 +1090463009-1104430857 +1274373481-1274578120 +2626475104-2640453818 +3284290551-3288427229 +1981618690-1984277097 +1186456381-1195032668 +5052363-7502553 +1509795877-1512150519 +3579924616-3582548171 +4121363479-4137513284 +1488580398-1503472581 +2423275742-2439608584 +2138662322-2138915998 +1382223606-1410305514 +3832391075-3853706505 +1614422103-1614651523 +3369142704-3373032779 +719454867-725466258 +2084732810-2095200322 +1442897307-1457439380 +2112887248-2129529980 +4023595164-4025287662 +611715160-617013605 +778751841-791194910 +3293566719-3305859750 +1772772441-1797304174 +1589764874-1592539287 +1373791581-1374176540 +1590792815-1594025491 +1981551967-1982435626 +1520347646-1542585100 +3099494317-3115490452 +3098240473-3103804691 +3264851832-3269554326 +766110784-766211515 +2019539430-2044044979 +3266317108-3273234008 +1274283817-1274437178 +2650371073-2672921107 +2672921108-2679629874 +2673449969-2682855475 +765944363-766205817 +3853706506-3859959741 +1508362252-1513253382 +876916046-879636492 +3809955806-3810745183 +1274121584-1274542630 +3157351170-3166046719 +1053524276-1064827079 +3791652757-3800601148 +2842728202-2853639142 +3571512615-3579166854 +679353613-679923926 +3809191752-3810740480 +2817388396-2819591739 +2852317315-2861061888 +4256942395-4260208971 +3501898903-3512880687 +3882475326-3886137014 +1966578885-1968167855 +410700018-415718837 +3806424829-3821851233 +1518480570-1533973151 +3147464447-3158958125 +197786374-207567591 +3535028299-3539195436 +4184714120-4186894005 +448892515-456388417 +671686622-678352726 +1360272787-1363580702 +2164873145-2165892440 +3361616306-3375689123 +3091164847-3093370647 +3297273994-3311056250 +398273343-404652855 +1782105095-1803766701 +1484145894-1503189992 +2160023298-2160172849 +2919583395-2932229908 +2812705686-2830443941 +2855216236-2865262494 +148746049-149287452 +589888575-595456264 +314410823-316970816 +2060986022-2063938184 +1803766703-1825422528 +2128237894-2139217623 +4248957737-4257018408 +3561933398-3574109426 +1614389854-1614749576 +468854062-476024564 +436179755-463764255 +589811734-589875676 +673967863-678814706 +979844884-993353080 +1945908845-1980551520 +1990017551-1992668548 +1252508632-1256783095 +2946230992-2982621959 +3954810178-3972017471 +3396778325-3399315311 +3331661742-3344656790 +3072306192-3077370803 +4093061872-4094625093 +2876543933-2878230248 +2854310965-2859128779 +4193316980-4200095285 +730205666-732782756 +3676211467-3676732582 +666890880-674578243 +1371568734-1380318984 +4184744194-4187112660 +1481248211-1499734002 +3379867668-3385527932 +1622428665-1625174665 +3671900758-3678171048 +3705951043-3716692751 +1465468963-1479919767 +1580610051-1583129310 +350103370-365345541 +3900102077-3919890024 +2940456227-2945966226 +3248685696-3284290550 +544295457-564157394 +4016705659-4021147057 +791731732-797225629 +1165689597-1184551930 +3289305184-3312438882 +4097750837-4102130426 +4055841302-4077041304 +3441155355-3450835270 +3314042173-3333554945 +597747809-623200754 +356234097-366220597 +2381045649-2408455595 +4047227592-4049208360 +4092327831-4093008849 +3986217544-4010716485 +3587101217-3589409982 +3939796675-3976120816 +1335959163-1365648715 +3809562980-3810806981 +1374160507-1375189297 +1229723962-1229853859 +2978027850-2978555872 +1081232290-1096685438 +3431403369-3441155353 +3058481098-3072306190 +3615995822-3647806423 +626772256-671686621 +1922970278-1932303880 +687812741-696977728 +3664395391-3676520369 +2073554869-2099760007 +512240640-534906131 +47709068-56528831 +255985991-270099977 +3481339655-3501155910 +2238475796-2249793376 +3866035083-3867269474 +4093117795-4094756619 +4285929403-4287400825 +702714634-707275982 +3036049064-3058481097 +1027080396-1032733050 +113815262-115324511 +2256577067-2275122653 +1990217023-1991256560 +109305038-113504562 +978617987-1000518126 +4057509129-4071389442 +3739975721-3747173973 +320182613-320260227 +1770166-1994691 +291087466-296873313 +4086243810-4096488348 +1276470617-1302918078 +4009439486-4012738003 +4229206868-4234285011 +50143427-53071093 +404422891-410359316 +4161013486-4161053283 +911138009-929609461 +689609396-696731723 +2252329659-2256577065 +613133080-613942155 +4795688-12016953 +641672798-650081964 +389776265-420161914 +3625922134-3642274972 +1846384495-1862435820 +2275122654-2286941521 +4005662252-4011759888 +1579087992-1581111352 +574652-1770165 +1442180635-1450176908 +2760767133-2771395260 +1928232572-1932533591 +102995855-104909244 +4049179426-4050691624 +2830630-3651339 +3552827772-3568200782 +2149613227-2163021264 +1355394428-1371491556 +1697279405-1703102679 +2056763545-2073554867 +3935325191-3944187216 +3553082925-3579924615 +471239627-477134321 +3651340-4795687 +336457769-347991249 +93183635-111293337 +2192128388-2196145589 +2584811687-2598361179 +2772743660-2798530311 +966574237-968633571 +4234775226-4245296919 +3662498499-3663349534 +1373549652-1374239894 +58302860-63670232 +1942772476-1980855825 +3367790115-3376760130 +153092723-163571711 +729975675-730335988 +2192513622-2204700032 +809609217-841628900 +1180032684-1187000735 +1179227554-1195640753 +4232727143-4234293540 +1127122996-1154171178 +314709697-321232216 +324796849-347951368 +1095126621-1109642108 +384962939-400102190 +363929652-366175319 +3821851234-3832391073 +338713138-348077886 +817486506-837487497 +1051940232-1067333023 +19243172-19587047 +257512323-261464746 +1753791137-1753975241 +202493249-230688701 +1579363284-1580767164 +2763246325-2780813492 +2242297310-2249800231 +1995459738-2019539429 +573925402-574462282 +3673851405-3681451655 +3423327301-3428356692 +3681451657-3695852450 +3717161710-3718982299 +2043127586-2043244031 +2888999958-2894304682 +2061236903-2067109739 +2643879391-2646512593 +1139540259-1146292375 +3544236730-3552827770 +2287385837-2325334298 +3598404107-3612936374 +3623885184-3631095478 +1752497514-1756572770 +2817718245-2824409717 +679569338-680230991 +4102130427-4150245197 +1869463036-1881600179 +286732642-289325518 +2995454654-3032053775 +1274816430-1274830828 +4008677258-4014358519 +248491486-248842325 +1622000764-1625125474 +1165689487-1187305806 +3937241402-3968405869 +4050691625-4086243808 +3663349535-3676933438 +2982918861-2995454652 +1372603515-1379417540 +2408455596-2411739453 +201820937-227275418 +1753934804-1754073983 +2280075243-2287385835 +2905919817-2917493149 +2757562598-2759204124 +1444583282-1458937548 +1699259773-1707790200 +1579284365-1579540410 +624710045-626772254 +2971742099-2980188298 +3895219248-3896408881 +1637216769-1663878490 +1606776283-1612157133 +1527331165-1569579671 +1468822607-1477434547 +3930477156-3939796674 +4214551647-4234775225 +1469208064-1469259449 +4245296921-4257493526 +3930128245-3930477154 diff --git a/2016/aoc20/src/main.rs b/2016/aoc20/src/main.rs new file mode 100644 index 0000000..ee14583 --- /dev/null +++ b/2016/aoc20/src/main.rs @@ -0,0 +1,114 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::u32; + +#[derive(Debug)] +struct IpRange { + start: u32, + end: u32 +} + +impl IpRange { + fn new(start: u32, end: u32) -> IpRange { + IpRange { + start: start, + end: end + } + } + + fn contains(&self, other: u32) -> bool { + self.start <= other && other <= self.end + } + + fn try_combine(&self, other: &IpRange) -> Option<IpRange> { + if self.contains(other.start) && self.contains(other.end) { + Some(IpRange::new(self.start, self.end)) + } + else if other.contains(self.start) && other.contains(self.end) { + Some(IpRange::new(other.start, other.end)) + } + else if self.contains(other.start) && other.contains(self.end) { + Some(IpRange::new(self.start, other.end)) + } + else if other.contains(self.start) && self.contains(other.end) { + Some(IpRange::new(other.start, self.end)) + } + else { + None + } + } +} + +fn main() { + let mut ranges = read_file(); + optimize_ranges(&mut ranges); + + let mut allowed = Vec::new(); + + // current will be in the u32 range while it's in the loop, but + // needs to be a u64 to pass u32::MAX. Otherwise it will just + // overflow and run forever. + let mut current: u64 = 0; + while current <= u32::MAX as u64 { + match ranges.iter().find(|range| range.contains(current as u32)) { + Some(blacklisting_range) => { + current = blacklisting_range.end as u64 + 1; + }, + None => { + allowed.push(current as u32); + current += 1; + } + } + } + + let min_not_in_range = allowed[0]; + let allowed_count = allowed.len(); + + println!("Min not in any range: {}", min_not_in_range); + println!("Allowed count: {}", allowed_count); +} + +fn read_file() -> Vec<IpRange> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .filter_map(|line| { + let line = line.unwrap(); + let mut split = line.split('-'); + let start = split.next(); + let end = split.next(); + match (start, end) { + (Some(start), Some(end)) => Some(IpRange { + start: start.parse().unwrap(), + end: end.parse().unwrap() + }), + _ => None + } + }) + .collect() +} + +fn optimize_ranges(ranges: &mut Vec<IpRange>) { + let mut before_count = ranges.len(); + let mut after_count = 0; + while before_count != after_count { + before_count = ranges.len(); + ranges.sort_by_key(|r| r.start); + + let mut i = 0; + while i < ranges.len()-1 { + match ranges[i].try_combine(&ranges[i+1]) { + Some(combined) => { + ranges[i] = combined; + ranges.remove(i+1); + }, + None => {} + } + i += 1; + } + + after_count = ranges.len(); + + println!("Number of ranges {} => {}", before_count, after_count); + } +} diff --git a/2016/aoc21/Cargo.lock b/2016/aoc21/Cargo.lock new file mode 100644 index 0000000..9a1075b --- /dev/null +++ b/2016/aoc21/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc21" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc21/Cargo.toml b/2016/aoc21/Cargo.toml new file mode 100644 index 0000000..bc0d468 --- /dev/null +++ b/2016/aoc21/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc21" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc21/input.txt b/2016/aoc21/input.txt new file mode 100644 index 0000000..ebd7d52 --- /dev/null +++ b/2016/aoc21/input.txt @@ -0,0 +1,100 @@ +rotate based on position of letter d +move position 1 to position 6 +swap position 3 with position 6 +rotate based on position of letter c +swap position 0 with position 1 +rotate right 5 steps +rotate left 3 steps +rotate based on position of letter b +swap position 0 with position 2 +rotate based on position of letter g +rotate left 0 steps +reverse positions 0 through 3 +rotate based on position of letter a +rotate based on position of letter h +rotate based on position of letter a +rotate based on position of letter g +rotate left 5 steps +move position 3 to position 7 +rotate right 5 steps +rotate based on position of letter f +rotate right 7 steps +rotate based on position of letter a +rotate right 6 steps +rotate based on position of letter a +swap letter c with letter f +reverse positions 2 through 6 +rotate left 1 step +reverse positions 3 through 5 +rotate based on position of letter f +swap position 6 with position 5 +swap letter h with letter e +move position 1 to position 3 +swap letter c with letter h +reverse positions 4 through 7 +swap letter f with letter h +rotate based on position of letter f +rotate based on position of letter g +reverse positions 3 through 4 +rotate left 7 steps +swap letter h with letter a +rotate based on position of letter e +rotate based on position of letter f +rotate based on position of letter g +move position 5 to position 0 +rotate based on position of letter c +reverse positions 3 through 6 +rotate right 4 steps +move position 1 to position 2 +reverse positions 3 through 6 +swap letter g with letter a +rotate based on position of letter d +rotate based on position of letter a +swap position 0 with position 7 +rotate left 7 steps +rotate right 2 steps +rotate right 6 steps +rotate based on position of letter b +rotate right 2 steps +swap position 7 with position 4 +rotate left 4 steps +rotate left 3 steps +swap position 2 with position 7 +move position 5 to position 4 +rotate right 3 steps +rotate based on position of letter g +move position 1 to position 2 +swap position 7 with position 0 +move position 4 to position 6 +move position 3 to position 0 +rotate based on position of letter f +swap letter g with letter d +swap position 1 with position 5 +reverse positions 0 through 2 +swap position 7 with position 3 +rotate based on position of letter g +swap letter c with letter a +rotate based on position of letter g +reverse positions 3 through 5 +move position 6 to position 3 +swap letter b with letter e +reverse positions 5 through 6 +move position 6 to position 7 +swap letter a with letter e +swap position 6 with position 2 +move position 4 to position 5 +rotate left 5 steps +swap letter a with letter d +swap letter e with letter g +swap position 3 with position 7 +reverse positions 0 through 5 +swap position 5 with position 7 +swap position 1 with position 7 +swap position 1 with position 7 +rotate right 7 steps +swap letter f with letter a +reverse positions 0 through 7 +rotate based on position of letter d +reverse positions 2 through 4 +swap position 7 with position 1 +swap letter a with letter h diff --git a/2016/aoc21/src/main.rs b/2016/aoc21/src/main.rs new file mode 100644 index 0000000..1366f1e --- /dev/null +++ b/2016/aoc21/src/main.rs @@ -0,0 +1,233 @@ +extern crate regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::VecDeque; + +use regex::Regex; + +fn main() { + let password = "abcdefgh".to_string(); + let program = read_file(); + let scrambled = scramble_password(password, &program); + println!("Scrambled password is {}", scrambled); + let unscrambled = unscramble_password(scrambled, &program); + println!("Which unscrambles to {}", unscrambled); + + let other_scrambled = "fbgdceah".to_string(); + let other_unscrambled = unscramble_password(other_scrambled, &program); + + println!("Decrypted easter bunny password is {}", other_unscrambled); +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + +fn scramble_password(password: String, program: &Vec<String>) -> String { + let mut pass = password.chars().collect::<VecDeque<_>>(); + + let instructions = scramble_instruction_set(); + + for line in program { + for &(ref reg, ref func) in &instructions { + let captures = reg.captures(line.as_ref()); + if captures.is_some() { + func(&mut pass, captures.unwrap()); + } + } + } + + pass.iter().cloned().collect() +} + +fn unscramble_password(password: String, program: &Vec<String>) -> String { + let mut pass = password.chars().collect::<VecDeque<_>>(); + + let instructions = unscramble_instruction_set(); + + let mut backwards_program = program.clone(); + backwards_program.reverse(); + for line in backwards_program { + for &(ref reg, ref func) in &instructions { + let captures = reg.captures(line.as_ref()); + if captures.is_some() { + func(&mut pass, captures.unwrap()); + } + } + } + + pass.iter().cloned().collect() +} + +fn scramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> { + let mut instructions : Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> = Vec::new(); + instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos)); + instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let)); + instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_left)); + instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_right)); + instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), rotate_pos)); + instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub)); + instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), move_pos)); + + instructions +} + +fn unscramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> { + let mut instructions : Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> = Vec::new(); + instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos)); + instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let)); + instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_right)); + instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_left)); + instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), undo_rotate_pos)); + instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub)); + instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), undo_move_pos)); + + instructions +} + +fn swap_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let src = cap.at(1).unwrap().parse::<usize>().unwrap(); + let dest = cap.at(2).unwrap().parse::<usize>().unwrap(); + pass.swap(src, dest); +} + +fn swap_let(pass: &mut VecDeque<char>, cap: regex::Captures) { + let src = cap.at(1).unwrap().chars().next().unwrap(); + let dest = cap.at(2).unwrap().chars().next().unwrap(); + let src_position = pass.iter().position(|&c| c == src); + let dest_position = pass.iter().position(|&c| c == dest); + match (src_position, dest_position) { + (Some(src_pos), Some(dest_pos)) => { + pass.swap(src_pos, dest_pos); + }, + _ => {} + }; +} + +fn rotate_left(pass: &mut VecDeque<char>, cap: regex::Captures) { + let steps = cap.at(1).unwrap().parse::<usize>().unwrap(); + for _ in 0..steps { + let c = pass.pop_front().unwrap(); + pass.push_back(c); + } +} + +fn rotate_right(pass: &mut VecDeque<char>, cap: regex::Captures) { + let steps = cap.at(1).unwrap().parse::<usize>().unwrap(); + for _ in 0..steps { + let c = pass.pop_back().unwrap(); + pass.push_front(c); + } +} + +fn rotate_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let letter = cap.at(1).unwrap().chars().next().unwrap(); + let pos = pass.iter().position(|&c| c == letter).unwrap(); + let steps = 1 + pos + if pos >=4 { 1 } else { 0 }; + for _ in 0..steps { + let c = pass.pop_back().unwrap(); + pass.push_front(c); + } +} + +fn move_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let src = cap.at(1).unwrap().parse::<usize>().unwrap(); + let dest = cap.at(2).unwrap().parse::<usize>().unwrap(); + let c = pass.remove(src).unwrap(); + pass.insert(dest, c); +} + +fn reverse_sub(pass: &mut VecDeque<char>, cap: regex::Captures) { + let mut start = cap.at(1).unwrap().parse::<usize>().unwrap(); + let mut end = cap.at(2).unwrap().parse::<usize>().unwrap(); + while start < end { + pass.swap(start, end); + start += 1; + end -= 1; + } +} + +fn undo_rotate_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let letter = cap.at(1).unwrap().chars().next().unwrap(); + let dest_pos = pass.iter().position(|&c| c == letter).unwrap(); + let mut pos = dest_pos; + + loop { + let c = pass.pop_front().unwrap(); + pass.push_back(c); + pos -= 1; + let steps = 1 + pos + if pos >=4 { 1 } else { 0 }; + if (pos + steps) % pass.len() == dest_pos { + break; + } + } +} + +fn undo_move_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let src = cap.at(1).unwrap().parse::<usize>().unwrap(); + let dest = cap.at(2).unwrap().parse::<usize>().unwrap(); + let c = pass.remove(dest).unwrap(); + pass.insert(src, c); +} + +#[test] +fn swap_pos_example() { + let instructions = vec!("swap position 4 with position 0".to_string()); + let password = "abcde".to_string(); + assert_eq!("ebcda".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn swap_let_example() { + let instructions = vec!("swap letter d with letter b".to_string()); + let password = "ebcda".to_string(); + assert_eq!("edcba".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn reverse_example() { + let instructions = vec!("reverse positions 0 through 4".to_string()); + let password = "edcba".to_string(); + assert_eq!("abcde".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_left_example() { + let instructions = vec!("rotate left 1 step".to_string()); + let password = "abcde".to_string(); + assert_eq!("bcdea".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn move_example() { + let instructions = vec!("move position 3 to position 0".to_string()); + let password = "bdeac".to_string(); + assert_eq!("abdec".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_pos_example_1() { + let instructions = vec!("rotate based on position of letter b".to_string()); + let password = "abdec".to_string(); + assert_eq!("ecabd".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_pos_example_2() { + let instructions = vec!("rotate based on position of letter d".to_string()); + let password = "ecabd".to_string(); + assert_eq!("decab".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_right_example() { + let instructions = vec!("rotate right 2 steps".to_string()); + let password = "decab".to_string(); + assert_eq!("abdec".to_string(), scramble_password(password, instructions)); +} diff --git a/2016/aoc22/Cargo.lock b/2016/aoc22/Cargo.lock new file mode 100644 index 0000000..81a7213 --- /dev/null +++ b/2016/aoc22/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc22" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc22/Cargo.toml b/2016/aoc22/Cargo.toml new file mode 100644 index 0000000..074ccd5 --- /dev/null +++ b/2016/aoc22/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc22" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc22/input.txt b/2016/aoc22/input.txt new file mode 100644 index 0000000..08e9843 --- /dev/null +++ b/2016/aoc22/input.txt @@ -0,0 +1,1017 @@ +root@ebhq-gridcenter# df -h +Filesystem Size Used Avail Use% +/dev/grid/node-x0-y0 89T 65T 24T 73% +/dev/grid/node-x0-y1 92T 64T 28T 69% +/dev/grid/node-x0-y2 85T 70T 15T 82% +/dev/grid/node-x0-y3 90T 64T 26T 71% +/dev/grid/node-x0-y4 86T 72T 14T 83% +/dev/grid/node-x0-y5 90T 68T 22T 75% +/dev/grid/node-x0-y6 94T 64T 30T 68% +/dev/grid/node-x0-y7 87T 72T 15T 82% +/dev/grid/node-x0-y8 90T 65T 25T 72% +/dev/grid/node-x0-y9 90T 65T 25T 72% +/dev/grid/node-x0-y10 89T 66T 23T 74% +/dev/grid/node-x0-y11 94T 70T 24T 74% +/dev/grid/node-x0-y12 90T 65T 25T 72% +/dev/grid/node-x0-y13 91T 72T 19T 79% +/dev/grid/node-x0-y14 85T 70T 15T 82% +/dev/grid/node-x0-y15 89T 70T 19T 78% +/dev/grid/node-x0-y16 90T 66T 24T 73% +/dev/grid/node-x0-y17 86T 64T 22T 74% +/dev/grid/node-x0-y18 88T 65T 23T 73% +/dev/grid/node-x0-y19 85T 68T 17T 80% +/dev/grid/node-x0-y20 93T 70T 23T 75% +/dev/grid/node-x0-y21 89T 64T 25T 71% +/dev/grid/node-x0-y22 87T 67T 20T 77% +/dev/grid/node-x0-y23 90T 73T 17T 81% +/dev/grid/node-x0-y24 92T 68T 24T 73% +/dev/grid/node-x0-y25 88T 69T 19T 78% +/dev/grid/node-x0-y26 88T 69T 19T 78% +/dev/grid/node-x0-y27 86T 72T 14T 83% +/dev/grid/node-x0-y28 92T 71T 21T 77% +/dev/grid/node-x1-y0 89T 73T 16T 82% +/dev/grid/node-x1-y1 89T 68T 21T 76% +/dev/grid/node-x1-y2 94T 70T 24T 74% +/dev/grid/node-x1-y3 90T 68T 22T 75% +/dev/grid/node-x1-y4 89T 67T 22T 75% +/dev/grid/node-x1-y5 90T 70T 20T 77% +/dev/grid/node-x1-y6 92T 71T 21T 77% +/dev/grid/node-x1-y7 92T 71T 21T 77% +/dev/grid/node-x1-y8 86T 73T 13T 84% +/dev/grid/node-x1-y9 87T 69T 18T 79% +/dev/grid/node-x1-y10 87T 66T 21T 75% +/dev/grid/node-x1-y11 85T 72T 13T 84% +/dev/grid/node-x1-y12 90T 69T 21T 76% +/dev/grid/node-x1-y13 89T 67T 22T 75% +/dev/grid/node-x1-y14 90T 65T 25T 72% +/dev/grid/node-x1-y15 94T 65T 29T 69% +/dev/grid/node-x1-y16 85T 70T 15T 82% +/dev/grid/node-x1-y17 93T 64T 29T 68% +/dev/grid/node-x1-y18 87T 68T 19T 78% +/dev/grid/node-x1-y19 85T 66T 19T 77% +/dev/grid/node-x1-y20 90T 72T 18T 80% +/dev/grid/node-x1-y21 89T 73T 16T 82% +/dev/grid/node-x1-y22 90T 65T 25T 72% +/dev/grid/node-x1-y23 91T 72T 19T 79% +/dev/grid/node-x1-y24 87T 70T 17T 80% +/dev/grid/node-x1-y25 91T 64T 27T 70% +/dev/grid/node-x1-y26 90T 64T 26T 71% +/dev/grid/node-x1-y27 93T 69T 24T 74% +/dev/grid/node-x1-y28 89T 65T 24T 73% +/dev/grid/node-x2-y0 89T 72T 17T 80% +/dev/grid/node-x2-y1 92T 69T 23T 75% +/dev/grid/node-x2-y2 91T 65T 26T 71% +/dev/grid/node-x2-y3 86T 73T 13T 84% +/dev/grid/node-x2-y4 90T 69T 21T 76% +/dev/grid/node-x2-y5 86T 68T 18T 79% +/dev/grid/node-x2-y6 91T 70T 21T 76% +/dev/grid/node-x2-y7 86T 64T 22T 74% +/dev/grid/node-x2-y8 88T 65T 23T 73% +/dev/grid/node-x2-y9 94T 73T 21T 77% +/dev/grid/node-x2-y10 89T 71T 18T 79% +/dev/grid/node-x2-y11 88T 64T 24T 72% +/dev/grid/node-x2-y12 92T 71T 21T 77% +/dev/grid/node-x2-y13 86T 69T 17T 80% +/dev/grid/node-x2-y14 87T 69T 18T 79% +/dev/grid/node-x2-y15 93T 71T 22T 76% +/dev/grid/node-x2-y16 91T 65T 26T 71% +/dev/grid/node-x2-y17 93T 65T 28T 69% +/dev/grid/node-x2-y18 86T 69T 17T 80% +/dev/grid/node-x2-y19 87T 69T 18T 79% +/dev/grid/node-x2-y20 86T 72T 14T 83% +/dev/grid/node-x2-y21 86T 73T 13T 84% +/dev/grid/node-x2-y22 505T 499T 6T 98% +/dev/grid/node-x2-y23 89T 65T 24T 73% +/dev/grid/node-x2-y24 92T 64T 28T 69% +/dev/grid/node-x2-y25 94T 64T 30T 68% +/dev/grid/node-x2-y26 87T 73T 14T 83% +/dev/grid/node-x2-y27 87T 69T 18T 79% +/dev/grid/node-x2-y28 94T 71T 23T 75% +/dev/grid/node-x3-y0 88T 66T 22T 75% +/dev/grid/node-x3-y1 91T 69T 22T 75% +/dev/grid/node-x3-y2 91T 69T 22T 75% +/dev/grid/node-x3-y3 86T 67T 19T 77% +/dev/grid/node-x3-y4 90T 64T 26T 71% +/dev/grid/node-x3-y5 89T 72T 17T 80% +/dev/grid/node-x3-y6 87T 66T 21T 75% +/dev/grid/node-x3-y7 90T 68T 22T 75% +/dev/grid/node-x3-y8 91T 66T 25T 72% +/dev/grid/node-x3-y9 89T 64T 25T 71% +/dev/grid/node-x3-y10 92T 67T 25T 72% +/dev/grid/node-x3-y11 86T 64T 22T 74% +/dev/grid/node-x3-y12 94T 65T 29T 69% +/dev/grid/node-x3-y13 91T 70T 21T 76% +/dev/grid/node-x3-y14 89T 72T 17T 80% +/dev/grid/node-x3-y15 89T 64T 25T 71% +/dev/grid/node-x3-y16 85T 73T 12T 85% +/dev/grid/node-x3-y17 89T 65T 24T 73% +/dev/grid/node-x3-y18 88T 71T 17T 80% +/dev/grid/node-x3-y19 89T 69T 20T 77% +/dev/grid/node-x3-y20 91T 68T 23T 74% +/dev/grid/node-x3-y21 90T 72T 18T 80% +/dev/grid/node-x3-y22 505T 498T 7T 98% +/dev/grid/node-x3-y23 85T 65T 20T 76% +/dev/grid/node-x3-y24 94T 72T 22T 76% +/dev/grid/node-x3-y25 90T 68T 22T 75% +/dev/grid/node-x3-y26 90T 65T 25T 72% +/dev/grid/node-x3-y27 87T 66T 21T 75% +/dev/grid/node-x3-y28 90T 66T 24T 73% +/dev/grid/node-x4-y0 86T 67T 19T 77% +/dev/grid/node-x4-y1 92T 67T 25T 72% +/dev/grid/node-x4-y2 91T 71T 20T 78% +/dev/grid/node-x4-y3 94T 69T 25T 73% +/dev/grid/node-x4-y4 90T 64T 26T 71% +/dev/grid/node-x4-y5 93T 70T 23T 75% +/dev/grid/node-x4-y6 93T 67T 26T 72% +/dev/grid/node-x4-y7 91T 71T 20T 78% +/dev/grid/node-x4-y8 90T 70T 20T 77% +/dev/grid/node-x4-y9 89T 66T 23T 74% +/dev/grid/node-x4-y10 94T 64T 30T 68% +/dev/grid/node-x4-y11 94T 70T 24T 74% +/dev/grid/node-x4-y12 89T 69T 20T 77% +/dev/grid/node-x4-y13 90T 72T 18T 80% +/dev/grid/node-x4-y14 88T 69T 19T 78% +/dev/grid/node-x4-y15 85T 64T 21T 75% +/dev/grid/node-x4-y16 86T 71T 15T 82% +/dev/grid/node-x4-y17 90T 65T 25T 72% +/dev/grid/node-x4-y18 88T 65T 23T 73% +/dev/grid/node-x4-y19 91T 71T 20T 78% +/dev/grid/node-x4-y20 94T 71T 23T 75% +/dev/grid/node-x4-y21 91T 65T 26T 71% +/dev/grid/node-x4-y22 510T 491T 19T 96% +/dev/grid/node-x4-y23 86T 72T 14T 83% +/dev/grid/node-x4-y24 91T 69T 22T 75% +/dev/grid/node-x4-y25 93T 64T 29T 68% +/dev/grid/node-x4-y26 92T 65T 27T 70% +/dev/grid/node-x4-y27 91T 67T 24T 73% +/dev/grid/node-x4-y28 93T 66T 27T 70% +/dev/grid/node-x5-y0 85T 70T 15T 82% +/dev/grid/node-x5-y1 90T 71T 19T 78% +/dev/grid/node-x5-y2 94T 68T 26T 72% +/dev/grid/node-x5-y3 88T 73T 15T 82% +/dev/grid/node-x5-y4 85T 71T 14T 83% +/dev/grid/node-x5-y5 92T 67T 25T 72% +/dev/grid/node-x5-y6 92T 68T 24T 73% +/dev/grid/node-x5-y7 86T 69T 17T 80% +/dev/grid/node-x5-y8 90T 64T 26T 71% +/dev/grid/node-x5-y9 88T 71T 17T 80% +/dev/grid/node-x5-y10 91T 65T 26T 71% +/dev/grid/node-x5-y11 92T 65T 27T 70% +/dev/grid/node-x5-y12 87T 66T 21T 75% +/dev/grid/node-x5-y13 87T 71T 16T 81% +/dev/grid/node-x5-y14 90T 67T 23T 74% +/dev/grid/node-x5-y15 92T 70T 22T 76% +/dev/grid/node-x5-y16 94T 66T 28T 70% +/dev/grid/node-x5-y17 88T 68T 20T 77% +/dev/grid/node-x5-y18 86T 69T 17T 80% +/dev/grid/node-x5-y19 94T 66T 28T 70% +/dev/grid/node-x5-y20 90T 69T 21T 76% +/dev/grid/node-x5-y21 88T 71T 17T 80% +/dev/grid/node-x5-y22 509T 496T 13T 97% +/dev/grid/node-x5-y23 87T 67T 20T 77% +/dev/grid/node-x5-y24 91T 64T 27T 70% +/dev/grid/node-x5-y25 93T 69T 24T 74% +/dev/grid/node-x5-y26 93T 73T 20T 78% +/dev/grid/node-x5-y27 88T 70T 18T 79% +/dev/grid/node-x5-y28 87T 73T 14T 83% +/dev/grid/node-x6-y0 87T 65T 22T 74% +/dev/grid/node-x6-y1 85T 64T 21T 75% +/dev/grid/node-x6-y2 91T 72T 19T 79% +/dev/grid/node-x6-y3 90T 64T 26T 71% +/dev/grid/node-x6-y4 93T 66T 27T 70% +/dev/grid/node-x6-y5 93T 67T 26T 72% +/dev/grid/node-x6-y6 89T 64T 25T 71% +/dev/grid/node-x6-y7 89T 64T 25T 71% +/dev/grid/node-x6-y8 86T 72T 14T 83% +/dev/grid/node-x6-y9 87T 68T 19T 78% +/dev/grid/node-x6-y10 94T 73T 21T 77% +/dev/grid/node-x6-y11 88T 65T 23T 73% +/dev/grid/node-x6-y12 88T 70T 18T 79% +/dev/grid/node-x6-y13 93T 66T 27T 70% +/dev/grid/node-x6-y14 87T 68T 19T 78% +/dev/grid/node-x6-y15 87T 68T 19T 78% +/dev/grid/node-x6-y16 87T 73T 14T 83% +/dev/grid/node-x6-y17 87T 70T 17T 80% +/dev/grid/node-x6-y18 87T 69T 18T 79% +/dev/grid/node-x6-y19 85T 67T 18T 78% +/dev/grid/node-x6-y20 91T 71T 20T 78% +/dev/grid/node-x6-y21 86T 72T 14T 83% +/dev/grid/node-x6-y22 503T 497T 6T 98% +/dev/grid/node-x6-y23 93T 72T 21T 77% +/dev/grid/node-x6-y24 91T 72T 19T 79% +/dev/grid/node-x6-y25 85T 67T 18T 78% +/dev/grid/node-x6-y26 86T 65T 21T 75% +/dev/grid/node-x6-y27 92T 67T 25T 72% +/dev/grid/node-x6-y28 87T 72T 15T 82% +/dev/grid/node-x7-y0 88T 67T 21T 76% +/dev/grid/node-x7-y1 85T 64T 21T 75% +/dev/grid/node-x7-y2 90T 67T 23T 74% +/dev/grid/node-x7-y3 87T 65T 22T 74% +/dev/grid/node-x7-y4 92T 70T 22T 76% +/dev/grid/node-x7-y5 89T 67T 22T 75% +/dev/grid/node-x7-y6 90T 65T 25T 72% +/dev/grid/node-x7-y7 88T 66T 22T 75% +/dev/grid/node-x7-y8 88T 65T 23T 73% +/dev/grid/node-x7-y9 93T 72T 21T 77% +/dev/grid/node-x7-y10 91T 70T 21T 76% +/dev/grid/node-x7-y11 90T 70T 20T 77% +/dev/grid/node-x7-y12 89T 68T 21T 76% +/dev/grid/node-x7-y13 91T 65T 26T 71% +/dev/grid/node-x7-y14 90T 65T 25T 72% +/dev/grid/node-x7-y15 85T 65T 20T 76% +/dev/grid/node-x7-y16 91T 65T 26T 71% +/dev/grid/node-x7-y17 89T 72T 17T 80% +/dev/grid/node-x7-y18 88T 65T 23T 73% +/dev/grid/node-x7-y19 94T 72T 22T 76% +/dev/grid/node-x7-y20 85T 73T 12T 85% +/dev/grid/node-x7-y21 85T 68T 17T 80% +/dev/grid/node-x7-y22 507T 497T 10T 98% +/dev/grid/node-x7-y23 91T 69T 22T 75% +/dev/grid/node-x7-y24 93T 68T 25T 73% +/dev/grid/node-x7-y25 90T 72T 18T 80% +/dev/grid/node-x7-y26 91T 70T 21T 76% +/dev/grid/node-x7-y27 93T 65T 28T 69% +/dev/grid/node-x7-y28 91T 64T 27T 70% +/dev/grid/node-x8-y0 86T 71T 15T 82% +/dev/grid/node-x8-y1 88T 69T 19T 78% +/dev/grid/node-x8-y2 90T 64T 26T 71% +/dev/grid/node-x8-y3 92T 67T 25T 72% +/dev/grid/node-x8-y4 86T 71T 15T 82% +/dev/grid/node-x8-y5 88T 68T 20T 77% +/dev/grid/node-x8-y6 90T 71T 19T 78% +/dev/grid/node-x8-y7 86T 70T 16T 81% +/dev/grid/node-x8-y8 87T 72T 15T 82% +/dev/grid/node-x8-y9 93T 67T 26T 72% +/dev/grid/node-x8-y10 93T 65T 28T 69% +/dev/grid/node-x8-y11 94T 66T 28T 70% +/dev/grid/node-x8-y12 92T 70T 22T 76% +/dev/grid/node-x8-y13 91T 68T 23T 74% +/dev/grid/node-x8-y14 93T 72T 21T 77% +/dev/grid/node-x8-y15 90T 71T 19T 78% +/dev/grid/node-x8-y16 87T 73T 14T 83% +/dev/grid/node-x8-y17 86T 73T 13T 84% +/dev/grid/node-x8-y18 89T 68T 21T 76% +/dev/grid/node-x8-y19 88T 67T 21T 76% +/dev/grid/node-x8-y20 87T 64T 23T 73% +/dev/grid/node-x8-y21 90T 71T 19T 78% +/dev/grid/node-x8-y22 505T 497T 8T 98% +/dev/grid/node-x8-y23 92T 72T 20T 78% +/dev/grid/node-x8-y24 86T 70T 16T 81% +/dev/grid/node-x8-y25 92T 69T 23T 75% +/dev/grid/node-x8-y26 93T 71T 22T 76% +/dev/grid/node-x8-y27 91T 70T 21T 76% +/dev/grid/node-x8-y28 92T 0T 92T 0% +/dev/grid/node-x9-y0 87T 69T 18T 79% +/dev/grid/node-x9-y1 90T 69T 21T 76% +/dev/grid/node-x9-y2 91T 69T 22T 75% +/dev/grid/node-x9-y3 92T 71T 21T 77% +/dev/grid/node-x9-y4 91T 66T 25T 72% +/dev/grid/node-x9-y5 92T 65T 27T 70% +/dev/grid/node-x9-y6 87T 71T 16T 81% +/dev/grid/node-x9-y7 88T 68T 20T 77% +/dev/grid/node-x9-y8 85T 67T 18T 78% +/dev/grid/node-x9-y9 86T 65T 21T 75% +/dev/grid/node-x9-y10 88T 64T 24T 72% +/dev/grid/node-x9-y11 90T 70T 20T 77% +/dev/grid/node-x9-y12 88T 64T 24T 72% +/dev/grid/node-x9-y13 85T 69T 16T 81% +/dev/grid/node-x9-y14 85T 71T 14T 83% +/dev/grid/node-x9-y15 92T 70T 22T 76% +/dev/grid/node-x9-y16 92T 65T 27T 70% +/dev/grid/node-x9-y17 89T 66T 23T 74% +/dev/grid/node-x9-y18 85T 69T 16T 81% +/dev/grid/node-x9-y19 94T 69T 25T 73% +/dev/grid/node-x9-y20 92T 66T 26T 71% +/dev/grid/node-x9-y21 88T 70T 18T 79% +/dev/grid/node-x9-y22 507T 498T 9T 98% +/dev/grid/node-x9-y23 86T 68T 18T 79% +/dev/grid/node-x9-y24 90T 69T 21T 76% +/dev/grid/node-x9-y25 87T 65T 22T 74% +/dev/grid/node-x9-y26 86T 71T 15T 82% +/dev/grid/node-x9-y27 85T 65T 20T 76% +/dev/grid/node-x9-y28 87T 70T 17T 80% +/dev/grid/node-x10-y0 91T 64T 27T 70% +/dev/grid/node-x10-y1 92T 65T 27T 70% +/dev/grid/node-x10-y2 89T 66T 23T 74% +/dev/grid/node-x10-y3 94T 64T 30T 68% +/dev/grid/node-x10-y4 92T 69T 23T 75% +/dev/grid/node-x10-y5 91T 64T 27T 70% +/dev/grid/node-x10-y6 86T 72T 14T 83% +/dev/grid/node-x10-y7 87T 66T 21T 75% +/dev/grid/node-x10-y8 90T 73T 17T 81% +/dev/grid/node-x10-y9 91T 73T 18T 80% +/dev/grid/node-x10-y10 94T 71T 23T 75% +/dev/grid/node-x10-y11 94T 71T 23T 75% +/dev/grid/node-x10-y12 92T 67T 25T 72% +/dev/grid/node-x10-y13 92T 66T 26T 71% +/dev/grid/node-x10-y14 86T 66T 20T 76% +/dev/grid/node-x10-y15 93T 73T 20T 78% +/dev/grid/node-x10-y16 92T 66T 26T 71% +/dev/grid/node-x10-y17 92T 71T 21T 77% +/dev/grid/node-x10-y18 86T 65T 21T 75% +/dev/grid/node-x10-y19 92T 68T 24T 73% +/dev/grid/node-x10-y20 87T 66T 21T 75% +/dev/grid/node-x10-y21 90T 65T 25T 72% +/dev/grid/node-x10-y22 501T 494T 7T 98% +/dev/grid/node-x10-y23 87T 66T 21T 75% +/dev/grid/node-x10-y24 85T 69T 16T 81% +/dev/grid/node-x10-y25 90T 72T 18T 80% +/dev/grid/node-x10-y26 94T 69T 25T 73% +/dev/grid/node-x10-y27 86T 69T 17T 80% +/dev/grid/node-x10-y28 90T 68T 22T 75% +/dev/grid/node-x11-y0 90T 65T 25T 72% +/dev/grid/node-x11-y1 90T 70T 20T 77% +/dev/grid/node-x11-y2 94T 69T 25T 73% +/dev/grid/node-x11-y3 92T 72T 20T 78% +/dev/grid/node-x11-y4 93T 67T 26T 72% +/dev/grid/node-x11-y5 89T 70T 19T 78% +/dev/grid/node-x11-y6 87T 66T 21T 75% +/dev/grid/node-x11-y7 92T 70T 22T 76% +/dev/grid/node-x11-y8 93T 71T 22T 76% +/dev/grid/node-x11-y9 93T 68T 25T 73% +/dev/grid/node-x11-y10 85T 65T 20T 76% +/dev/grid/node-x11-y11 90T 72T 18T 80% +/dev/grid/node-x11-y12 89T 65T 24T 73% +/dev/grid/node-x11-y13 86T 69T 17T 80% +/dev/grid/node-x11-y14 93T 73T 20T 78% +/dev/grid/node-x11-y15 93T 68T 25T 73% +/dev/grid/node-x11-y16 92T 72T 20T 78% +/dev/grid/node-x11-y17 85T 71T 14T 83% +/dev/grid/node-x11-y18 90T 68T 22T 75% +/dev/grid/node-x11-y19 90T 69T 21T 76% +/dev/grid/node-x11-y20 85T 73T 12T 85% +/dev/grid/node-x11-y21 93T 68T 25T 73% +/dev/grid/node-x11-y22 504T 491T 13T 97% +/dev/grid/node-x11-y23 87T 69T 18T 79% +/dev/grid/node-x11-y24 88T 65T 23T 73% +/dev/grid/node-x11-y25 94T 67T 27T 71% +/dev/grid/node-x11-y26 92T 73T 19T 79% +/dev/grid/node-x11-y27 87T 64T 23T 73% +/dev/grid/node-x11-y28 89T 70T 19T 78% +/dev/grid/node-x12-y0 88T 73T 15T 82% +/dev/grid/node-x12-y1 90T 68T 22T 75% +/dev/grid/node-x12-y2 85T 65T 20T 76% +/dev/grid/node-x12-y3 94T 71T 23T 75% +/dev/grid/node-x12-y4 86T 68T 18T 79% +/dev/grid/node-x12-y5 89T 67T 22T 75% +/dev/grid/node-x12-y6 89T 71T 18T 79% +/dev/grid/node-x12-y7 85T 68T 17T 80% +/dev/grid/node-x12-y8 94T 68T 26T 72% +/dev/grid/node-x12-y9 91T 71T 20T 78% +/dev/grid/node-x12-y10 91T 65T 26T 71% +/dev/grid/node-x12-y11 91T 71T 20T 78% +/dev/grid/node-x12-y12 85T 65T 20T 76% +/dev/grid/node-x12-y13 89T 71T 18T 79% +/dev/grid/node-x12-y14 85T 70T 15T 82% +/dev/grid/node-x12-y15 92T 73T 19T 79% +/dev/grid/node-x12-y16 94T 66T 28T 70% +/dev/grid/node-x12-y17 90T 72T 18T 80% +/dev/grid/node-x12-y18 90T 64T 26T 71% +/dev/grid/node-x12-y19 87T 72T 15T 82% +/dev/grid/node-x12-y20 89T 70T 19T 78% +/dev/grid/node-x12-y21 90T 66T 24T 73% +/dev/grid/node-x12-y22 506T 497T 9T 98% +/dev/grid/node-x12-y23 90T 67T 23T 74% +/dev/grid/node-x12-y24 85T 67T 18T 78% +/dev/grid/node-x12-y25 85T 72T 13T 84% +/dev/grid/node-x12-y26 94T 71T 23T 75% +/dev/grid/node-x12-y27 92T 64T 28T 69% +/dev/grid/node-x12-y28 90T 65T 25T 72% +/dev/grid/node-x13-y0 85T 72T 13T 84% +/dev/grid/node-x13-y1 93T 67T 26T 72% +/dev/grid/node-x13-y2 94T 64T 30T 68% +/dev/grid/node-x13-y3 85T 71T 14T 83% +/dev/grid/node-x13-y4 93T 71T 22T 76% +/dev/grid/node-x13-y5 85T 67T 18T 78% +/dev/grid/node-x13-y6 91T 68T 23T 74% +/dev/grid/node-x13-y7 92T 66T 26T 71% +/dev/grid/node-x13-y8 88T 66T 22T 75% +/dev/grid/node-x13-y9 91T 72T 19T 79% +/dev/grid/node-x13-y10 89T 72T 17T 80% +/dev/grid/node-x13-y11 90T 68T 22T 75% +/dev/grid/node-x13-y12 89T 65T 24T 73% +/dev/grid/node-x13-y13 90T 69T 21T 76% +/dev/grid/node-x13-y14 86T 64T 22T 74% +/dev/grid/node-x13-y15 91T 65T 26T 71% +/dev/grid/node-x13-y16 86T 72T 14T 83% +/dev/grid/node-x13-y17 85T 71T 14T 83% +/dev/grid/node-x13-y18 85T 68T 17T 80% +/dev/grid/node-x13-y19 91T 69T 22T 75% +/dev/grid/node-x13-y20 87T 70T 17T 80% +/dev/grid/node-x13-y21 94T 65T 29T 69% +/dev/grid/node-x13-y22 503T 492T 11T 97% +/dev/grid/node-x13-y23 91T 70T 21T 76% +/dev/grid/node-x13-y24 91T 66T 25T 72% +/dev/grid/node-x13-y25 88T 64T 24T 72% +/dev/grid/node-x13-y26 87T 70T 17T 80% +/dev/grid/node-x13-y27 91T 66T 25T 72% +/dev/grid/node-x13-y28 86T 68T 18T 79% +/dev/grid/node-x14-y0 85T 67T 18T 78% +/dev/grid/node-x14-y1 87T 70T 17T 80% +/dev/grid/node-x14-y2 92T 67T 25T 72% +/dev/grid/node-x14-y3 87T 64T 23T 73% +/dev/grid/node-x14-y4 92T 73T 19T 79% +/dev/grid/node-x14-y5 86T 66T 20T 76% +/dev/grid/node-x14-y6 89T 69T 20T 77% +/dev/grid/node-x14-y7 89T 67T 22T 75% +/dev/grid/node-x14-y8 89T 70T 19T 78% +/dev/grid/node-x14-y9 91T 70T 21T 76% +/dev/grid/node-x14-y10 87T 70T 17T 80% +/dev/grid/node-x14-y11 86T 66T 20T 76% +/dev/grid/node-x14-y12 92T 67T 25T 72% +/dev/grid/node-x14-y13 87T 68T 19T 78% +/dev/grid/node-x14-y14 94T 65T 29T 69% +/dev/grid/node-x14-y15 93T 68T 25T 73% +/dev/grid/node-x14-y16 87T 66T 21T 75% +/dev/grid/node-x14-y17 90T 70T 20T 77% +/dev/grid/node-x14-y18 90T 66T 24T 73% +/dev/grid/node-x14-y19 89T 71T 18T 79% +/dev/grid/node-x14-y20 85T 72T 13T 84% +/dev/grid/node-x14-y21 90T 66T 24T 73% +/dev/grid/node-x14-y22 504T 491T 13T 97% +/dev/grid/node-x14-y23 90T 71T 19T 78% +/dev/grid/node-x14-y24 94T 68T 26T 72% +/dev/grid/node-x14-y25 91T 73T 18T 80% +/dev/grid/node-x14-y26 88T 68T 20T 77% +/dev/grid/node-x14-y27 86T 66T 20T 76% +/dev/grid/node-x14-y28 92T 70T 22T 76% +/dev/grid/node-x15-y0 91T 73T 18T 80% +/dev/grid/node-x15-y1 85T 65T 20T 76% +/dev/grid/node-x15-y2 88T 67T 21T 76% +/dev/grid/node-x15-y3 91T 66T 25T 72% +/dev/grid/node-x15-y4 92T 65T 27T 70% +/dev/grid/node-x15-y5 94T 66T 28T 70% +/dev/grid/node-x15-y6 90T 67T 23T 74% +/dev/grid/node-x15-y7 91T 72T 19T 79% +/dev/grid/node-x15-y8 88T 65T 23T 73% +/dev/grid/node-x15-y9 90T 66T 24T 73% +/dev/grid/node-x15-y10 86T 69T 17T 80% +/dev/grid/node-x15-y11 89T 67T 22T 75% +/dev/grid/node-x15-y12 86T 67T 19T 77% +/dev/grid/node-x15-y13 85T 65T 20T 76% +/dev/grid/node-x15-y14 92T 68T 24T 73% +/dev/grid/node-x15-y15 85T 73T 12T 85% +/dev/grid/node-x15-y16 86T 65T 21T 75% +/dev/grid/node-x15-y17 92T 69T 23T 75% +/dev/grid/node-x15-y18 87T 72T 15T 82% +/dev/grid/node-x15-y19 92T 64T 28T 69% +/dev/grid/node-x15-y20 92T 71T 21T 77% +/dev/grid/node-x15-y21 86T 71T 15T 82% +/dev/grid/node-x15-y22 501T 494T 7T 98% +/dev/grid/node-x15-y23 93T 65T 28T 69% +/dev/grid/node-x15-y24 85T 71T 14T 83% +/dev/grid/node-x15-y25 90T 66T 24T 73% +/dev/grid/node-x15-y26 87T 67T 20T 77% +/dev/grid/node-x15-y27 90T 70T 20T 77% +/dev/grid/node-x15-y28 89T 71T 18T 79% +/dev/grid/node-x16-y0 91T 72T 19T 79% +/dev/grid/node-x16-y1 91T 65T 26T 71% +/dev/grid/node-x16-y2 90T 64T 26T 71% +/dev/grid/node-x16-y3 87T 67T 20T 77% +/dev/grid/node-x16-y4 86T 66T 20T 76% +/dev/grid/node-x16-y5 88T 73T 15T 82% +/dev/grid/node-x16-y6 85T 68T 17T 80% +/dev/grid/node-x16-y7 86T 66T 20T 76% +/dev/grid/node-x16-y8 91T 69T 22T 75% +/dev/grid/node-x16-y9 87T 66T 21T 75% +/dev/grid/node-x16-y10 86T 72T 14T 83% +/dev/grid/node-x16-y11 90T 66T 24T 73% +/dev/grid/node-x16-y12 85T 72T 13T 84% +/dev/grid/node-x16-y13 88T 71T 17T 80% +/dev/grid/node-x16-y14 90T 70T 20T 77% +/dev/grid/node-x16-y15 91T 71T 20T 78% +/dev/grid/node-x16-y16 86T 70T 16T 81% +/dev/grid/node-x16-y17 86T 73T 13T 84% +/dev/grid/node-x16-y18 88T 66T 22T 75% +/dev/grid/node-x16-y19 92T 67T 25T 72% +/dev/grid/node-x16-y20 92T 73T 19T 79% +/dev/grid/node-x16-y21 94T 71T 23T 75% +/dev/grid/node-x16-y22 507T 498T 9T 98% +/dev/grid/node-x16-y23 92T 72T 20T 78% +/dev/grid/node-x16-y24 85T 72T 13T 84% +/dev/grid/node-x16-y25 88T 66T 22T 75% +/dev/grid/node-x16-y26 92T 67T 25T 72% +/dev/grid/node-x16-y27 94T 64T 30T 68% +/dev/grid/node-x16-y28 86T 66T 20T 76% +/dev/grid/node-x17-y0 88T 65T 23T 73% +/dev/grid/node-x17-y1 85T 66T 19T 77% +/dev/grid/node-x17-y2 88T 70T 18T 79% +/dev/grid/node-x17-y3 89T 68T 21T 76% +/dev/grid/node-x17-y4 89T 68T 21T 76% +/dev/grid/node-x17-y5 94T 69T 25T 73% +/dev/grid/node-x17-y6 85T 66T 19T 77% +/dev/grid/node-x17-y7 93T 67T 26T 72% +/dev/grid/node-x17-y8 87T 67T 20T 77% +/dev/grid/node-x17-y9 94T 67T 27T 71% +/dev/grid/node-x17-y10 92T 64T 28T 69% +/dev/grid/node-x17-y11 94T 68T 26T 72% +/dev/grid/node-x17-y12 85T 66T 19T 77% +/dev/grid/node-x17-y13 87T 68T 19T 78% +/dev/grid/node-x17-y14 89T 65T 24T 73% +/dev/grid/node-x17-y15 94T 69T 25T 73% +/dev/grid/node-x17-y16 90T 69T 21T 76% +/dev/grid/node-x17-y17 85T 66T 19T 77% +/dev/grid/node-x17-y18 91T 68T 23T 74% +/dev/grid/node-x17-y19 89T 73T 16T 82% +/dev/grid/node-x17-y20 94T 66T 28T 70% +/dev/grid/node-x17-y21 91T 68T 23T 74% +/dev/grid/node-x17-y22 509T 499T 10T 98% +/dev/grid/node-x17-y23 89T 69T 20T 77% +/dev/grid/node-x17-y24 91T 64T 27T 70% +/dev/grid/node-x17-y25 89T 66T 23T 74% +/dev/grid/node-x17-y26 91T 72T 19T 79% +/dev/grid/node-x17-y27 93T 69T 24T 74% +/dev/grid/node-x17-y28 87T 73T 14T 83% +/dev/grid/node-x18-y0 85T 69T 16T 81% +/dev/grid/node-x18-y1 90T 65T 25T 72% +/dev/grid/node-x18-y2 85T 69T 16T 81% +/dev/grid/node-x18-y3 89T 66T 23T 74% +/dev/grid/node-x18-y4 88T 69T 19T 78% +/dev/grid/node-x18-y5 90T 70T 20T 77% +/dev/grid/node-x18-y6 90T 69T 21T 76% +/dev/grid/node-x18-y7 92T 67T 25T 72% +/dev/grid/node-x18-y8 85T 64T 21T 75% +/dev/grid/node-x18-y9 86T 68T 18T 79% +/dev/grid/node-x18-y10 89T 66T 23T 74% +/dev/grid/node-x18-y11 87T 70T 17T 80% +/dev/grid/node-x18-y12 93T 68T 25T 73% +/dev/grid/node-x18-y13 89T 67T 22T 75% +/dev/grid/node-x18-y14 91T 66T 25T 72% +/dev/grid/node-x18-y15 91T 65T 26T 71% +/dev/grid/node-x18-y16 90T 66T 24T 73% +/dev/grid/node-x18-y17 85T 69T 16T 81% +/dev/grid/node-x18-y18 93T 70T 23T 75% +/dev/grid/node-x18-y19 93T 64T 29T 68% +/dev/grid/node-x18-y20 87T 70T 17T 80% +/dev/grid/node-x18-y21 87T 73T 14T 83% +/dev/grid/node-x18-y22 503T 498T 5T 99% +/dev/grid/node-x18-y23 92T 68T 24T 73% +/dev/grid/node-x18-y24 88T 68T 20T 77% +/dev/grid/node-x18-y25 94T 64T 30T 68% +/dev/grid/node-x18-y26 93T 66T 27T 70% +/dev/grid/node-x18-y27 90T 67T 23T 74% +/dev/grid/node-x18-y28 89T 67T 22T 75% +/dev/grid/node-x19-y0 91T 67T 24T 73% +/dev/grid/node-x19-y1 87T 64T 23T 73% +/dev/grid/node-x19-y2 94T 64T 30T 68% +/dev/grid/node-x19-y3 90T 71T 19T 78% +/dev/grid/node-x19-y4 88T 66T 22T 75% +/dev/grid/node-x19-y5 93T 69T 24T 74% +/dev/grid/node-x19-y6 89T 73T 16T 82% +/dev/grid/node-x19-y7 91T 68T 23T 74% +/dev/grid/node-x19-y8 89T 67T 22T 75% +/dev/grid/node-x19-y9 90T 72T 18T 80% +/dev/grid/node-x19-y10 93T 73T 20T 78% +/dev/grid/node-x19-y11 88T 70T 18T 79% +/dev/grid/node-x19-y12 89T 67T 22T 75% +/dev/grid/node-x19-y13 91T 65T 26T 71% +/dev/grid/node-x19-y14 92T 67T 25T 72% +/dev/grid/node-x19-y15 88T 69T 19T 78% +/dev/grid/node-x19-y16 93T 72T 21T 77% +/dev/grid/node-x19-y17 88T 64T 24T 72% +/dev/grid/node-x19-y18 88T 67T 21T 76% +/dev/grid/node-x19-y19 85T 65T 20T 76% +/dev/grid/node-x19-y20 90T 68T 22T 75% +/dev/grid/node-x19-y21 88T 65T 23T 73% +/dev/grid/node-x19-y22 508T 498T 10T 98% +/dev/grid/node-x19-y23 93T 65T 28T 69% +/dev/grid/node-x19-y24 85T 67T 18T 78% +/dev/grid/node-x19-y25 92T 65T 27T 70% +/dev/grid/node-x19-y26 92T 67T 25T 72% +/dev/grid/node-x19-y27 91T 65T 26T 71% +/dev/grid/node-x19-y28 91T 73T 18T 80% +/dev/grid/node-x20-y0 86T 64T 22T 74% +/dev/grid/node-x20-y1 89T 68T 21T 76% +/dev/grid/node-x20-y2 92T 71T 21T 77% +/dev/grid/node-x20-y3 86T 68T 18T 79% +/dev/grid/node-x20-y4 86T 66T 20T 76% +/dev/grid/node-x20-y5 94T 66T 28T 70% +/dev/grid/node-x20-y6 91T 73T 18T 80% +/dev/grid/node-x20-y7 87T 68T 19T 78% +/dev/grid/node-x20-y8 94T 66T 28T 70% +/dev/grid/node-x20-y9 89T 64T 25T 71% +/dev/grid/node-x20-y10 92T 68T 24T 73% +/dev/grid/node-x20-y11 94T 66T 28T 70% +/dev/grid/node-x20-y12 88T 73T 15T 82% +/dev/grid/node-x20-y13 91T 67T 24T 73% +/dev/grid/node-x20-y14 93T 66T 27T 70% +/dev/grid/node-x20-y15 88T 72T 16T 81% +/dev/grid/node-x20-y16 93T 68T 25T 73% +/dev/grid/node-x20-y17 91T 68T 23T 74% +/dev/grid/node-x20-y18 87T 73T 14T 83% +/dev/grid/node-x20-y19 94T 70T 24T 74% +/dev/grid/node-x20-y20 88T 67T 21T 76% +/dev/grid/node-x20-y21 88T 68T 20T 77% +/dev/grid/node-x20-y22 503T 499T 4T 99% +/dev/grid/node-x20-y23 88T 67T 21T 76% +/dev/grid/node-x20-y24 92T 68T 24T 73% +/dev/grid/node-x20-y25 85T 69T 16T 81% +/dev/grid/node-x20-y26 87T 70T 17T 80% +/dev/grid/node-x20-y27 86T 70T 16T 81% +/dev/grid/node-x20-y28 93T 65T 28T 69% +/dev/grid/node-x21-y0 90T 67T 23T 74% +/dev/grid/node-x21-y1 85T 66T 19T 77% +/dev/grid/node-x21-y2 93T 73T 20T 78% +/dev/grid/node-x21-y3 88T 71T 17T 80% +/dev/grid/node-x21-y4 94T 71T 23T 75% +/dev/grid/node-x21-y5 92T 69T 23T 75% +/dev/grid/node-x21-y6 94T 66T 28T 70% +/dev/grid/node-x21-y7 94T 65T 29T 69% +/dev/grid/node-x21-y8 85T 71T 14T 83% +/dev/grid/node-x21-y9 87T 69T 18T 79% +/dev/grid/node-x21-y10 86T 68T 18T 79% +/dev/grid/node-x21-y11 92T 68T 24T 73% +/dev/grid/node-x21-y12 89T 68T 21T 76% +/dev/grid/node-x21-y13 88T 73T 15T 82% +/dev/grid/node-x21-y14 86T 67T 19T 77% +/dev/grid/node-x21-y15 87T 72T 15T 82% +/dev/grid/node-x21-y16 87T 70T 17T 80% +/dev/grid/node-x21-y17 87T 71T 16T 81% +/dev/grid/node-x21-y18 88T 72T 16T 81% +/dev/grid/node-x21-y19 93T 65T 28T 69% +/dev/grid/node-x21-y20 92T 70T 22T 76% +/dev/grid/node-x21-y21 91T 70T 21T 76% +/dev/grid/node-x21-y22 510T 493T 17T 96% +/dev/grid/node-x21-y23 89T 69T 20T 77% +/dev/grid/node-x21-y24 94T 72T 22T 76% +/dev/grid/node-x21-y25 91T 70T 21T 76% +/dev/grid/node-x21-y26 89T 65T 24T 73% +/dev/grid/node-x21-y27 85T 72T 13T 84% +/dev/grid/node-x21-y28 93T 72T 21T 77% +/dev/grid/node-x22-y0 89T 67T 22T 75% +/dev/grid/node-x22-y1 85T 65T 20T 76% +/dev/grid/node-x22-y2 93T 64T 29T 68% +/dev/grid/node-x22-y3 93T 71T 22T 76% +/dev/grid/node-x22-y4 85T 65T 20T 76% +/dev/grid/node-x22-y5 85T 67T 18T 78% +/dev/grid/node-x22-y6 90T 64T 26T 71% +/dev/grid/node-x22-y7 87T 69T 18T 79% +/dev/grid/node-x22-y8 94T 72T 22T 76% +/dev/grid/node-x22-y9 87T 71T 16T 81% +/dev/grid/node-x22-y10 87T 65T 22T 74% +/dev/grid/node-x22-y11 93T 72T 21T 77% +/dev/grid/node-x22-y12 86T 72T 14T 83% +/dev/grid/node-x22-y13 89T 66T 23T 74% +/dev/grid/node-x22-y14 90T 67T 23T 74% +/dev/grid/node-x22-y15 92T 70T 22T 76% +/dev/grid/node-x22-y16 92T 66T 26T 71% +/dev/grid/node-x22-y17 91T 66T 25T 72% +/dev/grid/node-x22-y18 91T 68T 23T 74% +/dev/grid/node-x22-y19 88T 71T 17T 80% +/dev/grid/node-x22-y20 90T 69T 21T 76% +/dev/grid/node-x22-y21 90T 68T 22T 75% +/dev/grid/node-x22-y22 502T 490T 12T 97% +/dev/grid/node-x22-y23 91T 67T 24T 73% +/dev/grid/node-x22-y24 93T 71T 22T 76% +/dev/grid/node-x22-y25 92T 65T 27T 70% +/dev/grid/node-x22-y26 93T 69T 24T 74% +/dev/grid/node-x22-y27 85T 72T 13T 84% +/dev/grid/node-x22-y28 93T 64T 29T 68% +/dev/grid/node-x23-y0 92T 73T 19T 79% +/dev/grid/node-x23-y1 90T 64T 26T 71% +/dev/grid/node-x23-y2 93T 65T 28T 69% +/dev/grid/node-x23-y3 88T 72T 16T 81% +/dev/grid/node-x23-y4 92T 70T 22T 76% +/dev/grid/node-x23-y5 90T 66T 24T 73% +/dev/grid/node-x23-y6 86T 66T 20T 76% +/dev/grid/node-x23-y7 89T 71T 18T 79% +/dev/grid/node-x23-y8 89T 64T 25T 71% +/dev/grid/node-x23-y9 90T 64T 26T 71% +/dev/grid/node-x23-y10 94T 70T 24T 74% +/dev/grid/node-x23-y11 85T 64T 21T 75% +/dev/grid/node-x23-y12 86T 66T 20T 76% +/dev/grid/node-x23-y13 86T 64T 22T 74% +/dev/grid/node-x23-y14 92T 68T 24T 73% +/dev/grid/node-x23-y15 94T 70T 24T 74% +/dev/grid/node-x23-y16 91T 69T 22T 75% +/dev/grid/node-x23-y17 93T 70T 23T 75% +/dev/grid/node-x23-y18 87T 65T 22T 74% +/dev/grid/node-x23-y19 86T 64T 22T 74% +/dev/grid/node-x23-y20 94T 66T 28T 70% +/dev/grid/node-x23-y21 92T 64T 28T 69% +/dev/grid/node-x23-y22 507T 491T 16T 96% +/dev/grid/node-x23-y23 88T 73T 15T 82% +/dev/grid/node-x23-y24 87T 69T 18T 79% +/dev/grid/node-x23-y25 91T 71T 20T 78% +/dev/grid/node-x23-y26 90T 71T 19T 78% +/dev/grid/node-x23-y27 87T 70T 17T 80% +/dev/grid/node-x23-y28 91T 70T 21T 76% +/dev/grid/node-x24-y0 86T 67T 19T 77% +/dev/grid/node-x24-y1 94T 67T 27T 71% +/dev/grid/node-x24-y2 89T 71T 18T 79% +/dev/grid/node-x24-y3 86T 67T 19T 77% +/dev/grid/node-x24-y4 87T 73T 14T 83% +/dev/grid/node-x24-y5 86T 64T 22T 74% +/dev/grid/node-x24-y6 92T 68T 24T 73% +/dev/grid/node-x24-y7 85T 68T 17T 80% +/dev/grid/node-x24-y8 86T 65T 21T 75% +/dev/grid/node-x24-y9 87T 73T 14T 83% +/dev/grid/node-x24-y10 91T 68T 23T 74% +/dev/grid/node-x24-y11 94T 67T 27T 71% +/dev/grid/node-x24-y12 94T 67T 27T 71% +/dev/grid/node-x24-y13 88T 71T 17T 80% +/dev/grid/node-x24-y14 91T 70T 21T 76% +/dev/grid/node-x24-y15 89T 72T 17T 80% +/dev/grid/node-x24-y16 92T 69T 23T 75% +/dev/grid/node-x24-y17 87T 70T 17T 80% +/dev/grid/node-x24-y18 94T 69T 25T 73% +/dev/grid/node-x24-y19 91T 66T 25T 72% +/dev/grid/node-x24-y20 90T 64T 26T 71% +/dev/grid/node-x24-y21 86T 65T 21T 75% +/dev/grid/node-x24-y22 508T 494T 14T 97% +/dev/grid/node-x24-y23 89T 72T 17T 80% +/dev/grid/node-x24-y24 94T 66T 28T 70% +/dev/grid/node-x24-y25 88T 64T 24T 72% +/dev/grid/node-x24-y26 86T 64T 22T 74% +/dev/grid/node-x24-y27 92T 65T 27T 70% +/dev/grid/node-x24-y28 89T 72T 17T 80% +/dev/grid/node-x25-y0 93T 70T 23T 75% +/dev/grid/node-x25-y1 91T 73T 18T 80% +/dev/grid/node-x25-y2 89T 65T 24T 73% +/dev/grid/node-x25-y3 86T 69T 17T 80% +/dev/grid/node-x25-y4 90T 70T 20T 77% +/dev/grid/node-x25-y5 89T 65T 24T 73% +/dev/grid/node-x25-y6 92T 71T 21T 77% +/dev/grid/node-x25-y7 91T 65T 26T 71% +/dev/grid/node-x25-y8 91T 67T 24T 73% +/dev/grid/node-x25-y9 94T 73T 21T 77% +/dev/grid/node-x25-y10 94T 73T 21T 77% +/dev/grid/node-x25-y11 91T 70T 21T 76% +/dev/grid/node-x25-y12 91T 71T 20T 78% +/dev/grid/node-x25-y13 86T 67T 19T 77% +/dev/grid/node-x25-y14 88T 67T 21T 76% +/dev/grid/node-x25-y15 90T 67T 23T 74% +/dev/grid/node-x25-y16 92T 64T 28T 69% +/dev/grid/node-x25-y17 94T 68T 26T 72% +/dev/grid/node-x25-y18 87T 73T 14T 83% +/dev/grid/node-x25-y19 86T 73T 13T 84% +/dev/grid/node-x25-y20 92T 72T 20T 78% +/dev/grid/node-x25-y21 93T 73T 20T 78% +/dev/grid/node-x25-y22 504T 491T 13T 97% +/dev/grid/node-x25-y23 91T 72T 19T 79% +/dev/grid/node-x25-y24 85T 70T 15T 82% +/dev/grid/node-x25-y25 85T 73T 12T 85% +/dev/grid/node-x25-y26 85T 67T 18T 78% +/dev/grid/node-x25-y27 89T 69T 20T 77% +/dev/grid/node-x25-y28 86T 66T 20T 76% +/dev/grid/node-x26-y0 91T 72T 19T 79% +/dev/grid/node-x26-y1 86T 68T 18T 79% +/dev/grid/node-x26-y2 88T 70T 18T 79% +/dev/grid/node-x26-y3 88T 66T 22T 75% +/dev/grid/node-x26-y4 85T 71T 14T 83% +/dev/grid/node-x26-y5 90T 66T 24T 73% +/dev/grid/node-x26-y6 90T 66T 24T 73% +/dev/grid/node-x26-y7 89T 73T 16T 82% +/dev/grid/node-x26-y8 85T 65T 20T 76% +/dev/grid/node-x26-y9 90T 72T 18T 80% +/dev/grid/node-x26-y10 86T 64T 22T 74% +/dev/grid/node-x26-y11 90T 64T 26T 71% +/dev/grid/node-x26-y12 92T 73T 19T 79% +/dev/grid/node-x26-y13 85T 72T 13T 84% +/dev/grid/node-x26-y14 91T 73T 18T 80% +/dev/grid/node-x26-y15 92T 69T 23T 75% +/dev/grid/node-x26-y16 90T 72T 18T 80% +/dev/grid/node-x26-y17 90T 68T 22T 75% +/dev/grid/node-x26-y18 90T 73T 17T 81% +/dev/grid/node-x26-y19 94T 64T 30T 68% +/dev/grid/node-x26-y20 86T 73T 13T 84% +/dev/grid/node-x26-y21 86T 66T 20T 76% +/dev/grid/node-x26-y22 510T 491T 19T 96% +/dev/grid/node-x26-y23 87T 66T 21T 75% +/dev/grid/node-x26-y24 91T 64T 27T 70% +/dev/grid/node-x26-y25 94T 66T 28T 70% +/dev/grid/node-x26-y26 85T 68T 17T 80% +/dev/grid/node-x26-y27 85T 71T 14T 83% +/dev/grid/node-x26-y28 94T 64T 30T 68% +/dev/grid/node-x27-y0 88T 73T 15T 82% +/dev/grid/node-x27-y1 94T 67T 27T 71% +/dev/grid/node-x27-y2 90T 73T 17T 81% +/dev/grid/node-x27-y3 93T 71T 22T 76% +/dev/grid/node-x27-y4 89T 70T 19T 78% +/dev/grid/node-x27-y5 90T 66T 24T 73% +/dev/grid/node-x27-y6 87T 73T 14T 83% +/dev/grid/node-x27-y7 87T 66T 21T 75% +/dev/grid/node-x27-y8 86T 69T 17T 80% +/dev/grid/node-x27-y9 88T 73T 15T 82% +/dev/grid/node-x27-y10 92T 64T 28T 69% +/dev/grid/node-x27-y11 87T 69T 18T 79% +/dev/grid/node-x27-y12 91T 64T 27T 70% +/dev/grid/node-x27-y13 94T 68T 26T 72% +/dev/grid/node-x27-y14 89T 68T 21T 76% +/dev/grid/node-x27-y15 87T 67T 20T 77% +/dev/grid/node-x27-y16 90T 72T 18T 80% +/dev/grid/node-x27-y17 94T 65T 29T 69% +/dev/grid/node-x27-y18 90T 72T 18T 80% +/dev/grid/node-x27-y19 88T 73T 15T 82% +/dev/grid/node-x27-y20 88T 71T 17T 80% +/dev/grid/node-x27-y21 88T 64T 24T 72% +/dev/grid/node-x27-y22 504T 490T 14T 97% +/dev/grid/node-x27-y23 93T 66T 27T 70% +/dev/grid/node-x27-y24 85T 67T 18T 78% +/dev/grid/node-x27-y25 94T 64T 30T 68% +/dev/grid/node-x27-y26 85T 72T 13T 84% +/dev/grid/node-x27-y27 85T 73T 12T 85% +/dev/grid/node-x27-y28 89T 70T 19T 78% +/dev/grid/node-x28-y0 93T 66T 27T 70% +/dev/grid/node-x28-y1 86T 71T 15T 82% +/dev/grid/node-x28-y2 94T 73T 21T 77% +/dev/grid/node-x28-y3 91T 72T 19T 79% +/dev/grid/node-x28-y4 87T 69T 18T 79% +/dev/grid/node-x28-y5 85T 70T 15T 82% +/dev/grid/node-x28-y6 85T 72T 13T 84% +/dev/grid/node-x28-y7 89T 72T 17T 80% +/dev/grid/node-x28-y8 90T 73T 17T 81% +/dev/grid/node-x28-y9 94T 64T 30T 68% +/dev/grid/node-x28-y10 85T 73T 12T 85% +/dev/grid/node-x28-y11 89T 70T 19T 78% +/dev/grid/node-x28-y12 94T 67T 27T 71% +/dev/grid/node-x28-y13 87T 68T 19T 78% +/dev/grid/node-x28-y14 94T 72T 22T 76% +/dev/grid/node-x28-y15 92T 66T 26T 71% +/dev/grid/node-x28-y16 91T 64T 27T 70% +/dev/grid/node-x28-y17 86T 69T 17T 80% +/dev/grid/node-x28-y18 88T 69T 19T 78% +/dev/grid/node-x28-y19 90T 70T 20T 77% +/dev/grid/node-x28-y20 89T 69T 20T 77% +/dev/grid/node-x28-y21 90T 67T 23T 74% +/dev/grid/node-x28-y22 506T 491T 15T 97% +/dev/grid/node-x28-y23 89T 70T 19T 78% +/dev/grid/node-x28-y24 90T 73T 17T 81% +/dev/grid/node-x28-y25 86T 65T 21T 75% +/dev/grid/node-x28-y26 93T 73T 20T 78% +/dev/grid/node-x28-y27 88T 69T 19T 78% +/dev/grid/node-x28-y28 92T 68T 24T 73% +/dev/grid/node-x29-y0 88T 70T 18T 79% +/dev/grid/node-x29-y1 89T 68T 21T 76% +/dev/grid/node-x29-y2 85T 73T 12T 85% +/dev/grid/node-x29-y3 89T 73T 16T 82% +/dev/grid/node-x29-y4 86T 68T 18T 79% +/dev/grid/node-x29-y5 91T 70T 21T 76% +/dev/grid/node-x29-y6 86T 70T 16T 81% +/dev/grid/node-x29-y7 86T 64T 22T 74% +/dev/grid/node-x29-y8 90T 73T 17T 81% +/dev/grid/node-x29-y9 92T 65T 27T 70% +/dev/grid/node-x29-y10 89T 72T 17T 80% +/dev/grid/node-x29-y11 85T 66T 19T 77% +/dev/grid/node-x29-y12 89T 73T 16T 82% +/dev/grid/node-x29-y13 90T 72T 18T 80% +/dev/grid/node-x29-y14 86T 69T 17T 80% +/dev/grid/node-x29-y15 85T 64T 21T 75% +/dev/grid/node-x29-y16 88T 69T 19T 78% +/dev/grid/node-x29-y17 92T 64T 28T 69% +/dev/grid/node-x29-y18 86T 65T 21T 75% +/dev/grid/node-x29-y19 92T 70T 22T 76% +/dev/grid/node-x29-y20 94T 64T 30T 68% +/dev/grid/node-x29-y21 87T 64T 23T 73% +/dev/grid/node-x29-y22 509T 497T 12T 97% +/dev/grid/node-x29-y23 91T 67T 24T 73% +/dev/grid/node-x29-y24 90T 67T 23T 74% +/dev/grid/node-x29-y25 86T 65T 21T 75% +/dev/grid/node-x29-y26 94T 68T 26T 72% +/dev/grid/node-x29-y27 89T 69T 20T 77% +/dev/grid/node-x29-y28 87T 71T 16T 81% +/dev/grid/node-x30-y0 92T 64T 28T 69% +/dev/grid/node-x30-y1 93T 67T 26T 72% +/dev/grid/node-x30-y2 93T 66T 27T 70% +/dev/grid/node-x30-y3 93T 67T 26T 72% +/dev/grid/node-x30-y4 86T 70T 16T 81% +/dev/grid/node-x30-y5 91T 67T 24T 73% +/dev/grid/node-x30-y6 89T 66T 23T 74% +/dev/grid/node-x30-y7 89T 72T 17T 80% +/dev/grid/node-x30-y8 93T 69T 24T 74% +/dev/grid/node-x30-y9 94T 68T 26T 72% +/dev/grid/node-x30-y10 89T 69T 20T 77% +/dev/grid/node-x30-y11 94T 64T 30T 68% +/dev/grid/node-x30-y12 93T 65T 28T 69% +/dev/grid/node-x30-y13 85T 72T 13T 84% +/dev/grid/node-x30-y14 88T 68T 20T 77% +/dev/grid/node-x30-y15 94T 64T 30T 68% +/dev/grid/node-x30-y16 92T 73T 19T 79% +/dev/grid/node-x30-y17 92T 73T 19T 79% +/dev/grid/node-x30-y18 87T 68T 19T 78% +/dev/grid/node-x30-y19 93T 64T 29T 68% +/dev/grid/node-x30-y20 94T 67T 27T 71% +/dev/grid/node-x30-y21 89T 67T 22T 75% +/dev/grid/node-x30-y22 507T 491T 16T 96% +/dev/grid/node-x30-y23 91T 64T 27T 70% +/dev/grid/node-x30-y24 87T 65T 22T 74% +/dev/grid/node-x30-y25 85T 65T 20T 76% +/dev/grid/node-x30-y26 91T 68T 23T 74% +/dev/grid/node-x30-y27 90T 67T 23T 74% +/dev/grid/node-x30-y28 94T 66T 28T 70% +/dev/grid/node-x31-y0 92T 67T 25T 72% +/dev/grid/node-x31-y1 93T 68T 25T 73% +/dev/grid/node-x31-y2 92T 66T 26T 71% +/dev/grid/node-x31-y3 89T 64T 25T 71% +/dev/grid/node-x31-y4 90T 71T 19T 78% +/dev/grid/node-x31-y5 89T 68T 21T 76% +/dev/grid/node-x31-y6 85T 72T 13T 84% +/dev/grid/node-x31-y7 88T 65T 23T 73% +/dev/grid/node-x31-y8 86T 66T 20T 76% +/dev/grid/node-x31-y9 90T 72T 18T 80% +/dev/grid/node-x31-y10 86T 67T 19T 77% +/dev/grid/node-x31-y11 89T 72T 17T 80% +/dev/grid/node-x31-y12 90T 73T 17T 81% +/dev/grid/node-x31-y13 91T 70T 21T 76% +/dev/grid/node-x31-y14 94T 67T 27T 71% +/dev/grid/node-x31-y15 94T 73T 21T 77% +/dev/grid/node-x31-y16 86T 71T 15T 82% +/dev/grid/node-x31-y17 86T 73T 13T 84% +/dev/grid/node-x31-y18 89T 65T 24T 73% +/dev/grid/node-x31-y19 86T 72T 14T 83% +/dev/grid/node-x31-y20 88T 64T 24T 72% +/dev/grid/node-x31-y21 90T 64T 26T 71% +/dev/grid/node-x31-y22 505T 496T 9T 98% +/dev/grid/node-x31-y23 90T 73T 17T 81% +/dev/grid/node-x31-y24 91T 73T 18T 80% +/dev/grid/node-x31-y25 94T 69T 25T 73% +/dev/grid/node-x31-y26 92T 64T 28T 69% +/dev/grid/node-x31-y27 91T 66T 25T 72% +/dev/grid/node-x31-y28 85T 65T 20T 76% +/dev/grid/node-x32-y0 85T 69T 16T 81% +/dev/grid/node-x32-y1 93T 67T 26T 72% +/dev/grid/node-x32-y2 93T 73T 20T 78% +/dev/grid/node-x32-y3 94T 71T 23T 75% +/dev/grid/node-x32-y4 90T 70T 20T 77% +/dev/grid/node-x32-y5 92T 68T 24T 73% +/dev/grid/node-x32-y6 94T 64T 30T 68% +/dev/grid/node-x32-y7 86T 72T 14T 83% +/dev/grid/node-x32-y8 85T 73T 12T 85% +/dev/grid/node-x32-y9 89T 69T 20T 77% +/dev/grid/node-x32-y10 89T 73T 16T 82% +/dev/grid/node-x32-y11 87T 65T 22T 74% +/dev/grid/node-x32-y12 94T 67T 27T 71% +/dev/grid/node-x32-y13 93T 67T 26T 72% +/dev/grid/node-x32-y14 93T 66T 27T 70% +/dev/grid/node-x32-y15 86T 72T 14T 83% +/dev/grid/node-x32-y16 89T 69T 20T 77% +/dev/grid/node-x32-y17 93T 67T 26T 72% +/dev/grid/node-x32-y18 87T 64T 23T 73% +/dev/grid/node-x32-y19 85T 69T 16T 81% +/dev/grid/node-x32-y20 85T 69T 16T 81% +/dev/grid/node-x32-y21 91T 65T 26T 71% +/dev/grid/node-x32-y22 503T 491T 12T 97% +/dev/grid/node-x32-y23 94T 71T 23T 75% +/dev/grid/node-x32-y24 87T 64T 23T 73% +/dev/grid/node-x32-y25 91T 73T 18T 80% +/dev/grid/node-x32-y26 93T 67T 26T 72% +/dev/grid/node-x32-y27 86T 71T 15T 82% +/dev/grid/node-x32-y28 91T 64T 27T 70% +/dev/grid/node-x33-y0 86T 73T 13T 84% +/dev/grid/node-x33-y1 88T 71T 17T 80% +/dev/grid/node-x33-y2 90T 66T 24T 73% +/dev/grid/node-x33-y3 85T 64T 21T 75% +/dev/grid/node-x33-y4 87T 66T 21T 75% +/dev/grid/node-x33-y5 91T 68T 23T 74% +/dev/grid/node-x33-y6 93T 68T 25T 73% +/dev/grid/node-x33-y7 92T 70T 22T 76% +/dev/grid/node-x33-y8 91T 64T 27T 70% +/dev/grid/node-x33-y9 85T 72T 13T 84% +/dev/grid/node-x33-y10 89T 65T 24T 73% +/dev/grid/node-x33-y11 91T 66T 25T 72% +/dev/grid/node-x33-y12 87T 68T 19T 78% +/dev/grid/node-x33-y13 89T 70T 19T 78% +/dev/grid/node-x33-y14 86T 68T 18T 79% +/dev/grid/node-x33-y15 85T 69T 16T 81% +/dev/grid/node-x33-y16 94T 66T 28T 70% +/dev/grid/node-x33-y17 92T 68T 24T 73% +/dev/grid/node-x33-y18 88T 72T 16T 81% +/dev/grid/node-x33-y19 90T 73T 17T 81% +/dev/grid/node-x33-y20 89T 64T 25T 71% +/dev/grid/node-x33-y21 92T 71T 21T 77% +/dev/grid/node-x33-y22 502T 497T 5T 99% +/dev/grid/node-x33-y23 94T 67T 27T 71% +/dev/grid/node-x33-y24 93T 64T 29T 68% +/dev/grid/node-x33-y25 90T 66T 24T 73% +/dev/grid/node-x33-y26 87T 72T 15T 82% +/dev/grid/node-x33-y27 85T 73T 12T 85% +/dev/grid/node-x33-y28 86T 72T 14T 83% +/dev/grid/node-x34-y0 89T 66T 23T 74% +/dev/grid/node-x34-y1 94T 64T 30T 68% +/dev/grid/node-x34-y2 92T 69T 23T 75% +/dev/grid/node-x34-y3 93T 70T 23T 75% +/dev/grid/node-x34-y4 88T 64T 24T 72% +/dev/grid/node-x34-y5 94T 67T 27T 71% +/dev/grid/node-x34-y6 89T 68T 21T 76% +/dev/grid/node-x34-y7 94T 71T 23T 75% +/dev/grid/node-x34-y8 88T 69T 19T 78% +/dev/grid/node-x34-y9 89T 72T 17T 80% +/dev/grid/node-x34-y10 90T 69T 21T 76% +/dev/grid/node-x34-y11 91T 65T 26T 71% +/dev/grid/node-x34-y12 88T 69T 19T 78% +/dev/grid/node-x34-y13 90T 69T 21T 76% +/dev/grid/node-x34-y14 92T 66T 26T 71% +/dev/grid/node-x34-y15 94T 70T 24T 74% +/dev/grid/node-x34-y16 87T 69T 18T 79% +/dev/grid/node-x34-y17 86T 67T 19T 77% +/dev/grid/node-x34-y18 94T 66T 28T 70% +/dev/grid/node-x34-y19 94T 69T 25T 73% +/dev/grid/node-x34-y20 91T 67T 24T 73% +/dev/grid/node-x34-y21 87T 72T 15T 82% +/dev/grid/node-x34-y22 501T 495T 6T 98% +/dev/grid/node-x34-y23 93T 71T 22T 76% +/dev/grid/node-x34-y24 92T 73T 19T 79% +/dev/grid/node-x34-y25 90T 73T 17T 81% +/dev/grid/node-x34-y26 89T 69T 20T 77% +/dev/grid/node-x34-y27 89T 72T 17T 80% +/dev/grid/node-x34-y28 87T 66T 21T 75% diff --git a/2016/aoc22/src/main.rs b/2016/aoc22/src/main.rs new file mode 100644 index 0000000..bd374d5 --- /dev/null +++ b/2016/aoc22/src/main.rs @@ -0,0 +1,198 @@ +extern crate regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::HashMap; +use std::collections::HashSet; + +use regex::Regex; + +use std::str::FromStr; + +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +struct Node { + x: i8, + y: i8, + size: i16, + used: i16, + avail: i16, + blocker: bool +} + +impl FromStr for Node { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let reg = Regex::new(r"/dev/grid/node-x(\d+)-y(\d+) +(\d+)T +(\d+)T +(\d+)T +(\d+)%").unwrap(); + let cap = match reg.captures(s) { + Some(cap) => cap, + None => return Err("Does not match regex".to_string()) + }; + Ok(Node { + x: cap.at(1).unwrap().parse().unwrap(), + y: cap.at(2).unwrap().parse().unwrap(), + size: cap.at(3).unwrap().parse().unwrap(), + used: cap.at(4).unwrap().parse().unwrap(), + avail: cap.at(5).unwrap().parse().unwrap(), + blocker: false + }) + } +} + +impl Node { + fn is_viable_pair(&self, other: &Node) -> bool { + (self.x != other.x || self.y != other.y) && self.used > 0 && self.used <= other.avail + } + + fn recalculate_avail(&mut self) { + self.avail = self.size - self.used; + debug_assert!(self.avail >= 0); + debug_assert!(self.used >= 0); + } +} + +#[derive(Clone, Hash, PartialEq, Eq)] +struct Grid { + nodes: Vec<Vec<Node>>, + goal_x: i8, + goal_y: i8 +} + +impl Grid { + fn new(nodes: Vec<Node>) -> Grid { + let mut grid_nodes = Vec::new(); + let mut next_col = Vec::new(); + + let mut current_x = 0; + + for node in nodes { + if current_x != node.x { + grid_nodes.push(next_col); + next_col = Vec::new(); + current_x += 1; + } + + next_col.push(node); + } + grid_nodes.push(next_col); + grid_nodes = Grid::normalize(grid_nodes); + + Grid { + nodes: grid_nodes, + goal_x: current_x, + goal_y: 0 + } + } + + fn normalize(mut nodes: Vec<Vec<Node>>) -> Vec<Vec<Node>> { + for x in 0..nodes.len() { + for y in 0..nodes[x].len() { + nodes[x][y].size = ((nodes[x][y].size + 50)/100) * 100; + nodes[x][y].used = ((nodes[x][y].used + 50)/100) * 100; + nodes[x][y].avail = ((nodes[x][y].avail + 50)/100) * 100; + } + } + nodes + } + + fn is_final(&self) -> bool { + self.goal_x == 0 && self.goal_y == 0 + } + + fn make_move(&self, x: i8, y: i8, dx: i8, dy: i8) -> Option<Grid> { + if x+dx < 0 || x+dx >= self.nodes.len() as i8 || y+dy < 0 || y+dy >= self.nodes[x as usize].len() as i8 { + return None; + } + if !self.nodes[x as usize][y as usize].is_viable_pair(&self.nodes[(x+dx) as usize][(y+dy) as usize]) { + return None; + } + + let mut new_grid = self.clone(); + new_grid.nodes[(x+dx) as usize][(y+dy) as usize].used += new_grid.nodes[x as usize][y as usize].used; + new_grid.nodes[(x+dx) as usize][(y+dy) as usize].recalculate_avail(); + new_grid.nodes[x as usize][y as usize].used = 0; + new_grid.nodes[x as usize][y as usize].recalculate_avail(); + + if new_grid.goal_x == x && new_grid.goal_y == y { + new_grid.goal_x = x+dx; + new_grid.goal_y = y+dy; + } + + Some(new_grid) + } + + fn available_moves(&self) -> Vec<Grid> { + let mut moves = Vec::with_capacity(4); + + for x in 0..self.nodes.len() as i8 { + for y in 0..self.nodes[x as usize].len() as i8 { + match self.make_move(x, y, -1, 0) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + match self.make_move(x, y, 0, -1) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + match self.make_move(x, y, 1, 0) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + match self.make_move(x, y, 0, 1) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + } + } + + moves + } +} + + +fn main() { + let nodes = read_input(); + + let initial = Grid::new(nodes); + println!("Initial grid has {} possible moves", initial.available_moves().len()); + + let mut explored: HashSet<Grid> = HashSet::new(); + let mut frontier: HashMap<Grid, u32> = HashMap::new(); + frontier.insert(initial, 0); + let mut found_final = false; + + while !found_final { + let (best_frontier, moves) = find_best_frontiers(&frontier); + + let new_states = best_frontier.available_moves(); + found_final = new_states.iter().any(|ref s| s.is_final()); + + for state in new_states { + if !(explored.contains(&state) || frontier.contains_key(&state)) { + frontier.insert(state, moves+1); + } + } + + frontier.remove(&best_frontier); + explored.insert(best_frontier); + } + + let (final_frontier, moves) = frontier.iter().find(|&(s, _)| s.is_final()).unwrap(); + println!("It took {} moves to get the data", moves); +} + +fn read_input() -> Vec<Node> { + let file = BufReader::new(File::open("input.txt").unwrap()); + + file.lines() + .skip(2) + .filter_map(|line| Node::from_str(line.unwrap().as_ref()).ok()) + .collect() +} + +fn find_best_frontiers(frontier: &HashMap<Grid, u32>) -> (Grid, u32) { + frontier.iter().min_by_key(|&(ref grid, &moves)| { + grid.goal_x as u32 + grid.goal_y as u32 + moves + }).map(|(&ref grid, &moves)| (grid.clone(), moves.clone())).unwrap() +} diff --git a/2016/aoc23/Cargo.lock b/2016/aoc23/Cargo.lock new file mode 100644 index 0000000..c6ab041 --- /dev/null +++ b/2016/aoc23/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc23" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc23/Cargo.toml b/2016/aoc23/Cargo.toml new file mode 100644 index 0000000..39fd06e --- /dev/null +++ b/2016/aoc23/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc23" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc23/input.txt b/2016/aoc23/input.txt new file mode 100644 index 0000000..3ff0460 --- /dev/null +++ b/2016/aoc23/input.txt @@ -0,0 +1,26 @@ +cpy a b +dec b +cpy a d +cpy 0 a +cpy b c +inc a +dec c +jnz c -2 +dec d +jnz d -5 +dec b +cpy b c +cpy c d +dec d +inc c +jnz d -2 +tgl c +cpy -16 c +jnz 1 c +cpy 90 c +jnz 90 d +inc a +inc d +jnz d -2 +inc c +jnz c -5 diff --git a/2016/aoc23/src/main.rs b/2016/aoc23/src/main.rs new file mode 100644 index 0000000..a12fa18 --- /dev/null +++ b/2016/aoc23/src/main.rs @@ -0,0 +1,247 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +enum Instruction { + Inc(usize), + Dec(usize), + + TglLit(i32), + TglReg(usize), + + CpyLitReg(i32, usize), + CpyRegReg(usize, usize), + CpyLitLit(i32, i32), + CpyRegLit(usize, i32), + + JnzLitLit(i32, i32), + JnzRegLit(usize, i32), + JnzLitReg(i32, usize), + JnzRegReg(usize, usize), + + Noop +} + +impl Instruction { + fn parse(line: &str) -> Instruction { + match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Inc(reg); + }, + _ => {} + } + + match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Dec(reg); + }, + _ => {} + } + + + match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::TglReg(reg); + }, + _ => {} + } + + match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let lit = cap.at(1).unwrap().parse().unwrap(); + return Instruction::TglLit(lit); + }, + _ => {} + } + + + match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + + match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzRegLit(src, dest); + }, + _ => {} + } + + panic!("Invalid instruction line"); + } + + fn toggle(&self) -> Self { + match *self { + Instruction::Inc(a) => Instruction::Dec(a), + Instruction::Dec(a) => Instruction::Inc(a), + + Instruction::TglLit(_) => Instruction::Noop, + Instruction::TglReg(a) => Instruction::Inc(a), + + Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b), + Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b), + Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b), + Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b), + + Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b), + Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b), + Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b), + Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b), + Instruction::Noop => Instruction::Noop + } + } +} + +fn main() { + let mut program = read_file(); + + let mut registers: [i32; 4] = [12, 0, 0, 0]; + let mut pc: usize = 0; + + while pc < program.len() { + let mut pc_next: usize = pc+1; + + match program[pc] { + Instruction::Inc(dest) => { + registers[dest] += 1; + }, + Instruction::Dec(dest) => { + registers[dest] -= 1; + }, + + Instruction::TglReg(offset) => { + let line_to_toggle = (pc as i32 + registers[offset]) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + Instruction::TglLit(offset) => { + let line_to_toggle = (pc as i32 + offset) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + + Instruction::CpyLitReg(src, dest) => { + registers[dest] = src; + }, + Instruction::CpyRegReg(src, dest) => { + registers[dest] = registers[src]; + }, + Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {}, + + Instruction::JnzRegLit(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzLitLit(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzRegReg(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::JnzLitReg(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::Noop => {} + } + + pc = pc_next; + } + + println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]); + +} + +fn to_register_index(name: &str) -> usize { + match name { + "a" => 0, + "b" => 1, + "c" => 2, + "d" => 3, + _ => panic!("Invalid register provided") + } +} + +fn read_file() -> Vec<Instruction> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .map(|line| Instruction::parse(line.trim())) + .collect() +} diff --git a/2016/aoc24/Cargo.lock b/2016/aoc24/Cargo.lock new file mode 100644 index 0000000..d8b394a --- /dev/null +++ b/2016/aoc24/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc24" +version = "0.1.0" + diff --git a/2016/aoc24/Cargo.toml b/2016/aoc24/Cargo.toml new file mode 100644 index 0000000..26becbd --- /dev/null +++ b/2016/aoc24/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc24" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc24/input.txt b/2016/aoc24/input.txt new file mode 100644 index 0000000..cc45a4f --- /dev/null +++ b/2016/aoc24/input.txt @@ -0,0 +1,39 @@ +####################################################################################################################################################################################### +#...........#.....#...........#.#.......#.....#.#...............#.....#.....#.......#.......#.......#.....................#.........#.....#...#3......#...#.#.............#.......#...# +#####.#.#.###.###.#####.#.#####.#.###.###.###.#.#.#.#.#.#.###.#.###.###.###.#.#######.#.#.#.###.###.#.#.#.#####.#.#.#####.###.#.#######.#############.#.#.#.#.#.#.###.#.#.#.#.###.#.#.# +#...#.#.#.#.....#.#...#...#.....#.....#.#...#.........#.....................#.....#...#...#.......#.....#.#.........#.#.#.#.#.......................#...#...#.#.#.#.....#.#.........#.# +#.#.#.#.#.#####.#.#.#.#.#.#.#.#.###.#.#.###.#.#.#.#.#.#########.#.###.###.#.#.###.###.#.#.#.#.###.#.#.#.#.#.#.#####.#.#.###.###.#######.#.#.#.###.#.###.#.#.#####.#####.#.#.###.#.#.#.# +#.#.#...#.....#.#.....#...#.#...#.#...#.......#...........#...#...#...#.#.....#.#...#...........#.#.......#...#...#.#.........#...#.......#.#...#.....#...#.......#.#.#.............#.# +#.#######.#.#.###.#.#.#####.#.#.#.#.###.#####.#.#.###.#.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#######.#######.#.#.###.#.#.#.#.#.#.###.#.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.###.#.#####.#.# +#.#...#.....#.......#.......#.#.......#...#.#.....#.#.#.#.#.#.......#...#.....#.#.#.#.#.........#...#...#...#.......#...#...#.....#.....#...#.........#...#.#...#...#...#.........#.#.# +#.#.#.#.###.###.#.#.#.###.###.#.#.###.#.#.#.#####.#.###.#.#####.#####.###.#.#.#.#.###.#.#.#.###.###.#.#.#.#.#.#####.#.###.#.#.###.#.#.#.#.###.###.#######.#.###.###.#.#######.#.#.#.#.# +#.#...#...#...............#...#...#...#.#.........#.#...#...#.#...#.#.....#...#.#...#.#.#...#.#.#.#.#.....#...#...#.......#.#...#.........#.#.....#.#...#.....#.#...#.#2#.....#.......# +#.#.#####.#########.#.###.#.#####.#.#.#.#######.#.###.#.#.#.#.###.#.#.###.#.###.#.#.#.#.#.###.###.#.#.#######.#.###.#.#.#.#.#.#.#.#####.###.#.###.#.#####.#.#.###.#.#.#.###.#.###.###.# +#...#...........#.....#.......#...#0..........#...#.....#.#...#.#...#.#.#...#.#.......#.........#...#.#...#.#.#.......#...#.#.........#.#.....................#.#.#.#.....#.#.....#...# +#.###.#.#.#.#.#.###.#.#.#.#.#.###.#.#.###.#.#.#.###.###.#.#####.#.#.#.#.###.#.#.###.#.#.###.###.#.#####.#.#.#.###.#.#######.#######.#.#.#.###.#.#.#.#.#.#######.#.#.#####.#.###.###.#.# +#...#...#...#.#...........#...#.#.....#...#...#.....#.#.............#...#.........#...#.....#...#.......#...#.#.............#.........#...#.#.....#.#.........#.............#...#.....# +#.#.#.###.#.###.#.#.#.###.#.###.#######.#.#.###.#.#.#.#.###.#.###.#.#.#.#.#####.#.#.#.#####.#.#####.#.#.#.#.###.###.#.###.###.###.#.#.#.###.#.#.###.#.#.###.#########.#####.#.#.#.##### +#.#...#.#.......#...#.....#.....#...#...#.....#...#...#.........#.....#.#.........#.....#.....#.........#...#.#.....#.#...#...#.#.#...#.#...#.........#.#...#.........#.#.......#.....# +#.#####.#.###.#.#.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.###.#.###.#.#.#.###.#.#####.###.#.#.#.#.#.#####.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.###.#.#.# +#.....#...#...........#...#...........#.#.....#...#.....#...#.#.#.#...#.....#...#...#...............#...#.........#...#.....#...#.#...#.#...#.....#.....#.....#...#.#...#...#.#.......# +###.###.#.#.#####.###.#####.#.###.#.#.#####.#.###.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.#.###.#########.#.#####.###########.#.###.###.#####.# +#...#1#...#...#.......#...#...#.#...#...#...........#.#.......#.......#.#.........#.#...#...#...............#...#.....#.#...#.#.....#.........#...#.....#.#...#...#.....#.#.#.#...#...# +#.###.###.#.#.#.#####.#.#.#.#.#.#.#####.#####.#.#####.#.#.#.#.###.#.#.#.###.#.###.#.###.#.#.#####.#.#.#####.#.#.###.#.###.#.#.#.#.#.#.#####.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#.###.#.#.# +#.....#.#.#.#.........#.#.#.....#.....#...#.....#...#.............#...#...#.....#...#.......#.......#.#.....#...#...#.#...#.....#.#...#.....#.#.#.#.#.#.#.......#...........#.#5#.....# +#.###.#.#.###.###.###.#.#####.#.#.###.###.#.###.#############.#######.#.###.#.###.#.#####.#.#.#.#####.#.#.#####.#.#.#.#.#.#######.#.#.###########.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.###.# +#.....#...#...................#.......#...#...#.#.....#.............#.....#...#.....#.......#.#.#.........#.........#.......#.......#...#.........#.#...#...#.....#.#.....#...#...#.#.# +#.###.###.###########.###.#####.#####.###.#.#.#.#.#.#.###.#.###.#.#######.#.#.#.#.#.#.###.#.#.#####.#.#.#.#######.#.###.#.#.###.#.#.#.###.#####.#####.#.#.#.#.###.#.###.###########.#.# +#.#.#.#...#...#.....#.....#.#.......#.....#.....#...........#.#...#.........#.#.#.#.....#.#.#...........#...#...#...#.......#...#.........#.....#.....#.....#.......#...#...#.#...#...# +#.#.#.#.#.#########.#.#.###.#.#.###.###.#.#.#.###.#####.#.#.#.#.#.#.#######.#.#.#######.#.###.#.###.###.#.###.#.#.#.#######.#######.#.#.#.#####.#.###.#.#####.#.###.#.#.###.#.#######.# +#.#...#...#.#...................#.#...#.#...#.......#.#...#.#...#.#.#.....#.#...#...#...#.#.............#.....#...........#.........#...#.#.#.....#.......#.......#.....#...#.#...#...# +###.#.#.#.#.#.#.###.#.###.#####.#.#####.#.#.###.#.#.#.#####.#.###.#####.#.#.#.#.#.#.#.###.#.#.#####.###.#.###.#####.#.#.#.#####.###.#.#.#.#.#.#######.###.#.#.#########.###.#.#######.# +#.....#...................#...#.#...#...#...........#.#.......#.#.....#.#.....#...........#.....#.........#.#...........#...#.....#...#.....#.............#.#.#.........#.#.#.#.......# +#.#.#.#.#.###.#.#.#.#.#########.###.#.#.#.#########.#.#.#.#.#.#.###########.#.#.###.###.###.#.#.#.#.#.###.#.###.#.###.#.###.###.#.###.#.#.#####.#.#.#######.#.#.###.###.#.#.#.###.##### +#...#.#.#....7#.#...#.#.........#.....#...#.#.......#.....#...........#.#...#.......#.#...#.#...#...........#...#.#...#.....#...#.#.#...........#...#.#...#...#4....#...#...#...#.....# +###.#.#.###.#####.#.#.#.#.#.#.#.#.#.#.###.#.###.#.###.#######.#.#.###.#.#####.#.#####.###.#.###.#.#.#.#.#####.###.#.###.#.#.#.#.###.#.#.###.#.#.###.#.###.#########.#.###.#.#.#.#.#.#.# +#.....#.#.#.......#.#.#.......#.#.#.............#...#.........#.......#.#.#...........#.....#.....#...#...#.#.....#...#.....#.#.#...#...#...#.....#...#...#.#...#...#.#.#.....#...#.#.# +#.###.#.#.#########.#.#.#.#######.#.#.#.#.###.###.#####.#.#.#.#.#.###.#.#.#.#.#####.#.#.###.#.#.#.#.###.###.###.#.#.#######.#.#.###.#####.#.#.###.#.#.#####.###.#.#.###.#.#########.### +#.......#...#...#...#...#.#...#...#.#.#...#.#...........#.........#...#.#.#.#.....#...#.....#.#.....#...#...#...#.#.#.#...#...#.#...#.....#...........#.#.........#.....#.#.#...#.....# +#####.###.#####.#.#####.#######.#.#.#.###.#.#######.###.#####.###.#.#.#.#.#.#####.#####.###.###.###.#.#.###.#.#.#.###.#.#.###.#.#.#####.#.###.#.#.#.###.#.#.#.#.#.###.###.#.#.###.#.#.# +#.....#.#.#.......#...#.#.#.....#.........#...#.....#6......#...#.#...........#.......#.............#...#...#...#...#.#...#...#...#.....#.........#.#...#.....#.#.#.......#...#.#.#...# +####################################################################################################################################################################################### diff --git a/2016/aoc24/src/main.rs b/2016/aoc24/src/main.rs new file mode 100644 index 0000000..c4d620e --- /dev/null +++ b/2016/aoc24/src/main.rs @@ -0,0 +1,135 @@ +use std::io::BufReader; +use std::io::BufRead; +use std::fs::File; +use std::collections::HashMap; + +struct Map { + walls: Vec<Vec<bool>>, + destinations: Vec<(usize, usize)>, + start: (usize, usize) +} + +impl Map { + fn new(input: &[String]) -> Map { + let mut walls = Vec::with_capacity(input.len()); + let mut start = (0, 0); + let mut destinations = Vec::new(); + + let mut y = 0; + + for line in input { + let mut x = 0; + let mut wall_row = Vec::with_capacity(line.len()); + for c in line.chars() { + wall_row.push(c == '#'); + if c == '0' { + start = (y, x); + } + else if c.is_numeric() { + destinations.push((y, x)); + } + + x += 1; + } + + walls.push(wall_row); + y += 1; + } + + Map { + walls: walls, + destinations: destinations, + start: start + } + } + + fn is_valid_position(&self, y: i32, x: i32) -> bool { + y > 0 && + x > 0 && + (y as usize) < self.walls.len() && + (x as usize) < self.walls[y as usize].len() && + !self.walls[y as usize][x as usize] + } +} + +#[derive(Clone, Hash, PartialEq, Eq)] +struct State { + robot_location: (usize, usize), + destinations_hit: Vec<bool> +} + +impl State { + fn new(map: &Map) -> State { + State { + robot_location: map.start, + destinations_hit: map.destinations.iter().map(|_| false).collect() + } + } + + fn next_state(&self, movement: (i32, i32), map: &Map) -> Option<State> { + let (y, x) = self.robot_location; + let (dy, dx) = movement; + let y2 = y as i32 + dy; + let x2 = x as i32 + dx; + + if !map.is_valid_position(y2, x2) { + return None; + } + + let y2 = y2 as usize; + let x2 = x2 as usize; + + Some(State { + robot_location: (y2, x2), + destinations_hit: self.destinations_hit.iter() + .zip(map.destinations.iter()) + .map(|(&hit, &(dest_y, dest_x))| hit || (dest_y == y2 && dest_x == x2)) + .collect() + }) + } + + fn next_states(&self, map: &Map) -> Vec<State> { + [(-1, 0), (1, 0), (0, -1), (0, 1)].iter() + .filter_map(|&movement| self.next_state(movement, &map)) + .collect() + } + + fn is_complete(&self, map: &Map) -> bool { + self.destinations_hit.iter().all(|&x| x) && self.robot_location == map.start + } +} + +fn main() { + let map = Map::new(&read_file()); + let initial = State::new(&map); + + let mut states = HashMap::new(); + states.insert(initial, 0); + + let mut moves = 0; + + while !states.iter().any(|(&ref s, _)| s.is_complete(&map)) { + let new_states = states.iter() + .filter(|&(_, &m)| m == moves) + .flat_map(|(&ref s, _)| s.next_states(&map)) + .collect::<Vec<_>>(); + + moves += 1; + + for state in new_states { + if !states.contains_key(&state) { + states.insert(state, moves); + } + } + } + + println!("Final state found in {} moves", moves); +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc25/Cargo.lock b/2016/aoc25/Cargo.lock new file mode 100644 index 0000000..c4553c9 --- /dev/null +++ b/2016/aoc25/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc25" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc25/Cargo.toml b/2016/aoc25/Cargo.toml new file mode 100644 index 0000000..aa84af4 --- /dev/null +++ b/2016/aoc25/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc25" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc25/input.txt b/2016/aoc25/input.txt new file mode 100644 index 0000000..a9734a4 --- /dev/null +++ b/2016/aoc25/input.txt @@ -0,0 +1,30 @@ +cpy a d +cpy 7 c +cpy 362 b +inc d +dec b +jnz b -2 +dec c +jnz c -5 +cpy d a +jnz 0 0 +cpy a b +cpy 0 a +cpy 2 c +jnz b 2 +jnz 1 6 +dec b +dec c +jnz c -4 +inc a +jnz 1 -7 +cpy 2 b +jnz c 2 +jnz 1 4 +dec b +dec c +jnz 1 -4 +jnz 0 0 +out b +jnz a -19 +jnz 1 -21 diff --git a/2016/aoc25/src/main.rs b/2016/aoc25/src/main.rs new file mode 100644 index 0000000..7db2ce5 --- /dev/null +++ b/2016/aoc25/src/main.rs @@ -0,0 +1,284 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +enum Instruction { + Inc(usize), + Dec(usize), + + TglLit(i32), + TglReg(usize), + + OutLit(i32), + OutReg(usize), + + CpyLitReg(i32, usize), + CpyRegReg(usize, usize), + CpyLitLit(i32, i32), + CpyRegLit(usize, i32), + + JnzLitLit(i32, i32), + JnzRegLit(usize, i32), + JnzLitReg(i32, usize), + JnzRegReg(usize, usize), + + Noop +} + +impl Instruction { + fn parse(line: &str) -> Instruction { + match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Inc(reg); + }, + _ => {} + } + + match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Dec(reg); + }, + _ => {} + } + + + match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::TglReg(reg); + }, + _ => {} + } + + match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let lit = cap.at(1).unwrap().parse().unwrap(); + return Instruction::TglLit(lit); + }, + _ => {} + } + + + match Regex::new(r"out (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::OutReg(reg); + }, + _ => {} + } + + match Regex::new(r"out ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let lit = cap.at(1).unwrap().parse().unwrap(); + return Instruction::OutLit(lit); + }, + _ => {} + } + + + match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + + match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzRegLit(src, dest); + }, + _ => {} + } + + panic!("Invalid instruction line"); + } + + fn toggle(&self) -> Self { + match *self { + Instruction::Inc(a) => Instruction::Dec(a), + Instruction::Dec(a) => Instruction::Inc(a), + + Instruction::TglLit(_) => Instruction::Noop, + Instruction::TglReg(a) => Instruction::Inc(a), + + Instruction::OutLit(_) => Instruction::Noop, + Instruction::OutReg(a) => Instruction::Inc(a), + + Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b), + Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b), + Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b), + Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b), + + Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b), + Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b), + Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b), + Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b), + Instruction::Noop => Instruction::Noop + } + } +} + +fn main() { + let expected_output = vec!(0, 1, 0, 1, 0, 1, 0, 1, 0, 1); + let min_input = (0..).find(|&i| run_program(i) == expected_output).unwrap(); + println!("{}", min_input); +} + + +fn run_program(input: i32) -> Vec<i32> { + let mut transmission = Vec::new(); + let mut program = read_file(); + + let mut registers: [i32; 4] = [input, 0, 0, 0]; + let mut pc: usize = 0; + + while pc < program.len() && transmission.len() < 10 { + let mut pc_next: usize = pc+1; + + match program[pc] { + Instruction::Inc(dest) => { + registers[dest] += 1; + }, + Instruction::Dec(dest) => { + registers[dest] -= 1; + }, + + Instruction::TglReg(offset) => { + let line_to_toggle = (pc as i32 + registers[offset]) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + Instruction::TglLit(offset) => { + let line_to_toggle = (pc as i32 + offset) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + + Instruction::OutReg(output) => { + transmission.push(registers[output]); + }, + Instruction::OutLit(output) => { + transmission.push(output); + }, + + Instruction::CpyLitReg(src, dest) => { + registers[dest] = src; + }, + Instruction::CpyRegReg(src, dest) => { + registers[dest] = registers[src]; + }, + Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {}, + + Instruction::JnzRegLit(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzLitLit(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzRegReg(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::JnzLitReg(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::Noop => {} + } + + pc = pc_next; + } + + transmission +} + +fn to_register_index(name: &str) -> usize { + match name { + "a" => 0, + "b" => 1, + "c" => 2, + "d" => 3, + _ => panic!("Invalid register provided") + } +} + +fn read_file() -> Vec<Instruction> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .map(|line| Instruction::parse(line.trim())) + .collect() +} diff --git a/2016/aoc3/Cargo.lock b/2016/aoc3/Cargo.lock new file mode 100644 index 0000000..f581b3c --- /dev/null +++ b/2016/aoc3/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc3" +version = "0.1.0" + diff --git a/2016/aoc3/Cargo.toml b/2016/aoc3/Cargo.toml new file mode 100644 index 0000000..c8a1b62 --- /dev/null +++ b/2016/aoc3/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc3" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc3/input.txt b/2016/aoc3/input.txt new file mode 100644 index 0000000..1458df8 --- /dev/null +++ b/2016/aoc3/input.txt @@ -0,0 +1,1734 @@ + 330 143 338 + 769 547 83 + 930 625 317 + 669 866 147 + 15 881 210 + 662 15 70 + 273 277 707 + 50 592 770 + 280 313 407 + 642 487 372 + 94 619 295 + 734 243 141 + 220 141 515 + 198 824 745 + 210 787 964 + 213 627 601 + 918 4 447 + 805 630 802 + 711 237 987 + 938 552 388 + 643 405 779 + 803 747 525 + 917 832 631 + 899 292 843 + 81 206 445 + 141 874 465 + 177 974 54 + 520 725 814 + 271 958 554 + 779 579 264 + 358 18 257 + 978 77 270 + 984 88 131 + 475 702 940 + 183 756 160 + 383 941 820 + 806 142 646 + 793 275 804 + 53 272 368 + 942 821 785 + 863 830 902 + 219 52 199 + 473 479 351 + 860 522 361 + 890 240 216 + 94 756 407 + 310 189 468 + 234 909 178 + 889 667 756 + 429 485 730 + 825 405 30 + 943 806 253 + 98 455 365 + 998 454 290 + 971 576 223 + 64 429 273 + 945 779 63 + 352 960 59 + 672 948 577 + 782 43 567 + 460 315 719 + 825 604 183 + 453 442 788 + 694 632 334 + 569 619 317 + 337 49 17 + 878 468 660 + 393 598 717 + 550 827 159 + 540 362 346 + 66 713 380 + 491 477 44 + 411 114 320 + 554 96 250 + 306 67 196 + 769 553 333 + 762 436 382 + 278 322 153 + 894 603 334 + 539 441 844 + 486 162 927 + 197 9 218 + 94 221 804 + 250 220 913 + 557 626 486 + 562 705 630 + 968 922 285 + 518 36 468 + 18 608 83 + 512 611 530 + 534 37 65 + 621 136 90 + 239 113 139 + 371 640 956 + 629 54 959 + 531 620 338 + 682 499 810 + 798 170 968 + 187 640 645 + 660 535 332 + 663 530 314 + 64 26 65 + 55 285 488 + 620 288 52 + 642 474 450 + 455 9 962 + 51 760 489 + 426 760 833 + 304 783 772 + 498 765 695 + 635 53 126 + 44 430 774 + 979 943 838 + 962 892 64 + 494 709 614 + 7 695 120 + 503 114 606 + 362 340 689 + 509 367 389 + 673 410 664 + 773 262 558 + 897 958 245 + 140 773 483 + 965 468 584 + 546 209 668 + 856 381 184 + 274 237 762 + 888 677 906 + 871 516 405 + 102 529 912 + 285 724 885 + 352 501 53 + 774 139 245 + 380 309 594 + 813 185 765 + 530 645 965 + 958 618 120 + 851 202 957 + 737 476 131 + 595 546 108 + 716 113 66 + 327 215 318 + 397 343 390 + 351 143 103 + 138 91 31 + 108 224 919 + 230 276 896 + 426 975 177 + 327 975 918 + 238 365 764 + 328 799 775 + 590 906 967 + 578 460 338 + 507 619 647 + 711 617 867 + 933 478 734 + 820 760 721 + 199 711 824 + 983 214 228 + 382 150 648 + 415 782 242 + 615 754 445 + 693 689 590 + 382 784 482 + 997 181 322 + 682 241 172 + 587 302 252 + 184 135 254 + 574 104 549 + 88 738 796 + 486 715 861 + 62 491 815 + 463 434 569 + 519 622 310 + 199 443 782 + 572 657 85 + 763 517 844 + 750 175 835 + 228 269 710 + 611 316 551 + 883 546 296 + 169 693 18 + 992 743 316 + 263 529 529 + 705 570 4 + 918 706 527 + 609 285 971 + 260 533 112 + 711 486 904 + 820 40 472 + 997 301 129 + 257 288 343 + 635 439 375 + 560 381 417 + 773 105 145 + 58 963 267 + 976 742 424 + 994 441 384 + 389 770 514 + 782 463 335 + 919 727 276 + 780 794 372 + 326 180 590 + 918 946 257 + 889 842 181 + 507 61 464 + 762 835 443 + 827 607 982 + 174 875 544 + 934 885 589 + 32 343 757 + 987 826 257 + 981 782 844 + 446 291 397 + 443 800 421 + 165 668 539 + 410 373 487 + 422 803 881 + 546 998 953 + 291 607 160 + 919 894 62 + 842 718 117 + 110 816 582 + 470 836 596 + 575 687 35 + 37 835 374 + 90 954 354 + 101 141 407 + 174 398 499 + 173 737 964 + 4 365 950 + 946 616 634 + 906 904 619 + 40 789 16 + 788 769 76 + 737 867 88 + 565 812 31 + 508 380 201 + 34 935 339 + 500 862 326 + 431 181 475 + 403 346 585 + 88 530 708 + 731 137 781 + 715 563 272 + 817 659 932 + 396 368 360 + 162 683 376 + 278 620 39 + 525 910 371 + 688 524 149 + 488 998 279 + 286 392 523 + 325 144 406 + 79 532 419 + 540 460 465 + 222 832 416 + 517 507 46 + 87 744 183 + 382 819 701 + 306 763 647 + 744 74 913 + 62 813 849 + 691 874 775 + 291 422 314 + 432 630 809 + 611 510 566 + 583 745 289 + 397 19 727 + 188 766 442 + 96 108 329 + 963 719 598 + 963 764 469 + 444 636 731 + 792 636 422 + 993 1 416 + 518 300 532 + 298 312 736 + 316 111 463 + 825 569 35 + 858 591 584 + 809 84 607 + 681 610 740 + 383 279 210 + 851 733 615 + 287 959 160 + 856 851 171 + 606 115 211 + 310 541 845 + 506 119 319 + 665 471 562 + 382 885 798 + 440 29 595 + 113 903 475 + 257 773 846 + 306 741 776 + 97 804 76 + 489 332 423 + 466 632 613 + 86 739 481 + 199 846 712 + 62 282 809 + 155 681 142 + 705 525 270 + 159 800 117 + 612 664 316 + 505 616 837 + 578 839 770 + 942 535 122 + 542 781 512 + 552 22 475 + 760 791 97 + 432 626 837 + 26 616 336 + 412 316 702 + 108 232 242 + 158 311 449 + 60 141 325 + 58 1 714 + 532 977 123 + 531 978 598 + 679 899 57 + 645 523 54 + 167 892 14 + 164 574 492 + 105 37 491 + 132 555 485 + 600 879 508 + 608 843 222 + 270 255 398 + 232 960 281 + 241 995 436 + 113 674 411 + 381 567 5 + 697 450 966 + 726 857 969 + 722 686 965 + 543 20 453 + 955 689 554 + 858 161 923 + 140 979 953 + 786 836 237 + 200 322 875 + 311 623 398 + 510 814 945 + 67 387 825 + 621 620 740 + 630 842 163 + 545 75 373 + 506 531 501 + 301 571 357 + 746 491 253 + 37 29 748 + 769 507 754 + 69 886 861 + 423 629 856 + 380 723 83 + 875 647 657 + 144 696 580 + 896 49 629 + 275 598 374 + 118 636 279 + 277 80 529 + 623 130 493 + 368 712 621 + 833 730 512 + 59 767 829 + 105 933 731 + 54 240 108 + 803 235 992 + 837 726 881 + 426 855 450 + 636 730 731 + 840 561 977 + 996 229 670 + 508 234 186 + 529 108 917 + 373 337 795 + 681 35 565 + 790 251 152 + 301 235 599 + 875 416 653 + 277 338 990 + 800 207 595 + 954 650 896 + 931 667 706 + 84 851 822 + 254 778 816 + 316 141 732 + 233 759 239 + 546 473 315 + 69 15 96 + 513 470 320 + 460 188 729 + 429 950 288 + 709 807 790 + 456 161 570 + 269 718 339 + 213 628 602 + 155 367 686 + 176 418 568 + 66 251 723 + 959 696 536 + 794 279 885 + 315 527 993 + 603 853 868 + 727 747 994 + 411 287 193 + 528 763 559 + 803 149 739 + 542 883 696 + 275 676 183 + 411 317 161 + 349 875 35 + 39 729 221 + 256 831 216 + 247 238 176 + 399 59 306 + 409 445 550 + 9 387 253 + 613 204 474 + 81 868 944 + 589 912 735 + 319 264 83 + 984 704 614 + 778 614 532 + 699 762 556 + 680 250 507 + 504 581 647 + 160 351 295 + 513 739 413 + 651 915 651 + 878 218 499 + 872 990 503 + 38 886 12 + 218 201 415 + 240 250 504 + 265 448 382 + 402 876 126 + 488 950 649 + 189 210 597 + 24 850 758 + 30 451 347 + 5 437 723 + 634 310 546 + 801 179 411 + 679 338 852 + 385 32 933 + 406 531 554 + 88 516 871 + 860 486 834 + 467 535 849 + 419 820 785 + 206 649 526 + 244 499 714 + 80 774 678 + 336 149 612 + 310 175 656 + 150 221 791 + 159 806 701 + 336 465 530 + 376 819 272 + 533 472 421 + 82 124 909 + 523 561 539 + 844 811 576 + 439 612 587 + 782 457 686 + 152 51 837 + 413 573 855 + 403 608 26 + 893 819 910 + 361 499 657 + 677 937 617 + 428 6 343 + 310 38 431 + 474 35 420 + 574 256 221 + 700 907 515 + 149 685 478 + 206 325 720 + 114 51 67 + 320 338 686 + 293 59 527 + 147 756 986 + 250 697 573 + 968 194 545 + 542 480 72 + 454 574 619 + 473 55 592 + 475 339 889 + 884 313 993 + 125 127 742 + 591 514 585 + 543 583 282 + 264 580 390 + 839 487 781 + 902 664 868 + 334 459 819 + 107 20 211 + 368 479 775 + 683 691 273 + 681 336 630 + 22 978 536 + 926 828 708 + 210 319 723 + 787 689 866 + 854 633 856 + 960 494 866 + 122 687 596 + 918 705 539 + 84 564 791 + 876 138 949 + 836 1 500 + 718 308 466 + 228 311 271 + 421 998 433 + 622 772 174 + 875 720 432 + 680 687 509 + 215 95 623 + 674 732 166 + 198 174 645 + 721 839 390 + 617 896 448 + 73 331 155 + 789 134 431 + 853 376 400 + 82 862 411 + 779 362 70 + 750 777 349 + 674 604 224 + 812 731 446 + 280 546 336 + 922 781 619 + 196 892 876 + 941 361 479 + 344 988 873 + 499 92 795 + 287 913 546 + 625 167 604 + 617 1 399 + 154 166 720 + 328 323 111 + 713 619 530 + 606 756 580 + 194 247 935 + 149 65 64 + 55 287 902 + 870 866 127 + 478 679 587 + 900 459 565 + 563 787 743 + 962 798 769 + 669 39 525 + 745 691 317 + 484 123 93 + 500 598 348 + 159 535 681 + 618 176 877 + 723 373 464 + 304 184 131 + 542 209 654 + 716 47 647 + 976 537 771 + 914 606 568 + 241 250 481 + 616 640 660 + 744 187 843 + 303 617 927 + 369 525 773 + 754 697 360 + 595 560 605 + 562 589 610 + 799 497 655 + 823 553 532 + 937 502 449 + 976 941 158 + 194 720 347 + 474 694 822 + 528 184 272 + 922 698 568 + 415 889 638 + 169 822 65 + 547 281 663 + 582 167 110 + 365 56 914 + 431 162 923 + 473 812 578 + 572 890 386 + 164 119 308 + 604 946 496 + 327 142 72 + 641 916 472 + 743 663 228 + 107 446 345 + 823 486 152 + 997 47 968 + 565 155 631 + 438 205 416 + 271 163 875 + 123 393 111 + 169 412 854 + 615 683 659 + 592 362 9 + 99 895 668 + 834 205 172 + 359 355 550 + 499 149 389 + 755 298 916 + 475 706 807 + 829 425 118 + 43 527 479 + 159 473 874 + 151 326 992 + 970 660 509 + 837 930 35 + 164 345 506 + 209 879 487 + 97 157 503 + 289 755 793 + 624 897 293 + 382 134 451 + 257 917 339 + 110 168 85 + 470 583 139 + 486 613 120 + 584 747 795 + 959 699 339 + 866 384 672 + 157 639 464 + 939 485 409 + 947 441 131 + 179 953 581 + 735 587 605 + 834 582 36 + 304 422 707 + 195 348 347 + 163 521 486 + 948 471 675 + 915 453 406 + 40 345 635 + 81 124 115 + 127 105 127 + 50 32 10 + 221 399 397 + 487 676 412 + 574 607 450 + 268 625 323 + 843 858 145 + 706 286 218 + 822 168 254 + 950 708 944 + 572 640 775 + 958 563 909 + 996 154 918 + 378 626 564 + 335 823 339 + 499 810 270 + 294 22 98 + 987 959 591 + 101 899 442 + 931 409 576 + 542 102 655 + 404 980 398 + 759 990 381 + 692 990 750 + 752 93 149 + 278 973 883 + 621 459 232 + 398 261 626 + 221 212 744 + 790 241 352 + 802 218 317 + 443 294 244 + 393 131 941 + 466 378 885 + 516 419 240 + 799 748 407 + 468 502 386 + 829 329 766 + 432 376 408 + 681 88 198 + 553 351 489 + 234 717 59 + 332 525 675 + 437 691 723 + 441 834 433 + 616 144 274 + 966 911 650 + 254 274 782 + 346 714 856 + 330 696 171 + 394 407 298 + 897 553 867 + 755 503 956 + 253 840 382 + 923 195 262 + 918 735 483 + 55 703 227 + 768 759 225 + 825 238 14 + 7 479 978 + 211 603 957 + 216 866 94 + 112 698 60 + 847 631 307 + 940 164 253 + 406 133 14 + 380 816 425 + 147 873 429 + 698 987 98 + 534 823 691 + 197 690 754 + 979 39 468 + 928 73 531 + 119 66 920 + 982 810 569 + 476 534 397 + 931 366 182 + 783 104 732 + 131 32 619 + 784 136 530 + 16 933 484 + 995 987 739 + 985 88 977 + 43 919 914 + 540 399 915 + 566 859 257 + 639 419 73 + 727 118 865 + 477 370 834 + 293 434 155 + 422 557 603 + 203 243 754 + 373 15 748 + 466 574 807 + 282 576 70 + 275 365 608 + 987 644 648 + 711 629 717 + 420 410 696 + 252 417 874 + 642 26 202 + 223 23 531 + 545 580 675 + 565 600 521 + 130 745 142 + 264 377 397 + 300 618 253 + 683 331 279 + 440 826 275 + 835 785 266 + 592 264 590 + 257 255 173 + 532 23 620 + 571 749 434 + 988 552 492 + 566 766 234 + 617 818 776 + 45 113 882 + 579 793 114 + 971 243 608 + 979 241 241 + 130 83 634 + 91 361 5 + 311 107 501 + 377 388 496 + 727 849 317 + 323 702 256 + 804 254 189 + 70 11 246 + 752 425 785 + 799 413 882 + 917 133 695 + 959 49 902 + 420 121 412 + 177 170 158 + 828 734 135 + 880 875 75 + 824 556 960 + 857 689 960 + 74 951 2 + 246 687 756 + 311 93 487 + 209 626 886 + 17 545 566 + 963 252 283 + 947 493 805 + 185 493 462 + 728 365 885 + 808 214 528 + 582 780 100 + 30 254 654 + 596 706 553 + 713 968 803 + 123 270 839 + 792 778 475 + 442 95 682 + 931 212 678 + 781 140 439 + 651 645 978 + 137 829 286 + 593 503 895 + 642 215 144 + 687 122 934 + 84 240 919 + 656 515 774 + 51 799 273 + 636 324 924 + 213 161 309 + 509 157 458 + 582 1 727 + 716 269 819 + 978 343 303 + 828 264 708 + 108 620 190 + 12 12 634 + 103 615 579 + 364 286 660 + 809 714 656 + 729 504 10 + 994 366 341 + 433 796 77 + 663 462 353 + 776 687 758 + 751 495 651 + 33 751 753 + 349 919 228 + 204 799 584 + 335 156 563 + 725 191 535 + 731 676 524 + 455 571 10 + 899 379 689 + 773 641 812 + 324 761 421 + 354 557 897 + 571 740 161 + 407 271 856 + 886 393 428 + 286 870 218 + 950 819 347 + 331 847 858 + 498 471 689 + 357 378 775 + 890 503 514 + 201 863 428 + 721 737 796 + 636 178 974 + 14 387 936 + 622 424 144 + 82 201 727 + 127 164 779 + 173 319 326 + 195 748 641 + 469 512 510 + 626 949 405 + 552 542 251 + 192 204 382 + 655 558 631 + 970 519 3 + 918 701 399 + 56 543 403 + 524 848 641 + 620 431 539 + 604 473 824 + 369 105 464 + 575 957 429 + 859 978 199 + 712 381 199 + 941 305 738 + 892 663 937 + 653 963 365 + 70 331 508 + 620 923 682 + 739 122 350 + 288 418 768 + 733 326 520 + 694 472 793 + 725 415 739 + 895 398 201 + 500 157 168 + 727 814 354 + 807 726 340 + 431 329 212 + 635 374 403 + 677 78 347 + 386 559 505 + 385 361 161 + 262 494 621 + 481 237 767 + 318 966 640 + 723 732 546 + 911 652 823 + 958 502 677 + 718 258 834 + 98 666 506 + 929 41 933 + 869 637 605 + 585 156 335 + 490 316 149 + 436 339 323 + 596 948 224 + 275 433 241 + 545 890 155 + 601 413 676 + 893 401 673 + 694 171 403 + 211 110 482 + 267 61 541 + 206 124 256 + 189 353 308 + 351 880 70 + 237 677 380 + 759 754 388 + 465 99 862 + 852 787 925 + 758 890 804 + 252 817 784 + 773 129 860 + 954 102 872 + 743 396 730 + 500 304 173 + 492 399 527 + 413 465 813 + 670 837 933 + 897 424 430 + 782 404 14 + 151 24 418 + 897 260 306 + 811 287 386 + 440 93 449 + 229 185 582 + 136 63 678 + 211 250 940 + 184 400 209 + 122 383 238 + 143 386 111 + 320 194 415 + 925 790 501 + 924 596 614 + 606 733 277 + 886 116 194 + 278 627 189 + 225 536 981 + 487 538 584 + 539 2 793 + 219 456 57 + 341 424 941 + 199 482 921 + 231 241 588 + 711 740 334 + 596 554 323 + 917 164 629 + 19 138 756 + 939 70 225 + 536 432 401 + 137 614 14 + 593 818 402 + 871 280 515 + 268 259 326 + 900 97 376 + 68 699 461 + 546 810 400 + 540 697 676 + 591 125 751 + 159 719 919 + 605 763 898 + 171 845 459 + 115 289 376 + 265 636 317 + 646 225 84 + 663 755 89 + 192 828 12 + 316 523 822 + 310 933 784 + 44 721 873 + 893 873 461 + 898 15 548 + 96 861 726 + 9 837 398 + 238 404 29 + 227 845 428 + 770 764 472 + 960 747 784 + 990 281 811 + 59 597 111 + 930 799 729 + 930 882 758 + 459 961 116 + 484 83 914 + 83 969 994 + 828 423 132 + 346 541 246 + 783 484 303 + 983 7 921 + 216 208 905 + 802 216 54 + 6 121 306 + 609 36 749 + 608 84 626 + 97 705 89 + 200 688 878 + 242 314 802 + 294 66 338 + 768 417 272 + 785 351 266 + 58 505 668 + 791 291 679 + 783 694 43 + 794 468 355 + 777 796 171 + 378 784 426 + 224 510 840 + 557 606 708 + 513 127 189 + 231 976 517 + 772 37 433 + 684 973 324 + 70 661 83 + 914 136 702 + 917 630 710 + 826 894 84 + 373 416 248 + 551 924 226 + 357 646 374 + 890 491 246 + 938 293 519 + 66 42 704 + 537 60 374 + 508 56 405 + 437 751 653 + 681 718 160 + 683 293 800 + 569 288 878 + 692 206 611 + 173 157 399 + 201 492 645 + 98 132 329 + 234 612 711 + 296 54 975 + 651 219 923 + 527 177 138 + 585 598 302 + 552 653 474 + 54 288 358 + 828 631 279 + 854 642 746 + 80 52 645 + 386 346 181 + 488 7 569 + 168 351 533 + 906 186 681 + 833 404 191 + 863 297 526 + 451 555 808 + 336 544 155 + 253 211 838 + 759 819 238 + 921 343 761 + 264 632 690 + 165 424 159 + 121 481 361 + 181 409 439 + 94 972 995 + 696 904 722 + 613 238 422 + 190 281 334 + 385 127 129 + 300 364 234 + 479 768 937 + 883 654 35 + 979 679 959 + 244 51 788 + 275 613 804 + 143 575 210 + 160 168 608 + 330 471 651 + 407 594 410 + 723 576 943 + 268 912 361 + 692 442 760 + 443 288 20 + 382 610 556 + 62 694 568 + 322 257 214 + 253 458 861 + 260 213 829 + 37 137 420 + 668 220 104 + 673 150 435 + 551 466 897 + 390 729 999 + 423 963 763 + 837 36 295 + 854 726 495 + 16 728 389 + 735 246 510 + 218 136 617 + 604 197 140 + 113 355 499 + 631 902 488 + 689 898 212 + 780 826 901 + 556 205 657 + 855 661 288 + 141 34 480 + 27 23 194 + 115 53 393 + 333 287 700 + 68 300 671 + 394 589 28 + 572 248 771 + 454 118 797 + 526 141 300 + 785 377 504 + 886 723 105 + 541 712 470 + 156 128 932 + 479 85 989 + 381 207 162 + 813 839 544 + 143 783 541 + 916 361 24 + 878 133 886 + 986 750 335 + 122 643 864 + 395 460 591 + 387 896 627 + 117 455 109 + 2 14 569 + 873 364 215 + 875 350 554 + 70 878 940 + 234 846 82 + 256 279 901 + 693 990 473 + 951 866 824 + 923 408 891 + 36 5 531 + 954 654 266 + 921 652 434 + 561 701 427 + 232 764 365 + 330 331 73 + 46 813 6 + 380 698 297 + 396 221 289 + 135 867 633 + 814 649 286 + 797 918 827 + 705 58 338 + 6 305 310 + 701 352 28 + 903 97 825 + 693 126 794 + 438 144 592 + 367 932 400 + 320 820 264 + 687 210 652 + 682 84 566 + 671 604 816 + 529 646 267 + 795 654 114 + 955 426 118 + 249 759 102 + 343 581 267 + 341 619 107 + 479 57 341 + 683 32 870 + 630 609 210 + 361 643 803 + 506 856 406 + 580 562 359 + 312 433 154 + 750 379 920 + 448 520 312 + 733 259 899 + 33 786 319 + 579 669 90 + 595 769 242 + 160 985 236 + 654 903 946 + 635 99 802 + 75 158 437 + 467 382 289 + 406 542 548 + 684 417 794 + 729 105 122 + 44 485 689 + 737 15 713 + 970 391 17 + 373 384 729 + 336 1 118 + 814 807 759 + 965 808 828 + 179 181 834 + 242 94 838 + 188 183 82 + 691 402 618 + 984 43 561 + 330 447 872 + 553 581 30 + 884 393 836 + 431 298 837 + 278 389 690 + 976 587 803 + 722 220 538 + 548 208 107 + 629 414 729 + 543 584 672 + 512 431 954 + 475 367 959 + 226 306 9 + 824 774 668 + 188 22 870 + 722 764 300 + 647 803 256 + 410 972 21 + 436 536 278 + 995 577 453 + 670 439 224 + 434 488 572 + 82 317 498 + 559 823 662 + 499 614 196 + 944 14 432 + 618 866 652 + 467 872 289 + 471 722 189 + 923 756 17 + 790 409 195 + 511 500 545 + 667 283 758 + 271 373 283 + 573 686 490 + 659 706 560 + 770 247 633 + 424 169 895 + 47 349 411 + 380 235 805 + 384 546 148 + 747 870 831 + 754 421 910 + 937 15 433 + 188 760 806 + 872 748 418 + 718 556 510 + 165 590 486 + 798 40 177 + 349 923 530 + 795 690 746 + 550 671 360 + 824 442 775 + 331 686 152 + 570 270 926 + 860 64 383 + 408 464 170 + 758 440 349 + 773 434 699 + 780 563 352 + 18 644 621 + 432 663 188 + 420 887 956 + 237 586 788 + 319 526 586 + 544 647 115 + 628 235 511 + 666 408 33 + 670 459 697 + 48 189 692 + 837 708 428 + 462 652 632 + 426 106 457 + 730 744 195 + 700 816 769 + 383 480 923 + 601 612 910 + 559 953 779 + 533 937 240 + 464 123 344 + 579 82 76 + 179 188 373 + 1 641 56 + 688 698 50 + 688 160 4 + 790 364 767 + 202 70 137 + 914 420 674 + 961 657 851 + 578 708 875 + 503 94 776 + 221 143 356 + 34 126 403 + 234 31 78 + 721 949 330 + 675 191 460 + 80 957 651 + 690 580 824 + 461 73 802 + 725 606 51 + 183 857 521 + 708 800 482 + 644 111 37 + 769 778 869 + 883 693 909 + 549 714 43 + 273 246 599 + 637 309 675 + 451 195 552 + 681 408 126 + 422 465 52 + 743 235 144 + 248 586 312 + 42 398 313 + 222 335 21 + 528 312 738 + 856 312 132 + 915 79 610 + 550 605 186 + 566 815 698 + 127 250 717 + 532 129 775 + 604 132 549 + 134 44 247 + 521 815 470 + 370 853 515 + 795 187 851 + 963 295 50 + 757 228 169 + 706 303 120 + 416 133 309 + 956 63 11 + 751 162 301 + 387 632 29 + 257 383 994 + 215 247 994 + 529 606 963 + 770 305 756 + 721 791 971 + 558 531 675 + 253 477 918 + 470 52 615 + 256 335 24 + 301 523 651 + 316 702 637 + 321 721 32 + 591 730 179 + 341 364 146 + 673 120 501 + 31 183 207 + 641 116 463 + 221 54 775 + 262 458 669 + 139 486 904 + 736 260 139 + 406 359 663 + 434 563 753 + 981 6 215 + 423 320 358 + 719 319 415 + 315 375 320 + 7 637 423 + 314 365 175 + 199 687 754 + 174 546 1 + 29 526 754 + 153 402 251 + 787 565 919 + 820 239 876 + 994 614 47 + 958 816 288 + 244 750 275 + 248 890 694 + 628 194 414 + 774 958 466 + 181 34 442 + 569 371 939 + 500 347 740 + 745 123 467 + 614 662 119 + 201 690 352 + 596 974 215 + 508 921 240 + 405 947 317 + 402 372 733 + 298 41 357 + 135 339 759 + 544 683 690 + 584 1 893 + 215 680 501 + 191 453 649 + 952 84 727 + 815 494 293 + 163 168 46 + 136 119 441 + 185 112 474 + 877 830 354 + 497 242 226 + 484 714 178 + 854 570 402 + 873 120 432 + 30 613 50 + 365 529 624 + 969 332 586 + 636 617 153 + 588 669 314 + 12 52 628 + 584 704 642 + 95 199 69 + 979 486 705 + 953 391 698 + 698 471 333 + 302 466 64 + 678 19 376 + 353 860 905 + 236 113 797 + 400 879 962 + 341 805 493 + 661 506 196 + 736 357 644 + 943 352 365 + 484 756 282 + 491 943 262 + 765 494 729 + 321 208 986 + 621 346 290 + 258 706 386 + 179 452 276 + 433 583 153 + 708 2 212 + 193 151 320 + 647 149 299 + 335 951 831 + 661 787 792 + 818 742 477 + 799 964 157 + 726 780 172 + 740 225 24 + 428 39 263 + 388 901 506 + 97 940 413 + 41 454 826 + 324 453 443 + 346 76 938 + 463 595 751 + 854 948 454 + 451 902 507 + 722 961 130 + 695 529 425 + 59 591 467 + 559 623 222 + 991 194 196 + 749 793 245 + 474 327 247 + 346 2 277 + 643 328 135 + 785 264 751 + 35 537 887 + 811 584 685 + 475 903 748 + 471 115 698 + 7 945 449 + 464 880 227 + 287 868 878 + 564 11 850 + 221 623 475 + 314 325 553 + 209 865 621 + 39 655 236 + 95 296 235 + 124 920 21 + 439 473 902 + 334 375 792 + 315 116 768 + 267 736 95 + 703 606 595 + 505 886 514 + 114 168 52 + 301 584 495 + 200 709 527 + 164 422 554 + 246 546 460 + 377 141 223 + 286 323 354 + 810 240 90 + 920 450 425 + 277 8 570 + 28 649 50 + 295 650 534 + 690 187 665 + 674 184 483 + 68 139 376 + 570 430 500 + 590 422 543 + 304 68 43 + 422 666 163 + 501 375 696 + 81 621 813 + 19 981 945 + 410 83 941 + 427 945 25 + 283 408 825 + 281 648 635 + 294 678 615 + 113 936 500 + 554 772 314 + 502 642 624 + 262 318 699 + 88 526 817 + 242 468 161 + 820 179 253 + 580 62 531 + 343 183 422 + 430 161 485 + 26 127 435 + 442 32 517 + 491 243 544 + 552 680 310 + 131 489 457 + 697 162 526 + 897 838 305 + 695 748 335 + 753 936 24 + 46 681 637 + 745 808 617 + 318 251 171 + 49 39 855 + 359 284 725 + 221 837 145 + 581 821 444 + 573 267 318 + 706 969 583 + 722 912 586 + 680 86 869 + 833 546 97 + 865 507 481 + 938 104 386 + 941 217 265 + 360 53 607 + 634 197 476 + 787 659 444 + 368 163 783 + 493 738 345 + 182 539 52 + 764 827 612 + 699 493 663 + 914 384 17 + 495 546 260 + 739 461 275 + 386 91 394 + 804 506 198 + 780 421 269 + 109 669 193 + 457 298 349 + 560 800 331 + 282 153 637 + 160 254 807 + 434 204 476 + 717 759 737 + 629 785 65 + 347 614 790 + 270 663 647 + 188 271 528 + 277 929 591 + 853 744 589 + 704 881 761 + 573 714 627 + 541 689 287 + 540 301 187 + 670 397 368 + 867 8 698 + 869 146 802 + 10 137 104 + 164 575 450 + 507 233 466 + 548 425 46 + 435 824 78 + 334 951 34 + 646 551 99 + 60 829 569 + 501 866 382 + 440 327 222 + 744 132 333 + 800 983 126 + 887 866 451 + 28 599 39 + 833 129 307 + 804 519 319 + 510 746 821 + 639 209 561 + 197 649 333 + 638 644 361 + 754 474 366 + 193 219 106 + 843 536 331 + 483 634 611 + 367 195 592 + 753 71 115 + 934 42 83 + 337 75 85 + 475 304 169 + 672 143 211 + 360 406 74 + 370 119 111 + 351 955 696 + 543 849 785 + 375 576 836 + 288 316 239 + 512 273 786 + 721 407 82 + 998 634 292 + 449 399 284 + 540 316 693 + 430 68 984 + 146 376 482 + 785 134 643 + 157 509 441 + 808 615 552 + 920 564 452 + 407 341 441 + 990 778 211 + 822 325 925 + 368 206 876 + 491 153 126 + 11 373 546 + 854 752 143 + 843 773 660 + 777 472 964 + 359 708 889 + 575 941 882 + 945 22 152 + 968 237 115 + 30 238 110 + 101 504 412 + 119 646 719 + 28 190 336 + 890 301 712 + 11 657 782 + 885 465 361 + 424 669 645 + 528 654 194 + 894 252 667 + 516 299 998 + 370 837 976 + 305 651 194 + 701 447 175 + 470 234 929 + 752 606 965 + 568 370 322 + 226 592 281 + 553 801 330 + 576 228 623 + 639 477 637 + 252 664 998 + 781 215 994 + 446 698 25 + 562 500 980 + 702 444 299 + 971 550 387 + 754 562 439 + 347 896 716 + 242 861 596 + 588 829 323 + 464 211 949 + 481 192 47 + 598 98 963 + 932 960 32 + 933 482 893 + 15 989 888 + 866 735 629 + 636 513 470 + 280 528 944 + 531 66 867 + 284 735 865 + 778 743 3 + 458 131 262 + 772 273 255 + 942 278 50 + 269 151 917 + 502 4 883 + 538 155 68 + 929 850 21 + 126 759 729 + 869 689 711 + 180 359 855 + 299 68 975 + 210 371 205 + 477 183 827 + 922 50 841 + 665 154 312 + 379 848 486 + 450 835 743 + 69 161 515 + 680 535 83 + 692 779 352 + 818 554 389 + 781 89 538 + 746 218 209 + 292 201 652 + 417 375 393 + 916 962 644 + 518 923 561 + 915 469 386 + 142 460 454 + 947 392 89 + 144 840 866 + 205 465 967 + 209 657 650 + 891 322 207 + 800 522 907 + 516 498 994 + 185 806 804 + 179 393 137 + 316 765 892 + 850 756 123 + 494 783 627 + 832 53 659 + 93 949 602 + 666 954 516 + 592 11 210 + 223 4 389 + 221 280 388 + 100 279 50 + 380 589 345 + 385 238 382 + 205 506 359 + 98 280 652 + 396 371 290 + 314 477 454 + 368 692 564 + 48 263 586 + 356 902 922 diff --git a/2016/aoc3/src/main.rs b/2016/aoc3/src/main.rs new file mode 100644 index 0000000..678933f --- /dev/null +++ b/2016/aoc3/src/main.rs @@ -0,0 +1,64 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + + +struct Triangle { + l1: i32, + l2: i32, + l3: i32 +} + +impl Triangle { + fn is_valid(&self) -> bool { + (self.l1 + self.l2) > self.l3 && + (self.l2 + self.l3) > self.l1 && + (self.l3 + self.l1) > self.l2 + + } +} + +fn main() { + let len = read_file().iter().filter(|tri| tri.is_valid()).count(); + println!("{} valid triangles", len); +} + +fn read_file() -> Vec<Triangle> { + let file = BufReader::new(File::open("input.txt").unwrap()); + let mut lines = file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .peekable(); + + let mut results = Vec::new(); + while lines.peek().is_some() { + let (t11, t21, t31) = parse_line(lines.next().unwrap()); + let (t12, t22, t32) = parse_line(lines.next().unwrap()); + let (t13, t23, t33) = parse_line(lines.next().unwrap()); + + results.push(Triangle { + l1: t11, + l2: t12, + l3: t13 + }); + results.push(Triangle { + l1: t21, + l2: t22, + l3: t23 + }); + results.push(Triangle { + l1: t31, + l2: t32, + l3: t33 + }); + } + results +} + +fn parse_line(line: String) -> (i32, i32, i32) { + let mut separated = line.split_whitespace(); + (separated.next().unwrap().trim().parse().unwrap(), + separated.next().unwrap().trim().parse().unwrap(), + separated.next().unwrap().trim().parse().unwrap()) +} + diff --git a/2016/aoc4/Cargo.lock b/2016/aoc4/Cargo.lock new file mode 100644 index 0000000..df3af88 --- /dev/null +++ b/2016/aoc4/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc4" +version = "0.1.0" + diff --git a/2016/aoc4/Cargo.toml b/2016/aoc4/Cargo.toml new file mode 100644 index 0000000..7d02c6d --- /dev/null +++ b/2016/aoc4/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc4" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc4/input.txt b/2016/aoc4/input.txt new file mode 100644 index 0000000..c23ffc2 --- /dev/null +++ b/2016/aoc4/input.txt @@ -0,0 +1,1091 @@ +gbc-frperg-pubpbyngr-znantrzrag-377[rgbnp] +nij-mywlyn-wlsiayhcw-jfumncw-alumm-mbcjjcha-422[mcjwa] +pualyuhapvuhs-ibuuf-zhslz-227[uhalp] +xlrypetn-prr-lylwjdtd-665[dzoya] +zilqwikbqdm-rmttgjmiv-mvoqvmmzqvo-278[mqvio] +rgllk-bxmefuo-sdmee-geqd-fqefuzs-274[efdgl] +ugfkmewj-yjsvw-wyy-lwuzfgdgyq-814[wygfj] +lnkfaypeha-xwogap-bejwjyejc-524[uqzms] +laffe-sorozgxe-mxgjk-jek-xkykgxin-254[kxegf] +ytu-xjhwjy-hfsid-htfynsl-qtlnxynhx-411[hyntx] +vetllbybxw-xzz-mktbgbgz-709[kblty] +ixeumktoi-kmm-giwaoyozout-176[oimkt] +frqvxphu-judgh-udpsdjlqj-udeelw-uhvhdufk-647[ntbsq] +ixccb-hjj-uhvhdufk-725[hcjub] +sehheiylu-isqludwuh-xkdj-qsgkyiyjyed-634[ydehi] +yhwooebeaz-acc-ajcejaanejc-316[acejo] +qyujihctyx-vumeyn-zchuhwcha-318[hcuya] +xtwtelcj-rclop-clmmte-nzyeltyxpye-171[eltcy] +pinovwgz-mvwwdo-yzkgjthzio-941[owzgi] +htwwtxnaj-xhfajsljw-mzsy-hzxytrjw-xjwanhj-229[jwhxa] +amlqskcp-epybc-cee-pcyaosgqgrgml-652[cegpa] +fab-eqodqf-omzpk-emxqe-560[eqfmo] +bnmrtldq-fqzcd-idkkxadzm-qdrdzqbg-365[dqzbk] +ovbunmneqbhf-wryylorna-qrirybczrag-559[rbnya] +ynukcajey-xwogap-iwjwcaiajp-966[jydme] +dkqjcbctfqwu-uecxgpigt-jwpv-fgrctvogpv-128[cgptv] +ugfkmewj-yjsvw-tmffq-vwhdgqewfl-606[zfmlc] +htqtwkzq-idj-ijxnls-723[rwmzt] +kgjgrypw-epybc-aylbw-amyrgle-amlryglkclr-184[lygra] +jxdkbqfz-yrkkv-bkdfkbbofkd-705[csxut] +ujqgywfau-uzgugdslw-sfsdqkak-684[duboh] +rwcnawjcrxwju-mhn-nwprwnnarwp-823[wnrac] +eqttqukxg-rncuvke-itcuu-ujkrrkpi-102[ukrtc] +jvuzbtly-nyhkl-ibuuf-dvyrzovw-201[uvybl] +tvsnigxmpi-fewoix-wxsveki-750[ixesv] +rtqlgevkng-ejqeqncvg-ncdqtcvqta-336[prlxq] +wfummczcyx-luvvcn-nywbhifias-864[cfimn] +irdgrxzex-vxx-nfibjyfg-763[xfgir] +buzahisl-ipvohghykvbz-qlssfilhu-klclsvwtlua-591[moyzp] +dpotvnfs-hsbef-sbnqbhjoh-fhh-nbobhfnfou-831[vbmns] +owshgfarwv-lgh-kwujwl-usfvq-ghwjslagfk-164[wgfhl] +yuxufmdk-sdmpq-bxmefuo-sdmee-dqeqmdot-222[dmequ] +clotzlnetgp-clmmte-opawzjxpye-873[elptc] +mfklstdw-usfvq-kwjnauwk-268[kwfsu] +vhglnfxk-zktwx-unggr-xgzbgxxkbgz-839[gxkzb] +yrwxefpi-tpewxmg-kveww-ywiv-xiwxmrk-932[pxhgu] +shmml-cynfgvp-tenff-qrfvta-143[fmntv] +zhdsrqlchg-sodvwlf-judvv-uhdftxlvlwlrq-855[ldvhf] +kfg-jvtivk-sleep-uvjzxe-711[evjkf] +molgbzqfib-yxphbq-obpbxoze-757[bopqx] +qfmcusbwq-qobrm-qcohwbu-fsoqeiwgwhwcb-168[qwbco] +sbejpbdujwf-gmpxfs-tupsbhf-623[bfpsj] +jsehsyafy-hdsklau-yjskk-ksdwk-242[ksyad] +rwcnawjcrxwju-ljwmh-bcxajpn-823[jwcan] +excdklvo-oqq-oxqsxoobsxq-874[oqxsb] +buzahisl-jhukf-jvhapun-klwsvftlua-565[uahlf] +gpbepvxcv-snt-steadnbtci-453[tbcen] +wyvqljapsl-ihzrla-zlycpjlz-149[lzajp] +amlqskcp-epybc-cee-kylyeckclr-938[cekly] +jchipqat-qphzti-advxhixrh-895[hiapq] +tinnm-qvcqczohs-qighcasf-gsfjwqs-818[jfuek] +qyujihctyx-mwupyhayl-bohn-wihnuchgyhn-890[hynuc] +wlqqp-nvrgfezqvu-irsszk-ivjvrity-607[viqrs] +molgbzqfib-avb-cfkxkzfkd-315[bfkza] +luxciuwncpy-wuhxs-womnigyl-mylpcwy-266[ylhtr] +ugdgjxmd-bwddqtwsf-ugflsafewfl-762[qdtes] +fmsledevhsyw-nippcfier-eguymwmxmsr-438[vmsip] +xekdwvwnzkqo-xwogap-ajcejaanejc-706[aejwc] +wfummczcyx-yaa-fiacmncwm-136[bxsio] +rdadguja-tvv-ldgzhwde-375[dagve] +wsvsdkbi-qbkno-oqq-domrxyvyqi-718[qobdi] +oaxadrgx-qss-oazfmuzyqzf-300[mfedb] +hqfxxnknji-uqfxynh-lwfxx-xfqjx-125[zkwtx] +gpbepvxcv-qphzti-rdcipxcbtci-947[cpibt] +etyyx-bzmcx-bnzshmf-qdrdzqbg-443[btyez] +htqtwkzq-gzssd-qfgtwfytwd-541[ogntm] +uiovmbqk-kpwkwtibm-mvoqvmmzqvo-798[awevt] +zotts-vumeyn-xypyfijgyhn-448[qasni] +zovldbkfz-pzxsbkdbo-erkq-xznrfpfqflk-367[eunpo] +htwwtxnaj-gntmfefwitzx-hfsid-htfynsl-zxjw-yjxynsl-255[tfnwx] +vhglnfxk-zktwx-vahvhetmx-labiibgz-839[hvxab] +htqtwkzq-idj-wjhjnansl-983[rmtzn] +irgyyolokj-vrgyzoi-mxgyy-aykx-zkyzotm-358[yogkz] +ktfitzbgz-lvtoxgzxk-angm-wxitkmfxgm-943[vxmua] +uwtojhynqj-hmthtqfyj-jslnsjjwnsl-879[jhnst] +mrxivrexmsrep-gerhc-gsexmrk-hiwmkr-100[yzpuo] +hdgdovmt-bmvyz-ezggtwzvi-adivixdib-707[divgz] +lqwhuqdwlrqdo-iorzhu-ghvljq-959[qhldo] +vhkkhlbox-wrx-inkvatlbgz-397[kbhlv] +tyepcyletzylw-awldetn-rcldd-dezclrp-795[ldect] +sedikcuh-whqtu-uww-tufqhjcudj-946[uhwcd] +lsyrkjkbnyec-zvkcdsm-qbkcc-myxdksxwoxd-848[kcdsx] +fnjyxwrinm-lqxlxujcn-mnyjacvnwc-355[ncjxl] +gpbepvxcv-tvv-rdcipxcbtci-141[cvpbi] +xgsvgmotm-hgyqkz-ykxboiky-124[gkymo] +udskkaxawv-usfvq-esjcwlafy-814[uidxk] +fydelmwp-nlyoj-opalcexpye-899[elpyo] +aczupnetwp-qwzhpc-afcnsldtyr-717[cpant] +bknsykmdsfo-nio-yzobkdsyxc-926[kosyb] +xjmmjndqz-xcjxjgvoz-mzvxlpdndodji-343[fqvmn] +amjmpdsj-qaytclecp-fslr-bcqgel-782[claej] +fnjyxwrinm-ouxfna-anjlzdrbrcrxw-719[nrxaf] +qcbgiasf-ufors-pogysh-zcuwghwqg-168[gscfh] +kmjezxodgz-wpiit-mzxzdqdib-109[aypcu] +ckgvutofkj-xghhoz-uvkxgzouty-696[ajsic] +lsyrkjkbnyec-mkxni-cdybkqo-510[kybcn] +tipfxvezt-gcrjkzt-xirjj-jvimztvj-919[pofxi] +pbybeshy-cynfgvp-tenff-svanapvat-403[afnpv] +cjpibabsepvt-cvooz-usbjojoh-155[objcp] +jvyyvzpcl-lnn-ayhpupun-929[npylu] +wsvsdkbi-qbkno-zvkcdsm-qbkcc-oxqsxoobsxq-276[sbkoq] +ugdgjxmd-usfvq-ugslafy-ugflsafewfl-918[xbmpo] +nwlddtqtpo-ojp-xlcvpetyr-639[ptdlo] +nzcczdtgp-prr-opdtry-587[wsiym] +ynssr-yehpxk-wxlbzg-111[plhnx] +xjmmjndqz-xcjxjgvoz-xjiovdihzio-967[jxioz] +enqvbnpgvir-pubpbyngr-znexrgvat-585[qtsjn] +gvcskirmg-qekrixmg-ikk-xvemrmrk-126[kmrgi] +gpbepvxcv-uadltg-ejgrwphxcv-921[gpvce] +kmjezxodgz-nxvqzibzm-cpio-adivixdib-941[izdxb] +hcd-gsqfsh-xszzmpsob-sbuwbssfwbu-428[sbfhu] +nwlddtqtpo-upwwjmply-dpcgtnpd-119[pdtwl] +mbggf-msvdly-zlycpjlz-929[aonev] +lhkhszqx-fqzcd-qzaahs-btrsnldq-rdquhbd-443[qdhsz] +luxciuwncpy-xsy-uwkocmcncih-500[cuinw] +qvbmzvibqwvit-kpwkwtibm-zmkmqdqvo-564[mqvbi] +tvsnigxmpi-jpsaiv-irkmriivmrk-568[yileu] +vxupkizork-kmm-lotgtiotm-748[xymrs] +gpewwmjmih-gerhc-hiwmkr-152[lostk] +ibghopzs-gqojsbusf-vibh-rsgwub-818[bsghi] +guahyncw-luvvcn-wihnuchgyhn-552[hncug] +iruzfrtkzmv-treup-tfrkzex-ivjvrity-373[rtivz] +dsxxw-cee-ylyjwqgq-704[eqwxy] +lhkhszqx-fqzcd-eknvdq-lzmzfdldms-911[dzlqf] +oxmeeuruqp-omzpk-oamfuzs-emxqe-248[emoup] +dyz-combod-mkxni-mykdsxq-vklybkdybi-848[dkybm] +bpvctixr-qphzti-ldgzhwde-999[abmop] +kwvacumz-ozilm-jiasmb-mvoqvmmzqvo-824[tnqvi] +njmjubsz-hsbef-kfmmzcfbo-nbobhfnfou-389[luxhg] +hwbba-fag-tgceswkukvkqp-622[kabgw] +nchhg-jiasmb-lmxizbumvb-382[bmhia] +ymszqfuo-dmnnuf-emxqe-170[syxpj] +ymszqfuo-qss-abqdmfuaze-144[qsafm] +tcfkqcevkxg-hwbba-hnqygt-vtckpkpi-440[kctbg] +zloolpfsb-gbiivybxk-rpbo-qbpqfkd-705[bopfi] +slqryzjc-pyzzgr-rpyglgle-288[uanmz] +iutyaskx-mxgjk-inuiurgzk-rumoyzoiy-696[klmzy] +dpssptjwf-cvooz-efqmpznfou-311[fopsz] +dsxxw-cee-dglylagle-756[eldgx] +nwlddtqtpo-upwwjmply-xlcvpetyr-223[pltwd] +jvuzbtly-nyhkl-lnn-lunpullypun-201[tqlba] +uiovmbqk-kivlg-bmkpvwtwog-720[kpvsu] +nchhg-xtiabqk-oziaa-zmamizkp-850[aizhk] +molgbzqfib-zixppfcfba-gbiivybxk-pqloxdb-237[igmjz] +jyfvnlupj-jhukf-jvhapun-yljlpcpun-539[dmnws] +hqtyeqsjylu-sqdto-tufqhjcudj-712[cnysz] +gsvvswmzi-gerhc-gsrxemrqirx-100[dlypm] +ktwbhtvmbox-xzz-vhgmtbgfxgm-709[bgmtx] +hjgbwuladw-uzgugdslw-vwhsjlewfl-580[wlgud] +njmjubsz-hsbef-kfmmzcfbo-efqmpznfou-181[subnv] +bnknqetk-bzmcx-zbpthrhshnm-417[bhnkm] +gspsvjyp-fyrrc-jmrergmrk-126[rgjmp] +bjfutsneji-gntmfefwitzx-kqtbjw-fhvznxnynts-307[ntfjb] +sedikcuh-whqtu-rqiauj-tuiywd-270[gipnv] +hjgbwuladw-bwddqtwsf-jwsuimakalagf-294[wadbf] +encuukhkgf-uecxgpigt-jwpv-rwtejcukpi-986[ucegk] +nzydfxpc-rclop-nlyoj-nzletyr-zapcletzyd-847[lyzcn] +eqpuwogt-itcfg-lgnnadgcp-tgceswkukvkqp-518[gckpt] +nzwzcqfw-mldvpe-afcnsldtyr-171[cdfln] +ide-htrgti-snt-advxhixrh-401[hitdr] +fmsledevhsyw-gerhc-gsexmrk-erepcwmw-776[emrsw] +jvyyvzpcl-yhiipa-aljouvsvnf-201[vyaij] +chnylhuncihuf-zfiqyl-mniluay-656[hilnu] +udskkaxawv-xdgowj-klgjsyw-346[eruiv] +pbeebfvir-sybjre-qrcnegzrag-585[erbga] +aoubshwq-qobrm-obozmgwg-948[obgmq] +jvsvymbs-ibuuf-huhsfzpz-747[subfh] +qvbmzvibqwvit-jiasmb-ikycqaqbqwv-928[qbiva] +zuv-ykixkz-kmm-jkyomt-748[kmyzi] +slqryzjc-zsllw-amlryglkclr-808[lrcsy] +enzcntvat-enoovg-ybtvfgvpf-273[vntef] +iqmbazulqp-dmnnuf-oazfmuzyqzf-664[zfmqu] +yaxsnlcrun-ouxfna-uxprbcrlb-537[nruxa] +ovbunmneqbhf-cynfgvp-tenff-ratvarrevat-351[uakpm] +qzchnzbshud-idkkxadzm-rghoohmf-885[hdzkm] +fodvvlilhg-sodvwlf-judvv-fxvwrphu-vhuylfh-101[vfhld] +qvbmzvibqwvit-kpwkwtibm-apqxxqvo-798[qvbiw] +aoubshwq-pwcvonofrcig-rms-aofyshwbu-688[oswab] +hwbba-gii-fgrnqaogpv-882[gabif] +pkl-oaynap-acc-pnwejejc-186[acpej] +ltpedcxots-qphzti-ejgrwphxcv-323[ptceh] +mybbycsfo-nio-nofovyzwoxd-250[stdkc] +bgmxkgtmbhgte-ietlmbv-zktll-inkvatlbgz-397[ptrnf] +dpotvnfs-hsbef-dipdpmbuf-qvsdibtjoh-545[dbfps] +fmsledevhsyw-veqtekmrk-tpewxmg-kveww-hitevxqirx-568[evwkm] +ykjoqian-cnwza-ywjzu-ykwpejc-wymqeoepekj-628[hmfzu] +wihmogyl-aluxy-vumeyn-jolwbumcha-240[lmuya] +yuxufmdk-sdmpq-eomhqzsqd-tgzf-emxqe-664[mqdef] +wifilzof-vumeyn-guhuaygyhn-864[uyfgh] +hplazytkpo-nlyoj-cpdplcns-457[plcno] +vhglnfxk-zktwx-utldxm-hixktmbhgl-917[tursp] +jxdkbqfz-zxkav-zlxqfkd-pxibp-133[xkzbd] +mfklstdw-xdgowj-jwuwanafy-554[wadfj] +eqttqukxg-tcddkv-vtckpkpi-596[ampxv] +tpspahyf-nyhkl-jovjvshal-mpuhujpun-591[fkeyj] +vqr-ugetgv-ecpfa-eqcvkpi-ujkrrkpi-414[ekprv] +mvkccspson-bkllsd-nozvyiwoxd-952[oscdk] +ugjjgkanw-ugfkmewj-yjsvw-bwddqtwsf-kwjnauwk-528[nkliy] +wkqxodsm-lexxi-myxdksxwoxd-848[xdkmo] +tfiifjzmv-tyftfcrkv-jyzggzex-841[unmyd] +wdjcvuvmyjpn-rzvkjiduzy-mvwwdo-adivixdib-421[dvijw] +xzwrmkbqtm-jcvvg-amzdqkma-226[uonyt] +tvsnigxmpi-mrxivrexmsrep-veffmx-xvemrmrk-308[mrxev] +iehepwnu-cnwza-nwxxep-owhao-420[wenah] +fubrjhqlf-edvnhw-wudlqlqj-725[lqdfh] +wfummczcyx-wuhxs-mniluay-370[cbijt] +jchipqat-eaphixr-vgphh-sthxvc-895[hpaci] +pelbtravp-ohaal-hfre-grfgvat-169[arefg] +jshzzpmplk-jhukf-aljouvsvnf-279[jfhkl] +hwbba-ejqeqncvg-ocpcigogpv-128[cgbeo] +fnjyxwrinm-ajkkrc-cajrwrwp-745[rjwac] +mhi-lxvkxm-utldxm-tgterlbl-267[lmtxb] +jxdkbqfz-bdd-pqloxdb-237[dbqxf] +qfkkj-nzydfxpc-rclop-clmmte-xlylrpxpye-197[vzyuc] +bxaxipgn-vgpst-qxdwpopgsdjh-ytaanqtpc-hwxeexcv-687[csdop] +rdggdhxkt-eaphixr-vgphh-itrwcdadvn-245[dhgra] +qlm-pbzobq-zxkav-zlxqfkd-obzbfsfkd-471[bzfkq] +ajyqqgdgcb-qaytclecp-fslr-sqcp-rcqrgle-106[cqglr] +zgmfyxypbmsq-aylbw-amyrgle-qfgnngle-704[jmbna] +pkl-oaynap-acc-zalhkuiajp-654[apckl] +bqxnfdmhb-okzrshb-fqzrr-btrsnldq-rdquhbd-599[nszgr] +mybbycsfo-mkxni-mykdsxq-cobfsmoc-302[mbcos] +ujoon-eaphixr-vgphh-ldgzhwde-141[hdego] +iuxxuyobk-hatte-lotgtiotm-852[toiux] +muqfedyput-rkddo-huqsgkyiyjyed-608[dyuek] +mrxivrexmsrep-ikk-irkmriivmrk-230[rikme] +htqtwkzq-wfggny-ywfnsnsl-749[nwfgq] +sno-rdbqds-idkkxadzm-trdq-sdrshmf-599[dsrkm] +apuut-wpiit-gvwjmvojmt-369[tijmp] +molgbzqfib-yxphbq-tlohpelm-133[blhmo] +ugdgjxmd-wyy-hmjuzskafy-866[ydgjm] +slqryzjc-hcjjwzcyl-dglylagle-860[lcjyg] +ktwbhtvmbox-wrx-etuhktmhkr-241[psbxd] +oaddaeuhq-otaoaxmfq-ruzmzouzs-950[aouzd] +ugfkmewj-yjsvw-tmffq-klgjsyw-528[sqogh] +vrurcjah-pajmn-ajvyjprwp-ljwmh-anlnrerwp-433[jkstx] +fab-eqodqf-vqxxknqmz-ymdwqfuzs-586[qfdmx] +tpspahyf-nyhkl-kfl-klwhyatlua-123[lahky] +zntargvp-enoovg-znexrgvat-195[gnvae] +dkqjcbctfqwu-uecxgpigt-jwpv-ugtxkegu-934[gucte] +owshgfarwv-xdgowj-jwkwsjuz-320[wjgos] +gifavtkzcv-treup-jyzggzex-659[gzetv] +bjfutsneji-gfxpjy-tujwfyntsx-203[jftns] +pxtihgbsxw-ietlmbv-zktll-ybgtgvbgz-371[bgtli] +crwwv-zxkav-pefmmfkd-367[fkmvw] +sbqiiyvyut-fbqijys-whqii-tulubefcudj-998[xytos] +gvcskirmg-gsvvswmzi-fewoix-pskmwxmgw-230[gmswi] +eqttqukxg-ejqeqncvg-octmgvkpi-232[qegtc] +lqwhuqdwlrqdo-fdqgb-zrunvkrs-439[qdrlu] +tinnm-gqojsbusf-vibh-gozsg-480[gsbin] +lujbbrornm-ljwmh-orwjwlrwp-849[rwjlb] +jef-iushuj-rkddo-efuhqjyedi-868[dejuf] +szfyrqriuflj-treup-jrcvj-971[slkjz] +ltpedcxots-rpcsn-itrwcdadvn-921[cdtnp] +ohmnuvfy-xsy-jolwbumcha-968[hmouy] +gntmfefwitzx-wfintfhynaj-uqfxynh-lwfxx-wjhjnansl-905[fnwxh] +xcitgcpixdcpa-tvv-hwxeexcv-271[cxvei] +jyfvnlupj-qlssfilhu-ayhpupun-227[zbydk] +wdjcvuvmyjpn-zbb-vxlpdndodji-291[djvbn] +wfummczcyx-dyffsvyuh-xymcah-630[ycfmh] +cebwrpgvyr-wryylorna-phfgbzre-freivpr-897[opgba] +cjpibabsepvt-tdbwfohfs-ivou-fohjoffsjoh-363[fobhj] +zekvierkzferc-jtrmvexvi-ylek-wzeretzex-425[erzkv] +sgmtkzoi-pkrrehkgt-ygrky-228[kgrty] +iruzfrtkzmv-jtrmvexvi-ylek-jkfirxv-971[nvfye] +dfcxsqhwzs-pogysh-obozmgwg-870[goshw] +yuxufmdk-sdmpq-vqxxknqmz-bgdotmeuzs-326[tidcv] +iuxxuyobk-igtje-ygrky-878[mflrz] +laffe-igtje-vaxingyotm-800[aefgi] +tpspahyf-nyhkl-wshzapj-nyhzz-zhslz-643[hzpsy] +diozmivodjivg-xviyt-ozxcijgjbt-473[cmtlp] +pyknyegle-njyqrga-epyqq-pcyaosgqgrgml-314[gyqep] +bwx-amkzmb-zijjqb-tijwzibwzg-824[egorq] +drxevkzt-vxx-uvjzxe-581[xvezd] +ktfitzbgz-cxeeruxtg-wxitkmfxgm-761[txgef] +htsxzrjw-lwfij-wfggny-ywfnsnsl-801[cjidb] +oxmeeuruqp-nmewqf-pqeusz-742[eqump] +hqfxxnknji-kzeed-ojqqdgjfs-jslnsjjwnsl-671[jnsqd] +pbybeshy-rtt-phfgbzre-freivpr-221[rbepf] +pdjqhwlf-edvnhw-xvhu-whvwlqj-231[hwvdj] +gcfcnuls-aluxy-vumeyn-lywycpcha-188[cylua] +plolwdub-judgh-edvnhw-pdqdjhphqw-699[dhpwj] +udpsdjlqj-hjj-pdqdjhphqw-751[jdhpq] +amjmpdsj-pyzzgr-qyjcq-886[jmpqy] +lahxpnwrl-ljwmh-bqryyrwp-667[tifxe] +drxevkzt-avccpsvre-uvgcfpdvek-191[vcedk] +xzwrmkbqtm-rmttgjmiv-apqxxqvo-928[lmkgz] +eqnqthwn-tcddkv-fgrctvogpv-648[tvcdg] +bjfutsneji-ojqqdgjfs-ijajqturjsy-515[jqsfi] +sebehvkb-hqrryj-ixyffydw-166[siyrz] +zlkprjbo-doxab-mixpqfz-doxpp-jxohbqfkd-783[yjhzq] +eza-dpncpe-nsznzwlep-opdtry-821[sdeti] +tbxmlkfwba-yxphbq-xkxivpfp-523[slfmk] +ucynmlgxcb-hcjjwzcyl-umpiqfmn-548[cmjln] +lxwbdvna-pajmn-bljenwpna-qdwc-dbna-cnbcrwp-199[nabwc] +eadalsjq-yjsvw-wyy-jwsuimakalagf-892[ajswy] +fruurvlyh-mhoobehdq-zrunvkrs-907[rhuov] +sbqiiyvyut-vbemuh-sedjqydcudj-686[ltadr] +fkqbokxqflkxi-avb-lmboxqflkp-991[kbflq] +lhkhszqx-fqzcd-atmmx-kzanqzsnqx-677[qzxah] +cebwrpgvyr-hafgnoyr-cynfgvp-tenff-qrcnegzrag-793[rxmql] +ajmrxjlcren-cxy-bnlanc-ouxfna-lxwcjrwvnwc-927[cnxaj] +hqtyeqsjylu-isqludwuh-xkdj-tulubefcudj-244[udjlq] +vdzonmhydc-azrjds-cdudknoldms-157[lzowh] +uwtojhynqj-kqtbjw-zxjw-yjxynsl-333[grmkp] +myxcewob-qbkno-oqq-ecob-docdsxq-614[oqbcd] +rkpqxyib-gbiivybxk-abpfdk-419[bikpx] +zlilocri-zelzlixqb-qbzeklildv-497[ucyzj] +pinovwgz-xviyt-vivgtndn-499[vingt] +gcfcnuls-aluxy-luvvcn-xymcah-318[cluan] +sebehvkb-fbqijys-whqii-husuylydw-400[bhisy] +rdchjbtg-vgpst-eaphixr-vgphh-rjhidbtg-htgkxrt-323[hgtrp] +pualyuhapvuhs-jshzzpmplk-wshzapj-nyhzz-zlycpjlz-175[zphla] +atyzghrk-sgmtkzoi-hgyqkz-yzuxgmk-228[gkzyh] +ohmnuvfy-mwupyhayl-bohn-yhachyylcha-630[hyacl] +oxjmxdfkd-avb-pqloxdb-211[dxboa] +iqmbazulqp-bdavqofuxq-omzpk-ruzmzouzs-482[zqumo] +zsxyfgqj-gzssd-wjxjfwhm-619[jsfgw] +qvbmzvibqwvit-jcvvg-abwziom-512[tcrkb] +xgjougizobk-lruckx-aykx-zkyzotm-826[koxzg] +bkzrrhehdc-rbzudmfdq-gtms-zmzkxrhr-755[rzdhm] +myxcewob-qbkno-cmkfoxqob-rexd-zebmrkcsxq-302[syrvm] +zekvierkzferc-treup-tfrkzex-uvgrikdvek-867[ekrvz] +cvabijtm-lgm-bziqvqvo-330[vbimq] +vhglnfxk-zktwx-ktuubm-vhgmtbgfxgm-553[gkmtx] +xst-wigvix-fyrrc-vieguymwmxmsr-490[yentm] +ktfitzbgz-fbebmtkr-zktwx-xzz-lmhktzx-111[ztkbx] +vdzonmhydc-eknvdq-sqzhmhmf-963[xacdu] +dmpuamofuhq-otaoaxmfq-efadmsq-742[amfoq] +htqtwkzq-gfxpjy-wjxjfwhm-827[fnred] +sbnqbhjoh-xfbqpojafe-cbtlfu-dpoubjonfou-311[kezry] +qyujihctyx-vumeyn-lywycpcha-604[ychua] +ide-htrgti-tvv-uxcpcrxcv-973[ctvir] +bxaxipgn-vgpst-snt-gtprfjxhxixdc-791[xgpti] +nbhofujd-dipdpmbuf-dvtupnfs-tfswjdf-363[dfpub] +apuut-nxvqzibzm-cpio-mznzvmxc-291[zmcin] +uzfqdzmfuazmx-otaoaxmfq-pqhqxabyqzf-768[pzmry] +tpspahyf-nyhkl-ibuuf-klwhyatlua-253[xkrsz] +iqmbazulqp-vqxxknqmz-efadmsq-950[jrnox] +bpvctixr-rpcsn-igpxcxcv-375[cpxir] +ytu-xjhwjy-uqfxynh-lwfxx-yjhmstqtld-489[xyhjt] +qvbmzvibqwvit-ntwemz-kwvbiqvumvb-720[vbimq] +mhi-lxvkxm-ietlmbv-zktll-vnlmhfxk-lxkobvx-553[eusnm] +tpspahyf-nyhkl-jhukf-wbyjohzpun-487[hpyfj] +avw-zljyla-qlssfilhu-zlycpjlz-929[lzajs] +sawlkjevaz-xwogap-skngodkl-290[akglo] +xgjougizobk-laffe-lruckx-gtgreyoy-774[goefk] +aoubshwq-qobrm-qcohwbu-qighcasf-gsfjwqs-948[qsbho] +wifilzof-vumeyn-lyuwkocmcncih-968[avixc] +uiovmbqk-xtiabqk-oziaa-mvoqvmmzqvo-382[moqva] +sawlkjevaz-oywrajcan-dqjp-lqnydwoejc-342[ajwcd] +kfg-jvtivk-jtrmvexvi-ylek-rercpjzj-529[jvekr] +houngfgxjuay-igtje-giwaoyozout-228[gouai] +gcfcnuls-aluxy-mwupyhayl-bohn-ijyluncihm-916[tacdb] +cjpibabsepvt-cvooz-ufdiopmphz-155[pobci] +iuxxuyobk-igtje-sgtgmksktz-878[uwcvx] +thnulapj-ibuuf-ylzlhyjo-305[sfdnr] +xzwrmkbqtm-rmttgjmiv-zmamizkp-434[ifpry] +yhwooebeaz-zua-yqopkian-oanreya-680[aoeyn] +tfcfiwlc-wcfnvi-wzeretzex-243[cefwi] +guahyncw-xsy-uwkocmcncih-864[qsmtb] +ovbunmneqbhf-rtt-qrfvta-689[zymsd] +rgllk-eomhqzsqd-tgzf-ymdwqfuzs-638[qzdfg] +ryexqpqhteki-sqdto-seqjydw-skijecuh-iuhlysu-946[eqshi] +avw-zljyla-qlssfilhu-mpuhujpun-383[luahj] +pynffvsvrq-onfxrg-znantrzrag-143[nrfag] +ikhcxvmbex-xzz-phkdlahi-839[cstrx] +mvhkvbdib-wvnfzo-zibdizzmdib-187[bizdv] +ipvohghykvbz-wshzapj-nyhzz-huhsfzpz-747[hzpsv] +htqtwkzq-hmthtqfyj-ijuqtdrjsy-151[tqhjy] +xzz-ftgtzxfxgm-865[tupfq] +jyfvnlupj-jhukf-klwhyatlua-747[jydsc] +mbiyqoxsm-mkxni-kxkvicsc-510[ikmxc] +bgmxkgtmbhgte-ietlmbv-zktll-labiibgz-163[bglti] +vdzonmhydc-bqxnfdmhb-rbzudmfdq-gtms-lzmzfdldms-469[arkps] +forwcoqhwjs-gqojsbusf-vibh-rsgwub-688[dgqsb] +qcffcgwjs-pogysh-qcbhowbasbh-688[bchsf] +apuut-xviyt-yzqzgjkhzio-317[zituy] +ide-htrgti-qjccn-jhtg-ithixcv-479[itchg] +kgjgrypw-epybc-hcjjwzcyl-cleglccpgle-262[qphrv] +atyzghrk-lruckx-jkvruesktz-384[krtuz] +hqtyeqsjylu-rqiauj-vydqdsydw-998[gqeba] +uwtojhynqj-gfxpjy-qfgtwfytwd-177[fjtwy] +nglmtuex-xzz-ftgtzxfxgm-839[xgtzf] +ncjzrpytn-clmmte-epnsyzwzrj-951[yqksh] +gntmfefwitzx-gzssd-htsyfnsrjsy-333[cngmk] +qcbgiasf-ufors-qvcqczohs-hfowbwbu-168[bcfoq] +wlqqp-gcrjkzt-xirjj-dribvkzex-529[ycrxs] +drxevkzt-irdgrxzex-jtrmvexvi-ylek-glityrjzex-321[erxit] +ovbunmneqbhf-qlr-znexrgvat-559[nbeqr] +bwx-amkzmb-jiasmb-camz-bmabqvo-512[bmazc] +vcibutulxiom-vohhs-womnigyl-mylpcwy-838[fczlm] +fmsledevhsyw-ikk-hitpscqirx-230[owjnv] +ykhknbqh-ywjzu-ykwpejc-odellejc-940[xguqm] +nsyjwsfyntsfq-gzssd-uzwhmfxnsl-203[sfnwy] +mtzslklcozfd-clmmte-nzyeltyxpye-301[tmlui] +dsxxw-cee-kypicrgle-106[ecxdg] +ujqgywfau-aflwjfslagfsd-tskcwl-ghwjslagfk-476[fagls] +nchhg-jcvvg-mvoqvmmzqvo-642[vmcgh] +cjpibabsepvt-tdbwfohfs-ivou-efqmpznfou-831[mvwiq] +votubcmf-njmjubsz-hsbef-dboez-dpbujoh-fohjoffsjoh-129[izchs] +njmjubsz-hsbef-fhh-nbobhfnfou-337[unims] +iwcjapey-lhwopey-cnwoo-hkceopeyo-576[oecpw] +ydjuhdqjyedqb-fbqijys-whqii-efuhqjyedi-322[qdijy] +bknsykmdsfo-lkcuod-mecdywob-cobfsmo-250[obcdk] +sbqiiyvyut-zubboruqd-cqdqwucudj-530[uqbdc] +etaqigpke-dcumgv-vgejpqnqia-960[egqai] +ykjoqian-cnwza-nwxxep-paydjkhkcu-134[pcdmt] +iehepwnu-cnwza-lhwopey-cnwoo-nawymqeoepekj-108[ewnop] +vagreangvbany-rtt-phfgbzre-freivpr-221[raegv] +surmhfwloh-sodvwlf-judvv-xvhu-whvwlqj-595[vhwlu] +qekrixmg-ikk-gywxsqiv-wivzmgi-256[jsykh] +sno-rdbqds-bgnbnkzsd-otqbgzrhmf-495[rypqa] +guahyncw-vohhs-nywbhifias-214[hains] +sno-rdbqds-atmmx-bnmszhmldms-365[posvl] +zovldbkfz-zxkav-zlxqfkd-zlkqxfkjbkq-575[zrqmk] +ykhknbqh-zua-owhao-888[hakob] +xmrrq-vqw-ugflsafewfl-372[isvjx] +wdjcvuvmyjpn-wpiit-vxlpdndodji-395[cvdlm] +wyvqljapsl-ihzrla-zopwwpun-123[lpwaz] +kdijqrbu-tou-husuylydw-816[uvcwx] +fhezusjybu-fbqijys-whqii-husuylydw-764[uyhis] +jyfvnlupj-kfl-mpuhujpun-773[ujpfl] +hafgnoyr-pubpbyngr-nanylfvf-715[nkyzs] +jfifqxov-doxab-oxyyfq-absbilmjbkq-341[qmgrk] +nij-mywlyn-wuhxs-wiuncha-uwkocmcncih-188[cnwhi] +amjmpdsj-afmamjyrc-ylyjwqgq-470[jmayq] +rdggdhxkt-eaphixr-vgphh-jhtg-ithixcv-921[yvuxl] +ucynmlgxcb-qaytclecp-fslr-dglylagle-184[tudeg] +dpmpsgvm-tdbwfohfs-ivou-sfdfjwjoh-363[qhgxy] +bqvvu-ykhknbqh-fahhuxawj-wymqeoepekj-498[hekqa] +qczcftiz-xszzmpsob-sbuwbssfwbu-818[sbzcf] +aietsrmdih-hci-wlmttmrk-360[imthr] +xst-wigvix-ikk-qevoixmrk-256[ikxve] +nzydfxpc-rclop-nzwzcqfw-mfyyj-opalcexpye-405[cpyfz] +frqvxphu-judgh-udeelw-uhdftxlvlwlrq-933[ludhe] +jsehsyafy-jsttal-hmjuzskafy-892[sajyf] +zbytomdsvo-mrymyvkdo-vyqscdsmc-276[mydos] +tcorcikpi-ecpfa-eqcvkpi-fgxgnqrogpv-934[jziot] +ytu-xjhwjy-hfsid-wjxjfwhm-905[jhwfx] +hjgbwuladw-tmffq-suimakalagf-554[afglm] +pyknyegle-zsllw-nspafyqgle-730[leygn] +gifavtkzcv-avccpsvre-uvjzxe-607[zhayg] +bpvctixr-snt-tcvxcttgxcv-973[vrteq] +wyvqljapsl-jovjvshal-zlycpjlz-175[nrwfe] +kwzzwaqdm-lgm-aitma-122[amwzd] +iqmbazulqp-dmnnuf-qzsuzqqduzs-690[qhzsm] +udskkaxawv-xdgowj-xafsfuafy-138[nailf] +ipvohghykvbz-wshzapj-nyhzz-yljlpcpun-929[lwyvn] +forwcoqhwjs-foppwh-hsqvbczcum-636[chowf] +pualyuhapvuhs-msvdly-svnpzapjz-903[pasuv] +xgjougizobk-vrgyzoi-mxgyy-xkykgxin-436[tjykb] +sedikcuh-whqtu-rkddo-cqdqwucudj-348[brlqi] +elrkdcdugrxv-fdqgb-uhfhlylqj-465[dlfgh] +mhi-lxvkxm-lvtoxgzxk-angm-ltexl-917[xlmgk] +bqvvu-fahhuxawj-yqopkian-oanreya-212[cpdwf] +buzahisl-jhukf-thyrlapun-903[hualb] +rgllk-oaxadrgx-nmewqf-pqbxakyqzf-690[aqxfg] +iuruxlar-irgyyolokj-jek-ynovvotm-488[ohpdn] +xmtjbzidx-nxvqzibzm-cpio-yzkgjthzio-811[zixbj] +xmrrq-ugfkmewj-yjsvw-usfvq-ugslafy-ghwjslagfk-866[fgsju] +yhtwhnpun-wshzapj-nyhzz-vwlyhapvuz-851[hznpw] +zgmfyxypbmsq-zyqicr-kypicrgle-340[ycgim] +uwtojhynqj-hfsid-htfynsl-wjfhvznxnynts-489[nhfjs] +fab-eqodqf-dmnnuf-bgdotmeuzs-196[dfbem] +wifilzof-wuhxs-wiuncha-lyuwkocmcncih-578[ciwhu] +gspsvjyp-veffmx-pefsvexsvc-516[svefp] +yknnkoera-xwogap-bejwjyejc-732[ejakn] +nsyjwsfyntsfq-gfxpjy-knsfshnsl-333[sfnyj] +fodvvlilhg-gbh-ghvljq-595[vgprj] +nuatmlmdpage-bxmefuo-sdmee-emxqe-482[emadu] +jvyyvzpcl-msvdly-vwlyhapvuz-903[vylpz] +fruurvlyh-iorzhu-vdohv-517[hruvo] +houngfgxjuay-hgyqkz-ykxboiky-618[ygkho] +gsrwyqiv-kvehi-gerhc-gsexmrk-xiglrspskc-750[grsei] +pualyuhapvuhs-qlssfilhu-zhslz-799[hlsua] +nwlddtqtpo-nlyoj-nzletyr-opdtry-119[tdlno] +fydelmwp-prr-nfdezxpc-dpcgtnp-535[pdcef] +qmpmxevc-kvehi-jpsaiv-hizipstqirx-672[ipveh] +nzwzcqfw-nlyoj-nzletyr-opawzjxpye-587[znwye] +bpvctixr-rwdrdapit-hpath-973[prtad] +gzefmnxq-omzpk-oazfmuzyqzf-430[zfmoq] +wpuvcdng-hnqygt-vgejpqnqia-102[tmdxr] +aoubshwq-foppwh-igsf-hsghwbu-610[tsrzk] +wihmogyl-aluxy-mwupyhayl-bohn-mbcjjcha-422[vuypz] +cqwdujys-uww-sedjqydcudj-478[djuwc] +votubcmf-tdbwfohfs-ivou-sfbdrvjtjujpo-883[fobjt] +gpbepvxcv-ytaanqtpc-apqdgpidgn-427[pagcd] +bnknqetk-eknvdq-qdrdzqbg-885[qdknb] +uwtojhynqj-wfruflnsl-hfsid-wjxjfwhm-541[fjwhl] +zhdsrqlchg-fodvvlilhg-gbh-frqwdlqphqw-361[hlqdg] +cvabijtm-jcvvg-lmxizbumvb-174[vbmci] +fruurvlyh-fdqgb-ghsorbphqw-205[hrbfg] +pualyuhapvuhs-msvdly-thyrlapun-279[uahlp] +iehepwnu-cnwza-ydkykhwpa-ajcejaanejc-212[oqwrn] +bqvvu-xwogap-yqopkian-oanreya-680[ckqtm] +ktwbhtvmbox-vahvhetmx-mxvaghehzr-917[hvmtx] +uzfqdzmfuazmx-omzpk-oamfuzs-fqotzaxask-274[mnilo] +gntmfefwitzx-idj-rfsfljrjsy-931[fjirs] +tcrjjzwzvu-tfiifjzmv-tyftfcrkv-vexzevvizex-399[vzfte] +oaddaeuhq-vqxxknqmz-qzsuzqqduzs-404[qzdua] +sorozgxe-mxgjk-yigbktmkx-natz-zxgototm-514[hejid] +eadalsjq-yjsvw-ujqgywfau-tskcwl-kwjnauwk-554[wajks] +lxuxaodu-rwcnawjcrxwju-ljwmh-fxatbqxy-693[xwaju] +plolwdub-judgh-fdqgb-frdwlqj-vdohv-153[dlbfg] +kdijqrbu-jef-iushuj-sqdto-seqjydw-kiuh-juijydw-218[iqtvx] +tfejldvi-xiruv-tfcfiwlc-srjbvk-jyzggzex-243[fijvc] +jchipqat-ltpedcxots-uadltg-tcvxcttgxcv-609[ezynj] +ryexqpqhteki-sxesebqju-udwyduuhydw-816[eudqy] +iuxxuyobk-xgjougizobk-hatte-sgtgmksktz-436[pwdlc] +gcfcnuls-aluxy-wuhxs-wiuncha-guleyncha-136[ucahl] +ugfkmewj-yjsvw-usfvq-ugslafy-mkwj-lwklafy-476[ohqre] +laffe-vxupkizork-vrgyzoi-mxgyy-uvkxgzouty-488[awgqz] +eqttqukxg-hnqygt-rwtejcukpi-570[tqegk] +yuxufmdk-sdmpq-ngzzk-ruzmzouzs-534[zumdk] +ktwbhtvmbox-ietlmbv-zktll-kxtvjnblbmbhg-553[btlkm] +qxdwpopgsdjh-eaphixr-vgphh-prfjxhxixdc-999[hpxdg] +bnmrtldq-fqzcd-oqnidbshkd-qzaahs-cdoknxldms-703[lxvwe] +gokzyxsjon-nio-gybucryz-172[oygnz] +cqwdujys-uww-cqhaujydw-660[wucdj] +mbggf-pualyuhapvuhs-msvdly-aljouvsvnf-123[ngwhl] +crwwv-oxaflxzqfsb-zelzlixqb-ixyloxqlov-913[lxoqz] +qlm-pbzobq-ciltbo-abmxoqjbkq-861[bqolm] +oqnidbshkd-dff-rghoohmf-313[dfhob] +lzfmdshb-eknvdq-cdudknoldms-937[dklmn] +wsvsdkbi-qbkno-nio-ecob-docdsxq-614[jsetb] +zlilocri-zxkav-zlxqfkd-qoxfkfkd-835[kflxz] +wlqqp-upv-vexzevvizex-165[vepqx] +vcibutulxiom-vumeyn-womnigyl-mylpcwy-838[myilu] +pelbtravp-cynfgvp-tenff-svanapvat-663[kzmfp] +xgvnndadzy-wpiit-jkzmvodjin-421[dinjv] +foadouwbu-pogysh-fsqswjwbu-480[osuwb] +yrwxefpi-hci-wxsveki-308[iewxc] +tmrszakd-azrjds-otqbgzrhmf-105[rzadm] +sbnqbhjoh-dboez-dpbujoh-usbjojoh-155[bohjd] +eqnqthwn-gii-fgrctvogpv-908[ginqt] +uiovmbqk-jcvvg-amzdqkma-356[mvakq] +sbejpbdujwf-gmpxfs-pqfsbujpot-857[pbfjs] +ide-htrgti-ytaanqtpc-stepgibtci-531[mnyed] +aietsrmdih-glsgspexi-gywxsqiv-wivzmgi-230[igsem] +htqtwkzq-xhfajsljw-mzsy-zxjw-yjxynsl-931[cmkfr] +ckgvutofkj-xgjougizobk-yigbktmkx-natz-lotgtiotm-436[tgkoi] +nwlddtqtpo-upwwjmply-fdpc-epdetyr-509[pdtwe] +irdgrxzex-sleep-jyzggzex-373[tvnma] +crwwv-zxkav-qoxfkfkd-939[lyjmh] +ejpanjwpekjwh-nwzekwypera-oywrajcan-dqjp-nawymqeoepekj-368[zmuyt] +lzfmdshb-rbzudmfdq-gtms-knfhrshbr-495[bdfhm] +nchhg-rmttgjmiv-uizsmbqvo-252[mghit] +amjmpdsj-aylbw-rpyglgle-626[lagjm] +dfcxsqhwzs-pogysh-qighcasf-gsfjwqs-220[sfghq] +xjgjmapg-nxvqzibzm-cpio-nojmvbz-707[jmzbg] +zntargvp-enoovg-qrirybczrag-663[scjtg] +bkzrrhehdc-qzaahs-qdzbpthrhshnm-391[zjbto] +hafgnoyr-wryylorna-erprvivat-429[rayno] +apwmeclga-afmamjyrc-rpyglgle-262[aglmc] +jsvagsulanw-jsttal-hmjuzskafy-606[asjlt] +bnknqetk-lhkhszqx-fqzcd-cxd-zmzkxrhr-651[kzhqx] +ykhknbqh-nwxxep-nayaerejc-966[enahk] +vrurcjah-pajmn-kdwwh-cajrwrwp-667[rwajc] +vhehkyne-utldxm-vhgmtbgfxgm-891[ghmet] +zotts-dyffsvyuh-xymcah-812[yfhst] +vhglnfxk-zktwx-vtgwr-vnlmhfxk-lxkobvx-319[gvnom] +ajvyjprwp-mhn-nwprwnnarwp-563[npwra] +guahyncw-chnylhuncihuf-jfumncw-alumm-guleyncha-110[zjirh] +hwdtljsnh-jll-xfqjx-801[jlhxd] +xjgjmapg-mvwwdo-xjiovdihzio-525[ijodg] +pybgmyargtc-zgmfyxypbmsq-zsllw-asqrmkcp-qcptgac-262[cgmpy] +aflwjfslagfsd-hdsklau-yjskk-esfsywewfl-528[sflak] +lugjuacha-dyffsvyuh-xypyfijgyhn-708[yfhua] +lxaaxbren-mhn-cnlqwxuxph-823[nzsvm] +sehheiylu-tou-cqdqwucudj-738[xciqn] +slqryzjc-djmucp-qrmpyec-808[sznhq] +ykjoqian-cnwza-bhksan-opknwca-264[ankco] +pualyuhapvuhs-lnn-bzly-alzapun-721[auzfj] +tfiifjzmv-wcfnvi-jkfirxv-997[fivjc] +lsyrkjkbnyec-mkxni-mykdsxq-vyqscdsmc-562[ksycm] +fnjyxwrinm-lujbbrornm-ajkkrc-nwprwnnarwp-927[zmyco] +pyknyegle-amlqskcp-epybc-hcjjwzcyl-qcptgacq-860[cpyel] +rzvkjiduzy-ezggtwzvi-kpmxcvndib-811[zivdg] +wyvqljapsl-yhiipa-bzly-alzapun-773[alpyi] +joufsobujpobm-dipdpmbuf-bdrvjtjujpo-415[gvkud] +zloolpfsb-zxkav-zlxqfkd-lmboxqflkp-393[lfkox] +zilqwikbqdm-jcvvg-kwvbiqvumvb-174[vbiqk] +kzeed-wfggny-xmnuunsl-853[negud] +ftzgxmbv-xzz-phkdlahi-657[grbhi] +bnqqnrhud-bzmcx-sqzhmhmf-131[hmqbn] +zntargvp-pnaql-pbngvat-nanylfvf-169[napvf] +jxdkbqfz-pzxsbkdbo-erkq-absbilmjbkq-315[uzmcf] +jshzzpmplk-buzahisl-kfl-klzpnu-695[lzkph] +pualyuhapvuhs-msvdly-jbzavtly-zlycpjl-825[lyapu] +lujbbrornm-ouxfna-xynajcrxwb-667[bnrxa] +dmpuamofuhq-nmewqf-pqhqxabyqzf-482[lndmj] +cvabijtm-moo-zmikycqaqbqwv-148[mqabc] +wyvqljapsl-msvdly-zlycpjlz-435[lyjps] +fmsledevhsyw-ikk-gywxsqiv-wivzmgi-204[isvwe] +ide-htrgti-snt-sthxvc-297[tyvnc] +guahyncw-luvvcn-qilembij-292[tcrsd] +udskkaxawv-wyy-kwjnauwk-710[kwauy] +aczupnetwp-clmmte-dezclrp-379[ynpmz] +ikhcxvmbex-ietlmbv-zktll-vnlmhfxk-lxkobvx-449[lxkvb] +rzvkjiduzy-xcjxjgvoz-rjmfncjk-707[tmnki] +enzcntvat-cynfgvp-tenff-ynobengbel-923[neftb] +vkrhzxgbv-bgmxkgtmbhgte-lvtoxgzxk-angm-kxtvjnblbmbhg-111[iwvbg] +esyfwlau-tskcwl-jwsuimakalagf-398[ywmzb] +lhkhszqx-fqzcd-bzmcx-nodqzshnmr-287[zhqcd] +nzwzcqfw-ojp-dstaatyr-977[dsznk] +qfkkj-xlrypetn-nlyoj-xlcvpetyr-691[lczde] +wifilzof-luvvcn-nywbhifias-552[sxghy] +nchhg-kivlg-zmamizkp-928[ghikm] +tipfxvezt-tcrjjzwzvu-upv-kirzezex-295[zetvi] +gsvvswmzi-tpewxmg-kveww-gsrxemrqirx-698[wegmr] +pynffvsvrq-sybjre-ernpdhvfvgvba-663[epsqt] +sedikcuh-whqtu-vbemuh-udwyduuhydw-894[udhwe] +tmrszakd-bzmcx-rsnqzfd-183[zdmrs] +zilqwikbqdm-jcvvg-wxmzibqwva-798[iqvwb] +lejkrscv-jtrmvexvi-ylek-nfibjyfg-815[ejvfi] +zsxyfgqj-jll-qtlnxynhx-151[lxjnq] +gbc-frperg-onfxrg-qrirybczrag-923[rgbcf] +xjgjmapg-kgvnodx-bmvnn-nvgzn-343[ngvjm] +dmybmsuzs-ngzzk-mocgueufuaz-534[uzmgs] +dmpuamofuhq-omzpk-oamfuzs-pqbxakyqzf-482[mafop] +fbebmtkr-zktwx-unggr-ehzblmbvl-787[begkl] +zntargvp-enoovg-ybtvfgvpf-481[vgfno] +fubrjhqlf-gbh-vhuylfhv-933[hfblu] +fruurvlyh-fdqgb-frdwlqj-whfkqrorjb-569[tmdlw] +ixccb-udeelw-ghvljq-335[nibrq] +tcorcikpi-dwppa-fgukip-570[qnzgc] +ibghopzs-pibbm-rsdzcmasbh-428[bshim] +apuut-wpiit-nzmqdxzn-889[inptu] +qzoggwtwsr-pibbm-igsf-hsghwbu-246[gbswh] +atyzghrk-yigbktmkx-natz-uvkxgzouty-488[pxeoy] +mbiyqoxsm-mkxni-bokmaescsdsyx-796[erynw] +qxdwpopgsdjh-uadltg-itrwcdadvn-401[mzukc] +tinnm-rms-kcfygvcd-688[cmndf] +crwwv-mixpqfz-doxpp-xkxivpfp-107[tpawu] +qxdwpopgsdjh-qphzti-itrwcdadvn-999[lenub] +jqwpihizlwca-lgm-abwziom-538[iwalm] +votubcmf-dboez-dpbujoh-gjobodjoh-909[szlxy] +nwzekwypera-oywrajcan-dqjp-iwjwcaiajp-446[awjpc] +lxuxaodu-vrurcjah-pajmn-ljwmh-cnlqwxuxph-329[uxahj] +gvaaz-ezf-efwfmpqnfou-779[scdpt] +jsvagsulanw-hdsklau-yjskk-vwhdgqewfl-190[saklw] +yrwxefpi-fewoix-irkmriivmrk-828[irefk] +jrncbavmrq-rtt-fgbentr-819[rtbna] +tpspahyf-nyhkl-msvdly-klwsvftlua-409[lsyaf] +veqtekmrk-tpewxmg-kveww-qerekiqirx-100[szdiy] +ykhknbqh-ydkykhwpa-hkceopeyo-108[khyeo] +gifavtkzcv-treup-tfrkzex-dribvkzex-503[ekrtv] +hafgnoyr-pubpbyngr-bcrengvbaf-351[bgnra] +ide-htrgti-gpqqxi-gtprfjxhxixdc-999[ixgtd] +yhtwhnpun-ipvohghykvbz-wshzapj-nyhzz-zavyhnl-617[hznyp] +enqvbnpgvir-pynffvsvrq-rtt-erprvivat-559[vrnpt] +jxdkbqfz-yrkkv-pxibp-159[kbpxd] +etyyx-rbzudmfdq-gtms-rdquhbdr-833[drbmq] +owshgfarwv-udskkaxawv-hdsklau-yjskk-ogjckzgh-398[kasgh] +xst-wigvix-gerhc-irkmriivmrk-828[ilntc] +ugfkmewj-yjsvw-wyy-klgjsyw-684[wyjgk] +zloolpfsb-mixpqfz-doxpp-pbosfzbp-211[topig] +fruurvlyh-vfdyhqjhu-kxqw-orjlvwlfv-569[vfhlr] +xst-wigvix-fyrrc-vigimzmrk-516[irgmv] +rnqnyfwd-lwfij-wfggny-wjxjfwhm-281[wfjng] +rdchjbtg-vgpst-ytaanqtpc-sthxvc-557[tcagh] +fubrjhqlf-fdqgb-frdwlqj-dftxlvlwlrq-465[flqdr] +qlm-pbzobq-pzxsbkdbo-erkq-xznrfpfqflk-679[bqfkp] +ltpedcxots-rpcsn-bpcpvtbtci-921[dtejs] +froruixo-edvnhw-ghsorbphqw-231[horwb] +bjfutsneji-hmthtqfyj-fsfqdxnx-333[fjthn] +yhtwhnpun-lnn-zavyhnl-669[wpsgy] +dmpuamofuhq-ngzzk-xmnadmfadk-742[madfk] +ejpanjwpekjwh-ywjzu-oanreyao-498[yzjwm] +eza-dpncpe-qwzhpc-afcnsldtyr-353[ivxnu] +qekrixmg-nippcfier-gywxsqiv-wivzmgi-464[yxkwm] +avw-zljyla-ibuuf-ylzlhyjo-383[lyaju] +lqwhuqdwlrqdo-mhoobehdq-rshudwlrqv-621[qdhlo] +qvbmzvibqwvit-jcvvg-apqxxqvo-200[vqbix] +ugjjgkanw-esyfwlau-jsttal-ugflsafewfl-164[fgcep] +shoewudys-isqludwuh-xkdj-ijehqwu-504[stjyd] +luxciuwncpy-vohhs-yhachyylcha-214[hcyal] +gifavtkzcv-sleep-ivjvrity-685[vieta] +rzvkjiduzy-xviyt-yzqzgjkhzio-161[ziyjk] +iehepwnu-cnwza-ykjoqian-cnwza-ywjzu-ykwpejc-iwjwcaiajp-316[wajci] +sorozgxe-mxgjk-jek-vaxingyotm-956[goxej] +dmpuamofuhq-dmnnuf-dqmocgueufuaz-560[umdfa] +hjgbwuladw-kusnwfywj-zmfl-ugflsafewfl-450[aezbn] +esyfwlau-usfvq-ugslafy-ghwjslagfk-294[fsagl] +shmml-sybjre-erfrnepu-195[ngkjp] +jlidywncfy-ohmnuvfy-wuhxs-wiuncha-ijyluncihm-240[xtjsm] +ixeumktoi-lruckx-aykx-zkyzotm-436[kximo] +nzydfxpc-rclop-upwwjmply-xlylrpxpye-535[plyxc] +fodvvlilhg-sodvwlf-judvv-pdunhwlqj-725[krngz] +xjmmjndqz-ezggtwzvi-adivixdib-733[idzgj] +pbybeshy-pnaql-pbngvat-znantrzrag-533[anbpg] +fnjyxwrinm-ljwmh-lxjcrwp-bqryyrwp-329[rwjyl] +lhkhszqx-fqzcd-okzrshb-fqzrr-cdoknxldms-391[zdhkq] +pynffvsvrq-ohaal-znantrzrag-637[anrfv] +hafgnoyr-sybjre-genvavat-767[ngacu] +lhkhszqx-fqzcd-bgnbnkzsd-lzmzfdldms-443[ynael] +lugjuacha-wbiwifuny-mufym-786[uafim] +vkrhzxgbv-xzz-ftgtzxfxgm-995[xzgft] +uzfqdzmfuazmx-rxaiqd-emxqe-170[mqxza] +ajvyjprwp-snuuhknjw-anlnrerwp-771[njprw] +zuv-ykixkz-igtje-iugzotm-zxgototm-930[lifhb] +mfklstdw-wyy-ksdwk-294[kwdsy] +kyelcrga-slqryzjc-hcjjwzcyl-qrmpyec-990[kypqm] +vkppo-sxesebqju-tulubefcudj-400[uebjp] +ynukcajey-xqjju-lqnydwoejc-394[jycen] +qzlozfhmf-qzchnzbshud-qzaahs-qdzbpthrhshnm-287[hzqsa] +kmjezxodgz-mvwwdo-ncdkkdib-109[dkmow] +oazegyqd-sdmpq-ngzzk-bgdotmeuzs-482[zdgem] +qfkkj-mldvpe-cpdplcns-561[pcdkl] +hvbizodx-ezggtwzvi-xjiovdihzio-577[voqzy] +iuxxuyobk-inuiurgzk-xkikobotm-722[ikuox] +jyddc-gsvvswmzi-jpsaiv-jmrergmrk-958[cpedy] +vhkkhlbox-unggr-hixktmbhgl-449[hgkbl] +clotzlnetgp-nsznzwlep-dpcgtnpd-145[tehzy] +plolwdub-judgh-hjj-dqdobvlv-543[zkryh] +ajmrxjlcren-ouxfna-ydalqjbrwp-355[ajrln] +uqtqbizg-ozilm-lgm-amzdqkma-304[mqzag] +lnkfaypeha-zua-lqnydwoejc-914[aelny] +ibghopzs-pwcvonofrcig-qobrm-aobousasbh-844[obsac] +ocipgvke-eqpuwogt-itcfg-tcddkv-gpikpggtkpi-804[salbg] +ajmrxjlcren-lqxlxujcn-uxprbcrlb-823[lrxcj] +rgndvtcxr-ytaanqtpc-sthxvc-843[tcanr] +hqcfqwydw-sxesebqju-qdqboiyi-894[qbdei] +tbxmlkfwba-gbiivybxk-qbzeklildv-757[biklv] +vetllbybxw-utldxm-vhgmtbgfxgm-735[bglmt] +mfklstdw-hdsklau-yjskk-vwhsjlewfl-528[xyuts] +pxtihgbsxw-vtgwr-nlxk-mxlmbgz-657[xgblm] +bnmrtldq-fqzcd-dff-lzqjdshmf-677[szdpt] +xekdwvwnzkqo-sawlkjevaz-fahhuxawj-nayaerejc-654[zdeyh] +gzefmnxq-bxmefuo-sdmee-xmnadmfadk-170[medfx] +gpsxdprixkt-eaphixr-vgphh-rjhidbtg-htgkxrt-115[hgprt] +eza-dpncpe-hplazytkpo-awldetn-rcldd-xlcvpetyr-535[tnpmg] +bnmrtldq-fqzcd-eknvdq-sdbgmnknfx-781[dnqbf] +nzcczdtgp-dnlgpyrpc-sfye-opgpwzaxpye-899[pcgyz] +nwzekwypera-ydkykhwpa-odellejc-992[pwqrh] +oknkvcta-itcfg-gii-wugt-vguvkpi-154[giktv] +tcrjjzwzvu-upv-kvtyefcfxp-373[vcfjp] +xst-wigvix-ikk-stivexmsrw-230[isxkt] +fkqbokxqflkxi-zelzlixqb-qoxfkfkd-705[mntlq] +qlm-pbzobq-yxphbq-zrpqljbo-pbosfzb-237[bpqoz] +drxevkzt-avccpsvre-wzeretzex-269[ervzc] +ksodcbwnsr-pogysh-oqeiwgwhwcb-480[mxdsl] +tyepcyletzylw-qwzhpc-xlylrpxpye-613[tvcgy] +rnqnyfwd-lwfij-hmthtqfyj-qtlnxynhx-437[ukdrt] +oxjmxdfkd-jfifqxov-doxab-yxphbq-ixyloxqlov-393[xodfq] +tcorcikpi-ejqeqncvg-fgrnqaogpv-804[cgqei] +hqtyeqsjylu-zubboruqd-qsgkyiyjyed-712[yqubd] +hvbizodx-ezggtwzvi-gjbdnodxn-967[dgzbi] +zntargvp-enoovg-fgbentr-923[gneor] +mvydjvxodqz-wvnfzo-hvmfzodib-447[zfpes] +emixwvqhml-zijjqb-lmdmtwxumvb-148[mbijl] +frqvxphu-judgh-gbh-whfkqrorjb-179[jwmgn] +kyelcrga-njyqrga-epyqq-dglylagle-782[glyae] +npmhcargjc-pyzzgr-bctcjmnkclr-522[crgjm] +pxtihgbsxw-xzz-tvjnblbmbhg-943[bxght] +oknkvcta-itcfg-hnqygt-qrgtcvkqpu-206[tcgkq] +amlqskcp-epybc-zyqicr-sqcp-rcqrgle-522[bnemi] +enqvbnpgvir-pnaql-fuvccvat-299[vnacp] +xlrypetn-mldvpe-cpnptgtyr-509[nugrq] +mbggf-qlssfilhu-klclsvwtlua-383[lsfgu] +wlsiayhcw-wuhxs-wiuncha-mniluay-656[wahiu] +gvaaz-cbtlfu-efqmpznfou-415[byzhx] +rzvkjiduzy-nxvqzibzm-cpio-hvivbzhzio-343[zivbh] +bqxnfdmhb-dff-otqbgzrhmf-781[fbdhm] +wihmogyl-aluxy-wuhxs-wiuncha-lyuwkocmcncih-838[chuwi] +enzcntvat-onfxrg-hfre-grfgvat-689[nkvyi] +xgjougizobk-igtje-iugzotm-ygrky-540[giojk] +mbggf-kfl-aljouvsvnf-773[fglva] +qzoggwtwsr-xszzmpsob-sbuwbssfwbu-662[sbwzg] +wsvsdkbi-qbkno-mkxni-mykdsxq-nofovyzwoxd-744[kodns] +tpspahyf-nyhkl-lnn-klzpnu-721[nlphk] +pejji-nio-bomosfsxq-380[oijsb] +amlqskcp-epybc-cee-nspafyqgle-132[dsayt] +luxciuwncpy-xsy-lyuwkocmcncih-240[cuyil] +irdgrxzex-gcrjkzt-xirjj-vexzevvizex-165[xerzi] +lxaaxbren-snuuhknjw-ujkxajcxah-381[axjnu] +ktfitzbgz-ynssr-xzz-wxiehrfxgm-839[sjagq] +hafgnoyr-enzcntvat-pnaql-pbngvat-genvavat-975[antvg] +dfcxsqhwzs-qobrm-fsqswjwbu-896[sqwbf] +zsxyfgqj-xhfajsljw-mzsy-xytwflj-619[jfsxy] +yhwooebeaz-ywjzu-ykwpejc-hkceopeyo-706[eoywc] +mvydjvxodqz-wpiit-kpmxcvndib-863[yrjnz] +otzkxtgzoutgr-igtje-iugzotm-iutzgotsktz-332[tgzoi] +pdjqhwlf-sodvwlf-judvv-vdohv-855[vdfhj] +gpewwmjmih-fyrrc-gywxsqiv-wivzmgi-724[iwgmr] +oqnidbshkd-idkkxadzm-rsnqzfd-391[lpscd] +rgndvtcxr-hrpktcvtg-wjci-uxcpcrxcv-765[crtvx] +esyfwlau-tmffq-xafsfuafy-970[fasuy] +gvaaz-dipdpmbuf-efqbsunfou-545[zmynh] +zsxyfgqj-wfggny-uzwhmfxnsl-463[cvqjn] +oazegyqd-sdmpq-ngzzk-emxqe-430[flhis] +jvuzbtly-nyhkl-zjhclunly-obua-zlycpjlz-643[ueimk] +surmhfwloh-vfdyhqjhu-kxqw-ghsorbphqw-205[hqwfo] +pualyuhapvuhs-zjhclunly-obua-thuhnltlua-825[ficqs] +wbhsfbohwcboz-rms-oqeiwgwhwcb-194[wbhoc] +gpsxdprixkt-ytaanqtpc-bpcpvtbtci-635[qkzhc] +rnqnyfwd-lwfij-xhfajsljw-mzsy-qfgtwfytwd-931[fwjyd] +ubhatstkwhnl-ktuubm-vnlmhfxk-lxkobvx-787[gtsqv] +lqwhuqdwlrqdo-udeelw-dftxlvlwlrq-413[ldqwe] +kloqemlib-lygbzq-pqloxdb-991[lbqod] +veqtekmrk-tpewxmg-kveww-hiwmkr-282[ekwmr] +rflsjynh-ytu-xjhwjy-jll-knsfshnsl-333[jlshn] +bknsykmdsfo-pvygob-domrxyvyqi-432[yobdk] +mybbycsfo-bkllsd-kxkvicsc-822[yzxcq] +zixppfcfba-yxphbq-absbilmjbkq-991[gbhts] +udskkaxawv-uzgugdslw-klgjsyw-684[gksuw] +clxalrtyr-mfyyj-qtylyntyr-665[ylrta] +uiovmbqk-jiasmb-lmaqov-694[mabio] +xmtjbzidx-mvwwdo-zibdizzmdib-161[dizbm] +wyvqljapsl-jovjvshal-bzly-alzapun-643[lajvp] +zlilocri-zxkav-mrozexpfkd-445[rifng] +pinovwgz-zbb-hvmfzodib-811[bziov] +rtqlgevkng-dwppa-vgejpqnqia-284[gpqae] +vrurcjah-pajmn-ljwmh-jlzdrbrcrxw-667[lmdrk] +jlidywncfy-dyffsvyuh-ijyluncihm-838[yficd] +cebwrpgvyr-sybjre-qrirybczrag-741[tsrqd] +pbafhzre-tenqr-onfxrg-grpuabybtl-949[rbaef] +lahxpnwrl-ljwmh-lxjcrwp-nwprwnnarwp-433[seonp] +iuxxuyobk-igtje-iugzotm-iutzgotsktz-644[tiugo] +qfkkj-prr-fdpc-epdetyr-951[prdef] +nchhg-akidmvomz-pcvb-nqvivkqvo-954[osgtz] +htwwtxnaj-gzssd-ijufwyrjsy-385[jswty] +myxcewob-qbkno-mrymyvkdo-bokmaescsdsyx-328[sezot] +rzvkjiduzy-mvwwdo-ncdkkdib-499[mfyze] +emixwvqhml-lgm-uizsmbqvo-798[milqv] +xmtjbzidx-wvnfzo-vivgtndn-941[nvdit] +bknsykmdsfo-zvkcdsm-qbkcc-cobfsmoc-198[cksbm] +gsrwyqiv-kvehi-fyrrc-jmrergmrk-906[regik] +bqvvu-oywrajcan-dqjp-nawymqeoepekj-524[aejqn] +upq-tfdsfu-sbccju-bobmztjt-883[btucf] +surmhfwloh-fruurvlyh-mhoobehdq-orjlvwlfv-933[zymnj] +wkqxodsm-tovvilokx-gybucryz-588[okvxy] +nchhg-ntwemz-twoqabqka-902[ahnqt] +iqmbazulqp-rgllk-rxaiqd-fqotzaxask-950[dtanc] +ejpanjwpekjwh-nwxxep-bejwjyejc-732[jewpn] +ajmrxjlcren-fnjyxwrinm-lqxlxujcn-vjwjpnvnwc-329[yhgwz] +qcbgiasf-ufors-qvcqczohs-aofyshwbu-532[scfoq] +jsehsyafy-vqw-ugflsafewfl-970[mfzcn] +fab-eqodqf-qss-geqd-fqefuzs-560[qfesd] +jef-iushuj-uww-sedjqydcudj-322[qyadz] +kfg-jvtivk-jtrmvexvi-ylek-ivtvzmzex-347[wmlfu] +pxtihgbsxw-ietlmbv-zktll-wxiehrfxgm-371[xiltb] +wfintfhynaj-hmthtqfyj-jslnsjjwnsl-463[jnfhs] +forwcoqhwjs-foppwh-kcfygvcd-480[cfowh] +kzgwomvqk-rmttgjmiv-camz-bmabqvo-616[mvabg] +pybgmyargtc-aylbw-amyrgle-nspafyqgle-392[yaglb] +jyfvnlupj-ihzrla-lunpullypun-149[lytps] +dpmpsgvm-cbtlfu-xpsltipq-467[plmst] +oxaflxzqfsb-avb-zrpqljbo-pbosfzb-965[bfoza] +amlqskcp-epybc-afmamjyrc-bctcjmnkclr-392[cmabj] +encuukhkgf-tcddkv-yqtmujqr-362[kucdq] +lqwhuqdwlrqdo-edvnhw-hqjlqhhulqj-595[sywmh] +njmjubsz-hsbef-qspkfdujmf-cbtlfu-vtfs-uftujoh-857[fujsb] +dsxxw-djmucp-umpiqfmn-340[mdpux] +aflwjfslagfsd-hdsklau-yjskk-dstgjslgjq-736[sjlad] +ynukcajey-ywjzu-iwjwcaiajp-758[sthmn] +froruixo-lqwhuqdwlrqdo-fdqgb-uhdftxlvlwlrq-621[gtcry] +chnylhuncihuf-jfumncw-alumm-mylpcwym-526[tyodr] +ujoon-qphzti-uxcpcrxcv-817[copux] +bkwzkqsxq-cmkfoxqob-rexd-ckvoc-666[kcoqx] +pelbtravp-enqvbnpgvir-qlr-qrfvta-403[wqynx] +yhtwhnpun-ibuuf-thuhnltlua-643[trfed] +willimcpy-yaa-wihnuchgyhn-344[hiyac] +thnulapj-jovjvshal-mpuhujpun-799[juhpa] +nzcczdtgp-mldvpe-lnbftdtetzy-821[qvnmi] +qzlozfhmf-idkkxadzm-btrsnldq-rdquhbd-209[dqzbf] +ajvyjprwp-ouxfna-vjwjpnvnwc-407[jnpvw] +hcd-gsqfsh-dzoghwq-ufogg-zcuwghwqg-688[nwgox] +jrncbavmrq-qlr-genvavat-169[arvnq] +crwwv-yrkkv-jxkxdbjbkq-653[ylpzs] +pejji-tovvilokx-vyqscdsmc-146[vcijo] +ikhcxvmbex-lvtoxgzxk-angm-inkvatlbgz-189[xgkva] +jyddc-wgezirkiv-lyrx-xiglrspskc-620[ircdg] +ajyqqgdgcb-aylbw-amyrgle-rpyglgle-210[glyab] +mhi-lxvkxm-yehpxk-kxvxbobgz-319[lcest] +rkpqxyib-gbiivybxk-lmboxqflkp-211[vustn] +jchipqat-rdadguja-hrpktcvtg-wjci-tcvxcttgxcv-999[ctagj] +ovbunmneqbhf-fpniratre-uhag-grpuabybtl-949[banru] +nchhg-xtiabqk-oziaa-abwziom-174[aibho] +dwbcjkun-ljwmh-ydalqjbrwp-303[jwbdl] +lxuxaodu-krxqjijamxdb-bljenwpna-qdwc-bnaerlnb-563[ycjlt] +yhkpvhjapcl-wshzapj-nyhzz-shivyhavyf-461[hyapv] +udglrdfwlyh-mhoobehdq-wudlqlqj-959[dlhqo] +myxcewob-qbkno-lsyrkjkbnyec-lexxi-cdybkqo-588[nfdem] +fnjyxwrinm-ljwmh-lxwcjrwvnwc-459[wjncl] +udpsdjlqj-udeelw-ghvljq-491[djleq] +zloolpfsb-yrkkv-mrozexpfkd-783[koflp] +drxevkzt-jtrmvexvi-ylek-ivrthlzjzkzfe-997[evzkr] +ykjoqian-cnwza-ywjzu-ykwpejc-opknwca-264[wacjk] +xekdwvwnzkqo-zua-zalwnpiajp-992[awzkn] +fydelmwp-aczupnetwp-prr-cplnbftdtetzy-847[ptecd] +lxwbdvna-pajmn-ouxfna-anjlzdrbrcrxw-563[anrxb] +xfbqpojafe-gmpxfs-tbmft-545[rgdzm] +kzeed-ojqqdgjfs-ijuqtdrjsy-411[jdqes] +ktiaaqnqml-ntwemz-uizsmbqvo-642[azvew] +udpsdjlqj-gbh-whfkqrorjb-725[rnqmt] +lahxpnwrl-ouxfna-ydalqjbrwp-745[alnpr] +dsxxw-bwc-mncpyrgmlq-548[cmwxb] +joufsobujpobm-gvaaz-qmbtujd-hsbtt-fohjoffsjoh-727[ojbfh] +laffe-jek-ynovvotm-670[efova] +nzcczdtgp-ojp-xlcvpetyr-353[nvmak] +kgjgrypw-epybc-djmucp-qyjcq-496[sqhmg] +ykjoqian-cnwza-ywjzu-klanwpekjo-680[ajknw] +nbhofujd-dipdpmbuf-efqbsunfou-415[fubdn] +oaddaeuhq-ngzzk-fqotzaxask-144[hbxcm] +lujbbrornm-vjpwncrl-snuuhknjw-ldbcxvna-bnaerln-459[nblrj] +xgvnndadzy-wvnfzo-yzkvmohzio-135[znovd] +jchipqat-tvv-jhtg-ithixcv-271[ymstr] +xtwtelcj-rclop-nlyoj-dstaatyr-431[ntags] +iutyaskx-mxgjk-jek-xkykgxin-618[kxgij] +pxtihgbsxw-ktwbhtvmbox-cxeeruxtg-tgterlbl-943[txbeg] +xfbqpojafe-dboez-dpbujoh-mbcpsbupsz-441[bpode] +qfkkj-mfyyj-opalcexpye-613[yefjk] +ejpanjwpekjwh-lhwopey-cnwoo-nawymqeoepekj-836[ewjop] +qjopwxha-xqjju-odellejc-732[jeloq] +bnknqetk-atmmx-lzmzfdldms-261[mdkln] +xgsvgmotm-pkrrehkgt-sgtgmksktz-332[gktms] +ryexqpqhteki-vbemuh-huqsgkyiyjyed-244[tjsqx] +xjinphzm-bmvyz-ytz-yzkvmohzio-239[oznyv] +eqttqukxg-rncuvke-itcuu-cpcnauku-180[jztvf] +xgjougizobk-xghhoz-ygrky-696[gohkx] +mtzslklcozfd-nsznzwlep-opgpwzaxpye-769[zplen] +kgjgrypw-epybc-pyzzgr-jmegqrgaq-626[gprye] +jlidywncfy-wbiwifuny-mniluay-396[iynwf] +myvybpev-mkxni-mykdsxq-psxkxmsxq-536[rxnml] +ibghopzs-qobrm-rsdzcmasbh-246[bshmo] +jyfvnlupj-wshzapj-nyhzz-klwsvftlua-201[jlzaf] +dzczkrip-xiruv-avccpsvre-cfxzjkztj-113[czrvi] +dmbttjgjfe-dboez-dpbujoh-nbslfujoh-493[bjdoe] +kfg-jvtivk-gifavtkzcv-srjbvk-jvimztvj-347[aymns] +ktwbhtvmbox-vetllbybxw-ietlmbv-zktll-wxlbzg-241[bltvw] +tmrszakd-cxd-qdrdzqbg-417[dqrza] +nzydfxpc-rclop-nsznzwlep-nfdezxpc-dpcgtnp-899[ynbfk] +fruurvlyh-mhoobehdq-rshudwlrqv-491[hrudl] +odkasqzuo-pkq-emxqe-144[qekoa] +hwbba-dcumgv-vtckpkpi-180[bckpv] +lsyrkjkbnyec-cmkfoxqob-rexd-wkbuodsxq-718[yfzcq] +xgvnndadzy-kgvnodx-bmvnn-xjiovdihzio-395[ndvio] +willimcpy-vumeyn-omyl-nymncha-890[nmyux] +mbggf-zjhclunly-obua-yljlpcpun-487[lubcg] +ryexqpqhteki-sqdto-tuiywd-608[xhjzp] +egdytrixat-gpqqxi-prfjxhxixdc-193[xidgp] +nbhofujd-dszphfojd-cbtlfu-sftfbsdi-909[fdbsh] +rflsjynh-gfxpjy-htsyfnsrjsy-489[istpm] +vkrhzxgbv-vetllbybxw-ietlmbv-zktll-phkdlahi-189[lbvhk] +lujbbrornm-ouxfna-uxprbcrlb-459[ozvca] +pbafhzre-tenqr-fpniratre-uhag-erprvivat-117[raept] +xgvnndadzy-xjmmjndqz-ytz-nvgzn-577[nzdgj] +houngfgxjuay-pkrrehkgt-jkyomt-618[dltyf] +bjfutsneji-hmthtqfyj-jslnsjjwnsl-411[jsntf] +sgmtkzoi-lruckx-rghuxgzuxe-774[guxkr] +nuatmlmdpage-nmewqf-abqdmfuaze-326[zbewa] +dsxxw-zsllw-qyjcq-912[lqswx] +cvabijtm-kivlg-kwibqvo-aitma-226[mvuhw] +yuxufmdk-sdmpq-qss-bgdotmeuzs-768[sdmuq] +qspkfdujmf-fhh-usbjojoh-597[elvgu] +htqtwkzq-gfxpjy-hzxytrjw-xjwanhj-359[jpytc] +gbc-frperg-pnaql-pbngvat-grpuabybtl-169[bgpar] +yhkpvhjapcl-qlssfilhu-klclsvwtlua-123[lhsac] +nglmtuex-vtgwr-vhtmbgz-ftkdxmbgz-813[emnca] +atyzghrk-lruckx-ygrky-592[kryga] +dkqjcbctfqwu-tcddkv-tgegkxkpi-362[kcdtg] +sawlkjevaz-bhksan-lqnydwoejc-914[aejkl] +kdijqrbu-uww-ijehqwu-712[uwijq] +rwcnawjcrxwju-snuuhknjw-mnbrpw-121[wnjru] +vrurcjah-pajmn-mhn-bcxajpn-225[ajnch] +clotzlnetgp-mldvpe-cpdplcns-353[lpcde] +wihmogyl-aluxy-dyffsvyuh-womnigyl-mylpcwy-682[khzto] +qcbgiasf-ufors-dzoghwq-ufogg-kcfygvcd-428[mselb] +kwtwznct-ktiaaqnqml-akidmvomz-pcvb-bmkpvwtwog-824[kmtwa] +crwwv-oxyyfq-pqloxdb-289[oqwxy] +iutyaskx-mxgjk-ckgvutofkj-lruckx-jkvgxzsktz-852[kxgjt] +irgyyolokj-yigbktmkx-natz-giwaoyozout-930[oygik] +yhtwhnpun-buzahisl-jhukf-jvhapun-mpuhujpun-565[uhnpj] +fbebmtkr-zktwx-ktuubm-ybgtgvbgz-761[ifsyt] +lejkrscv-avccpsvre-dribvkzex-165[vcerk] +avw-zljyla-yhiipa-jvuahputlua-617[aluhi] +xjmmjndqz-wpiit-xjiovdihzio-889[ijdmo] +pbybeshy-fpniratre-uhag-jbexfubc-819[snuje] +ktwbhtvmbox-vtgwr-phkdlahi-683[htbkv] +avw-zljyla-wshzapj-nyhzz-ylzlhyjo-409[zlyah] +tcrjjzwzvu-treup-tfrkzex-drerxvdvek-633[retvz] +zlkprjbo-doxab-ciltbo-qoxfkfkd-627[nmwxj] +vkrhzxgbv-lvtoxgzxk-angm-labiibgz-995[gbvxz] +gpbepvxcv-hrpktcvtg-wjci-sthxvc-609[cvptg] +hwbba-gii-fgrctvogpv-804[gbiva] +nwlddtqtpo-nsznzwlep-dstaatyr-275[tdnal] +ovbunmneqbhf-fpniratre-uhag-hfre-grfgvat-637[fraeg] +pkl-oaynap-fahhuxawj-nayaerejc-888[mnchz] +etaqigpke-hnqygt-qrgtcvkqpu-752[antmz] +lugjuacha-wuhxs-ijyluncihm-214[hfsun] +zloolpfsb-zxkav-abpfdk-341[abfkl] +bknsykmdsfo-mkxni-mykdsxq-bokmaescsdsyx-822[skmdx] +xjgjmapg-zbb-hvivbzhzio-499[bzghi] +amjmpdsj-ajyqqgdgcb-qaytclecp-fslr-qrmpyec-652[smgnt] +qczcftiz-dzoghwq-ufogg-rsgwub-714[gzcfo] +gokzyxsjon-wsvsdkbi-qbkno-nio-myxdksxwoxd-900[oksxd] +ktfitzbgz-vtgwr-vhtmbgz-lxkobvxl-969[tbgvz] +hqtyeqsjylu-uww-efuhqjyedi-270[dytgj] +ovbunmneqbhf-pnaql-pbngvat-freivprf-845[nbfpv] +kzgwomvqk-akidmvomz-pcvb-aitma-902[makvi] +sedikcuh-whqtu-zubboruqd-bqrehqjeho-790[hqube] +kwvacumz-ozilm-jcvvg-lmaqov-382[vmacl] +rgndvtcxr-qjccn-prfjxhxixdc-661[cxrdj] +tbxmlkfwba-oxyyfq-tlohpelm-523[uhvaf] +iuxxuyobk-inuiurgzk-vaxingyotm-514[iuxgk] +odkasqzuo-omzpk-oamfuzs-ymzmsqyqzf-170[zmoqs] +ktwbhtvmbox-unggr-lxkobvxl-527[bxgkl] +ynssr-vtgwr-mxvaghehzr-423[rghsv] +sgmtkzoi-kmm-lotgtiotm-670[mtogi] +ugdgjxmd-vqw-kwjnauwk-944[wdgjk] +rdggdhxkt-jchipqat-snt-gthtpgrw-713[tghdp] +zvyvgnel-tenqr-wryylorna-npdhvfvgvba-663[vnrya] +jsvagsulanw-usfvq-ugslafy-esjcwlafy-762[fygle] +zsxyfgqj-wfggny-hzxytrjw-xjwanhj-931[jgwxy] +wkqxodsm-tovvilokx-dbksxsxq-822[cpsgv] +mbiyqoxsm-tovvilokx-yzobkdsyxc-458[oxybi] +lzfmdshb-bzmcx-bnzshmf-vnqjrgno-261[ujfyc] +oknkvcta-itcfg-dcumgv-hkpcpekpi-258[ckpgi] +iuxxuyobk-inuiurgzk-sgtgmksktz-202[ztjvk] +hjgbwuladw-hdsklau-yjskk-ljsafafy-372[mvkts] +rdadguja-eaphixr-vgphh-tcvxcttgxcv-739[acght] +nsyjwsfyntsfq-idj-xmnuunsl-983[nsfju] +gifavtkzcv-wcfnvi-rthlzjzkzfe-971[zfvci] +qvbmzvibqwvit-jiasmb-zmamizkp-278[imbvz] +houngfgxjuay-ckgvutofkj-yigbktmkx-natz-ykxboiky-930[kgyot] +guahyncw-wuhxs-lyuwkocmcncih-500[chuwn] +gpbepvxcv-ytaanqtpc-bpgztixcv-479[pctva] +ksodcbwnsr-pogysh-gsfjwqsg-584[sgowb] +dmybmsuzs-pkq-mzmxkeue-612[meksu] +xmtjbzidx-xviyt-vxlpdndodji-577[dxijt] +dpmpsgvm-kfmmzcfbo-bobmztjt-701[mbfop] +oxjmxdfkd-pzxsbkdbo-erkq-xznrfpfqflk-627[jhlvw] +npmhcargjc-aylbw-amyrgle-pcacgtgle-652[acgle] +votubcmf-fhh-tfswjdft-701[fthbc] +gzefmnxq-dmnnuf-geqd-fqefuzs-482[fenqd] +dmpuamofuhq-oazegyqd-sdmpq-eomhqzsqd-tgzf-emxqe-378[mctsn] +gzefmnxq-dmnnuf-etubbuzs-508[nubef] +bwx-amkzmb-ntwemz-ivitgaqa-902[noeig] +rdchjbtg-vgpst-qphzti-pcpanhxh-635[hptcg] +qzchnzbshud-atmmx-sqzhmhmf-131[hmzqs] +tipfxvezt-treup-tfrkzex-cfxzjkztj-633[tzefx] +mvhkvbdib-wpiit-vivgtndn-603[ivbdn] +hqfxxnknji-ojqqdgjfs-htsyfnsrjsy-957[bdtai] +clxalrtyr-clmmte-dezclrp-275[lcrem] +fubrjhqlf-udpsdjlqj-udeelw-ghyhorsphqw-387[hdjlq] +qzoggwtwsr-dzoghwq-ufogg-hsqvbczcum-792[goqwz] +nvrgfezqvu-sleep-ivtvzmzex-113[evzfg] +fruurvlyh-iorzhu-orjlvwlfv-881[jcdtf] +myxcewob-qbkno-mkxni-mykdsxq-nozvyiwoxd-900[oxkmn] +wyvqljapsl-jhukf-jvhapun-aljouvsvnf-955[jvalu] +tpspahyf-nyhkl-jhukf-zhslz-643[pytob] +kgjgrypw-epybc-rmn-qcapcr-qaytclecp-fslr-nspafyqgle-938[mxunk] +yknnkoera-zua-klanwpekjo-446[dphwe] +kzgwomvqk-xtiabqk-oziaa-bziqvqvo-278[qaiko] +iruzfrtkzmv-wcfnvi-rercpjzj-555[rzcfi] +diozmivodjivg-apuut-nxvqzibzm-cpio-yzkvmohzio-447[iozvm] +fydelmwp-ojp-nzyeltyxpye-405[nyzmg] +ktiaaqnqml-ziuxioqvo-kivlg-kwibqvo-zmikycqaqbqwv-564[qikva] +xst-wigvix-ikk-vieguymwmxmsr-724[imxgk] +jfifqxov-doxab-ciltbo-jxohbqfkd-965[obfxd] +rdggdhxkt-hrpktcvtg-wjci-rdcipxcbtci-531[ctdgi] +awzwhofm-ufors-qobrm-qcohwbu-oqeiwgwhwcb-896[mkvzu] +vagreangvbany-fpniratre-uhag-qrcnegzrag-689[xfuaz] +vjpwncrl-lqxlxujcn-jlzdrbrcrxw-693[lrcjx] +ibghopzs-dzoghwq-ufogg-rsdzcmasbh-948[ghosz] +ynssr-vhglnfxk-zktwx-ietlmbv-zktll-phkdlahi-917[lkhti] +tfcfiwlc-treup-tfrkzex-dribvkzex-685[efrtc] +frqvxphu-judgh-fkrfrodwh-hqjlqhhulqj-803[wjnmk] +vhkkhlbox-xzz-kxtvjnblbmbhg-631[bhkxl] +ltpedcxots-snt-stepgibtci-297[tscei] +nzwzcqfw-nlyoj-xlylrpxpye-275[lynpw] +ejpanjwpekjwh-nwilwcejc-zua-hkceopeyo-498[ypoze] +sno-rdbqds-azrjds-rghoohmf-859[dorsh] +qzoggwtwsr-suu-qcbhowbasbh-480[bswgh] +gvcskirmg-ikk-gywxsqiv-wivzmgi-698[rmvil] +ktwbhtvmbox-ftzgxmbv-vtgwr-ftkdxmbgz-163[tbgmv] +oxmeeuruqp-omzpk-oamfuzs-efadmsq-716[meoua] +xjinphzm-bmvyz-hvbizodx-xviyt-xjvodib-ozxcijgjbt-343[ixbjv] +jyfvnlupj-ibuuf-svnpzapjz-851[gmsnf] diff --git a/2016/aoc4/src/main.rs b/2016/aoc4/src/main.rs new file mode 100644 index 0000000..ea1edd8 --- /dev/null +++ b/2016/aoc4/src/main.rs @@ -0,0 +1,83 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::BTreeMap; + +#[derive(Debug)] +struct Room { + encrypted_name: String, + sector_id: u32, + checksum: String +} + +impl Room { + fn new(line: String) -> Room { + let name_length = line.find(char::is_numeric).unwrap(); + let (name, sector_and_check) = line.split_at(name_length); + let (sector, check) = sector_and_check.split_at(sector_and_check.len()-7); + + Room { + encrypted_name: name.trim_matches('-').to_string(), + sector_id: sector.parse().unwrap(), + checksum: check.trim_matches(|c| c=='[' || c==']').to_string() + } + } + + fn is_valid(&self) -> bool { + let mut char_counts: BTreeMap<char, i32> = BTreeMap::new(); + let chars = self.encrypted_name.chars() + .filter(|&c| c != '-'); + for c in chars { + *char_counts.entry(c).or_insert(0) += 1; + } + + let mut vec_char_counts = char_counts.iter().collect::<Vec<_>>(); + vec_char_counts.sort_by_key(|&(_, &value)| -value); + let expected_checksum = vec_char_counts + .iter() + .take(5) + .map(|&(&key, _)| key) + .collect::<String>(); + + expected_checksum == self.checksum + } + + fn decrypt_name(&self) -> String { + self.encrypted_name.chars().map(|c| { + if c == '-' { + ' ' + } else { + let current_digit = c as u8 - 'a' as u8; + let new_digit = ((current_digit as u32 + self.sector_id) % 26) as u8; + (new_digit + 'a' as u8) as char + } + }).collect() + } +} + +fn main() { + let rooms = read_file(); + let valid_rooms = rooms.iter() + .filter(|r| r.is_valid()) + .collect::<Vec<_>>(); + let sector_sum: u32 = valid_rooms.iter() + .map(|r| r.sector_id) + .sum(); + + println!("Sector sum {}", sector_sum); + + let north_poles = rooms.iter() + .filter(|r| r.decrypt_name().contains("north")) + .inspect(|r| println!("{} {}", r.decrypt_name(), r.sector_id)) + .collect::<Vec<_>>(); + println!("{:?}", north_poles); +} + +fn read_file() -> Vec<Room> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .map(Room::new) + .collect() +} diff --git a/2016/aoc5/Cargo.lock b/2016/aoc5/Cargo.lock new file mode 100644 index 0000000..6d0e69c --- /dev/null +++ b/2016/aoc5/Cargo.lock @@ -0,0 +1,12 @@ +[root] +name = "aoc5" +version = "0.1.0" +dependencies = [ + "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "md5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + diff --git a/2016/aoc5/Cargo.toml b/2016/aoc5/Cargo.toml new file mode 100644 index 0000000..cc09c3c --- /dev/null +++ b/2016/aoc5/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc5" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +md5 = "^0.2"
\ No newline at end of file diff --git a/2016/aoc5/src/main.rs b/2016/aoc5/src/main.rs new file mode 100644 index 0000000..31bef5e --- /dev/null +++ b/2016/aoc5/src/main.rs @@ -0,0 +1,49 @@ +extern crate md5; + +fn main() { + let room = "reyedfim"; + + let mut i = 0; + let mut found_bytes = 0; + + let mut code: [Option<u8>; 8] = [None;8]; + + println!("Cracking the passwordz"); + print_code(&code); + + while found_bytes < 8 { + let room_string = format!("{}{}", room, i); + let room_bytes = room_string.into_bytes(); + let hash = md5::compute(room_bytes.as_slice()); + if match_hash(hash) { + let position = hash[2]; + let value = hash[3] / 16; + if code[position as usize].is_none() { + code[position as usize] = Some(value); + print_code(&code); + found_bytes += 1; + } + } + + i+=1; + } + + println!("Password found!"); +} + +fn match_hash(hash: [u8; 16]) -> bool { + hash[0] == 0 && + hash[1] == 0 && + hash[2] < 8 +} + +fn print_code(code: &[Option<u8>; 8]) { + println!(""); + for &byte in code.iter() { + match byte { + None => {print!("-");}, + Some(x) => {print!("{:x}", x);} + } + } + println!(""); +} diff --git a/2016/aoc6/Cargo.lock b/2016/aoc6/Cargo.lock new file mode 100644 index 0000000..f61aebf --- /dev/null +++ b/2016/aoc6/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc6" +version = "0.1.0" + diff --git a/2016/aoc6/Cargo.toml b/2016/aoc6/Cargo.toml new file mode 100644 index 0000000..22fc24a --- /dev/null +++ b/2016/aoc6/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc6" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] diff --git a/2016/aoc6/input.txt b/2016/aoc6/input.txt new file mode 100644 index 0000000..6caf81a --- /dev/null +++ b/2016/aoc6/input.txt @@ -0,0 +1,624 @@ +iyeajeby +qengiuoe +wxzardgo +jciguemn +zcampkps +kiqjpjqb +knwhoxlw +iaxxpjhe +kgrgaixi +lciydajs +svugtdwe +nwailbqu +cbkwwxvt +lqjyrawh +jylmtlzk +firecpyg +xegtcvvx +jllqqzeq +hggmnxlc +pdmfuqlx +hnbksbkl +pmjmiqti +gpmuvcsh +tspnxvnm +hghwizhe +sgokeybb +jtphckcv +usypmmzq +irlfaboj +prgiqvil +nfqegpjd +aivwwkix +xeljyzjv +mrdpqlzc +metcvpvd +ifizfkgl +uznvqiqw +uzylkeui +obmqhlan +vaoivkeq +wvlbwfaf +ntbgtbpz +lbuieiea +rljyfeop +rynkdwiq +hyqpjwzl +supxlsql +bntmjboc +qntfhain +xxtjctjz +qppakrbj +ptnnwmlg +pucuqrpi +ensluhxm +wtnabsej +hvnozkvx +dhxgysdk +qdizyrkg +vtuyxjky +lxwcyfxr +xoyphxmb +ltylucct +oaawvjfa +qbjmdcap +raqhkkbe +uqtxpvhj +pddzoucq +axfbgpvj +eohksqcm +jtmmkovb +paronxgv +gtxnqybz +qfsobvxz +ywrnogwz +ytdvpmzv +daeappko +zgjdatzf +psrfofvi +uobknckb +rvndwdgs +oedojfqv +shxmutcm +nigdxgrz +ngwvdair +wexxkvwn +oqmrjlcr +vcbmxvyb +ekdfdzch +klphcryl +bbtobqqo +wupuvqio +hwiufjpk +rckjewzp +vhgzdtil +qrvqytfe +opolrgwi +nektqhbg +ynubobwy +cqnysvzf +muqrlihy +ncbeeuur +hxsvpoug +kacsofnk +vztkoicu +smxiuykn +sgnmdqmw +sfsxxnds +iwquujxr +fwssfvfw +qyoswzsm +kvfvizgu +fmewmudq +mvtekgjn +kkffshrt +jzbkyxzf +beszoylz +lnhmbwae +tijfkcrt +culovluh +jrgtbxma +yqtlarnm +rdlxlplt +vzgphnpi +igpbfrrd +yqdgvyke +juhzerjo +kfwlvhag +ysznuuey +turxgyik +iqgcxxpa +tjrmtkjk +ywfcwvqp +ozmguljj +maxegnqi +vavydxwd +dhlckjra +omvdoafe +rvzejiol +rsnpjser +nejognkt +agkavzki +uzskztny +knvzbkff +iiuhrzsp +amxryjhv +yqxdgdaj +tpvellfc +dqutbibf +fbbrpcbg +shxlcvmc +ociooedg +nedlhmfo +ohdxifnx +mqhbpyed +tauomzjy +bkooiesi +xtukgdec +mygazipf +wkvecylo +tlejwzcj +rcpygkbi +uihidqdr +lxwthely +ywyoahob +zwjrveex +eqahofbx +mvipdaql +zccdioga +gttnacns +urajevul +uhsdjkhm +cjbpznua +tyfvodhw +feadmwyl +cjmccfcy +uawxsuyy +xzzidfrj +slhgapvb +tbdwntwx +bvspfozq +pkkwgooy +frnhifax +sxfkbojn +ffnzlqda +pbtbewtm +mivpqcyc +gztezasy +jlfdrmou +xjmazeef +lgcaevtl +piidoxbi +iczlosyt +egszahwu +cmbybzvi +orczduhd +hzorfhdv +yptggtmu +yfsmednv +ajawzgpp +niicgavl +mmdpsogr +wkufsuct +yboinvnc +lmwbrqmb +rrsfhics +xguvmcmi +yldifule +laycxgaf +jtnizmxf +qrbpqznc +cpplgbsm +xzkwttnj +axjxusuh +nthcjcqn +zjkdjlcz +uulqjmfq +djqlzrcb +ftxhzuoq +bfrzrdtn +fvovpzts +tloyyqoa +spupkgwb +ishhbwok +spyfzbsj +bvvnfnxx +iuectyxc +xbbjridq +drzfvsrw +gokuvwjf +hhkmgqxf +epijynaj +bfxdnibq +pjoovmhf +izbgldjr +rvxrhjxa +blhhorwy +xwmobyph +pfoimsbl +gprwonid +hfwmazfu +dudhehvt +nbekhgbg +qbwklpvg +yemjyobm +vmocaztb +xkwklord +tjooucsf +qowresxh +cxeapuvv +zmlzqivx +fryanflf +kxcrserx +jtoqtooo +axrtkjyo +fwwzdsbx +pyphszfp +ekdcnrgx +zyrhxcvc +blcqplmo +wnsiistm +slavtfip +sixawglm +sxpjnpsa +sfwmudzt +kcpetkcw +iqfufsws +wdfbgvol +muvtnxzg +otgycshn +gddbabma +swksjxjx +hnfcsnir +tmcnycfi +lpvuwehn +htyogany +rggezmhh +guzhwmss +zoqiscdy +dqbtvyrb +wfnymsai +klfpdgvn +ihqjdope +dudllmty +gpbkmwtd +tjmtvjpk +sjnkfrsk +bgruelqs +repdjhre +flxjlvah +lkpnbajp +rmkqdjpx +enimddcn +nzowveei +cohzzkee +sxfvyqwi +vlztaixp +xgkrlsyh +eaurshic +kifvzhsv +dxfsexup +fyqqbzgm +bnxsgjxg +ndbbkscp +xyjhzqel +eyanetmo +quakpmsr +kqfeprrb +hhsvwyse +jjvjivng +zkeiinwn +adibxest +zjzrkmxr +kceozeud +iknfusda +gqmuepbo +ccwltods +smaurfwy +yojrrudk +akygvwyf +dermnpvn +bvfvjskb +pcohqoyu +odyqfyhy +nqgepwqo +zijtbqgd +czfgqsmr +fkgeoorf +udvncboo +dwxgrgck +vqhthccp +gvkfkpwr +pquhsiha +hlpqfrpz +aeirprab +bouoglph +zwyimnhu +zpculwdn +mokpnpeq +hfgfjamc +osgncdnf +ejfjqwql +tovcchzu +wwmburym +mdonvwnw +wxjysrlt +cjrqrnqv +okzeilge +egunoujn +dlbaqemd +qrdyabya +vaaxguwe +hjqwytxz +xtvmgdaq +noijjgft +xgysigmw +urbsmwdk +bjnerghw +aspvghjp +hgciumho +ivjihqed +wtvkobuw +zhtyhllg +jlxjwjui +xkmxhoek +rydzmqip +ydonbzvk +byeoptyo +gpnnqxrb +hyzplaie +tbedyaph +zgqhqnmg +tdepvaex +wytwmgkr +qsmuyzys +fijlauqj +wyqylgam +lbwxnluj +nmecxavu +ofktnhfb +lhjgzkjr +ucctfetk +mggvgkmu +yzmnbbhe +kcnqhuam +rxiwfblx +vfufzjou +cpynrovg +qdwshnpi +pcrxywto +ozhzwpwa +zroxmvfr +fpipfjvu +leyiafxs +oacgxszs +voebeyvn +ixkqabkl +lqabfhtd +oewbtlgc +vdlaniii +tabtkolp +xufkdmem +niofeqxn +innfbedm +zahlnzhd +whmqyffv +fhjascxd +wnsktsdi +ucdgnvkf +fmpxuyml +pnvuhmup +wohfuyto +wthjmlzx +tkcdmttv +ubyrests +mkrplnes +mglepvyl +shqafjly +gbpaitlu +cesjmugk +qnqmvnks +kbvvlltq +luvgtdmv +rrrhawdz +dthrxkth +bglwrdgk +apqxickb +vnzwzjba +reiafjdt +qfcunhks +dwmhshtd +rwtwnxxu +gjgdhwtr +dhrwidzp +manohccv +jvccmlat +txhfklix +nczocnew +gxlpkgqr +vsrtxogh +ixhtcwaz +qfapctcq +glvtpiug +jnuecngg +bktbndyg +ceboexzj +lsjakjjw +oemmiqvu +zqscwlay +hqedlpzb +hsrztfxj +fjpwidgw +abrsenrv +qseoiuyj +jtjtqxgr +esczykzc +mazmziim +szzwzfuq +zbcfhaiz +uqsnjwus +vwzqohsu +yylbjhnl +chqdcblk +vporypnv +vfhdofdx +eztmaogh +wlzjsgbw +dqutunrc +gwtpdvpm +ywxghnkc +alacomlw +jfuygdcy +zkoeauig +abufqquo +ncilvdgq +guinnabe +pdwybure +jocsrmfp +acwncthl +cdnaffnn +zyqbszzz +azhxybig +hibjuhsw +tvckjxuf +vklsqbos +efzukhlt +kjaqqofz +esxcyrxt +yocrwucn +iodafafm +oiakmvtb +dmbgtcpj +qnzrryot +ufcbptbz +veprgqre +umsltfes +bvvqhcmz +rucsowjt +kkbgkrxe +fksibbfh +tyckeiqo +gfqurpyl +raljmvsf +chednohc +gowzqrfm +ypktqcvb +fgiusizq +jvdsmnhu +esfuxpra +uraiwlfz +vpkulaao +erkvbjrj +mrhjjist +xmpayrdq +biqwpkrm +lrlhkljw +rbaglxsu +kryywepc +mrydxkuv +obksnkir +jogxscwa +pxkzdamo +wcywigdv +acqicmyz +xiqhgpik +izubxapc +yrzfptzd +qmyltgkw +dwedcarp +oouewlrv +izelyufn +ehdstcah +nylqvqtd +ywxjkxnx +sstceepq +bjihzptq +nvawrewu +plftxhsh +eyuzdika +gjdyaoek +euqeablj +zhgjzdki +lyygbhly +joscwikc +cbqczxbu +xnhptyqu +txvltmyh +kwtaueat +btpbbibj +ueytsouw +kfmmcyqk +fwflotzv +ouwyewua +hslsjpur +jdgrtwme +lgelctfc +nlxyvkgh +xpeslfje +adcifgwz +gquvwdeb +rkmzqard +lvzehstp +cijqaygt +dwfzsddm +vmwqrrsy +aotsaqoj +irjumknp +altzbfjo +hubsrgdb +nudnkfof +bvhvcltf +xupumtmg +kjfxunyd +pjwhyeuz +zmnxkepw +mpzvjjni +cskxvphp +dykbldmb +ymmsshaj +gdsvrycq +ehdvpiqy +engermzp +tmexxgkw +acjslpiv +qprqqyqf +fbictbjs +llaeirez +uxoofxnc +ukgpjtlz +tpxwxzpu +cuzgcjgd +jnzxfqww +wemyhsbv +aslnwaqg +aibaikgt +hglojgqv +larqrtka +ozlrwpna +pzxsdrjh +vsnuuusj +jswkkvun +darbbbhk +woeihkoh +xdsunolx +ymvbtrxg +mtodxqik +fxkcdfwq +koivubnr +gitldbqs +bsjymzpd +whaluyys +rvaftjox +qhinxcid +snpkwuko +mdgvstoq +zzytixxc +qsgrlmdn +ddjqxeaw +uilqxznh +chazpmyk +iivrixot +casfxwwa +mvjdazsr +dnmivmal +eayyeyfh diff --git a/2016/aoc6/src/main.rs b/2016/aoc6/src/main.rs new file mode 100644 index 0000000..45ae3b1 --- /dev/null +++ b/2016/aoc6/src/main.rs @@ -0,0 +1,27 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::HashMap; + +fn main() { + let lines = read_file(); + let answer_width = lines[0].len(); + for i in 0..answer_width { + let line = lines.iter().map(|line| line.chars().nth(i).unwrap()).collect::<Vec<_>>(); + + let mut char_counts = HashMap::new(); + for character in line { + *char_counts.entry(character).or_insert(0) += 1; + } + let (character, _) = char_counts.iter().min_by_key(|&(_, &count)| count).unwrap(); + println!("{}", character); + } +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("test_input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc6/test_input.txt b/2016/aoc6/test_input.txt new file mode 100644 index 0000000..32ba518 --- /dev/null +++ b/2016/aoc6/test_input.txt @@ -0,0 +1,16 @@ +eedadn +drvtee +eandsr +raavrd +atevrs +tsrnev +sdttsa +rasrtv +nssdts +ntnada +svetve +tesnvt +vntsnd +vrdear +dvrsen +enarar diff --git a/2016/aoc7/Cargo.lock b/2016/aoc7/Cargo.lock new file mode 100644 index 0000000..58e04ee --- /dev/null +++ b/2016/aoc7/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc7" +version = "0.1.0" + diff --git a/2016/aoc7/Cargo.toml b/2016/aoc7/Cargo.toml new file mode 100644 index 0000000..1b18be9 --- /dev/null +++ b/2016/aoc7/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc7" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc7/input.txt b/2016/aoc7/input.txt new file mode 100644 index 0000000..d50f36c --- /dev/null +++ b/2016/aoc7/input.txt @@ -0,0 +1,2000 @@ +wysextplwqpvipxdv[srzvtwbfzqtspxnethm]syqbzgtboxxzpwr[kljvjjkjyojzrstfgrw]obdhcczonzvbfby[svotajtpttohxsh]cooktbyumlpxostt +emzopymywhhxulxuctj[dwwvkzhoigmbmnf]nxgbgfwqvrypqxppyq[qozsihnhpztcrpbdc]rnhnakmrdcowatw[rhvchmzmyfxlolwe]uysecbspabtauvmixa +bqooxxweoytjghrqn[hkwwukixothfyglw]kpasnmikmbzcbfi[vlnyszifsaaicagxtqf]ucdyxasusefuuxlx +rxpusykufgqujfe[rypwoorxdemxffui]cvvcufcqmxoxcphp[witynplrfvquduiot]vcysdcsowcxhphp[gctucefriclxaonpwe]jdprpdvpeumrhokrcjt +iungssgfnnjlgdferc[xfffplonmzjmxkinhl]dehxdielvncdawomqk[teizynepguvtgofr]fjazkxesmlwryphifh[ppjfvfefqhmuqtdp]luopramrehtriilwlou +mqxqhcpalwycdxw[fkwhjscfmgywhtvdb]khadwvhkxygtxqx +ihekzgbwpjxgbau[eqpvqxncntbtsqn]mbtbcujdkbrhxdu +izikobnovmjzngo[ombcpcvshnedtndu]lnnmdkuapgnxpgyxcmg[bgnxdzmiolfvvaizu]tcvnrfufuvhgmlxcm +yhrowrreplrrsbupeor[nchtznfzbzwnogh]rynudxihckzattbz[dshxeaqusdlhydtm]rvqzuffgqtysfzxp +unfjgussbjxzlhopoqg[ppdnqkiuooukdmbqlo]flfiieiitmettblfln +hgtbgxarmgbxqrhghxb[hflfvoetxfisqsj]syhkugztqkywetyhad[fmptjuaqittvvyooda]cjkxbnylglnlfleelzu +npxhwtitqnddkwg[gmzggwnvygsroeaadtc]gudnfyefqbbgyspdxjw[ilthbdqubqnveowv]xitfldhfjyjsomygjg[knmrlvoiqyytigytlum]dlfpsnyzmhkmeevfwsf +wjzwftiuixvwyzmgoe[jbfghrqhyywwhlu]wcijbojvlgjjdtowzpv[lgfvxfdusgxddsppbxb]pagicuiuerzeydww[wlpjklgzyilrifonz]gdicckmxibtwwoesaxf +eilrieezaciolhnhrc[hcisnfomqiiaculxfv]bfyxxhgrakqogthzft +xijomgpzpilomlpy[sfgwaovcybyhoogrxsv]ufncwrahejwlhyvz +nojlhdpfkjbhahgqo[lqrkjabuijutlcbq]caszlkvkofxjyqzsttc[isqicyomykudneq]izuzehgtmwnnvfrlrja +qwfvuzrogqzvnhyqdv[qhnjhafmrtghosbmskc]msmwswtgzlpmtmzne[kovzhefjqtqadhj]myqisirynftmtzvxvvz +frfongnaecavmrhj[uuptwvcqozxnglsd]kwpovfwuhmqjkog[phtrgysxaltvbohmv]abhuahonmbhsmfglltm +wdqcwcbtpexduecepe[zwrcpctlwglgfpappb]zdadimzdcpxhxwde[yquulvwgyyzwcfsvkdt]thgziwclyxxfyjpbpc[ypkjfrfkxlkavboh]hxylcecamgezuoljh +yqxkafpkuuxfafe[zehlwtvpprtiqbl]qswqigaeaneovxm[bqoieihtxarwyrqegb]yzdopgmqklqaizxjm[jhrsftklywefyevvha]xuvydwcntczjvuduj +judhawjtmpsxfocai[qghshlgvbitxevt]xehceioknrewezihnb[jvrzemakemtgmqiqmvj]wewpjflvqmottqx +uhokpvanmvdobqitn[eosarcmqnukoczgz]rmoowtgbbyimkptlxdu[rqhewmnpypqpyosgehz]nqdwglwscsizxey +sbnojmynueuyyutr[oonxqrbbjxwvwafad]krqlneuehyrghmkrq[khsckkfwowubtglegu]xweufrmlufamzbcedk +nmgjmbwyrvcbthw[ogtvotifzugvvrsfe]jucqbvfqclkuxzumoed +uaokpcytcrfpitfursj[lweyfahryjfprulw]dsdutsxdtugaced +ahshwqihivxlgsj[ldnmuwbrmoxtypqluyz]intafryfavcnotgxu[xjggdyvoarfajgp]zhfgnytzjhuyheqdy[yeynlfshsyrhjxrzguu]onvyhjfwooikmmqzwgc +djkgxfnfojgjpxec[ngwqajfbywoxlbm]oqdqigzeqadgqjt[tvojayieruftbjokeeq]gxwtruomnhorqqrpzt[bxppvnbiwhkhdka]rhpffqekyrcgwqmoi +aasbwiocfkaahrjwerr[dvlemehlhfzxnzymqn]okxibfrlswfvmreuf +rwcjoknjvyufkrp[hsqrwhdlwrtlthp]ijezyezjdrhzgltliq +azawpddzkqbosmltyxt[zoaaqnowmmwkmfkq]lgusvzwnimvgagupkt[scbjhqdftzssbvnvff]coiaslgcrwvyioxx[jouvwdiwvbsembzf]popmlnhjkoaeahcny +snucfdhspcbcsgjnmcc[qbicureolmbzhsy]cuabqhzbcbkezsumkq[cnggwqizurflommitua]ajtxxkqwqynnwroi +bsxzwpiauwlqelesq[uqfdggoirtlucvedpl]asacxftfqfswiapmj[nqohanbbzodfgkxihtt]lhshhkgjvjkumja +beewgulkwnmwxenstrz[vybrrqhcdpkhfnshccv]xdfvqzdslwosulzatc[kuknmynmjntvtyduwlh]trfvychdobyghnrxrfy +oxrwmqpvxntdkohmxb[wugyubwxumwnxlk]jidpzvtbomuymyf +pqzbwlnmvtytsfre[pmtmcnxkylmqaeb]alfdaofnqpohulpmfoj +qopdwichdepaubxxeu[ifjozmlqttahyugyt]mfmlwxifscsnuom[kiyjlqqxunsxfmht]icofrxpdpsktwiifyb[hetijegmockkyjhhc]aarioqngqmdpkti +klumchkwczxuuekdb[nlalmjunselydybqxdj]alagfcxocldfyzdnzd[abfnqrgrxbscagj]cohrecgrcaxljkz +djydzyiyydcneoubp[gorqzujuwkjsqhelfrp]pvtvbhztirfzmwcopfv[wfjumxbfvvgvzltlcf]ergdkkakrtfzcxmqcc[vwnkrxhayzbvbauvn]yjoqveipzibbmjq +qbdruhoywfjhaljfkoy[tznfejprrnzrrewdx]jziputgqfcqtbhvhlnw[ikahxtlheeunzrdq]tmoanjmpioumvpcu[tnmcvxkewovprxgzd]trnmnhdvtsisiujqjk +llojixxpxtvcwxaxp[rurmhymwuztchngs]weaefxdkjmofeydvfy[hmbracjdcwxfeva]jkiybiomykfexjlyg[pgrlrqgoxqqtoio]rdynpcndtqarmkagbw +kislmybuoblnpsc[dvsrnwlsvxxmzuu]jakczftcvijbavhjgb[osdyplcgliragfnpezx]kihkywmwgbkjtgxn[tdsgdadcvcaxfrbur]lzyjmrjqztybfdmm +orfngwdzlrucbkbqd[ibvlkwlnnzwkhnoad]brstantuaxwkibofh +vuumejklanuomqqdbva[mwjzrpargsphzkkhaaz]lkkewmbrvuczyyu[ebpoqgoifelelzzhd]biflvclnnimuojihdmn[llrnjdgzagktjrys]edtbmzmcbthpixhwwyz +ftaciyszakisxhzjhbo[khfshezpopvjaki]pdnnsqmgpgatvubllrr[ovjrouomglbpgvtya]ifwcvhascqptbvbums[cfpimraygtnuimiup]zeykmilehidtlstjux +nzgbxxiimmzsvhe[ixypsgextxvdckbjelq]jpklrvkhgzprfrsv +mpdlsziccgzmvorvm[vhxbfkwfwbxqbvxp]zbsxgodzhgmrhrprpu[pvawdsvqybgdncgxido]zuhyfbmmhzegohu +rdkteyoeleyhxdlfa[nrrzftpiqatsnnnsd]qwelhxwbpuwjmrjxmgq +vpdhtcgjpkrqmrt[gozqldncggxpvou]zedtarenbxskusqk[mwpmzpwraryuqqmdhrd]eoculislafmbqzy[okpddsvrtyrkbjtihhb]dvuadhnaxkfewhnksl +ivjfulhqfbdqiprzbbe[ezhkhqxcviwxbwmlnbb]ttekmmdrphuteslzwcj[iocuduwexawydww]qmrfnnedqtqezclpuq +tksplumjkpsjjorux[dpffmbayilzuszc]rsiowigabmredkfv[aurieaasmsrxufpo]lbwvhcrjfgomkff +uwuobjzxkgeugrivc[biktdwykzondbwiko]nnrtnqzhdhdwzkau +cjjawanjvbxvmvdmtu[kubvvkuoynaawzowphv]ssijoohfemyhrde +qlykdpnioshrexuw[tjwoswemjxylnqupgv]ymovhecbliuuzhjwu[ghxibaaourtzzogrynv]hmlndovkousrtbomlnz[nzkdpmqrqovnvskh]vdvntntzrqrhvcaxdov +tdhrefyrccgkdquxz[jqeprpsvvkmmldlwyq]lwhnimtgegsziejeh[gyefzqbmfnhzgtq]fmbcvbjtsriuicde[sbkkbqwzlluccpa]nwxmuolcbhtwcllmz +cakfzlwlaxgrzjpgck[toihlzbehdzesbt]azrsizelgzczqxwejb[ypecquckfavmixeyjgr]njiyddhuwlwogbnpt +jadaohixgxzjcopk[wopcnehanaabtklxnez]jgvumwvmixxxwaolxb[lrhmslkbmylyvlkx]tatmsbtlbcutcydlrf +gelrpwfiyiszejt[skpclwjhzgwvfbbd]ibwzelwwhvudmvoe[gpdveubkzkkxvtjn]khmkjslnkdlmefcx[fcwhuyiyvnjgfcva]qjcfuqxwmkyvvzuj +pbejigkioxtdjjzbl[uihultqxejdyegacm]fitsnuitopdzrxskz[shbzwyodcotpvoixoz]qrhuyetkmnnljfqt +yohbaryhrhuobkf[fmfsylvacrgvpnlqdb]iucbpagpbziaqae[lfcjrlbgxiytord]mhjlzecyrqcpbxsaq +vguohtnahunrvrfv[lwbganvrrgnasnkqjz]yuoncrmethwiglfiy +pljibizefgbrfauieem[yadmbpkftrtwjrize]fuzpxdpomsdxfocc[lvoahklovaxtucrpwhj]newpgoizivpqkpo[uloztzclhwixtcjhyon]qyzzqoyirejavchy +plinqqpqghkeuipqppp[rndecheohrsftgvku]ogsyvyxuetmdomwdmx[lumcfskwppjacuddm]uptsydogwyqaupdft +ewvtreckmjqvkvwgtz[leisttvtmrxnzjv]bfzzponjsjmepqjfs[knbonuuuhvtvteiov]vaejlijsnrpqppo[hvwwdxernqcxtxe]ssznbkhfmchmjjiahkk +rrofpphpfkeeqlxcev[ierkxtuduxxxbilmg]vmipzdomogxwiazla +uqmllifxqxwcskoj[lwrjkmxgwxwvkqrsajx]wpbkbsohlaeskzbv[boyvlwxpqpppcknocv]pgsvgtugmxmoexrvpkk +zupunwchccxqggie[sdcdhzciymhppyaaaib]izbizcvzvbcnofmqt[lvvxmcmydxruvudsar]gnspfiadqokusllygyw[wbcpnuppeugrqobtnu]mcvfhylypayxquurcv +ngscsmmvttxjxoaniu[wsfnnfnkwmjxjql]ijtqswaevexzcmgime +hkmykmrremccqxvfdps[izfaeewfadfhuwwd]yffzgiqtmayebphb +znzxjrdnxhfydrhr[kwafvmygvlylite]hmskvvpqyoblrygj +gkxzweijinwxyajq[jzljdfxlossksqa]octzjmrvxkumtpn[jypbqguwpybykguwn]ngriygtjydfznsf[cpwtojpifkhwtfknjsg]zahxvqxjtoutvvsphh +kmvndjahzayidho[fitbtgfncjvmbyrbvnf]fodwrbklqhxpsrqwh[ccwvgmocbtbqvwzu]uuidhylekzxzvmce[qbhkjfhnczasecv]ctsfirxwjfvrmayoeb +oktwbkikybfwojcweal[pnhqkawxmfxggabhgpa]kdjghdalrpgsdhqj[bxjcqdytenfjirvb]odnhihekqyskaoedyor[pqsixozypkjdnnntbng]negjtmkqfykrjgewt +hriyrcurqmacydyay[gfblxaovvngyesfa]tmftedgxujvmjze[knivpbneiuxdsowcxdt]zzncnfcouzoppog +edabqgdgbyjqkzjvzhr[rdejmmymhnvfrqvf]zknrxaqjohlncvwc[lcpuoqnkvwgjycfm]ohuebodqzydltckrsb +rxcyawcfxcjtdshxg[zvggbsrobekoxidyx]zdpvqowndwgdubbhst +qngajrgvzuafovkr[kracjvrryquumqerjev]mqddkdpqmfgexahczm[psmbzonkrrtlqdpgqci]obiynfssuwhprevmzm +dihkldbnjicztjfrvga[qtlevmacqkefjomc]opjaojctoraohocxaca[ojldoulpocpcpexnyx]qnouppkcuggjmod[oeiywfzmbjrhtxz]mvhoarchbrpndgwhxga +qyncschbsnqwgvfu[cscsfdcfbfqiwgwqi]pqzbontuospgycwzqn +lwvovybfksidtajq[vrtqmrxzouplnjogzk]gailtfjtszlxzwhbs[bgqzyhgudphwgufmg]levofhjnxjqhkcy[wbffnapyutukiavenm]olkwwlrbbobqudwvnur +yeqiptxuczuxzeatp[upzutosphyfhuho]jehejxjvfpqeifogn[odhltqvdcwwmshl]coezfdamogigspon[syppfhysfwfkisltwr]ihkaelrbcelykby +nmciqyaovpdwzldwt[zoaowvxkrpfuwnyepcb]yhqlmmrxxvguuajawb[rmilfmqzokaeabc]yhmswnsiyrepbudi +pifzooabiqmuicfqi[tvaqijdwxsbamxzg]zncutzbfmraagej +jpgkrbovswsjnbcj[bjybzimnzszdkqj]mvwmgdithrxecpselt[kghbhnctqnhhxxhdro]drttsuyvtuuygdtfaf[zohajxyfyjnqrigq]gadarjzfafqxsjxk +wivyofwdmipecdxuqu[trccnlbsvfbagstm]xajuejldffxzxfygsg +qsuxdmtfgpmlgkh[gisuuzaglpmbmydtt]qzyfvzryxepjmnr[mgsjrbmtxxzkadomelm]fqzjahepxspwkwpwd +pncauthrouncvjkrik[cyiovjnoesdgpeyjpvd]ajhonypsbifeghxi[wmudcxwbewumjbegnh]qetzbstgmzfruzxqln +qmkcddrhexvtylukq[nwrryzbnjnhvvgm]edxlyprwzzhgfmhz +iuonniejtavofqdqsln[ynjrsfsqrdsgydhpdvh]xvqtjledtcgkjkealws +fhbxdtddlvkjrmjyae[nwwjmjvxtabdwdezfdy]iwnsmstiulolahbxka[lqrxlwifzndbeid]jilfjomwrbjeniwybv +iptzrdexpfzabqcqkm[kvaxgarrbrobtmu]fqaedifschjkoepn[widcirixuswhcvcqywp]kpkxphryiwwnkmb +zbeoanntetxhvigve[fhwvhghpujcldib]ncrcyvevibooqesy[ougjirkquasabeqad]ydufeicmimcwgtbg +jaocnzcwgxknexaf[cqykwbyvxtcwnurw]udxjnumyhelfogapi +sduqgjoijyfrcnfencj[uxuiwklsiuqwjjrzcfn]epnvqcjspwopyffl[mwghrhtfclodjan]ghamugnhrrzjwmnc +woygyvtrlmjzaeteuj[vvvfohavzuuzyzgu]xjjcxhosambmkixiie[lqholbwbktlvdljmapw]diufpkdnjmjnmyc[ehjexwagbmezmpj]czhwzecixzxfykaiafj +nkijgkhyilzqvtgj[llydwhyhnhpcracxxd]zgtsspcwpyujndbxvp +nawnrsgxqpctinyek[ieguugfkwujnymij]rfmqypeekkdsttdw[rfuanabgfjgctueaaqo]vranbomhrynvjyywmh[zjncmschlfmkvhd]gfeoftxsawcgrzvrlx +jgazasxbickiiiz[duuskjowanfmieegl]cwgdwtrzpbfemqitbhb +lahkgoaoeofjlocsei[bwxyguvgmenwnpwlp]jigdlgdjptkimoyipa[zlcyjbqohvmlxgxp]bmovqedgchicusqzq +jhkxinkbwhpddvjzgod[fypyyhptvewejlbwdmx]teagznqhjydanxxi[wkppnjsyzhwshtpo]piaqxcwqolwklwzsfkg +sjedigezzdkqlxlcnr[xanehtpradlngiob]uonmjrieoycpthh[wnsqwfubwxkqhlflzv]smrebfwpnhskzlknva[pylbyttmhyggonlk]dwqkzjmatybpmgeb +ktfcuvnwueamlwvgwmq[czcgevditrtvddgfh]djmmelqewdnzrlqliz[fkpieaipgyxnkmjp]rdpkfzvqpfpvczv +tixjemagwmynkihelk[bnwfmkugsnivgdmvskc]nlasqrjqrlorszi[kbatouwdhejxchpdhd]etmbkytyrpnrpgqvel[xahfkfjmsqjycaq]mispsimhcckrhqvek +abudxncgozbrbnx[fllpjgocynbuyawgs]hiphrvpugpfnnppn[jhmlgjsufflkdgw]ldmdclrkorzjtbjqcrn +aljahmvdrraiavzv[tevjntkppnjqwovvuuh]ozmgagxzixxyzuy[zgefziawisowuyqra]nrqmsbwgqbfrxqvzu[zvzglmnjmjpmditiodb]odzbozesvocemfyis +zgdukwtswaosbrossf[ugdnezayjnbjuhpeh]knkvomcsgfptssifni[votpmaaohcyofgdz]skbvfugaaxutcmrmsc +ywiphurgqcvybiakgok[cscyksufsduegggw]rtvvvokrvwmwsvmk[oqvdxhoqfsfdwwm]sbzajtnbxzkyiwrj +nxrvrsbjsrysysvftoo[qowwnvlezexjyynm]nknzluizyzjpbzpevb[adkqviapkjbmknchtb]xsgtthuifmsqidyh +ejrplkjjbnjjouesaph[bdtybzkfyictcjuagr]ivtcttyunertnzgmpqv[roikukeznmtkqomqbk]lsxzsjrnsrdlxevj +qgcebktqtyjjwsav[naozjsnqufkkgkp]evimphuulhzflub[weanrdvlsmmypnh]rojhwlyxtszxsjiuai +zludmyuqlfpefvxcm[hejpyhwaqdndtwslan]ldtxkxxtegoqpntsnwg[olhtlkpvkdgkkxkisp]hursraavetjgloks +rosuljoqspxeovaqr[ocjdnpuzmwioylt]txylrlsndrifxiuxuyg[jnubpcjyfzhiwul]pdtcjcrkpmzlayzcty[gasynfnouxnvrplkym]naxwpqsxlsbvyuavty +oxbyqbqmpckkdpfjtr[ggnmfcjtyfspqrqkg]tzapjijawrabozckadp[varichgjrivmseddxv]admqmnzxzqcbapdquwd +jvhvqxvhqfxnjzmv[hwfwxvwhxorzqizc]rpjpwggqxqkaznkuqn +yrsucbqcfaukancrr[nabtowgijsnzryuvbiv]sfpffzxrftnrkjx[qfyfsbkyhetcedf]xdykjbymrqgheanxx[oxchcwrkbqvvfeyi]bztjlknshikocxztjm +iniqqqqprdeznwhr[arooglolfjgprfrbhbm]sczcmpftuhbaagwgedq[yutgzaqyxntjxoglmb]vswbhlspwfulowkif +bjcjrdzwhmssgoinrcj[jobrpyapaxkasve]hzacshssrxkdtrlqhr[yygotqrmvhiqjrja]ljwfwudymzkpczysknf +lrnqnaxtavkhwfebb[vwyqnqkveujnlzv]coizhrfmviizxgz[zklqinvtnwtajyjx]nxvpznyebozrosfgh +ccjjszgrbozbpopagns[abiuzirqfzactus]eemrbqrkhhppvan +xeaifcibybamzzzic[ymvsqllvremyfify]ftgmrkhzswdpbmukcdv[fbyevcnnwtnodgxy]slfjznnldyuvair +ajmeryqwfhniqenmi[bdzlgljpkkgsvpjcy]hqzxecqxmneterlqizz[pzrbbprbhujzpcxhjmh]lvrckyomhvidbiapikk[cyyapugbrwlubpmn]toodggarcneobyz +lehpdvqjccdfpzpo[ssunfejvfxwzlzqy]dvhwfrwiipveqpb +ijmthhifxtkoubt[jcgoxkntpnxkmdp]rzsfekfmamzddgm[szvzrwthulqzcorhnk]lmgsxsjjcagkaysalnj +qmfgzmmoylbruqxoh[uoyinkzbglorxud]frtffuhkchkrwbxfx[urlwigeirzobvhir]pqrqujuwxueommaj +tzjhaiqumjufkzcvphi[lhfohqxxuoqybomckm]qjhpjkjljzekboyc[gvzfehzyrfaarfklybg]fhurcpaukztwesz[lhvnhfgpmunjukye]mdzcvgeehmchcqe +cbyyjbdwzgdhveyw[ockkdpwglixvbom]ozezplbkvaulagw[vmzfmqxplwaqjrf]upytqbnzjrclzfvti[hztxfkqwcuypqyhsfa]sfwcfhrnccesyncbg +zaclpaavkxbpjxse[dmuzswkobdcfmrejhaj]eqdwvpiphijpwrvg +yvectfptgdasqxi[rmpaospaiqhwpjwdru]ollajqbxmfnqmqrdce[jqixwgznolbepskpm]pmyfsrnbdcqdrhplko[pzblovbmbnbwjzsxrk]hgwpjhgshxoozdu +gpnplfnpnmdlhehgazx[gkgcsjdcfnxytzp]wamlpixcrqvbtseb[ijaxccauotewzkgu]usgmgqmezufmgqjslbu +jgtqghpjnbjkmajymfw[isxpkhlvtuyqpscvm]czbrsyeqmjnksov +fjsepwfaxbbsdxlcz[efiljmecvcsybpj]fsvcvvewoepnvqz +nxzdtgomsakdhwefrn[cobjsrlxnkxvmhk]wkfnuypvsigzcnswufj[ttmtjfkbnhmmdebtr]ffumzvnvgitjccgz[offnegtizuxhpqmic]lbhljegbjmldqbzryis +gnnsvlcqoatssjuijb[eaodophfeufuvdodj]jplhbuvzqfgvrqbuy[ezxxqanlgnxdkohew]vsukbzhjshwmmqdkzdh +shfhzsmqdeibrwgyr[slyyksjeywcnuaocadr]kdwnsokrwkajgnwi[zsfujtkhknplyieg]kijuvumdqvjyjpbhl[qyrlzloooajylfrsfk]gwqdkfpitiitrednt +zhmwbilhpywvxrza[tgnybotdqixzolvn]ptxzyjbayyevmcqua[hcmgjpycosutmqbtkf]tboiprpyhwgjceu +ejuvrirctrlirihunm[nfjigabdmqnkfoauuyg]rfwcumqndfgotyx +cxkwlruaswigkrtxxch[fjsovwltjonhegm]zkfawxnzxlkaqawq[rgfftbipxlmelfnpf]qhhslyyiluvowxz[bgxutaxmhxyxxdob]hzthuaqpiyeomlgqqcn +qyzwezoszvwrwiilglw[opryawlpulfkpkmuave]taxeqyunnihulfp[vzxzosekvamoofva]bbtonpohbgdwfmt[xwzkmwrwruatcdqrj]enrapbeqoxrufgp +lowqonzaekybouni[uehkpbaxwfixuwlj]ionorsihznoszwzyq[cnatlobscugfpvpbw]lnsmgieepzvmhvbz[lsjebmtctttclkxqok]jwevnfmcrtmgjyniiuf +ltxumfyzdinfqrlf[jyiwmlpqkbnbgmu]bnicegkghtwivvyozea[qhgoiugrookfmdsln]fpokyqsoknuahpmutnm[smzqellevlxgdbbet]vsadiuyglyyuccgkrz +fvhanaukvcjdkhsydnz[pbjsoundyybhvaqglj]esjjvkdvjmgmlox +hcckhzdfmmvnsmuzjg[uuajvdzksgilxpjmnv]opbmjvfljnqzxkql[pgdelzddxqrfdoqnit]hqrrfnwrokufpybg +ovtjlczqesucgox[kiqphngcbakoelqncyi]jhrwrpwdjxbhnqp[kqvqdyokyuxulxidc]qumskxudarjyagegy +mxrxpfkynragapzrmdv[rdhsbrxgeywqbqh]rpoerdiwdisciarhl +ejbdfeqrdsrijztlibc[beglofnxveiorftulay]jslqibpnunabgqmi +uplsbqledimexhzwnkk[sfreaeitecravsu]exfxqlrumxaeasi +gicahlhkuxbhppe[cypyeqpzkrggfqrielv]pkuwwtbezndgtqhbz[ojnnxanlkamvmpqfj]eozgnkxtbtyecuhs +jtzwiyeueztuiwysyv[awibgssyyssrnuxrvuw]mmyvqfgaaraahzzen[rhscfvdrvagricw]qsqbnurcszgekmp +dxkeveuauhblqnq[oksqvawybtejxmdw]jrbwmyxdggncxitwcms[fvhnmupxnynxmprs]odbifiqqxskxaqn[xwdwagplcltcepjmtf]zsfevibkmzwtzoq +kflcnlkdujmtiug[rwydvjaazfgmfcn]qolbbuxzxhoizfqcwn[tprjkbylcrlvmbggae]pjwhgcmgxzhxbxdceme +donbjfkqtygixfpaa[lhfcyuzcmsgixjbr]njvgmbwgzimrtpdmvf[eonodblqfpgtmex]rkakjzfmuyeajvhs[lmgtvenasnqbyby]jdbxoeqnwoednoncq +laiyueskjnlltkwm[lzrgjwrjchpmnais]pqltpskalrwtmtagvm[luctnpiuqvulmtmw]awlqbuutunlbpusn[hdetxhrtzhkyfktmfn]qpmezabxzrtquidbjc +hritvdzjxipitctgoex[jtbjcyaysbefjme]ebbcyqglydfhqjfa[uwuwqhwanfydpxqk]enevryjyzduawrfc +axxprqpxpifqnwte[qwkkhbywyixngun]ufwcbmerbqiblbdmn[mguzyerbfhpqnybh]gscgmmckgfxvvwgxxm[gfjzckcxdowpwmhmg]hjblyfatzhxjyvlccb +qzzkrqfnnzvgfmrpjr[sktcrqxcctcduir]vmhsrsedrxpnrugm +mpxgzowtjabzwfcbeg[olgfqepvinejmstbrj]fnqxcfzuxojvkscyk[pxbyuusrrbjwrygkxm]wiojjquwvhineivnkys +vqcisychxuswbqlzdkj[jetvpggxtqqguuh]tyllnzfyfphoudijzj[xlnznxybxscqjktjn]oysyrlqascsqbclsb[rzhxpwwrjwakoldm]mrwzibdjlhsdsbew +rttdskfweqmkjolrgsd[gmdwcimmgetwiprem]wkyklvpjyhpzvmsh[zftyxsrvhnioomw]mrvoyvyyrlguwedz[xyrajtcatyabfqigup]srjmohoxwdybksfv +xzeexlrzdznmhbph[vobtfjuyowqppxw]mjxwhgwveozusndvi[jthhtubbkbmdiepfh]gtedeqwesiwzlrfny[tppxuofhnwwkbkysg]aygwlnvczaarhfgkw +zxirxtzlqkptwqd[vwdzostlmrbjclfj]aluxqfcdbjwbeerhr[nsjcafnammlxjafrzaa]kipaqywrtrpkbcdtnyi +vovbpdgnfhmeuadh[bcgvleartfaspvvjjz]ajyzrbirtimuifvs[lykguucpvkxuupcbims]qplsipqneiycefb +alqzdecagmvodcigcd[atmngaijkfehfbc]cprsiaclouvtbpaab[lfrxlrzuuooqdtfirbj]olcjwtrkndcvykp[lelvgglysdxycvk]uyakjndqzxtzmxs +syngsortxjqcdwcz[qkiseyvolwhibxdg]ucuxqdozkfgaxqwovk[eqeessuwvcayhpc]wkhzcbkxgakgxnmho +bhtxesznfkwqbodb[ptpuhbdsvbcjpmnsl]oohvgktjsjwxqgyxov +udnbbnkojrdevgujkg[cramyjeuckywtuw]qtldussgogyblkm[yuwacyafnikvgbibmwn]xvsgxmywenrmhdctxg +uzqtkzkmmeuttwyklv[rgnrxkbavqabukxvnp]whhgpmwocfmplba +kvbjvjxyqiqitikvm[vkzunkivwcpvxng]totvodotoqiqokouz[luzygityrnpuiih]eadddxqveeuujmvnek[nyxhwlkatungkgm]bdhobvhktlnfpjelr +inmnseeoqimzjwzhltk[ntwlsdvvybtdoqciu]jaurhomtnyudxxmslj[wqygsctddywlbxg]apsdlaftsghmhtj +pxieimaprtbntgvm[xuvwwsinhwjjapu]taeomoijctvzyeijfr[gitzztxejfefzvepf]udobxonjlqagrkpaehc[fkqjhfjicleroxp]hxpzoklhbgtngtagcz +lqmoxvnknpqzcgs[zktsmqcgzqjponj]wfhhzvqiqkxfwrrw[actbxtcdlogatfkprc]tvzphmtxfrptzlopv +czdnqiwqhighizbmivy[tptpsvsahslbsovazkk]ycppvkqvuggebgxibe[qutumfpnpzjkgqyfkok]ixywxvmvliftixfie[qipgniycxomhgmwje]vnhxbcnofkcnzep +igvdicnzsefxlgk[dzppkxdievabwyh]fvyywjzcyfcqahv +bjzwblslduiolbezybz[flvsgshhznvzmrxo]lottitaizuksqfihn[kgsgzawzjlqjsep]ihadewtrfpsudggga[oecgswhnbhslysd]flpdpxndzacxeskzmn +syxfjuakhrnntipfpb[xmntswflflstndkv]lityfpfignnxsyirja +unggjaqgvzrckyqx[llllagrmuioghea]qafuiwqpxcljhvf[tevtmuvcyqqrzvrduc]kqnaadyfxfyyzjuco +cpjvjnocqphsagdizq[rzfbvtnodwqrqprvqh]rnlzshtjhrevjgdu[lbozqegfwoaikxbnt]cqmzymvkummuzjfx[vtknqltevighwfdnjv]djhfeemiljlvkgqkpp +adbbbgxmiqomckxesb[dmwxvrammletdiim]eiozjsockohijbiinia[zyjjubdniurametk]ajivyylxbhvkktrzdg[byxiykqfbvpfdzdv]zborzsvqimrhyoyhevj +frshflyhzegyezg[xxaoqtzxuqbamukfxed]klyullmlailfvcz[boefzsdpblwpbna]dbnxivwobykcfwogv +xxycwortiwhndrvlr[mspdwmhyqdwtctlyek]qnzfcwwvvlfsael +fnekkofpuwhttni[mlwvhzrwfdtfnvof]gtlyjqokjymvtkiqdl[gdjobagxsuhudnoi]jgcgyusdyyocqwwtatk[rjujihcuqgdpcbdnkco]iewvagokrzdhhhskv +dfadfbjefyinccgzt[gzoojtdlvqysetfihg]nlsriqansooflahzhoa[vlzwtzgipbaxudxg]htykxxpfmhigbdqsu[pzipnakgdfpajkbqowq]zrwedqiuobogirulfwm +wevlduhhsouwlqxdcfc[bxcvjwespxdkulgun]hfuhwpzgdgqsujeex +zweayhrezaoqibgvc[sosownrvumzvynfpvr]lzubqqqepwraqqdxxy[bniazltbdanpnjjjuox]tulybfbbzeiyidrv[zbebbcdzpcvegcms]jdfofmnlgwrnvann +gkmbgzvludgmjgnrkck[ijywdgxetrginhtaa]yiokddkvhxebbuyrwoy[erhxxldeegvsebr]ujqickibpbjpizhbjw[mtzvltxionpxygo]mbcgbublhkajfdfvf +ddjzsqkoizakmeifr[sigtlzmyyrflvjowj]dyqyfvpkhdulwuj +jivforicorwbkmccpgj[oviyldmrjjzbojbs]wpztdiwcdrwttmfdw[jgylosmbgxlrogsa]htkvwsfczzoascpunqr[uemtqxhcvvphnvktio]xkghvnicljrlndjtsv +zkzjccnvukaraob[asytykcstvxtkvermx]lqgjlittfqpyxcq[dwyrqfxmwryvxjzr]edufjnmxhzxokjgphk[ucthvgtgfpzxikmnjv]yqumujliwpjujnymcen +bhbndmsnnbhspzjby[llodpdecwrlspsbhbhm]zqulqmxwcerescalp +ozkoqhvatxmivox[qffeloluwcgsimvcrnu]pweywrdkmtqjiflvcm +rznstgdzevfsthcc[jpgjzgeibmumtatu]asgwjccfkwzaigwp[soegoylmysqcequdsw]pennknxcwwasonjz +afniplpdesiwqvdioov[xfkwuijxjgtqbhqow]idmgzrcmwzmrfbsubkz[mjwyiznfpjztbfervj]cythmqghdkjcfrt[ekhpwckuwduoexycc]htaeivvotvlstvsrpj +gecbcvpiswzjjeiriav[ivbfdesbkamvngogjb]xphdszgbcburesbfi +uldzgctwccgqdbxrmpo[guiftcqomdqlqua]dmxluytucnlndazic[mhmdapmemlrwmvdzwkn]oqyvwmhlabcwxpzioz +mganrfqbsckpjsnvlh[vlwmfxhxlnnpsghrhmr]eqyrkxjcwpkahqpxeqr +wpbzefalgkbnrke[qruzjqtrkbzsvfgwz]vahtniazgsicquatrg[zzslttuxbwolldy]cuejnzjsuwgkobp[yspyowiamjpzcaqwb]vhakhmjrncjoroe +ycxznczxbzrprsiw[oggkqxyiyvsrmxck]asjjivqayantzzfysr +ewbllymppqrdnaeni[qkytupytcgsftpprv]jfepwibznfbypfnf[lrparpwtkrzlxwep]vdsywhvslycyohef[lxhwibvmyypfrkdsley]kookbjfsapqphmywuu +cfpbgrwdsnrgddzzh[vbqzujunswprxyxnk]efqzsevzxurynhnm[cyctdnsmqdssnmzyrg]vvswrmqzxnrbkhunu[homwjhndwctdbecwh]cdvggafdchgeuqy +lihwrhvzkhbrgct[hmwzxlaycaimxchybqf]ruvcpltuinwybvv[xjbzxcihznlkorih]zxnxeqobqveujyrdnur[ijhueqaqprdlrdcjsh]blwxhcuajnskuntgo +iroxkwgrjpzdodvmohd[wexdltrhssaqwqnh]ynvmdpomrekdsfrjccp +gfusgnroizvfwwcsc[jgvlrznerrnjretc]dcbnruamgkyrowpglv[tbusonvwwycqtfk]oqngfriboradzof[yosalcuxlovxpjnoss]teunwgykswgulguic +bsjpzlhhqvnghwnp[gakhkxegeohljlwz]hfhculyhgdwcflbdt +ataqyejfhrpvpagptx[ufqdptheyevtxqjuqsm]tekvtwjvapcyamluzbn[xxktujajfnprffsvfkc]espinhantulzwpqug[pamkrynxvlrwccp]bgzabgrubbhhwwanvf +qkyfobviahzasbi[dqhxzkbapqmrubogqg]aenfdyclijdpkeqzc[fbetcpbytjywomh]mqzvwjmgiexjfehor[ntwcsnflvlaxmfqh]uvubufoducqwacwio +zvygygjncwkyceve[knrtgwmfgpjlqdzusvb]denyidxiinzvmhkeads[nuqpppqdsbypxncb]pzqujhpprhbxvnuzis[zxyppxjfqtzdplvbegi]imswdcvwdghzhmyyoci +mpiwlfpsupluuwzyqte[mtyfeccxfpcorktwam]jtmnexxnxsdutfve[ktzdkimtvwbcjrr]crdupwumoriklqckirt +clubjinwpyiguop[xummstkqfygcnsu]rektotfjzzguums[hcxlqatyhaqponifaa]vdzuiclpdtepfqmbdiw +sswrlfxpvbjntaovr[cajokjrogvtnguj]jsyxzvoomnfbtcc[lgpureoznbgrfwv]rbrwjeeiqshuvkwub[gzvyjbprnocmpkyk]gzibarcxnwnvuymlxpn +wpdzryxwfahiwguwvtz[epyjrrvvjpkuogtflte]shadblrllcaigwocsw +osmgewmpcqugjqyddn[omtivijufzacwctoaf]rvlwqcfmfuazwlas[wbpvzrbsnzqnhygpexe]vxvfjrrcjutfivtxb +unyfptkouxbhwwur[atheuhcficbccfur]djycwrtnlttopnjcm[pyocjfcogkyoogo]uoogeqkztdvsgdj +gdmorpdnzddjtbzo[hxulwsrafnvyxokoe]flzcmbhukjwjfnxsq[bzqqvrmxihbugam]kwwzidcxteeodrcekl[vtjszsdbmsxqouutvkt]whnkvoierxzhehwcjh +laswazcejcxyzcocca[utnlyecffzypkiocowm]nievutnusvrsixk +xlcgrfodctfmyxvsms[bgnofwciyllnekkiqf]knqjmtgrurhsjrwahoz +enrcvyphrazilaqswz[gdxchlzickidnqfeo]wmadrvyuoczftbdbbij[jxlyycfmgmbujmas]gsreebayzepseakylr +zeenyzzskgvaysxe[drhsgkqipilrdmcl]xyhouejaqgfdhoshp +sclmsgjqcijlilhtyn[tyxuebqjqjqdnzg]rfeqmnwynyzfwsfq[jnrjwlqvcnvziqjqnz]zjyeqebxncecsykm[jizuywrcdskgjpv]nkogvpblfiwwnynxf +rkklgzusmfikiyxsk[zfcqvybbvwxwxlosyhk]pbcybycsiegagdr[jfrnxtonuvihkiueuhz]xlfvapkzcpysqoi +nllzirippgseojljl[oahmzicssbyckdhyb]qqaeuleefpxlwfl[orimgxtsfwsplrbuppt]eyzeliykpnmmklg +sypyjddvabqnknl[zfoknkriiqmevubru]rcxkbkzngjzzcchl +uveautnfudowpkocevc[xqckexnnmsrzxwrgnwo]fbrkssqktfmvbebfs[jmkkvbmhembpojk]vrixaskbnwyzibmtux[evdzaxyibnensgkua]djjjewnszeukvelm +xcidhycxopgdfgzxp[wcybbxckgqmwttrrvq]zjynrtlsoibooaiqg[zzsjshnyyytzmrcskh]lnvmmzokrgnyqfvsi[kjpgxjqiyimfzec]bpdjsrxzsbwigarmwi +zytphsjaeavezjmtjf[ocfrxoepijrllfc]gsnkhdomwvsrvmctk +hjrxkkrrutrkmsiax[zwsclcwdqaukxxwmbgk]jjvxzyshctodfeeonp[eklzpyupurxmcvgndo]neaovsspupkhdclbo +agrgepnpjdjmmzxtoz[yptupgqukzyiwko]zegusqzhdpylmvhgh[ftclkimlyjeiqxymyc]qplgypcugeybdlznf +clmaojwiieaxtkf[hybxxzkuvyvljxs]nqyvgwkyfgwgpvjix[ffrpmlqwqbfqfpyn]wewixukrkkavdgpr[zabgeqjcvdsvydus]crgezocdrhjcufljyf +xwekgqqxadszfqxp[xgftweqykbpaqymyaev]aawdhgjkmwqayhfuja +tynmzjhrddacgjexrr[kgxebvnmaazmffon]qercmbticxiauyauxmp +ueswrzmngurxaqja[yzlfxoaxangzjbyqm]zrwxnhpmqiespczu +caxoesrhrghfcyunxkf[lmalmkbhrhijrvmafw]sdbhqytqtaviurkzi[ozohqgqrkgcbhet]wgwgtjtcfcqzvymnp[zxuhhoxlpsgrfcrejmn]hkopyalfpjzbptgetj +osmyszkhkpaedzdy[xfincacxeotivra]lksiavomozgiywoxrdu +fzbuakjjvpyjimycrt[vvbkutdqqtyjgqz]rxzeygtijyrfiqm[qxcgvagpoqyoxhziej]tfoadqfiddsurhergel[sxqvskkcvlkpavpls]ivztxqjuntogjxx +hphqkgxgqhazalmlqoe[ovhvftdmpwudzdicfkc]tdfnmaosfddlzbhv[obkkfppmoqirgmih]xrsrqaohawnwlxpvq[btfonxzgatdqmohserb]bukakcwcagvcuuwvhtw +cknwenzzehwdrlje[sctyfugmaxgbetxzf]fcsbyyqvoowzutlge +gpjdtjgclynikoh[vicphcxycqsiiiglrsw]bcjlerxdimzupbpnw[waevcaeooffjikclq]nhajkvqepdnzgiijfrm[lvmtxqhswljuvux]rnmiklyolpctfrfgxs +weolymxfeyqemlpxulo[ifjuypsxwrwczhpsw]hziolxpchkfouvegj[svfsshaljdhmwcmu]zqbrupsvenlvvfiuhf +mxvfnwvzsyldqyi[bvfuwmmrksbxbzcmzrz]wktcxsiresexdodbtl[hijoaneecbrhpmaa]xajfvvnvwcocpcbrhbc +pboivziugjszfopvkwa[kdcvzroeislbcymt]plydaqvkrjbbtlutgvv +dtzdswmudibubrthcxc[vgmrnyfsqtutxfq]xwbupswdznzazrecwr[ijppmhwabxmhfgcqu]rwvltmqsymbydmqfnzp +agaxfzobcsjhyutfk[ftmcykjveqrlmvizdt]agbgsgsmhehzvoy +fbgqlgcyjmcjajxgq[xrxyfyshmvxgquv]ubfzmnkgipmqeucbk[ebcveyedtkxwqcni]dvujsyfjdfowgxfh[oubuurnpwusoxrx]bzxtjgpylljsuruwlq +nbctombtbcumuwmay[pryqddzmpxgkjlz]bwwebcrzdpkqlex +pvwqgvrjhkhjycm[luquegjefcvhweovots]vddsjvlawwxvkcepqx[xkomwqdwvymcgtgxky]tmjyqmzqxuhzxjekwpw[jdszwjkhkxkkpjjwkvh]jnlsvhnyijndbcavtlh +ccitzedsdvzmktzl[qjtmlhlgdmhomythbe]skkosmhqaqyxvrpwyvi[toqfnarddgzlwhipiqf]vlallikphqpggunc +aapudqmdqsoadhf[bptieajhwtguxpprkdn]fiopmsokjtonmei[rdcwfyvsmtkqwtpzwcg]pmgiakezkvhfiqxw[bmglrvzatxatgooc]jdkxirlaztzghpcgiot +csxohvjhmjbjmsw[zgvrfjdvjkjrrsc]wbnhtwfofrquxtzynmy[smcwkfovyaozfhhf]yfribcdfykfzsig +mzvhznqsykmcdgkphhu[cmmcxolosuhnkmuwhf]gkzgbqwzbzzurzehdm +yecvknvwvjguxlytj[pncdvmrcqcjmsyix]nvosjrornnfgznaby[tzuoscqaarhjnslab]whvfxspoocikxfkyj +guaouikkjfrtolsug[tzdjiielpgytyhis]gwwwtmdeetytmerjk[sorwxqfcsuhbvecom]wmfmxfovbdjhajcaxyx +ouvjolrkjyetsqlo[vnadgdxvtdkqlgi]pivwtbhwibflcoh +puboxtiwmmabyqgn[zhxzdcswdaavgdaly]ksukgpnictzfxxsuqsk[feoibpurptzvrqy]tytogwcrtiofplr +pyeiwajmvimttmi[pkvpbhnufrwpwdwy]dwdpuymdrskpgfwp +uwctwjpjojxatnyjwm[utlxyebxsfrddigrjh]rwepcpjgrqeafmr +mcibrhjsqyketegjx[wjiejdvcjjaijnmoy]lsjoughndzzedmblz[ovdcmldcmntnxwk]gtjntfaikfbfhuercc +xkcadobnrwjczwpo[izovquqhogzhtajgcfu]feiizljlnxughttxhy +zovyoejioovblepnri[wpjrezfxmhepyyhi]lissctcyvfbtuklymtd[vtakkwrsocdxmyqjkl]idfjftptuoiheqi +fjylzurwqfvphvctbn[wtraagycimmpycsbtw]zdolnnawyfkozoduzht[wqccswxyzozewtayycz]zngifgtxacyrwiacyd +mkdselqpwqchnwxgydj[orjtmojhzkuxfbpmxa]udrbphkhzchgiyq[ckkhkoltyjlfzrro]kdyudnkzdsjpvonrw +bpjaenogjpzaxxkejpa[jqgajznyesxfcdhph]euziwygknckkkkunxux +btjnlodtnbaubkvb[topsbnzgxbfanulah]uksjmxxfwfzxqfcij +zkfnmdwdaviehibtjy[adnmoctsyzhtangoxtk]rjydanokxyuxajmnx[rbamopbudxevhpoezc]mzurnxtacbelmitu[oidbxqghkpqjzyqrrox]ezgwbeyokfmjwblqq +nwefqukauecrgki[ofkmtkzupjriwlml]diautbiayphukxvmhlo[iggbxeudmmbkayonzyc]hkijrjxiffmncybco +ytgimnonvbqexhbabc[jbkbctatpdataxjqtee]bxzwvqoqyazdgoy +bjztbbhxzzuannkyvet[mngxjhitobvkzvls]abhmarswjsswftn[ihxeotxkwnknkbmkvjs]iovgdoevhkarwuraoef[wvsvcnptmpcktslrn]ldjniscnknkjaheayp +avmlgtbubxrilqdbvd[eqaifmlaniocwybqh]juzknvgrahckcrhagh +dyvzlyoefrbtxizlod[ussgexxviaibhrkb]tcgkgkyckgkyewp +jvrsopjyjarbkenouax[gwyjvegfpwvjsdl]crgcqjzhywhasbuzdji[wqqiwpzcllmnopvbf]hpirheoriudpernd +cpykkvqvowwhoiys[yjoethxfromctdkog]cvlcjvgbugyqvqxjbc[ipyvfwhqyocrksd]dsvipsvdgzruhsli +gsyxcrknbxxyhvnss[zymlfgpcupgtzycu]sjucevsghhzpuqe[qldvqrwjankaiexmj]cacvncnvtlbnxfybngh +ndbxeywazfrnghgdjog[vncdnjelecbwcnuecit]obhfqkcyucffwbhk[wiboksymurccujv]kxhiktclvdsgbxt +ieqiuumamwhkexjene[tubauuniiqmzdntax]kxiqlujdvpjqqrtkiy[ubnpvsfjutgvfhpe]fnwawoyfoqqdgyr +lromgmscqlmoqtqrr[wbndhgvivyrvevwpbd]fjvqzyqdkqfpica[isfiiygygruduhleff]lbfsdwsbvndxjord[zmgvcnxjevefjnqx]izvrxpsfekwsaxhzg +vfqitwljrqvsyilpb[ugzycuwrexfoavmalm]dshatbrosrihtwpf +hduooarqszvabcwukj[ajuwsrthbgchctbyuyj]tpzioxoqtyfuwtdccn[jisrxrmnmzhnhotwra]swseywswdlsbzzqqlv +aarocdgubnvehgg[xvfugpdczaccgttycv]nhzocbyrdhlppydelyq[uloucbldnjeulomssv]ayxgxkrslthaspz +dhyljzgyamlcdmmz[zdkwfrroodcyfnfie]zkwhzngaidridcagekh[emzeeodcnuvzddnbm]vtwokrqakoovvcdisvm[nzdlsyrpcsicoedyx]rrnfnhgpaeqtlxv +nxybztwairyftfvig[syeyundkruexgbwyvz]pspeqstftxbbaevhql +sbbhfvvgyscleyxzki[hgjoiilqwuiiogtt]sblfjsptehcxdilpgw +fmynycbkkkiwjllu[iolpwypqrdrnkitax]fwfzssjntanttkkboq[afgwfwvsudpprmpne]fbzhbkoxpxavaskchfq +jcyrspmtzwxqtomkqab[xqivjfrwadfvtfmp]fxkhdbiczckphwhil[ztemqpsvuwhwhfdfip]zxqetcaulofvxrsak +ozgxtokkrotpphxsnt[txgvekxlxkhufcwi]hspcyxwyijgjaqsyfw[bcjgsvsfzmvjklh]bxjmkqkynrusvvq +wofaptbytcugaluqc[qdgdqupqigweysdhq]saaeqyqazqqaunofl[iorcsdtwdhfmajh]owdrcjffsvszwflax +icrmudvzysqefbfgpae[uypfoutavxnzfpcfafy]moghronhxpgorkpypoi[ayrgvytktzzwtfuvfxm]ktoiazynmsksawusbsv[vypyasahxszocsfrcx]wyodebbscuterfrji +otrgqclsvnjpznt[dwzibvrmtngomacr]xtqtbpxdtejwbstddr +csiarmhcmunsjogtwp[nborrnynefhrgwy]lvsacfkgakkbjyny +ijejwezkizvuswn[zfkgmewadvwroqibng]kqhmbrdzuvhcwkwxfwe[mgopomvjdemllzygc]ivzzvgcwpmgjewb +jznavprnlcygwvvj[eobpbcbuqceogtei]jilcppgbqnzzjrjjjx[xurpitsmdxtiihb]pkwkdkckicticboagma +hrarppjudvbccxdepdg[ksabupqjypyrwctd]jzmkavpyparwxrivfq +kjtgdhvqyzisomc[koywiyiymrrjpbqno]vbbusjzesxjpwkrh[zfalkzmohlxcdykl]hdctcfabyzteadzofca[vlbsevgalpsvreryxda]oocgdkoeoxgepsikokz +nckfsyxjdgmgcdyqoaz[cegnbhaksrdfaokttjc]rmfzhgwbszywwzbzpe[nofsbyxiguiaxju]vjjitkzyrugozdspwjy[gwkdakutwllydivtnns]gswugowdiouemkrf +evjgxyciglvcnkjdep[ixmlhpvkldxvcerjb]eqpkpmyqvctcepuljz[aylvsdrrbajlptvfeo]nqmtctitzqxeluw[pkylojlgnaunmolry]patyaqnazqoykcls +yklraufwcbbewrzdnl[dfsdynavgwiwbkmmpo]atqaaprzieowbqafr[udtaocwgbvqqztkykeh]eyzakgtvzrmejksf +gplhegstsxbqvxtnp[sheoxtsrbdxposgmtx]fazbemqbzmssyce +ulhekckzsguaeuectg[msnwinlfedcaqdyb]przurxwotscdzgtcjv[sbqdcqeculwutvfecqm]mjosilvbpgaawll +bjohxvdcujujaoxe[buibijjxplrerpiphn]eorjpmrcugznwsi +yflomjbhtnsgkkx[hhpskaiqhzlmbnpv]lgsdbeankbosyptonh[vxodyzameaaajwc]nwpmycktztqrgmxgbg +eajkclofrzpwbscfuwv[vgcyrfqnycmarafkjc]yfrtobkpkwlmgyckhmt +czamuejkegyxhetxmou[edrrdhmhhtxvpoxvx]wbzihlibvexqyvclzml[dnzwkagaeyicaojzg]wkireqqnngbfxsygz +kwbjoaorrluxekext[ffjrmxvgeqyaoartr]pwxypyiquumrhbz +pyxpvbqfwlpnawrygi[dtqrrjolckhpczlk]mtknbyltlictunxq +cgwtgnafiflwgoims[qdbdbgkqhmtkzmmyuke]cuhipgoscmxtoihh[ieqobhwtcxsehgils]pmtyremzeqhcuinxs +lmcuchgkedjkgbvxjdw[jxqmqodwyieikurcwf]mkfmofgbnxsmluu[rymmyeyhyncfnzobk]jnwjbmejttstvhumye +qsuhfviyinfcwufzu[pqmeenwhbstgguzs]ypqszcvmaxfqwqcvqro[xiofditiroisnpbx]vhftrwgnrxoxciva[esrtbbadduxicftf]vcslxziacmscxaxvnbs +bbfcqaoedfdwphomkh[jnslunmdmvkiyup]gfnnjqweocbybtjdtn +srjpaxfvehavomsjq[nqqcwddbzqvxdacdep]hhpbhajjqaazpqyo[fclqwfkctufgmkqm]pzkwekfirzlcgduifqu +kfmoszcssmucztdn[tllxhkubjuqjmgfeqw]djyeyajqakxkoxpk +peeaqxjifuloiujd[tgplullzdgeqjononx]lsmrbynngeveozz +chytpljkoqzhxfu[izwdbatnmmzzttst]pkfsahxrlgxedvsev[rcxdfirqmtavigilk]lvrudkskrxxyulbjbe +iatlnhdapqsyskgstls[nqzlofurrzibukxddw]yxdwqadthjynwvatmp[bdkndmhtngzerzwqgmx]iclavwyossjrhtoqf +vvanifuojsytdel[dmqjrwfgjqrcyazxa]mivahklphnoapabp[tlwiiuvxlonsucr]fccfhxkvvqeqvclcnr[rankwbxciojgzdhuuu]eycbcqhnkawkwmkxb +kyqnkbwfvcarqcrcfua[toxpqnxiuyvfjlekjk]hfponcmqqsfdzqtlgm +ksrmipfvtrgwofiqxx[dxncthyfpoivapdpf]tzlnjrfggtbgdxec[tmlpzqicqjfhxwjcigo]uzmkhvbltpwdbpxzfpi[yfkkmkzokekiidxpugj]jbmagsjlfozkajt +xhrfhwrsgduyobjodd[pazkwxnflbwbpwxych]yvasgopohztnfcsbc[dohwmwtdklyjkbaqe]cttccmlckzlioizfufc +lygkfdlnlrukwjskxqp[tcskymqclunvdqywv]rhxfxbjftjxdepuwax[eoqchqlngjnnshc]gvjhyrvjgueweik +cehpocjxzxkpnxglhzc[ltjmejyuouzkisdnlah]ytzdlqcewgwzxdz[hcupzenhdmtvigdodq]oivalfgkscgnaxih[opciwwcvzkrsehcznh]iveqylobdjvqqrbb +ofluwuxajcsnkanvg[vwpsezopzkpvhlobfos]gmnrtcprhthefopis[yvcgpesbspnlbvdcdj]unooggcrpjinkxmqsg[stfmzxmnwkyujhwqilj]editpyjnpwaefawwq +cdneyarppztbtwsaqy[euyswrwxaaolxkzgcx]cqqabzealhvuwzo[hvnmwoqlzyjguvyy]goqjeapcwghvfszwsc +hohlnwotueozwhyfgg[bdiawrubvrnulfemv]yohmiujjdfjexybb[uyyzvnainybidqfmll]pyybgwdxcdqdgjp[qpowhiuynwospqdgui]lqdoiaufqbqljkvhgjj +tirxyuvikznzsavp[omifkdfvljmhlrk]ouzmaxynnznyhfrud +iyoipjyrywuhpipcx[zkrusibgupcteuls]rkwpwfppboaxzgkbwuh +yebynyhsovfufkhwoel[rqgwgiuuztoboxqo]tbcahalhrqzpqxhud +mxvixuvpntcsxjzvpy[jnjtyjwuivtsxlko]zugkjugtwymssxd +ddxewdmzqrmjcdx[tehlbyapxxetbkp]lkfkrutmzvjsvynmt[aryjfitktobzfnhcxu]rrbqdbzhgjwwnfpkxbx[ggbsnbwuwlduhlfp]bdniebubtcxsubscaad +osbvoidqyhsnydypy[virseojzmlplzxfwcdk]qyyespqaegmtzgckltr[kjowbsggjlyrbtcxj]poychjfbatvhkrs +rlvvjqnaiasedvpjbr[fufrhampzwdniipjc]oqjmidcyiekvayqfl +hvtczuskhiykvchxno[benlaiuubpaghzlwbf]tarjrksfzvilwquxj[wehwbwsxfuaptyty]gvvlkkyayfstbcut[hxnojqaxevtbvmaz]jnhvumhqfgkaqhumxt +thxtkuentusmryim[hzgibspwboqacdlwc]clsunqcnrlgldjbsvz[scnclutgijjilirutnn]izdwhvipobyzirg[hliollkyedcuomrwyyq]dpibjmbezvzyspmkgwj +apezafwfsqifmip[kuxynugvrndkdifwhd]pixpqmsbuqspsdpqnzw[qfiqdwcdzbtidgm]otzbkrciacwchdnqa[kiblvlkmtkqjzyyv]hnucmptrhrodosk +nuiovzzixafjgvl[slswktlejrrsmxujjrk]cjassomselslooj +vnlustrakmrdrkjwju[nnlzyowyjshralbkgo]jpwjwpehndfweegrnq +hdiueeojljpcqrdkdfk[aseznfnjilqktdx]fubppvpqwksxeiwpm +kjlbdmnhtzcagcpc[wybonbamfkugypt]gnjrawnjietdzhaf +ufmoyzcmcxoqqpsg[hkdzmupftmazbrhul]mypsxfpshzcirslsq[rumehwhrobhrjstjd]tcdatsxbxwzxseileyd[iwyafcoefsrbynl]vedzteatonqliwgyj +wtmyhvmsfoxphqrusjw[ozpswsyjxemnczhga]xeplvzvjzdgqspqjv +wxyocgbulqhbzyekcln[dijevkhdfkfwmppnert]uuxxnhhkbmcegbtugap +ijgtsfvyzgrzjonlq[bxxhmrfelsyxkyxrex]pimhbbzahddhwrhudyo +ydjcoqvktwdjucx[riqvhezqqrwpizvn]pptmsnmubbjzwozxy[rbzbtfnnkeyuvjqhjhu]hnqyyqccouflfzmk +dordtdxwtwahcjcb[gumvtsackxhwojebt]gdzjirhxegmrgishf[ueivwcnfptgagdj]kzqyptwgfykrxqsc +yovgolzpfuxumuusnu[yzmsckgxuxbcfhpovdi]ydcgpjfgjgstljbkc[jnxpktvohnxeoett]wijsttknnkaxhyx +xaajqzktqfslihurb[ssufsbsajcwrysbaweg]odddpcsenmcxilrkp +lhkzyewhnntocluc[witlpxxovbpaeue]zokmfkrsuzblnubzq[qbubewghnsjcnbku]xicstwzulnzadvwgv +pzuhirxrvaghkajqsg[edyrpkukyvidoqbabcu]vfqcnorzlzxypla +xythdypgcqkccfv[zrbuwbhkohddkmbj]dbkreagpyprchmoktz[mehstplzokdjkasge]bypysrypwfqaupkwmad[ywkktyjruqqoexms]xdvcvnaeuiwdtcjcwg +ebmymncvgrkqlusommh[wtkwqtpboedpdwaxoxv]iezxkyrvialjrev +njvacohjeagiztos[afpmzgmxbvpzrkpikb]cxbsozlksnpvdxh +wnpqmnhzhaclqkn[neseqjerkxmpddehzpv]buwoodytrhkaffpb[zpqzycmuzkevvyl]iqdqjuqnmddqdmktojn[ocbknhhzdyzcpzi]srfnmfblqrqzwtusu +paxcryjinpwgadnzgdn[pedljgwehinbuvueies]wykembvekyliivgd[mjonnndjrswlfvlo]vuanwryeqmmovavhf[pouuyesundysqaxzciv]itixbjpcioinvfkh +vmlgtgupmvpnwkh[cpuwomxbeionmrkx]zwjdjcytxjxbzltbp +gxbttoltnwfholw[srbxnbzsdlwegml]ufeghhwivplxych[kesniuppshrvbic]ongllrrsyzxurhxc[ucssycrhethdlhyzd]jvhniomjxluggwtcv +kpwrbbrusxmusejnwz[wbgriazubzccotlcdbh]dxnvqwslhdxbbufe[pobrzwumffnjxfghv]qplrnuqjguonrpmpv[xxwugdzbckpvhhr]vbrmirtrwprtqli +mlonozngubrbmumjxb[vzvxodkubovdionkb]uidfhtqhxxsetsnvy[spdgbqevotzyzhtyy]mjvctpqrtpxrbqeckq +wftjnmpwffdunhwr[nzepzikompkwgje]rahnwuphbxpmwmtwboe[wcwxzwqppyaeihnxrvi]wozbvaemreqcvsoafr +lmfgslqcwpzvgxgmgty[ihjhsbvhdnsbkroszc]scwicucudbqrvtygt[iomkilvjwsofqnjqtd]amzyfxiaogrsdikrgye +fcjsdhrxjiuugivwyk[kazerfwbmgeiituwksg]nalxpcedxoajytfpg[lldrwcgzwhmukpmsvot]yzsnbooxncfhjdqi +ljjwrowxmpvvwvsit[lhezgrfdcwohtllany]huqtnutwnuamaahpwa[ezoifbtagkrzzjybsf]fehkkskjziztlravf +qggqdwibskgshrkyc[bcqhsghufawaskgezjl]tikipezkvitcxtefpg[rwvlyjcgevwbikop]ygxubvtkciptbhi +gmlqugapdwdohic[fbxygwjlnwqygmnxma]sgnfeprkyxrzspd +gtokbujgojpkdtrvt[hxtbjjffjwxnpco]vaxogwcclwrodfdxlfp[hihtvdymxjotbfuyfr]muubeuzwzbdsydkkss +rpqdqfjuutdfbaarkgb[nihwtvhhcmxwbgr]evovoyejllhtmpv[qvkudqduftuvccmeby]caeupguvwobwkccojl +gxqxcqpcbqmscefvj[jodkjejtlvhhyrw]ciduukfamepbpemyol[uchoefnuqlolilidyp]rsjsqlxmjccoipqueq[qlxonqxtccxuwcnrizs]plzdntlmgcnrwawrxdm +jvbbytsctqrwjrdr[xtqorzwdmhunrtevfb]qqxbyumulbmrsbhtx +yoenmlwliczccpkolc[xsolpcnqbbkrani]tzczkjomtarfeqiq +ogxowfxoqczptla[ayzmunzjrhsyyit]ckixtyzdkicgemx[hhubqmeqeenjuwuclx]zjhusfgvemklroia +wtnnwdcuqnxduod[nugtcdeviqkajsqxgvh]ujsnisiydziqndzgtn +eylerocwshewgerk[szefiobgoejulsas]jxmoefzlxhchgmspo +nnwqedoiuhqmmbqewzx[ocxrbmgeqxsjeorfrde]agqexvigcnntkdck[vopzcxqdokfydsh]aajrpilxdhftxbprqn +gieaqwfwcaktnyrak[ckstsfspnaxvkkecu]nywzcpsrpeypytm +nlsmbjepecyztmhys[yseyspewhduijglnxs]nmttyybnzhxcbuvcm +gzimfexrobypudb[fmrtikpcalnxzjco]qbxokzuhvtgzerkwgig[otsumbzbiecnrsfvgox]pnbeigikjxbnesh[ifovbpoycogawpmbtuj]qjoaetsrenrirpvb +ybjllzyznkniidrl[txlisrbknkopgbgutv]rspeuydexyushei +nnigaodunsopocfqf[fdkbcjzyxamtnwn]obloxevzqyrmswtc[jkuniykbwsytpivsh]ceuzwuogyqxferdic +gyuypjyncazpjtbni[aietrzglhhgxscvnwvu]ccqmabbzdawwoctwywe[fassebimijhpenb]bwqtcbfdilruikksetv +ldxvntffkplnjgt[lhwtwwfoyuoumxngqbp]eyoreivfgqwyfet[ylipomgffukvmjynvu]npvyofzmqlyboidqya +tpnxkxbhphxzetonae[sugfadsgjpdwxup]jainzhhwfvgcljydo +uzllwzqtwsmvdpoivdm[geidfnypnnnszjjgc]vtwpieaxgzxbslxld +lzeizipamzynfflhuhz[qzwbfnjeulpgjjn]aapdqkjbpljvnvt[qhauhykubojxcoyuglc]tkflnjrdtjgwilk[aorfkrzlpuhgozwyhj]kmbwxqqwfjxawbj +ivqhauvcbmbzijrl[lbsmgujvpbayaoy]kteathfvlzvbfzdgw[xkpwoqzbkbdgrsjzn]hnihhzpetldtahy[ocottuvddcefplijb]vfolexdinkkgmcdwfyc +vqblvnbutgxixnfcwc[kphevjpgctxpkavh]riyfeqvpyvgckaselrb[ryoltaxliqsnlqdagr]shrflexwtlaivfow +lreoiyjedxzdyhdnlde[levshlupfrkvdfdeav]ehfmfwbetbsduiudzr[uoxbgzrwlqkbkcwo]wjlwlixknhzeuyw +abnhwwybagtjfrh[jaoeeifkdmlksncnjp]rulgazssxsmrrwe[hisspgixyvssxiumqtj]ohkxzqzkfnkvvgvrhgf +drtqdxxqsrkujjyyb[jxitdcumljupwcmxx]kmzgykavruhbplvjjp[tjxjcibazngasivc]iuhgnmtzaozykgtedes[pproeupegraihkv]vuptfrfnrwopiczzkos +kbkxcesohyjlgyynpwe[bkintqjcoqshvve]torkeaaagbkbxosriuc +qklkbdielutwmtwkgz[dtruujvmzvmannceu]xmrwrcevkgapcagtuof[ebouhjnkpgmqairnh]trgbvkjhgjvqmceu +xcoycanpxtathanw[xdfzqcekyrgixxcc]zpbmkgrykuvlldgzh[zltkqabodeywxhtyfkc]jzetstuqnplogpkjyx +pirttznzezsktas[ogefjszaezeqipdhy]tfzgyjkulhtyuhnvf +kxyvrtcpdqieyro[wnvmnmiobotxsispv]qyvdfrfhxkjuqwdtw[qolhrtzasgthtplihxg]gfjpittpnbsymvnotyj[znwgxnufnotguzwgwxd]rdmgzgfprxmavttnoz +mubjhrjxqggcrus[ammffdekmguajiq]wvtsxaabnjzbekpx[thnwbdcskocytas]yimpbasvxqiylaqn[mrrzwqztanrkdqwvw]uvtlhtffzkcautuvm +xbnvzradisweizc[ogurjxmpvzglqbgjlpc]hhujtmvfmcqqcukjvjp[wgkwvyjkwkufvventj]ehdkswmxyekfimbk[ovbdceenqmnrjeqvf]oqvujeqvjlplnzgi +ggbrbreeteveahudoxy[wuvddvvvugkdows]ftzrwbghewsdfqaigt +shelsgoglooyenhx[lylymuuhrtnflwww]muaexmsuihzdiyly +slmxqaktxwfpfgrqv[ekjhbymdpfpiqvm]zybjhwobkrylohor[xflqcdxcgvqpzzdd]txshvtkbijbkbnsh +bpocmihqoplucwnvyb[scxgrmfmuycybgura]yupkvewviiggoszst[suowhbqfktiboyik]hqqmqjvjczoxgeoqof +elmexemdeoaajpjhu[kilercdwmwidrkpx]pvyefsmytxvaxuzsq[xyyhrtmwtglmcqik]spnsavadaexrodemqbq[wzzqmadwqbqbuvdxpmv]tuvloljoyhrqccyd +rzngofliosgytzkunp[cyjzxhswcqeeqhmkjn]ymhsqcfuowylqtjrb[pwocjlxtfqsmelq]ezhrwjlzjtsdqorfsn[iekekpprqmwpdyl]aduyoxkvlkxejyjnqdz +yhwdblscdqhpdbthaac[xadcyjrkldvjlntkxl]tcohssfmczzbomezqdr[wspvzvkctwmmhfujxm]fgxpvtsninxayplzlas[poflalkhzwwqwotgldo]mihbeaapilajefhlxs +xgwckmpjphdwvzujv[svfqqafftzlgoifup]pezixwriwatkcez +mfgtxxoygegwmitbzkt[qxivglwljmpsfzn]mfvhkhhddithgxaokf +npkhgeapbthebsqk[bwoqhnxqzhkkwcm]alwpwqgoitrupvsz[yqvcrithxqfdgzux]adoiatxqsplvllzivzb[fcfyicpoiqaagrb]lummgoxyspqibxaq +vikqemveklzlaqdxvev[tsqfmvvhysvdmlspknc]ejryfsjgnpmxcvks[ecwobztvirmokwcf]siwzbkgxlniwnmhzyhd +ltlhegkfxhbndmfcpo[pmcjzvzmerxvsdo]dijdhpewjuwnatewmg[ylninmvyjhiqvicagy]cqrtolyldnbzfufnju +mxsbpkqgsuhpvsrwzdl[dlrlhbdjvmrjwwthq]rqowmkoukgclzrfh[djjugwzxaaqtqavlo]gdzvdzibnckhkqb[xvfheuckvskmouv]uwrmeqlloqbtbfc +emfplgnlzranlwxnk[ubuhxoejgoxfciarjtr]uzcfagjxdfnewbxxcb +tlkmvlcqcbaqozlwn[lbupwjeefgtoovnrkkh]sdzgkexzxzcpdjgaid[qisspueisheejzkfxdi]inhxlauecmmkpenqqf +fdtrgsgechhugwnidpi[dtwwiqlxgtadmnrtej]hdgoyjhlzdrcjzvl +mtglmkersierfaishps[gilijizfqdzqihkbsd]ieqqthavsiqbkxvrmll[oxznuqiocyxjzymxm]epuxtetrnfrzrlqd[gooprerdkioisowygrb]zzowrurkwngpvvh +tznoyelqlffpalatbs[cmtlsjviihyavtxz]lphzihbzjykeuhuzpg[xqfwolpahmfquhuh]rpqawvkxodxmvfhswz +ybityzvtpsfbovx[yrggwxpkqjtzdvkr]gphdlfythiokoitpcjx[wmfvcehazqfxesy]utjcvxaybxcikaqgrx +olqndwuwjvfqhxt[qfgqmmyeowawqckfh]ngkiagyxtqpdwbrwlm +ukuozdurxxrvljkoi[eysjyckwyiyuopa]fconkkukvvmgnvyn[nwkqsifcwlzjurruho]ryslsdfmhgesmdf +tlchnjfxtkubrlta[rsqsxplnikmqxsyhyoq]xcytyjjduledlzhuh[qudvljyfmodytzaw]hspqkfbkjtsvcwpl[ptfjakjrpvqcqcuhmf]inxwobxnnzfirnvgmmr +gaviilzxljsozua[vmqvdrqoqnztbdmzstt]ufxaggbphqyxgnpcgzm[zglcpiqjhahiqcb]tsiqxcvrwvqistphkj[ebajnjrqotekcerg]kciocwshxzksmunx +cgpgikxsukwvmwi[janhpuvmccsdahfk]rrmkjehchkefwnz[plbujeqhgjvljzkwg]ttwfjicxkkofysgob +girkwjuugyxtovkjr[htizrvsispydidi]wqdtgvsfnuisigmalai +ajbikjzwulcmizeoasw[pkkgiucjnrubiwqoll]gscdqocmpsuvfznqhah[rztusgyvsxaeqfmesh]rarydwrmadghrjtx +hxpxckfcwipinrxk[morfsambyhipqzwl]wzgttlcuikfpvywm[cyebxypkgvxhope]dqazfmcgyppybetn +nrisbenoupwrstlxy[uewucgmzkoyulfbt]bbvorytlrgqknqz[zwseofceynlohaooxzm]hfzyxxxfpjmubbjysld[tetgwcwvhctlndovx]jxflzwtuhkltaqmnuh +nmyrirhwawjtgcgma[ilkcycomeqvcsuwmmq]iridicawanwkaeumbvz +sunhpdrgrjztzvkxnl[mtztitboyfmtysqeqzl]unugkiwrweincocilom +jhoqhwlkzccmtrlrs[tazackiqztlndogrmgz]zsfezvlpuzwmfwee[vcfxoionmgpezbalm]ujdbonopokhkgynmhp[pcdhdmwegmihhkh]dgjjkcyuetspltxpl +siocivjbvwhltkyk[imgupkeeknlltlk]qxfcqnjbjtenubcjasr +hswgnfwswhyngohhyvo[vamsrkcpvakzvbsvls]ehqrevmxiccgfsq[pffckymkoredwdpcmx]vjdjsrqxttbfjqf +qemtumhnmgkgfzfzqho[wfluvctfqhrwznyzfsa]zriirahfdpleznfto[dugecvltxsfumxvjaah]lvudvknmsbudzxoadg +mvrjzvsrconakgifqj[ehgbxxxhfqcigyhuyya]eqofdufzntqtsjukffc[hbzrfurkracnfeig]zmahsqiqbinnlhnvrz[qdajsuhymeavrqpdoy]nspfggpgnwnalzuk +sejkhhjswpiqukaddwc[vwdsuuxtfaxqbrcne]njkrzolxoqpmmua +fumcwsiexfoqklovype[bzxfxytncrmwtfrojv]bfvsmplxarmselz[nrnsymdrakyaqzwivoe]fpvboftrzvkemjgqt[akiqkjrmnvhucjcxk]ynityzhxqopnjpslhg +msoqujlsilpcgchprz[gqdevmuryxipqcgfdwz]wxjkmuhjootmigfietn[flfcoqhksuopnwk]cewizdzpgetongprkb[pqizytyliwhnetg]uknrvmoahsbicmeg +evyofxtcsyfbjtbml[wjqpsedellhzgmvk]emdpcwxuuaccubksbqb[krehpfhgyibfxepo]imvfvflnagwulpcp[cldtyjrcehkgtfyxnws]gaicllkdzufdmja +plinmvdjkaswskiw[zejltttlwtcetjb]uqkwaifdtedvcmiqcs[smlzeqfmbhssmvvmvh]lgypwtxchfxksqgmeb[fqygohnnxmmvazctrl]rwbjopgpdkeejeb +hgxczafqluesrmrtuc[jkowxyxlufhgbmk]zbiycjiafsngeoz[mltnmcbnsrmdjini]wtokbcbelvzibjncpat[dmjqentqrspifbnind]drpbucndawosqjk +hqaysnyyigyfvzsm[vrqjwqmhiywsbblfrq]wseacbmleqwlaci[eisrrgcmewmlsqkremg]hfqkdkghomzddiaeq +qrcyyzpfuupvipsuor[ujvnwghyvsujblbiwy]uofftaesrxvghupknr[divaemcywwpnkeejjo]dmgdiifbkggxpzmfy +qjttccgwnqwdehsoz[dfbrkdapobhqvzom]hqtnzkmtiunvomn +irxyxnmdlzgxmpg[ityfjgihvzrylygz]qollizryghyxjglce +bnibapdblbaoehfbvin[kmummoqopswsmvtgiz]isaumuoiybqckfvkhx +waimkuqinxbmazab[foxenwzsxkkupwo]yjelgjycvabztzb +exxvbdzpyswekjnfmef[tjmrddaazxyynamc]nambmdtnmfhtkiyqqct[patbobzwiwlidazpoc]nzbneeilwcjqnxqwh +obtckokgcgcwbtyww[gxpfdpaggfbadjvdo]trethfifqwrfexv[uiucztyublzgcky]msapdqrbpbwxkoeuidi +yfhewfkbdwvgwvmhqbd[fqginmtqmkcubfvci]aidxbpzcktshamejexi +jjjryxfwjklxrkhhcxu[gwwrmyzrpjmjtmfl]fvjaxkdviibxaodo[csagiwfbhogtnpixzc]miorozrdmimmefh +tzpxkatetacnqzombnn[bwzhrlkgwcolxczvcbg]rplchqjvjthsortjqb[oyqjdlyeyqhqtrfbfh]munhcovgrhuwhvkjzja +slrtmwlceytivwzb[xapqxilotekdngaekz]rzohiqiljdhennylmk[whtwrgrfpxkgqrs]rtlehyggcuplhrfwsvs +vjregfcqrdxbfntljq[xpfnzsjsmphfbppf]kwfjfcrvygtqwtdgh +mnrnbytuhhsxrzgz[nzdxekogduhxbpipobg]ydgjseiypncodnm[oylueeldnmgcwmqhq]svqllgtwmhshzqaxf +xhcxtoxuqumfxatsl[qlkqdcziwtbclcph]ysfpbfueqmlluib[jjvxhqopyhgxgvb]flovcgpyjyubpbdmp +nvpcfbzmykatqdpgpv[eywcemzcjnlhwhfbjv]gcnnnrxczlzbtufuie +rhikymyqgbqbwgw[eeitheuwdamcndqibp]aiikebogsqexfbob[tcsuzyilztxrrqa]wutfkolihzuhbvptoqn +kokyhjebbwniohsgrbr[ggsocxmupmielega]esekvzvbajssesin[ipwqyvkwospydzpmk]byhqabwpjuihcpgipx +pizgcsuyqldtehjc[utwlsnwndcjqnndpppe]qxzxhkayzcicvstxiws[tjqhoiifvxdzdkigtb]zjquhrplvjxruwjpyl +oadivwkprasfyitu[yygivqpjckczybxrq]bezhtnyscekflpszt[eqvoapqpfnmwddehqbe]mnkqjstlvogsipe[vmcrcaytblgxyarcrx]nwvjubzclcaxtdmgl +gimpphsdpyklrcsbk[qphbkjzijutqysed]fpokchopspibqiyyb[owxliqxhpvjjqjzvs]ttjeutzqspjqklxsx[nvxybvsgtxxwagkvg]pximctvjdqxbodwbid +xmgqacsovxksrfnypy[jjybvmwissplkcttnp]ksakyoqvswnbrezeze +xoxquvrpgiiopvepjd[xakbfdhgtdrxixz]uuidqssmeiardumqppv[ewdkbrnwbodzzyb]kuyvmhqxititvvmf +ujuuypsguepvtqiurq[psgjujogkcbqrtrr]ckjvvhzookepzzwyuye +lwnhrcbjrjqarzdx[jezkqlffqqbioajjbnl]zssjjsdouwbegdbnxx +jghqoqlqghfqdfh[jswcksaiwouxhnssqin]kqcasjkrnihqmenbqbh[mgpmbwkzuduzsmnjb]dxsvhizedmabyjo[rbupdqkkgeihkywitk]pcgvmkrlpkbqfhune +eopvqwwlvntomltpv[bwkbunwyjojuxoteyua]arbceqrmsflnytkl +rcgjbumerakfnebou[qimexcxydncncunkhv]frixowswdjgqndoos[zkjdmnsofgvagtnlyph]efpdksfvricswsrn[vxscblhqnzquxmxw]dxnstwznvmwyawith +zjddycxtbubaliviw[cwmjgucnnrbsybtpxu]zhmadkawbwtdlnjwb[qovxqaebehomoacpxyw]qctfbtyvbabebup[bwqjuutjmbgfdznqfa]jzitebxzsshsmoge +hogrxyrrvjayayny[kdweaxnjncgvxhpud]orhfjkslldcjiokooob +jdduztuhjzvbooejd[mcudzrhxonujxksbibe]ybhfelrayyxuuhuwmyx[lgshxdlzxbzcwhuru]zdkvnjkyhausdby +xsuzxmrqkqtxmchz[dmgddhaltnlpfzkf]dexcfjfqdnajuzccluj +ezpxycrcxzxycllpyc[stdgybwrxfzewkqqvzx]sxivpekfrrrqlfhg[nolxlfvwwqvkhou]psuyhkfiyohkogwfmt[zxwiqmslanvyrquhqa]fereljocexswrvs +aeogravcbprgitmqedh[yjqbxvjwrcrbyneghi]lugbamrjgzqaixjxpa[zpvvfxavievwanxkedz]zksdwfkwtrmtaoy +mvchajtfbplmslzxhk[pmkjinpckdvwjliz]lwigecrikkyoijkeow +fnwfspmlakldfdhc[ujbeoudcbtqjmjy]tgitkdutjdhlrkwbts[upqsuxqtzrmwgmbjqyx]ayaivsgiqcuzizeau[fiqnymhyqjapvri]eioouxtbfwduighy +dcuvsezsqwjnsvlqzah[jjzbyxctqhdxfuqer]wztjqxgjynojjur[zkiosthyfrroydaykyc]ocihuyyzvwdoixygzk[psaghlhtqoptvsldbdi]zxqwrhusqligxnoa +tjzqnocojjzktgk[omlfecncaondrqrvwyw]dxwuwvsdiehvzqmafo[ihbhwnmxkbkypmum]enkexramnrjguwuxq +ftdnelzrwzvxobrhjtb[kwnjqdhwztogpvvt]frxznutubezaczhwucd +wtvnfoqoqvuioaotdqv[qwzmcsqjvpkrudkdu]vdcgzytjsihjytaunui[vxnbnlwvtribvbzv]lclrytcczbraubnr[fptsjqwofyngtnurf]izhrnmwjxwvsdcfai +nqmhpgsurlnnjikyotm[nxxdysiylpgivpuc]uofofpqgcbojfofja[gmborbfjvlfokmkjlx]yptrgkpiarzgsgl +polwihnjvtlojae[iyjbafwjoxqcjbwn]ecidvqragdcuotbw[ununcsfdoxstecbass]knnitckftuczdpblih[wylrqjxehihxfvzjn]lpjuibfkwrcmcijkho +gsvfujdbedschya[owwscbzhfkkymsfy]bbxedxnzigfiogb[sebiwzxbshqohku]wqmnnhmldplmhwnngu +cvgevjryjbmodqfw[jskismdjblbsjgmhilp]xhjlblnepxqayxpw[pmifrcxnxmadetumwm]lvjmmbceghwqdmk +jgssirdflqhglgopgx[epcwzeqqkidejdrw]mjnozbbmubmqooiqr[wacqyepsgljjipi]vowguayfwcghbghhoyp +tfkqxobejvvmglhqrgw[ddleaoforgpypavf]flnaiggwuxdbldb[rqqrjlzosctaouurtsr]bduvfxlomgfdwhxj +iwhaxbggngkgdfi[xklwprhyorwyfcyo]lbrfcbprxedylzpfjk +ixorpegqzuxidsasn[pwuwcywpavudpbkmdrk]stfjklbehmjdobcr[ziugachuezezjsw]dzwuijfiexsbbxjcga +lcstmefgsfxelap[iaroxcldkoxjprhpni]erzoueqtwtyftuvz +gsnvneyjuacyhipd[aglvnvpawajzbbgk]ptnrpilavksgzjyyo +frxawoaynynrnxzk[agbtdjypjtpqskh]ljshzsnnynqotgog[ckariglbjzvbcedrap]sqdkygpetxuwfnk +nuxleplcklptuce[fxsyqwfblquzwqjw]ndnvzriqecbqphdoc[pmvfypuinsxgglg]vcgzvoddzudwrapmyh[laengialdtihgzitt]ktbypjipfpnczyqw +snghsdifwlabsbpzw[xgnrqjnhwdqkbhowzaz]cygljjwohwpzvxuaw +hhxorrjxjnhcavt[lkeigkktbiaquqqh]ernbnsmtunqyccft[jiespyeonlsjliwt]vbhzvdhvvgsdgijg[lkxvfabwpujiaeaidj]dkilxjpizbzeqxkzt +ukgapmfifvftpexnr[jydugqlbqyhvbsmoxd]kwvttiyqdmyaxidts[lqfofueuycoihkxig]vqbdiqazwnqetguq[fxhgbqqsilfcaflj]oissblxkisbkmolspwp +hanudfleaqpnnykwfu[kllfsqanmahiwkqz]mkyztkpwilxirukacz[vnwdxbzbjrcvmmbx]lsjlgrnzdilnkxp[hhepketmdumjgjjsu]zrgaagprkrmgggpk +qcaodhkekjwrjeu[bvbkikapkhneodeaqox]xxshbrfdxgvyabbuj[nnyshhdaogsermyisk]ieutdajlitenkmoh +ryfcblckaejcahgy[kymhoizkyffsxybzdta]olmhiudvbcfbkjb +jryuwyprwczmcczi[vtijzvfbpssohcdgv]qizkalsooznmasljh[sdvwxkvydoikgjtomxh]ixzqpazdakfwczn[tyjorxvairghzrqi]aunhzwxnkjqryibre +mlcynvuzmmcgoqkft[fkeqzbjanvjoieooecy]muvosxtjytdkhuh[gsdxscdehocmajsnhn]kvqitwpizpjwzmeb[kpnyyoozocsxurfl]obfvxcgoavxoiyy +tunaljqogcgofeh[ivxhcnvflsbnmktk]akwwtuwpdpbnesmrklw +hicudrdjoglrnongron[mxaxjxojmjgutxg]tbetamqqcheyjbpa[itozzzbcpnyerpth]brqcvektqfaxazdfivl +pdyuonakwvugssuduom[swhnhhzcbkrrpovuomy]ecfconssgftuhtwswfd[mjdgnwmncbjoxlinm]oklhmwptexymbgyfdaa +hcxljuahgmiolty[kulhszpqyvsurma]xwknankkjfsieauadw[anajqqpwdkodeaagy]iupvtabiqsykmohiisl +qruhviuomiixcoarv[idffbgdhamsshlinl]ygsinapdnmzvgit[xinvdhbqhbvqrjx]zdamlvlunjkkhof +zyeynxvzdmmiybab[vhgjepcwqjbolwnft]aopzcryhnpswgmds[yynbcrcgegnrpsk]munxtddzxyvzwwcosq[igdwjifdopnhwzv]oyebiutkmraayzr +onkgxvprjaynfipxeum[jjwmjcepwxbleahq]ofvhiwoyxmfnjbn +jdwjapulavrgiviora[vnwjfwpsfcdkhamtg]jqcgsuleganytwsm[qajmdsarjnocjpq]lxpalpkeehxjdslu +mzyzoemluwoovah[bydwxptnmzqxdqfgdgk]hekhqzpgilidwvpey[ouhnrujqyhnlilh]qjarvqynycolakyiu[wzeffbptmwixrmr]bowqsnjgurjpkuc +jawvxlepzelbjymcke[atwksupwtnjjnkwe]xqqcmguandaqptp[yqsfhnssllituzzwa]xbgaqeuqtnclehgr +xumjolgnaowjdoq[obqxrncwytcvrsa]tivvsxdntkrivblx[nfiworqsxjvwyki]nxnpoipcjqeeukx +svkoyidvkhkvock[htgrjltotuunrwka]uqyezwkltzsjtaysa[tqaaskeswcllblpnozj]yizblbkqgvblvqghvk +lfqasqaubbgirmw[xxpjcwlwjsklklgyrk]fwckfwwekdgcesswh[xkcxlxtanadezjpva]naodeooepetabkh +mtbhzeufmgeskqsp[deibjhufkntahso]oxebgcgzvpudozi +epuzizxnxpmgjkabqfb[fmteazugbgjgozgsmhl]conlsruhnwdekaxf[zimnpzazgotaghhaq]gmkwnkivobskmeafcck +epbvuluuhaazalp[dtsthsijbzgbvwzwgpo]blfatalfityajcpmyc[bbypikyeizyfntdt]tcnzahhiwutntyt +vailqzvutssuxjy[llxrpxlpcojwmab]kqpqrpogogkpefajeuj[afzpfhjmpnestctyqz]mdggrbuuglbmweujgxl[qhheeepqrcbdfhlxoo]lxvrdwpugjperwt +roreocnumcerxnrhr[ricaoyebqjpgzazssc]xzuqnzfgbrcvfnmpcgs +uludakjsmsamkpmy[ropmbbvjvupftps]swngrcigiqzdkie[hjhbsazzxdxrseczxyi]pjymgjgdksaalxbav +ftvggoxgdteaxbrq[tifvvmwnraoiprgs]xopjvpddfjnbmcuxpu +buzursiffpqcwnlsl[plvkitdlxiyiotdk]anlvhgektgbpslsiai[gdgwwvjcdnywwguf]bydbjfxclhxyfgruke +indbphvhghzxsuy[izgrijghgwhcooc]gkaqbcpwwiyfwmv[xxlzhbqmxquoawq]gbazvlthqbviupchz +qofufmkbljfygwxym[egvtczslvioufuzsyk]uscakosnjpjbcrggach[gnyghyvmgirmwolh]rotkdpwevcsipnxjokp +jwaktcuuojllglwmr[dfntqdtznawzmzgwbj]gjykvnqmtzelkaus[eghpxrcnnhijhev]osfvouazhsijprtbtnm +rqrtzzgqsnzzfntl[mrleyuyknyxyjhoibf]mwxfdxpeiyuhjcbdyi +xgqwglrrdtupbjlmy[ayygnszmebgddghqg]hslqxsvijohmvklknkz +sfqhncgimlzgjqs[vsudwekhrjuwjgig]fwkpceyrznigiwq +bellebgmjpcruwv[njhctgeptjieourukf]sgybshminsxktqlfxr +mpwnzwvblaseycnljze[qhrfygccokretvo]ydomrtoamoecceekrr[lgslvkhwnmsovxvhqhs]cbyuvbrusqqpvkmlhm[wrvxwjyyzsvxvxwpdq]amynjoncmemftlnqa +iniemtnmqwdmxvpicqn[drdrbflsylzhzltq]orjcjdsbzijkfwhdhz[mrfovzdsugacpyvlaj]azjikxjuaszxpapss +ynnxsnsrjdaqbbaa[lyifxbzcyzenzpzzulj]xejnjfbuykeojbeatvf[uhpeylmwgllqxtj]hirppxrtcuybulsuek[tzbdcyvsbmqtrzbakxj]kzpsdszfyuvgbtlksus +ujrrrtdxpyhlpcyxs[molsrkbbxoexpbqhnhx]aesumqacmujuchpxv[jlwaktyumxuiyvt]mmwjujsvuvxsxxmsfr +uehksybnnztmczl[suqgywouppzavyoi]zbndcbjuexdgscb[cliuxzpullifofbhgy]kupndcjvxqiavpk[hqgafivwddbbepkvjj]lrqalseezuhjjbkese +djidmbcuqbjpfolm[cbbrttiwmetodejw]ghgnojuvsogrchwfp[qpikwfkqkfphshxbmxm]gsinzrkbzacyutlxso +nvvjtnsnglopvcmna[opnjujeqmpgipfm]rudoacagklnjajjye[fqrtapichjqkhhf]zpkowfxfuoecvzq[juwjiqcolafbxzsw]fogkbzmrovqvbxbxeb +ixciqkqggdxskbso[wkjptmoonusnkzyadmx]tvbhebhhaqhopjbjqht +gepgaafxcogfkyecgs[jdqmpkhjkqefzkwxglq]zfpkqukaelflilmzwph[fndatrnmtrwgbwpj]bndevgsiouveums[fqxvkjthzmyryobt]ywgqodizmhsymako +gjlyyrwgrugaulnj[zwsmlmyahggpvugef]ppqrrbxasqowhwz[ngwudjmonpelxhubwnj]ucfcaicagnbvlboiwky +lfckmicaonarlbnu[qnigowwaziwjlmf]ihypnqqozcilwpm +xmtcgkcyfjppjwaa[jlzhrxmfyfjfmadttpo]vucnncbadihuewzn +sviknjiphswrawyskzz[vlsdhjduekvalqgwy]qlvefwhnwmxrzgxq[dwnapnjsuiowoqjts]pnepuekbrlbsswijr +fknvwkusyvzledp[qzplkidoxmvxrxcfs]jxdhirqylkerndfd[vlqmngoqxsbmljcle]rtwemwvqkpfwfri +cujhxofpcjpskrgn[jxxgrxhgnutgsusruvy]dewdqleqewbqftd[nfjzhgvvqummwzhyd]yrccepfnpbehqei +dmfygizbsbrtgnzam[xdnnacheufcqahvx]rxtljkenkwxgkhrwos[xnxicyqemngzgjp]slcfzksterjpmiz[okdqdoipoqwcoyfyamu]cmoedniphnfddoywbne +oafdrqypmxjzxbxutj[yzlsdipaswmgyay]xwllqynhfregxpwc[tjgxnibylfayarir]phswgvlkkfjjetrhdl[pkcutagssxligtwbd]xrvonaibaytcqnhgc +ivalpefzoxwoqycavx[wnrysytaesivblx]dblopqsupplgoom[vxtobrfntcvixltcb]kzktacrarmtwuhkcoin[eviwodeyddmsfkvhzue]drtrnlgrndrxgcp +aygkprnkwdzydlmww[firwrjxyrnqlvycccg]lcqurfdlcrvbzctz[cxzfxjybrqysasrppqr]domoafryutthljppcg +uowwwiqusrqkpamdm[cppbcnmcxpecyoey]ndmdrcadjoukusxjfl +mueapqgbxuyuttzaw[eojhbogjbfdbhyqjp]sxsjeclolvcjexxvxij[zugkiortijshaocu]mfayspauxoxdwkbj +swusnwjcduzzhsjhykq[jhweoafdbntsmxcg]fwqrvlhlltfeygpcnyi[wzibgavydimypgdao]ocomuevbncyimhlbppq +vzatvkicsxcmgcx[lembxneuonlldqupk]svfxiuungebjjgfre[ijwzrpepzkmvdwrjck]bhjiggmcfirhzyjljkd +nlauzkixeqoldqwd[dwvmcwkqnwjlzqscj]hnnwnarbtuijzys[umpmhpnsrbypmpulhf]nijrnkqfvbyjfvgseaw +gefcvkqyyecmnorr[unfzknqltdwwrejeix]quyfoemcjnbrarjuowo[znhhaogjluucobyvq]nozfnuqwkqrcbtwujxt +keerveohuokinft[vtganysszjzosaco]ufsxvtiyupbeddibmt[wrlgimiwaspamrdp]wdjcaxuqikgauum[jpwldupwbuuufjnx]tumqrmftbkrmohls +rtgtdqksqxgvgxadbjy[uclopjtrzpccvdpjq]hiqaonacbzvgvigg[dirbsktzndttpzmtznz]laimumxqrcnhoitaokp +iqthbpkfocdhsvzje[jbxkmkvmrbnqjwlp]kycbbizaasoayspojv[iojspytksdfugqsqhvf]dlkjrsotrfugfft[zuzflpijcwgbioujw]tgyhlfclaxcsjnavdkh +lmekqqiuknygtdo[ramnjnqzfihksfpoqsv]jhhvgphkjifxgap[dmpwxrhmhkwfsfgtn]mfzdjfhxmkrascd +fywgfyehgheiqhbayw[ntuqlvjvldeyzokdepc]jrqpaluvezoujks[ijkurhccihukzuis]cljvkxweuvldevt +udnphzgdlussuatatj[phfqqkmuhvlehlo]cyvspnwlrcmatbwoua +lozehtimrottjudo[krocuifdrqwhsmm]uhauuuzfssimtfl[lyshrfrnvlueierymi]xogtepsflxfwcpau[nurlztguypvwjvoldsn]yxwnuqtvewgmlbfj +qkioxzfrxxwbcddg[iecvjowpxnrevqrhl]qxpciafqndxasahsvoo[adfpiuoapzqsasajd]lduzndmefgsvzzdpmcg +klfxwvnampkmmqjmfc[pcaeswcdleyweirmxpv]jnwkgamdjeoakjcnuep[hjwzdndjlvqfzkarwk]ewwgtcnyjuczgmyif[eaaehzgwbkdfbcgbz]eeioocxrjsulyuj +eptlgbashiewmonaaal[ohtsrundioavfrouii]aydjhcanascnanbfzvd +ikhfkzncdqyitenbg[ldqqsrhumdmiraztslw]aydpjfypxqllkevec[aponlfgxnzgcaddwt]yxlzqyhbilnsgjen[dwdrsgergyrzumtlpvd]srlqivkdhbdbevnq +xpjwxwgiyzqfwajto[msisxrvzebbtxiv]zkuujbuznilsymuuxq +vkmqsygowhcqzdxlslt[fnaztaplxaputnm]ykkslsosxwczlrwbpmc[orlhcrbdjuujhaj]odtfvozkxuwqdpsm +qqxdpjpmujaveczctbz[gulkmdfhbgvyxuyd]jtxafmzqwqxauaxjt[jgfnrwhgdtkwdfgt]unidfciwdvpazpgfa +lfcczmpjpqgqonvcvb[iflurylkaiuflxp]dbepqquyeagxsmrhbwr[vjjohmujkozstni]suvejhnfwknjusxgxwr[wkjnfmxxzwulujmw]qyawlzkyazbwftlw +uwmrxdaxrlsvujdjrm[dmdnqcmdmnmnhhwicwk]uowycyvqvjwrjgtpfqu +zbxlifyzwnwujvs[pyyyjxylpmpwgbh]iutvnonqqqtbxisfopf[qevehnvgqgkyfuqr]mqrcuibiihlwdrzd +rxlnsbgsuofdjgifrnu[eougczwqhpbyqjpo]rokdsivylwcqepdyhfp +yhzwpokjwnqbwtsxuh[ekjrlmzyakgkzlemnxp]gbktdprzdyhcifmigxt +ewjfrgfxriqmbvczdtw[wlbdrngfgnwdvkt]vxgbaaggmwndxlms[vupgwxfgfpxtnen]kfeekrdualqqnril +awkkejmtiopfrqfasgn[alciuobkmtbxngulv]qlowmadlrlapsquuhw[hhtlyfkusvlwunbbjod]seacetmksrrodjqdffk[aunntgaemlyoabfgpf]yrlrzbdjfejbmskdtrz +uegpnmuaxvvpcsuzi[pxcbpsgaecuqyhvov]oiyjoyraxkymelqg +ffpelsnrffyfzzfdb[ymtulkndbgguyivf]uauzvyseztbkdvxow +omolchhfvuuzzbodx[zhvhxrqwbdhfwlnn]wyyrsjfjsfyafjfpoe +puihcjkezjyjjfl[cornhtqjyqlebvqyl]dbemzlxolqxpzoi[qeihkchqoewcabbwog]rlfloutfwlcjywygd[glqjydslofkcstjxd]oxcycaaadlnxfkl +hbxhlyelfyszkzyc[cdxcsyocdiifefpytl]wxefesokgwwvcrp +vdqcqggyjstyefs[yiskvcmdlbyuwzdom]cwmntthjhfyzlus[dpoubuwkbwrkpfvlgf]zryvvtowakcyclcg +kcpbllbamycbuynia[duyxsbzyzibjwejygq]mszplxmgtkqorlklg[kkbpzdcqtwkteqfpm]nvgoipyzmaxtizqkxk[dkjpvseaxvosmsh]ourguqaabxzzovsn +ovojqexhiiwdqunfvpy[ijzonrwpmtbftrqgs]zkmuxgcckijagmj[oygvczrrilsowmxrcwq]jpwamodaidqrzmal[yglvklzzljuqykuxte]cifhyowckekufubnmu +hqsemgdtjpiikngtrd[bqryvzqcejlkziqbeg]gycysifcawyjyeu +tgdpvbxtvxlyqvouu[xqefdugumgqctwvihz]yxymyatxjpknmpb +mghmbjssqzjlzlg[kilmyfmenoqjnmwg]hzuujufmwyperhvdl +ieqarqlveeycgazb[azjmtbkbixtazbcv]xroiknhtlbefpgh[xnhgnpluemfqqkxg]okbkpxswfoikufwzazc +phtjaokeiocojxb[snjwozbjnpwckhr]cjwsbiopkgqjjaz[rxkobmvupvjvobifvx]edubeedqalxklpb[nyfuqcxwtynmofmfg]zwdaaonmcoczxvfr +fddrwtloipcoigpruvm[nmnolrurottdlkhfwzy]dzztqofiytbyhhzwsy[ovdmmhigvmzuuji]jirdnbaefkkdpgi[orlijsvzupzadsvi]mnmwussnnikjigkkr +gspafobrohvirgeaxdq[igehxnlnjtwfcuc]aeibhshuiyekgcymyty[xhoayxpksnfvdzjwh]ktkoteqwnsouvwcftyu[eqfnhshsnakdnxwonzz]wwfzvzaupuirropirue +bpyvotpfgrefzidpn[pyvnycicdpcutcayrv]twcjgpggepbtnute[fdumsgxervdixwv]ydccutccndbxxfjrxh +okzxxrtdrfviychsj[ymguzlptohblvsj]ofquaojgbjuxhkrm[ingfugdcfpjtyoj]xwplthdujgksrosmv +jbwwuuqkuwrrzxmuwh[hxqptnyqwndsntckqex]mgmaotcyybmuihu +rojskmdnydeouqz[cdmuavkcabowcozhe]znwaohorcanpbyhjii[gkpcxjhxnhligil]qbzwurxyzdakgsnwvh[ettfivzqkrrenpxmsj]dfbcrgpjbivcpcpcoqr +iztjhisgpskdgwxwfdq[avnaibsrkfmlavnyuce]innbnunmtkplvdhq[lxexsvmjqjzpswjyrju]adcnelughetzceb[cmafkyaouzplrel]iqhabfxgwxdrqojp +mcxijhkidamijcggv[buvpvujncpcwxvvt]xortwrcnebozerevim[ylisqiexudovelmczm]sophxrbvffupehspu +tdbjhtyvoiflmgdt[lbwyayxikccooiw]rbhpfinzxpaayibe[twvandevzmehmiiot]npuymvedotdclzovsq +jtfyyycvwwukxvfbpq[acoshjowooeituuy]xicaiqqcrtpkwtu[lnnokqhsagantfsyl]kchtjwkppjyxtwjh +vfzsxxvmxhdpjrlm[wpzhdncopnapfijmlcr]lqhsravxxgptgjs[wwyuluteptkhznh]tthklcbbtbvhauug[nfplnscrhldnwtdyzqe]ockiyqmpnksijbf +dlnpcnognelscok[ibbeqsbqltfskgcgqb]htrpytqxmucqlnane[vtltdgsfjrwohtc]sbykausqnffmqkv +kxnaikbdqxcponrlivi[pxltpufeegjrawwanax]apuwyiawecyuqhgjc[vtenugjmwgebqzdt]jpstgvxeivppyaqwdbh +bjnvrqvazthxmzqe[vhhndcvzvvtdjpu]xvyoyqrjtbnonsstb +rglwwateiuipzihomf[rvlceqfsjsdeajp]umwquiuviykogvs[nyxtxtkhyplexemcvjk]kgqhfvraxxybvapgs +jfhopiiqntjmgdsj[lrijxadhlagitvp]uiwltkpdmqcvklmj[celhtexfpelokeyl]jucghcilfpxmuhsxlj[lnzbuosgycapkcujcsq]uipyywsuzrkxcxma +zbczjtvnmirbqohanm[bssrqrthbgrtjlfdeyh]sajloorydqhdlpfx[twqasimfthlutzbvc]xdyjyaewqxknvdz[exppwmacezbuavlhe]cldjcsqujgldchzigys +xvhlvnfixnvekmxfzr[mnmpxowwvahbtuiltn]facqroxwyyelgbeupk[liawlvgwyfizmas]yxgndlsxircarikrb +yjisbltbmhloiojwzy[uiqmflerfnevkzvnfmy]kecwgynuudxejjvth[joscliommzmbkqcqa]pwypdesmkawikue +hsiwncahwnipmmjwspf[icngtprynzjdnsgmh]htclvcobutyrczggpic[saypixczichbjeve]jmpwkwrnvhjcpglrul +aagdbakqyfriiolq[cjlhszgovtyhykgikl]excahvgfswdnpezh[typkmvlnkgjkmherbx]zuhrtvvwvcvhuzalde +qdunnnxbbpkljlj[opuhjxcwbtvnyzd]gqsaxqcmgmnagnim[sbbkqokcljlriqvwlj]vvgscumyxkrpmyrwz +drtuyztubzingcdvpy[ichljckfcgomhcfah]wpkgosokfjvzabii[gufmzunfeecjsbgg]pbtuedlavgbxdqq[vbbhreveuzdzbjygt]kglhdfghynsujkvnug +iccedgowicdllievwww[jrxauxixbmexkgfvvz]fysjaucelduzrxp[kubsdwfsoejcskemvl]wszejdloyalatpjq +oujirnbrjgnlqaksps[lphfkzalpspyhuxf]kuscphbgysuwhwyhot +vwpxodocwmfhzkhyf[srbxugrfpcalangfdj]bopxssvinpngkthdqyw[vkkyaqsjhizvounptrb]iiwhyeuatcqnojoidrn[xiuphhwusooiewosd]gggtfejwtpburzqyr +ysoiymdfphxmwlmlbm[nudcbwwqdfabqxc]adsnqcsxmpxwrhdwp[kullnmgtapmantsqr]ykmzsizznrmofzmy[cxnrxafdhfprlarkd]pffnyurmoaxrpvd +pouuuowcgcsgvuznt[wvbnsxurcwwxhkpdg]oncpjgpynhzxyvi +vlyfxbogdlwgzbuy[bkgdkemihxctcppam]ckevcpesenqjadifwz[smxfhxaidkueomhxyc]qwokiceophbpdyjovvy[tmzeqvagzhvviakrh]hionrvofdutctqdb +upsxlrmcnqiikdzhlcy[hehttqfmtzwgrmxfo]irippmddtqadjgytw[zkxutgforgpenbx]coziqjvbhjetosrtek +oewwtzgqsoedpidbn[rjmmegjghjfposhp]tgddsmuqxnvfpopcg[iwwvjgzvbmkhcmlhm]teygdquxhyhkrtiyjse[sknqnxtiutqtavvf]bcqiwxuliuhpeto +pdejprrltzgdddqhod[jgwgzdgvdopqgknwbqt]jaxeauvefzuvvgxlid[fpahofmhzzirjuw]enbiyknxsjhuxzx[bicvtjwkkhelcgebywj]ldvpqmpgzvihjkejl +oazlgrzhvtekbje[rcnbajbbtikrfapsnuh]gtddpwaqibjnpmfhp[zxarpxagmnzespusnm]svtfacsjwezouqnyfa[ujbucyylrrvuijybde]bgumlrbysgompdeo +eyescsulrvrxyngf[wpzojptmtmqywwvdz]oicscctycvplkhsb +ecwhdlfufxxytti[tjpmriwkymqufurtux]kvcdcihmfxydmxb +tmlzauuiszcwimcvli[vnvyjnebqbpoaotvcre]eupqvhojcmoweveps[cmjkegzrkspdwmdyuo]rjcxvzssaopikbi +wmgjjrccewrspnkcdg[kqagiunuhskruqpsmql]histajgekuklfzmu[caldsteatfkgwqogjb]hwweftyntccwfmw +lvwovmvymkxwcvuvuov[sxedhxpfwkndxgtwn]jnpctsvjkqsybbfy[coophwmyxhbhjjzvf]applfppvbrejnvz[ipytgyblyicrnet]ogktxhleyrrhjwqqt +xuiednrxcdyejmgcsg[mlmhqtzingaekkj]xmvjiydsuffmteb +zyweldtmlathqbd[zsskrkndiopdfqocigx]mpflfwtncuwjcnnvhf +chmlgfccuyimavif[kpgcuavqzwvekmahgxu]zrrkiipozbierayt[ooxqyjdkmmuaonht]qhifgfwmnavhlgnz[cnbosuyqrbqiuye]ksvsrroennhnxup +agxsrnpuwtpthaijwgi[fhyxwctpsxqkkypdfie]craulpcmyeifxluxu[yypagmcumxjcraxnvpz]zdgmbgteapcjwwzaive[rowspqgmcvqudjxm]qydbkwdeuraznvzzno +rhlhblmxdccpvudu[jhbawwnkolhlfssiw]rahopqrzbhdivhkrl[sdyjjbmlxlpcfabw]olocfasvuwqfxbbynn +xzbhnrzyvfvbrodi[kikpaqjccdhwfmjps]tqeliktvbjjnbpxwtq[jqjvumyqcjodqippp]ufaxyqyvdhjxccwbsfe[pxiqyqpvccnocmbinr]fqjralzkdemnowygd +lvbihonzfclpqyijtk[tzokuoeriylwwjahfud]vqbyrpbchllhsmeodxl[ktbdicmiebbpuxnyi]guxcypoxyjhshqgshs +nnmyoxtukxhrsgt[ecovrntpmkcaekonw]ncfzdxdlawbwtxqpkik[fkkkkxidubuatpihcnc]wqxmtvyakouvijt[tjvyhgempiufanh]bcibhdmbmbmmbyyi +jjyiltmpfvlkclthbz[icijdepekvlffegr]xnmbqmdiaskvieeudt[clfecicrgtuxodur]kqcqrnvwfdhpibndt[xsieatgypudmiedmfo]eqaouqptjuohpzbxml +waqqyhmfacfjbfasug[mbghdrtwrqihjje]jczikhpsasvutpmb[obwkagptmpwgjbhev]ozwfarybcfhihoku +tocybmyipesjprx[jdsdjyflopvltwsccxe]esswfgrsjawbduxuu +qwdwzgezyklxtmnd[uikylllxmtfhnwh]dmozabuomdvhcoz +tffooggeeufibvgyy[walfmmmfaegxaua]woxfjealuwsjajkk +aipayrjoievpqkqcb[pcnirwsnebqijke]ocpwinpdigoxudcksgx[vvuxytomiqmmacndtk]lkwmarnwqvzulsxofid +jwrefdombiesxvvap[fwhhajyhfaqzgym]gersxvbwsbqezoxcg[iaetgujgempehiaxx]llbgjukufbvdfxvjs +hexdafengwxaarjkqhe[brxnqkfcyltwlxc]tfqwhqspdfcgajfzlak[shtfaywffbchkkk]txpanajvkwazozn[jzfxmgozivlbctstlz]paxycypplmjazycksx +rwttdrhdouzvmhalwc[ozryzmmhwztywhuif]favxmwzmgawjdmcho +sndufqsbyhdkyathrxm[spluzodshkuiqhrm]gwctupgaumdalep[urynlbtsukjumpcrgar]mvgkstgtaxmtiufho +miypgghnpfhpcndife[uogotzsxnulstsucja]wrdogybnlkagqdtv[uerlwvvqvxrvtsaycg]bxpngxvmakjdvvdqfed +hgcyvldphesdmdma[inomdckqkhupvxmc]avlnivtukipmdmts +vgjaofvwaodncajhg[wmqzkrqiwbxdfsgdc]uzsywyzfptypsbto[lwfowjvhczggllfrw]nwchgcixmkxheceuq[eanuozoreimfpjooin]btyiwwfizhdbpfazpjx +ldsqkerydfisskoimys[ltqspskmalvyujfyrqt]dtyknopltmnvdtc +ekrdpdzvkoxfkjfpx[dpskecmtgjtwkhi]nidanbsojuexjgife[pgpitenqczwzafdad]mfcmnjodtkvhbknfto[uutgojscjiffmofegr]rwirhlyejxezndbs +mhsngxyweukngbybc[uiapxfrpfptauhiw]ruywrhlzekcudjgkw +urxtzdmrfedalnuuha[ioeyevidklsxpqkaahw]jhcrcdzwljhnudk[dfvcwbualikbxihqg]rhhwlhcfpbkexewpgn[gkgaygbsxboxypxbq]trsaulacafchpndootk +jmlhqgixgtfbcxyt[vhwpsfjufpbampqyqa]wwzszedhhdmztex +exilqpohtavxypsco[wtjdsrkpmulcraoaooz]ozlzxumlxhyyvcg[btpzjjbgjlydtfq]suniwwnwobellpbwd +glgwpqmljnfxjwsgae[hdnpgizkkafrkqfalpg]pskoghwqhabbrazqtgu[howksatecaqyemgxpye]bvrcfhawviubspmkeon[qciouynjddffdlp]kruofqzvhiaqbtm +ekyqqslkiuaxpucbsj[nsltoiyaeyfkygmtaul]eryfelvxmeekndddu[waprjreciavpzzsj]cppczdrntzrrqpk +draegnpszalplun[jwpjzjfpanpyqcxnu]lddilnitonnehft +afwslsdmylslwvekv[ngnsirjimcteduhmbia]utirtwchbjinjtkp[xtdywavaenpcexfi]fsxuipobvivhpowgioh +zpjzyqnadncjcbgulq[wtwvealiuqmxtmgbsu]wyjqglyafposcrwxue[xqmgfmbrcdcjfmazd]hjcjhoqisrvxdtiefm +nlchdiedtvmvrwq[aeqiwviurvdlsaxzdy]vrjrsalrqznvzhwxpjv[ghsoysknlxlzbqjv]cwklpwafgddnupknr +zxqjiqwrswpnotkjm[vdlwfpqexfvgzxjbsdl]avnrytuqubaojek +oklkhatqbeccsctaq[jfvcdwlampkhgkjw]hwnefdbhaixemttbk[xbnquvzqozdzbntm]rpyliiqlbmravsu +dazldpxyqjgbihafnl[udnqydjynzfllmxayne]oasevmgbxuvgxtmurus[alpxiujmrobllilgb]rrgekfumvabcjzmh +zoojpgbyojsophrflji[bobvppelwuyynrwinzj]kfsldwgeqtbvtsfy[icdvpxikjxhdaipte]kxyxztmtqiksvidn +ensxpontjxipkckasr[bdikuxubzmiuhsb]rffefjgowtxzjltz +suqgbqjkbymetile[jmgtojqeprpffkogv]pnffnorgbyrwddlm[pozvbivhruebmmjwogs]fuleotnbbnpuqre +yjwcijeeaqhjdmu[emqntgsefvphvpc]hddshsiudkvrzghal[aieudiuufjmtihwli]bbytteummcluoygddky[fbkfhkdwubnigzvl]phfapgcqrshmwis +fbqpgkdmhvtjmkepui[harjpumdzotcylumk]fglgadntxizpjsy +iforzbbzeepoddbalyb[cutsqxklmoljnexuaxo]ajmokylzrakmmlxcub[rximbemhrndnogfzf]pokqtdgeipqlswvrim +umtkjkgoyutnxym[nizqgpcfftiydbqutr]rzgvklegcqnetqkg +zdykayyaybkihcyc[qgmrngcbixqqdbvx]hcicjeavoycywax[bkjnxvfknauougpe]xjfsxnxlgixldzb[thjemtygmoazibfsar]qzdtbduakjdqteckq +dwwceyrsaqrhiadehmw[bushvhvxdeznysxjr]hnrekmeoxifqrsq[ynfaykimagehxbcxhka]ucdpjqxgcyyhvhobmdj[ywcjwcveqtzgqkzx]poruhxqfxuyhgqog +mcxpgupgbiznbdjjfzn[nxackwalqammtynl]qnrwciginnlyfxiyiv[hvovgilkgigolcolf]fyqfptzmgmzbgkh +kwzvwimdnfngglsqk[tvhytletnpwmogdq]zjndivdpftqyecxhnyi[iiqioqsyphxjxdy]diyppzzxximnlgyhzh[ylyboefbsjwjkkxbar]fuvxtvpoyomnkwjwsg +vlcyiigmifwxnvcdw[enlnmvlfghlbwib]lwsaxkcpgluzkmx[kglnyaprvaagswvfg]vvdeqkfdrjeqhfp[fcqxurkfmmorcenve]copdpqayaaolcox +rxjfsazvypysbra[pwnsoibariykvjgubu]nyuqsygdavnxfakwlm +kkgyhdbiwyexyhxgd[aigctwltgdrvyxbs]xypkkzuhuzpxygupvcz[lwjjxozwzniiywpv]koyfescfdlnyzhcgxin +cmgqspcojjombguppb[atincfnafdmbhtgzk]bidgxkkmgvgbeilvk +fphcdhkhetqucchmtm[ieoeogxnvdaxsayhc]xeigwycormzmwgf[cllkxjnlkjdinvouy]ammsmdyoyvlpldkgy +pjewtnwxajalxzrw[sreuxtjgiwxqmsfkj]nghqriebzmyhgcgoks +trtaefztlkjjzbxpip[fgpnmiewbmzvqfxoikc]wpemgpznkrerwlgr[ptjdchwakbcdmrjwxnf]unaxvqinaglgfeoi[ekfifzrybpfkjiehpsi]bxkuqrbzgfctzult +oyuobptvcbpmiiw[fhefjfnvmrpohae]uykwxrtssawavbuk[cyabwfmaxwqgmudcmpx]vahdtwpzvebiypwjvq[twtyrryywtwsckmff]vkmzcehpgydnorxo +dbgblaadftjartioq[avryclynyjmceujmy]nsqtusikmlamzfht[qmvmgeprwbsokvbzmmc]ddeuxmektypsukme[gqzmpenqiqlihjqoceh]fmsjcayltvsxycmzv +ixacedvqlzvneoqus[zmgeugtrxuidpdtzzn]besixpupznfgvqelwxq +ausrpqkpblrplbq[pzqlirofwbtvjvoua]yljvwgnjvjehsyjd +dmreexcoqmzxelfjeib[zaghgfbihozktuebhb]vdwkqxzetddhhbhhyd[smjdjtmnswvdeuyt]noyncdtfrtokngqld +akpixaofgmscjdmr[oiothmxmcgwvxmx]yjiwdlhqlrqerce +deyrfnzcctnmwjagql[qgcmtvfvpvvdminuwa]tynjoikfebqrxgvyehu[qhyenmsqmxshkvcmohh]llpblusdcqfywcdq[ikngnvowhnvaiwno]ixndafincaxkyqwimq +rjcoodvjnnbhxnlo[spesoflcmfcoifzosgs]qauqixapgyfzvtjbpee[zzxomezynqnoeue]xpiblpyghkxfueapcm[qotnfesblvvyrnsu]keguppozqkwfxlf +jgrowursqweqfwxbg[rfyvmzbkacqjzooslnr]znoeuzryfguydetugz[ssotfccqiuilzfuexd]zqatqqmmdnuiicv[mkijjomihqrtuiuobl]erhrjzotwvvpqek +unyrjnckltxyfxyj[vdlbfpobsnokudzqab]dhhsatcnsuifpwsqe +iscfknfmwdnipkvxcma[shkdzhzbrpdpacel]nrbkhvxfyoslwfhkldm +poxfvymkfzuhovx[wyjhfwnozjdghzuenkx]tpldycstgwuagjrz +taqbysrkuxvxncweld[vquzvmysufavywl]irixymrfapfwvnorzx[wznvlqeltnvzjhd]wgpdkhhoypflubfznpa +veeytotjubsezxvh[mlbakwdftkyfbpid]qehdyxzxctrdvvmpil[cfnhvbvjkuqwyzgie]wxbvbxibaqoefhzkimu[vcdhqkaxllbdmbuxowp]ifrawmsqulaizxxqytk +pbwglxgdiijskqrksnc[xryasmfvaqakaovslr]wslyywaninmrddik[uhieoolqnqxdmmltpyp]sgjoghttawugzcwzstd[zwhohshbhultyyoti]anvjcthgqapmftxhe +wmqxexytqfmdfgzkw[gbjexhyoufthdghiibi]ejhfohkfsaixzvtx +msrjuadzrxxolmxfxq[slurgkvzzfgqpnwdhxg]mhvtwtqplrxzvrmwtw +vzrfylnagvwqrbukxkt[wofldsbvtgzqsfxbl]scrfvyjrwyqmrsbot[bngltozaybaghfij]msdphikahbxebdar +cqpwfhfmgioybwsq[judebliwtcirgrtjcs]zrprctntnwcrszilkws[qwoaitshrtavmpse]zubuyfygpgdycnytnt[ctkvsrkjluwdqeeyku]ksncsilzwvkwtmn +lwtwlwmtqtjqiym[nxfgdevoxcdimcnb]koarjfajilpityyhmbc[emidtlwzhvfmrpqbhik]gsefmkukbjyhgdclj +fesirdkrgznhplitqo[erpgpujpndzzaho]wqzethjbporhxokift[rwelvzaswcwwstny]xgqpqjlcukivddrlv +zozyeoozrjrbdccroq[pffesupjavtnanbmhae]gatiaxphiwsrnnwloj[viampjpkjyrhypjmto]vsqwksazgcaggsv +fycnqvxfihmjnkjogf[jjxnxjolrlkbcqp]pdqtmmxyrfzpbbdm[fdaejpjrasjphazkc]hntqbpjeliiqmtne +yeounyqfhbnbmjc[mzbietsligfkult]bywnnvpavyhinsm[xuwaqmeiaffetkpkvoq]ufmjhazqnhdmqyecja[ztqflfgjsoqybaf]pjnbnrsnmfrgqamxb +ycyxnmxnttqiqnsnmi[wkrtuoeddszbizysqv]yzbksxesoscmlzquqfp[unqyazgxjzdgvhjylfd]kunijisskcelgtxzp[ciyxcpyyefoyhqm]eoqszchkgdhttjn +evecetgcdniectsnadi[skxzpvvuabkudplm]zqykqoduyjvgssjin[uyojccqmnfbztpdnwvs]uzysyjyjvowlsvpqa +cqkietrmjexdkqb[rhubbesuoeclwmtakqe]ivdnvnndssfznwmhbrk[zmjmfprnnowiedabycu]rmgmbgvihdcuzarhbum +zdhjklxbktkqeglhts[iqagcckadjftptawh]ezdtjbiebkjvivekdzt[gwehifbjyqnazsgzziv]fhdnwvcwnamqdaeb[rgxvlygqlocpfgqfpd]kkssrbltmsamrpiedjw +jlttcsywphepmcike[kufzshdcbvfvkwsahfu]ioqzvlzvjqnavymv +cfyvaasepjmgtofy[hhoqwyrkhuweoetwtir]fvpxylsiwyinialjsg[hqahlwsskotrjlid]azfumcjerwanpukap[iqjcxdwtvmvjkoukcvq]koeodiiywozmrtktxur +llaevsbyxpkahrii[dxfpfzvxwpzedtvhtlx]corhjnbybhlahvogj[aeukoetmokgjlswve]iwamrxgeszbcnzsxy +abxkqpiyavrfgxjbmx[uqzsbujxbmrjyxf]dsiktkwxjovhabuir[baqaipezkcvfjyqc]svvyuknankhxlttwng[kwsoccnvjnctnxa]zgnsnelphgyhfolihu +oquaqiwlkhwwfxnox[rifozvbwcclekccqk]mmmgicxioqwhlvjpsu[tndpmsoarmdojex]spywovxndxncbpshb[rgceaghxxvddklc]osijkijuctxjhtbv +ewucowyzjaqacfu[hruhcyudsttblexjwy]mjxsgzalkyasstkuzi[drnyfhqgaemafei]uuimofkacnittaoorr +nyzetoiyaqbsxum[jowknmpjwqdutjlfwo]oalwqxqoyovfjriwb[lvwabzjorjiiemeaacg]znsbvpusrratzywwwyk +lsjzqfxbbuihsdx[akccvjqdtzmxywakf]fkxrqzurzmqusrx[wmkamfvugczykevpq]avcvjbiwezkocfvo +ohoszcqvqivamuaisf[lyyacjpyelrsgafmyl]icwpankirjvekeg +kruylpszzrkzbfxbmk[thxwtofeyjsijenmom]gjblnnkhejpqdomos[xjfzkxpgfltzzfdby]fnbkcvyhwtwmvpykj +dtqrdvxfjedeydhdsz[depsrsktdbsiwudc]unbdedwnchjgetnwf[bhojevqkvcgacid]jmyzzhyslvuhnaizc +dwlyvffagjfzbevant[baalozybgljljwj]jomnxqrlanqrkcjds +kjdsccouzjkqxgicub[ghhfptkxbsgatseoxgz]jiqgnfilkycyuvlwbid +sxbgpazgvlipytzq[fixpxpdcuetwlqprcs]qcvdieujpvhwveur +gerfcffcrfrwvsjw[ypgmjuvhhzvvavtyulf]cjhqxizulglhcvy[mpjpctaxpnlrfhalp]wmhafecpyzjuagisv[aumyqoujcjkxusu]skhuivrgveucfrfzb +rqkibcopsltsjwq[gmnenbrlgqtvqflnt]xuczjcgsxmtbmeaysdk[rkjjglznqblxednxx]npiikosjigixuvlnzes[vqdtacxnqagckmz]bnrzgyqhejnbmtqa +ekzqugvzksupljx[hsjwrqxwwgcdhqhhzo]cqnomxxbemqmhqnnw[udcfrvgkcibabyssusn]zfuxkqiwlbbhssd[pfvscossyfdhjyed]zlwsqyhygkdgfah +uhfxysjbqxaerhsanh[zyuotxgmbwkahzyevkq]dricwyfpfffhxncjn +cmccqegbarzixhqucrl[ztgvmqmqpjtfgfuqjjj]ubawaltzbmhdhqioav[sszfycahkeptflx]otogjwoazgidspib +fgfdvktoaiucefhets[qwjumhonvmtimauqsy]zkzorsvmedrlycqel[caaejbjnvlaqlqonk]ndndrqbsaaweqoyi[ovnpneqkmsbqsav]cepurdlgjkedaaeo +nfhaistnlhzethu[gyozecvbgbkutaiuiiy]vbmcwkesewbbcdvw[zxgnhhbnldllaacb]kbtgbqxtmqtatjc +nuxiknpvosedexey[gfixiukjvovooybkr]nkprytbsajposdjcv[ahjzndfqmisqonz]kzybggzczcwhlnrerfd +puxghpwmypdrhykyd[xioiypketoaohdxa]lybkoxvoraessmzzztd +qwlzyfwnqvxylbttyy[idtjcszoblpujfkf]nbwtcwowujbgzsz[mqckgqkhmbzpwtuekcf]xyquvnuptbiwlqdn[gwgdvbsouphvvovkg]buqxksahwsgvruovojo +nvjqtzkgoenxnismrq[mxybkgtvioipfjecdma]wtgqwbkpqfepskvvay[qqxflmtbhprambdu]iqtqqujmqrlzpdwbljh[cmdesejkyvjzwhevg]qkclggetgpamrach +ntxnwuudhhghcgd[rlyqxrlsbpsdrdlls]qfzxlyrfjeshhmsyz +rxgpjhpklloihtpptpy[pcbbsflfkrknahkeq]uljnjuavjkhklwwcm +byxqwjjdyqqsdnt[nkxqnfrxqqjtwsnpj]xstdzfnmxpkyszg[yswyxmgmqsrvaxdkx]sjfpeyrrswxgeflbncz[likexnumjhlodzimm]crnvrjyaumqgmjmy +skwhvjyhmosrbbziiaw[dbztswjofjvkcbjtapg]yrzwevkwnjjefwzl[ifwifdeiaqpvuyiidrz]kqnqtbvgpxkejxvf[ubyvhimnnmhkbbnbu]zsqpbztopdvjzbpj +jttcdvuuyawsjnode[ahfzcsoxjswcdysclk]ubdipqyzzhafcdusjuf[wtsiychncfnaztdn]teqnxwryvsfwqbbw +gsoacpemvpypmizazb[rzluiccnkviutvg]bxmhsnyomypyueyhqbo[mzxxtfjifzluckdypta]qlirsetsxpkgewemam +cdqotetervrpkaiz[tohfcmgrtozdfduhk]mlgpfaviqgvzicff[snphhquukvzrgqynfqi]eredworrsugqqqowk[fvcdlekaqtuqhhchh]hhrerrbpzzarqnxiwwk +eitniklfnvnilfttm[qduauheufxnjowyar]oxizltxvldookdlomn[igmwlbhxgszcvhshy]knibbdqqnftzglqjodl +ibypwndwhrbzbowoa[wyrgxqcbqoqayqkf]rlnhzutwptjhfwrsme[cfpmzztsrhtdcgy]tdvricsznenkyphwzt +orvqewlxihoswvwlx[ifiaqweqqmaeasrkvxt]icmqkogypgrbjoij[qnkooyxicmbjhormbu]wkpucublpyqfkpjewzd +lzshelyjacfkrkykwe[jehbtylsskmnxigkrh]wgnozoomyzpbyrytrme[uwcvshtsdstibykyrnm]nykxibwjjcaacgg +fgdrabfqaogxyvpqfgs[bandjgjgkuuuxfuh]wwxxsusuuiezkvojziu[jsprwhpeictwield]tbpmjxfilclfrqx[zdmxvurgzzrompujt]ausuaokslerjqiveplk +jyhxxfrgrdjjsorsgu[uxzaififwgjnklvj]uehxdiantcneqrxeqi[nigrgktauzcpyazs]fjyinlukaspltshmhlh[mfvrnccglqfrdbk]qrmbqjtcccjrsrdmgs +nltgngsggdruwrahzhq[gvjujsgoyasfqql]btwmnkkccdcvuyniu[tsqzwyypufxxjhd]dvqickfwnoqtrhokrud[qjhdfcdcsfvdgkotq]hndylujuuecvakzmrp +xyvhcwkqkedbjzarfht[njkseezhzjrbujcdjs]obghjeljjsjksswil[mhfukqardbaypasf]wjcerxswmwvghjortxs[ghqmhxisgehdsyb]ysvgpyswsdfkomanrtp +wdwmhahsrdjogceb[jdwdpxaeemsjficjz]qqysutatflhmanx +cpctsiwpwyifqkk[eebyeqlgxyvaskcoda]sjayfoyavfkaydph[aztkadhyekpqtys]jwzqgyewxxkbisw[gvlxjstngthhsjeybv]ponztgpuhfsndjb +fawvrgcdqdidogtfu[yidikecuyabulhiia]fxfmgcpdbdzdsfkm +yjateqpywpcjcbo[xddnertejcjeedjulw]humaqnneeeynnpp +jutrwhvpaknrwoxp[ajhencapzncoyszy]qyhbpivdpqjeebsirf[lbsqceuykthorgpk]olrdkqyikfzrdzi[bmqrmgcmvqcgaxosaho]dkejbjzuzvyypxz +rhsdxnktvyiully[nciwcjzdccerinfkgi]czljhsizretcfuea[gudarsiefwzfdvfqsip]tedaanrqtnfjdvgm +grkgawgbvajxlbmbgwm[dpfpvpbrcwxethiu]rpfkykrvmatjwkd +daemahshxyowxgjuio[dwhknewdrwoxbgk]vggqgdzpypjshps[arwnnbysrmyfijttrh]mwuwdtpqmiqgfkntqm +ljpbbzgdgfqmvis[zqmfyouebpfvuscncay]omiockdgdxibtmyfwsk +pirgefjkoicryrcgu[qxkwrjfuhqmjzzmbc]jrofqkmdftjbupytg[mywqavlapyesbfea]trqscgjokafiarh +qsycbrrefosycpzj[guklennkilcmomyngzq]numvvwtbyvtfarlt[frfzzodqottlwzj]qumundqekohrpin[rsxaymghybsvzymhac]wkmbavpbqtoewxruut +erpqoualxstxkzkwgf[spsetkclioxmkpobkij]mocioemqrazrpexy +ryeoamcyfewnjlbdfsu[mmelohdonphatmxblhd]wgkjtelxmbwunvaxfne[xgohvvrmkweaabsd]dkukcrasqoceqjyehjs +zkmkqzphahjdzwot[objfpvwrjdcdxinuvi]goabmmhuvavbjgebdow[jbqupsngpnuoubvn]xofdcclnjyfofxnzyvk[mkmshdjabucvgpkteh]kqxuwhyogoxhgwqyyvf +yqlzjzpztzgtpomj[qcmfrvyamtxxtcv]hupfwqhpdvdwfvu[edoxxlncqxfxpsls]iyflxxkaztzxodxfd[xavxxfdkzquifiwuu]bkjzjuxybfdjcqw +gspnkpswktczjhi[pkpwicpaszrfnsa]reqjlqsucfsixykwmg[matrmmvriujnldbcuaf]lckpqdyikkaprdje +pbkxtroofyztckqg[arrmawhzlhytfodqb]pirguzqkvbgxznqnn +mmybfuxiqgljxdih[dzgfakmxryeoylimdqp]vizjwwrhnihcakb[njplrxabbturflf]qclfldtmazmigmd +exhynsvqvhtzexfjt[rdzxptfigworypkcz]disdlwcxksxjghkkbqe[ktpysvjomszwxdmqdv]cmwenbksdvfihvxvz[vrxbmhxkfjwgktuy]xpyefktsqohxwkaowk +iiuuszfrkqjprgoumy[svdcdtozwwtofuizxg]gkenicdslqaemvwlov +mldgparlhmdhgvz[bexmggptmuvhkjj]hfnccpxdkireolxpe +tzyrycryhzonuxekwt[cvskbxzwbuotnsu]pvybsdovxceqjfmo[oxjqmhruryormwvgkc]kiygcylmgxdjubtefiw +egklopkulrxyltcpbnu[nmbkrgnsjyfjugcx]bufmkakubfrwnwai[pprytunilpvguaen]bceequilwywvtvmshg[aszamqynotadciwdwzk]uivoeunohsbulzpxko +ubhofoouxcmdsqqkjbv[fdvdmyjaukqeuaassk]tjajanohfobuhgih[dfscfkxpzwoqobajau]aspwsctdasjdjnqbmt +urlkduvyyyatpkb[zrolecowduswyfn]bgkveercmmeecop +aitmhwttzyrqwwk[lxntglszzkyjrqogob]exmxyvhwwcopudfekgu[fzxdevariaovvyuof]almvqtftjsdqkevnw +ftftrmapzrqqyql[fmxcumhriyippgxmy]igyxwlfgcjfwwwgpy +ftkqjwepfbngstefaji[ekaiaqtwacopwxfcf]deswaixrljslcqc[nqwlvvuuziefvrd]pgfvwqsqxeqamxsjjw[zispeamntwboenxygcp]cwdhurmclfnjjjwjygh +fixhqdsaxorgfndumt[ccglwvkrpbwideuhvx]fgsxflvifyrzlznwvp[lmebhuhqemgwxpuvb]psfuyywbujlpwcekwz +otmnqzcbakdxosl[skiwodrlvhfjsuqfsma]wtyrxmotiqdinxmrbe[lhgprkzlguroolg]kjgvxaekydqxdepu[mvffwznlsunzhxknier]irzzbykjkzjdoybqg +aauhucqygvsgwdaqfa[leenmhlorfgbyorrd]soryphiyiqsoydfkwzw +aggwrqdafwtwwqjr[eafpfpxygvnfblxikwm]mlgoiwxfigmduubsr +rglpanreckskdaojotf[yuywsgztcjzyrfqawj]wzwtndwugnelcmxpyme[uwcqyuebxpprisdls]kjisjtwisxawsufrd +uqeuvhdoyujlazejbix[wtdxrqucvkbkavrvor]fclqcjvpxqgnkkhi +mgpszcffmfxeacayj[eorkhzrwqvxkrnessk]wykadaapxxqmohwriin[iwfmoieivcljpem]bxhutydaznvlbuu +vkvvkjckohpxkolpff[pepxkcsneexhhlsjs]mffyiopxkqdnwlg[qmkttuxyhvemywmu]puqepezxejnldtlf +fkyblzyluhloblrlj[uuznhpsjgbnzghjczsq]ekddnoeylbefgmpwjp[gbfxttshaolcvhfsl]iygnwnznafbluanu[mnylijsqhwlhhbq]ultecropzmivwizl +rwpypdkhndrotod[rganbztsadndbxr]dorwmwqoeppdpoyz[sefhqmaxuxqwjpgaofp]kerdiohsaddctmnj +hlzqtzrmmgkudvsaxn[wnujyposfazclkutfq]yugpiuxxydkbjtqd[bxeuhvpdnzqzvrtynq]nqcwrvbzjijfjkmq[gviaheipjpncyxq]thgypvingfouyrdexu +abnhtjtbkrvmukjsbi[yivolobglxbtivbmlxe]gpoearvtfhhjjxedpq +uiubiwrlfkwrsnewvwz[xymjmptyaoiartx]lkyzzzynibifaahjewx[ijvyqumtxyumrnpyfz]hddwfrbrgifyegaji[tguxrbbrdvhmssvbopf]ykkkdwtdtlajkmbgnww +omqzieitwyasnbuae[citxwhjdkqyzmfotup]enzrramzittuhgjcv[fierpodjceckpxwoiav]edtoxignggotlwka[sbjkaiypsozrukh]hdwihijpdemzcdvlsz +rummzhhnmypaltcxrja[nbcaecgbuslkyfar]hhfbjgrmbmjexlllok[swzivorldyknmqbnmtp]yjimyhqwgrgdphl +mvpjigwjeejzhnr[zmxoaofpatkxkbecaq]szixqtsjizfgvfioq +umnruavumjfrbywaswu[aeypnvqccjmqfflsyyn]anbehjastasljxkg[kwsjaebdtuslcbae]corzitvsrhthwmjsny[gzojgomcsqjubqrwor]tcektreziofkfzlyp +atrjsjmfiyyhjjpcq[aygsawvwkgmvjly]nvxcabdkjbowvfiuqim[nxwlnfgnkfmmrdqwva]bjqsncyahbgqgcck[kudkiazyfbbvwvae]egtutxkpkpibqcxd +yyxasjrusephnhgz[tbgueaajlxklmqfzfxx]rbirjquhusiueda[wwyfqgowviapcam]iwwwfcjtyuokivtkaet[ojcechttmtwizhjzb]ilybbjncssrsdpyvun +ouzhmpmtsxtbpgxd[xkpvjnalwhbhiwl]dohtpyllehgsmfqwio[pswfztwnlizwbhbopug]znhnnlkxrlsswkgrb +wdfqtfgtawjujjnipv[ffiedysbmudjwegxa]uixjrzxqsqknbro[uijbgaxqvjeiaddellx]golimewbjgojubbk[cmkrjtwjwjndagjoidq]kuaetseghitsonmjxez +hinvjpjfkrcfikcsnk[neznqyunxrviafftsv]xxzaxudvxzpzayzu[igikyqxlllewgxp]bbrmixylwkvzstannjk +jnfqvpcsjlhmsgttoo[keugkkuywiztndixql]fwcomunksourfiufwgf[vwalfwhhknnkmlelb]lxwrjniskrxyxxfgbj +hmxhwwoaovcmrsjng[caxzefbacuvtevwsn]lgybmbmfeizwrbfrzuc[usgudhgiwtuirjfkpz]dmohwrrvvujowdchnh +suctmalsyteahln[iwbpvohjintrccllib]zdppjeyrkkjlwgfp +hmnzkxvelkvxzminaj[llmbrsvokhyfowaimt]otgsfjkhormfnubhirp[cbycbwoqvdgyvbnmkz]gnnjznpxfxwfvaoc +jniltxvpjudmaao[ukqflhglxrfpfjg]djvtunwwabljjdirgrj[zkfyhzxkarvjfrbzbhx]zrrzbzubefvchvrpftc +lyqyzdgisrvolizgkvq[fcdlhezvozbrglr]lcuqsfwchyucocowuz[acdcsqmgffussoy]jlnuxatzdobackkwgwp +gwcvsoqytskjaqo[rfzimztlooyjbodjcud]ewbpnbzdilxvjmwy[ugoqefqofiwkgnv]pugnbbxqbmpephsby +bbzqqwyepafkukwqjbb[sprroemdjetnbhdu]donxkujxpajsakirfap[ybomycmhvmvslykfxuo]auqvkrofncqftmjshtz +qbxmiueonhzkluju[yocqzkbdskeisgvm]kaasgmyupwosdzbumq[lkqmadnwplwlawznb]zxldpcgbouydtatpo[dqdshurolnithdof]sscgvlgvpgthgkhtszr +uzcvcnjawdeonomhoh[lnckzlsxtxekacx]ogcbcsdksosgbdlrexd +kiiixiatixklryllfyd[bdtcggfxvupbohvclg]rxwnmgvwphunygx[jisbxeqdcnocecrtabk]cpbsvzurbvmtwucvhk[hlrjqjldshzvbrn]wlmkcxbepdkwafeovn +xavkcpvzdiowrpduy[lujfjaxzrmxxcnxfrlb]szegppqkdzrwkokbi +ojlbyagshifmlrv[qexvdlykxlebrlrjkg]lvdobhyszjfkocbmt[uorpnorysdsqycpdoje]tknlzfganuxeulzv[amollnzxactinrv]unmkoyxobuuzfwduxa +pjhpwsfoiufywtd[pzudakbhkrvzepfl]cnmjmtmacyjulpcu[yvevxufpkzfrksn]qqdusuumfgtaemuscj +ffnxshbygoxcatgz[byegatenneixbjbrri]xrxazipjarxrrjj[ilvdkjlixdbdieycbvz]lvngjqnhjjhlvki +maocxpwqvhfgoaoy[jthtqiiuukttxhh]qpvgjokizpojnsvgg +vstmpuwjzkvzxakgreh[vwxiygqjyyvmgvjdhz]yanevbmxttonaonlgeq[rskehprefzmdfujh]kddqkrshtgymbyf[tdciwdrqgnrwygvlqwy]mwyxsmscrhxowaezs +lpetegprilvnporglm[efutqcurzhuymzl]vpuzirgjkjkqmpglqoc[ynrhizbevmuobpyduap]joqowueodytoothjk +uovjoxozjbjgjoedh[hdufcoupnwyqzqsdz]bfkcibjpdceeawfsxnb[pmfdhpjltsthickltq]wnvrznraeqgmhfh[zqsykjfanpwhdbm]oltzbvppyqrhmom +cuptpflteqvnaexzwj[sokwgqieratedygx]tlgoqkfvmifmdguz[kfiwutninqxzwie]dulfdtlbltfjevgp[oftsoxfpwolpbvflmvk]xfbcennewbsxcgin +xoajbdvgnaxyewthsyy[gbvxbmhptnkenvoef]iyxfsrwruprnhml[pwrbjucvopfozdjlg]ntsdilgkqjkwifjcmqq[gqtizyvtmqydqdemxx]llggegbgpbiebcsg +osoqemdejeowlmtbr[gvnuwetgdhuzlfoyp]ynbzmlvpoydjaix +xmtosmglxiswygqd[djjpcftewakmxhe]cxrcujdbpfpmpqaqp +kmffzaniobvxkqobrz[xemvsxzxpikkgnz]coopvxaqcwwvcpzzbwc[frbwadxyrqsjmeb]solyurryfbhunkug +syuvjlrlrotbcxtmqlh[plnbhkottpkhbgrmmc]tpkceggxjkkshgovp +xypvptyubhdywjddc[dkdpirtrddhczvbi]gppnmtijmtndwsd[jctdyzyrapkwpsudre]ofnnmlflpjenwqme[wjlbkjvlxuwubdkskq]zmhodofehapyshkw +zyfesoxeyyvugukolxq[sduqoqepedvxiaojef]ujbihfjhwwrxjbmjzwo[fjbbqkruyeexkrk]fyjhwioedesstjkw[nyhqlxexvrlglwcqbi]zgxdbhdcqgccgodx +kbgeflyhriyaitjdw[gkmsfhbeeftzvlkkxd]leroadltgqyqepa[apzlemfdxyxhyqy]bifkxoyxysldsif[bypdkygwlqgxlhmay]odffxnaayhgxkyjsyg +etnylemzuybethsak[rbqwbwcpspvwcnrtiaa]cxdlfpvaizzsiqy[cofixscwpmoaptvu]tuvmcbkoqlfljpc +nafgslpawkgystrbu[lholsrbjchktftlct]cwxorzjqzuibydw[wolwkkqcflunakpsf]ftfjgybmpgmpzjpxok[omccjdarvniomtniw]vmtkovkvuahhcgj +arfxtgjhwjbqqpn[ozbglzichfmhnsrmc]sxwomutyoliqdfrziy +yrfbyqpslcykicx[uoxnsxbpkzuarrmhesg]ohscdwcojgysjov[epkotielizvhfbauf]kdichwakhcwuitdohe +lxdfxhtcxpaqfgud[kietvvqhjbhmbdjh]rnnxrywwubyivxj +wwqhnufhgdpwnidwe[trkijfvlemsenfvm]hwhzclbeilbbpmbdgvy[kcqrejunfyofjviz]ymhbanffstqwvlkczn +bemjirozvmspfrojywv[gnkvjdexdgqeqvom]akfgpxfgjwsymkegz[yrbmhgnacpufxmilwbe]taxwtqhrfqehzvndlix[ndjuozknfyplqafyu]bwogrlytfyopgayph +tzrwkqaembipwoyysy[zmjpcdqtbucakwta]eelwgobyifozmawhaeu +pxpftlpvkjcwicy[ordfpujlgwgxccjcvc]ghrlgcktvifkicv[kteuygrgxnqbaagldhw]elebyndnyuknsxwsz +eoayeeinavevnkocsh[wlhcijujotnsmyfwrg]nsghlrcpvhazacbriwy +myqilamxvrkimzrypsq[dritxccifmrgnynl]ahpnxwgmmlcrmtujqv +prjupstfryhiyxjr[nznibizpdpgsxozff]omzpiwgyqqytncz[ixhfkzmhfpctiaflrsg]fkxetrnjkjhwmbcs[mgfwcdxioxwsbpbxg]pnmcyowtigkikfbqem +obihtythngvjelm[flrqufrqlvaamtlt]gbuppvlrpotvhgoivu +wdovdejwygfyguc[acoacyczfmzugdiwfy]hbboqkjmpktiqigkaxi[eirojscvpewshvdslgs]oloathxikscihfpy[vbwlxhdnmpcvhrdwm]zxwsxrhoksbgnyva +vuaiucuvucxmowfvdc[pkwwdrystnkynnfonv]bkguisxgqtsizbdpon +nhegyhsxwcesxgagl[jsdkwvzzfvxuxsmkans]cwhuierxyqjmueehii +nmtqqwclrkwlikw[drthkxkyfxqugph]bbneldbvtittaydbgag[vviulwoviezlxte]oqzoapkqstfdxbxm[bmhsjxwoxtflbqeo]hnsldpfruxcdnvz +xrkijlvluezxevaye[erofwbtsylzfvyrersj]bkvnbppereymraau +jamtmykfjuhzndgnzrj[ezhkpcujzmcdkkjjfbm]yojgtkoobnwvgendjt[jkeeulmfzdbfwnohfaf]cudgyvipscncfbvmlh[kxikmcqmpounqkwjhg]emsdqszhrpxpwcwb +yywwadanokysrfh[btwstuwbsdiotcudf]qrsrtonegzitpgnzsvd +hrhfutggyymxzgyj[agqctqvhyfytwsdmzf]ozyonngtqdoaagdl[uuykvsdfqdknray]shhtieifkqfewhopney[ydgftitgfmfdqwh]dfxovuekyvtaddh +dbsuuitjdsiymhek[jgxxnjjzwgwirdlgwg]xwlvqyufgiwbwyfhqn[yywjhwiwijsuhlarpxv]zmpooqvlrrnwdfhsheg[piwaxxvwgzbbruij]izqwldwwjvrxmzuj +nuxzejoidicdupcgdum[nelehvehbccqmwnla]bhazpsnmekeqkvr +evnsveqnndjyarol[tgeuojqlculphzfva]rilaooxfpwyreyh +hhwvcwpwgzktzotcrx[khmiivstojdaciyzb]xwaeqbqyqwqltdx[rgwirleearklteybyx]ckiyopbgfygyvui +zpfozblbuwkdkkfsuft[lccwcopfworwnry]srwrcwdkalvsnsu[jmgukelsagifrhkxqma]wtrtztsztpnryaqw +iszcbgumuoarzlkblr[xphrddxkyclfvnapk]rzryxqdnmxplfiu[plghrphjxgqlxtp]cxpvhwxkzkeczxcenm +aezqpvhdbflknptrc[zykqxuzbatudehe]lugjrgmxtqlxrvt +jsejnywikaohtarsxmp[whmztgiaadmiarwlbj]yjrgwesrymvzhlades +cxmorkzlibiuyjgs[nyierakbbzkhvyizl]hmtqhrxddgdwmoayyse[ldupkxzsfkmnsfdnzsl]sfpntvoniewgfnyfw +rtlhvogqfabwioi[mloxkofbaemaxcfzdo]ofeukqafbxivgvygl +rjnyhsocogdwhswqonr[jrwafksjhfamqvfjk]seiscoezqmbopqryc +txdcwwtcedbymvxy[dbhxqovjeifzsuvm]alhqphxcmfmodeb[zdzxpgxeezjaeichq]ggadublqxpfyoyc +rvoblfajodmlbftahtv[dgglfidheitvcqob]uzvojeukksuthhlpyoc[ovnskmuaaxulloi]wqhxsjbtaqbgjpbw[ohmzmzpqzevicbzmtk]yjrbmkldmwmmcndia +rnsgsacbysmwnhlqjps[hmjfyywxcpxwsicxit]rnikgavmgagtsoqjnfp[qvcofkevjqjqhiqhzek]vlhfbggnwqwohspyig[ibsdkevufgsnowonkj]ufazmdkexffmxxfwf +qkcfiavyhcmknbqcjtq[lknppgsvbdvpftnzcgo]qswbyhtruabsyhvz[ilrimrzzjctbbwhc]knpudsvkdphxsuevep +wmeryhgvkftqiyctbt[terkorqjaagtbsp]hilrpcfcjsyguukcehn[scmgvajuiuybvzt]enjhgqtdjabbkgh +kvczijzgmasricwj[xhgvyfhnaxeugzje]xwcxqjegagsjbvnuskc[iiokktbsnmwxknkqch]vtuobocpydqweamu[jgmazxfjiryndgtcqjx]pykbsnsoxbfgacvgpz +guthejosohmrswzgk[uqthzxkpgxlcmqyop]fxedavqwkrmzbfr[itsvdugwjezrjtgqmua]yotsdzczslbvzatsom +lyltslrourlevnxw[dtiihjdbejwusjmfap]hdmttxgttdqytvdfpp[qhdrjcwprncegzdfl]iinunfljrfhgifws[fvjgcqtqgxqtgca]bzlvdtdsxgrtzuvh +ndwwncgabwoynmn[zbxvlpndrsbczbklwrb]bkcrlonwivcipxe[eoliublkzenpeyxfk]voydcapbmbsiuvqfywt[mmiirgxvnbpnkyjh]pgkocrralcozybthp +lvrcxgzomstmslr[vczvuydqcmhfmlt]gmogxiffrfsazqbh[yvnoqlavmbnattcrgd]tsbkxinrrbbxypwnafo[pgtfpwnnlxibpjchgd]hznabthirzxjipjd +jtczttrstcpmsko[mabkmpwpcytkqdmhjc]jntwxslpyrkrehj[cqbvlkhugmarodmoqeo]weaiacdfakrkuizqw[uiwkgtbzmmffxrhtn]lhygapgcdaszgoyy +ahnbwmiwwwivkykv[pcsiuyrowqrqfxcvw]mgksjiinoudrumr[ocwtmprzvamougd]lvqqlgaftlflllvqo[akvkgazplkkvqshgbk]zvyvtmxkttxnxxdy +tsbifacnljabpczi[cmmjarpfeeyoeplv]zsjcjdfidfjvcgdd +vaviqqmsbqellpw[xjjzxupmjbkyuzq]putpqaavecqypslf[nkyslewbmmsxvdy]maszkbnmujztqfbzq[hjwtywxdrybhcvplncc]bvgsnjtjidiuvggo +jhejwzckrrrzcjgs[vjkxxdonhncwkykwi]kyuvbdlmkffyzept[jloktbqtmtczmjbdord]uzggzgltjzngpsboyxy +rkrntmebnqrkoboby[gujdrcqoqatyewm]qhrzxubcwkrkqibjwl[hvnezryivakciaoukrd]teefauinxaijxil +zkuajphbyhsxocacplf[tqkosililhbxgsgp]xttqprajeocotwoixkw[hdmduoyjxcizwpa]cihkdwlaxhjzpjw +xzcmplyeabfrcpfr[qhfkyjzmivvhbqeblph]bkwydbvhtutbtytnrx[oslchcvrlcxmsnbqoq]zkggbeglckihzjuq[lxywqhpuarhpasbul]vqmgizoanebmehzfwyt +bjrvsfwownhpxsowafm[dtmxsbtquavgypbizrj]boqoiajglkefiwaj[ycjpupieshgdmbwp]riufwociykhnwdsci +urcrpmkeszzuctovhqu[vsutbxseevalnah]rwrptzraxwhuskb[inpentirbmcxdvof]nvtxiwtlkeknxfl[rddddhtpudrgpjafk]cojkmbekefbmuwev +djavlwoikblvsufxrb[suujlpxslswxgfmrjj]drrpikhibuvwdlhvt[iopyjysnsjpyyxngdfq]sijwvhrwtourowgv +kitztjpylzlaposkaun[szjrduixywmdpxbl]kaltysqcxzjrengtkwv[jhsqhlzxzayxdbebu]apyxjlaydhhokxacq +kvzdgclklqsndxdo[kudsmgggtnwtxdnrev]quljmegosayhdwum[kklkxlmmmtjcretlyx]dtsexdvvjndpxtggjlw[mpcaczddrmktrpgngw]usxsptmzgzqhjaycg +oxvlhxlmhhyqgwlao[wiqlkdwjluvqwgqp]sbjmqvssbwefsvq[ocwwdefylfgvgsygfbr]fbtqyawdbswjpux[loeconwsbvgbccoz]cdotdnnkzyaupynuk +ykozujsmdopwobif[xaupavllckswbcyszd]jqdeagvmvsxpumvmu +naxhmkdggymqhjcycw[xkhrapbevbaiwzdn]etnivyebbwvqarn[dnskxishknmcidwv]uctdvqkipycyzhgcp +uktvpthtrtlgmwofun[rmevlwmmvzucsuxqx]zokkayofazorjdec[ickalywptsyxrttbynx]olddxeqctucllsvrvhn[pxfftvrdqdglkvll]xymmmimcqskfozlkyos +rlqkqjeaqkqkdsfb[igleoesoxntrdwsyoz]ujmbnjtysangjwpsod[nniriilejnvzrrnn]mbqjytlwauzscjj +egnnnubdxhgpiypsha[byoisscizhhpsjy]hmtbmbgshscaxadry +qjafhagbtdpvszwlpz[ipehjbasniypubhfb]hreoxsqzigscxhnaf[rntqxzmxfxdldnpxqb]jriknndggvtkifa[kavxsbypdwmsildd]uisivvrtykssbvmsm +rwxhzignxkrqeuy[memzudqlzcfrgudefyh]pyoldsepksbcbthfdcw +jhgyboztenuwlqu[zjsmipieimgaypipjm]jbjlglomhxosmwypq[lvpsqwjvzepgvzbfs]ergqdyrvicbsgxg[ugcuougnecjcrpav]pzgpppoonvamxhkbg +mdmifuoicysmavfkvtr[rdcuzujskhncvsy]ypspsiiizkvopyb +tlwbtllklxrkyivnnuw[zqphdjfrntryqssd]uuefrmazhsiqdbodatx[zdptibmcvohmnwrv]jofpqdvwggfsdkz +rkgfksxcpqkspdsx[zubzkcjhpvtdvow]bkbmwwrfqtmaosodlhx[shxfozufozglsgfj]tbtwcavcbvhjourcvu +ayayqmsdvbzfnut[nzwcajbcbcduifari]eazisrtfqhzophb[zkgweftquububoothq]lrpktclkzizrutnybq[guuneltajlsxbbx]rrakswukxamcewdy +dtuezfpubkdvxojau[ipzyfbjcwxazbqeslhs]nelubzldtozljzyj[uqkgjszhpokhonrpg]pgaebrtqevqblaxqa +bbduqlqjpilanyikfb[iwngaxahwxongrgf]krgrarolzgmzdtj[mbsttcbkbedkcmbl]whecpxbvhuemjloxkcq[lrtaeothcehqsmbes]chuesxuwklohzrvgjkh +sextateheibnehs[ccvuuyctlffatnmhie]xdrwtaeangizfxkt +nayfogrvrhhvdfqf[upaiyvrvkcygazw]wtsawgmklbrjjhc +qumnikpzpmsjvfiwapn[fdqlumgxklzlxcm]dczsgahneieodmhgvgt[babaxdoljtacfza]teoddbtcemfketpp[vazvzbcnqacbwcx]fulxjfohtywgtagn +crcyymrdfaawflxfmfg[ovbkvuhdrxdbhmyphao]myqpzivnpjyjkogknqz +xfkrzuoeclfphdae[wfuevmepzjjuzlbc]icytgjlzxvnjgugxyv[ppqszfvkmppjvktn]cifddqrtlcodiincw +gobxpjjturfsgzell[rfhdgfzwpfoztzgcn]eworfqsmysqolgq +laagoxczwfikjawci[sljddbmwqdnwxlkhdi]hwmoerlalfpjshedio +wyomncmyxejknhswjv[awtbfqiarnoabkab]nitvsmoxyfdhpcdiee[sipoxhfskauxfskix]nktheznrekmrrxl[gwpmodgajfihlnad]pereyxjrernitwktv +xxkbizhzxvqxbecadt[omafffruievwfqocujp]zpuotjhjwsdbsxteza[otcdtybhkqhjhvjjz]zjrkvtevohcfvlvq[yjdkpxspyojxstjkv]fbccdkbjrebcrxyrg +zrctbusxagvjendfdf[szvxchrhjussntb]mzhzysbvlwwflpx[heijmktbzrbgqsklhcu]ygpkfilealopaixduvm[rakktnzhooijvydazhb]msnpudxdeaujqysbje +xoemgrrmqqtfwtnwnyt[jextspoeediexugdgc]foyqnwnwstrguzk +siuojescxsrrhvgpeoh[dnizqgnuprmevtqws]jtrkiydptijrwewcqz[zkvjwozfadmizvhfdk]kamauddrolxbdrn[yzfffqfeadlyfje]qanqnshkelszldi +wdiojuevpybfvdp[zxyrygvkvufixzdwds]tgjzjufuuwenexe[outgdpnnysadoyeon]hvelposyxhlvfmdi[gazrxuhxrfxofsrxq]wpkujtixgvfrdgg +pufjsqcfddyeghd[iylozggwqlqevyb]cbkdjgvbrpmrwrsgn[nuinkqeqchwluhwye]baetibebzmndgrulqdo +rwwiamjdgdfsttq[xnsuyncklmryvumrii]qtcphhihqqqqtntvoev +bwhfulscfcqggdswt[ostyvvcpdoyzvuhodeg]ekpjrxajoziohdvkfco[tbbppuyifwtcgvci]lwjfhfqfmclrhdhplbs[pplppkgrmykhtfnq]sfvskkgimpacxfam +jripvodavtgdgkv[isotocixmxjmcldpx]oaptjpebswetmacnf[zdlipacteuduvqdhcfg]chciftufaejhxkmpozz[cmnwvdkbsczhekzwi]ovnjvgsuxmszncr +ylpnqmqhlnmuxei[cyqofexibcjwunyl]ettxreudzmlhgtha +dhmperfgtcbqlipcjbr[gkmgkletrzhoyhfcwb]psllsosgwjmtrvfanv[fimdtpgcoolukvvpu]ccqgkaqltrreqchxpbf +huvrdvtjmncbokh[mxnsccgwblyahbdao]mpscnoohrsqideuhf +pfvpbqmyapypiubxmt[kjfhekecjzzqftpj]sybxxlmvzhloooom +iicuihjkntpnytg[xpzlplwvgwmzazj]dfiftbbvxbztjpx[patfyqrujpvwbsl]mxgsntaernztshbi[nfwhtuuwhgsljivcrws]iwzqwnbjapcfujz +fdiifotbpdpfvedsfn[ptkzrnhuybmhzkh]rmxekkyxbqxmxccc[icwqbjmjtakfsqbd]euycnuevdyommhq[dqfyackkxmvbehucn]aabiiukaxiowhbtbwpj +ofaeegcqivqrmtz[nyotqurllbitpijzdz]pdlsomnmdsbfhdzdh +yxihvlkrcvzxhlmzm[asvxysmyxovvxdvv]rrwmvextlthjopu[nuaoossiaxivwwxwpa]xgaovndeadfyofish[dpdhiwlsvntqxypdpy]ddmbndbjtnpazhj +kfqeicvkuvmsljtsez[vplnucnqgngsbfv]ycjwthuykmlfejqepad[ngklfmgvredrinryy]snsxjeqdinbbapwuno +yznxssrnyacwtxlfbab[mpjvrwoguxgvcbtbmdv]uflsilwcemofepjghvh[cpprubjartjbnrdo]pocdfdephebcdavrxpo +xkiccyvosgzxwtuck[oqqbviclakixdgc]kteovpyjbcejxui[mzuzcghrxtkssnrsqy]hcdpzjidycnlowgvaxo[iawhkiyhbswqsibqp]ltyzmuplqyoivgmzfa +qllumnywkyqjpfv[lgkmvmbdwnkhlhqfse]lroouhapmomchyeghsp +egmftdtwkpmhdpda[jlxrjvldyikwjlcwx]inqnhjexcxubtzbx[nxiniqbbzoedxkyc]siepprpdulpnkrussom[srrupzubqhkmccxcnas]qylljcyzwypwzumem +ikjwnxkhkzqmppk[tzaysscnyqriqxcg]miabsouchfluijdwa[cmxeoduyguwjxqcj]ilprgkdcvvopotdzzon +cauxikrtpgqgwydmagf[nrnvqarumgmthrf]xyyopmoyoampemafwe[jwjgmglxphjkvfg]oxltiecspkarhualt +pjzcgmqitucfyph[cxxlbsznvwpxvzghv]woqulnjvvfjvjzy[wgxczusgzxnpkakki]fvtepvwjkaozguggqk +fgwvbbyiyljwmkgcmic[gnohlyijeqfjldrpqey]qbdzxnxuiprcwjsn[ogtlzpxxzbtgfbjx]wxgaduaiyihyumprhe +mgemsvccgqreluv[qrlpjfkdoinuyou]ovkiqoqefrjmrzgb[fzmqpuzoufcybpucq]aaftwlldjkholezzpk +vxfsphugegtougthxk[lkvniyzlltosedmpgr]tomgbtfosxegecoqtn[mvptnxvxddkaqnjvnue]kclnhnpveadosfktw +ltlrncoqeeupwtoxv[yoosiulyjjmwacymwfk]vdgfdfcjubkcbhiixv +ediaeekjpbzidrfpu[rowhynyrchamhzrp]wetzubsftjwuksnd[yqbtzngplxcqkyxf]blzuvnektffqbkf[egmvyplsbysvfjjkr]ikrllifuchlkthknpqb +ohspsyvzulzfsgghvbu[tvtbzqptcpguecpgb]zyadwosbwchbgrkypj[cphkhvagaasozym]tvgkhkooyejddnhv +uxtuhgkkulhrvowswt[etzltbttiofnkeyh]gsgnleidfbomktjtbrq +owccdxohulgarvvxx[pbbuwbbkrgqlhxa]lqbqozlyegslpxvr[arduobjtbducuoiwykm]tfziqcucaqjcfrc +foxbwdzngattycaunku[lnkqgrufdcqreruqp]otrfaarzydubngucw[hhaqnaieublicggcep]jjvurleoxyatgtlexjd +bxercunxdkmyxoo[zuvlzxstpwfmbnv]laszhsamraptopjmfx[syvqwydkiawwwpb]dyrhipcnwwbhmcotha +mrcbhykyikojmqmxr[gijdvcjehxyzlpxms]bkzqdkykgcvrlbdcpck +dqdrhkhanojahvaof[msammceatlnnwypjnk]yxkhkmiroydwvls[bgxvfxasrtzmiqpueoy]esjxrbelpjsvdcdx +tuxcluskqsebpcm[xplkqkfmkdsjlgnome]qkweswhvzqmpkujows +nbpwnioczrkicxddphr[zmtlntcztddnmcl]gjultcfncpmekcsosbn[pzwvjmfvfkanhxbhcy]kafsqjaraeicizjy +drcviwihoplftyb[xykuycwejtdqehmuf]kfmgemdaoetwhczw +iuqdiepdheskvvgvix[ayfqccpnsyzawotpt]xjmljfmrhvqedfsrdg[rvdqhetiopoykpopol]lnqyxioswrssucownvu +umqpsyqwafisrktta[eqncbzzavysoixd]wdtnkvsvsfcvfks[opjoivoqobrzeepln]ziqmbmxwsppwzfro[mkhssttidvdgsvstov]akkdvcsjflhxllpblu +qjlmfjwtglolrdxvqk[yufnmwyfhjrqzrxrddv]pzcaaeoitighunvg[eamjujwzolooemhj]mxbnbjvuikcycvnfuh +zykdcejnrxpiimmbf[ofuzkgknvcexqzxpu]ketlytmhcmzvwtssaq[pgruobcnyaqmyjvospf]jkkvdoervshvgeqwj[fiexihxudpdrzdwp]pzmgprenvskgbgupy +edesihewpfcjzkjhhk[ydoqcgosoyuebpoib]oaxftiagsynwawlukdo[pobikbzlxzzatth]tzvwglytrgbmlsdikum +rvdcduthikkjrfx[oxwihjkewocfvjpq]wtpoobflhevxjuwnqr[ltfcdcjnkkfetnor]obpzfslqfunurzhpr +ihikssgoutovoropq[nitrordhoxvqfbjfc]lxnjmoufkqnxizdcthn +nsnkrlllkoyukbkwikp[anhzfrtqwndvwcndm]xyvidixcvjwqwxbsctb[awnmlqopvrjxyvjlbn]ldmgegtwfkvwjurzk +dvjmhdavqxdhnbglm[qopsknwswyqoqccp]jycpmzubidfbwsskm +dstxfmmohcyoivxmci[prdroxyvxqzdrdsu]qzczowwyxtufoewluu[ywzeufezgbazekly]tiifyttcldlhravctc +anocufhbdffrnyhxt[sopxugpfxbbjlsgtdc]nvnnbdsjqfevwbgbaif[ljuuwzmlrnpjvxgbp]hoeejpqdkbrafcmv +mvoaumknaokkjrduxj[anhqilrxkkqawmtdwhd]zuugnxwinmpwchymrx[ftylpriufvgtanapyy]xnizqpmgcbbotfpru[ilovypboxtuyozqag]aldfcdeyubuntmvyv +xlvezhyhuvbnhgezw[yvaxeeokyjwjgzr]hqtybqtojttsyhycsy +bjcbsmjssbubqixiqmu[uzycqzxxixenmtvz]ykvtnssyurdixcswneu +gwcwwzlhdufsjwaxal[howbmljowljdsvbm]jggvldehjwoafvshlw[bfevufuakhrccqcc]dfufvaxzavehxgwb +xuigvxgnmagtmdke[nxkzzxieoqxbaei]nqnpncmtrsiytxhy[bqpabinchcjqcjy]ysktjdirrevjyqyc[rwtodjwpnppdvig]cxedadgimutpobykf +daqanavryjmzxflo[vcpyomgckepdftz]tizgysgskfuntqedhp[bkasgyhpytrbqvgf]dtjwyykxvutfihl[dgidcqrglxeuqmjvryo]baclxsovuumhgjffx +lpyeghloevhgthedzjl[schxctqynpinoswgvwv]jpuvctsvrdpdhwsh[xdjqrqfwodmrxta]cmeizobaqtszfini[ttbvcouiaworjdp]uwfkbkxwhrkeugsccp +ctvifkpejmwnuapjpjh[glykzeqimofbvirvv]kbzjjjxmiasijhyak[ucyzsvtasjfewtbm]zbhktdmufikfwsiqyfz[kolsqantshbocapum]jvjtmsmzjvdyawlrrv +zbxgniymzkidlugns[xsyjfooxpsbhtjvjp]lydpcozhcmkdiactgsu +rzsziayhprsxlwr[szdcnmcdpqkwlmhqlp]uctizqyfzorwogahopa +njpfvxluupsvtbenq[cgenluehtxacymtm]onnngstsltmtobh[jkjpmbsumgmtkbyg]uvsefrirmvsuiff +qukyshliwhitgmyeb[eikuuslkfgergykosp]fthsbtteuspbrqpssb +xpgwgflgtkmtzhw[prdmpsbkrcbmjfitdyn]kqiyknqfoudyfvdmlhz[zswwgwvjkyvrjlg]zzmkyxkalhbbgcouvog +dgxbmggkttasrcjotn[hsfrmfxeeuvovzuij]lnbdybfhkdsrymhu +ryjamwprtdolosp[nkucayakarxezyxpgkp]qnezibzbjadqvqzz[kehgcplpjdlitdsg]nagotxuswnxikkicoi[fbpbayqjockutfqu]gnylxqhcacwdrdhlp +quayrjbyxiviwukq[mwkxplqhlociiriaaao]lswnrperjoqewphn[nmwqzenrjmgikodk]sagkvoqqoayykkzri[uyenuakxyohedlz]ffzfpyguqryzodjwqxj +fkymdwjnylzqnxhl[lsrorhrzdxpfkmai]vfytomporosnlpzc[pwpodimqjyfmczra]nibuxkjazxghetmxe +vlrxyrxugxmmxnr[gioetjknstpngomi]jgzsfyvgbteacpupi[aeyhvaqkilxenfy]ezhnkbgkqgbymgzolq[dkzztikgwfghpltsd]nrslpkmvahlvwfhavn +xpjvbcihegkoyjg[ddyxkmnhpnucgbeu]xnvxewhefxmfesoqkfo +qgavdsmekecmyuuxln[toczsvzymwfzzrxprb]igonrcvkpxvekefo[abktdknxsdmpionl]uhhlekwqmalhfauva +uveiuvjjvxlrlyxpc[ucbsqehsihiilfmxz]nvhvrtaxdpiqpbuyj[rhtfedxbiqutzvaucj]dxtgbmuwqxxqpfbohfb +qerjjnnafocowost[axrfofdityutyzgv]acicnljrpsxzlcg[dhslugmdfaxclhrdecs]ekxnsbqhlxcfuron +jknvvunefcyqagtj[zhgsvdlsfrlcfyoqt]srtokcehvdjwwkcwczm +wwwyfmlxivfqcmnwtw[kaeymickhvsdlqkfuqc]dyzktnegiqbohljysa[qmnzkoqxsgtpattmt]oxxczwgodhiecoyp[swszkqetvvgdctkhyxo]qrjhaothcmyajmpy +oldhdgmnxrbjncj[kkrntxgkrpbrsyi]qjronlhwmcpdnpp[ksqudrshtdnenqxt]wzbkmgdhgylcfpberv[nyddphsypgzienevnmx]memczjhmgzeyjchv +jxojiumgecewqlc[nmiruhzcybahusxwt]pqlrbrwjitwylvzx[rjwehkmounctpcecz]jbhagxjlhngeibhh +lbpildbxlosyqfun[razlyptphvjizuyonoy]atrqbzjakphxrguvmbt[ybdqfljkspdlgisypun]xttstfdytowwtxytsn +txrzvdxevhqzpkb[xbsfvyjkimceqeog]ilzhcjiezytvmdd[kuhqkwaweasjoae]fuyyczwcpbdblxtxjgt[ujdwvuypmibgdbdtkij]vhrvswtmxfqkwmtjjld +zipaigqfaywgroxzyh[nfaubfwofvgmjrlxw]srjdkzejhrpctlhbevh +mtshlkbkfdacuvtjkbk[qemjvtgzaxmgvojtfl]emvduvrdlxnwgqrquk +nekajppmdnadytnn[ynkibteahksyzvpenmp]jqxybiytpkgzgws[whyeilzvjokewweunf]ndkfvbdnbdoszwfugue +fwfviekoibnqhpis[esurgsppgqchztm]vaxsbcgtqipiemvreaw[ytkxlxyzfifrxgmbggv]tygxkuusmptxqyl[lpuxifizetrlbsefado]rbykxursrelvgiilrai +xyniecftatconlmstl[rpmxaolsbezfwzof]zvcmwpmmcszbaimwhfj[hggnwfkyexqkdancmc]cakzrmvvnmyiyzbwx[eizlhdetlkmzlrob]elvcwtpqtdpqxwdgjd +yfxqriltoucrnfnj[zlvarepakboasju]bhpvqvllpphryccbjz[gilhjdjlsinanvhhe]rkypfwnsrmshanawlb +cffxddoarujtkpwt[vgtsjcyuqgpoklcem]enplegjrghgfkvaqhtc +kybnjsgrfnckxytl[obtlaqusuhkyeswu]vhaghsusagftgzxz[ganwwupndegfgxbckde]ncgnimjtllrpmajya[dmzimljmhjkbyozpmk]ygyhjeeexzqadcdyhf +icjonhtmvgnwowp[xdtgaeotcyiyzozqwd]wudhamantwimysgpu[wjeyfkqluqgmbspxi]piyixwwkfdbogwcmtac +qextqvcvlshqhbunkg[ouypttbdsycmscqe]qpxtjvipjkrbasofu[lzonfnanpflaekzhl]xwwxnjgtmzxnhmq +zbtonkedeacrlltqnl[qlssupkhjptzbbru]nroemsymerldlshy[anmlmugxtrgypsvkgs]wfagpjfzgqcdhslmlnf +dpjpmruktkfkpurvcks[mcdigtlyilcdvykpng]wrbydnqwmaatgjpjnew +nhcyufcfcqqsxef[msqbqdsheiodqzpkcv]qlownycyhpteerrdfid[geiuncokzuwybrefno]mgugljgzgtdvyhpflbk[kwgpiyryqpdmphcwk]rghcxpkbbmimkui +yyutoljmokemaksyh[ofyxkifbjqhrdklh]ltfjtukyeekhbjd +uolodqcxatkpbywxs[qdpmghhjdsvuolwk]qfvcnuajofrynqndg[cpojwkswcxdorxvknrg]hluvdzuqsjsvhnqd[coemqesbuoorqrcht]oymvojeakuzzydb +qrghrzhmccfpfymd[ejpldprfcjwhfthnli]wayofelvbtvjfesq[crskpxtazgepeguyywt]hedblyskngtnxnchdz +gvebyckhjgfmqrxmmd[eklljmmtwggtlqdq]hmxazjnitvfcjmlactd[qhlsytdoiaksvney]jsdeegafywarxlsnkl[ycoyqpbbwsanlnoes]mnfxjeakujicrhn +ttowopleauigqfzpuws[rwaipjqlxeajbszmt]ewurrgikabumnsg[hqhoudrdngplyncdoq]jvazavwibnayzbkmei[yfeaerzswqrhjiiqbb]khsqzfojtdimvcgsxuv +zysbeejbuanxhomwne[wzcjovlgygbogvj]wqqbmqmudmkidhnm +hzetqrjsokpzsfe[sfvglwbyaoczjozubjo]fisxeqpvyscesgy +txsslfbzdakhenov[pdzbirgfxvyufuz]mwbclrbkpszfpgbrhu[ozmwusngkhbkluzvgo]wuwvzagakqcmcrcq +vxmeolvgvkzdbldvid[ebhmwbfcvzykllewj]ngsvjbjjbyyoybnai[vvhfsezmrbmdkoxbdmj]pxxmcprffpzqadbu +kagnhnyzbognzsmifby[rujzhkfynwygbcpuoq]wfgodhqkdextspa +meyjysyguijkyen[vjyhsmvoyoppjknvivn]yuyroikrroyknlkgfn +yrbljqrlekktwvq[ubrwbmlwxxtxnwa]ekompfyzprhialu[rdglmpamldxxxsgpmwk]atazfgcgkzbjydvf[sjdezkpgsienutudx]zuxyrrwpglvstutp +yqhreymyqostwga[wngmbpfomuxgcyqdl]jdkppprtdctuyaonlqz[dfpqdidzlofdishhmot]gnifxcpfecsxdincqib +xdfslzwasuifmmi[lbvuxnulhamtgfyhwz]sarfovphjgpdckkrbgy +bzkfxruybgbjsmeflp[ubqugccjulkryeh]yaldnucjnxhktrgf[jamlgglyzdlaidp]dsvhuxerhecwhjslfk[yibicfmmkiugttqi]byyytkpsforwainomd +asxywcdszmdtdndivdg[qkyfhaxaietrign]sjpliketcpjxkwxaoo[vmjxfuqxqgscfpd]mnpdsyqpnhlksmrcpa +gpgcqhpkdzpmjoxbjvk[stpachxjlsdooglph]jaaoaxtyaogvmuhl[yochbczehvuvauxj]zatcmyzbmktdoohzgx[cbwozqlvqfssqaagyf]dkeooopvydlsoakyc +blfmanmskfsbhnj[qurkejaextecwkh]iekzoszfdtcjcvqf[cllmensfekeoduop]kpldtlzhhnyaweelg[duturhserahslsvavl]tlscacpaddzunyhknql +fgtfcerscppphulhdpc[cjasnicuepcfcpwwq]ubfqrgkjexhpcpdh[fcuypvlkciryarmpsb]lkazlfdxilmfoccr +jaytjcjzwzzrwrosfig[bjwjolqvmwjwehvkyqm]qdrcohrlcqldwsj +darwjaqwucpzrgob[utcloaeoixtgcssljwg]daazkyzlexvrwrvcoho[hesdrjjliusilwgn]kflojebucroplzdkid[mxvmzdobkvksvvzg]mllhibzchrvzahrj +umabodjruykdkzuebe[pdyqfuwbwbnhvbgh]mvwcfyrzvyzbwbhen +uuvjgoiafuuacqj[ccihiuugtipqyyve]xmtwktbgcgwvwchsseg +oldckvjhhtvodiljhx[nqcvjxjohtdbukds]qsspbsmfdcamiwwr +dzilyknpfbgtdnvntf[fzelzighvnvvqypxz]ntthcasrqrblqsk +hphpardvfoqnqncq[ppvkmutvbzybiwmmcuz]kgfwazxcanccijxdxr[kvvrehncwizamjfbv]ptzvpznypbvmrshiq +iteoprxpltaartmz[mnybqocmkusetlywx]mxfikdltxvgvklaxzqt +qxldpbwuuyarzvlokm[peamzjnqawztknvnssx]pjacikdaebekzndkqbs +kswrzqhftfhqqgetg[bplpppimgpytieviwci]gfeqifrktgdqxzw[ylzjvdvhoocfxoijb]jhullyfbzrzbtiujxo +jbyalllemspbiba[fihpzyuwtiisvalzl]egftfecpkrowpxz[fwyjugfywhzgpbgxam]iuwakremprjkdfqep[cwjewifgwauyxaqa]gfnznfakypqatvp +gtdsifvoatfwztxsgmn[lrdwcnvmfiuzxuyad]alnsyodvmgpdxqk +ffyhycigkhlyiopmdx[yuuvtuoepntnqhkof]atumrmkzfhinoqq +wrkcbbifeyemfppiaga[msgxssztbxvmdii]ydxtnokgvpouvcuk +xivexjhdjysgmklbjp[scteqtgrnyuxsonvbx]kzbopsageoqsymtcfo +jtsjoerkjzurnysfnwe[jqglomdcjmtvcwvhir]rozwrmwjuehpapebmgz +qnscyvubszfeloscaez[povhdeeifvqfpyd]hdpspdtgtqpklhwqjec[xtqeoudrdzirwfxrowf]dllykbtfgrdwdlchn[fsjzptvngbbulfkpkh]nvyonktuxkjzpsciihm +jzrrmwegexitufpbx[orlvlpnnuklsapk]kpwkwfggbcxwdxvp +hfvhjwieruryoqk[qrtlruplpqjtwpuhhoa]ddbsdfqczwrmnrpm[hjjqrsppkjnvxmjq]juvwgpsglqllqhrc +wogxentwvncxpjbntf[lunrnlkbjpkqcxprp]yanygvijbyhhpohijj +kjwqxolclqanoyfes[oeasucvzznhjxkzlqb]bbxecjmmedvyfzapfif +hfdiajyktrmlfzfbv[vdnyppvsruscsgvji]opwnmoadgirnedufn +mrkqlpkzkhbfncol[huvazflnaswuhnv]pznbrubmgazkzfvkltx +lfqfiunlwragtrknwpx[quvtbwmfgutkzaeng]kcdzgwyybqugyfgf[mjngrfgzmtbehzxzsbg]zjvpmzakgijjfyz[ghpyxsxuycqgdipdua]bjqtbqlzwyinovhnmmu +ayagxnelxjvkqkwhax[zlimrxwrtlqtkvdny]nosfkooohodpzjp[hsrgztcucnuagedqoz]aujduldshdugxgbszom +wkeqhrtgnhyektefk[afuwzaqdvmzzzgnuvw]aaisrnfyhuifpglpgp +kpqqecovarltptjfdf[fwpprvpqfsntlobpdm]dtnujgpbbrqwqdyzs +alnyvjvicoigistbmh[ueworbfuagjnech]dpzdovbhhbguxpginqy +eiumooyxoukvaqoiv[qrygigmnybosyay]byhcqoggajjtotnuw[wpgsucwktfgcuhhi]hwoelhsxarzriqxtwao[nvemgikmzntrcfr]uguazrjfisipwrhcbn +ghierhnuwvmisxxa[cmfxbenynymgvcrr]oknavjpheqtlsvwabd[izrzgzwvdgymivghdpv]fbqrtbvhcjgvbkwjs[ivdprbnygkhgzgaym]ziwhfgnbawgtpmkswvu +pqcsccgpceupnvtr[bzfagcvmbelgxyns]uxkvxgveigehxsugzj[oojovkdwhojqcbilwvh]xeamwxhelypwwefsabq +iltmsmcvjnhczdxoti[umsmolikbpmqnsyah]tdtojhhqszysiqkfqr +eubknijqrihrbulq[hfmdunzrzrgseunf]qgdasqmtmgoacfid[duazrfhejbzxepx]apwgpewymhnhxsrx[judrexlgitldqqlnrpb]ynfdtcugmjvpdajapon +lqwdkmmktuhdbawow[lsrovmkjyktyduf]utmrjitsbijombwo[abvvufjkwoxsthzbao]wteqdxfhbqrakiqenh +phudxliosbjdplwzx[wmreutzkdlbxfksjt]onwnwzbffksdsrrvxuy[fuklieqfenqwinbmf]ckltdwaxzrpebmksn +mldqsgldkmerpwqlg[thmshstolghijyjy]xzhkcpjyjuydgxjm +wpsseyevqcibokcb[hnqscfwtkqckqmao]jsnvfanwiodlasx +pomqeoawmwhijaq[ejtmvzlmidqwcft]hkeetgkruqgmnpoi +twkcrdetwuxaxucnjv[xffwyrqfcqouyxmkrro]ezewjlxapphabveea[jfyjgbpkflijwvreer]nesuewscsclvwiwkn[xxjkzrpeonyctow]yclvbgnwgcarcxos +ugndgtdqyxtplkdz[worxgglrocgtypfvmb]lcziijmkjfdpghkjqfp[qomfivwilarizmq]dnglkuyyinegywu[batxtrembnirlwr]ovrphoeyxqnhcvmts +zgtxjxnktlvldrxpul[rviiugbdqcysxijrc]kyktcnhhtompktirdjz[bkusovlvbbigibd]airrtdvywvomcfrhi[xgapjazusatwmnl]usdiffjsbadtdonojs +mimjtxkzfsnijawjrey[appuokfywghecatbzwo]aovbqviminrwaszvo +kcmrpjoggjmfzwezv[onaeglpwhoxczbw]totswqmklmzrwmxdf[befvnijunppmomoduhr]wydkdiejzzdppny +fgpjujczabbtkxwvfd[cicmceziihzlkcwdwhr]sicifccwrljuhteondz[qwtxzkpzaspfynin]scyjunafukgggpc +buyslulsiiwxkge[ypiuwaxgxsqpbqqx]dwsyrzemulupybvx +telsdbhziecdqvmyprn[hqpxpfnttkmchynab]wvopujdicijhmttrn[orfuzixnlfdimtsc]jzvuxsquolwwtzr[dmiytgapehniwib]zylakfeifdzatmqpb +klvmlkigwhcckkyx[qxriuexxfsmfcpgvlzb]ygklxunjumjcmoph[ychtcmyhbyipspnnsr]pjqqgfbcsqmmrxbtj +ugulusabrxqyxbvv[atgfhjdhplritht]glsimouvohndboxh +fatrlhuimyqjjobdq[xvvmkavirljwcgmkvx]kbesaoxeeabtywsxcwr[pmvliimbudlzabbz]vseagltcmulcdib +vowrlwyrxwivzacnop[fegbzczrceczdasjr]orroaksljdcydlk[clwvvrdfhommqcn]yqigbtlwvklqxxiors[uliodgyotgxdymyi]lqverjsyuxifpjoru +wevsnwwlgslgxsof[eyjhzwdmvusnuerbqmh]mjzmgpkhaatmwptbo +hljbwkfykqbnpqhkfuv[uirnlrjpryuhtqztz]ackmzmullgwefgug +lmumdzgnhyjajoazd[yksltxstrsvugowym]xcmwqzbluyzdlbpkfkj[sbnktloqdabygsmyp]pyavvgzsxokeecxh[xcoublhmghnexnts]sdbkqumfdezjvqp +stnccrfzofqwbcafssa[toskkshmnjeywtuq]kbkyxwghqfgrtxs[myvqujeowntxqiekgxh]dplyqviwehtzoxrrix[covstbqzxjrditsf]qxyocadbpdqqqpadl +evgjdjnbnzmbzjpbfm[cxhsxvxtdtdowbd]wceyuozkwdjdsrsarl +rbnbqreygxxaufhws[alsptejilzoslxfj]xirgkoxgpdsolbhqiqb +kpzbxjsrsdgzstpc[jnpsoqmjqnfzkfsgq]tunpisxseqxjtyfwij +kegehkcwqdyujtyv[qfprszwdyjylowrl]yqhpsvfmcofhrfn +usfdjspdmrsmwotku[phpquxkrbrefnesvoig]vbrbyhzjjueflzur +ahcrumgrsucgvcvs[zgiwqzqxdocenumve]wwmkejymlaysmpr +egorqvqrhdxdcwglb[pewidggmjfdwchmpuxq]vfpginbbwnzhzutt +rbwgxniblxrzdux[ctmqwdtjnnoizpfxkb]cjalwfgvfvehdshc +grpqqrkmvatjnpe[fpuzplowwtztimw]zsebojrxdfyouujqu[jieuliemrlsrrhaaral]vapfxmifbvtdzjpqfn +kxqzgqwklgxylpccai[scugesodkfdyduxfgpq]qeoajrdmbkawsrcde[yhplavixoxekedvoq]oefgpvukotfhzxvdpt[vfffrlkuirbixakjbg]shhslgefljkjhdu +xltaldprsvinvsgfg[korqzbyuimhrmxg]pamxettjpfchnwvxfb[secngupffbmiekzfewg]jzqfwquugmanazihei[ldhzfrgdbneaxjjndgg]toefzbwrdaiqssxrbqh +qgiiylhrxzzvniaegfw[vfxiqmehxnnjheiszxb]txrwpqbqkdbnsvt[voiphlhjwxrkcyrarwt]lhlhcobxijaoosyx[dyqmagxqryuyfbat]oovkonlsaeiqnil +cwxhidoqdhxragzpib[hjmpsaxbqpiwqhy]csdontizglsbbeh +cvqlicsscacfmuugq[eejkmtnhdfogzpbhygc]hsqpgofmanfemhido +tsbgyswofaablrj[kxsfwmoymlmvxujvqc]oiatufqeigamjtqj[lbnetvjnhlmvyjs]aeeetvtqgykzstpt +zikurkodzkxzvjucknr[eeldigjdnjetqzwtl]itaxybvtwbhjdci[hbkvepoewuzexeg]ohfbodukqdlanpa[rlxoscpwxfbemxvye]ydahcjuodtvinta +dkdquuhvndpmvudwjx[hofzlmhpteoarpre]sdvnkykpcblbaardmf[hdtnalxmijwrorx]ixsdqmnoqrieeqn[tvyurwrpjzolmoqn]odvpdodyhdjvcaqi +leufyoljrgauyshjmdn[omwkxoqtffghqvn]iqpnagprpvmlsvo[glbhtzdectgrymdzxf]dwgpfoqsivjdvpiidzo[glnavlopicrpfkc]nnstfkiqjxccqrvmg +jdpqymeesiieeeb[iwrygkpzdjttxuz]qqrbobabyedbigesuh[tmfkwpopdgcfuydhukb]mzldoxgjdeckpdvu[obojbnmmlhdwsman]nssaclvkjwmoozuissi +upgpcxmqbimkrcvcmp[ivnacnyueiepraljdh]vfagabifynlpbjdc[dobimimkhmytben]pgasxhypmszdnvjwnwh[nvcvwfgrqenthqcqlw]cdvvgepmrqskpffhw +fifgarfuqaoifkymgx[mvgawkhnxvgaqdmzat]fuemwmfadtlaxwyslr +bcbtmtmkhecpaemtmec[apsgtrjqwqreuntmdyq]qecxvrivzvlkwwnzcfv +vslhwcbtvnnkfge[zbotbapnldktkexac]ieekqwkifqtpzwsb[wjjwgvhvnqaqmrmath]aeauqxrfhwdlbsqx[ijqqcgxjzepgnbru]uycbebwrapkiobz +fgfxlcgdrvbwkhf[gcdnlfdqppnocayj]kgluimmxtrnrkxxy[ebmozaizcvfxamjfgfl]zxjsthsrjazocerdybe[uiodgjwmepojoaswdqb]gsywzobidosuauosihp +jocqkcfjxtprwzxcol[jomzitpuxjjstqj]jyaupzbknhzvwkwejgg[frkljzosjvpzzffe]najjqpukuhkyseux[obvojkkfdiawyysye]awwxmmkvzedenpagx +wnjitpqtpbywfdfzqb[zsmozjfwpksophbzrp]ryxeuskjtgqxlkqinbl[jbenmfsdrvwdjfxhibx]vdwygykkkqqzoueisnu[xgnqjjcnbpugkeuaon]wvyttauvhjmdqcbmfqz +cjikxgbzdupqnoq[khvayknbckfnohcbc]gjsqdwbzsjnwjblbe +sknizlycschmfbcbo[glptboptcwtmwmyj]hmgkwtwaifrmzxhee[dxxxiulybtkhkstynq]mjntafrkgppmgisnz +vbijkdmufqxhuinw[nqkbpwcxoozkrllibiu]maiisvopemncukdedg[flspngjuzwaveawgk]lqinchaieoizrwr[tuyuxyvxkesiktilna]rhyincnkvnnqejsoxp +eehvafmuwihwbizcao[vnktgdjhjeatxeshjh]taoisnoyefbphntft[pfzlfnftyvfkkmau]gxmhcurnvyqxgffll +ytdqzmfcxjezgvr[yttnwhebnitzkmpvg]gnxpxseopkiwdwq +tiygnypqepfcbcqasq[qoiylamohtllezrd]hieijornlrltkvvf +gcolxjnzzqtozkqlo[gwiytfqkewszkddc]mervsuxdbxtqkclwli[zamcpapgayrobsrnros]skfbjychckenvdnk[msqqgpdtgzpbdsflgo]hswedrxeichgpbkt +aoyzbbkhsyzouhf[yuheesbhrurspvkoeoa]icwrvttxwvrjodooy[lclcdnulwihttoo]aheoekyzcrdbtnkdn +epqxzqeqfqquuvaxut[rvniqevejzxwbgdj]mdozdllbtyxiessvou[ftmdtfmxjktmdjrp]rbdfhuqvdzpiyaw +fvfozofyprhtptnvfvv[cvjusvxzqhknsrfuw]wwjlogceospgxpoq +lboiooritgdlzti[dcvmycwryuiwrxuf]rgsvwmbouwqweusdsrb[ncalmljnmldxtgjyn]digztuhetumfrmzwg[jxhgzioinwtdfvsczf]ormtzakkenigohbn +jjgkkenzhjxreujjury[oqbhgbvyvybhznj]lzzpsybrpvmfxftasjv[fajchcbbxzyjzdmzju]jbyovxsryhenhqd +kimqpwhmrecjichuf[biclfkhxsptyasun]cykzrmdsfvyszfldtxb[foamaxeacbbfukrav]kpdkasbbrjuqndsjf +ixiemjwdwfauydlzrf[ehczcannzlhrpuu]zgmsdfleegepchlbml[pxixfrfqusymnyad]wynixqpqilkigha[ujtjksmgswjsqlt]uabmyxgfqtqxbtggvoh +vvxrjenkffmjasf[zxizrnxsywrjpbsy]danlwskfpxmwozazt +hdbwqsphlabkzxxhrgo[erldraphnhaevid]ynkxoezwjpygvftw +eynyhfzlfnvsrguftv[olhsgnhicqlhqcopiai]azubeqximmxxruopbcv +ixkfvfumxiagjybsn[frwibevmaiibyzd]qzqfzepjziatdpyqmr[onsezbgebekxybzzqzw]yqotbtwhsuxraexdfes[sqyxxukeslhogqaftl]kpqsxbeawasfnbwm +fbotlkdfsscgahhtbvr[qzlujuyglqbktek]fitzbfribrvygprgssx[ytfthkzieycghddhs]twelmrjujaidadamq +nuxgihsikrkmrydy[awvlrjbdobngseyw]owlsggrmwypppcnkmws[ipqmpwdvbohtnbs]nutezdkbigrjnveau +ftxpxuuvsdipzjvmy[zfrkyfvducmhwzfdxj]ycyrhdiyszpbldrqyqp[pdhfnaicafoldftflv]rskyllsuaaxidlokgxz +gqnlikldqbizpsceti[skfmnlrtbwyqrwpi]ubwivkayvgbhnixj[kmlxwcfmudgamallj]tfwinixbevrrgzozw[iufudfqiwsyjcyqrs]ujixfobkouvxhmvcql +iddngjedxnwlbcxhkw[yqwiebcdacegykn]saybhmmqxdoxrrzced[bqjiuuqpbxczshymt]qagtwkbyyslughgsxrd[wjjqtpphygirijzcnun]lvwqqctdkjvaatovttj +qzarsgfojoaqkzb[jiuvvyihogymomqddqs]ekacrjmxsudjuvjd[dkfjwxmpbviqeuiotlu]tpmzbyfqhelgtpic[xcankncgcyaixxcuaj]jsieyimscyfvaeduf +epqisdvjvcpyxcwxuu[hhdspwfhkosxunncv]iibgrkioklsoktfp[kjvjytinytggjurws]oekjstnakyoohller +yidewjsqwykhvakby[ewhvuvpzmeexvwtd]mygypbsbaabkccvslri[dgaksoqgxghazflkn]kpdssbszxhpltdxht +ijhcdyyvjscrvhh[fpobanqwzccnyev]vtvztxptbegfabvm +fcicsnaoileyhlta[ivnthhpicibzhtyfaf]agaffazyjidivabel[zprfefitivfahmsx]jxfvpjrbftgokdclnw[vfmlrayxecyduau]dkuaarmbkuqqjuva +wjhhegqxpegrypjlpvr[orhbboezmjncmclamy]pckznmicczddarise +ccxnbhlsqrtqcbrczci[zwbnllwffvdsmmd]wdcyuartrmykqbvmlc +shpzokvkrrpypaohp[cdbxbviwegleqizw]dcilynllhnasdzaku[brkdsnedgdlzlhxzlzg]ygvficcbzjonmzh +vzdkvwtqbqsgxenb[dfrsswrrxxxlpxpgp]lheiqkpbahpgjtvax[lbfhfdztehvveioipoj]xkpbfwdxvkcndrbfgya[qvewltgemzljlokhjxi]bufpvhmvhrndnkmjsjr +mynfnfbjlwljwoqbenl[wnuganfnmpqrgcdxvn]kpcfvfegyibrhoeouiv[tmquruuijoivdluhc]lnspgmbphvhxlcw[slrraibkhqkaupb]vxwczoqsrepmgzz +eaeovlebqlahuiztd[dngzrklmortvzksk]atunvakfxeqeymw[huaccbfdtygotzubrj]poeblqeqsdqpcbqd +gzbgdqlebuwepvx[qpajreszsyyluwi]hymkhgxqpabniqzells[zediljwkqfpvblioz]zguladbcmloyugl +cvkyjumasouhugvvz[dtidgtxbbufhwyvob]pdmhzqubmdreglyy +tcxjcacxysuimczi[uhflafmjntxmsaf]uexrhinqroupcbksrsj[nocrykejeuzzigkyqxx]crwdvpjofxynwft[fmxkcqrsrpdfxscabs]crbnlnzoihruuilu +notkmxwmhfptgfpvntf[ucdfxyikwxtsumebhj]kjhhkgtruhuqzsl[nyiklbrbfvreipanby]flesvbofrdsclfvm[zghcpgxoauylwmlzfl]vwotzewzjzpyccl +pjrbmasdillqwdkjfni[lalstrvjalnttmwr]xbezkjpklkrnlpzjjn[wbpwhbukoixcfsqnu]xknhkqjktuybkfnz +ykvyxzavfcirelraq[itraxkxjwslzkxkigcm]ndbwcybrgayecrpjao +jqwujyllrskoetkbz[akunxyvvaxrysiygb]ynqqotupdoqbfwncn[yyszfaxjmgqmwxrvdx]zeacfwrreohtnzvobhj +fsfgewroujqwaek[mryrrkeqgtpibzn]vlmavzfvsadxbdiph[tdlovgncglhaoqafic]ziupjyryletstrull +fosmjgkqrqvjjigrtf[ejrefcyognxkuvlwl]bzhpufedodqwsztzng[rgxidklqahcldewgfrl]eodokojqopkrrhfpmmf[yqwaeuztmjkelpwlj]zijgacsyrbtwkxh +cehnutkhbzhfouyk[pdiacmcgcdpmsvgvkmp]uaslakppkycqbzn[ldbaomdftjcnpasl]fgdrrrzumavxzlojm[iyknsyaoypsbqicx]ggtbqnjftvmqkmiu +nmezigjskmagkzcsyhb[rfrggycsxoxxnxrhyb]zjlrnpgxzgljzfw[ztdnrdocidkgbqmmqa]hnuqryossbzlfaivij[dkaufcpwgzsxztpqsk]tzkdznvnizjtbrnqosj +zcdfhyoyrbwonet[otdhxcbmwxzgoyoo]kbkvqasgmhmuynqth +wajbfmurouvueehl[dvyueqwzbqcpdvbjfr]vkujmhhlqbdaqcsvomz[wlekuxdiumhnwms]yzgtuwxfirpmllcek[tzipbxbzpxcvzxzmtr]tynktoelqfhedvavge +hueffzriwkhilam[zheswsymmryugjawlxy]rptwswnecdpsdjujnt[rjyipvpqzbnvtugvi]xkicvyasotmrxvqj +rqbhugeaozfjbqm[blpvbvcvrytbekhjfo]twsrzdeuojhqpaa +fymuqqbklufqakg[wfsqzzrvdqcubxbdr]yzvdgnwitopzvtha[vhrdzzbmubhgovut]tfkcybfbdsxbxaxnmm[ruvfmuciecbfoxbummm]ysaeetmynjhyegk +koqhuxoxhzmsycbr[vbpklymhqueodieomz]jmstuovitaskfbay[mpccjuzuqwkhvnzlbl]jvdqgfkbyzaaeaxjfcl +sbryyigqipvwczxty[ypjxmlzyfjkfqxyxibv]ktqvnmbdtykqyiu +vivvjcfrqdbkyopqjdd[wkpuxloudonlcsutb]wpcbavtlbxcojarsj[wxihbnghmpfppwqlykz]dpyadzmpvgwtjoiz[jgagjiqugqvjnehajcv]tvrrkzjwwxaswbaz +tkpkdqijrxmpddkkau[yljmixrzauogowt]yngihfgazktusprrt[ggqtnksekzzypkpud]rxvvuhfakfcxjieaa[spuvyobjexcgobltmk]radfcjxnsgsntezrerl +hywcvnclwvvcmkdk[teiryduhljxirhrjbt]brkfilaybgtdkdh[zjqmovlmzogwvfmmi]czmtshoirukgjgeug +sdbxirgqauygushqq[itvwniqwuzmpzqbuug]dnrxseaisdgklwodsgq[euqpdyvpyncxocy]ggchswamymfpxaiap +nzteyxnakzfebtcszx[uctynyhtavkzfcudvke]uasdfpeleelxacxq[kyqsinbcwbvlrmr]zelddmnaqlkhmbsw +ttzhosgzkuxfwsy[carsvskefzrusoihqw]qiuobbcgndqqukuvbmp +wihzjoazedelgsojb[ftgarhsuahimrocy]umttbzcrvgzroprh +itojzylgycblvbao[xgmeltpmzvzvyfnso]kuohqnawebyjdrerwty[oslthgekjbgpsnkyk]jifnogopgpnkfdrwi +nvyowfknauliiht[tskhxdgvaggvgsbk]blgylrovweecglu +hvzpbfqqlwjennnj[vnmqrqlfiqeqdmg]hfofuvqicttlcxka[ievkgdwazpamrdzz]aoofvzixtqamcvhbh +yuxckarjmwgyvqjl[nvlegkojdyybpty]hvkrieawbpkcjit[tewpyncidhvdtomjq]dtgggmzwogtyoxrepi +jobfkxxyhcfvetxwuc[nreuagzglpniuwkvui]seztmibtqvrdepqyt[skrxasyhbotymilzgzr]jnhqwvcpirmpnltnyn +hoqhdburqwecnzksmd[gnegphjoyuvflxlujbs]zhuvrcztcfgorbwuc[pjxxfqyqmnhyopaeh]ewbvxrexhvdawazw[kbngpgqwtgkzuwupwj]kmatbuqigzqrzmbq +ltjrhusfbjbciixg[swlhqxnykjxumuifqdd]romkzpszqgaflgbjpsp[lbaqcvazaucueltnp]wovkfmiuwjdqxovf[vuundonjprqrxakp]wxeulnkckdufqjy +xkdmgtutsfumpzteeh[yvkilakqbawvedm]dwwaexrzzsyjpzsn[pxitznlnnvnjyrs]kcnhpbkzicorrgncowu[ogyvmiykolbwdtv]vjaksxdrtpuuyykihe +eyzjheolvkemumxpo[ipwxnrhyldvgewl]zbrzwobnthndxxvthe[gkfleabqwkpjxbtdlt]wywjazwwxwmuqkpwj[omgsyntzcnhjvsu]asknyjsgbofzyfte +kxxpalmmgdqwahfxs[zwafxcjjypzibafhrag]qfnbakvxozjqgbnnizp[bqhtnoqzctknrmmh]zvmyctoitshakgx[dzatbhonulhknbio]eufzjykwmqoignzm +beenkdmzqibirws[majntndkzawkbfpi]biygjiawnioazizbt[yonbljzgueyiuirtv]umjmhspfocrpobmrfu[dwegjekvrmgoaqc]dorpbifeqhmtglavx +sstlfeielfmztngzpbl[alzfrbyqiqangbkwi]qcomrirvulgipuk[mdvsghpkpisxplgit]aykwuhadobubmrdtvvj[pqdycsmawculwsz]oemcgayshwppgbwanxk +qwhfnqzudzysqxwebj[nhsrdvugubbtuuseux]etcjsefcsjblcjgshh +cgagbjtoxvwwqonb[crbqhpfajsdwtudybm]dquyiuqtarcupaeujhk +qjsqqlgdczcqarhftri[rchwsuodsdofjpd]mrpwnlqgetejijnwnr[lwusdojqkioapaxwc]ioumfyxtwspuyztz[dgncyjfldlapoasebgz]raelsaeajwuhnabrgw +tihnitxxkxjvudnrj[neqbqspcfnldrna]qkkcggwjgejtbmggemx[ffhkzdeopnhrdfpbrfn]rucxwfyfiavskfahg +zralvoiqdvpvjkkf[ttvdslqoxnlvnyyskq]joucwcxixdqsagu[tulodbmorpbjnzz]qkknyrgruwgrgupgb +fgfaohmvjameqyl[riumppkgphbaziwbfcn]gspevtjsfjazlolblh[sueqarjummrmwdgzsr]szmltztnwpqshlr +lgcudszwvsooaxhuz[wpnexmkikdsfquxleu]icefstmmxwsrzqoiki +elrybwwbktbemldjqeu[moigtqyrbfwcdtjkm]cfquoomooaqrsuomty +rihnsvwngkabincos[hrafbjoluwrkoaqb]genyvelnsrwqpljgdf[ytnarqybnwaeawssx]bdhppadoofmwwbcbl[acnqxbqukongbge]tptnvsrcborwgumweyb +sesxnxaikeytqds[groytsrabjvakklwp]jzexhtzpseseauk[sdndnglavrmhzyjdh]mpsxlaxqnazayppc +ozkfwwrdoftbpnqwa[mvzpilxwrdeszungggo]fbjxevczxrypzzegxmv[zvzaovlhirczrlwnvk]yulsjotokxaurjibuk[hygvqlsqfygujup]ijtuoskhnrvxmmnety +ssoavardlqlejqfndz[emljlpogavcsyvavr]izdkqsihedwjaxva +wixidnoyhmsiuzwbm[jgqpnkzbobknrufgif]yaarbsalkqgscyv +hgcggfqnkhbjlhhipc[cgcrrzyspqlllhee]czfvtkjhfgnrwwua +ggnsczivqxwhungxmb[foslhzlzqyhcwepvhga]qgqnwrpvfjilhnttbv[uhuhvuqwbxsjxqbmqfs]pvwkiufdudmyabq[ffqrrfjgkmegfls]pvuflwvnbnllckrmdas +llelndaczjibswzoaen[dzvunuujhpmgqdyond]slkfwoyxpgohhelexsl[hvtucjohyvbuihbonup]mwatlwbwxntozpiymy +epjldiafxyinaljee[zfgytlqlzoaauszrn]gvyukiahumemeqnsy +vldhkwyfpfssriaiwe[yuluhcsjdkyumyhnd]wggzcfalpkmnsudzr[qisyeltbpzmkvqr]kmbnsrdjgspckgmwfj +qkxpyonwbsteomlyhxz[wdkzqjywdsbiccr]ojkvswlubvbbskvnbdw[ejvtytntukhcuuad]hspfdjitkfetytyb[hlgziyjqrulvyaoco]rfhwusvjmkzkpmjvrm +lnmjprwzvaboyyobux[lncninvpqfpuaswssjs]vodhkkndlvixtbsdfph[gdufsyhihlynxuluvx]oyczgnpmusuvligf[jqtdbytmuyavcyfaia]mcdloputyodiezffqpd +awulgpuvbkountidkgx[rzatlqccygoyamniyaw]zmkfnkaiuzjgdsxd[dornnqierejrlxbitfn]qyhlxykziurpdxpz[fjaesxiowwxjvoxzq]oujzxyreqtbosriwkl +hcycycsytqzpijy[pptcwgiggnlhewdwfa]aqrsokplrsmbzzovz +szlezpesytqglub[hlmouktdjtcglvvb]wgcrjqyvabgnnirxs[cafdqrjgmugvsjarx]uomjcavfgggsyknjge[syhraisenfpvlekk]voyezwktjlqoirx +ltjosfxwsqmgdrnpyav[revxajvfbpuqqscgxb]pnjpsoikmxwrpbk[frqghuqvbomoddukohb]egfbhndnpnlxjhyv +ydyzmmgkrvbycjgeheq[xmrcsrshrtogjfez]vberqebkqhindvsj +usczwnycqbxdrcfr[papmzhuxspnfexyr]pwsybmexcdgfztkc[jmiatnbqkxmarkaeer]whejsdpzzxkdxgwm +vfiswfowhnwcuusmd[dhhjzfujepawktlh]quzyrwoerrtncnnxup[ekhrriqhoudhiwiju]exzcmnyrtbnxlchf +fmobpaevmkephhfuu[pjbpnzxkqpvoafxj]ickqqwfifesukyx[uzfultsftvuzbipz]jgvjewotmlkzqhvvc[fhfgcekzgmgxosyuac]gwbmgqtvkhyqidnehhy +zbwadipvxkyqwsaassl[wcojcviexybrfhdfc]euliyskdckqzozfnlpn[fsvqspcvigzxlzya]vzabwryzpqlmvns +wavahkemgrtwnvbocse[hnzvxqcxzisfehcy]mqvssniqlwekgowu[cusnrkcbwuichekh]cfvncmjjykeaufknu +wvtptjerlrfvtbywes[ciopqzpfjdoclfyxxqy]sleyhkequxorssls[weyxuuiigtkjsmnugij]onxiowvkwaaycpv +csanwgypabdqhiinan[gujzhrxowlgejtk]mkczaemurigewvqw[lsqtuuxcsuphogl]acfqrkiewfykgnx +ennvxqkaqdppzmj[litdmoukvydtepvji]hfuqcwyuufmxcxy[bilbdvnquchtcjquymu]yjndoqqpyzrjudd +vhkrlicuffddtktngy[opctcwvtlypwglpaoi]iscxtzlmlkjdgty[xadnwdasnszzmwwid]uijlqxpfgkkcmwga[ykqorpoxpbjkepibk]dmuojdumobwfmkvqg +wgcihfnjvadtczgqbj[psdtqjwifivgbhp]ocykhmjfvbppiltqpvv[ermpbuyieexqujuiji]vjioxemsjslsdxso[bmsocpaehaeadsaqzbm]hqlzlnedzwgbxbcacf +reesvrozyerxeid[ymtiurpepvrvnkf]thobixnwiqrdkih[uipdwllkuudcydjinew]lzpxeltetaixzfjxvf[ewlhchkdiewigxy]wfeiqnngnifjzbpikb +rxgukabwlgxzaxjxch[ljrblzdmvcwcxdoomq]ksidvuwcwvwlvrpe[yrnyjokakcbwdxh]nertnqwigrzbtdmj[gxbsdsdmishqjeswt]dsgnhlagonywspbr +jjdfvvurvfljscocvr[ueywpzuumfihiocoe]lmcrxdlkqsouhpimc +qgelmqtmcfsdugg[jpbrzcblivebxazpamj]jpkxrusyqkjnndao[nqcxhhmkpfgrcwhsoyr]wvigixehqklwvrscmz[xutrclaofzczcvfnxll]xsyxrvfnovmohxfbt +aqhrsqbyxtxhsvmnz[pfpclhprjghikyngp]krgiznxuehpzeiy +trqnrkulbvipvmj[mgsdnaqnayymjyp]otecdnzhhcufrly +illmnsgqusbqybiso[fxddafnnoholnqjotb]uplvjosscbyhwmw[jsedsarqbralzbjmyq]sdwkyeychcdpqvfup +zehmutjhkodiqpi[usuretqrbmggvlvr]dewkdjmtingkzuyq[pmmbbozcvplhejh]jzasjfqvsusgnkfegad +ljpcpqtpcpcdttjo[qbmnhadshlheoavsbxi]wnwuahdcagpellgs +ayqxaqtrqzbxyhu[wkplzaetynfxqzhtkco]jpgbztbvmojlflc[ojmgjvfxdvlyzih]levvkelkzftbzwzkow[fmszxqchzjhxtwfm]vihmoqcosarkzsad +nigshquyfjlleujdtw[qmiqiabzqiqafambcv]ywbltgpjxcwlkyahg +vmgyovkavazsxwed[anpflkjsqieufhscn]uizulvgasvsstuhfn[ygxgsfldybdnsleqy]tztuatotreocsrfevpy[yxqmsidajmknyrae]whoydkufyieuqhmqv +jyhhfbftixtntuozgfl[ffrzhxpaezbspndbo]sbwvaoziercfpmeo[tzeluvflupgartnyjes]gqfmzvmpieczbjdsr[zeenwxfhhxbdgjkr]ojqxbcxciclzwthvqyv +olhruodhjmaicslbgw[upvujuuazyolckot]gcwfjukdneuxqreeg[tnnnlficumlgwkdsxus]pxrxdntakudobpo +vdowqzktnmpimsvok[gggjvxecgicglrkuvfb]xtsuhbzqpovnoqhnbs +hxvziijhffbzjnjvgoc[sealjvjgnjnkzac]neuhdwcgtjcvpku +qryaqhtnjvickffebwj[hcgzffksmwbqqdm]zrwihiolnfuqzqpkxn +egbqexgeqnqsaxdi[xghkrttlbmkxgfj]rpulxldvweijplm[dldqxbqxenksncnwhxo]steqcncxfskqcfwfnbm +dhusxmzjdacdrqor[tzblogyadgggzbi]vssexeogwduosdoeo[xexqnjrctzlbkfri]dqppelyoecnnacs +tkrkjtgdhxdcyapamp[gvyyiztulksqxosp]voudpakpaphmrlebpj[vghkfcrqexfgoguvbxv]yronkwfpvrwilnuegkb +yiuhvglusvqtzvngzuc[mfvcrgjuywuthtprxe]vjrrmtbyppmesvorp[ucqdvtwolrvpjyhiolf]eazedskopeknjcqx +segabhonjryukdicj[zvjqilxyvwjnjgjvrnf]gxibvkxslgkpfdhsn[tlbwwiypungvwcvwngx]hhgglxqosunhdvgr[mrjgltlfxwsznpnmdox]bqsgftffsibfruyz +hrtiuksavtjzekgf[vaagjkvweeznlshs]ntotbakgpxpcmqanhab[pqvkabybndisouur]cnjoxldhauoppnqqk +yizxcouxlbjqbijqmj[kkqvlcusdkmkbmuia]pidiunjwlkapojzzmf +dfzinzasgtnjdbdh[wyguangjweruyqm]jfpqpyqydvbdtgqpqt[eryvzkaxiahxekwbp]sywpjhgufixvhljk +jkmabkiiltlvopaxec[utofhywhxjucodwke]dwxatuzwebnyulyt[iajptbioysozunsws]nmfnmtguoqipjmigsyn +yxletutyrgisbrm[ljtuifjmgxupgerhuhb]wpqnfedngiollocqbfh +zszqqoahkvdvpezddea[defewzqptytvhnpzcdu]cxuavzeyqysdynnr[gvmfnqnjwrjrjzphei]pelrqmmykeiamnh[jrjqavultdjecnghoc]ekxawogufyfdmltveqf +morsvbgrpgqiqeplgg[giswwkjoxkgkbonav]lyhrrcwskwjjflawgs[ogjazoccoomohhalb]gjnkzumbxtojtud +gtgotbovcctgtwwc[owthnyvlmcwnctlkilj]eytxalpmzywmwqc +ikznlwbayqdbhusm[iqstwodfolztyldh]amvvpwqwlswcnut +kumjpojktwxazwtg[idtisckrbetbaye]mgqtwjxlbdpadrnxg[eourfrbwgoeoqrlvhv]gegegzbxfyzpbij +mxcepmkacvzxddcpnsf[jviddcgbglreegewbj]qmqdhescnuuswkhpvxn +ltsouowwsvovkbie[huwwuaptbopxsixrb]skscogxrektbbmuwqu[niaczcnnxkymnnuu]sfczdkldegoynqw[mrjssleiutncang]jkfgyuzcaisvrjekiwe +mfqowsxqmywlvauv[fziifhafjuiwdizvm]gmaxzryznwavsaxsv +okmehkbnqsegqinj[dxddmmglnqftiunfuea]todmrlalqdfqfkbq[vrktligspzyclnfz]jwdvkpuvhpwffrnyxw +mybozskxkccdsuuptc[mrlkqwbdhhktuxpzjxi]xrujoxxkxwqcthydsw +jupphmpmynzxsfkr[xhvcemrobysjizesgs]ijjlrwbpchbbiblvr +vpabzrcqfzsejjgln[segfzwfyprsfqskhop]gksthicdjyagobs +tuhzaznrumhuwud[szqusyzaykegklbcdoo]prwjxzrwyrgcouehrg +dfvbjgrshvnvfumqxh[tgnhpzveumwngrnoc]qpntyvcxxoofgsk[jibdpycgwklugip]mgkzhcifwyzxsbuwj +mbdpghflpcondfk[ftzfdsbexmnznqqmfaa]xznzgqjdfkmjzvwni +ojjaanxihagtezp[pxqpdgygyklexhrpc]lapqmhronwsmwbbf[rzuhtemugsniacn]apixdvsnjpsplmjwvn[iwdpiqgoztjamenyyw]zjyidlwjbvevovgf +pijmbdkeyhcjzuwclu[onazufaoibbwzepmbr]jhjaqudvrdoqcvobs[lrwjikvojmgdtkwb]gfxgoeihxughdfbetm[yjhxesdcdudwszwv]hgfdxuejwfuedpdu +hvdutkvozvxwpvx[beubpipzuwaclrev]lqeylkxqdqmcdqd[oivjrkpjzrjywzrxely]dcupjtbrltnguho +esrepqjymnodspvjib[kwdoleplnoxmntjuip]lvrhqceegktadibgh[yfbqpomfldnbpxsaoan]cheitjzmqwdbilm +oakpwuuoizfcsfo[csxawuixxvzzooah]dafrurtufjpuetnui +jmmekugaastsvdn[qoasgnykbkodsgt]lmfvbqomdghvicry +hqznrdvlwnamiushnou[iufqiqjtaiejfqwns]xsgjmqqsvbctpwqcgz[mvpdchozogazbfywqd]iqimztlwajwbxhr +gkeetoqftvsdjhhghre[nspwxohslbgkpyyhdh]glknqkzyfmvjczau[zrzurqfppidpckhmxu]rtawnnjhyjnbvnt[deisyafkjnxtcjas]cshchafpoiqptus +jpkjyjiucudsgjz[mppiltmurhwxvmv]sdhrapccelecuctxq[cnwlmuvyistotoykn]hjzxzneifkwmvumg +uvzuxzcnipyfyuesvna[ckplomuathpfkndodxk]vrqhbliixmzbefuh +ionmypunjczxhry[bvgmqzohimrjmijzkwz]qfzsokgukugmeso[uarvxrewouktpgnghtq]rsnccdtstsegeoudngq[hkvkymbbgdyncilyf]zteoiyacrtwykwzbxy +jnyydhrsrkeujfvj[qmxzqkbwizhvcztzdqr]yllidgevuektldszzjy +nuylrchiwpfvhdumyet[hfgfzmeldvotgtxqh]frzcopyhigfewcnb +sdcvojpgatiidjvfy[zhvymqejqxllelyux]ektbysjcypxfjrsor[kgfvqbereoskymyfp]izmdymjhwwtelesjr +xnelfgdpnrfhdombqq[oiidietkplqnygwsgo]jiltmfqqavrjrvyui +zyuubhwaovcbnaxrmtv[yefoksxqkrkbmbm]ainfhyuonvdvcyegy[nntnxqkqdqattwt]tcrtyqjhokntxcb +hxkbhdfwcraxhdcff[umxxccphsddzavdqn]zsmmtgneghqsrwfauw +kbdughqnourxomuiab[xcjayouykostteh]enwbjtpxpyzaeuhuwb +cpmzhwxdntahvhl[diddnwirsnqchwr]etsizyoarkawzrpfidi +xrruvcmbmigmutacwc[owhorlqlgqujvhos]iddgaukpxlielcko[gawcwcvuviuohmda]bfdceclnseehdeyxv +vlxaputciirctva[qgmwpinixdixaiut]kkoousbfcxganzcffg[cikwetvrztjgefpzsks]jrsyfxydznmupwapco[ooydsykpjwakdep]krlytknowykzzqaafou +dnnvcszortmitfv[sbnurvnwxwmvbdpawa]ewayhapxdfxplpqudro +fsiehjchtnyenvmjfw[obnlguwjqsgylwveak]hupypbuggmbkeqxt[ljxbmifxgorvriaj]tkttmzairwztsmn +pnhgjwzyqnjrkkw[ofyifgmztnzelptkwho]cgnlnrfdgfgjvztpz[wemrlhyskboycpdbzr]azikmfaudvrdhvfvt[chxmcbgineaycjiwy]kjbfttnqgqhkefoolo +khdlanelfapgxqpspe[alrgipfwfdyguqtk]coxffjtxpbqmxig +sxobbewirkvducqxd[ubfbqjccnbtkwpbxqpg]hgsswdjiudnvmvijt +jzbqaqfubdsfinobsdu[rojkizavtvueepedxw]lcsyjeoyieqjcim[nszibgczunpslecxo]louacmgeotayemh[zvpjwwpeyjjdhjc]jidkptxmhccryujojap +rrofkfoljuossrced[ymvijcmdvrzhcyh]zegkwrmeneexpcnrh +eniwjwjnmgyzescoz[semlscmtbagknxpbvte]ysqfgrshborwtgnwtr[bossxfqcyadppdflbr]pyiuttfsuegwjwcxzr[yaymomeitxwdfvsr]elhifdegwfstqyniqta +xauanaojjnhdgcpuwwj[ccitjseyrwjqvaljv]ebbwxnquaqlhgqjsgwc[jybietxintbtpzncpw]wfkwxwffzxwqucjhyvs +ipmxdranyxbmwlo[ueimjvadwbdjithwn]ifmvlcsneopyffsums[ejornegszbqxtosc]iucimozjnkqkeysden[vvtdfnvjnzqbxujml]klrpisgrmdbrqbupc +evolkocwyejqtcazj[dzleqjleocyexjivik]zmvqrxiqhsjtoezm[sskndhlmxrucdyqvop]murrraduofedtltbtg[kuzqpodvwnewwqdil]otvalnjnbexltsbitwi +ppqnetrairzkzlt[hyydyimhgzayzgnxqn]lwubwuvowsyovjjfgp[xbzmifaqcmpyuev]wtgcnccsysrfvbtb +jpecpgdrvunkjfrp[eevsiosfybfgdgalp]veprfliqlxmoctjx[bcfelthvqqxthqwpuoz]beufleuquitnnsti[aslupsydyktxgqsolq]gctlsoauflrjprdn +yekfawwakhkqvpqf[cvenkdpepuyimstwmnz]fphlenyhtsxxeyst[yohciybbsiokzajcwlz]vtqcjngqpamsvrchix +ougrpfmoohiymnx[gorlgyciageugmcbony]ozmvirifntorlvzz[klsgbagukrnbyzsez]rdzhlkpoucggkcdqm +gfhrcutoyproiww[nzgfaaccfrgdbcg]fcrtnobfhhyzmadxjv[vlbueztcxkkbufljse]gqpnxtlrrhclwuaj[sstrllihglystknh]alxmlywxfjwnynbwfk +opeacxklhjwcefmwrwg[mzqwxyfltfqyepcgnym]cpziqpjettzcnktrqi[mbnwwhyxebbececc]tdkduejetkrqwoxrsoq[ncenzwgjnekbobv]yxhgzizqxwaihedda +svatyxdgfofrrkiksjf[mxmrficzxfyykqekorr]qojleucutcqxqryi +prrhfrigzcmemou[zkhokevqzcspzoyt]tytqcpuucppiwio[mogedxwsflwocpkdh]kkqnructlslbaked[sslztcwiwkudgtji]djssvabrpmygljeh +btundrdlcsgtilltpue[jiunnaqqzfgxauqjes]wtdxsfqroorcghqk[qvyzuidvkzmomfi]cgckuokezrtxrgdlo +tjcpdjzfllhwugiy[vxypwowarlatqjlwq]wnpwefpgpfcqqwwrsq +zfduowqkrccccgggmbl[iwwfgrhmjxgljwqf]cminvjjyetivkvhvkdy[ismlcjjywxxvaehvhhm]eojlvocbfkftjkapzs +hzkrcmpwhfnbwlisg[wxwoegwncugpcfwywxe]voktthitecybcfpnz +dcsrtgkbstmkwlzy[pcnwmgmcmpsiyizqx]pzjcivraubvgbkdahk[yydvhvyumdzfmjuso]bfljbkwodikjenu[toxagxhnvgkwcivpcuc]sanysdrigussqum +lpcxkqrspacyzrqhbhr[vdcbkamwyjnxpgjpm]afxbzzxzrtaacbypq[ftbpiplrdrreqesthw]tidlvfojrlctjkfel[iibzklhicpqjvzrnza]bmekkyjigxxtegqbait +duchvjohwoouxgmmxds[qscgkenygikbdrsqc]iovrgoggtgiebylbu[iqqrytrhujzcywwq]ybgfnnhqwfpfios[dryqypecmskrqux]klqhpvydovzggsqo +gwgojmuthbgcalzvdxh[njicnwbqdckxtyxkj]rwyptcssdkdqthiydea +yokzqvwcycvjgouoyw[starlvyjnijeacjseo]iehvlergdbswibmzci[ppmriizuqubzfehcz]jartjkmqzngigjvl[izpxafhxdmckrcuufu]pvkldotwdzdluoubpnm +rogyxrgfqivkovtna[xtahrogngfeygkasq]kpcpvtirxettedux[cdlnciogkcsaras]bupwazalrmfnjufn +eaeubxmpmymzrfleut[eharpivgddyokps]wimaximeayrixnts[paysmyvjuzpjjqr]fcqykmkzbcbyrpy +exvlqvnfmpkxfjwbhol[utjaefsandulqaw]xjrjchxifscadbld[ifrckhdhmptybkhrj]ykcqgygngiwzzyfnxg[plfhikkzndknbpdeeu]siwtfnlbcxuqkrhwj +ljihefaqagbmffbcr[ccmafzhpsvluglwsgh]jioaeefkgujinzlgn +rgysyaquiuyvtojxnaj[gcygzkwqdebiqsr]icaeuutjodsizqzfvj[qapmsqsaoniuinsz]ppgtfxsblzgtqtaiiey[xlkzyyvcgyhlmvnzrpr]htorgwwkbhasrsbvemq +coiurrjhxxkcplh[nkusmllwtsuddqasyc]vyxzujqohjyctyv +briulribegnliapcimw[rgawfayyoopbosvc]owgryasogyewgxchxgr +smseegsurmfktgmefhw[paopyayrwykwdvcjjhp]byayaatpurrllyzd +mvgbtjdigbhhywarz[pfrhqtizabthnqrvvw]azdztfkkfizbxsy[jozzjtzkscklmdt]ucnptpblgcgmkeojpl[nqsybfqdphdncqgigis]yecpixjgagdgkbz +zyuzikehgrfaztne[oaxgeczbaafnottqg]kuuggppqtgrncptm[tcfnyqvqcijfcfdljh]pwntuaixpqfvyoatk[mowgvynrpbvmqlpucq]vgopzmyigjbqlismti +ostutlkruoevsjr[qnvqsxlasjyrdyyz]klwvhuhmvgrlcdy[tycmevukacjlveu]mvxcfqojmrijbubfm[rbodtpwkkidfrnhayj]jsbgdcwbfdfflvupn +eaiframmiukbcixxi[bmqaglfamrqoswuhme]lxvkwmzgauwmabu[kxusdngtifhpmplxl]sfccogjqnblrahch +hcjmrcnzrhznwvtjby[lxmehjbnudevzmhx]ukfmdplzriyztnioty[lqjesrsxjozxcgfaknm]qifmjftfaswtrjblzf +xmhpeigrzvrgknc[drornrcakzujdrsbrvj]czapwkwkwwnkwks +sfdyqdpsfcxebamsf[vehdpjffaqhytqhhbi]urolmsuobvbecvcnv[toagfgryhwfgfwxmvs]btjwiwdrxnpzxlxdsdi +gnjmrczrqiryaodop[etlqbnstgjysesf]ggmbohbzrtfbapbjg +wwkqbdcmlkfwxwdu[firsfuftyxwxpcicu]cntzxuydyjkgkkfvdl +cvcsgxflnidiwtvy[hhzzbmygwugzsfnus]evzlovhsgqumejki[btikqitubnwzkhfyhh]xwxvlgyojlmkwljv +bzuxzgeuobcctajvva[lpqpidtuzmrrnnlgkqu]lhyxsevugkrdimm[umbmngadfcujqpqr]nizwephuepdykbgj[hfheiymxxfgyxyl]zlurubnhkwxdrwllatg +gkwahvrljkerohucrty[lgxqhorgrscmkjqcziq]otxkbzuzncbznvr +hpoehzfotnjpnhl[yrkyqbolznetbgxmy]fblwkhzfebmzavscyyl[lxvxgdkjvtoxjpu]oetusxkoxlpceierbt[faylwjcdxicxbqr]ledknznfnaiaovejww +xifdyajgrrrhakdqhg[qtzmwfjraqbrwstiibr]juciognmzyafmai[lgbmgoxqtjngqpqkwt]zzkhrunuborvoajlvul +ekecthrkwdbjhsy[klxbdnucasemwhlpjj]jbvenwrnvynlfyjybm[zgfxxurrduhtlmsbelf]lxuxlahnrqvjssffj[wzcpjiesgsbwbtnlrs]sofzsskbviyfvlo +jscqvqqdwvkvrqcb[vzfqbgopfnjcekjs]dmspregwlklxptp[lsxjobfksvzwshdre]yqfwrvjrykinzeon +rbtqjtepvufhwpjugj[vkdhjmfkeocnauedxp]vpoqmfpnmjdpcxw +ihhaztfuasflyghkndl[vseslcbeufhmrpyfqb]mtcgpfjhjeowjpqc[cabeopcrmhjhudob]fgeutfapismkdwqxmal[wldzeajldxlxpwfrb]rvyuojjnauuitoofgcm +ixrzwptyltfshve[xwlsfazypzeuauxpozt]nwfgkbpuxeauadrgbbm +vppgbcdybisarvokztx[yuykfmzxbgfwzdohup]vlkdreyqjihmdksxih[iysfrpczrirzbeirih]czkbhrqlrovfkmlu +iaatwbohmiosyiqfq[imajfecefyujhwg]aanaybxebrfpdfxxpgw +qgomsuglksqobwhaq[fzcrputgufyvnesoqwe]ipziztlrfmlaizts[pulgtrdydqegbymu]pxcyeozdofdghkmst +tlxidzqdeqchemiqdsm[hacfdsanbiffzhilct]jtclxgjapfmwhlkn[ieafoftblueqcped]lauckblqborgtjnj +upkkaykvxwvkgwgztzp[jmotfixnvoqrpwsci]wszntutpsjljzmwqpgp[dbnlosuwazvekoplb]bmobthbbmitprffl[qkjfwmsronqjmylzcre]yaulmyfoixmkgjs +zxxsmidmqxjigkbos[iwsufumylphrhyx]uqmpbcxmvhzuppxqopf[ykipifsdwkpzgmt]zzcwzmwugdzckey +ciakjtvtrkgrxvp[yhxuyhyxwytquzxujw]lrxibndatfiqyltehl[nnadhofokmcutiyc]vosxtisllkweiaapagg[vwniutthbrvmqrvik]aixaxvddxrdnmmt +mbjsskcvljlehsxc[cknzgxghehlmats]eqknrogpyfcmtfhso +lcbrfrsccsbhyhurc[mheohludmokwwjx]bezowkrdzwhssgbvydq[kiwqvuebvywyegmdyy]ioskcrvqcagocnnh[zgttakbraxpcsqsc]hmmqufyflbmjlcciqvn +ezmqplezxylckxcqjxn[pdzarngoyfbjgyxqxgt]yokricbfoocmehi[cffrwwrwhmilnyf]uaybztxphgccfuu +xnjslvbmmapiwwpq[qmuxemavopeoiwnebts]xmrajpgpgeojtabumm[tbjjrgipnfzjafi]hcuirvleolclticur +eltfnqblogwvtjgni[bjfxnnmgalahvpdtvku]eingohwswwabsbtb[nxsqsvleqobfpxlaxj]gfsbsvcbbnwtuktuw[wrgcswhmdtssvxobcu]wgsniklaxmadgnjd +kxpuygixzfwrwzpzsbw[uqxqvvupyvvajkcysh]scshpiffohigsgm +ovchugxbmthhhijq[fznmygfcqewzomfgbc]qczlousnoccgyrgs +imtfinjttxvhtcll[xiqmbmrcqdxlvuf]pybqlwqezwrkvikns[usjydesemedszquseso]fhcgyicfbdrmgcnk +aqnavkllyitzewgs[cbbqmbtgufuvcun]iugpkakfufksfitigk[lyqiierbjucxbvaux]szbwsttayzipkcdb +yetucqvgffnvnxqx[pvgczfwkehnfqxawz]vfxegwcevafevvzx[ukcwxvnvfnqvxhfa]bdciuylrvfkmxyi +yvachrqguvjhkrbe[rtlpuvvfdvmtqswiln]jcyqjdmtzndhrif +rphybwiwiszwkkxm[waiaqtuthjgfgag]ttlnqhzfagaregyo +unsmoewlzxuguuwu[dyqsnohyqcommmmov]jipyewobyjdzkgkgo[yphyanakgkgvybsx]pjtzynsvtltzzajc[iweuafprefmbuekk]rwelzzbkbqjwjrw +kluxazqhqmcrvldfv[dbxzgwsfmxettwmgj]rgvfmxibxzbajitnud[vtlbsgrkhnfpmvvkp]pdycyraaqooszqa[eyliotjigekmtov]eiopplzmedvdvmwt +mlozzkwmfcrdlvns[wsdduzxzfvlvldpjvgg]ywqncwocnslofij[sakivxaniergaouc]nzmhdlkxeiehdpuok[zfwtadjlizjcauurkq]vlvtdicnyhseqbeo +ssfmkfdeguuaqdbyqub[nbobgowoboytefejnz]fplpuipnficejfsuid +lljnuuistrsmsjazzy[vccsskujvdwxypuk]jhqjqhfatmuedugl[hufmsmgjutabctabusw]zcoiiovxkxtualjx[zdxdbmbibryrqaubxy]tyayojdxepcpmwi +zursgksbdkuzemouhl[sekbvoxwlmumyrdh]yxafewnovnxivyp[ajjditfeeocipuvdl]ygsuxuhtqervumd +suxzfxizhyzbovsz[dtamgkleqiesxemqkgl]vjuviztkxzchergyx[tvazaqnrstjbdts]wccoiceucunjiuus +gongygcedfxwncy[lxtpoagiqvgiryasha]elmaiygycycdtsclhpf +pkyqsmcicydbmdagw[ayulcaspxpbtnegeoou]welxvngiualigfefv[veqtcxgkgzveegxckee]djmbhovzjfexqaedywl[okzphpgdqtpicit]mistlyyaoyphetsxqxi +uwrxhstckbebnlw[yhflbfhsqhshieo]dvmzzqknrjcnwixhgk[upxuqrlwzvvsgpa]bmnfpjynunfbwunupiv[mbcmrpoxtbzcbijmmu]icdxewwtwcibjotjf +pscqchwjixrhpzprdla[nzfglspgwpsaiph]xtypkrtleiujsfmcso +llcxlfghzjvyhgill[vtqyiyrwujkovfctkk]arbtetvtixtnyavydg[ozxyyroceqktxhpv]maekylkkwdbgwgug +bzagcsgcadoffot[demvhzpdjthrniiuvj]nwwrkguuemsdtvspi[sququtlqggtpszucm]pqaqqxpssdgniycn[lkdwrbxkrkiqdxjc]bqngsdxlxxvxdvqww +wijjgkptnkbnzpqr[zylewxhygsxcrlyi]nanyoaosbxahyvdsett[kojrflwbltrombqxo]lfdpaptujhwfgrrnf[slsmmogpspgpuwnce]sihedfdnqnejevnw +nutyeltkszkulqpt[cpgdmqleitivdtr]veieyzmfjafragrcht[nzudyhtmpopacznkq]dmywgwmnrieiohcuf[ctbktcgxznhoqoxczzf]bqzffvqraxpjdcvt +akgmlcznqnhncjknbp[bwdbsrdxqqmaavngjc]cwyygvcrkagmmrciout[nkpzkdmflljxczogs]mqkafcpxslquyrudeui[clvbdgnkrjdpptqwq]cyygmkgtftxvsbbbfgc +fxlpnkdskynkosqpp[efnouhxslwitteqrtx]xjxojaxrbampbcknga[ugewjlmzbspxhtejamk]nrtflumsbbtkejw +vzrzmtwbxwfhyjvcmft[wrdvmieyzckycagwma]izyptswwlzgivtgyfd[jaujtzdzregakjk]cjdnelesxnhmgkqsgs[tjcsmxghgtmstejjhb]tzqsgoiospxadncn +okgjhnzaxrtektb[sleqpxoqckdrsiwi]jzthxxszazdahvhq[mgxzdqnfscpqdoykr]doyvhvnmbshvkcib[jtrsntjktunoxxn]rmejgievrkrxaziux +fodknkictemsxiicght[tdltamcatgnknki]hzdspvkbgipuvnb +xhhmaiussrmwaxcpoq[agyegtzmrcgdrqiiv]akuxocgoidnfmkffroz[lkkfnmgryejzyvjh]ozdzcbsfmllaiyclho[vseayejwmotjhccg]qfqchpalcnaweyo +imdrphyleudnvhc[lzqochrdcjotjojk]cwsqzuwoflalwatlsd[ctefovkyinrjchrwdav]cmnbuqveexpaxmhi +vckjhzrdtpyynzbdsad[ehjwlyfbffzszrx]aizjcopfbdgrrtei +vfkpxnrqufijmniu[wnwtwpmgtjonykmcsp]mhehavmuivmxhdelxa[spyybveheykroybw]bfzudojcjhzckbac +egipucceijeltfoz[jpyjfgsqdywwjillf]kltttxmvrepsures[asbzcnwdqvfkfkiqqs]usnadxpcdxpjnifm +svsbijigntdtxph[fabzbljmijzwvjlac]kieomhcpodzimrmqoc[xusohhfobyruazi]wxkjzzpskukqjirtjc[iwqdjijjucrslihqpo]faezwwmpfpxenvp +sbjgcnwomllqwavkviw[pxekvxjtjbgjuouft]puzjbrwmyzsxclgmqsb[vtpnaljnxkgwlryjo]lhqzwvnpkzsdndp +fyfyvifiocceoozl[dmjxamblfosaizav]smoyhjbuffpgqdl +tlbdacsdiavtwucvf[npepgjenhdkgfavbn]hvbffufjyehpsoa[xghicdcxptmipfxlz]lvducqyymcqkket +nuystaihvpelybkvch[rlqyflvholahkcxw]gicdfjzhwwocfejthx[jpeuakotyanntiw]sfsavxuyyulvuluyur[asngaxekprpfzsvxx]rliayxmjvsrnizh +axquvvjwulrntbzzf[fddxxjwbdaecbsderd]vjtqwpjlhbdhxjoh +cgeyfvgczhhwbdz[kgsqgnalsysssiyhqp]wqzhbjvykeuyjxgfzgg[mqkzclianfnifjdql]vbeyhsxsfmoeanpnipa[sxmzlhgrezqxsxzzcku]gwmgkijugjwtutmgj +nnjlbnnasmuhskqu[shbjjccjlumeuigoim]ndwzzmbtazttjpawtzl[cnkpifihvkmsallifij]ccpzfojfxszmytbd[jtcogseximfojmjm]bgdltwjrqciyqfifkh +pkdqnzhjzcttkackdba[mucwutymaybynvttts]nndhioamrjejmibag[fndcrctykpehoglop]rgxjwrpzlqapjsv +nccuyvrhzyszqnw[ogdgzsefffyfoenfh]jnqnhnyoyrcnrowjmpv[wmlihztaoyedgkg]vneeegnosrxphish[uwrmezbsmqbxjpx]jgfoinwzlhyixzjzv +kriqecrnaeujvuzw[lruowheuwnintaqqxcl]kcopdidcqinihhmk +vxkblgxcmztnphdzf[ysjhxgovujrpagndi]ezgjwgowcdkfcstfhr[hpxrabjwpymyaolp]itcthqpgksvedadl[stfrippovsfrwglisp]eodicmiszqhwnuymlgn +jznqrbdgjcokdqdlser[xemhfhnwbftgxgjukrf]mhcovplrxcsixrh[xyswalpqqvgsvmqvx]kjeuyxksnmydfkakhq[zcaydzhceioawvrlsm]wzezpqlhvwcgzjzigtn +vedqtirgwrgutas[eegbxmhgykfrwrwy]pzslegjrbmdmeub +lespviexybwomljka[dxvrexedlclnaurw]wzevexsobirvepgpmt[rseoofjlimvxwro]cyojbkugwdzjlxsqd +fsdyxosfmlqfwoqpy[mwypxaxulrbjsfi]ghywyebrmgjsrshgc[lggfwxlpovrwthxtlln]zmtqqhkwabuhvtnabwh +smsgvpvsfaxhocsyz[hgbjpapisxsillo]qsgxbvoijxlwhxpt +fyfpxellnptlqfxvdn[hpopfkwhgcbjoze]sopowsrtqgbpysjfz +qenbpbnrikfrnwpq[nmkndzwogcgtzhm]zhuslfffixielmjaqpb[dtmldnpqizrcbxixto]wpspaoprebgbksq +vhjgpbgdoeoljigkqde[aqojnqwgpiredyffb]vmlvnnohhbwzouwi[rldlmezoquqcodxghov]bhwnyaxsnyyihhgv[gjjezirrmfvkpvfayb]uaxxuikjcwppslge +fnwyhfrnoxxjpubwe[rflutoqwauqbztk]tmbmyhpncgpkzcqvv[dgksjzbgbuzlozns]psdmkqjzxdwvllstru +vnrsujzctbuqnbu[glgsyfmfeuoloohqp]ybhziayoqxsbopf[vtwnbpqxhgsfguztg]xhgvtoqwouusyahedc[zcchxnllferklyt]avgtwloloznygrb +rojtxmpwxsledhm[xibuxgovbxiejlegyc]xihwoxmzghhwlsthiou[ywkngtjxrhhozglwo]zfncywcurhmsfxxqjbt +vxoojfqikhnbnrh[trdtiatykaontxlv]xenfwokorxaeweoz[itbylohijtfjgdtmkvc]butficisomglwjzaa +wkofaduihyxhiyrvjs[deskgjgenvxxxupntfl]ralmugesymrxreommk +ozsnpcdvkykxguzltcp[caargzwxildtwswp]capkmhbfpfmdegigg[sigilgehfnfxlza]trtpmbccrrkpggioz +pfuhqwjjgyzbbea[yexwnbudioaikfsqlca]vaobiurftgeglgrzl[thjpurqfzaezqxfajme]seuekovcvvtdmlixf[mknpvkntvdftjhhhfgh]dlgqajapwlgdjnwybp +jbtzwsypehgrmzeg[gwskjuqbwedzxfcehr]xpkfcuejevonsinxs[upnrxgjqhohlyeyp]dsyhrudzqsibolxnvw +skjjsxxumbobzsckqk[sqlnqpubrayffzs]hseibigmtjtcgbav[khvlknemnqiekxy]fkzvtfscvoatsfqrd +dozlslrkuemgbykifp[bzvnluuiqdffwtf]tignkmwpnqrnmefaqm +ppxwcouehvqfwoenqo[rzmtyyvedmojatvvq]efcstfsjslpqdzvhb[tvmkwnuxestqxfockv]oqskydohbmayshfcihw[pfyulawxqbaiehqvmwi]wluhmctgrkjxqtlmp +uvqfjimhzqboivo[buuulgcbqgfsbup]wqnbktwxwslvceegi +muiuadioyfirjks[xviqxaavhdxjkkccmrx]weauetgyttscsfwv[rzgaefcngzklpjqzgeh]jtnbnuuvbnbjhdqn[idjpczmrbomwipkv]vbgcjfvyvnxhdsmycx +hmdflkjbenjynzdmeqj[ybyntwgyyptizunn]ctijqxbybwarmfzpit +khhocslzxicmlxk[xssahaneujvceofaiyh]swrjwipkknbnrrrig +dvjvkhnqyifqzse[myleyunwsupcnfagq]tmtuvqikqxzdskqcgxp[lblzunblboznidegkla]eaqhztxpgjuijohkdru +mqcasrzjqmhwbhbuyc[wkfahpqjhtwuiybqae]yzfcavhtmzofqww[goqblpzkmfxynuzm]bysjxjeocperndv[uwpxvnpxqhfnaalchm]lyfynynkovtmfsi +wnczxavmjnfgogv[oyjxcsvrrgtpkponga]gzhjlzgxxjkoklgm[hsrwppehbugkcap]zayfyoqorpxefqenxc[apojyrhryhfnmksa]uwnuxprqfxnkzkhnbji +iylrycmvbhpowmdvwy[oepptahrmhsoiskeoq]vtqctnyinxvrvlpl +iauhsxbjgxiebvfhbw[mnjywcztqiajiqxx]iikcygxzeprjwkoniqj[tqycczkvsvlsjetec]mwrnosvszjhmuoiyzxw[klgtgkaxohfaogm]fsxjsgwondgzpdrbbcl +bfqtwsviccqwndca[juqvrcznrlghmsiz]yttbexwewvvoehurkrv[mkugsxdrbaktcqf]yrqebvyxlcqjwcewg +ytoteijopgxfmiokatn[oppmfhkktlewhlq]erycfxfafsiicbtx +xlwbkbenrohodfnmuv[zarnezgnivnmged]vyumskttvpderhzbimc[hvbbjegwdeeqtam]fopblbizbmbhzfsdnzm +rgmnnwzikyanthhp[nvnhsgdymtjeqzurz]mbqxtvwhpggnbcq[apeorjqexywhszrno]qaxdcaysefnpyviduz +vjaljdyyoihduumfo[bpufjkyqjvxoprdwrr]ccjbldnkbzezeznmkpu +yhbnzbxqrvzrguxcbss[unzjeicvhgqtwek]obuccrvnajbvkcmkzh[futhsovnghajatalva]humwbgtpqzjgordah[kvxmlpebzsitmnjfnz]olxhcyqkvfkqdxdc +gsojkejbnpgptcgeubr[lgjcwaotpdouravq]neezbmtkclvcvkqncw +qqdvpngddzjwase[rtgandojrzcpohlpknx]qdnxpiawdlklkscmpa[qtpzakubrncjzbpr]efpxwdvobcigtpu +boxlzukkqchmqrrpgk[ggylyipkjdmbjfp]dkckhhgapbgpmygpa[yfetxkcehafknkmk]acqmjcsvxzptstswuj[atrjixpyeqordilgj]eccoowxhivjiljegqm +exjgzzncnnehrto[qnhzvdfprbarmtdpp]rcdxdswituqgnsix +tokldrsfwqqhetyw[muqzhystnflncxm]pjpmtwcamluvvvdsu[mpfvycofrzebemw]mcyzcqfngdrjaioxzda +pqhnhcbjoqjvgqh[vqkgnojpmbawemi]lampvrpcpvxludprfuj +vbdpihaehliobsbciw[cpaudttavwxkfpg]aidtxeypckfsagubro[fpaiuhpggzpxsctw]danwtjnlhrbfipgfbq +beoecqatqkztrbevt[bdqoxnitxmdqunizj]lgquhovsnjuxqaml[vyfylkbhnsdjoezm]ediekdjfsnsodqep +cnaisicaronpqbihlv[ajfhzrpysjdkxqpql]dfznlmsbuozjlqvf +jbgsemiqgxmtwmdulu[ulbyoughrbpthdlvmvm]dyrxsdesjjwwfmvmkf[gogkkkefuecieipe]nimswajpymtzyleew +haavjxuwhbfxlhfx[rssbpwlffrpnsse]chremerememjcbfuv +losdtsrwrdvwzbjf[daaxdqsorbsgznm]miovihloamfmovzruxk[horqrumrdnjorfw]shihudanlgqfzjf[kqkwshgnrpwudohanr]yohqqtcywhqawfhi +trrbdodxpewxgcyryk[limhtndawxliixkkq]ivxmixrjddqlmounj[cfhqatncyqijnvjv]djqfccmuvdnsylo +yfdgkwopvrudzsww[gnyyumqxrftncsfuaaw]zfiekmyvpseaugfwss[etzbbabtbkdtgbwf]djmbswwpvfsowmqdlw[lpbkaarutdlovoptrke]ukztythdiepqgemm +huwfnhilneqaecp[hdcrdcipgcaxtbfouo]poacbxvuqwkcilkb[dnpryjlynwgzbrnbc]hxillsnqqraloociaqc[uoyktvkfxkdkdopnbk]qvjeuapououufksmwse +lfbrqypxgthlyxqzywe[pcxfduxttmzaxtr]gidsxacxodigyok[qyaamzuhjqqnpdsii]apgfypwqjpygzmdtpj +prkahitlcoynnubnri[rqthrhhudrvryoea]urkuwyabxskqbsyfgm[dyagznreglcdincwie]okvqdhlixssurnd +qrwefbcelgjgpzoe[aedkjvzurwcrhdimb]eaxqgpvkewmjynmek[nmfyhryoglbtdgq]dfnecedmtcrkfyq[omndbxvzczgnojpl]trcocwxxczcxrvjjce +pphzgbbfbqmhbysodv[znbyvvkjlacgjrwlnkr]iyjpdjsjryyqsoblbyf +lziqyyfhruzfpwy[upekwttdqzjxspfzcmw]ptdaapvzenixlab[wvsdrswafuftmysocc]ykzygszayfmgenk[mylrsdifhepnnsst]tqrbrvifghuesad +jwfyweiiqvjfkvp[gsmzrlbjdpgqtbjakw]oofharmppecdotcw[dencjxxfrzxbuku]ygflsusvcrcdznc[fmcercvqncnxcbbwcrn]lkxshvdqjairdnnpz +mfspfyoqeyalvzx[zwdzwlsmnktynntn]eeogyyanaydeykwd +gvwvweokjzagobku[ixdetnocslayahccde]juncfldivihwfpee[mcpxioooaydtjmojwm]satqvbxfkxhfdrgoin +yncjgygznetzrrh[uzkbwhtbtkrcxcveik]gehtfqltpixmsuami[nqhxycgquaihujx]ndtusluyzjwufzdh[ppvannvzrnncxpcfbyy]kgitvwtucjasvtk +feushnbxghbeqsu[utnmthhouoazgbym]jmplltesvrbrllei +ijwbtaksbikedfm[gjckpcivddahwkp]kubvhiqvktkkijchj[qocdkdejflyyzwukfrh]qlnixtictiubnfhvv[ygbwjbjxtvfevjug]dclcjonutlwyqaxx +vqtafpvexofwcfssx[zmlfsfqivipeumubau]moqspxvivckaesffn +hphwnfopanasosexay[ddmqqktxkrurcry]slvhqigvbwonriydzb[ynanjunpszocqrjqm]fkdtvygiiddygcrg[jgumgpiumyhktlhoeom]dkvwoureblktplcjmi +skxhzizzzfrfausiz[nakguftuobnmkoz]buzexokukfscgmmfru[jhpsafmtolwlhvkhs]hznyqntiienjmspy +ccxuwxzdxtfwbpie[shhongtetcwukjbre]nufocpasneteinfkk +apfhilvripbjswmig[tzmvefmwonqiqdyt]szdbbwkkgaqmjkhpuu +gmqjznmtepctxpcfnx[eezqztmqxceenmds]avqugeuarwprizij[uumhklvgcrkfozd]goypuraafiwdcvq[zueuogjqbnsqmjfmxbn]ahgjvoxojaumver +payebfjnonvscnr[nzubpmedfuvkiwqkycu]cvsjgdyfvzippxu[gmiawxppknjjmvm]spdngdktoclylmo +ruhhexcfvomrhibmoux[cjkryzqtfkckieyzuu]vkwptpezjrouirxq[sggqhkgstdzqikfnxk]zxfgbatfizeivfkjbl +qqizwnfaajabeuskjdu[szujizggsbdhvihk]wxjmzdiqugjylejfu[dfygnnvhbvghhyuzo]yeaepigfgdcxbav[schlmqwlcifeqjhixs]ifaxsbjyirgfmwkaott +erxreojjauvvlbsxomv[xaneipervgreexmp]itfaxjxrwueyrynk +lgzbkiqfbgvdnyt[milmskrelgdjggvtmsv]clolytrsgczyppvrhkf +ryvrtxkdydhujxapwjw[ohgtjdaeifxzuhoqc]yflsxucxibqkcpft +srtfcyyruyxzxum[ygeoeyfnlufgsjxjm]ifwimooynxbrsxmyk +rqbnowuwuernuxpim[zzumupyxvnbnngmc]uwurpinkjmkckxx +ikzheexqxrfttoy[uwegndkenfvosfpm]acomhjgdgbuelap +srookpxqmghokjoegi[lhpppxjenrjqiri]mjlixhnrirctrsupv +onuiajxptpjwixyvp[otlnjwravarqmepwyd]hmnvzsflzeyrlxgpwwh +jmpskqdlbuorcpwpqj[sxwomhbdyomudfaisda]nvzxtvytsrqqxbsug +lohoirsglnfzmslubqc[pxhygduybnlqemp]eulzazwozzqytmn[joeiaeuczyygjtg]tnowqyhlrtmumjyrkp[lidmrorxkpcajufzib]ixxyjcoocfdgzjbhhl +tmixfdhagahaqeers[ruioctblczdbnusokt]orpjrznwojfxnheoqbj[gbgyexwumyintxi]tznnvbemvedlpriyu[ibseuzmfqmroeeawur]tkggtpbcgdthcpo +psnbkiuzotsmeklinng[qhigmmuxrpjmhuhxt]urvnxarbhbsouap[chfgrdkbxmgqzdccv]lbopbgjsbykugbzfp +qcneczsyljovqwlnjz[mntyylfgsuvpjdp]osrpdqguiouevrdq +xvfraxzgsypwfmswwwu[oyrmndtdginkvlzdid]xgtwrddwmukzxypxl[mcjxgiimlmsnizirzt]gliezwdntsgoxznesl[vwypsvpvcaeyzivjo]zigujupypwjqljxaie +xayweakpavlylgjl[hxjyhvqwnyixcesj]yuhyulfybuhvqiinlso[eyopyetglenvqzqhnqr]mqcovyockdqdqvfer +sovuasutixukkuuxn[jlvxhosfgqjcxnlmxql]bekpnvhdbyhmmvdhplp[xohnfpbaeqpbfnfi]eobpufxrrjaajjd[snnfnhoikinfhioa]syhkocukumqrwcgw +vhgyxqcvafubikvakos[jfivvuhbnehuqbeyu]dwezavodqhdmujzc[naepoqzmbtiraxhskf]bwuozbexnzmpukgu[zyzfttszjkatnovj]sgkrklrsnjzduvvjans +yplxqjomjxguqxjjix[mvtzncrxfvzjofx]wlhvxxzsdcfptbse +ddqjeqgctjkvwge[cbgnejudebflhpm]ryzxhqqixwsoztz[hxszfpgrjuxxipt]zuvvwbmdvqbqihy[gjfkxykdstapfhu]bzprrjdyjlljxnxb +xbnilldcerusgpejs[pvldiyrckxtgoesbti]ljqvtntbhxrryxcka[gdqkfyumjhgbzzwlvfi]uekphsrzawxriyei +egwrxuedgpcppavzt[mbblqsizmrxdwdrio]dzozhiodhtlvmrjcygh[gdzijmqhitlbhfw]ewvkussgmsnietkiv +oraksmkemjiapbdvqxc[vvgximcdecwxmpbjsr]breycrlgdwgnbjy[oqqtlhrvdyqesttwieg]dksvmqwavamfdma[fndgywlwmsmaivduv]mfweojoshjwolwla +pqpeytynxunxdfyxrmr[krtrvrufaemrmit]kcgnivmpvqoagjmharc[pvkuwynulvvuqkif]mvbbgwnmngtralbe +nsacyqfpikkoqqxp[jdcdddcdcylpjiled]jstcntnjxszhichrkw[vzfusiwojvrjzhevjm]lywsheganczawtqb +rtcpdankaboogxhbqj[vfamnogaxasxdiiizk]whpyanngpggqutan +qlxjojmpesvehkggt[flysjbaoiorosmpzcl]wgpxurstlnopucd[ewkgadgmllrewtwse]icnqidtfsqjurnkw +oifarludgzqkwtdm[jvoeypeqpfivakqyj]dtcboyxnhejlitz +npkttburtggvbsfuiwo[wvklzpiffhreyxkz]uhuynxjezspazaudse +etaapuxqbavybsp[mndpkefjvjupccx]pdcnnncxtrzfvlnmq[ioehzamymeougocos]hcuxkuwhwvjvysbwdo +fjrsuygcrtpzjsw[rhfrgfnkhajlqtqdp]hftckgnarcgoyfkmimd[hkldanmovhazpcpwhl]qomxfqqhkcuqhibrl[tpbrlhcndgbxuuzdng]knqmgdkpbljyufzazki +zydstadkygzvjmxdhu[qtgaglwyzqncfbds]dqwbpmopxmdtkkcj[dcakbjdwzlglkpndtb]nijwetvoulkydqukzn +hbxhybosbnopyxpnnz[juewibpcgkchnerk]pvdtzqclnvdbmwjk[wmtpskdcqiiythces]kbhxnzcnjxhnkuxwft[yetvomdrmxarjwsumqv]pgumogczlkgoiyn +zaeaejxwpzbqtjiutt[eqjjobopoyuoxymtvb]glxzffwpiwoqcciyul +rqrvuzjvcgaancl[pmxugkapydtxezz]lihcobqbdqenjmxyn[aemdyhmkusmchckzqnp]tgiijsdtqtqomptveju[mvaiexukertbkyinjc]pjuulfqsxhbpdiy +jjygzflwfyeiecuztx[yrziwmbdidxrjsouxen]bqkyguqcejsvrkn[hzipqxzodrnsozfmta]xvtakmgzpstbsivyt[ieiucrjmzeupsprslje]iquppghgxqhosvjzc +dwprarljcykiecn[wvdjaraappnffzsih]difkjyzhcyzgzjl +shsrycjlblbrcpv[drktygzuxbooshwhute]fanflcwacerdevozor[feybgvfyookhlsoivd]ixzfmefkgvcdnxqvy +rgogoobzbggsbeynx[nlnbqvcwdyzkbaa]prjegdbkocptzducz[tjanhuiieffrdspjf]bhhziiqbzdlkdmj +yslioeknctqgcwk[szhjocwzxxkbdoykvjj]aowmmepratdcjkgwjhe +yrfhkqrnxzzyvrocav[rqyqhvtneezcivu]hunxsvslxgfzevsvvw[pyyclulboseqorxoihs]akjsixprdzbyqlbupi +tcapvmyxklqgewra[pwxrpoxdptxemahbrot]ncwuxwfzukwcatres[ftlzvkapguezyhnsgl]ermejyvoisweiqvi[wynjqudtjghztati]vhpdjconbhhejafgfu +qkqbjylknnexhcziot[lwjbulvorpdzrhddlm]mvvmstxnwigtstskoo +wncbdjbvzjvrrunb[riirhteyuokxshfmxed]sdcpacarelkhxkt +xxcromhxgxqeokih[xxcnkwhvsylkpfbsj]xipnqesaslmeqsnu[rmzahgumualwizqnf]mutxgygzbvgkimvab[jypnhvoztklxkxyzsr]qhuxxsuvigbloux +yenrilcccypxerlso[dttyspegodnpefcpg]mdhfzxgyoxozmgi +jndnuwbhvaciqduyfg[xoeqacufaixieedbtnz]mpkkivmhxwxujcn +majifpotxhylyshir[mhcapgzvvwadphfid]rjaoxsvqlqyvqgtxte +imhzefgngckhvgqcjr[zysfanhwbnqzysui]zgogpzkcgjeigcwpv[jtxumxvjpotihpmb]zuuueogbabahhwa +ijrqngygldyukndxhqw[xlcwaqfuzjigxddxjn]mcuyklxezeidilnl[atvcyujrcexfnknulm]txxgigzthrbbqna +dvhqjqbgudpghndlvu[drhjjaxeomuoxxnagyp]dbeymfmzzevjydlzk[gklvfdcdfmnfvfslpfn]kssctqoyxognwiem[aojhwzwnegpnydzywor]eyrhiouwbqfpeoto +xznkczuhsgldtilz[fhdcsnfixqbysff]ppbqiltpbrlhjliz +zkfgueqzataygeavus[nymgcgakmtuwnkidr]ypuhovawsbnmlmpo +lnjbdjnhhqeifmi[diompfqeocwmuqi]kdawxfqtkschlgnh[fsmxaerroipesmywqa]vqpxljxwpzudocn[sffzifosvfuytvdzb]fjqfwikuqzhzuthxzq +ecyyeabjhjrfbdqy[xpqhxzehjkjhotrdlk]ztrkutdijjkmgzkuci[hwdxdsprkacxjrjjtxw]fbhbrjzwubhgjdwvpjy[vppgvmthaqkgzrzva]xuhyvaytyufxrkgeb +tbeqtxhfqbbdrvwn[juqpksgrfsbsqdx]znceqzwqsfrhavmetys[khetxkkpwfmkmlvc]hazxybkgkzrmbtqshz[yavtnkwhxppnqwzwj]hgabdrxubvyvgniz +rwvvgwyfgincgkurooy[wxcmmmkqpmtghmmltt]kgtqowxiyjbepqnkiyu[iofgybnjrqtngltajvq]mxsbhbkhddqnfowxw[ptqpbwojwfhhqyv]ymflkhgfnlagbxddzr +lybbfxollocxnfxfeba[tvjolzzkenoxfxqrocd]vkgswdtqpilvbixss +yurvqideiuqwekwop[gxsoytqhoasfouiasm]fyhiugkvhkbcfcshkzb +rurapcltqwutrslalpe[wsqprvdmmtohamza]xmkzqeajamyurualky +buprncslromlgznqper[xjefyfgkufdkspph]wjncmqpgmnjzmjbqc[miovfouyxitayfs]gtrmwhvmgcliwegeg[owvnsvmazybubxfrp]cdjevcehzrminnc +uxhqucibxiemlbtg[dyshtfhtlbjreji]ilgubuujgmytfxeqzrh[zahfdfyzbhexldxg]yohfxkodjqfdzqe +kqcxiuftivavvdv[rbijqqjbhpdcrtpcy]dijrgcyuoqfzronrfps[knxiljzdtvauitad]hohafhoofjhhhppkr +vbanudfbhmhpqsdpdgw[ksrnxrccuenustesws]bgiuwlkckvdplqygpi[ivyzkermofckkcotkj]mhjspcpkcwsbisbve[mlmgilflysuxqmzwp]afixxyabstclpunrya +mnniaptautqeenvmog[wfqrhlcbcwqhwzj]ccouhkyhrvdcbilshrw +zankwrrkgkejsfiwcox[gcxocohqugmgpfoea]cfpphqzxdllapiaxu[ckfcklaedfbhgino]pwdqreudlymfoif[nkaiutnpwnsfrbzqyuc]mscstkuwovgypqtta +dhhvqxovlmkpzsg[loljkdtjkdhgawrpi]ggnnhvbpshpwoloac +wjepglephkicsoti[lvcfarizbzsudio]httbqobbfjoomntye[rrlwtyngtpvffaanlpw]moqdodrnstpwmhjrw[ujoowvjwddvlqqbbzbt]alyeqayozgbhtpsni +okuneqgdkcjggazki[ebqvcuzvuqlvptuoqf]wvcvzlzipmoamnvjt[dncwvnvagpitnxtjo]oadxpnnqonbrrarqn[ruogikvmdiporivvzm]vicubwgqcblvvop +iqwlvhjhfrfeayiclzb[mkafugqikswvpqehb]ezlojhjvdoyzwmggb[mncadipbeamkzbndk]kpewfgsurwlikle +ewpiriwkjrgicwzfxck[iazlrpnsiynlmfi]srfoarhvphakmcyke +faalgogxxzuylnk[zsgporpeqifzknzz]mjkbrrvswlbgdwhmlgd[mxfiiekevaaosozya]klhonreqfikygbmf[hhgfoolpnquxfxoazy]vcxscuxdbvevulug +curbpzpilaczuowrsi[wmyxdecknwrspllfhpl]quuvzoiqziuotvfl +kugdhavlhuperwafe[ecuvibachziwzefzn]oyhrdjgmqqauqhhg +kcbawjisdirrwzv[fugffzgwmricsypdz]bouoevvlaykmgve[glivzpgoripmcnqv]bsmuvtuxrrzjaxko +oyaxoumybizeabdg[quusffkxbmxajbni]lxxqjhqcajdkqszr[cpgzcteolyloguchf]zxowxsyvudncstwk +xmlnrjsanwjmizgawvk[wlyncljroxswzsmd]waxcvfcwftjxbqxpmvr[spiqjeqpfxanegjxf]sxzszkcgibvfkgtozy[nmhjzcaophbfpil]nrwfxurekvqndbzw +xunbkhekkwyvgcerevv[bgjzbkihvzlnnpptr]huqryhbrkspzxusu[dmrytcqghtbbhhzu]lasujmpjaobcnfj[ebofoyovhhzsprycn]belltiuhimwgwqek +ocgmydyjloxpbsyj[wuhymkumnwwcdprxc]ncmkmnedztlutaw +lyuydomeinqxrex[gukhcsjakylfwqodm]hdghwpfhnwjtmafqt[lqwtforyrybxbbh]fgyfkgvzyooifxa[kgxkzeuijywgdhuryra]dohlilkbkqzjsbx +zgckhhqwhgctoun[ajftizwahkaxzich]wacumictegcbysyn[zzxxwgjdzicxreegal]pwquqtaijwqpkistf[vbombdxhjxwlboqdbqh]hfyfujedxzoceqewhgt +rcpaadoewdfxoksbiuf[cmcgotvayrjllxgtm]pmkfrygwrzuobudsah[gonfdimjagiyayni]ctrukcwixqczltol +jrehwmakkkobozzwrn[beoievlwkmkusjzangv]djpjbtpjpdcjsmopzpw +zsgrycgmryfdzqyfj[yipsuqvzrujoaqga]khjrvsadupzwwoasmp[bdpwsunstwzgzawlu]wxaqnorkgypawanoso[iknpjxzhmqermgl]zcsakkbrkkaimtnya +uyuzptbpmmukyrpd[vmbrbmpgvxdxryzcpbb]ltybhrruutchwbuuicv +ddaeptwdykjibuffjh[ufzsfgmcffyxyyywdu]vrdexhgwtdlczpc +csivzntivihwomh[nprwknojctjnkov]uzridiquzokufgzgjs +gcpleovxfcyyeme[crpzfylaxfpuecz]zoomnthfoptieor[ycybuegqfkhlupplwb]qjmvwbggqxwgeuneph +vwqdvgzzotnnsydivip[ohjqzjuzxyncdbenf]suwfgrjkasvyhzbtfo[qfalzqxllbjohnzvgj]mtkkcwoapdjaysfyono[yqdgnieatutxldqyosk]debyxvqoatdeibyy +lhljheobdtmdowhx[lrxkzhxzdjmemintrq]jecllyatwkrhfxru +howoydpdchixptjqapd[nuwrazvltwkshpvlg]havqlubvtfkhsmxwxew +uwapzmqskzwiiqx[xtyqrsajsrljaajwedl]dgcalrxxdsfhqfdie[svghimwbcbmxqtqhjn]akqfoppjhaadsdbela +slbymelmqscfinxle[ahjtgvzldgftnkehsr]vaqtlbhritaotaxvhpg[chcyoduevjsyehz]jncoccdngssgteldzq +mmkzxzkatapuuwwv[odomzyzveadmmicfb]eiptpqypfvfroxu[bxfgwaezkjrbpim]hvfvtenhpyqiohxj +jetnikaiyuylckwz[vonvdfgbgfxrvjzluaj]zpmcyjvkwghaiuxic[irxghevzlcccxfcrf]xicbllnxpzlcmqbgm +chvpdcrevaqnstnw[sofvzfabefeacnniokj]qdasdxrscvlmwcchq[kcpxsnydjsoviwwy]bkdprrvzdinwsfxkien +cwoamgnaytsfeccbqb[vyysuocjjhfoixrtmpr]junwfwadfbyukyvnw[lcwtmcbwdkrqngvqi]vevlawxbwoqcibmtk +seboazoqdqpckthgk[psehbzatcusxwqa]tiwgrqjikjzwabuufp +ouwlbqhczqgbljktjy[bubtiannyvmvkekhwbg]xvrlrmkjwkhzjjlia +vatnmtxixznyvdvt[ftzepafpamiqpjulci]izhqwdhnqpyppuqiv[mjqocpfxdfcgpgmk]yirocnwnrzchhvrbfb +eehvjfqvnwplppeg[mntocrytmuzmuvc]zsfcohpjfqdrtfbbbh[bqhzekffwgpwsbxd]zlhxmhjluxrjmpwkyc[imisxjdmeqavdvztbd]tjlwasbwbrddpqpgwq +ygjdaucrxaqjcjj[zaunyucvccyhgomr]ifczoiwclbaryopmfa[ihkdhvovnvujtbasuip]mabqxvuzswimbitoy +shzlhbrvjjzpyxfqgus[ykurcdmtryyccnysxi]sypivgjjgkngrxs[rkavyufibjkqetgld]foqdqcpatgctaehxi[jpnwjyafgkdytef]apehakogeatmfyalzr +kithfcpkwdhgqjohr[vvpujusooxkdrmbcoo]tuzaiinsycjujjuw[fqdhhizbifrkpjxgyb]rddsmqvmitgdywh +gngbozbqsfrigmuq[euutspovzyvfbgp]gobfhihxxwpndpaggx +dctfsuzvpvttqpgppw[dnilcstcsxxkvwdsu]zqzgahpihqrhohqdtst[eoaatnenejvvuloknf]xwneniznbkjolnouj[gslnbvbmlwerbwvdti]jovdchklafrsncadr +mdgpetsnkaddebh[gypkuqwwtjrzrhi]eyfbmxbyafuenmjdfvs +nmkfscflwwiyxhzgzw[cixmvcvloqdyuikk]jprtrqwqtbrnksnxh[tngpiloomzgdmpryl]gwvmzbcftuthxvyqutu +zkpdrykxtfvqneh[pxvjsvutuauoeducg]iduhzedqopyfgxjwpl[tmzqjdffcpzytkg]zvwkvgwmfhbqklyvai[scusvxtyjacnqtkany]xqsylxxrbgvudrdxd +dbgodepvweaspcsam[vnqcsulaljbjrygsgv]gmfdwebiufbqkaofraq[unbumchixaeviclyqbn]ekpfqosiklnpdjrjq[nlcbhutxymbumqmwh]svtcirskdgbhfjr +wpvcqnrvyjvfkfpclz[wogcckufvzviggf]oulptksetgaaholu[dwwcwhkktrhgkahbs]sobrvezzrrzvlihicw +xlcqxbbegaulczmzw[xcllvvmlrdiamavgvh]fgipexbodvwutyt[pwhoyusimtkyswrc]mxtrsgpuxsjcqmb +euzbhyalpjhxfawzyj[kqcqpulvktfqwccr]etzsqjqzeosiarij[kinbhoflquwkkobs]jvcmusgezydgutda +lpxgexsvlfylfjva[wnzhqafvnbcbcoy]wevgfhsjrkdgvnbta[mvmabgghwicirugb]ctcyjxzknsnpxixkc +hkkbtbsnyzrlsuyhwov[iurtqidtzfwtfhiltt]wokyylscmppxsdqtnns[swtohjqkqnmzxon]mthgkxltaceszxm +jernxnsovguhkpljxce[twgyaawrcpjpnxp]rvjtstsecwlieaeblp[tihicijqmcrggggrjo]igcnuyrhtaooygb[ntscsypsxaeatyj]aslpawlvpctyjzwxhw +xoooyfocrwvsumzzywf[rdovvrfjqhtuiro]eudcowqfnmcvpkdpv[hdyyadaesuxiykkiztt]ykgxpvfilimofxfj[ittajdlxgptkzqt]djtaivnjndcktuvd +usxiyxinxwkgmdmjlq[quaspjeawvvlagjmla]sucqobcfnryoftyttwk[knzzgsqjkwlybeebxrg]juprtecqapdfbkk +jsbpwwkgsmydnreqkd[abmspggfxrehkgk]nzhjbpwxrvuwrsnilmj[qqtarhezcecijunbk]fzskmnquqoivtsaxym +mgekjguhkwyfdcse[ydcdycgmcbzvpkesg]yuzqagwvmncdcia +wrqntmycrllbddv[fzewvpbxklyccfkqsed]czcxxkwfeberluvi[iupovtrukptjstnkex]sukvpgublggqzbecwz[rabiytcgypowllw]dfitoowyhfxjteip +wlqzetmtxlrkydh[dbgzuittqekewyc]vsrigjcntogidwtft[hscoyacwvjejmwxxv]vpljhuinywgbjnynxhj +ydpusekwzovghcojdp[dqycroxflpnyqpnai]znbszhqqfkdbrwzrxr +uzfunassiuljodnjr[tzrbcvrfieeocdcn]bmsircirorbtgydp[wcxinsnngyykaaavhk]xxqbherleuhjskfyu[wfklhczmivpuooytgz]fzxxivrumhumdcdt +mshsdecfbmkjmbrx[fdhjzahrcoydrvqg]stkkbwrlhhnjzts +nmbyxmysrbuejutpzn[ruyrvzgagqgybiqsn]atkbnawkdkildlbg[trjlpfbjomgxvvmzowo]gbmfxqgecnzrwowcm +rtiylcxgfuqngjkyny[mgidqfnevlylaukbwts]vcejabirnbonrowlea[cancfhwbwdlklwo]ifsehqpalixvinbsr +ifyzslyhrydfxbsb[nigcfrqizdtzetpncxt]svvmxecfemwefpgduln +rtzslwquokcygmdws[wvblnifrxmomsmdwtx]scpjyfputxvatko[mffinnpsxezowdl]bsmsjqeowsoobewko +zllghkuucklrmwy[ylrocgxqrlkdkotl]gmmdzctugnusdsrwwhq[cllevhgqwlszrhlbv]prpeirpbwoapvocm[urvubddgwfmmkoyu]ygmtwdiwvuepkcw +hnqlptboqzzpksz[axumkjmbmyxfokki]oyassusfzvnzhlobbme[vbnbcjaiiuqptfyct]oagongosnahrlok +vgsfvfwepwufvvqbo[pmdxwkxldxhlqlqrgp]nmkpknxluiphfrfxm +qypkqkfcicanneyvvr[hrsgqfwjegdzfmyt]hmsppdjbdxxtagyhfkg[ranuabbxvhlszpmlmv]ajsbmdayixczrhy +oykuwlbsupkaaaioxnb[cemxnilkmxflpnwp]vuvzxrfcfhqvmzlzl[hnvnqhipzparrqm]rjzhvguxrwhwyzc +mdjjwbprbzhftjae[clpvjvsxatcbzsyybw]thsopmeuzvhcfppbha[hwbfzhbptymaaoywwiv]ybsfudfmveobwaqkul[argjxabjvcalkomgp]nogtearwoznoinj +ngsqrfixojvtgzmfx[dlttfdsvjeppwweu]ydwjjxycbpopceaj[anlhiebedcpahqihhd]gtsexwhwnpmpqvdxa[qflvviiybebmusv]epuouytlbtacnsnz +ouccxvpsqnmxezei[vmifqcpthebiklhid]tszxpvkgldobdjl +pauvqtezlhvjejl[sczynxdhjpivcogula]llemqpnanorgnkmjl[xxtooqiwqkcbvmp]anafyzhbzdtpcxcad +gngdmikcpsuduzdrd[fchropeunoqkngns]rfdquwdpxtlfxscvhzj +otnuxdwoeqotcogo[jxyhojuczdysbfvp]upffjmvriabbalmlqmx +xfjrywdooyrkvifzub[ygubulhifdmoytb]hjuvaxnchbmrptw[txcsgcehrbszmnzl]xlvcnwmeztfiyhlwtrj[twopxgslxaqihinrefq]tnbdtvwxxbichal +bepzmphvahjuibuvg[zuoplvyeupxvzoprs]qgkpflfygaoxuriy[lgugebpiqnkxxqhz]kqhkfkyiqigodfq[hvaktogguzjumlga]gglqsklyzznufpg +cnzflcqxgiepnsmpxt[hqbdhovnvyecljhzx]vawynjdylprjdky +pxhlvphiiyocalr[dfhohrjqchpblygac]oqdjtliamyneclgc[pzanjswflkxxwvnzm]qbbuqtxwodofarbbl[kiqrgquowfurmiqlqy]kppecttggvnsuzaarwo +dkzdgkqnfjkadwk[bjzvvzwnbuhkinvc]xhiswkplvojtzwwvyph[qroekqfwzfqeqcfns]kyijvgidcjeeenhgea +mqoqfigmgtagmxjt[qojoaaqyptscsfmd]zkpsvrsxzwvllxqpi +cdlfgkthideaizn[klvwdqakbyaunqfxt]egotktupevsisej[olkmccwoqyqzsnuv]szxkfqjshuwyqewmgm +caanbkvopjahzmqch[wylutkdesribnllzbac]fjpryexeaxbopdjhhu +avulisxpjwlldll[tueldewuwemaihrw]vjzctwcvzpyiihnlrzo[cjdkrvxhmsglzllbpl]gcsruqwlokbdtgucp[nxubgtwzjtwhtdvbjuq]dpghqlnwugoywuiqefv +rcfjxvabpkgxhlvzf[ftlsstmreroxhmuw]gcacbophluxzofii[vkkogukgydicpvdqbzv]dvalzsrgykitiqy +sufacmzxrfdwlivdngo[kthzrniwspkdawxz]rudbmasvirscdpkpr[pcielclbxsbfedr]pneagajkflznxdrkejk +qtvidydakxhrbrli[arccjldfmvtskqtot]uxldrdgmtilrhob[mfqcpjzuqeibckk]tjubrbrdjdakrdud +cbwxzgidmrnjqukyl[uhenxvxtomizedkxwt]pcpeskttqdttvibym[egwkoivkdehfrlzz]pjueedjamrhpsnuulj[ccamvzizqyunxwbojum]qguxpdkjsvkuxiskx +ecwvkjdmndzmmivxnsa[unghjtnrlreamcw]fhxvfvlthzqifvftbo +tfzpfvojlegclkt[kdwzmhrpxckfknvmdqu]gnpywcujxlgishx[mhxacejyvmcleasixmm]ggmuguvhesyqaijlv[fcyzsosernhgawagft]rmdvdnkuaworthwsoi +adztzinzrvazerolcl[vypxttybduwxgrd]mggcsuuzlwiilaav +qnamzrfomzqqhozg[zaoqvddnqodpztm]pqhditszsmuiakyelb[sfknkiilewablfnt]mdzzoowquvhayznyl +ovvwrhkbkeqeatbcke[wtzdbpzbnlkuhwqwfz]tupytpbukmuqytc[fpyravdsbihddaubymf]pjiotvegpewlpke +lubqiczycurwvqozz[khnsmjxfeogtewtodhj]xhqksdbozycjszipd[zeptjnsjluccoiuxm]bhvktxgvqjkufxhprr +zflhauqmcaiwnqn[jhyeagjfxbgnzkdr]hdwykmzypixrdykd[zkqqugefunjmuhf]ykufgfmmeaapnag +eqhnlafwpxhjtrif[ixkfnqexzmbmqencp]npxnxbzhuvwqnxn +kokxqtbaemcjzlrioa[ujvykzotvzlrnfg]couurswwzchjzbxq[ympswhhwlvpohjg]wxcufycbxuvmrqekgq[wyljlkzgavafrvjuesw]dmgjejauotkmwgw +mgxyddqzqmprxrdizf[clocszvenjingorxku]zsuqrmnlgyucrgboe[vpenwatmulopddv]expnuzinwtlihej +xqhirwwuirdapgmyk[snyixpqruifdiqekwiv]zogryeticrubznbumf[yisxpgzptlkrmeevgqj]qrebxwojumgwfnf +djlypifibwpydcxrd[swxgzdsqfgksqwxjxfk]kbpzzqheozbjjcdpor +uueutycrzzvuhvniu[nqhaoxpjrlvrtbahncz]tmxvdfxvmctcfzoqiux[gevrghyecnzmkrujmeg]rcyqojjmpxkpeulzl +quyrwpchownternlfj[qijougzkibnhwzvjk]lmrfvudpzxhshukhpn[jvvvelpjnyxpwvo]ztuckjcxyxjvqop +ueyerkamylcyhgszgme[kpqbsxegdljldwjdxgp]afoamkxjljqzpmyef +ryrrppctsvwsxjslb[sbmyepjknxewewrqfsa]gevwiiwpwstdkruplv[ilkxpskdrntqvofj]srpukrzanrqhkprnu[jlujnhxksrytsdazgyt]fcxyuaotwykaosgnvp +yhjojsuhfhujvfk[nhdemperlpgxpud]pdvcrmhvfeudrea +merahlzkjieamdkyky[yeygykydcucbambmtz]tbujyhneuvzacymtgrd +sgvvjpfdcsriacwuyy[rqhuwizydqorikmqqlo]ozsalwkmuodygrh +jfzfzodtrqrrwvlr[ukxwobjdyhtqrqr]qzmrpkkjzqibwekne +xbmixvpzovpzydwprwt[qnquthrvjmqtpzb]utnmpbzmurlbpfuaqu +fkfzgaotoffusnte[ajzqatzkpajlsge]hamnzapphynrppmzwm[teysbhjrdgatijve]aigpcjplbknziprba +jfprgbpaubcukcmp[kddnrlcjywdjcud]nwzsudlamqhzrwlkh[fuavvscfxpynlxexr]szgousvpbqawlkpcd +idlhdjsytmzcwcu[lgwbpjcyvpnecsqfhr]sjkxaancdmlpobiwjr[gzxmhvvugpuywst]oodlrjlodknfxde +bplasvzaijndpfkr[wkvndyztlfkelwckt]kjkbnawptptvful[fmlqcligysmrzes]ujvljnzkznjvkgmsvqq[ezpnsnwrujkrbcmggsj]eghksoebyyfnptgqjul +bjwqelavjebvqjroszz[jlfwuhjucugbvczdbil]xxuinqhddmsrpukke +tgbvekwixowohur[hctpawxelfhbtmwc]axirbbtolsqjclqo[xcxiycbryxmpimq]kutifmilczlxebzxwjn +dvxlbiymdfdrnnfp[nxrzuioymgfxqwxo]qhydikbrlhqldbq[heutjkmrstetknylg]grzklzcisupegmbg[mlvaswdotnzowpqw]inmxskvrovknbngkp +rpoicdzdnkcxqtqule[gcxezbuirojvwliv]bmnlgvtpiyfhkukpj[gtqavwzdzdmqufnce]nwnlyciquxxcwpte +ubleorakkrqlakyr[kqwacjjutlifarh]dgijscrhnsrsxqhogb +niodmrcgcjrihildfw[pmtshihgrssakbouvf]otoaadrggvnzmetmyds +jczcvqxamrdcpnjl[pitcvywsuryykynqxax]zmojzqezwxdnwrcuif +nbmlxeosjvvtihmwt[acformsggoqxslahuma]nmezephkdzghfvhiqq[epizeyqkmseenueefiu]alkiffsdvovxmejkunk[hiwyudbbuondtsqjm]wjioowmqljplehwe +hlcllqbyvenlzcfgz[tkddqsjxydctcrcuhq]lnqsaupwdmxeptzog +rrkevyquvdogauq[lxscinoclyrawtkvr]mbiscfistpoutkc +lwkkwxlifgwimrupndu[kglwcbuugjkujltz]rrgozebmyxigvxefa[hxbstqxfjnzvkco]rqpxaurnjtzymxkvtiv[fgbvzthgqifdqehisw]kwvdvfijmbimizl +yejkpafozbchconq[chghchxxcybtarwkel]ensiprnejdyegqiiu +gsclugkgowknjfkewxn[pgzgezavhgcfjpi]wttjlezzjwqyyzgzc +ndgluxoxlnekaomi[hrrjyflrxyetpub]kwpcbjgszdjimqfgat[ofdwoxrgxjrbxhgep]rdaebrkfchddavjeqap +vzlsrismjdiyfqzcieb[fylncgldcdlrqnbpw]hyrajwsfckxlkhcboe[rxqyolmmgairjktnk]xhrusylermeiiolade[ifiekphfwfzsnrb]szyunhntoeymkuhyvru +ekgeyjojapzhzaxfzhw[nmmzpmouaheahibz]skhvrmqbvgkbismmmw[lpohwytpsrtegazzkwg]cvyqhgsyodcdoyandpp[rntevuwuoyqnhkmrr]szsrcjzpstfyvlf +ioykyddusobfdscqkmy[pmuczfvmkjokvnoxrz]osyjyicdpcwzxvwfn[gimnsriontvxypcxnja]rgedrrsbgienkkwy +oktebiadpwprzrv[wgprjpksbgdyqidklkf]xhhjmhfbhpszdqu[rxjenkcvcswchak]fxqrycgufsqtbxx[pyxvqyqnctpzpggzrq]mmncxhloifiifjpnitw +xbqdzlpfxcznmczfqq[tpfsrcmbflynynshgt]whfhtgfqobzaolpx +hfbetzccpyqauunfsq[ihzoakqpjosfmeff]xvgsqfzcgxtranek[zbtxsvwatcplcseik]vaidkyuhjnsgptupyxq[vprljemlqmphnaau]vfgliasxcpdyayvfddk +jetotpxiincpkjxqmz[sfwjrlxbmpafwtjuy]rasahmylsaswogm +ipseqmdzbeeqjsnvo[qxgatjiqzhwulhgkjm]syofcufklnbeobppx[lbmkistwoiolecjh]qpznlrllrkhxrnyvf[zbhzvyjqzywdpvh]thlrfwmziexkhxgp +uqyiqoznpgsjaaftzq[bfmkexvilwsavbrnwo]pwdssrfyvkefanxnlfr +yijgsezauqoevphn[qboayuokxuaztxd]peepgblucrlstsln[rnifdfjhxdmtfse]qvymgyfdvcpezxdgmen[qyorafkexhajsha]knaylffgeufjxogyel +qlydmvzjoavamnvot[napvavoknajlvmdd]wbjkbdpjhuhxybgywu[umxthkfbtbevasmekcr]adnybcirbnsyplp +qshfqvkxfhgsysl[tzlddkjozqzcpcnx]xjkhcdozufunylwdzs[smgwthhegrzgufktc]myfufzjuvrafwalrnn[jhsmzagnqmhzscu]dbqonhtmhhdshdyatcn +tcdybubnklvamrjlxqo[naocexrxejgekonegma]hlejmizxmhxahxboitw[jteivhxwxftlyhl]kvhbakqlmukgslgvgx[aueqotadcogcmhqeeec]igrfisukejhgfmdvx +jowozfzspexprygzplp[acahqiqszrcdhsylwwa]ppdmkmcrzpzbflgeld[etwowmhcqhkjkkipk]gnilcosjuukihcwyne +ynmgkfpaiocmkybwkz[ztxveuhtztuioruvqbr]grhetxxldtoepqtm[yrucewbvzbphefuf]idcnnpztztemlywblpm[ltaesuehnzfrsflac]bbarkjzutumhskhf +mckdhqphoehsqgjzpzi[eiretkkiklgmfvohgvs]fsaipzocdnrwworpfj +hmdbweapvrpdkhqhr[xwpfkaaejitfikqgy]atylpiafldvqsunu[dwvoqhxryfpiegidm]dyvhcjqkgspgnpw[nkabxwemccqznbpdq]ripivpqpjrebswqspd +xdjfwlhvdtcxqvfzrlh[kcjkplfasydesgzkkh]ilfrxwwjtpmshhcy[gsobusiljqgosoih]dgtehabeomwepoaaahd[gikvtnebxclexmsc]nkcvdazorstiymosjv +fjjpjjjikuarjinig[ytnbvaleddhkesaoaut]eorhszwghtnmzbjipie[fuwkcamkegyilppagl]pipdvxwvkvvvanblh[ipiaupaojxfjukjgk]purmzuzammwgfyle +qclqkkcoimixsiou[psabxyezhvejtdodz]ejzppqfiokslbdzoyo +hrrdaecpdytoxkwdynw[vhgsgzqlqemkdkewg]yeqaoolmodchmigyxt[whflgmjarkpzbitpkl]jqjtyhnxkklkzoa +jxdsjmkuplrowpkta[uzwnxgrrcieqvoz]vtwwzqgvdeornoqxmuw +igfbnfbrrkfiyngqux[aajdqilzidsasrthcnc]xmkzmvqsexhkttcd +bmcwxzeodkxlxclq[zvmqvljaabeakiei]xzujkuxdmumimotsaps[xuhocncyjxiyavon]hslcfclmfhfxxwwrln[dfmghezypyqxtwo]wxaxiadxkpvuwdl +xifaalrmhugjejbl[ioovxgzfgpaqlyt]uayfrtjeutfeprmb[fknrvsrbeucxlyzauy]geowvgcfjnbglmrxp[ocnpvwnagqhgbcvoupp]inzfrbwlliwgcsqgzb +wccriqkjssvswvpgx[apoeqvsvtniwgbt]wfrmnudgajwhkcy +mbyargqesqkprhbtaqq[tpxvefsyzwxvshmict]dxpxmxcluamxmfq +jfxpcnpdgytwhkfb[kdrqmtogtlmxqmv]auuyjbertdteoho[tdendgogvoevpnevzdx]eicpvtgotdkcgwbd[ygcvethlzayahhialf]kytibwtgzhuvvsjw +wfdfxjuqfxjbnjpt[mmaupydmuixzfwebpjt]kssauqawybxkfmcu[juevujxyjrwzewzua]eladywlrkxglizgc +qtkmarqccnxwoqr[vzmovjwxsbhtnmjhqjh]zycttmgyujdefxxfs[tsmxkcuqircrdwtsz]uhqtftqwcxreyvlvff[kwsyvatwweenxdvqum]sjmbfsnprqixqzx +rantzkbrnpwuuvqbqn[qaudnwijvntnxlj]tfdbqbdepavxiewo +xwjmsobvbyejpyjkrz[ozkgsxhxiyuejjr]etkvofiicvcusmmlg[rmkhfcaxfbdltnpwk]swklpvfmxmlfhls[iexmcqatbamzyvxft]djvoysjwetzhocdd +iixngfiuncqysuzf[ehzeqdsqwwjrubb]udkdvfkdtxbddruub[hktknkxemrlnbxwz]qfejqmapclbzhhe +pmviizplesuakfc[woqzewypfpcaiotx]xatiburufdzajqrv[ydsakwhemrgnxgqyli]isubtdzpkcgsoas +xxsqvodorzrnrbzsvyu[apejbcvdjuyujpxewu]kfrcogbvnrkuykpgx +nkvsmhvlyyweggw[yhcjceblmlzpgig]smpwtbqsnklgxxbssz[aiivebyzjnbelkphux]wnaojsgmpoiaykznpj +xcllttmboowsgodsf[dfskztizatqovmat]gpzyyqjotpdkdemcjon +drhgljhvyonmqzkr[ohxhjhvlrpodxwy]mrrhedvtgdxjhjv[golpxgauowhwdoov]rdmuwnfurqwssgth[atspndhxuuhzadog]qgdswxcwwahqnpx +uvdajunzymasgjc[onqeemcifirbxli]mrmpwnqojidvwexxrjg[vbpwisdwqtiteawvdw]rpjzhfsfhrzukstel +owbdsotbsjvrwvdb[fclwyuadozjjeyvkz]uzfygewxtlgjhmfpyfy[qlnlpqspocvcpqsa]fannkpftifaoeszzu[pvwpbdancbljmucxql]tlzusxlphovfyfflj +mmtmuzzulxmgxsmf[djwlpuwrkdpcbvv]jomhrdgighcolvayu[vdxrekbfbxgdluj]mwkcqhjhlrehesmwft[pigmugayjtdhtpweyo]lemzwycbgzzhvin +eferdgkfaasmkyi[nopnmqjuuhhkaclf]twwodgunizovyvydh +baddrprmgewtmypxsp[yahwshbkzattrry]tjjmawkirxcxcpkbdr[kcptwlmozcgjszalueb]msxrkbrbcfnflgnqe[amwmeanfnbrpznz]jkkxzruebylcrqkvyvk +kjagsescwfjkqrykx[sefltugsdwkybwj]jmebeveaticpwddxbk[ktfnvedmpvqufsi]zxjysrfpzfhngjci[yifiorzwyumqotxoch]afedqtkmzpfwnacb +lelwtilhzhzslvzo[ehvnqsjxemjrcvbqyf]ovygwyyazlsulyzhjja +gluywzrxutecuauqi[vyllygndlfkbmgaoefq]cyucodjkxwauafwfxw +dflaghirjcyhylbcenw[dndkrtbxackpdcphny]pnhqmjxdzkjycmdo[fryelfouoaesejoq]tdhcacxuqwfspqevq +yjnumjjyewzjnakmnhv[ulycnyiyvszhifgscjr]xheytyiiyilswfhqywd[jxrndqsxmwcrpwrfu]jquhfnyxudasmomnpx +rspuvdkdzbrbajkj[dcfpcvzpbodrxtl]xbskonezgtixwjfsuq[gubkcjizpgfwqktcc]ddjzlszkolvwqsrnnc +moobncjrmmfonnmp[lpbevkcuzvqguwzbzb]pacppeefawsktrydyqd[wayxdzsvisprqutg]dfysmjhwsvnavpixfl[aphusnjjnvygqikzbz]qmvbpeopziujlsmgx +wfujisugotfsymh[juvkyhewsnpzualwau]ljyuwiidwytmvinw[qicxeddblcxrsdrp]khdooklzguadokmdbd +wdzzexnylrbsniulyv[nbehnwkwkrrkbwirh]ymyaqhrhmbuolmtbz +hsxsderrtdvolsms[yqxhutbtoodvausgm]eufwcczbwgvzxsti[gqewnssdahkfambauv]hrnsadgqtzcegnplnce[fwzpwvfptgbgaahdn]hlvjzdqpvjezifpbh +gtnyrilnfgmslzfju[qwahfyniqetvzpb]txlwtncptwapogp +xblzbbrwjoudimv[grtjaoaytdyffbl]jojuhhvrrgbymoptzi[rgpexwvtgbswbzp]ysyfhclvndltbnnzg +ggtkfikxhhzevnhpkoj[egndynfnwwogwdttwg]gmdytpspodusstki[zokrsgoycmxdzrni]jjtmaoztqkdpsnty[ishkqeyrmckkbcug]jkkfuvenjvphkmbtk +aprzrupkmqzdgncwuq[ototomaxhriosvx]zftevshbmxrjingy[vkrildlncmbvbfi]wsqygjuriitkbszg[ncmxdegpxcdvtgau]iauwjlqoidqpkzkeazx +klbfjwxkpqniguvq[wymwprcxjujljrexcg]mtjifypvknsiogypja[tfbqvlowzqxqefia]azvpxtyghflrgdo +xfiwnyfpxzaizzzhp[jsfakgounppfocql]gcgjvygypcgzvnu[qmwugdkvhxjknumcr]ftgvxsqochhihwnsb[acnafcpwduptldm]zcstejwdgasnvehwyot +repltebkzsojvhxy[chzhbjyllumckfluof]lhdibxgatvxzzhzflz +ilqmrorgodzrbfesczh[udnwlveyxsalbxf]pptfzbjvkxksoarpy[wffmfpwwxmuxfmrvmg]zatihmtjlhvjbzdwr +gjqtwvpdnhhqqqvop[hafmfvvzhqrnugo]xgrpicypdmzyjodfv[vtykgzaxumptsclyf]medyaqnemgrawbizrdz[ykkktuzmryicpimqgdk]wyxwdmdtrxcpdqhsrli +hjnariohxtbsthvcwj[jqplvjyvfwbbphien]yyogxtzdtzodxceve +tqajsqqmgynvntqf[wkovdsdotmgxjmmgmoz]kyffakcqgknonqj[hvuefibelljpsvaa]santzrmyhmmfgsac[xevdggsuztwdjllvmod]osdymicaxgknwafiyhf +xgangxswvkcjsek[jrvhyhmomvqblucr]mhakwjcqomofhbdt +vuuruhdlaefeyjtemtn[rkewcsrolbjkvgnjur]ajuzfefffkgdtzfmfwu[ysqkcwziamybbcghjb]vnyxgeftjtrxeokaqk +ytfkhfnkxsuuddh[uorumsswhfhyjhnoqe]mlmhytefajriiwzln[ivgrtejpggcetxry]gtwlsddrscrxepv +zhsugwnutzaxunnfbj[oenidjfrxbnbnevjwo]wnscklrurlxquzhuwf[fswcwqtoexgrdguawj]knactvqybzyjdjdkdkd[hwncacnowaliolgzmlh]xcqfyvhkoaxjyrxggg +vfcdutbbpmmhmpty[glvdyxliujvbdqr]jyavmvfrqjztetyn[rqngwyfxdxofvqwo]xqcpmtqhrkoctux +zfeyzggpwatzvvr[mwnxvrajqdtijeqm]kyprmauvxauaeuntay[ivwbqplblehbbhi]xfasnjwliydlrcyk[jmalyrxoozbrang]lksylhfvgbezkcf +trqdnrlvoqyqyvjt[ekkkwqklawagqqprz]zaojypuwvzdghwkye +bmnmbsogxhtpved[zffxeokudzgkusvk]qcuxjdhqclszjnxdhd[rsjdhjczxtrghlxwh]vpekhuzoamazdzgufb[bgtmhavdkyhtwlwcqmk]qucpatddwrtjztpxvi +hwqfyynrncmhcsmrlp[vlaqdzxwrpawflemknd]kmvyzqfvlouluxelul +gnzpgjfxtsaiknapn[rganasfzfnrvxir]ooatokkxjxhzxlpmb +mpedacmqtzqmwqyfz[dcofwyebgsvctomzomk]vpqmhpoitpubjorx[thmfofpuparhszqe]clvrtngjajielkxre[mfcjhfugpyymytri]moqcfkrpazshwvh +fxskejrgulaixah[cwshxkapatrgudllubb]vgykjzaukwxoyeucosg +mgfyakavdeymyzxwa[dsvhoxfiuxixxva]jsxfqsnjgroxbmpiilm[kxkakjvwgwflxnnu]denqicbsmzvgtcxm +zfqnynrdbdtqblxnww[nzbnvcjtsxrdmasqtn]yoganlahispbjdyxqx[tuqafqcjrxnybeksh]imhkfmqdjiyfoqp[oennqnvdpveoija]vljstbhqatpwvkbg +lpzjqfcipceweps[indnzphetquilkxnds]oxyivnjttcuectlyfy +tfhhmfeomcdyuql[ioclczzniueodbtpbrp]wuiujzhxjbgdlqbm[iciypydykxiyqies]ptvkrvkragnibssly +ybllxqqxzjlhskqi[ytsvahdhxgwnwql]pzfzcnbxiypkpytv +cchwtoevekjgyqqs[kizgrwqwbhebxlscmj]tjbuacerkadppftxdpn +nofeoaawaeoepwekxty[mgapdpmakihrfzlfvpf]huhzkicazfkvjhgdvsp[eqtuybajdgdthtz]opgdgjzkrfejgawxn[umbakkosxdtfwcfh]dhukvukdwsevvcmt +nhzmrmtfyhjpvbsi[jghcdhdrxermnhnrg]sasarolrztffxrvh[tafrflhiydopcqrx]hbrwebrzutugjnj[ejqrvlcpqxtiuqho]xjgvbnuvoxjdcpx +dkizkqalwbetbepak[detgokxgkgyhrqzzbqq]rmwrqwolneotsyvq[fpffqdefoxfczyfb]dxwsppdngvyskdpfnbc +ygwbidlvlgwncfy[ouryypomwfwmnka]axlhgqfgvrfsmbs[zavmkhmkjzvpzlxpkag]bfewyvdthrjzmmjs +jwyxcjasntveqmblff[mudhpflnaxhhrphuwy]yyvtbzbohccozqj +ckfocickdlijiur[fejgtsphnigervnza]owlznrkbwqhkskgebbx[alnbdcgnktmjlnhig]dpfomgwzkqrpmicih[vovjambzftywljbxrgj]ihljubxxgrxrqpn +pygdmdnnbvnjlkacjfz[xwefajgruywjhysd]soepimqfbbhekifv[frdrobvsbwwkcytfv]aszgyodinewnrfdhh[wztqipflzlrwmpxefga]bxviyixobyldmkln +qujnmepaefnkxgrrg[yxdnlyihixwasibuy]qtmnryswxwzkuqw[ozuwcixlzlbiacytv]oylpudpmjaqgwfqvsb[wljtqzfawkmrnkgkvla]kgdvfppcbpyazklfdk +ijkbhnjcxgsslwtkuca[pxpiyixylcuudtwbt]ooerzoxehuqynhzmhwn[ynmgxzstfawvqihdhoa]bdrhyquybjddpuroto[fhnnpsgnxlnoiiqcml]oaibnvvqupilprgcyiw +dfqizqapoxvqvqixvm[mgrrcrzvjkncxlmq]xqcxnymsyxbtfebdgy[hfdfaxiuiexfdhy]flyhvoppwzigjxlytu +qlakotkuqswwtqx[xnpcrmswyqolvyp]limmsdyvzescvvt[rrpvvituflyuhyhz]amdxfzneiggintiyzuv[cykruetmmqucsbwjrh]ymobjslroztxtla +aiufklgicgwxdlaefc[ofaqlmhnwrwhjlleyt]dixgrgkhhbyopqkzmt[zhqupdyazgumcagdids]mxijcialempjslotrgr[lmwxkdqqijndgoiv]upioecwmfnndajajbxw +oiwkroaymbjtugfvip[hyqrpfdrfjppatm]azycyfsttguvudeq[czujqevgflhvskaguy]llsuolaevinsabqpy[sivsqswxfxlanvod]sswhiwoaxhqsjnynidh +qipfjqqbxflvnxgv[cnxuwbvnxndkoxcxjl]atoznchumwauytpqmgk +doncjsebymuefbxj[itsfdedfjxzxgvj]wpxzcoaybnzzzxz[hfxwmqbaiyiajiorh]einnvliwbxhjzxx[rkeenlrteubkvgrpmms]qbrpoghwjttgawgstt +tyiexegppbtbxzovpb[yljnqybbavpwbwmvg]unbjhlrkpjrqbxrtpof[bvbfvhvgtawgpydlnn]phdnwsbwbljkqchww[galszmgwroduckhyyqa]wgfbqlipsvntmnspge +gmnkhnuwwojgyybh[ivxthnkhjaevliiberd]crpicsxuksahuebnk[vogumtrrqupdjhtvmi]pcezvomttzmdgtelfq +kwvkuklbkgbxoyqo[cckuhlseweoukudp]kuvdtzbjeoormufjn +ewqcguiyodbjoxu[qgqtmjabzxbzjua]twmhfdmuudjrqjpge[xexjbzjvrungbvvmry]yuazblohcojrddhfzg +irustuljdmhlqrettvb[dgsukspodhlhcqabx]auntsiybdcfgxjmsiqy[oqscrcekuibymdwfcy]dmxibunjfmqjoeajyi +ppvngsfdficcpbmbze[gcazeiyfowcmezww]wmphalytgunmpjqatau[qnhrljcdkikordx]yqrsgeczwcwjbqfhfw +iniqgrqelaihnllono[cydssebiyefnljxfdh]ljpqnievldmltrpp +jzjmjfifakcsixsg[zmgaofcvdvtziindqe]mzodtodhvkiluhuzf[gqjguyslrtqvcesa]gwzpfqfyfxnncsemb +gdnmdicwnjwgpjqdw[odoslhoqgocoumxf]vodkzgngmshtzwjpgbn[rrhzqlqeixvxjbaldp]xsvbscotkujitex +nnewsdtgggcgiawo[kmuweskiapswdskgosj]avjieesxujtqfwpuis[tvulfkzyslzakco]sjhbzevzvglgfreyc[wzxjjpsqmctkyoutau]isajcfzslakogyuevtj +brresmfifuolfyc[hkeljqzezcsvzrcue]zswubkhczxziqxlty +xzohgybxqdxdwxfbx[dqcorjuppxguxgps]gltuxzxhdjujuro +hmyrpjbmwmyzijkbljp[ipbngzbreqoqcisbi]ctdmsssqkgrjxozcx[egmuzsmsaiodyyt]ugjpwtglzvshohbj +snumfuurpriffdvj[ojmagqzaktihjmwriyv]rgnyhbobphsfqgh[azucllkylyxgrlom]vhtysupgjwbwndwrgfq +pxjdxiuhqmvwufld[ktpvbdokrtdpxrekaf]mamfsijuemlsyio +olcpnpmilbzxxvqsz[ervozeicgvqskuenz]gcxvfthottngwww +hphpdxpbsbmzshrwmwt[sapciwpwuradyvko]dnrhabfjqorseajgr[abhgtcdijsqfndmney]mmsvtcxmoobkkaeevz +rtvrohugqesutzky[sjsvmjhonskkqwhis]pqjtzpfnvwsigtme[ckthdaxpibfximcq]peoffhphnstzruuhze +cazrddymetaqdtlwn[tqrvhfevxilaptinubr]opnhppmmbfscporp +ctclntnozqwmiqz[qniikhszzxbcatctip]wpoexzkaxyealqhcg +suxvexjrakvhziolw[pxjlsfocisjmwzl]smoqdqjoczuyiac[ojpwtuddbldiaruiamd]upfrpxzwnthfytv[xvfejrchuditjal]bxzvjvhoigqunomnikp +vjuryymolbathzinp[xrcvcqvbklvqtjnpzh]wugebbnbnzzvdmpg[kzdlfbpqgvbiyqwitga]wztqfradlqinyzfzf[abgygmhhsksnvso]kntwamrohagtdrsm +ernvshbquyjfymdthx[jjshkcpnxftyopjayzm]yidkdkommeyieirf[zxxkwqqlsgxpcdwlgq]zpjrhkyjkdkxoufwlx +pnevxgcsnqcdezwf[mnftbwqkrfmwcgp]rkmeslzoffovqheq[vxdcnglifignqqx]xiofsoyrslgyfrxl +bjehvbcqagyczepreos[swecagoxtwhtmzsjxt]ihbrujlisjdftzpfll +bdczzogwjpcdwyq[jptlwjoskogbhfcdu]sbfatvcosbvikmvm[njvcfwokqbtynugffu]qwhsgaqfunpacmimzhp[mulicnvulazcycscjye]oycycatwylztksmrfh +idpyubomejrcwurt[idytppqynyqvdajevmk]mykbzkihnmfcnfg[ghfxtsrfkqppejwgen]rsalcongusjamgcltti +gutkiuskjqzvbau[vqhivilwddgfrckjc]gpkuhglnqnlzndpl[tywjgkqskbdlsvf]bkwvgkdcxvdlvplmza[yeqeuyzuoqbypnwg]wsqmblkggadabss +zgirdbsohsmusxbiqm[xnuiyfzmegcwzuvery]mzjixtxtbdruckher[ylfmvkslkcukfdp]vdwcmqmrsnedjnvsomy[cmmaoebsohfrnqu]bzgstdhoneuzfdxl +wimnreygvgbpvafqrn[froxfavuvgvwirr]avnmgyvkwfnwfgudiks +edgbqmwalgtiurhmmg[vjzrrmbtvyyhwliye]mpykphdsaunzjkpam[qdcecrxescwvlxmpi]gkfipuqdcpcqodcptya[pmdbisdhifodialab]wjucsoipfxzkkzwm +xmurhwryxntmdwwv[bveccegjmwnppgio]rbnnbsqzutgyoign +koftdywagyijtsi[amffypsbtekqlbvlli]avskrcxhiysqqgjja[ixrtkpjnrhljddqzt]ekluhurkjnhlzaudnrj +vqbrbgtnvazwyixug[yrmuvykapxyyqxus]ehhkvomrgnlsofbd[mgwdwrvjwhhuynogqv]nyjsgnomdxwabameuss +upixiwerfsjxjvecmo[lhlmklygfmbxljvptf]qnlxnzoekmyoggtsmtm[wqvqbaemhanfxldq]msobqxpmwqyauii[khuvobspvluvghjhcjm]ysvqvfsfyanmyrbuxnw +xeawztjrtohpimzkw[umvqxdfhsyyxsimzj]kyhlrkyxcnyupqmp +hqzlqinkcowqqzp[vhdaljgjjfqhlrjj]gmsyhpvpblkaxiox[vhbjqxseofvbvzbshv]ecirxnvxadesrbvn +puqpygmwhwskicogo[lbkrenbngbzoljzuoo]tndvmvztkssolnom +dbswyuxfrnypetkm[lyuajkvfqzwpuon]oorgrpkhwwgtpzxc[guszbthjnajqffsofme]vcqjstfdtrxcuscz +clhtmgyxqbrzeipksw[mwuhcxpahefneke]bssxlwoelrrgsqcicz[yyrkfjczqdsglltdjz]xscwwnkcwstkpxto +ajsijhedwsivzvngsr[eqorzqparxhrbesw]lyvxgqgqguifrpuj +sqtxgdsfkbhljmt[ndqljydrgqwwqjayc]lttwcrsejwxgxkuawgm[nefpbdmgtizfijyt]dcxacpeeyuzkemb[otnbznolvwiervj]hdcjffxyhtqdjmaipj +kvohguactjmqrluci[tefqrqmjpzpsazfoe]ptxqfezuvtxphvy +wmawphvozqxqtmq[qqtumumswsrpsnjug]wejsdbswswrjitmq +pdzwixvmkxpsxygxmp[zfxeglxxoxtkkmshin]hxjmzexyabkviollfnk[nfitohyddbdfqekaty]poexvcemyssklhllw +wyyiqymjavixnwcnxu[xnhhsqavbnggdqn]gymwgjatpsojwfj +iqdkuwpqylmwhfvm[bjgqryooacvjmxtrq]dqhwmcafwgedohws[ucnjhrhnvekrgjefzxq]opvzmoismjdmsezvle +ommglribbfvicgmugx[msedauwycskyoios]qrhxlnihnwmktihzp +laphdvdlixghsmjpsq[blbjmefxvnjnxmmc]hnzsqzhaenlzcvoq[ppyribixnyeucvjlv]fdogfvnymyznuuxa[pelyyutyolblxzp]fqgcltvxupdobson +apnimgsoqfmqlgmjsvm[rdpnruzylevyuir]wwfenkdjpmqnvyf +ltskflhfhupifhf[gwtcqaatnfjdgywo]kvguorbhzxfqrhxnij +kqaeviepbnrokflimj[zqzevrvhforlozy]orzvxhevxtzorkch +uhsjyhwppwarmrfed[nsfzcvrwjhfuwjta]nlthyhmaeghygqdaxdj[esqbskelpkfswkvwmr]stzggiejdzkhohumob[snlnvsgiktqewvpxhm]ahojfbcfgxqmmml +idlikoogcxqffrufcqi[vcuenzmwggmbsknfj]peoviabqngzwiqtvri +rigldzvrvmsmyakcjb[wwsutfoucqlgorxnu]bcuixkbifegcmltqibo[szoqsqlnduhgvhlza]pcvurfgchanmngh[glpfevaugptbhqqrd]vpndxitsihovocvong +jwfhrlvcglbtbdlix[vmhtfcvzlshpfcii]gosuawoykketkzdhw +bexfthnhhppzzutg[ewpudndaewfnwaht]wlnqstzsulregcwgmzw[atroqzyofendnnp]idtypgwyeatycgpde +ldhjuqeykeelckq[qrrabgedfafkzize]tfjpjpzsafansvygor[jpuzbjptblhydidkek]bbkncsznubtpoiahot +mqqxpkguxlmvyyk[vnxxtwxblmjdxjkhecj]shwgynlewfeegfwo[dgybavttexfiaod]ruobjihpitxxfwx[frpidegurggjllhq]kcfnatekrezeqoqnpqn +pfelcxohsnhpzjnrp[bmnzwycytvwquengc]weaysvdqdkhrprcpmw +llmwiwxeyezezpt[densmtrbqpiuwryg]pbgadfldspoahjimq[ugideashgoighvpiwid]pdvxaqoufmuvtrgs +ynviititdvccfewheh[phaubuotpzjwqfcrm]spytehersqqwhac +ktjvhepsakhdtvgoq[bnejcglklonqxmygyn]kbywvhkayojcufnwr[ipiujgjwknxzefdphq]zcmnmxqhuhjwqiue[dueiqqteiuvgyggtc]rbsyqjqegupwxbazttv +pgnoazapsklgvmejjr[hjzazneywdxkaki]gfwcgiyhuaovsye +qorimqvzoheryivfi[usbcrrdgseveupnqadf]bvedishdaepjjnrgftc +thxrgxhchpeczth[eneefpesxkgwuxpnyb]efgidnpfdesgcmkqllx[jglvknahzvxyegxxedi]cupoduyjkdpyajhirg +ltabaysmmffenou[fiqduygbghbczdsjcs]drfpocohdrhunajvmu +rklvlmyqqxbttuhuzos[bihsvfaluvhdwqwcz]gbrlkbxpivsdykcjx[qoudfwhqcnbrmru]npquvyoxliacxpr[txyzvzsszqedximgecr]srcqshisakuwljrulf +oiiruuqsdsjguri[qfzwehlhoinyhjv]jwayjxoutcbbsxquluz[kbgrvqmxzsukught]bgspboampsgsivvuwe[swvxxnjbmcpffrayd]txmyfolzjpxdvqzdtq +resryrrtzhhnpbdrw[hnirhiummudhyylnky]gmwqolwapineiokcl[iqptxfvtgabqyxex]npeatmzdsfknpajsub +aqjfwyrtqtrhnxdmfq[xacmscejzrlppqhlziu]bxvptkrvkahygexqsub[vrzjqbhlpywxzenkod]lqvsohrjrymprniyn +obdgtytdzpcbnelm[scsrytqyknxdmzugidh]fpbpxshhnyxedvvna[fgebgketwucucajqip]cdmbxelnfsomsguvxdu +yuluzhzwsfvngixjn[gjmdiyftbqimhxiv]gxjmpelluljxmuhz +icsqqjcnwckhskoc[rhanawaofgbzenhxtfl]vsvuwijhjnaurwlb +zbqzykdfeunfcwslv[fnqtxugkwojhjjqg]vetgfnapdhvbdaiya +uxpnaesrcrudsmuxvk[zmffkqaufmoxgoelq]jldwuldydprcfgod +lcaqgsbmhyfmfszya[brvxpxjvmtrdkdmfm]cphjfsilvnsdqmpxob +cwxycngzriigcet[xltlzayrmdowajvins]rbfmarruugyqhvegod[nbyobbfqprdigngp]nkrwqcyinzutnklqb[ajhqjuhqzahxzjbk]nfyrxcupuphkbxjqlai +xqwbcunarmghbsosq[jrmjtqqlogscgojnldm]bnzhiagvdwgwhuawz[toxpipinabgmkbwhtd]uxpgoorspsohkmd[dtadhrgzvfownrufn]xslrmvbosoeoeaewnfr +lllhkodepygrzesxp[zeohwydmclhucevd]hbnsvtijajahmkclbei[byxhckkvqixiwtg]ekezugmyyavcwxtilwt +jtjbuoavqyjhlaw[vbjakzkppzloxxfx]vibdluddkdsdexqnwl[ofqpidngtagumrk]kfoqunkkvyoassxlgg[ngbosgdywnmslnszsa]hxpciqkkafpdgfki +nenfymvefbgzvag[wiqscyftlldcvsnp]pchooarrvfpzhwvcjpl[wtitvzxuvfufwviff]opjkauasyyfyspzoufc[pelszbarccpqtxvawi]cmkfptidaetuqkwz +hitjejomylbutupmkeu[qdzbydybpabfnlkwkv]bdlbevsgqmwnbolnhfi[qeujppfhpzjbtafrgl]zvirtzxdzoojcwfohx[ftgmwthtcanqrxzks]bsafidxuxypaueoxg +gclocruwassudla[imoknvpznyxchnrvl]qgninncvnnwjovnm[jwqccerrryoiwsqf]chcucyiszjrnobxal +wqlihvvkfdyrhbqu[vizkatngyvpxuwhsfr]mrxbfaovpijyrmtjxw[mrkexdpmoaarqfj]kmnbalnjnbjcsdulczi[rkidvuivyaequway]jmyicruofboygakaozg +dvyalwumbdjeaocae[zonftyvegiqiquqac]osgmsdmqoclweiqi[xhgqrjylvorhpfkh]mmpkmrsideufseuyaj[ogtngcelyserepmqi]kjezmzobtremfefqz +ewovyikmmawzzrf[hcnunsbuuzhvduvyo]pdkiewvktjzzpqwvpdw +pwfklqtvnpsajdvtyoz[gntgytituioaybkpjqv]wteojggsgedrjqdi[xzvkngdojribistpis]xftjryqatcesygfzoa[zddmnkhceqxmznq]bssablulgiiovynaqrh +ztqjirnmogqbcfifh[vyeztcrzfxnegdyeed]redtifioqpfzykudrih +osawcjcmfchcpgyi[ffwhlengegnjvwqehkm]rvtkttwkeoefydz[cokaihziodpeurmbp]spjznidsrkpqhsoag[mautcyrrmxsnrlw]dastqkwpjbubonqagfx +jctsgqoqjqtodkhvvuu[ylovawrcpwpnzkfp]xtjdibtsmpbidvvdh[mmaecjrzneokajhkzc]wbwaapxadknspjujtp +izxxelepmvtrpcb[xwoxroumisiqgpqr]lvhyjhchdicledub +lqvelunldllnngme[lomutagiggypbbw]hdubyftczrctokdhvbl[ymxlvpbfiojaausmi]uqvhoaigwswemktiu[iipvkifnptbwuax]nidlqwimfttkbnmms +sewpymbrjgtmkqd[tldvdouashkzpbu]qjujogijyyqwbvzqe[xmhewesgbeyrqkbfj]heapyhfvnqovmlkz[sdffbynjptvodwocru]lwqkbkjseujzmqprv +oegfarvdcswdpnss[xgbroqaseklyoxl]wticmsitljjhgos +bfhlklvvprpfgxt[wczpqxciyyulsgf]fhlzqdaxyerlulakhbi[xgklnelwoygvyged]ynhbzkafydsmevse[dfcrqsfpouuvsycxi]otcdmymmlomedultqa +pvyddrxqxuxvzfqfl[nipfbquzzbmecwuu]pxzmehysojqnpna +vthwugdifklqusu[fmffwynjxyagyycbup]eaompujnjzaowbxmg +djekvgwpzkgwzwardaq[sjycmrggjjtzpzoq]zgagtgosiowypvz +bicemnivninwfubpi[enghcgyjwfuwqvfcrh]crycaojgzeqgyxdq[zxgbztjljhdhzpoy]ygxqydxramuikbawdoz +wdigyfqqrkjeseda[yjezqvkmaqfkcxgu]dwpaveednjywzth +vjeaiuwrhweqviyv[twssdwyckfswwqg]bujjzsuffbcddcqd +ouivgjbmmsmiezanss[mltubwnsjkijprjae]dxjbngvqbuzmtnxj[actzjkmbxwewlhmpz]aeweucknsntthwwvkmk +hqxgwpeaugpibuu[ftohsergcnnghmultwv]oobxyesnifpglsyumqx[wthgkfckhzdlzeh]tbvnqcewxwzutlf[dbsokgifbtstadxjlyv]hcagowbeupbbxvnnudp +fpgthpsgglztrnrjvs[rznddjrlsjtdrnufotn]nfoxdbhyvovsaratt +idauaxxyrjljwtqk[jtrvbiyczhqigjxfam]bsmzdrpeytyegsvitk +poxzegvwjgitaomcy[eatpylidmcjifnbyt]pxsatbkkqdylippyjd[nuwjwmoghmaptwgm]tarinkguhfewrxedty +whrppysnyuopewxlch[tqeujwwbfviqker]qvintkkgeyiysbl[zmhfxkhgptetdsq]jazfxamrhsjvlcwr[ybdhlaudcktfgpjajk]vnedwkbznnxoegxe +wmgrbjddretekijeqaq[wxoqrjnhathlpva]nqrxdfrjrvsaxzgn[voeyknzetkswzmonnh]qexvtsdihbxdwzeympo[mplyvliqtgoezpr]bsjrjqbvgcrxwnpdqs +txicytmsosvlzftbikp[hwjajoqvcmhmitvqnh]gndimhsqdssjugsp +scuaijeujwpdvdlzf[byroacgumqpoawl]lofgfiiquoftdrrxnhb[vowfcxvalicqrtpvkga]vdehstpbvncodihewhv[tqrtdbglbqthqfjyu]loycwsbaxhkfanhnp +qgexpbjlhcciuhouo[apvfnzznkuufvlo]njoupqjamycblyd[tbviqvflseyhhsmxz]lvpemusmcuajelt +jvrllpusmfmsnwy[yqlfrmtxpvwcllrfev]hpuqtteqblrjbnkx[puadngfdbecfuhuvrqb]myxzjgttaacbhzlpipf[gcjfzcrweoksbywfdc]mnchtfuqvmltrxakz +ywmkwcztiqykpmju[zmkryfneelvtwfnm]zhuiojbicjnfdmsdhi +jhgrwzznkirrskfzfbl[ftjkmxrdyljxzov]wcszeohqiseprjde[ngrtygnnwfandfuvr]lqcatjwzlsbuqnzyhw[hdhijvlmfotjdaaivaf]glgrbynrgpcxjihg +ujtcxpupjndfftyfay[wzspgaqtsinvgbd]oskncvkxhimahafzkp[tbtuibverwndjkyrbtb]vubbwzxvzotdhtvvx +dgjxjkogwuxxgavcit[shbqapwgyduxmjdzs]sqmxfuntsqibnshlszq +byysjubuacsviouubxd[idvdypsyblnsmvvv]llcmcxizvdvtmksphjf +bfphxfyrcoddphmhwh[xvbfcujmhltkfiqaejg]wxxbzpwusjrylub[vcxoevvppeirkcl]bmsyjsnoixvozodjpm +amhqkszrkzcvumwjbr[wgobbxkqavcfedi]blkqusznjzozcwyatzt +chzanckbvfhvxoikx[jeyndyycqesiujnj]midrrqwphhqptlbgy[dcelctfpcmitlbrdu]wmrripumgjowiedxpcu +rbpkmcggsbshhytszrb[rjftwgbycnmyxxockku]nrtwwneopxuypblr[hovauqqiboxesfrqqfx]ytyygtytusfdjwco +ytuvowkwojtdqfjtmj[ssrmnlgjawuaqqrdpv]ugahrlchntdmkwkygr[ojlgerllesmyzdbnvc]zaztsxmsddgciyz[jdimgvtyvojseeavk]qvyupywbpmhgoppfwru +eirfjumdodlaevcsigl[befivodoxdnhfmqwkxc]qjaeppumixfpezjf +lqkzkupjsinhxws[oibgvhxxpewuebro]qbweuxvitezbungy[lapasshrjxcjgdooj]hmxejqpigbcprqregtu[pqqqhbjetacltithm]zhectfbzhtyyvkyazu +ihfadsstuwooioj[dfqkggnfiplpdcsnmx]ylmhqzhlwtxaxhx[yyqzppjaxhmgnlll]orngviyezsyopwfxmhu[pucykxnzcwdwnjzruf]axfmqcflmrxdldubnca +rsaoluhtqbbhahhk[ursokfyrzqvmjsq]xlniovtwozkeahaydy[nyualslnfurebmbnv]ehgueldltahorrpbbyr +lviuzeeixehupjezj[gzwzktpbujzeyypbqyi]ecapnyxygcmgfhgmfav[qclblpzrkfredwm]wcdfuzpoxtmzkif[okgiecyymbnmziyyke]zflgxeqtxzeezvc +wzpeboftsvuwnxel[hmqswpadnffutphylpg]hbapzwwtxulrfaenb[hgsimoxqivllbthuavr]jpxhxohhxhlhlfemuz +xbojluzthxlygkyzkwr[hjnkqiofmyuospv]gaglxxtcdnnbfvjubea +uxtugntiubziynpzbju[onxffxfoxibzzzd]wineojjetzitpemflx[jlncrpyrujpoxluwyc]fxvfnhyqsiwndzoh[lkwwatmiesspwcqulnc]cbimtxmazbbzlvjf +bezefpkmcyawtdlbnmy[yxmpaexxuojocuutf]gybqtynhfakfryzyoot[rzddrwizmjilbaevypd]wjfzotxmdlvmjcklea +psehcauaffyyegx[pwkfxlhukfaavgq]pprwkzrtyyghtmsciep[rbobphjpqsmeuvgrjt]vlobomuxuflrqfwjo[nijmtbnuuzplcprb]snfbebpcogbvkwf +cwflkfoevdvovrmn[xfkkrwrohqcdsdyuomb]ohirkxwgudwyepwtvm[ootlpxttypewmdjq]snhujgngvmxwpmagis[fmbwhgzljomkrdcph]pvfendnvzctahabni +eoczaktxgrdpwordn[rbhnrlgckthgxxuzu]htgvsgazuzqpkjoejg +wwadqndhcahxivixrpr[byzxpjmhnwsplkf]zgwftzdjcyjhuefzynn[pvifqpqbtfpvxmhma]atwcwmmvncdisnmw +cjbhnctazhwdvcvza[ydnxbdfkufaflga]tyxejwcbirwrznjbf[wmrholfqzuzmywhlx]yuglypghwrwzmduczd +sucrzntdgccanozz[dbyodxkqvfamarbda]iwcomrnnifahrolyhj[lldsewtcmdwovjto]kxnjfljadgqmjmmr[jpceairekkatfdo]loulprskwdwpwupvlow +rmkxvrnxpnlpgxk[ymfqtqhsulsvevgy]mwlnvrwgovdeimq +cjytdtwgtpfaoqpo[ekwzzukvazymdgcjbax]qmhoxsmtmokxfyggfsl[ghoubcwbxpcflxaoiqr]mhzvuhnaesfygwphehq +fjfuuxzzuifgatypkx[pqxsrnqgcfmmojf]drmywevzjvfsdwoe +aaltjjojczwavnn[wsduayllqabakudvkzo]lnkpzrwwahybafhnmlt +trzcoixqxcnlfmu[kxdaqkezsbtcrsel]aimhkjueidtzheak +knsjvqpezxmhuhawprd[zfschikoyuarwrpvh]jnwcjfkahqerhof[eiezpktdgiogoghnyq]xumsccawinipdfbk +qdxlgihyxpurnyesn[uoqazfufeeorudagpbq]doynfpdydwxymmbnh +hhxsolxzfchrnjue[qibcadmwrkmkbeye]xydgasalivcqoag[oyblkffxdgogkbjkk]denthwhcbyimeeyyb +oomceudfrpdpinwaw[umnoeimbzecoaprmqr]vnswrzldpdlfoaaaxv[ysmxmvvxuzozxtkar]eatvxgtbqcoquhhzzn +mrgnhaqqyhhvdfoo[brbrzbaajkxnrbkpsx]qknvrvpfabkczng +xtvcrctmszksrojch[bqfzfdhhsfkolghur]dwqpjaqisitqmhpnkxb[omfmirdtvkdoehc]dgogacudqnrtshre[nudirbvfeacxjhb]igdfrdrqycnowffn +vrgmsmohxhgyybr[shaciuypkvkjaqoho]dlwfavdhohiruaef[iowdifdsyckgfaixzbi]rbkuyahekeohyxnyxmo +giaemyheoijyiqs[dditjewdytotrevtph]nrcosaxnrsfnglxyrbh +aqpquczuuqsqfmiynf[rytylbwxvhzymqtqal]olufblbfhnqfhbdpjc[njyewyvnezayxeqkooz]yawvjaofjaqcpsaqnlj +ynntsleqhquylfosn[esbohqcciuuyintjnn]krtinqbvgjtfvdttys[cahezzmqcfayrtijrl]jlquffpwepfjhij[gsryvmkutwbfvekc]xwuhwthwkpiprtpn +wcifpmwramdtgbyx[mnetsyvjbkzlemkkrj]ghtuuasxyhlhdiqi[oidnivyrbzficmrkxa]sshjteaabilnbbv +jpzlvsyhfjewjsp[zaukqnrnkxuyblu]itarroefggdtpkwknhm +nxdmkipobgdhcekuk[edajmdcmxhcxntroa]vgrzzrytukuxdetf +elfvvedwjbltwcnsbat[wlyogdvixiwmkxvshnm]cwhhqukydgvfwzkw[hendekbuynbsgeza]unurlefaaduvvpbi[uriiixudeogykwckty]tilfmprasfargwjoeaz +ehllosfwjnemfpzkjbh[paefpdhywomalbjjwco]jynaehuopnolwbg[cusfqbvxlvqtqbuxgyg]dnvunkjnzqnxcginfx +jfdeexfzxrfxleh[xqkthmkzmmfbesrfa]ddwxrlspxpefvpkhiz +fpexyleujiphzrejgu[rjjuimrbnfxihopoasz]xiovbrwkxkchdagu[rssesjbgdfwwomrpdxi]xurzdbytoxjkwyzl +wtudecnnxchnjhuz[ntnjpmwnwqpqqkcevi]xibzynwnkahwfizkxni +hxvhhsyrupdpvjymv[jgionvwaxuiemcdtvn]riesyfkfymxxite +ndpfqkkiqgvdiciv[qwegblwhxefkszrc]ddticzcfwxoylaheuam[kyqomblpykgrsofpbz]woykqlgorinilldl +lupajnaqxzgawmnb[zfmybtxebhkalxwfwyt]sknfwfxgdqpbnqebbt +qkttfgfwmqxgpbcgqvg[zkftxwwbappqdllajhi]ducnsepawowmjggv[osygsyvnhlhkrzahzoa]iygudcaycsrtbkohbrd +akdvrmxjbjaahjcfhz[nueiutbritxbampij]vjirxewhgmmwlora[uauyvvwvrfhbxituz]omfdcitqhjhentxgfu[fucgdtoxvryasxib]wyvdxqpofoszluslht +eorazrawyakawjfxdtw[bpyrfrsjhfualcoyfjc]gfgrienuzeifrfvw +mcfhxjmwxlcreeloqkj[xlhrkjackiehnqj]iubxmjyssnwjolapvs[tnxnpotyzdxhqamjfu]qakefkzqtcahednybux[tosvyefshtbgasbf]uimrnuvlevqylbpkq +emyfqgrtebopsxa[qwacgpmlcpoitzmdq]weqwomfyfqhxmkjalw +dgnbvzkwdnxzuduvdee[palmkulrnlnjdyeavyi]cjgsjpbxpairrderw[nnoxigqxpkjzjhfxgxx]xdyxrtslnpmmtpotla[undscmvmhuxzohsdg]ghxcwnjphcmvttna +uppsitifhxdcjbn[yiqjsnlktwkbfyho]dpftntebjwcyuih[rrqikyarnxteelpkc]qbjeplbraadbjxoicjn +mqjlmaekarsttdmnl[cwdajzaopmbrikcv]vfhztmfwqcwsbdnyebk[puetgqkczejvdjbfqc]hdkqfycmizzpuoxumm +maldhmhtlcsjqyzrb[zjbfpjpvdszrqkpzf]xspijlrjyzjputpz[mcjmewdtmgfqutbah]hebhshxtiedpjpjngu +hiqikcyyvddlcggnq[ehsopbptguatpmyb]wfayjslqiqivsbrhedh +zriahyyoezygvjmepy[dujudufydhkqlbc]ndalzjrjswnjujfm +silotorivixpdydnd[wtsojgrfgugwoyo]pfihyfhusblbdodtej[hfclibenimixyexhble]gaglopphfrhqxikvw +ddejnfspvmvffpfyozn[odqqmwgalivbswfio]rbbkjhvnszgvfjtgog[fgvufpphptnjcmraha]adsajvzndnajmilk[ukslffqfzyvxyxy]njzcfhdqyrzzctmnxn +ehdmevcrfoeejfedbnz[cidowzljgyawbjmtzun]mxyjuechgccpwlxj[ynbdkyqvibsfwekcjr]qjilshucvucbebxmeyu +wfyklfdesrxsopcnj[otmmdkdasnvomdhef]lpbexhubcjmfwlt[maeuvtcgzoxemnreol]qbwqszxalocdbfbtge[wbvswinrpyzjbfrsr]tinsrsxtrfkizkeu +grorjgszsijwlhxfrjv[hmjhqmbipfjguwkzebl]kgphtaonflqlgbyk[qxnjzdupbhhsevc]tyflwvcpxchibnttwsn[ukpfpknbyacpxmoxzmp]dxzkerytewihuptx +csyjgthhgyhnjuxxg[sjqffhahrjyoqxncjcj]owwprabojlpraeyk +ibcaffhxenjnmvrnog[shqpfncawueqmpyj]hawlfakyplonsim +ftaeqqsyebdeveutf[tnifrefjkddtblslzwd]cbdooorsorxwxugrp +ioigxerknwyrzoztkv[ffkgwjfeowgtoxnyt]zhkhaqrcdjsvxctdj[ebntbwbxzbbqrdasjz]solgzrowmzozovz +jfmlobddfxzipyzyaj[qghvghaxzmuhrpifyf]idrqkcfvatwsyom[wncyawwmennmgio]luzaexvwjhxbryah +pjcydgylusqdexbb[nsoyssffvolztzns]mntwrdacovyfxcqfn +tagdiyuylrtvuyu[exjzdpmovyftjpxgj]vnswkkhaoldjfkwd +atowdglgkmbnrvyt[uzgadzquqpggiapdznk]snpqanyoeufutazn +nltynylwgqezegky[rawbwledrpbduldc]isupsldtvjtahlwjgz[upmovvichcymgwuoqrc]gyjptxtuaqcfixjuanz[cxzbiosnqkeaxlkrxh]yglfdtzazlkxgmrlel +ezensxwulgqdgytdfo[ozlmpzteuyjqrxocn]crruxzecnvrcpjurn +ycflwfbhueatnpimmkm[tbcsifgtkkwtxosxau]vsnyspuvhhfozxgjbbp[adcyzxtdknieifc]hjkfmbmxkrnksewsqjn +gffllhgsmlpxkktcq[wjqwhqrwepermblfolw]wzgcjyrpisbwyhnz[yjvzaqjsmdgazjuep]gregropoulmnagcvx[gfjkkejnxmpfbtecy]ufbqwnifaugffsai +xfrmlrlrhxsownybek[ryhsyltyflhjbmltndc]agtvigglsugquzbc +rshzvotgovlabfxr[sbuytwdobnvpwcax]bynmysulnnjmhkf +cevbpuyyvlutjcuutl[pfwloktlqbxfcogrc]dflejqcyvpasjowhsj[nscuwnjsrzehqamogtw]scemydqevrcuvhwxpe +nsbvubuyjrzsalkdwz[fooatkopdyvkxjgfho]jwojdgxqtlzxgna[vmkwusptfjbgmhq]xkzpfgkklnxunma +jovdewpqyfouyzpegwg[eigxaawljopqauy]cjvieeexlyiovsugif[wtkkpylnxtqrepkjei]jrdmibhhcftoeauh +flpwanunpldmcnated[unzsihvveyitclcf]gqxlznjbnpmiojuunu[kxihijtbrbyhkzosvk]xoxdqctctmroxoppilv[equfcbnltdiwdmahu]sxfloedvbznwctnuqt +wtktlikeigdndpyw[dspimpajtzfzmfya]rmmuigyferofztnuir +thnfrvngjhjrwdatdc[vwmnddbpbakuapirel]qojpomziuupsfysyfng[gkgjyjoovotmjwwgvrq]xxfsycfupudisdbtk[hnieklknhbwcfka]qbanhtkdijnnfegs +mazcgrfwolhhbtman[jokgcthhpopluovccrg]eybriinzdwjyfjes +kwxxubruqgrsifrpuxe[pqjcuxzpykriher]rcjvrturrhxqhjndj[umqwgmhgidzakfnk]nzbbrgxxsmkxahvqzs[rnqcmdjyrldnzrr]nhztvrovbpifyxbcvti +kgojbczgybkjpoz[nyemqsvkokdfxiata]lrstpiuovispfmuoi[jifgmwihkzirfnblzqu]dixnvdkqejtatylghtd +owhhzrmvmuosrtiwaf[xvdujvnkkrunymvh]dihbvchdelxcqsmlxe +atcmrejivvyxxbsexp[cjlvkmfgfjslzeno]liavdjycjpirlux +snvgwihgkhrsgdzysbh[bbyzthwnbpquvtrmlc]cdwvzdogbisfoopk +lccrydahkgmzirmjzfv[rkkdtcqmlfkxmke]xkercumbulkzrlgxng[deksxliclevazssc]yhidzcmnbvgacmdv[ucxflzawmxnmpxa]hrfaesdlnukcblbqlm +jdajqnzqyhcomekhejp[tyrtsgspmlmrbkm]nyfcgbagjplztrigokr[ntzzerjwsgafymxw]ftckmtirxfdfcqpi[pulepgarnqxbvlqmvog]qashqfzwglljzexbnsv +kjvalulqegxybfhx[djfulullrbsebeknl]bcxpgathyauumxcrsmk +fihxcyovovcmukir[gucbridfutpdnto]abzjiaponkgoposvhw[vpqwcnzmovnwdwwo]zrkqlpnszeioesnhk +nyvobmkhkbenucug[dwpifbppiwftzokarg]vxxalauqmooacfmdox[intaxgcpfajzdwmcsk]brknzsnhuukxjuv[fkheyxevpuphuflvzkk]levqirhqhynkthsef +uwdcywcarjujlnh[qvtowczbkenlghcmara]kfhcbnrkorcoyhkww[mzzwrpwwkrnnfavjxk]hcjjzxeynegdpfwdw +xtgkbqtzbeptcxndjxl[jzmbcxsmcrtjtqi]wnhqmctldgxjbrtio[brnnosnckhalqzqsyyv]uhungebnygpsmpzmj +xrqpqqsqazzlqcdglgf[ziiwwokpqiinmqe]stagyposntgyxnh[ubxzaskwfzlfrmw]fimsoerydnghxlg +bdqtpixvllcdhgfqby[xurgfxznrblksso]wgfyjdmpjqirhiqvgg[pbgnckfbdinlepkb]mqbqboepuqheaop +xxlhstlmqypoyhb[czlhqkifhucxqanafx]jkaaxiwxrnneudczrtn +jhcmhtveqenmeczz[rcpnnuwvwiyfjxo]bvtashqfjcnbrqy[ebgihcdcimvgdwochq]pmallgnuofajusz +ltzknsdqzdmbpxipt[golssizcvkrcmquotrj]nqjkcgdagjqzvri[xzehrntfgcnmgrh]devpsfftuonmevocw +wgklxpmeoznyxtukh[nevjkmpvlbaulxjieh]wopqaknwlwjquxt[mxzczmngcaxharjipt]tuvwngrmylububv[ryewaqhshtogggdvc]xpkbqydbwshscjcw +uglrhqngbxqtqmdlyym[ihdwlwfqiwnigvyarcw]miyynkctggbwzfkq[rqycaudamvwoxju]mmnzentjyyddntnpgxf[qjryduwnivawjepknli]toodveiqtzjxjvq +tkgmnxgifkqzuut[csyogdborjrnygg]rpcbucosajyyyelju[bbujqtlveymlqesvg]wvyfimibeynzhsotymx[tqxldisulrhuckef]kgqjgtaluastnwev +qifwiunabpnzezlmhh[ffwsncvlqpulttkx]wlwdpgntblnoubom[fksogvukjlzupwetlef]cfszpnemoifasqw[ttmonrrbhknspuqx]htucxamhxsoigvt +putioshxpafnkcwdejm[dellcuoevwyyhvwurpv]zezpevhlmpzbevln[rigyoryyhoxwlbg]zkdzexpizgsumkuiuy[hycpaavxiqnlngrc]gknnfredhsmpofldn +eknxasjdtsksamfc[dhtgifeezlgfhlyvfdz]xfttcwzqucrtngdpcmf +uyiazdptoxzxbzo[bmuglholukatdbf]ascjhcllcatoapyvn[isqfrvbbkzsxixjuqrq]ncwzqqgudgwrtxvzfe[spqvftdlddlfglgg]zrqbukmufumytpc +czefxpifdsqjjkoxgj[klwshjzagbrgtpiht]xofokkhzlnjplefofcj[xodekgjbgraikdley]dgsrqzqxjxjqftn +ertbujoaanuvqskr[hsgeexqdgsqfkiunhpa]orgvxylmsdlzeyjzf[mdkgzwdnvtyoogulx]nbapgjckrfxeniiqotx +wgywdqnvxooqjsefac[qgpmwggewotnmloq]bqdvbzpvqwadroh[bvbsnhmdurzcubvsno]ndwqyjenerqdupuob +patbwuitsfeqvswby[htsntyfmofqldcbwgv]zolnndvkaimzdmevb[feyvwvkelmujnppg]tjajsdtevgjukkgrwr +hoznvyznwitnxlvu[kigfxgwcrdmfwgsqnf]lhiqoaqezmswakdcd[gxmjrmvoxkdfmgcpqnn]ditkwvolcazfuxzfroy[qqlbrrwfedrgtrgm]iysjaakrbnqicefqxsr +ufrkrtywkhfhfah[vufpfwhtxzbdqnraz]kklboeggazttzui +tplrraxhaaaoczdpg[vzbnososnioajien]dvdckrkfdetoofpi[bywkgphzoglisygthku]gxtnstjmffnepin[evccrlnwjthfxhhqzc]lisguwkfwswblzc +lyluhnglmfippljtwww[wnkwnwwsasqbrnlo]nilnannzjbpgbjs +iknqwrvlcztavivxmh[vtfyhjzauqbyjchjt]zxmasnczpxlusknrmtf[yvfnxlrwgfxkdlj]otlivjvbvilezalha +xbrzzccetyjzrlt[buwwhcatpcchdvhel]wosdwuuzpekifdhhvpy[twwoaezcowxvioqsrrd]uuygkhojhlcofza +wqeintsbeqzjpuvx[wqlcamjmpbtqqzjcy]czhyqcurqkfnnkoltja[lozjcddygpevnxebmqd]avwqdpfxcrcvmalaczo +aecvebozlythtcfzt[uisdkrrjeboxpuclbg]sjxcgygpeuirukx[zeoyaxgdyzfkprewiyc]rdlnzpbwgztivpdon[sfcqbpfgffkchksmfjp]yfgrlxiixyurxupuoij +vnglyokdpxlgphpw[bjnaqkjojazyryswr]bekdduuwrqabarzwzh +fcggyliuipcvnimphib[adkvjaembjcqbcc]envpiocijefswhv +pgraswoweceiftu[khhpmbjghxgmhsud]axqjkekmecwunefk[pvelpeorryjcstk]lruensapttjtyxnr +jomdrazkwryxuyc[qolcqhwdidalguboza]fcofbrgowezhbyqckrw[wurpvelnhdewfoita]swxwyfynaymvrhleuj[icdlergnbqmowlxjl]vxcwgvrvpdejoybt +axbedlkxkmbvwacv[uabrmhoepcgtsdmjjzy]iqqpitszpejeeophjmv +gmltcuvpeuofwteput[eyxdpnceufobjelir]hvajyjjzgkyrtgvrfs +sfyyzksaymsvykmr[xjewfmfhhbrmwzf]cbzjmltnzvcodwtytbz[ewgckbdvfnkkyxyj]dfcrjyoakdyggbsxm +wxjalqmicwmwkzakcy[mothnmmvgypeacecvz]hbjasxlsbbgxpfdptk +qtsgwqpihqjgmjadkjz[skpdhegagxxbmayy]eaojrccgpxovqpi[ixyljrfgswullqnbzdz]etvomvkwpzpxxcj +mbnifyngahvfhtfhql[azcbyxkvcnoatuo]scgddcntikvavaseu +uciiofzqjkhndnzx[hoyxdxfahorycpfcofk]epeazzccheaegyobu[sculkaizijfqcrpjl]nrvfdtpvgoqioomvmv[axmvmzytxnbfcsjf]fccriiwmdaveeyamwp +sxizvuhprsyyxgfqgqx[zwszjxransryibshzw]ikquiagnkoqexlsqypb[zpuqrhaqvkuvhiqk]pvuqiqxpjtsyqgcyr +svjudmyxlshxbbvawl[inswkufalzfwoumcv]hrobewddabqsiuej[ulhptknpxcwqxjxanjd]osfyeygptwfjmvrma[pnuynwtwuulsizw]srhurplerqabvouelhn +islwmbcjeljkceppiw[whvcrbqzgtcfbcuv]tcyzkgyzdaekgnzzmz[ddefwmnklcddlhow]npzbtwmzmhjtzljnr +lgdjrkugqewlqxvn[wtvrzflzauwcxkyp]qbswluceqlesdfwy[kbtmzcvoubbiqfc]honrvxwcqsgphvkt[djuuancygxacmka]knseftjiunzuxdi +miapzpluxnmdfvi[edlbwflzitzghywio]vizzhfxgilwpwhr[ochurvodstmhiypp]rycvogpcnysngytixb[mqnrhpbvojfefcicx]zxqxoinunlkjvetkvrv +spsecopdywuheqbnm[npwovcwlwooxqhyp]hkuizzsdvysvhvmlc +oqchahhsrywoeteaeg[ucowjiwrzkfhyebbco]efxdrribepcvduwjgf[nvyogembujkkmcm]kmfrlcaeawrvofxrim[izjebqewubrbvguzk]ngmugyprdvrbqskn +vwlikshqcpgxqvqshv[izqveivxdxgytqgdk]abnvmprwbvwmrwlkkp[iffpegqsxjwfyvixtwk]iseiapjkgnkcepr[gtfhysdedzxwrhcgt]ktaeihyqegeozdfuz +aieqqwhwfwxpldni[huyxdcvpglqqkeyeia]teztoyeycqohfli[uqvfjzbsvttphqxsy]afsxoqbqvtxtgriuzjm[psumrbbtxdxlwpk]qwpuwevhjellemzp +surpbndlvplunisu[alnojwsmgbtaomke]zjyikoebzazpwql[lkgsnxodocsrniokroa]mrcipdncevvazafvkb +dkszjaqhbkyxwvwj[wykmzcvppharrax]pvrqzqhabqtuhrj[qfxnormttaxsldn]kxjwkrjwvbiutgnfnw[mbspfflblosguqzt]nifozavfsfkngds +uwafdvptgkfikprb[xhmrwxqxnbkfpdz]efhnfwvovbvglrrt +kozevksryerpsrgmub[dbtinyialvlkgilue]pyqdyodlttsnrsmfvca +mgfmdcxibcgzhrfmm[mzvyabccrdzlaiij]arnetejwseofkwqvxi[fylixbrjhxdfhiewbnb]wvndnswxdnbcktp[tetomqdkfmcndddruy]biuxgrvctlbbrqmxjp +snjnfgbtgpkouxlpd[vapbqurlxyrduxqy]meyhgdsbvkdadsfozf +fgknedldithvaoxqpl[mihhhdrtpjmoridqamt]vfupazymsipoana[ngqkziyavxkyukp]qqysmfkyaxbuytr +fugbgojgdeavlmrut[zpukymkjkapibmhg]mmdesmcwbhlfugkdiz +lhhhlyioiiknkray[omilmxkodlmvzhkgbaf]cyftkgjpvjvdnortlj[ifljdtkgscmnmxsq]nxtettqnuaotfsh +whayrxopbtvnpobokn[jfbobalkbfjxcsn]jjucgwedwbcfrdginaf[atdoatealbqhiks]alzapbxuvmivqfgpg[qhzdwsbvcbtlpchem]pxxskedydgisthkatn +xzreuonsdqobzpxr[zamxighfvnaxqum]olbigclentyvugtuvg[ysrgcksohtkvcqmksqr]gnaqqezdmnfbbnir +gmmabzkwsehkwjnevvd[uuzdntitdazeykwek]aebpajrwpyknqgx[kczhcuveeawmdiwljzl]ugwigmilwkczrcqnfo[piezzmfwnfdhnlbranp]qhremthdwdegacvptfe +tcqhlxasqmbwzuiuirp[kfqoequocdsfwqt]ikhdkpkmeezfzfyyilf[lrorfowgsqkflwauhu]zshoiccvfwohudsmdcr[zohspdmqcdvgagdknr]zabaqgsmrwkrtcuyct +fzanofpykognmio[ladtxyissyfrssobo]xqpwrgdmglgqhwawqok +hynipihszohrqwaezga[iqtpgjpngbwhpailzg]wfgimkpjrjnkroueh +lpmrkesaqdojkqrp[dcgsayoowgpiwam]arphrffqpcdntlxsza[ogneaqyckrvdcvqxbm]xlogrojsovrzfzjtjbd[qjoiyyatxkwsrvldp]gffgmieinxlfzpiej +jaeayfunulncspts[stghconfjhkqkrxncwi]kcnaqhyukuirsaeebp[vynwfnoxxxbqztj]gddvegwjuryfnkgkpqq[jnhmbdpvsxreqhoek]pgpikslhvbnmbxbkbc +lajiqiaxcxgpvsbu[bfetstragmoosbw]hzurjpxhecnadwosn[dquibbrojgurqiqd]aceccsnyrnfmcsd[quqxmzleqvspvsemjpn]noxrndgdrkffsdvh +bytcvwxuavajevmde[nhmjatzolmbdfgogup]qpildujniqlnfbmuf[gxpgorlbxpqfsoreuey]hcfyjmkoywueuivrio +amvudustnspjqsbpjp[wdudhbvvlgzbbbwlafg]kwpyjvuerzyzmzft +vwpklmfpzssyoifbb[bwtpxodxedpdsvgu]azathmhdnqkhbmrdlxn +iwzncixpjxypnmykke[wlhvfjbumhmtachoab]wtftbolwhpwnropnzv[zhfcmkbwizknymev]twrumqadwvsaciwbwoi[evodjtvrucrzgtwio]fmmbddkwwpaziycik +dkodbaotlfdaphwzbcc[ldzeemqiovyqjgs]qxibabdusgaistkru[usglloxgycyynmp]aaocvclsocababbzxeg[liaacgfxytuqudp]jvvqsypuoduyhvraak +bwzsacxgqkbjycgfw[dbnligvrmqscasutn]rbgybqqsgjvlonkut diff --git a/2016/aoc7/src/main.rs b/2016/aoc7/src/main.rs new file mode 100644 index 0000000..254f23d --- /dev/null +++ b/2016/aoc7/src/main.rs @@ -0,0 +1,95 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +fn main() { + let lines = read_file(); + let mut ssl_count = 0; + for line in lines { + let mut in_squares = false; + let mut char_buffer = [' '; 3]; + + let mut abas = Vec::new(); + let mut babs = Vec::new(); + + let mut chars = line.chars(); + char_buffer[0] = chars.next().unwrap(); + char_buffer[1] = chars.next().unwrap(); + char_buffer[2] = chars.next().unwrap(); + if is_aba(char_buffer) { + if in_squares { + babs.push(char_buffer); + } else { + abas.push(char_buffer); + } + } + + for c in chars { + match c { + '[' => {in_squares = true;}, + ']' => {in_squares = false;}, + _ => {} + } + char_buffer[0] = char_buffer[1]; + char_buffer[1] = char_buffer[2]; + char_buffer[2] = c; + + if is_aba(char_buffer) { + if in_squares { + babs.push(char_buffer); + } else { + abas.push(char_buffer); + } + } + } + + //println!("ABA {:?}", abas); + //println!("BAB {:?}", babs); + + let mut is_ssl = false; + for aba in &abas { + for bab in &babs { + is_ssl = is_ssl || correspond(aba.clone(), bab.clone()); + } + } + + //println!("Is SSL? {}", is_ssl); + + if is_ssl { + ssl_count += 1; + } + } + println!("SSL_count: {}", ssl_count); +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + +fn is_abba(char_buffer: [char; 4]) -> bool { + char_buffer[0] != char_buffer[1] && + char_buffer[0] == char_buffer[3] && + char_buffer[1] == char_buffer[2] && + char_buffer[0] != ']' && + char_buffer[1] != ']' && + char_buffer[0] != '[' && + char_buffer[1] != '[' +} + +fn is_aba(char_buffer: [char; 3]) -> bool { + char_buffer[0] != char_buffer[1] && + char_buffer[0] == char_buffer[2] && + char_buffer[0] != ']' && + char_buffer[1] != ']' && + char_buffer[0] != '[' && + char_buffer[1] != '[' +} + +fn correspond(aba: [char; 3], bab: [char; 3]) -> bool { + //assumes both follow the aba pattern, so [0] == [2] + aba[0] == bab[1] && aba[1] == bab[0] +} diff --git a/2016/aoc7/test_input.txt b/2016/aoc7/test_input.txt new file mode 100644 index 0000000..a675097 --- /dev/null +++ b/2016/aoc7/test_input.txt @@ -0,0 +1,4 @@ +aba[bab]xyz +xyx[xyx]xyx +aaa[kek]eke +zazbz[bzb]cdb diff --git a/2016/aoc8/Cargo.lock b/2016/aoc8/Cargo.lock new file mode 100644 index 0000000..dd33856 --- /dev/null +++ b/2016/aoc8/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc8" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc8/Cargo.toml b/2016/aoc8/Cargo.toml new file mode 100644 index 0000000..c49deb6 --- /dev/null +++ b/2016/aoc8/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc8" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc8/input.txt b/2016/aoc8/input.txt new file mode 100644 index 0000000..d827762 --- /dev/null +++ b/2016/aoc8/input.txt @@ -0,0 +1,194 @@ +rect 1x1 +rotate row y=0 by 7 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 3 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 2x1 +rotate row y=0 by 7 +rect 6x1 +rotate row y=0 by 3 +rect 2x1 +rotate row y=0 by 2 +rect 1x2 +rotate row y=1 by 10 +rotate row y=0 by 3 +rotate column x=0 by 1 +rect 2x1 +rotate column x=20 by 1 +rotate column x=15 by 1 +rotate column x=5 by 1 +rotate row y=1 by 5 +rotate row y=0 by 2 +rect 1x2 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate row y=2 by 15 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate row y=2 by 5 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate row y=2 by 10 +rotate row y=0 by 10 +rotate column x=8 by 1 +rotate column x=5 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate column x=27 by 1 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate column x=42 by 1 +rotate column x=40 by 1 +rotate column x=22 by 1 +rotate column x=17 by 1 +rotate column x=12 by 1 +rotate column x=7 by 1 +rotate column x=2 by 1 +rotate row y=3 by 10 +rotate row y=2 by 5 +rotate row y=1 by 3 +rotate row y=0 by 10 +rect 1x4 +rotate column x=37 by 2 +rotate row y=3 by 18 +rotate row y=2 by 30 +rotate row y=1 by 7 +rotate row y=0 by 2 +rotate column x=13 by 3 +rotate column x=12 by 1 +rotate column x=10 by 1 +rotate column x=7 by 1 +rotate column x=6 by 3 +rotate column x=5 by 1 +rotate column x=3 by 3 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 14x1 +rotate column x=38 by 3 +rotate row y=3 by 12 +rotate row y=2 by 10 +rotate row y=0 by 10 +rotate column x=7 by 1 +rotate column x=5 by 1 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate row y=4 by 20 +rotate row y=3 by 25 +rotate row y=2 by 10 +rotate row y=0 by 15 +rotate column x=12 by 1 +rotate column x=10 by 1 +rotate column x=8 by 3 +rotate column x=7 by 1 +rotate column x=5 by 1 +rotate column x=3 by 3 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 14x1 +rotate column x=34 by 1 +rotate row y=1 by 45 +rotate column x=47 by 1 +rotate column x=42 by 1 +rotate column x=19 by 1 +rotate column x=9 by 2 +rotate row y=4 by 7 +rotate row y=3 by 20 +rotate row y=0 by 7 +rotate column x=5 by 1 +rotate column x=3 by 1 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 6x1 +rotate row y=4 by 8 +rotate row y=3 by 5 +rotate row y=1 by 5 +rotate column x=5 by 1 +rotate column x=4 by 1 +rotate column x=3 by 2 +rotate column x=2 by 1 +rotate column x=1 by 3 +rotate column x=0 by 1 +rect 6x1 +rotate column x=36 by 3 +rotate column x=25 by 3 +rotate column x=18 by 3 +rotate column x=11 by 3 +rotate column x=3 by 4 +rotate row y=4 by 5 +rotate row y=3 by 5 +rotate row y=2 by 8 +rotate row y=1 by 8 +rotate row y=0 by 3 +rotate column x=3 by 4 +rotate column x=0 by 4 +rect 4x4 +rotate row y=4 by 10 +rotate row y=3 by 20 +rotate row y=1 by 10 +rotate row y=0 by 10 +rotate column x=8 by 1 +rotate column x=7 by 1 +rotate column x=6 by 1 +rotate column x=5 by 1 +rotate column x=3 by 1 +rotate column x=2 by 1 +rotate column x=1 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate row y=0 by 40 +rotate column x=44 by 1 +rotate column x=35 by 5 +rotate column x=18 by 5 +rotate column x=15 by 3 +rotate column x=10 by 5 +rotate row y=5 by 15 +rotate row y=4 by 10 +rotate row y=3 by 40 +rotate row y=2 by 20 +rotate row y=1 by 45 +rotate row y=0 by 35 +rotate column x=48 by 1 +rotate column x=47 by 5 +rotate column x=46 by 5 +rotate column x=45 by 1 +rotate column x=43 by 1 +rotate column x=40 by 1 +rotate column x=38 by 2 +rotate column x=37 by 3 +rotate column x=36 by 2 +rotate column x=32 by 2 +rotate column x=31 by 2 +rotate column x=28 by 1 +rotate column x=23 by 3 +rotate column x=22 by 3 +rotate column x=21 by 5 +rotate column x=20 by 1 +rotate column x=18 by 1 +rotate column x=17 by 3 +rotate column x=13 by 1 +rotate column x=10 by 1 +rotate column x=8 by 1 +rotate column x=7 by 5 +rotate column x=6 by 5 +rotate column x=5 by 1 +rotate column x=3 by 5 +rotate column x=2 by 5 +rotate column x=1 by 5 diff --git a/2016/aoc8/src/main.rs b/2016/aoc8/src/main.rs new file mode 100644 index 0000000..cb783ae --- /dev/null +++ b/2016/aoc8/src/main.rs @@ -0,0 +1,117 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + + +struct Screen { + data: [[bool; 6]; 50] +} + +impl Screen { + fn new() -> Screen { + Screen { + data: [[false; 6]; 50] + } + } + + fn rect(&mut self, a: usize, b: usize) { + for x in 0..a { + for y in 0..b { + self.data[x][y] = true; + } + } + } + + fn rotate_row(&mut self, y: usize, b: usize) { + let mut row_copy = [false; 50]; + for x in 0..50 { + row_copy[x] = self.data[x][y]; + } + for x in 0..50 { + self.data[x][y] = row_copy[(x+50-b)%50]; + } + } + + fn rotate_col(&mut self, x: usize, b: usize) { + let mut col_copy = [false; 6]; + for y in 0..6 { + col_copy[y] = self.data[x][y]; + } + for y in 0..6 { + self.data[x][y] = col_copy[(y+6-b)%6]; + } + } + + fn print(&self) { + for y in 0..6 { + for x in 0..50 { + print!("{}", if self.data[x][y] {'#'} else {'.'}); + } + println!(""); + } + } + + fn count_on(&self) -> u32 { + let mut count = 0; + for y in 0..6 { + for x in 0..50 { + if self.data[x][y] { + count += 1; + } + } + } + count + } +} + + +fn main() { + let lines = read_file(); + let mut screen = Screen::new(); + for line in lines { + if line.starts_with("rect") { + //rect 3x4 + let re = Regex::new(r"rect (\d+)x(\d+)").unwrap(); + let cap = re.captures(line.as_ref()).unwrap(); + println!("{} parsed as RECT. A={}, B={}", + line, + cap.at(1).unwrap_or(""), cap.at(2).unwrap_or("")); + screen.rect(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap()); + + } + else if line.starts_with("rotate row") { + //rotate row y=0 by 4 + let re = Regex::new(r"rotate row y=(\d+) by (\d+)").unwrap(); + let cap = re.captures(line.as_ref()).unwrap(); + println!("{} parsed as ROTATE ROW. A={}, B={}", + line, + cap.at(1).unwrap_or(""), cap.at(2).unwrap_or("")); + screen.rotate_row(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap()); + } + else if line.starts_with("rotate column") { + //rotate column x=1 by 1 + let re = Regex::new(r"rotate column x=(\d+) by (\d+)").unwrap(); + let cap = re.captures(line.as_ref()).unwrap(); + println!("{} parsed as ROTATE COLUMN. A={}, B={}", + line, + cap.at(1).unwrap_or(""), cap.at(2).unwrap_or("")); + screen.rotate_col(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap()); + + } + + screen.print(); + } + + println!("On: {}", screen.count_on()); +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc9/Cargo.lock b/2016/aoc9/Cargo.lock new file mode 100644 index 0000000..00bd2f7 --- /dev/null +++ b/2016/aoc9/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc9" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc9/Cargo.toml b/2016/aoc9/Cargo.toml new file mode 100644 index 0000000..de293f1 --- /dev/null +++ b/2016/aoc9/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc9" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc9/input.txt b/2016/aoc9/input.txt new file mode 100644 index 0000000..6692559 --- /dev/null +++ b/2016/aoc9/input.txt @@ -0,0 +1 @@ +(6x6)AFPLBX(2x3)ZE(53x13)(4x7)ZGQO(2x4)NJ(1x8)M(24x11)(18x7)HMLOASMJNGZHMCEVEX(11x2)(6x6)TRDPQX(157x12)(60x12)(2x3)SB(7x1)FBSAUFK(4x1)NMZK(10x2)RLIIHFEKRY(10x6)GMDUIQDOZJ(71x8)(1x11)N(19x5)EHNAZSRTFYXOZNFTOOQ(6x4)XKARLK(13x1)IRATYZQMJXHAH(4x8)VFUJ(8x6)AOOEHHBF(27x6)(11x9)(5x15)KTTHB(5x6)AELEZ(17x10)AOGNMNTGDJDYEMMEH(7x8)BOIOHRF(6x2)ZKXONV(172x8)(6x5)(1x8)V(17x6)WEVFHKUDETBOZVKIO(2x14)ZI(75x9)(5x5)EXKDZ(4x4)BOGK(10x5)SXYSSOACJR(3x15)FHO(24x10)YBZPMZIPUCEIYNGYAUPVFOKB(43x3)(13x2)MERJWKSXBIEKP(2x4)CR(4x5)DFDQ(2x15)ZM(89x5)(43x6)(16x8)RIGCVPPOSBRJSJCB(2x9)XI(1x11)M(2x8)QT(8x6)(3x8)XVC(20x15)SBWQFWQWPQHXZXDWSXIR(4393x15)(25x5)TEAACSAHWYWPYJZEPDIHUMIPB(1026x1)(1x7)K(768x7)(388x3)(113x9)(70x11)(12x10)HDEPKSMDLHAX(2x5)RU(29x13)BIOENKVYNENIFNCSWNZIJGCZXBUVF(3x1)JRO(30x2)(11x9)NCTAXULXPBY(1x5)K(2x7)WQ(76x10)(13x7)UDCLRUKNLOAEL(17x10)(11x8)TLRICJOXJPO(26x13)HBPYKHNJRGJHSXUFGJAAHODUDG(177x13)(58x14)(17x15)MWIVHZEKJKLDWPYEN(7x5)MLNEAXO(1x2)F(10x2)GMUPKWMFFU(51x13)(2x12)TG(29x1)CJZOBLWTYDISRYKVWHJKRDDNHSABE(3x5)VDV(36x7)(7x2)JOQSKQM(10x4)SSQKRCQCYQ(3x3)HRU(7x6)(2x7)CG(271x13)(14x12)TPDOYGCYWKAOQU(223x5)(15x1)WKAGRMIPECLUUPH(68x2)(10x15)VRFPOQRGAW(5x6)MEVXZ(11x13)INACCUVBTIP(1x12)M(10x5)ECIALUKBGQ(29x5)LDVPFVNKSBWVZCJUOLIJZHYNOXLHZ(42x9)(11x14)HKDQCRYGEWD(3x5)DDV(10x8)KRRTDJEMKB(39x8)(13x8)IWLYAVYPLTFBF(14x8)PMPTEZESXEQSYM(13x12)SYBXETSKQLUYU(12x5)(7x3)(2x4)FH(69x10)(63x7)(6x4)RVKPXJ(46x1)(19x14)YCVJOBRSCSVKJJWUBJI(4x6)VUOI(5x15)WIFPK(237x15)(230x7)(51x15)(45x5)(9x11)BUZLRCBIY(2x5)ZZ(8x6)DNEOUHUT(5x2)QFOTV(164x11)(30x14)YOCHTVEXSZYELWOMGCXOISALUWCWTJ(8x15)QIINZKAI(1x1)F(88x5)(8x1)SIZRWUDB(49x7)AWSFCZFEGKBUKONNMQQSIGHMKQFAMUEBLTQFGEZLMUTNWXOCH(1x12)T(8x7)ZOTXRWXA(7x15)HGGWNTM(1484x6)(691x6)(53x6)(2x14)IB(39x3)ASFVSLNNXYBFSSOPECXZOEVPRIGJCTMLWCFSVTZ(72x4)(66x1)(38x7)(17x7)DXTENHWTOXYZMQFLF(2x2)OG(3x6)ATG(16x1)IBSUFIGHTLDMGRZE(9x5)DKNZYEYGJ(288x11)(165x9)(16x4)MDBGELYWXPUTRCEZ(14x14)PHSIPUMMXOMBWF(57x9)(13x13)WIVFVHXPHBTWO(4x6)XSWT(9x5)CPSCDHORP(1x2)M(3x8)JJE(12x4)ZADOSQULBZRT(34x10)EUJRPXWESNMXYDAUHFPLCLOYZCUKOSDPTZ(108x12)(10x13)CJVGTNJFUE(37x10)LDQKJRVQQKTVRBMNRIFDMZBJOQZKJSBZPWWLQ(24x5)FXOCHIJNODJUEGYPZYTIADPF(11x4)FUNCENOZTTS(237x7)(106x6)(9x6)SBSWNIMDC(58x11)(6x8)VJZVTK(5x2)QRAXJ(3x2)KAC(9x11)EWJHYTQXW(9x2)TSWWFYDYC(21x2)EXPZWOLLWOALTQGUZXTUS(117x2)(6x8)TLGPET(3x7)GBW(39x6)(32x10)VGSULYHYHHFVDEIQYAXVUGNDVDCDGANM(46x13)(14x6)VYXTECTXLBJFWZ(12x6)IFRBYZIXFTOC(2x14)HF(14x7)(8x10)AFPWFLXJ(726x6)(160x5)(45x13)(1x4)K(8x2)(2x14)WF(19x11)EDIZTWWQBGFLFXEWHFA(17x10)WIGPDKRTBSOJTFXKY(15x2)ADLZSCNVATBMRBV(34x12)IVGRGESBMMRDBWKCIDCLYWVXANHCWQQEQL(15x12)WGFAYDKOFYOZWHU(464x6)(42x14)(35x12)(5x12)TVUTT(2x13)RK(2x10)RC(3x1)LXD(20x1)(14x6)OJOAQUIEOIUVXE(152x6)(16x1)IIDXUSCZEOEHDVIP(98x6)(18x4)AFGQQZEGERPRXYXDTI(15x13)UPZDHXFYQRGBNBZ(45x10)GEJVEKLGJBCATXONOSOJWLLZESRRGSLNTRDKDKJKNAOYC(20x4)SHUJGLTDVLVMUBGUYCCQ(202x2)(29x4)(23x9)ZNKNMTBUBYEMBVCDGNHMZRB(123x6)(8x8)QCPLTVYD(2x5)YQ(13x3)XFKTLSHCQAPID(30x1)DRTIAMQDRSIQQIZKAXMVZDLCRHYVWS(41x11)SLVGMXLAUIETLVILQABUODBTBFZZHOSFRUJKLQPSE(21x8)(4x9)EXQY(6x13)QAFDCI(4x10)XYII(15x5)VZTRXIMIYNGDQKZ(75x4)(6x11)RFOKPH(2x15)ZH(10x15)ZDWQPCMXCQ(32x7)DJRJDFDSGKZBQZMNIKCOLHWSLYCQXEKH(1x14)H(27x2)(21x3)GCUQEXKSVPNXNOTUOZBWR(1828x7)(1107x13)(550x1)(177x11)(30x15)(1x13)T(3x1)MTN(9x14)EDQQAMGTE(39x4)(14x2)NPINNXFQEZICDQ(13x3)QYHEGLYNFPMMQ(88x13)(22x13)GLVPCEBDDABCPDHXXXZDTT(1x3)A(1x3)J(40x14)LPRDKSIGCUXWPZIPZKUGMNGLLGQHFDNXLHRNVPEM(14x7)TPYKUDKFRLVPPF(135x10)(10x7)GWRRITBPFN(5x5)ECPKJ(50x6)(4x10)DORU(1x12)S(9x3)YQFICKCXH(7x3)ZJFMLPD(2x9)HK(3x7)HWQ(39x6)NPYOZFXSQJMVHMGSMHMKBOQLXAUVSZZRUGFOIUL(122x13)(7x5)WQPCNYP(35x14)(21x4)UIBUUSAWFXCJOAAOQYWKD(3x3)VKI(17x11)YCWPDYLDDKIDATXKY(38x4)(4x2)FPPY(16x8)ETEICDHDZBPINNTA(2x4)RR(66x3)(59x15)(9x10)WLRKNQFPX(4x3)OCJF(8x1)QSOOLMPP(4x6)DKRV(8x5)PBRRNJTD(377x10)(88x7)(81x11)(17x8)RPFNVFZNWFZCEDXYR(3x3)DMM(6x1)ZOBJHV(1x10)S(26x3)MLOILGCEQPKNQPYBABPWRMGTCU(13x2)KNRNZAANDYZVG(2x15)UR(1x5)Y(242x12)(144x11)(8x6)HUOOXYEN(35x2)HGPTAFHSMKKPDMGARWVNYVCJWMZETRIJNXM(4x4)TJDP(28x5)UKOZMKRXJLSBZJRRVABSWSIEIDMC(40x14)HCTILCVYQXWNUZHZAZGCXKXRZDHFNTKISPMUOLAD(8x6)(3x9)NXB(44x15)(3x13)GZF(9x7)XCHQMMOXC(2x8)EO(8x12)GTHAWKXZ(3x4)TFJ(12x7)JOAKSXHVNNNX(157x14)(150x8)(11x13)(5x15)GVWWA(125x1)(14x12)OALPJNHTLRQGRJ(24x15)EEWRKUJFKQFVCFVVGRNXRNMO(23x12)SWMZOIWGOVLKIRKBHSIAYFY(16x6)VQBYRVNJQKQZUXYC(15x8)SRQFUMLAWWDVVCY(166x3)(8x4)ROOZHNPS(1x5)G(140x3)(5x11)NNJCA(122x8)(12x10)ACNODOEIPNFS(36x7)(2x3)HI(9x12)WVTUTLVXH(1x14)L(1x11)R(28x13)TFKQTKVMFXBNHUCUGXXBKSPBSYOI(2x8)RL(13x5)(8x5)BMGHNIWS(80x2)(4x5)CLIN(64x13)(12x7)PUIYXOSOYXRH(23x9)(1x14)J(1x10)L(3x12)BRJ(11x3)(5x12)LIYCT(446x9)(1x14)A(128x1)(86x9)(15x1)XKXMQLFUXTGSIUI(36x8)UUZAZBICEWZOHBKMLKFMOPRGDNIIXYZIRYBO(16x10)(3x1)DCZ(2x10)RG(15x1)TVCSLSBSQOEZORE(9x12)(4x5)FOWX(67x7)(27x3)(20x11)QHEAAUEGZRHVTYXMHWGD(27x14)(1x6)C(14x15)EHUGFRTEFCLPYB(223x13)(192x1)(27x13)(8x1)ECDZKCJY(8x12)HNTSWDYP(14x1)SMPGAHCDMTHRPF(43x6)(2x9)QY(3x1)NGD(7x11)QBFWGLX(3x4)JCI(1x10)L(31x2)(3x10)NIH(16x2)SFTKKDPDSTPUVOQA(46x3)(1x11)N(19x13)RGTNKUTACWUHOBKHPAF(2x9)JH(1x5)D(18x5)ELEQYVKHCZWCPDKGET(4430x14)(6x6)SGLJXG(1303x14)(8x3)PBGTOJDF(472x9)(1x14)U(299x2)(71x12)(2x14)UZ(13x11)(7x13)OYMYFOR(22x12)MLXGMMRGPSASXFVDRWWYGU(9x5)(3x14)NFY(96x1)(22x8)XALEFGLORBLTMHIWSARRDS(24x12)(17x14)QARJVLVCJVIJEJOLE(8x13)(3x8)HPO(16x14)UMCNXKMHFCKLLSTQ(96x11)(3x8)IYF(82x5)(3x1)OBQ(30x14)UJYENTNVNGKUFYSGTPROKDUVXVAAAP(18x14)OFJNLBOUNGILMQMTBO(7x2)UJJJZAX(3x2)JTL(2x10)YM(112x1)(83x7)(50x6)(4x11)TSPK(2x2)AU(6x15)XSSYWL(3x12)DCS(6x13)OIDFMJ(1x14)N(13x12)EEZZPERSDPKOT(17x7)SBEJBRDQAVFLLCNUW(3x11)ZGN(25x3)(18x15)CSVBGEAPPCXHRXBYIK(1x4)M(664x4)(337x14)(99x5)(12x11)QQXQUTFBUNIV(7x7)ALTZFYQ(15x4)VBFROTJMHRPGBJW(40x12)(23x8)UTBYEFQMPFIEXVVLZXVDWWJ(6x2)BMJTZF(4x3)NRUY(6x12)TKXPAM(62x6)(3x15)RQS(1x5)K(41x8)(12x9)NJRYDQRLHCNB(17x7)AEPPXIYSGQCVSPVMF(135x14)(72x7)(2x9)FB(4x10)OGAV(26x6)QXHCWFQUDQKXVJJGIZDZLTBIKY(3x10)CXD(9x5)IDBZUGYPE(14x2)KYYCJLAYHWQQVD(30x13)(7x11)YXUUJZQ(11x3)YRHZXTLPZJF(311x14)(49x6)(42x12)BLCUHNHXNFKMUKOHBMVPXMURVUESFYMANQKXIQEVOG(79x1)(73x8)(5x3)JGNSI(20x11)DVUPOLXLRCUFVJYHXWJV(15x2)OPIKHDJPHQPXYYX(9x10)FWYSCUOMU(164x1)(91x13)(6x13)UPDAGP(14x5)LIKFHUVDMDQAAK(31x13)FEJFKXKSSAJYNJAKXKRQPUZMHNTBTGI(7x7)OLHMUKA(4x7)EGNE(59x12)(4x7)JSRJ(4x7)JCES(15x6)QTFXSXGYBARIWUP(8x6)LQDBINXU(1x12)H(127x1)(12x5)RHGPFMZRPSFB(4x11)URMZ(93x2)(87x7)(75x9)(11x14)NXGIGQVUUMV(1x6)N(38x3)IUHTFEASJJFMMTHJFEQAAYMSIUUGNMTUUQSOCN(2x7)CN(1x8)B(894x11)(876x12)(587x11)(2x10)BQ(178x12)(96x3)(14x14)BLIWCROJXSLVTK(8x15)KIYKJSRQ(54x15)KTAQJDJHFWAVGGYOZUWYLIBCBQIXHICNALPOGMROGJLDFEAYDTVTNR(2x6)NS(11x1)JKXMXJTBIDP(29x4)(7x13)EBVJEZD(10x3)XRDYMAZSBY(10x10)OIRMTHQLNG(132x2)(31x11)YAGJSHBUQNJREUVAPLXJGSPVFNQVGBD(54x12)(1x12)Y(5x6)UPPMP(9x7)HAVOGCOLF(10x6)TUKIFLCHLV(2x1)YJ(2x11)JJ(19x9)(1x5)M(8x4)UEZWDQZC(45x4)(39x9)(6x9)UWXBMZ(2x12)JJ(3x2)KDB(7x7)FLZMQSC(196x9)(26x7)YUUQIHKCXYRRGSMXGLWMSSAIAP(1x2)W(3x5)XGY(115x5)(8x13)YUGCSANY(10x12)ZVBPLBCJQK(9x7)RGODHRSNC(54x13)KFVTGSWIAKERKDISXRYZDZJEPXSKGAVZKGIKWRSSOTYSYRPEBHOWRC(4x5)PSBS(21x10)(5x7)PKBSK(6x1)CISVQM(241x6)(39x5)(32x14)XIRRYTZBERAKPMGIMOLYNEODGWELVAJP(113x15)(5x10)USAHI(2x13)ZP(88x4)(12x9)WBDEFGCZAMPM(8x11)DZMSAIVZ(3x15)XCK(23x5)LUKNXCCEPEPKSODMGEZJDYY(11x12)CJTACNNPKPZ(61x12)(3x7)YRN(30x7)GCJRMCZOJFMKFZJAJTZOMYXNWIFVSE(11x3)(5x13)BZFIF(2x2)GO(2x15)EM(18x10)YIGMSZEGBPPIMGKUHO(4x14)FUKK(1851x10)(164x11)(117x3)(109x10)(56x15)(3x13)MSN(11x15)VPUOKCEWGFX(7x7)UKXWCWX(2x11)QB(3x13)QFE(12x13)(7x1)WTMANLW(21x5)SDTRPSRMRYUZKIZIMCYLO(33x11)(16x4)(4x8)ASQN(1x10)M(6x1)(1x5)F(1006x3)(21x13)(15x4)WHEZYMBJXTBYCZG(462x9)(227x1)(33x11)(2x10)VR(11x8)PLIFVKRPUWO(3x1)WFI(53x4)(5x11)GUHAR(9x6)OTBCHHMTJ(4x7)JJQH(5x8)TTUUW(4x6)GRAX(1x10)I(27x14)(12x9)TPXYVLAYHHUB(4x3)WNYV(81x3)(20x3)YXDCPPYIDNNAQJMWXFFM(5x8)FZLRN(5x7)BKMSG(12x4)ZVRYPOOSYOMA(11x3)UGUWOKXVITR(220x15)(8x7)IRFZJLCM(34x4)(8x7)KIQHQWLZ(8x1)RTGQVPLE(3x8)RVU(60x14)(3x12)UJP(8x14)NYDICRGG(23x8)CHISDWBISOZYDWRNEBRWDSJ(3x6)EJG(14x12)PIWNBDAEREATVW(73x9)(14x3)IEPNRGKUCCEERW(4x7)FCWC(3x14)EXU(29x1)CDLSEHSCOEUZKWARMGBPXCHYMVQFP(188x3)(7x6)YNYVYUC(43x10)(15x11)YHQHLIEPOVAHHJQ(15x1)(2x12)EC(2x5)KR(113x1)(8x8)ZJHMLYAU(74x12)(5x3)CQZMJ(4x2)QGWN(3x9)LAE(7x1)OCFJMDJ(29x8)FIWUGBREHYRACQYOVVQJBDFHDGMEQ(13x4)GRPUVTXRVSHVM(1x5)F(307x3)(225x10)(47x6)(17x13)VURYAUGWWOIHHQJDD(8x3)WPVVCPUT(5x5)BFBOB(59x1)(8x3)UWPCOMZH(3x13)NRQ(4x13)WUJV(12x5)FUSBMTPOWDTX(3x12)RXT(45x8)(16x6)MTVMZPSDFMLDYLLD(16x14)JUHUHFNBYHGFWLVG(50x2)(2x9)GR(4x6)URSQ(27x10)LAGGDJBKBLVLPJVVDEZCXEJLFBJ(67x14)(7x15)OMHMPKM(2x7)BH(9x14)LDAFCOKEL(25x12)(5x1)QMTQH(1x15)I(2x15)RV(5x1)KKFYZ(639x15)(295x4)(8x10)SLSXUAJJ(160x7)(5x14)ICLSB(86x3)(6x7)CUYULZ(24x14)RZUPMSJMKASMGYUKSAZQKMBC(23x7)NINZWUFKIZZNKOZUAQOROBG(9x15)YJKHZIZFP(2x7)HC(30x5)(8x2)OBZCEUCF(10x10)LNGPRAITSF(8x11)(2x14)NG(106x14)(24x9)ACQDRKVEOEDULYMLYBGOMSIJ(19x2)UBUHEYIJEGFMCZSTDDO(35x4)HFNTQACPTELDNRWVUVKNKPBVIJMZWAZEOKS(5x3)RSIAK(330x8)(179x6)(34x8)(13x1)CCRZOVJLZOBBO(3x14)WPC(1x6)L(15x13)VAVFETWJRRFZFPE(11x13)VKJLGKAOCUC(92x12)(20x10)MRTDKUJPLGPXMTVLRSUF(2x6)QZ(11x15)MHFLVOFUNDC(25x11)SONLCWNGCZFGMSXYJXSFPVGVY(3x2)QRI(136x15)(45x13)(6x4)QQSQCM(1x9)U(7x4)VIDEIXN(10x3)WFRKVWNLJM(50x7)(13x4)OYFDFFFLITCIR(16x6)CIRLRKXBHVHNUPFZ(3x15)GRD(11x3)FMDUOABWGPB(5x15)EWSOH(3x4)JYH(338x8)(331x5)(324x1)(194x3)(2x4)ZF(48x12)(3x9)JVP(4x2)BWLT(24x15)KPNIHTTPTNNAHSSSDLAKDDNT(6x3)SZJQKG(64x15)(19x14)RSMBLFUAZBGBCJPQDES(5x11)KLUTW(1x9)J(5x13)UYNTL(5x8)NVICZ(43x11)(20x6)HURCGFJBVQOKDECLQELO(3x4)XID(4x9)WOCX(38x5)(2x8)KV(25x2)(18x13)SEYOWGYPRRKBHNVVGI(72x14)(18x10)RXBCYLJENTUPCKCIDO(22x8)(5x5)ZPUYC(7x9)LXRWCDN(2x3)XD(7x4)DEKJLWL(1794x8)(1786x4)(297x10)(289x14)(162x10)(78x9)(1x9)T(28x11)WCIFRVQWPNOEEBPKGYPFCOTNMRAP(12x7)IYTEKBFTEZIX(4x6)ALRX(5x2)QSCXQ(72x4)(25x8)OHCTVXZIEWNMEZBVFKTLIMGQW(4x13)XEBD(6x13)UZZITD(12x13)QPGHTTJTMMFJ(103x9)(24x4)FOJJCXKNPHEGIRYIFBLDVUES(66x14)(15x14)AJEUHOVVHZVHGAV(5x9)CVIBX(15x8)WIHEKYSJZCLABUK(8x5)UYQLGBEY(3x14)QAR(690x4)(14x3)KRIBLTDDRJSFGY(4x9)MMCG(338x15)(15x4)(4x3)VIER(1x7)J(76x14)(8x6)VNTBZCVR(47x6)(24x3)HDWQXSRQWIFPKUSRADRBXAPD(11x8)GSSDBTQZINR(5x3)TWHSS(74x2)(5x3)DMUEM(4x2)FLBE(48x14)(10x8)YLSBTQPTJJ(2x10)ZP(8x7)JFXOKRXJ(5x11)WDHLN(82x2)(7x12)IEXUOMG(8x11)PVPIWSQY(36x7)NXNEYNWWPODZRJBIQFLDLZVSEDRPRWZUUXQS(7x11)WWTZGJK(59x11)(52x11)(17x14)QMXUKMPFATJEJQASH(22x6)WEXAZYBXEIIIWKEYRNINYH(246x5)(7x14)XMWZOQI(225x13)(9x6)(4x4)RMSV(35x9)(12x15)FSEJCGTVXEUT(1x7)L(5x5)IALLO(83x2)(5x5)HEUVE(26x8)BGAOGWCKQJVESARPQNTDIKKOKN(34x12)DGCKPWQBLZNXDLLYIWKRAOVPCXIIEWLSMN(75x6)(6x6)RHDULO(16x11)CRXVYYDZXJFFSPOR(5x14)OXTUY(24x4)UHCHXFDOONZXAZTTBFSINOEG(55x14)(12x12)ZKOOCWQTVQUS(19x10)WNHJGQATSCBTMLIVOYB(5x1)ZHQEA(710x7)(2x14)FD(170x9)(162x11)(11x10)MJTMRWMKRNT(28x10)(21x14)MJZQATVTRTWDEQNSZOXKK(59x15)(1x10)K(16x6)AVTYFAJYHSKETUYI(1x15)M(4x15)CDYM(7x15)TGWTHWL(29x11)HWMXLXCZVSSUPDBTIXDEGPNJJZNGX(2x6)KM(487x11)(3x14)UIF(84x4)(5x14)MDENR(66x12)(12x11)WQEVOLYPOSEK(30x5)LKBXTFFEOHNEJHOHKMMUKSDISVVQZE(5x10)PFZCP(197x12)(24x15)JLPYUIJVFQRWOACTFMQPLYHI(55x3)(14x1)KUTCZEZNWSISPL(8x7)YNZXWQMY(6x1)EZVHCC(6x3)AEVYOO(2x6)DE(68x6)(13x3)KRBXMIIHZERUV(3x2)TLR(35x4)LWCSHQCLMZAPMNSXKWCGVGDTKWUQAIWWLWU(17x11)FWYFWEMLVLQQGCJLJ(176x8)(4x2)ICOL(63x7)(37x14)SQVVGHBVLPVSLAYFZBLEGOKEHFSXSVEJOSRXO(2x2)IF(6x10)APYCKZ(73x15)(20x3)EARRAATGOHPONSTXOUVI(20x4)GBRNRAGYDCTGEODHJDUB(1x2)Z(1x15)R(3x4)QBQ(1x2)M(7x6)KJQAHCJ(24x6)UHLVTEERAYIUBGMUKOJFHRUJ(36x7)(30x2)(1x14)H(17x1)BSZIJHGVILXXURQDI(18x12)PSFBREKMLZRFFFRLZG(236x1)(52x7)(2x12)WK(16x10)CRNLMDQWZECYSFOT(3x10)ISI(6x13)FPJKZE(7x9)XOCUXIU(125x5)(105x5)LPOXYLAWSIIRQDNUWVHOLUDYOZSCFNCORKVFMSYIMMNCMNSOUGJHSBYKITYGFWUYHBJCQELUIMYXAFRFIAOSXSOIMGYEPJFPWQXSZYCDD(8x8)ILXIPPGD(7x13)TYZVRQS(14x12)(3x3)WXE(1x9)Q(40x10)(34x7)(2x2)AZ(10x15)UPJJICKDLA(5x6)CHXZV(153x7)(13x8)LCBGVTVMPVNMJ(30x8)(6x8)KXMWXG(6x1)DJRTOU(2x15)FW(79x10)(13x9)RIFNFQDLAWBSQ(3x2)ERQ(19x1)TTHLBYCOPMTXIIDSBXX(9x14)SBPSPMMCK(7x8)MKNEMLA(6x11)YPDDWG(220x9)(65x3)(2x6)LT(13x3)XFOPJCJBLRXYH(8x5)BKPDBCLE(6x2)UNKPOA(9x15)THYQVMZUG(50x15)(9x11)AAXOWDYIN(12x14)IWTCMNVXNJAX(10x4)JPSIYYKGVJ(86x8)(29x10)ORMIZOTUMSVKNEJDCQDQHESLAQKOF(8x14)SHFMBHHV(1x9)L(14x2)QQHGYTMVZAZRDK(5x7)COVRS(51x2)(11x2)ZDTVQIWFFND(5x8)RQTFS(1x9)B(5x9)SINCP(3x3)ACU diff --git a/2016/aoc9/src/main.rs b/2016/aoc9/src/main.rs new file mode 100644 index 0000000..622819c --- /dev/null +++ b/2016/aoc9/src/main.rs @@ -0,0 +1,143 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +#[derive(Debug, Clone, Copy)] +struct Marker { + take: usize, + repeat: usize +} +#[derive(Debug, Clone, Copy)] +enum Token { + Marker(usize, Marker), + Literal(usize) +} + +impl Token { + fn size(self) -> usize { + match self { + Token::Marker(x, _) => x, + Token::Literal(x) => x + } + } + + fn is_marker(self) -> bool { + match self { + Token::Marker(_, _) => true, + Token::Literal(_) => false + } + } + + fn unwrap_marker(self) -> Marker { + match self { + Token::Marker(_, marker) => marker, + Token::Literal(_) => panic!("Bad unwrap marker") + } + } +} + +fn main() { + let mut tokens = parse(read_file()); + tokens.reverse(); + let mut length: u64 = 0; + + while tokens.len() > 0 { + let next = tokens.pop().unwrap(); + + if next.is_marker() { + let marker = next.unwrap_marker(); + let mut used_take = 0; + + let mut tokens_to_repeat = Vec::new(); + while used_take < marker.take { + let next_token = tokens.pop().unwrap(); + if used_take + next_token.size() <= marker.take { + tokens_to_repeat.push(next_token); + } + else { + assert!(!next_token.is_marker()); + //assume splits only happen on literals + tokens_to_repeat.push(Token::Literal(marker.take - used_take)); + tokens.push(Token::Literal(next_token.size() - marker.take + used_take)); + } + used_take += next_token.size(); + } + + tokens_to_repeat.reverse(); + for _ in 0..marker.repeat { + for &token in &tokens_to_repeat { + tokens.push(token); + } + } + } else { + length += next.size() as u64; + } + } + println!("Length: {}", length); +} + +fn parse(text: String) -> Vec<Token> { + let mut tokens = Vec::new(); + let mut chars = text.chars(); + let mut current_char = chars.next(); + while current_char.is_some() { + let c = current_char.unwrap(); + if c == '(' { + let mut char_count = 1; + let mut take_str = String::new(); + let mut repeat_str = String::new(); + loop { + let n = chars.next().unwrap(); + char_count += 1; + if n == 'x' { break; } + take_str.push(n); + } + loop { + let n = chars.next().unwrap(); + char_count += 1; + if n == ')' { break; } + repeat_str.push(n); + } + + let take: usize = take_str.parse().expect(format!("Tried to parse take {}", take_str).as_ref()); + let repeat: usize = repeat_str.parse().expect(format!("Tried to parse repeat {}", repeat_str).as_ref()); + tokens.push(Token::Marker(char_count , Marker{take: take, repeat:repeat})); + } else { + assert!(c != '(' && c != ')'); + tokens.push(Token::Literal(1)); + } + + current_char = chars.next(); + } + collapse_literals(&mut tokens); + + tokens +} + +fn collapse_literals(tokens: &mut Vec<Token>) { + let mut i = 0; + while i < tokens.len()-1 { + match (tokens[i], tokens[i+1]) { + (Token::Literal(l1), Token::Literal(l2)) => { + tokens[i] = Token::Literal(l1+l2); + tokens.remove(i+1); + }, + _ => { + i += 1; + } + } + } +} + +fn read_file() -> String { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .next() + .unwrap() + .trim() + .to_string() + +// "(25x3)(3x3)ABC(2x3)XY(5x2)PQRSTX(18x9)(3x2)TWO(5x7)SEVEN".to_string() +} diff --git a/2017/Cargo.toml b/2017/Cargo.toml new file mode 100644 index 0000000..d84b5bd --- /dev/null +++ b/2017/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "advent_of_code_2017" +version = "0.1.0" +authors = ["Justin Worthe <justin@worthe-it.co.za>"] + +[dependencies] +regex = "0.2.3" +lazy_static = "1.0.0" +structopt = "0.1.6" +structopt-derive = "0.1.6"
\ No newline at end of file diff --git a/2017/LICENSE b/2017/LICENSE new file mode 100644 index 0000000..026d0f3 --- /dev/null +++ b/2017/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Justin Worthe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/2017/inputs/day_1.txt b/2017/inputs/day_1.txt new file mode 100644 index 0000000..7a4debd --- /dev/null +++ b/2017/inputs/day_1.txt @@ -0,0 +1 @@ +21752342814933766938172121674976879111362417653261522357855816893656462449168377359285244818489723869987861247912289729579296691684761143544956991583942215236568961875851755854977946147178746464675227699149925227227137557479769948569788884399379821111382536722699575759474473273939756348992714667963596189765734743169489599125771443348193383566159843593541134749392569865481578359825844394454173219857919349341442148282229689541561169341622222354651397342928678496478671339383923769856425795211323673389723181967933933832711545885653952861879231537976292517866354812943192728263269524735698423336673735158993853556148833861327959262254756647827739145283577793481526768156921138428318939361859721778556264519643435871835744859243167227889562738712953651128317624673985213525897522378259178625416722152155728615936587369515254936828668564857283226439881266871945998796488472249182538883354186573925183152663862683995449671663285775397453876262722567452435914777363522817594741946638986571793655889466419895996924122915777224499481496837343194149123735355268151941712871245863553836953349887831949788869852929147849489265325843934669999391846286319268686789372513976522282587526866148166337215961493536262851512218794139272361292811529888161198799297966893366553115353639298256788819385272471187213579185523521341651117947676785341146235441411441813242514813227821843819424619974979886871646621918865274574538951761567855845681272364646138584716333599843835167373525248547542442942583122624534494442516259616973235858469131159773167334953658673271599748942956981954699444528689628848694446818825465485122869742839711471129862632128635779658365756362863627135983617613332849756371986376967117549251566281992964573929655589313871976556784849231916513831538254812347116253949818633527185174221565279775766742262687713114114344843534958833372634182176866315441583887177759222598853735114191874277711434653854816841589229914164681364497429324463193669337827467661773833517841763711156376147664749175267212562321567728575765844893232718971471289841171642868948852136818661741238178676857381583155547755219837116125995361896562498721571413742 diff --git a/2017/inputs/day_10.txt b/2017/inputs/day_10.txt new file mode 100644 index 0000000..6544f8c --- /dev/null +++ b/2017/inputs/day_10.txt @@ -0,0 +1 @@ +187,254,0,81,169,219,1,190,19,102,255,56,46,32,2,216 diff --git a/2017/inputs/day_11.txt b/2017/inputs/day_11.txt new file mode 100644 index 0000000..c31c097 --- /dev/null +++ b/2017/inputs/day_11.txt @@ -0,0 +1 @@ +s,s,sw,se,s,nw,nw,ne,n,ne,n,n,n,n,n,n,n,ne,n,ne,ne,se,ne,n,ne,n,n,ne,se,sw,se,s,se,se,se,se,s,se,se,s,se,se,nw,se,se,se,s,s,nw,s,s,se,nw,s,n,s,nw,s,s,s,s,s,s,s,s,s,s,s,sw,s,s,s,s,s,sw,sw,s,sw,s,nw,sw,sw,s,sw,ne,sw,sw,s,se,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,se,sw,nw,nw,sw,sw,sw,s,sw,nw,se,nw,se,nw,sw,nw,nw,se,n,sw,s,s,s,nw,sw,sw,nw,se,nw,sw,sw,sw,nw,sw,sw,nw,nw,nw,nw,ne,n,nw,nw,ne,nw,nw,nw,nw,nw,se,nw,nw,n,nw,nw,nw,sw,n,nw,nw,nw,nw,n,s,nw,ne,nw,s,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,s,sw,n,n,nw,nw,n,n,nw,nw,n,nw,n,n,nw,n,s,n,nw,ne,n,nw,n,nw,n,n,n,n,se,s,n,s,n,s,n,n,n,nw,n,s,n,n,n,n,n,ne,n,n,n,n,s,n,n,n,n,sw,n,n,n,nw,n,n,n,n,nw,se,n,ne,n,n,ne,n,ne,ne,n,n,n,n,ne,n,n,nw,n,n,n,n,ne,se,se,ne,ne,ne,n,ne,n,ne,ne,nw,ne,ne,n,n,n,ne,ne,ne,n,ne,nw,n,s,ne,ne,ne,ne,ne,n,s,ne,ne,ne,n,ne,ne,ne,sw,ne,ne,ne,s,n,ne,ne,n,ne,ne,ne,ne,ne,se,ne,ne,se,ne,ne,ne,ne,se,ne,se,ne,nw,nw,sw,s,n,ne,ne,ne,ne,ne,sw,ne,ne,ne,sw,ne,ne,ne,ne,sw,se,ne,ne,ne,ne,se,s,se,s,nw,ne,ne,n,se,ne,ne,ne,sw,ne,s,s,nw,se,nw,ne,s,ne,se,ne,n,ne,n,s,n,ne,ne,s,ne,se,se,ne,sw,nw,s,n,nw,n,se,ne,se,se,sw,ne,ne,sw,se,se,se,se,sw,ne,se,s,ne,ne,n,se,ne,sw,ne,ne,se,se,nw,se,ne,ne,nw,sw,se,s,s,se,se,se,s,se,nw,se,ne,se,se,se,se,se,se,se,sw,nw,se,se,se,se,se,se,sw,se,sw,ne,se,se,se,se,se,se,se,se,s,se,se,se,se,se,se,ne,se,se,s,sw,s,se,se,se,se,se,se,se,s,se,sw,se,se,n,s,se,s,ne,se,se,se,s,se,s,se,se,ne,se,se,sw,s,se,se,se,se,nw,se,n,ne,s,s,nw,se,se,s,se,n,se,se,s,se,se,s,se,se,ne,se,se,se,s,s,sw,s,s,se,s,se,s,se,s,se,se,se,s,se,s,nw,s,s,se,se,se,se,sw,sw,s,se,s,se,se,s,n,se,se,se,se,s,se,se,s,se,se,se,sw,s,s,s,se,se,s,s,se,s,s,se,s,s,n,s,nw,s,n,s,sw,s,nw,s,s,se,se,sw,s,s,s,sw,se,s,n,s,se,n,s,se,se,se,s,s,s,se,ne,s,se,n,se,s,se,se,s,ne,sw,se,s,s,se,s,s,s,s,s,s,s,s,se,s,nw,s,s,s,s,s,s,s,s,s,s,s,ne,ne,s,s,s,s,s,s,s,s,s,ne,ne,s,s,s,s,s,s,s,s,nw,s,s,se,sw,s,sw,s,s,nw,s,s,s,s,s,s,s,s,s,n,ne,se,s,s,s,s,n,se,s,sw,s,sw,sw,sw,s,s,sw,s,s,s,nw,sw,s,s,s,s,s,ne,sw,s,s,sw,s,s,s,s,s,s,sw,s,s,se,s,s,sw,n,sw,s,s,sw,s,s,s,s,s,sw,s,ne,s,s,s,s,sw,ne,s,ne,n,sw,s,s,s,sw,s,sw,nw,s,s,ne,sw,sw,nw,s,s,sw,sw,s,ne,s,s,sw,se,s,s,sw,s,s,sw,s,sw,sw,s,s,s,s,sw,sw,sw,s,n,ne,s,ne,s,sw,s,se,s,sw,sw,s,sw,sw,sw,sw,s,s,s,s,se,s,sw,sw,sw,sw,n,s,sw,s,s,sw,sw,s,s,n,sw,s,sw,sw,ne,sw,sw,s,sw,sw,sw,sw,sw,s,s,sw,se,sw,sw,sw,sw,s,s,sw,s,sw,sw,nw,sw,sw,se,sw,s,s,nw,nw,s,s,sw,sw,s,n,s,sw,sw,se,s,sw,sw,ne,sw,sw,sw,sw,sw,ne,sw,s,sw,sw,n,sw,sw,sw,sw,s,sw,sw,sw,sw,sw,n,nw,s,sw,s,s,n,ne,sw,sw,sw,sw,n,sw,se,sw,sw,s,se,sw,sw,sw,sw,sw,sw,s,ne,ne,ne,sw,sw,sw,ne,s,sw,sw,sw,sw,nw,s,sw,sw,s,s,sw,sw,n,nw,nw,sw,sw,sw,se,nw,nw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,sw,sw,sw,nw,nw,se,sw,sw,sw,sw,sw,ne,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,s,sw,sw,se,sw,s,sw,sw,nw,nw,nw,sw,sw,nw,sw,se,ne,sw,sw,sw,sw,ne,sw,sw,nw,sw,se,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,nw,sw,sw,sw,s,sw,sw,nw,n,s,sw,n,nw,nw,sw,sw,nw,sw,sw,se,sw,sw,nw,sw,sw,s,sw,nw,sw,nw,sw,nw,nw,nw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,nw,nw,ne,n,nw,sw,sw,nw,sw,sw,nw,nw,nw,sw,sw,sw,ne,s,sw,nw,nw,sw,nw,sw,s,nw,n,nw,sw,sw,nw,nw,sw,nw,nw,n,sw,nw,sw,nw,sw,n,sw,nw,sw,sw,sw,sw,n,sw,n,nw,nw,s,sw,se,sw,sw,nw,n,sw,sw,sw,n,sw,nw,sw,ne,nw,sw,sw,s,n,nw,sw,nw,nw,nw,sw,sw,sw,nw,nw,ne,sw,s,sw,nw,n,sw,sw,sw,nw,ne,ne,sw,nw,nw,sw,s,s,sw,sw,nw,ne,sw,nw,sw,nw,nw,sw,sw,sw,sw,nw,nw,s,se,nw,sw,nw,ne,s,nw,nw,ne,sw,nw,nw,n,nw,nw,sw,sw,sw,nw,nw,nw,sw,nw,nw,n,sw,sw,nw,s,n,sw,nw,nw,sw,nw,n,nw,nw,nw,nw,nw,nw,sw,sw,n,n,sw,sw,nw,nw,nw,nw,ne,nw,nw,nw,sw,nw,nw,nw,nw,ne,nw,nw,nw,nw,n,nw,nw,nw,s,nw,nw,sw,nw,s,nw,ne,ne,nw,nw,sw,nw,nw,nw,nw,sw,nw,se,sw,nw,sw,nw,nw,ne,nw,n,nw,nw,sw,nw,nw,nw,sw,nw,ne,s,nw,nw,sw,s,nw,sw,sw,nw,nw,nw,sw,s,nw,nw,nw,nw,se,nw,s,nw,nw,nw,se,ne,ne,nw,nw,nw,nw,nw,sw,nw,ne,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,ne,nw,nw,s,nw,nw,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,nw,nw,ne,nw,n,nw,nw,ne,n,nw,sw,nw,n,nw,n,sw,nw,ne,s,se,n,ne,se,nw,ne,nw,ne,nw,ne,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,ne,nw,s,se,nw,n,n,nw,ne,nw,nw,nw,nw,ne,nw,nw,s,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,n,nw,nw,s,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,sw,n,nw,nw,nw,nw,nw,nw,nw,s,nw,se,n,n,n,nw,se,nw,nw,s,s,nw,nw,n,nw,nw,s,nw,nw,nw,se,nw,nw,nw,se,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,n,nw,n,ne,nw,nw,nw,se,ne,nw,nw,nw,n,nw,nw,ne,n,n,nw,nw,sw,nw,nw,nw,nw,se,nw,n,s,nw,nw,n,n,nw,se,n,nw,nw,nw,n,nw,nw,nw,n,nw,se,n,se,sw,s,n,s,nw,nw,nw,nw,n,n,s,nw,nw,se,nw,nw,se,nw,n,n,nw,n,se,nw,n,n,nw,n,nw,n,nw,nw,n,nw,n,s,nw,nw,nw,nw,ne,ne,se,sw,nw,n,n,nw,s,n,nw,nw,n,n,nw,n,nw,nw,nw,nw,nw,n,nw,n,n,sw,n,se,nw,n,n,nw,n,nw,nw,n,s,sw,nw,ne,nw,n,sw,nw,nw,n,nw,sw,s,nw,n,n,nw,se,n,nw,n,ne,n,nw,nw,n,nw,nw,n,nw,n,nw,nw,nw,n,se,sw,nw,nw,nw,sw,nw,nw,nw,nw,se,n,n,ne,n,nw,nw,n,nw,nw,n,sw,n,se,nw,nw,n,n,n,nw,n,nw,n,nw,n,ne,n,n,nw,n,n,n,nw,se,sw,n,sw,n,nw,nw,n,n,n,se,nw,sw,ne,n,se,nw,nw,n,n,n,n,n,n,nw,n,n,nw,sw,nw,n,sw,n,n,se,sw,n,n,n,nw,sw,nw,n,n,n,n,nw,n,n,nw,n,s,n,n,sw,n,nw,ne,s,nw,ne,n,n,n,ne,s,n,n,n,n,n,n,se,nw,nw,n,n,nw,n,n,s,se,n,nw,n,n,n,n,n,n,nw,n,n,n,nw,nw,nw,n,n,n,nw,nw,sw,n,se,n,s,n,n,n,n,n,n,ne,n,se,n,n,n,se,n,nw,n,nw,n,n,n,n,n,n,n,nw,n,n,n,n,n,n,ne,n,n,nw,n,n,sw,n,nw,n,n,sw,n,n,n,nw,se,n,n,n,nw,n,s,n,n,n,n,n,n,n,s,n,n,n,n,nw,n,n,sw,sw,nw,n,nw,nw,sw,n,n,n,n,n,n,n,n,n,n,n,s,n,n,n,n,nw,n,n,n,n,n,n,n,s,n,nw,n,sw,nw,ne,n,nw,n,sw,n,n,n,n,n,ne,n,nw,n,n,n,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,ne,n,n,s,n,n,se,n,n,n,n,n,n,n,nw,n,ne,nw,sw,ne,nw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,ne,n,n,se,n,ne,n,ne,n,n,n,n,ne,n,ne,se,s,ne,nw,se,n,n,n,n,se,n,n,ne,s,n,nw,n,nw,nw,n,n,n,n,n,n,n,n,n,s,n,n,n,s,n,nw,n,n,n,n,n,n,n,n,n,n,n,n,ne,ne,n,sw,n,se,n,n,n,n,n,n,n,se,n,ne,n,ne,n,n,n,n,n,sw,n,n,s,nw,n,n,n,ne,ne,n,n,n,ne,n,n,se,n,n,n,n,ne,n,n,n,s,n,se,ne,n,n,n,n,n,n,n,n,s,ne,s,nw,n,ne,s,ne,n,n,n,n,ne,n,n,n,n,n,n,n,n,n,ne,n,se,ne,n,ne,ne,ne,ne,se,n,n,ne,n,n,n,n,nw,ne,sw,ne,n,n,ne,se,n,n,n,n,se,n,n,n,ne,n,se,ne,ne,n,s,nw,n,ne,n,n,nw,n,n,ne,n,ne,n,sw,n,se,n,ne,nw,ne,ne,n,n,n,ne,n,ne,nw,n,s,n,n,n,n,ne,n,n,ne,n,nw,n,n,n,ne,n,s,n,n,n,n,n,ne,ne,n,sw,n,ne,n,n,sw,ne,n,ne,ne,n,n,ne,ne,ne,n,ne,ne,ne,n,ne,sw,n,n,ne,ne,ne,se,n,ne,ne,ne,n,nw,n,ne,n,n,n,ne,n,n,n,n,n,ne,ne,n,ne,s,nw,ne,n,ne,ne,ne,n,n,n,n,nw,n,n,ne,ne,ne,n,ne,n,ne,ne,n,ne,ne,nw,ne,nw,n,n,ne,se,ne,se,ne,n,nw,n,n,s,n,se,ne,ne,n,ne,n,ne,s,n,n,sw,ne,ne,se,n,ne,n,n,n,n,sw,ne,ne,nw,n,n,ne,ne,ne,n,ne,n,sw,ne,ne,ne,ne,n,ne,se,ne,sw,n,n,n,ne,ne,sw,ne,ne,ne,n,ne,ne,n,ne,se,ne,s,nw,n,sw,n,ne,n,n,n,n,ne,n,sw,ne,ne,nw,n,ne,se,ne,ne,ne,ne,n,ne,ne,n,ne,n,ne,ne,ne,n,s,s,ne,ne,ne,s,ne,ne,ne,sw,n,n,ne,n,s,ne,n,n,nw,n,se,sw,ne,ne,ne,s,n,n,ne,ne,n,ne,ne,nw,ne,ne,ne,s,se,ne,ne,ne,n,ne,nw,n,ne,ne,sw,n,n,ne,ne,ne,n,ne,ne,se,ne,ne,n,ne,ne,ne,sw,s,n,n,n,se,n,s,ne,ne,ne,sw,ne,ne,se,ne,ne,ne,ne,ne,n,s,se,ne,ne,ne,n,ne,sw,se,s,ne,n,ne,ne,n,n,n,ne,n,ne,ne,se,ne,ne,n,ne,ne,ne,ne,ne,s,ne,ne,ne,nw,ne,ne,ne,ne,ne,n,ne,s,ne,ne,ne,n,ne,sw,n,n,n,ne,ne,n,ne,s,n,n,n,ne,ne,n,ne,ne,ne,sw,se,sw,ne,ne,s,ne,nw,ne,nw,se,nw,n,ne,se,n,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,sw,ne,ne,ne,ne,n,ne,s,ne,s,ne,ne,n,ne,se,ne,ne,nw,n,ne,ne,ne,s,ne,sw,ne,n,ne,ne,n,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,se,n,ne,ne,ne,ne,sw,ne,n,ne,se,ne,ne,ne,se,se,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,ne,sw,n,n,ne,ne,n,ne,ne,ne,sw,ne,n,ne,ne,ne,se,ne,ne,nw,nw,sw,ne,ne,ne,ne,sw,ne,se,ne,n,ne,ne,ne,nw,ne,ne,ne,ne,ne,ne,sw,ne,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,s,sw,ne,ne,s,sw,sw,ne,ne,ne,nw,ne,n,se,ne,ne,ne,ne,n,ne,nw,ne,ne,n,se,ne,ne,ne,ne,sw,ne,ne,s,ne,s,ne,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,se,ne,ne,ne,ne,se,ne,ne,sw,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,n,ne,ne,nw,se,ne,ne,ne,ne,se,ne,sw,ne,ne,n,se,ne,ne,se,ne,sw,nw,ne,ne,ne,ne,ne,ne,s,ne,se,sw,ne,s,ne,se,se,se,ne,ne,s,ne,ne,s,ne,se,ne,nw,s,ne,se,ne,ne,ne,sw,ne,se,ne,ne,ne,sw,ne,ne,ne,ne,nw,ne,ne,nw,ne,ne,s,ne,ne,se,ne,ne,nw,ne,ne,se,se,se,ne,se,ne,se,se,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,s,se,ne,sw,ne,ne,se,ne,ne,ne,ne,s,ne,se,ne,ne,se,n,n,ne,se,s,ne,s,ne,se,nw,ne,se,ne,ne,se,ne,se,se,ne,ne,se,ne,ne,ne,n,se,ne,ne,ne,ne,s,se,se,n,ne,se,se,ne,ne,se,ne,se,se,ne,ne,sw,ne,ne,ne,ne,ne,ne,nw,se,ne,se,ne,se,ne,s,ne,ne,sw,ne,ne,ne,ne,ne,s,se,ne,ne,s,se,ne,ne,ne,nw,ne,ne,ne,se,ne,ne,ne,ne,se,ne,ne,ne,se,ne,ne,se,n,s,ne,ne,ne,se,s,n,se,se,ne,sw,ne,ne,n,ne,se,n,se,n,s,n,s,ne,se,ne,ne,ne,ne,n,ne,se,sw,se,ne,se,nw,ne,ne,ne,se,se,ne,ne,ne,ne,ne,ne,ne,ne,nw,ne,n,s,ne,ne,ne,ne,ne,se,se,se,se,sw,s,n,ne,s,ne,ne,sw,se,se,ne,ne,ne,ne,ne,ne,se,se,s,ne,se,ne,nw,n,ne,se,se,ne,se,ne,ne,se,se,se,ne,ne,sw,se,nw,se,nw,se,se,se,se,ne,n,n,ne,se,se,ne,ne,se,ne,ne,se,ne,sw,ne,se,ne,n,se,nw,sw,ne,ne,se,ne,se,ne,ne,se,ne,se,ne,ne,ne,se,ne,se,se,n,nw,ne,ne,ne,ne,sw,n,ne,ne,ne,nw,ne,se,se,ne,ne,s,nw,n,ne,ne,ne,ne,ne,ne,ne,se,ne,sw,se,ne,s,n,ne,ne,se,ne,se,se,ne,se,ne,se,se,ne,se,se,se,ne,ne,ne,ne,se,ne,ne,nw,ne,ne,se,ne,s,se,ne,se,ne,ne,ne,ne,n,se,ne,se,se,ne,ne,ne,nw,ne,se,se,nw,ne,se,se,ne,sw,ne,ne,ne,n,ne,ne,ne,n,se,ne,se,ne,n,n,se,ne,se,se,se,ne,se,se,sw,se,ne,se,ne,sw,sw,ne,ne,ne,s,n,ne,ne,nw,ne,n,se,se,se,se,ne,nw,ne,ne,ne,se,ne,se,n,n,se,n,se,se,se,se,se,ne,sw,ne,se,ne,se,se,se,ne,sw,se,s,se,se,ne,se,se,se,n,ne,se,se,ne,ne,ne,ne,se,se,ne,se,se,ne,se,ne,ne,se,se,nw,se,se,ne,se,sw,se,ne,n,ne,se,se,se,nw,se,se,se,ne,se,ne,se,se,ne,se,se,ne,ne,se,se,sw,ne,se,se,sw,se,se,s,ne,ne,se,ne,s,ne,se,se,ne,se,nw,n,se,se,s,se,ne,se,ne,ne,sw,ne,ne,n,se,s,n,ne,se,se,ne,nw,ne,ne,se,se,ne,sw,ne,ne,ne,se,sw,ne,se,se,ne,n,ne,se,nw,se,se,se,ne,se,ne,ne,ne,s,ne,nw,ne,ne,ne,se,se,se,nw,se,ne,se,se,se,ne,se,ne,se,se,se,ne,se,se,se,n,se,ne,ne,se,se,se,se,sw,ne,se,se,se,ne,se,nw,n,ne,ne,ne,sw,n,se,n,se,se,n,ne,se,se,ne,se,ne,se,nw,se,se,se,s,sw,ne,se,sw,se,se,se,ne,ne,se,ne,se,se,se,se,ne,se,se,ne,se,se,ne,se,ne,se,se,se,ne,se,ne,ne,se,s,ne,ne,nw,se,ne,n,ne,se,se,ne,se,n,ne,ne,se,ne,se,se,se,ne,se,se,ne,ne,nw,ne,s,se,se,se,se,se,sw,nw,n,se,se,s,se,se,se,nw,se,n,nw,se,ne,ne,se,nw,se,se,se,se,se,se,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,ne,se,se,se,se,ne,ne,nw,se,se,se,se,se,se,s,se,se,se,n,se,ne,ne,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,se,se,se,sw,se,ne,ne,s,se,se,ne,se,se,se,ne,ne,se,se,se,se,se,se,se,s,sw,se,ne,se,se,se,se,se,se,se,n,se,sw,se,se,se,ne,se,se,se,se,se,s,ne,nw,se,se,se,se,se,sw,se,ne,sw,se,ne,se,se,ne,se,ne,n,ne,se,se,ne,se,ne,nw,nw,se,se,se,se,se,se,se,se,se,se,sw,se,se,se,se,se,nw,se,n,se,se,ne,se,se,nw,se,se,se,se,se,ne,nw,nw,se,se,se,se,ne,se,se,se,ne,ne,se,se,se,se,se,se,se,se,se,se,se,sw,s,se,se,ne,nw,se,se,se,se,se,se,sw,sw,se,ne,sw,nw,se,se,se,se,se,n,se,se,ne,se,se,se,nw,se,ne,se,se,se,s,se,se,n,se,se,ne,se,s,se,ne,se,se,se,nw,se,se,n,se,s,n,se,se,se,nw,se,s,sw,se,ne,se,se,se,nw,se,sw,se,se,sw,s,se,n,ne,sw,se,n,nw,se,ne,se,se,se,se,se,ne,se,se,se,se,se,se,se,se,n,se,se,se,ne,se,se,se,sw,se,nw,se,se,ne,se,se,se,se,n,ne,se,se,se,n,se,se,se,se,se,se,se,s,s,se,se,se,s,ne,se,se,se,se,se,se,se,se,se,se,se,se,se,n,n,se,se,se,se,se,se,se,se,se,s,sw,se,se,se,n,nw,se,se,se,se,ne,ne,se,n,se,se,sw,ne,sw,se,se,ne,se,se,se,se,se,se,se,se,se,n,se,nw,se,se,se,sw,s,se,se,se,se,se,se,se,se,ne,s,se,se,se,nw,s,se,n,se,se,se,s,sw,se,se,se,se,nw,ne,se,se,se,ne,s,se,sw,se,se,se,se,se,se,s,se,s,se,sw,se,ne,s,se,se,nw,se,se,nw,n,se,se,se,nw,nw,se,se,se,se,se,nw,s,se,se,ne,se,se,se,se,se,se,se,sw,se,se,se,se,se,se,nw,se,se,s,se,se,se,se,s,s,se,se,se,s,se,se,se,s,s,n,se,se,se,se,n,n,se,sw,nw,se,s,se,nw,se,s,nw,nw,se,s,se,se,se,se,se,se,sw,nw,se,se,s,se,se,se,se,se,se,n,n,ne,se,s,s,se,se,se,se,se,se,s,se,se,s,se,se,n,se,se,s,se,s,se,s,se,sw,se,se,sw,se,ne,se,sw,se,se,se,s,nw,se,ne,n,se,se,nw,se,ne,se,se,se,s,se,se,nw,se,s,se,se,se,nw,se,se,sw,s,se,s,se,se,nw,s,se,se,s,se,se,s,se,se,se,se,se,sw,s,se,se,s,sw,nw,ne,nw,se,nw,se,s,se,se,se,se,se,s,se,se,se,se,sw,s,sw,se,se,se,s,sw,sw,s,n,se,s,se,nw,se,se,se,ne,se,se,se,se,s,se,se,s,nw,s,se,s,nw,se,se,se,se,se,n,s,se,ne,n,se,se,nw,se,s,se,n,se,nw,s,s,s,se,nw,s,s,se,s,se,se,nw,s,se,s,se,se,se,se,n,se,se,s,se,se,se,se,s,s,se,s,se,se,s,se,s,n,se,n,se,se,s,se,s,se,se,s,s,se,se,s,se,se,se,se,s,s,s,se,s,nw,s,se,se,se,ne,nw,se,se,se,se,se,se,n,se,se,se,se,se,se,nw,se,se,se,s,s,nw,se,ne,se,s,se,ne,se,se,nw,se,se,se,sw,n,se,sw,se,se,nw,ne,s,se,sw,se,s,s,s,se,s,se,n,sw,sw,se,se,se,ne,se,s,se,sw,n,se,se,se,s,s,se,s,se,n,s,ne,se,se,s,se,se,s,sw,s,se,se,ne,s,n,se,se,se,s,s,s,se,se,s,s,ne,se,s,se,nw,se,s,se,se,s,s,s,se,n,se,se,ne,se,se,s,sw,se,s,ne,se,se,se,s,s,se,se,se,se,se,se,se,s,ne,se,s,se,s,s,nw,nw,s,s,nw,s,se,se,ne,se,se,se,n,s,s,s,s,se,se,s,s,s,nw,sw,se,s,s,n,se,s,s,s,s,n,s,se,s,s,se,sw,nw,nw,se,se,se,s,sw,se,se,se,s,se,se,s,s,s,se,ne,s,se,s,s,se,s,ne,se,se,se,se,se,se,ne,se,ne,s,se,se,se,se,se,s,s,s,n,se,nw,nw,s,se,sw,se,se,s,se,se,nw,s,s,s,ne,nw,se,se,se,n,ne,se,s,se,ne,se,ne,sw,ne,se,s,sw,se,se,se,s,s,ne,s,se,se,sw,s,s,s,s,se,se,s,s,se,s,se,s,s,nw,s,s,s,s,nw,nw,se,s,s,sw,s,se,nw,s,se,s,se,s,se,n,sw,n,ne,s,s,s,se,se,nw,s,n,se,s,s,s,se,s,s,s,sw,se,se,se,se,se,se,sw,s,nw,se,n,s,se,sw,nw,se,se,se,se,s,ne,se,ne,s,s,se,se,se,s,s,s,s,n,se,sw,n,s,nw,s,se,s,se,se,se,s,se,n,s,se,nw,se,s,s,se,se,se,s,s,n,s,se,s,s,s,se,se,se,s,s,s,s,se,se,s,se,s,s,s,s,s,s,s,s,nw,nw,se,n,sw,s,s,ne,s,nw,s,se,s,s,sw,s,se,nw,se,s,s,s,s,s,s,s,se,se,s,se,ne,s,se,se,se,s,s,s,se,ne,s,ne,s,s,se,s,s,ne,s,s,se,s,s,s,s,s,se,n,sw,n,s,se,se,s,s,nw,s,sw,se,n,s,se,s,s,sw,s,s,s,s,s,nw,s,nw,se,se,s,s,nw,se,s,s,sw,sw,s,se,se,s,s,s,se,s,se,s,s,s,se,s,ne,s,s,se,s,s,se,se,s,s,s,n,s,s,s,s,se,s,s,se,s,s,se,s,s,s,nw,se,s,s,se,se,se,nw,s,se,ne,s,se,s,n,nw,se,sw,se,se,s,se,s,se,s,sw,s,se,se,se,nw,s,s,s,s,sw,s,s,s,n,s,sw,s,s,se,se,se,s,se,s,s,s,se,s,se,se,nw,s,s,se,ne,s,se,s,se,se,se,s,s,s,s,se,s,s,s,s,se,s,s,s,s,se,se,se,sw,s,se,s,s,nw,s,s,se,s,se,s,se,s,sw,s,ne,s,s,ne,s,sw,s,s,ne,n,s,se,se,s,s,s,s,se,se,s,s,se,se,s,nw,s,s,n,s,ne,se,n,s,s,s,s,s,sw,s,n,n,s,s,sw,s,sw,n,se,s,s,s,s,nw,se,s,s,s,s,s,s,se,s,s,sw,s,s,s,se,se,ne,s,s,s,ne,se,se,s,s,se,n,n,se,n,sw,s,sw,se,nw,n,s,n,s,nw,sw,s,se,se,s,s,s,s,s,s,se,s,s,se,s,s,s,s,s,sw,se,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,nw,se,s,se,s,s,s,s,s,s,s,s,se,nw,se,s,s,s,se,nw,s,s,ne,s,s,se,se,sw,s,ne,n,s,s,se,n,ne,se,s,s,s,s,nw,s,ne,s,s,n,s,s,s,s,s,se,s,s,s,s,se,s,s,s,s,n,s,se,s,n,s,s,sw,s,s,s,s,s,se,s,ne,s,sw,n,s,n,se,nw,nw,s,sw,ne,n,sw,n,sw,s,n,s,se,s,se,s,s,s,s,nw,se,s,s,s,se,sw,s,se,s,s,s,s,s,s,s,s,s,s,se,ne,nw,s,s,s,s,s,se,s,ne,sw,se,se,sw,sw,s,se,ne,s,nw,ne,n,s,s,s,s,s,ne,s,s,s,s,se,s,se,s,s,s,sw,s,s,se,s,s,s,s,n,se,s,ne,s,s,s,s,se,sw,se,s,s,s,s,s,se,s,n,n,s,s,sw,s,s,s,s,ne,s,sw,s,s,s,s,s,sw,s,s,n,s,n,s,s,s,n,se,s,s,s,s,s,s,s,s,s,s,s,s,ne,sw,s,s,ne,nw,se,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,sw,s,s,s,nw,s,s,se,se,s,n,s,se,s,s,s,se,s,nw,s,s,s,s,se,s,s,s,ne,s,s,s,se,s,s,s,s,s,s,s,n,s,s,s,s,s,ne,s,s,s,s,sw,s,s,s,s,s,s,s,s,s,s,ne,se,sw,s,sw,s,s,s,se,s,s,s,s,se,s,s,ne,s,s,s,s,se,ne,se,n,n,n,n,n,n,nw,nw,sw,sw,nw,ne,sw,ne,sw,nw,sw,ne,s,sw,sw,sw,sw,s,sw,sw,sw,sw,nw,s,s,s,nw,s,s,s,se,s,se,s,se,n,se,s,se,s,nw,sw,se,se,s,se,se,se,se,se,se,se,se,nw,se,se,se,se,se,ne,se,ne,s,se,se,se,se,se,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,s,ne,nw,ne,sw,ne,ne,ne,ne,ne,ne,ne,se,n,ne,ne,se,ne,ne,n,se,ne,ne,sw,ne,ne,n,ne,n,ne,n,n,n,sw,n,ne,n,ne,ne,se,ne,n,n,ne,n,n,s,n,n,ne,n,s,n,n,n,s,n,ne,n,n,n,n,n,se,nw,nw,n,n,nw,n,se,n,sw,s,n,nw,nw,se,nw,nw,nw,nw,n,n,se,n,n,n,nw,nw,n,nw,ne,n,nw,n,nw,sw,nw,n,n,n,ne,se,nw,n,nw,n,n,nw,n,nw,n,nw,n,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,se,sw,sw,nw,se,nw,s,nw,nw,nw,nw,nw,nw,nw,s,n,nw,nw,nw,sw,nw,se,nw,nw,nw,nw,sw,sw,nw,s,sw,nw,s,nw,nw,sw,nw,sw,sw,nw,sw,se,nw,nw,nw,nw,nw,sw,sw,nw,se,sw,sw,nw,sw,nw,se,sw,nw,nw,nw,n,nw,sw,nw,ne,nw,nw,s,nw,nw,nw,sw,nw,sw,nw,sw,sw,sw,sw,n,sw,nw,s,sw,nw,ne,sw,n,s,sw,sw,sw,sw,ne,sw,sw,sw,nw,sw,s,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,se,n,sw,s,sw,sw,n,sw,sw,s,s,sw,sw,sw,sw,sw,sw,sw,s,s,sw,sw,sw,ne,sw,sw,s,sw,s,nw,sw,sw,se,se,sw,sw,sw,s,s,s,sw,nw,sw,nw,s,sw,sw,sw,sw,sw,sw,s,sw,s,sw,sw,sw,s,sw,s,sw,s,sw,s,sw,s,sw,s,sw,sw,s,s,s,sw,n,sw,s,n,s,s,s,sw,s,n,s,sw,sw,sw,sw,s,s,s,s,s,s,s,s,sw,sw,s,sw,se,s,s,s,sw,s,s,sw,s,ne,s,s,s,s,s,s,s,s,s,n,se,s,s,nw,s,s,s,se,s,s,s,s,s,s,s,s,s,s,nw,se,s,s,s,sw,s,s,s,s,s,s,s,ne,n,s,se,s,s,s,s,s,s,se,se,nw,nw,s,s,s,s,s,se,sw,s,s,se,s,s,s,s,s,s,s,s,s,n,s,s,s,se,s,s,s,s,s,s,se,s,s,n,s,s,se,s,s,s,se,s,s,nw,s,s,s,n,s,s,se,s,se,s,n,ne,s,s,s,s,se,ne,n,s,se,s,se,s,s,se,s,s,s,s,s,se,s,sw,s,se,se,s,se,s,s,ne,s,ne,ne,se,s,ne,se,s,ne,s,se,ne,se,se,se,sw,s,se,se,se,se,se,n,s,s,se,s,se,s,s,se,se,s,s,se,se,nw,se,ne,s,s,se,se,se,se,se,s,se,ne,se,se,s,ne,se,sw,se,se,se,se,se,nw,se,se,se,se,se,se,se,s,ne,n,sw,ne,se,se,se,se,se,ne,se,se,se,se,se,se,se,se,se,n,se,s,s,se,se,sw,nw,s,se,se,ne,se,se,ne,s,se,se,se,se,se,se,se,se,n,se,se,se,se,se,se,ne,se,ne,nw,se,se,ne,nw,nw,se,se,se,se,sw,se,se,sw,n,se,se,sw,se,se,se,se,nw,se,se,se,se,se,nw,sw,ne,ne,ne,se,ne,ne,nw,se,se,nw,se,se,se,se,se,ne,se,s,se,se,s,ne,se,ne,se,se,se,ne,s,se,ne,ne,ne,ne,se,n,se,se,se,se,ne,se,n,ne,se,se,se,ne,sw,nw,nw,ne,se,ne,se,se,se,n,se,ne,se,se,se,se,ne,se,ne,n,se,se,ne,nw,ne,ne,se,se,n,se,se,s,se,sw,ne,ne,ne,se,se,se,ne,ne,se,n,ne,ne,se,ne,ne,ne,se,ne,sw,n,ne,s,se,se,se,sw,ne,se,se,se,sw,ne,se,ne,ne,ne,sw,ne,ne,s,ne,s,ne,se,ne,ne,se,se,se,nw,ne,ne,ne,se,ne,se,se,ne,ne,ne,se,sw,ne,ne,ne,ne,se,ne,sw,ne,sw,ne,n,nw,sw,ne,ne,ne,sw,ne,se,sw,n,ne,ne,se,n,se,ne,n,ne,se,ne,nw,ne,ne,s,n,se,ne,nw,ne,se,ne,ne,ne,se,ne,se,se,ne,ne,ne,se,se,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,se,nw,ne,ne,ne,ne,ne,ne,ne,se,se,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,ne,ne,nw,n,n,ne,nw,ne,ne,sw,se,ne,s,ne,nw,ne,nw,ne,ne,ne,ne,ne,ne,ne,n,n,ne,n,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,n,n,ne,s,ne,ne,ne,nw,se,ne,nw,nw,ne,n,n,ne,ne,nw,ne,n,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,n,ne,ne,ne,ne,ne,n,n,ne,ne,se,sw,ne,n,ne,n,ne,ne,sw,ne,ne,n,ne,ne,se,sw,ne,ne,ne,s,n,n,s,ne,n,se,ne,ne,sw,s,ne,nw,n,n,ne,nw,ne,n,n,s,s,n,ne,ne,n,n,nw,ne,n,ne,ne,ne,ne,n,s,n,se,sw,se,ne,ne,ne,n,ne,ne,ne,n,nw,ne,n,n,ne,nw,ne,ne,sw,n,n,se,ne,n,ne,nw,se,ne,ne,ne,n,ne,ne,n,ne,ne,ne,ne,n,ne,ne,s,n,s,nw,n,n,nw,ne,ne,ne,s,n,s,ne,ne,ne,n,se,ne,ne,nw,n,n,n,ne,s,sw,n,ne,n,n,sw,n,ne,n,ne,n,sw,ne,ne,ne,sw,n,ne,ne,sw,ne,ne,n,n,se,ne,ne,s,ne,ne,n,nw,s,n,n,ne,nw,sw,ne,n,ne,ne,n,ne,n,se,n,ne,sw,sw,n,n,n,ne,ne,n,ne,n,s,ne,se,ne,nw,n,n,n,n,se,nw,ne,n,n,n,n,nw,nw,ne,n,se,ne,n,n,n,ne,n,ne,ne,ne,sw,n,s,n,n,n,ne,se,n,n,ne,ne,ne,sw,ne,ne,n,n,n,n,n,n,ne,ne,n,s,n,n,n,n,ne,ne,ne,n,n,se,nw,n,n,n,n,s,n,ne,n,n,n,n,n,n,n,n,sw,n,n,ne,n,n,n,s,ne,nw,n,nw,sw,n,n,n,n,s,n,n,ne,n,n,n,n,n,n,n,s,s,n,n,n,ne,n,s,ne,n,se,n,n,n,sw,n,n,n,ne,n,n,n,n,sw,se,n,sw,n,n,n,sw,ne,s,n,n,sw,s,se,n,n,n,n,ne,n,n,n,n,se,n,n,n,n,n,n,se,n,sw,n,n,n,nw,s,sw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,sw,n,n,se,n,nw,se,n,sw,n,n,n,n,n,n,nw,n,n,n,n,n,n,n,n,n,sw,n,nw,ne,n,n,n,n,n,n,n,nw,n,n,sw,n,n,n,n,n,n,n,n,ne,n,s,n,n,n,n,ne,n,s,ne,n,n,n,nw,n,n,n,n,n,se,nw,n,nw,sw,n,n,ne,n,n,n,n,nw,n,n,n,nw,n,n,nw,n,n,n,sw,ne,n,n,s,n,n,n,nw,n,ne,n,nw,n,n,nw,nw,n,nw,nw,n,n,n,nw,sw,n,n,nw,sw,sw,n,nw,n,s,nw,n,s,nw,nw,nw,nw,n,se,n,n,nw,sw,nw,n,nw,n,ne,n,n,nw,nw,n,n,nw,nw,ne,nw,se,nw,nw,sw,n,n,n,sw,sw,n,n,n,n,nw,n,nw,nw,n,nw,n,nw,s,n,n,nw,nw,n,n,nw,n,sw,nw,nw,n,n,nw,nw,s,n,n,n,n,s,nw,n,n,n,n,n,nw,n,n,nw,n,nw,n,n,n,nw,n,n,nw,ne,nw,nw,n,nw,nw,n,n,nw,n,nw,ne,n,nw,n,n,nw,nw,nw,ne,nw,nw,n,n,n,se,ne,n,nw,n,n,n,n,nw,nw,n,nw,n,n,s,n,n,n,n,nw,n,nw,nw,se,n,nw,n,n,nw,nw,nw,nw,n,n,n,s,nw,nw,nw,ne,s,nw,nw,nw,n,nw,nw,sw,nw,n,nw,nw,n,nw,nw,n,nw,sw,n,n,n,n,nw,nw,nw,n,n,n,n,nw,n,n,ne,n,nw,nw,nw,ne,ne,n,n,nw,nw,ne,n,nw,nw,nw,nw,n,n,n,nw,nw,n,n,n,ne,nw,nw,nw,se,n,n,nw,n,nw,n,nw,nw,n,s,nw,n,nw,nw,nw,nw,nw,ne,nw,nw,n,nw,n,n,n,nw,n,n,ne,nw,n,n,nw,sw,nw,nw,nw,nw,nw,nw,nw,nw,s,nw,se,n,nw,nw,nw,nw,nw,nw,s,nw,n,nw,n,nw,nw,nw,nw,nw,se,s,nw,se,nw,n,ne,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,n,ne,nw,se,n,nw,nw,nw,nw,sw,n,nw,nw,n,nw,n,nw,nw,ne,n,nw,n,ne,se,n,sw,nw,ne,nw,sw,nw,ne,n,nw,ne,se,nw,nw,nw,nw,nw,ne,nw,n,nw,s,nw,nw,nw,ne,nw,nw,nw,nw,s,nw,n,sw,s,nw,se,nw,ne,nw,n,nw,sw,nw,n,nw,nw,sw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,s,s,nw,nw,nw,se,nw,nw,nw,nw,sw,nw,nw,n,nw,n,sw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,sw,nw,nw,nw,nw,nw,s,nw,sw,nw,nw,nw,se,nw,nw,sw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,n,nw,sw,n,nw,nw,se,nw,sw,se,sw,nw,sw,n,nw,nw,nw,ne,nw,nw,nw,se,nw,ne,ne,nw,nw,nw,nw,nw,s,nw,ne,n,nw,ne,nw,sw,nw,nw,sw,nw,se,nw,nw,ne,nw,ne,nw,sw,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,se,sw,sw,nw,s,sw,nw,nw,nw,nw,ne,nw,ne,nw,nw,sw,nw,nw,nw,sw,nw,nw,nw,ne,sw,s,nw,ne,nw,nw,se,se,n,nw,nw,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,n,nw,sw,nw,s,nw,sw,nw,nw,nw,sw,nw,nw,se,nw,n,nw,nw,ne,sw,nw,ne,nw,se,s,nw,nw,n,n,nw,nw,nw,nw,ne,se,sw,nw,nw,nw,nw,se,nw,nw,nw,sw,nw,nw,s,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,sw,nw,sw,nw,nw,nw,ne,nw,sw,nw,sw,nw,sw,nw,nw,nw,sw,ne,sw,nw,sw,nw,se,nw,se,nw,nw,n,sw,nw,nw,nw,nw,sw,sw,nw,sw,nw,nw,nw,nw,nw,sw,sw,nw,nw,nw,sw,nw,nw,nw,nw,ne,nw,n,nw,sw,sw,nw,nw,nw,nw,nw,sw,nw,sw,nw,sw,sw,nw,nw,sw,sw,nw,nw,nw,ne,sw,ne,sw,sw,nw,nw,nw,nw,nw,nw,nw,sw,se,nw,nw,sw,sw,nw,nw,s,nw,nw,sw,nw,nw,nw,n,sw,nw,sw,sw,n,nw,nw,nw,sw,sw,nw,s,nw,nw,nw,sw,nw,n,nw,nw,nw,nw,n,nw,nw,nw,sw,nw,nw,nw,se,nw,sw,nw,sw,sw,sw,nw,ne,s,sw,ne,nw,nw,s,nw,sw,nw,s,nw,sw,sw,sw,s,nw,se,nw,nw,nw,sw,sw,sw,n,nw,sw,nw,nw,nw,nw,nw,nw,sw,n,nw,nw,nw,s,nw,nw,nw,nw,sw,sw,sw,nw,nw,sw,sw,nw,nw,sw,nw,sw,nw,sw,sw,sw,sw,sw,nw,sw,s,nw,nw,sw,sw,sw,sw,nw,sw,sw,nw,sw,ne,nw,sw,nw,nw,sw,nw,se,nw,n,sw,nw,s,nw,ne,nw,se,sw,sw,sw,n,ne,sw,nw,sw,nw,sw,se,s,sw,sw,nw,sw,sw,nw,nw,sw,nw,sw,nw,sw,nw,sw,sw,sw,ne,sw,nw,sw,nw,nw,sw,nw,n,nw,sw,n,nw,nw,sw,sw,se,nw,nw,sw,nw,sw,sw,sw,sw,nw,se,sw,sw,nw,nw,sw,sw,sw,nw,sw,nw,nw,nw,sw,n,nw,sw,n,nw,s,nw,nw,sw,s,sw,sw,nw,sw,sw,sw,nw,ne,sw,ne,sw,s,sw,sw,nw,sw,nw,sw,sw,nw,nw,nw,sw,sw,ne,sw,n,sw,sw,sw,n,sw,sw,nw,sw,n,n,sw,sw,sw,nw,s,sw,sw,sw,sw,nw,nw,sw,nw,sw,sw,s,sw,nw,sw,sw,sw,s,sw,sw,n,nw,sw,n,sw,sw,s,nw,se,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,nw,sw,sw,sw,s,ne,se,nw,sw,sw,sw,nw,s,nw,nw,sw,sw,s,sw,sw,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,sw,nw,nw,nw,nw,nw,nw,s,nw,sw,sw,sw,sw,sw,n,sw,se,sw,sw,s,sw,sw,sw,sw,sw,s,s,sw,s,ne,sw,sw,s,sw,sw,nw,sw,sw,sw,sw,ne,se,sw,sw,sw,sw,n,sw,sw,sw,sw,s,nw,se,nw,nw,sw,sw,nw,se,nw,se,sw,sw,sw,nw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,ne,se,nw,nw,sw,sw,sw,n,s,sw,nw,nw,se,sw,ne,sw,n,s,sw,sw,nw,sw,sw,sw,sw,sw,ne,sw,sw,se,sw,sw,sw,sw,nw,sw,sw,ne,sw,nw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,se,sw,se,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,se,sw,sw,se,sw,sw,ne diff --git a/2017/inputs/day_12.txt b/2017/inputs/day_12.txt new file mode 100644 index 0000000..80e4ce6 --- /dev/null +++ b/2017/inputs/day_12.txt @@ -0,0 +1,2000 @@ +0 <-> 199, 1774 +1 <-> 350, 1328, 1920 +2 <-> 477, 984, 1419 +3 <-> 1465, 1568 +4 <-> 359, 1047, 1215, 1580, 1969 +5 <-> 613 +6 <-> 49, 617, 1213 +7 <-> 1263 +8 <-> 410 +9 <-> 1224 +10 <-> 1157 +11 <-> 304, 1168, 1875 +12 <-> 868, 891, 1369, 1712 +13 <-> 958, 1371 +14 <-> 1814 +15 <-> 261, 556 +16 <-> 830, 1646, 1901, 1933 +17 <-> 962, 1778 +18 <-> 109, 1229 +19 <-> 239, 1070, 1886, 1930 +20 <-> 327, 1307, 1801, 1905 +21 <-> 943, 1950 +22 <-> 1310 +23 <-> 659, 917 +24 <-> 373 +25 <-> 369 +26 <-> 947, 1023 +27 <-> 338, 1901 +28 <-> 1691 +29 <-> 132, 1219, 1699, 1962 +30 <-> 424, 822, 1419 +31 <-> 1444, 1464 +32 <-> 702, 1517 +33 <-> 1639 +34 <-> 909 +35 <-> 690, 1655 +36 <-> 988, 1149, 1166 +37 <-> 649, 1300, 1441, 1699 +38 <-> 1848 +39 <-> 382 +40 <-> 827, 1203, 1510 +41 <-> 714, 1056, 1184 +42 <-> 1018, 1873 +43 <-> 214 +44 <-> 670, 957 +45 <-> 45 +46 <-> 1195 +47 <-> 559, 1504 +48 <-> 1958 +49 <-> 6 +50 <-> 50, 1248 +51 <-> 1151 +52 <-> 52, 521, 1791 +53 <-> 304 +54 <-> 601 +55 <-> 1328 +56 <-> 939 +57 <-> 1583, 1995 +58 <-> 1422, 1694 +59 <-> 395, 1233 +60 <-> 862, 1811 +61 <-> 345, 1694 +62 <-> 62, 276 +63 <-> 280 +64 <-> 199 +65 <-> 117, 930 +66 <-> 364, 697 +67 <-> 1043 +68 <-> 287, 504, 1554 +69 <-> 498, 706 +70 <-> 77, 333, 713, 972, 1299 +71 <-> 1643 +72 <-> 694 +73 <-> 1381 +74 <-> 955, 1790 +75 <-> 1691, 1743 +76 <-> 76, 638, 1429 +77 <-> 70 +78 <-> 1513 +79 <-> 1397, 1716 +80 <-> 897 +81 <-> 968, 1841 +82 <-> 649 +83 <-> 522 +84 <-> 84, 125, 399, 498 +85 <-> 880, 1554, 1888 +86 <-> 86 +87 <-> 579, 1947 +88 <-> 470, 1451, 1750 +89 <-> 805, 1434 +90 <-> 453 +91 <-> 1208 +92 <-> 688, 1358, 1746 +93 <-> 357, 647 +94 <-> 234, 1270, 1520 +95 <-> 620, 1454 +96 <-> 390, 869, 919 +97 <-> 693, 1783 +98 <-> 259, 529, 782, 1018 +99 <-> 678 +100 <-> 1215 +101 <-> 459, 887 +102 <-> 888, 1135 +103 <-> 1006 +104 <-> 1375, 1422 +105 <-> 1657, 1730 +106 <-> 216, 1434 +107 <-> 333 +108 <-> 468, 1654 +109 <-> 18, 1791 +110 <-> 372 +111 <-> 111, 861, 1383 +112 <-> 1359, 1937 +113 <-> 414, 736, 1446 +114 <-> 426, 1457 +115 <-> 1605, 1672 +116 <-> 116, 713, 1584, 1602 +117 <-> 65 +118 <-> 1611, 1897 +119 <-> 541, 1569 +120 <-> 412, 787 +121 <-> 1344 +122 <-> 698, 752, 1693 +123 <-> 1173, 1576, 1634, 1802 +124 <-> 735 +125 <-> 84, 1032 +126 <-> 126, 225, 332 +127 <-> 1350 +128 <-> 128, 319, 327, 1582 +129 <-> 129, 654, 1260 +130 <-> 1080, 1296, 1350 +131 <-> 131 +132 <-> 29, 856, 1064 +133 <-> 659, 1367, 1776 +134 <-> 648, 1147, 1450, 1910 +135 <-> 411 +136 <-> 353, 935, 1590 +137 <-> 228 +138 <-> 194, 452, 1746, 1794 +139 <-> 139, 494, 1635 +140 <-> 681 +141 <-> 1507 +142 <-> 1288 +143 <-> 845 +144 <-> 1516 +145 <-> 502, 1146, 1155, 1809 +146 <-> 146, 750 +147 <-> 1600 +148 <-> 1206 +149 <-> 829, 1457 +150 <-> 675, 915 +151 <-> 651, 1678 +152 <-> 888, 1503 +153 <-> 498, 960, 1515 +154 <-> 1468 +155 <-> 751 +156 <-> 528, 803, 1655 +157 <-> 1486, 1937 +158 <-> 590, 1876 +159 <-> 159, 185, 1287, 1550, 1588 +160 <-> 160, 548 +161 <-> 1303, 1364 +162 <-> 1855 +163 <-> 1181 +164 <-> 442 +165 <-> 490 +166 <-> 1105 +167 <-> 1121 +168 <-> 760, 1129 +169 <-> 747 +170 <-> 1890 +171 <-> 1644 +172 <-> 593, 665 +173 <-> 1092, 1869 +174 <-> 705 +175 <-> 1345, 1999 +176 <-> 234, 606 +177 <-> 557, 688 +178 <-> 373 +179 <-> 1376 +180 <-> 638 +181 <-> 1996 +182 <-> 1094, 1206, 1748 +183 <-> 931 +184 <-> 880 +185 <-> 159, 1058, 1704 +186 <-> 765, 1178, 1877 +187 <-> 732 +188 <-> 188 +189 <-> 189, 1871 +190 <-> 395, 1639 +191 <-> 441 +192 <-> 192, 1034 +193 <-> 494 +194 <-> 138, 995, 1308 +195 <-> 1024 +196 <-> 226, 1632, 1919 +197 <-> 786 +198 <-> 286, 758, 1852 +199 <-> 0, 64, 1646 +200 <-> 314 +201 <-> 459, 658 +202 <-> 321, 492, 599, 1081, 1460 +203 <-> 225 +204 <-> 331, 462, 600 +205 <-> 898 +206 <-> 734, 1321 +207 <-> 558, 991 +208 <-> 397 +209 <-> 1145, 1886 +210 <-> 1343, 1925 +211 <-> 840, 1409 +212 <-> 1308 +213 <-> 1813 +214 <-> 43, 282 +215 <-> 1270 +216 <-> 106, 836, 1275, 1507 +217 <-> 312 +218 <-> 290, 386, 639, 1920 +219 <-> 784, 1001 +220 <-> 220, 322 +221 <-> 1681 +222 <-> 1616, 1653 +223 <-> 436, 1272, 1625 +224 <-> 1398, 1696 +225 <-> 126, 203, 1182 +226 <-> 196, 1655 +227 <-> 623 +228 <-> 137, 923 +229 <-> 253, 1387 +230 <-> 1374 +231 <-> 389, 1499 +232 <-> 442 +233 <-> 473, 1406 +234 <-> 94, 176 +235 <-> 235 +236 <-> 607, 838, 1487, 1856 +237 <-> 818 +238 <-> 387, 628 +239 <-> 19 +240 <-> 818 +241 <-> 1027, 1524 +242 <-> 1085, 1971 +243 <-> 1942 +244 <-> 299, 390, 916 +245 <-> 906 +246 <-> 246, 534, 763, 1427 +247 <-> 531, 1675 +248 <-> 336, 1832 +249 <-> 1497 +250 <-> 1836 +251 <-> 1309 +252 <-> 581, 1104 +253 <-> 229, 877, 1743 +254 <-> 254, 621 +255 <-> 831, 866, 874 +256 <-> 1942 +257 <-> 906 +258 <-> 1224 +259 <-> 98, 316, 419, 718, 1519 +260 <-> 1223, 1516, 1547, 1845, 1944 +261 <-> 15, 278, 1607, 1808 +262 <-> 1112, 1172 +263 <-> 424 +264 <-> 680 +265 <-> 1968 +266 <-> 804, 1252 +267 <-> 1739 +268 <-> 538, 546 +269 <-> 1265 +270 <-> 270 +271 <-> 1150 +272 <-> 272 +273 <-> 1208, 1537 +274 <-> 1427 +275 <-> 1349, 1829 +276 <-> 62, 906 +277 <-> 461, 634, 1887 +278 <-> 261, 1224, 1904 +279 <-> 303, 537 +280 <-> 63, 280, 926, 931 +281 <-> 862, 1041, 1119, 1863 +282 <-> 214, 488, 644 +283 <-> 646, 1124 +284 <-> 860, 1759 +285 <-> 746 +286 <-> 198 +287 <-> 68, 1045 +288 <-> 332, 1133, 1277, 1628, 1744, 1770, 1934 +289 <-> 1578, 1766 +290 <-> 218, 439, 1661 +291 <-> 596, 1377, 1620 +292 <-> 700, 848, 1099 +293 <-> 293, 1592, 1938 +294 <-> 653, 1948 +295 <-> 1505, 1936 +296 <-> 625, 925 +297 <-> 1105, 1185 +298 <-> 298, 544, 1444 +299 <-> 244, 933, 1012 +300 <-> 300, 1461, 1883 +301 <-> 880, 1698 +302 <-> 1221 +303 <-> 279, 375 +304 <-> 11, 53, 967, 1362 +305 <-> 777 +306 <-> 344 +307 <-> 582, 770 +308 <-> 792, 1895 +309 <-> 539 +310 <-> 390, 1482 +311 <-> 441, 1294 +312 <-> 217, 743 +313 <-> 1522 +314 <-> 200, 502, 835, 1084, 1134 +315 <-> 1970 +316 <-> 259 +317 <-> 1302, 1437 +318 <-> 365 +319 <-> 128, 976 +320 <-> 1056, 1466, 1778 +321 <-> 202 +322 <-> 220, 1431 +323 <-> 838, 1465, 1895 +324 <-> 443 +325 <-> 1056 +326 <-> 463, 1741, 1761 +327 <-> 20, 128, 681, 1797 +328 <-> 328, 348 +329 <-> 378, 1738 +330 <-> 459 +331 <-> 204, 331 +332 <-> 126, 288 +333 <-> 70, 107, 1747 +334 <-> 517, 614 +335 <-> 1259 +336 <-> 248, 550, 1485 +337 <-> 337 +338 <-> 27, 1212, 1264 +339 <-> 430, 963 +340 <-> 769 +341 <-> 341 +342 <-> 593, 718, 895 +343 <-> 569 +344 <-> 306, 1440, 1650, 1742 +345 <-> 61, 1006, 1664 +346 <-> 448, 1928 +347 <-> 1022, 1052 +348 <-> 328, 1232 +349 <-> 1232 +350 <-> 1, 526, 1086, 1821 +351 <-> 584 +352 <-> 518, 686, 1324, 1437 +353 <-> 136, 936 +354 <-> 1470 +355 <-> 1173, 1814 +356 <-> 698 +357 <-> 93 +358 <-> 737, 986, 1169 +359 <-> 4 +360 <-> 363 +361 <-> 417, 841 +362 <-> 928 +363 <-> 360, 1751 +364 <-> 66, 364, 1596 +365 <-> 318, 1766 +366 <-> 366 +367 <-> 367 +368 <-> 1897 +369 <-> 25, 369, 1460 +370 <-> 370 +371 <-> 1568 +372 <-> 110, 582 +373 <-> 24, 178, 1924 +374 <-> 374 +375 <-> 303 +376 <-> 1331, 1990 +377 <-> 388, 601, 837 +378 <-> 329 +379 <-> 623 +380 <-> 671 +381 <-> 938 +382 <-> 39, 1458 +383 <-> 383, 1490, 1763, 1844 +384 <-> 832 +385 <-> 745, 1673 +386 <-> 218, 779 +387 <-> 238 +388 <-> 377, 1817 +389 <-> 231, 656, 1038, 1960 +390 <-> 96, 244, 310, 721, 1094, 1501 +391 <-> 438, 819, 1870 +392 <-> 697 +393 <-> 443, 1275, 1463 +394 <-> 480 +395 <-> 59, 190, 1117, 1997 +396 <-> 595 +397 <-> 208, 397, 1727 +398 <-> 1153 +399 <-> 84 +400 <-> 825, 1693 +401 <-> 812 +402 <-> 1191 +403 <-> 1446, 1820 +404 <-> 442, 871, 1637 +405 <-> 426, 1067 +406 <-> 460, 1290 +407 <-> 1951 +408 <-> 1335, 1391, 1897 +409 <-> 984, 1217 +410 <-> 8, 1607 +411 <-> 135, 411, 454, 1393 +412 <-> 120 +413 <-> 1208 +414 <-> 113 +415 <-> 415, 1803 +416 <-> 428 +417 <-> 361 +418 <-> 1129 +419 <-> 259 +420 <-> 628 +421 <-> 1485 +422 <-> 1110, 1785 +423 <-> 1418 +424 <-> 30, 263 +425 <-> 1497 +426 <-> 114, 405, 780 +427 <-> 427 +428 <-> 416, 782 +429 <-> 429 +430 <-> 339, 1513 +431 <-> 886, 1408 +432 <-> 586, 1725 +433 <-> 889, 1753, 1881 +434 <-> 1078, 1120 +435 <-> 660, 1194, 1662 +436 <-> 223, 1332 +437 <-> 1487 +438 <-> 391 +439 <-> 290 +440 <-> 1828 +441 <-> 191, 311, 1003, 1561, 1702 +442 <-> 164, 232, 404 +443 <-> 324, 393 +444 <-> 1215, 1251 +445 <-> 792 +446 <-> 1015, 1392 +447 <-> 777 +448 <-> 346, 1097 +449 <-> 1117 +450 <-> 1395 +451 <-> 1414, 1845 +452 <-> 138 +453 <-> 90, 453 +454 <-> 411 +455 <-> 1801 +456 <-> 456, 791, 902, 1111 +457 <-> 457, 1075, 1384 +458 <-> 770, 1600 +459 <-> 101, 201, 330, 1108 +460 <-> 406, 1529 +461 <-> 277, 839, 1552 +462 <-> 204 +463 <-> 326, 1899 +464 <-> 1098 +465 <-> 764, 1630, 1779 +466 <-> 627 +467 <-> 904 +468 <-> 108, 1849 +469 <-> 469, 603, 780 +470 <-> 88, 1276, 1533 +471 <-> 1492 +472 <-> 472, 1048, 1409, 1518, 1758 +473 <-> 233, 1413, 1826 +474 <-> 780 +475 <-> 1005, 1968 +476 <-> 809 +477 <-> 2 +478 <-> 753 +479 <-> 479, 1296, 1615 +480 <-> 394, 775, 1623 +481 <-> 774, 1604 +482 <-> 763 +483 <-> 522, 591, 1344 +484 <-> 894, 1219 +485 <-> 507, 1114, 1250, 1351 +486 <-> 1099, 1879 +487 <-> 487 +488 <-> 282, 1164, 1189 +489 <-> 900, 1889 +490 <-> 165, 918, 1007 +491 <-> 1800 +492 <-> 202 +493 <-> 615, 899, 1200, 1326 +494 <-> 139, 193 +495 <-> 704, 1988 +496 <-> 496 +497 <-> 1149, 1216 +498 <-> 69, 84, 153 +499 <-> 1125, 1149 +500 <-> 642 +501 <-> 524, 1176 +502 <-> 145, 314 +503 <-> 1330, 1626 +504 <-> 68, 699 +505 <-> 672 +506 <-> 1083 +507 <-> 485, 1743 +508 <-> 520, 1236, 1296 +509 <-> 1676 +510 <-> 875, 1066 +511 <-> 511 +512 <-> 512, 1240 +513 <-> 705, 812 +514 <-> 1758 +515 <-> 1165, 1168 +516 <-> 811 +517 <-> 334, 1132, 1339 +518 <-> 352, 1674 +519 <-> 824, 1396, 1659 +520 <-> 508 +521 <-> 52, 915 +522 <-> 83, 483, 1637 +523 <-> 1317 +524 <-> 501 +525 <-> 525 +526 <-> 350, 850, 930 +527 <-> 527, 1338, 1449 +528 <-> 156 +529 <-> 98 +530 <-> 691, 1175, 1505 +531 <-> 247, 785, 1389, 1623 +532 <-> 1159 +533 <-> 1152, 1297 +534 <-> 246 +535 <-> 1144, 1491, 1622, 1935 +536 <-> 708 +537 <-> 279, 1656 +538 <-> 268, 538, 1756 +539 <-> 309, 802 +540 <-> 1239 +541 <-> 119, 1679, 1741 +542 <-> 1204 +543 <-> 642, 1926 +544 <-> 298 +545 <-> 1971 +546 <-> 268 +547 <-> 1465, 1613, 1614 +548 <-> 160 +549 <-> 820 +550 <-> 336 +551 <-> 1733 +552 <-> 552, 1563 +553 <-> 1654 +554 <-> 554, 1641, 1665 +555 <-> 555 +556 <-> 15 +557 <-> 177, 1204 +558 <-> 207, 1004 +559 <-> 47, 1297 +560 <-> 1189, 1709 +561 <-> 1013, 1709 +562 <-> 762, 912 +563 <-> 563 +564 <-> 585 +565 <-> 1333, 1494 +566 <-> 566, 938 +567 <-> 894 +568 <-> 586, 1397 +569 <-> 343, 1572 +570 <-> 704, 1220, 1459 +571 <-> 1451 +572 <-> 651, 846, 909 +573 <-> 1881 +574 <-> 1866 +575 <-> 1379 +576 <-> 1060, 1210 +577 <-> 1837 +578 <-> 1346 +579 <-> 87 +580 <-> 1509 +581 <-> 252, 1548 +582 <-> 307, 372 +583 <-> 624, 1599, 1753, 1908 +584 <-> 351, 774 +585 <-> 564, 977 +586 <-> 432, 568, 773, 1789 +587 <-> 826 +588 <-> 1854 +589 <-> 719, 845, 1214 +590 <-> 158, 1259 +591 <-> 483 +592 <-> 743, 898 +593 <-> 172, 342, 852, 943, 1053 +594 <-> 594 +595 <-> 396, 928 +596 <-> 291, 596 +597 <-> 597 +598 <-> 1980 +599 <-> 202, 1764 +600 <-> 204 +601 <-> 54, 377, 1340 +602 <-> 1718, 1866 +603 <-> 469, 789 +604 <-> 1006, 1033, 1626 +605 <-> 1535 +606 <-> 176 +607 <-> 236, 911, 1218 +608 <-> 1193, 1825 +609 <-> 1657 +610 <-> 733, 841 +611 <-> 747, 1892 +612 <-> 1098, 1196, 1267 +613 <-> 5, 1372 +614 <-> 334, 1492 +615 <-> 493, 798 +616 <-> 1025, 1940 +617 <-> 6, 666, 1155 +618 <-> 762, 1621, 1895 +619 <-> 1187 +620 <-> 95, 1761 +621 <-> 254 +622 <-> 784, 1476 +623 <-> 227, 379, 1081 +624 <-> 583 +625 <-> 296, 1222, 1882 +626 <-> 905 +627 <-> 466, 1692 +628 <-> 238, 420, 1004, 1412 +629 <-> 1532 +630 <-> 630 +631 <-> 977, 1092, 1458, 1713 +632 <-> 777, 1049, 1404 +633 <-> 994 +634 <-> 277 +635 <-> 635 +636 <-> 703, 1756 +637 <-> 840, 1585 +638 <-> 76, 180, 1373 +639 <-> 218, 639, 1835 +640 <-> 1559 +641 <-> 1800 +642 <-> 500, 543 +643 <-> 1808 +644 <-> 282 +645 <-> 1253, 1475 +646 <-> 283, 646, 864 +647 <-> 93, 1508 +648 <-> 134, 956, 1762 +649 <-> 37, 82 +650 <-> 1480, 1916 +651 <-> 151, 572, 1357 +652 <-> 1261 +653 <-> 294, 653 +654 <-> 129, 1139, 1176 +655 <-> 1251, 1656 +656 <-> 389 +657 <-> 1604 +658 <-> 201, 1208 +659 <-> 23, 133, 1868 +660 <-> 435 +661 <-> 1634 +662 <-> 1667, 1701 +663 <-> 974 +664 <-> 664, 1167 +665 <-> 172, 1370 +666 <-> 617 +667 <-> 1824 +668 <-> 952, 1605 +669 <-> 1822 +670 <-> 44, 670 +671 <-> 380, 1145, 1693, 1906 +672 <-> 505, 693 +673 <-> 1610 +674 <-> 1249, 1302 +675 <-> 150, 777 +676 <-> 1675 +677 <-> 910, 1282 +678 <-> 99, 1004 +679 <-> 679 +680 <-> 264, 917, 1137, 1687 +681 <-> 140, 327, 746 +682 <-> 682 +683 <-> 794, 1315 +684 <-> 1000, 1342 +685 <-> 1111, 1348, 1523, 1932 +686 <-> 352 +687 <-> 979, 1667 +688 <-> 92, 177 +689 <-> 937, 1939 +690 <-> 35, 1608 +691 <-> 530, 691 +692 <-> 1871 +693 <-> 97, 672 +694 <-> 72, 694 +695 <-> 1076 +696 <-> 1954 +697 <-> 66, 392, 1892 +698 <-> 122, 356, 698 +699 <-> 504, 1470 +700 <-> 292, 1407 +701 <-> 1231, 1327 +702 <-> 32 +703 <-> 636, 1083, 1210 +704 <-> 495, 570 +705 <-> 174, 513, 1332 +706 <-> 69, 1088 +707 <-> 1036, 1867 +708 <-> 536, 805, 1958 +709 <-> 709 +710 <-> 915, 1578 +711 <-> 711, 1478 +712 <-> 813, 927 +713 <-> 70, 116, 1469, 1539 +714 <-> 41 +715 <-> 840, 1473, 1562, 1705 +716 <-> 716 +717 <-> 949, 1864 +718 <-> 259, 342, 1557, 1853 +719 <-> 589, 781, 802 +720 <-> 1125 +721 <-> 390, 878 +722 <-> 1026 +723 <-> 1039, 1467 +724 <-> 1535 +725 <-> 883 +726 <-> 1832, 1917 +727 <-> 1245 +728 <-> 1291 +729 <-> 1203 +730 <-> 824 +731 <-> 1984 +732 <-> 187, 1214 +733 <-> 610, 1079, 1198 +734 <-> 206, 872, 1479, 1855 +735 <-> 124, 1371 +736 <-> 113, 736 +737 <-> 358, 1426 +738 <-> 974, 1024, 1717, 1842 +739 <-> 1489 +740 <-> 1634 +741 <-> 873, 1695 +742 <-> 1700 +743 <-> 312, 592, 1493 +744 <-> 948, 1306, 1400 +745 <-> 385, 1029, 1315, 1474 +746 <-> 285, 681, 793 +747 <-> 169, 611, 814, 1548 +748 <-> 748 +749 <-> 1134, 1498 +750 <-> 146 +751 <-> 155, 783, 1856 +752 <-> 122, 1417 +753 <-> 478, 1505 +754 <-> 810, 1742, 1955 +755 <-> 1735, 1847 +756 <-> 978, 1095 +757 <-> 1153, 1730 +758 <-> 198, 1476 +759 <-> 759 +760 <-> 168 +761 <-> 1496 +762 <-> 562, 618 +763 <-> 246, 482, 1258 +764 <-> 465 +765 <-> 186 +766 <-> 1448 +767 <-> 893, 896, 1019 +768 <-> 1730 +769 <-> 340, 1043, 1065 +770 <-> 307, 458, 1453 +771 <-> 1168 +772 <-> 911 +773 <-> 586 +774 <-> 481, 584, 774, 1148 +775 <-> 480, 1485, 1894 +776 <-> 926 +777 <-> 305, 447, 632, 675 +778 <-> 1690 +779 <-> 386 +780 <-> 426, 469, 474 +781 <-> 719, 1543 +782 <-> 98, 428, 903 +783 <-> 751, 1558 +784 <-> 219, 622 +785 <-> 531 +786 <-> 197, 911, 1312 +787 <-> 120, 880 +788 <-> 1089, 1487 +789 <-> 603, 844, 1681, 1731 +790 <-> 790, 1126 +791 <-> 456, 1363 +792 <-> 308, 445 +793 <-> 746 +794 <-> 683, 951 +795 <-> 1732, 1986 +796 <-> 1210, 1878 +797 <-> 804 +798 <-> 615 +799 <-> 1651 +800 <-> 851, 860, 1907 +801 <-> 1110, 1537, 1773 +802 <-> 539, 719 +803 <-> 156, 1528 +804 <-> 266, 797, 1549 +805 <-> 89, 708, 962 +806 <-> 1429 +807 <-> 1800 +808 <-> 873, 1421 +809 <-> 476, 809 +810 <-> 754 +811 <-> 516, 965 +812 <-> 401, 513 +813 <-> 712, 1023 +814 <-> 747 +815 <-> 1145 +816 <-> 1413 +817 <-> 1235 +818 <-> 237, 240, 1506 +819 <-> 391, 857 +820 <-> 549, 1162 +821 <-> 1410, 1607 +822 <-> 30, 1485 +823 <-> 1445, 1454 +824 <-> 519, 730, 1824 +825 <-> 400, 1381, 1472 +826 <-> 587, 1040, 1198, 1618 +827 <-> 40 +828 <-> 1870 +829 <-> 149 +830 <-> 16 +831 <-> 255 +832 <-> 384, 1890, 1913 +833 <-> 1529 +834 <-> 834 +835 <-> 314 +836 <-> 216, 1166 +837 <-> 377, 988 +838 <-> 236, 323 +839 <-> 461, 1825 +840 <-> 211, 637, 715, 1710 +841 <-> 361, 610, 841, 1815 +842 <-> 1669 +843 <-> 874, 1468 +844 <-> 789 +845 <-> 143, 589, 1053 +846 <-> 572 +847 <-> 1285 +848 <-> 292 +849 <-> 849 +850 <-> 526 +851 <-> 800, 1368, 1497 +852 <-> 593, 1798 +853 <-> 1339, 1593, 1749 +854 <-> 1445, 1787 +855 <-> 1026, 1356 +856 <-> 132 +857 <-> 819 +858 <-> 1511 +859 <-> 1191 +860 <-> 284, 800, 1619 +861 <-> 111, 1266 +862 <-> 60, 281 +863 <-> 1605 +864 <-> 646 +865 <-> 873 +866 <-> 255, 924 +867 <-> 871, 1707 +868 <-> 12 +869 <-> 96, 1278 +870 <-> 1307 +871 <-> 404, 867, 1482 +872 <-> 734, 1200 +873 <-> 741, 808, 865, 873 +874 <-> 255, 843, 1201 +875 <-> 510, 1325, 1797 +876 <-> 1504, 1825 +877 <-> 253 +878 <-> 721 +879 <-> 948, 1291, 1847 +880 <-> 85, 184, 301, 787, 1503, 1617 +881 <-> 1688 +882 <-> 882 +883 <-> 725, 1582, 1874 +884 <-> 1352 +885 <-> 885, 1974 +886 <-> 431, 1650 +887 <-> 101 +888 <-> 102, 152 +889 <-> 433, 1016 +890 <-> 890 +891 <-> 12 +892 <-> 1402, 1923 +893 <-> 767 +894 <-> 484, 567 +895 <-> 342, 1123, 1158, 1648 +896 <-> 767 +897 <-> 80, 986, 1418 +898 <-> 205, 592, 1019 +899 <-> 493, 1053 +900 <-> 489 +901 <-> 901 +902 <-> 456 +903 <-> 782 +904 <-> 467, 904, 1924 +905 <-> 626, 1881 +906 <-> 245, 257, 276 +907 <-> 907, 1101, 1826 +908 <-> 908, 1230 +909 <-> 34, 572, 1186 +910 <-> 677, 961 +911 <-> 607, 772, 786, 1196, 1405 +912 <-> 562 +913 <-> 1636 +914 <-> 1892, 1963 +915 <-> 150, 521, 710 +916 <-> 244 +917 <-> 23, 680, 1336 +918 <-> 490, 1483 +919 <-> 96 +920 <-> 1880 +921 <-> 921 +922 <-> 975, 1255 +923 <-> 228, 1202, 1452 +924 <-> 866 +925 <-> 296, 1270 +926 <-> 280, 776, 1170, 1788, 1970 +927 <-> 712 +928 <-> 362, 595, 1103 +929 <-> 929 +930 <-> 65, 526, 1256, 1500, 1722 +931 <-> 183, 280, 1484 +932 <-> 1737 +933 <-> 299 +934 <-> 1387, 1851 +935 <-> 136, 935, 1537, 1775 +936 <-> 353 +937 <-> 689, 1347 +938 <-> 381, 566 +939 <-> 56, 1762 +940 <-> 1559, 1860 +941 <-> 1504, 1671, 1723, 1724 +942 <-> 1293 +943 <-> 21, 593 +944 <-> 1335 +945 <-> 1650 +946 <-> 1556 +947 <-> 26 +948 <-> 744, 879 +949 <-> 717, 1604 +950 <-> 1201, 1322 +951 <-> 794 +952 <-> 668, 1371 +953 <-> 1272 +954 <-> 954 +955 <-> 74 +956 <-> 648, 1870 +957 <-> 44, 1769 +958 <-> 13, 1388, 1660 +959 <-> 959 +960 <-> 153 +961 <-> 910 +962 <-> 17, 805 +963 <-> 339, 1783 +964 <-> 1100 +965 <-> 811, 1677 +966 <-> 966 +967 <-> 304, 1029, 1269, 1910 +968 <-> 81, 1091 +969 <-> 1379, 1693 +970 <-> 1289 +971 <-> 971 +972 <-> 70 +973 <-> 973 +974 <-> 663, 738, 1005 +975 <-> 922 +976 <-> 319 +977 <-> 585, 631 +978 <-> 756, 1628 +979 <-> 687, 979 +980 <-> 1151, 1317 +981 <-> 1199, 1902 +982 <-> 1223 +983 <-> 1931 +984 <-> 2, 409 +985 <-> 985 +986 <-> 358, 897, 1564 +987 <-> 987, 1644 +988 <-> 36, 837 +989 <-> 1275 +990 <-> 990, 1295 +991 <-> 207, 1415 +992 <-> 1242, 1397, 1467, 1579 +993 <-> 1042, 1767 +994 <-> 633, 1595, 1813 +995 <-> 194 +996 <-> 1096, 1369 +997 <-> 1231, 1973 +998 <-> 1367 +999 <-> 999 +1000 <-> 684, 1078 +1001 <-> 219 +1002 <-> 1442 +1003 <-> 441 +1004 <-> 558, 628, 678 +1005 <-> 475, 974 +1006 <-> 103, 345, 604 +1007 <-> 490, 1274 +1008 <-> 1708, 1819 +1009 <-> 1009, 1118 +1010 <-> 1223, 1803 +1011 <-> 1867 +1012 <-> 299, 1923 +1013 <-> 561, 1187, 1477, 1926 +1014 <-> 1861 +1015 <-> 446, 1015, 1858 +1016 <-> 889 +1017 <-> 1435 +1018 <-> 42, 98 +1019 <-> 767, 898, 1764 +1020 <-> 1020 +1021 <-> 1666 +1022 <-> 347, 1022, 1310 +1023 <-> 26, 813, 1109, 1538, 1988 +1024 <-> 195, 738 +1025 <-> 616 +1026 <-> 722, 855, 1337, 1415 +1027 <-> 241, 1309 +1028 <-> 1028 +1029 <-> 745, 967 +1030 <-> 1577, 1689 +1031 <-> 1031 +1032 <-> 125 +1033 <-> 604, 1127, 1194 +1034 <-> 192 +1035 <-> 1992 +1036 <-> 707, 1509 +1037 <-> 1347 +1038 <-> 389 +1039 <-> 723, 1535 +1040 <-> 826, 1245, 1918 +1041 <-> 281 +1042 <-> 993 +1043 <-> 67, 769, 1142 +1044 <-> 1690 +1045 <-> 287 +1046 <-> 1561 +1047 <-> 4 +1048 <-> 472, 1703 +1049 <-> 632, 1816 +1050 <-> 1157, 1899 +1051 <-> 1818 +1052 <-> 347, 1904 +1053 <-> 593, 845, 899 +1054 <-> 1983 +1055 <-> 1599 +1056 <-> 41, 320, 325, 1567 +1057 <-> 1372, 1569 +1058 <-> 185 +1059 <-> 1112, 1939 +1060 <-> 576, 1314, 1557, 1751, 1752 +1061 <-> 1285 +1062 <-> 1162, 1338, 1739 +1063 <-> 1291 +1064 <-> 132 +1065 <-> 769, 1317 +1066 <-> 510 +1067 <-> 405, 1452, 1953 +1068 <-> 1200 +1069 <-> 1069 +1070 <-> 19 +1071 <-> 1361, 1382 +1072 <-> 1307, 1534 +1073 <-> 1282 +1074 <-> 1323, 1653 +1075 <-> 457 +1076 <-> 695, 1703 +1077 <-> 1180 +1078 <-> 434, 1000 +1079 <-> 733 +1080 <-> 130, 1757 +1081 <-> 202, 623 +1082 <-> 1082 +1083 <-> 506, 703, 1279 +1084 <-> 314, 1812 +1085 <-> 242 +1086 <-> 350 +1087 <-> 1524 +1088 <-> 706, 1900 +1089 <-> 788 +1090 <-> 1260 +1091 <-> 968, 1522 +1092 <-> 173, 631, 1850 +1093 <-> 1093, 1390 +1094 <-> 182, 390 +1095 <-> 756 +1096 <-> 996 +1097 <-> 448 +1098 <-> 464, 612 +1099 <-> 292, 486 +1100 <-> 964, 1326 +1101 <-> 907, 1799 +1102 <-> 1927 +1103 <-> 928, 1103 +1104 <-> 252 +1105 <-> 166, 297 +1106 <-> 1106, 1896 +1107 <-> 1107 +1108 <-> 459 +1109 <-> 1023 +1110 <-> 422, 801 +1111 <-> 456, 685 +1112 <-> 262, 1059 +1113 <-> 1267 +1114 <-> 485 +1115 <-> 1115, 1827 +1116 <-> 1596 +1117 <-> 395, 449, 1382 +1118 <-> 1009 +1119 <-> 281, 1670 +1120 <-> 434, 1165 +1121 <-> 167, 1121 +1122 <-> 1809 +1123 <-> 895 +1124 <-> 283 +1125 <-> 499, 720, 1308 +1126 <-> 790, 1526 +1127 <-> 1033 +1128 <-> 1500 +1129 <-> 168, 418, 1642, 1947 +1130 <-> 1454 +1131 <-> 1683 +1132 <-> 517, 1784 +1133 <-> 288 +1134 <-> 314, 749, 1586 +1135 <-> 102 +1136 <-> 1136 +1137 <-> 680 +1138 <-> 1755 +1139 <-> 654 +1140 <-> 1140 +1141 <-> 1141 +1142 <-> 1043, 1862 +1143 <-> 1550 +1144 <-> 535, 1144, 1849 +1145 <-> 209, 671, 815, 1268 +1146 <-> 145 +1147 <-> 134 +1148 <-> 774 +1149 <-> 36, 497, 499, 1652 +1150 <-> 271, 1150 +1151 <-> 51, 980, 1651 +1152 <-> 533 +1153 <-> 398, 757 +1154 <-> 1313 +1155 <-> 145, 617, 1336, 1721 +1156 <-> 1838 +1157 <-> 10, 1050 +1158 <-> 895 +1159 <-> 532, 1708 +1160 <-> 1357 +1161 <-> 1200, 1999 +1162 <-> 820, 1062 +1163 <-> 1821 +1164 <-> 488, 1572 +1165 <-> 515, 1120 +1166 <-> 36, 836 +1167 <-> 664 +1168 <-> 11, 515, 771, 1967 +1169 <-> 358 +1170 <-> 926 +1171 <-> 1666, 1827 +1172 <-> 262, 1439 +1173 <-> 123, 355, 1341 +1174 <-> 1204, 1525 +1175 <-> 530 +1176 <-> 501, 654 +1177 <-> 1311, 1796 +1178 <-> 186, 1536, 1551, 1853 +1179 <-> 1822, 1947 +1180 <-> 1077, 1264 +1181 <-> 163, 1181 +1182 <-> 225 +1183 <-> 1237, 1715, 1798 +1184 <-> 41 +1185 <-> 297, 1185 +1186 <-> 909 +1187 <-> 619, 1013 +1188 <-> 1698 +1189 <-> 488, 560 +1190 <-> 1834, 1933 +1191 <-> 402, 859, 1191 +1192 <-> 1839 +1193 <-> 608, 1438 +1194 <-> 435, 1033, 1754 +1195 <-> 46, 1828 +1196 <-> 612, 911, 1975 +1197 <-> 1503, 1854 +1198 <-> 733, 826 +1199 <-> 981 +1200 <-> 493, 872, 1068, 1161 +1201 <-> 874, 950 +1202 <-> 923 +1203 <-> 40, 729, 1719 +1204 <-> 542, 557, 1174 +1205 <-> 1332 +1206 <-> 148, 182 +1207 <-> 1207 +1208 <-> 91, 273, 413, 658, 1234 +1209 <-> 1995 +1210 <-> 576, 703, 796 +1211 <-> 1227, 1891 +1212 <-> 338, 1362 +1213 <-> 6 +1214 <-> 589, 732 +1215 <-> 4, 100, 444, 1842 +1216 <-> 497, 1745 +1217 <-> 409, 1354 +1218 <-> 607 +1219 <-> 29, 484, 1712 +1220 <-> 570 +1221 <-> 302, 1429 +1222 <-> 625, 1412 +1223 <-> 260, 982, 1010, 1591 +1224 <-> 9, 258, 278, 1506, 1893 +1225 <-> 1906 +1226 <-> 1226 +1227 <-> 1211 +1228 <-> 1773 +1229 <-> 18 +1230 <-> 908 +1231 <-> 701, 997 +1232 <-> 348, 349 +1233 <-> 59 +1234 <-> 1208 +1235 <-> 817, 1994 +1236 <-> 508 +1237 <-> 1183 +1238 <-> 1529 +1239 <-> 540, 1524, 1552 +1240 <-> 512 +1241 <-> 1241 +1242 <-> 992, 1685 +1243 <-> 1934 +1244 <-> 1574, 1839 +1245 <-> 727, 1040 +1246 <-> 1380 +1247 <-> 1506, 1923 +1248 <-> 50, 1610 +1249 <-> 674 +1250 <-> 485 +1251 <-> 444, 655, 1718 +1252 <-> 266, 1862 +1253 <-> 645, 1709 +1254 <-> 1254 +1255 <-> 922, 1255, 1341 +1256 <-> 930, 1346 +1257 <-> 1465, 1844 +1258 <-> 763 +1259 <-> 335, 590, 1259 +1260 <-> 129, 1090 +1261 <-> 652, 1261, 1838 +1262 <-> 1262, 1912 +1263 <-> 7, 1438, 1554 +1264 <-> 338, 1180 +1265 <-> 269, 1265 +1266 <-> 861, 1281, 1423 +1267 <-> 612, 1113, 1289 +1268 <-> 1145 +1269 <-> 967 +1270 <-> 94, 215, 925, 1860 +1271 <-> 1376 +1272 <-> 223, 953 +1273 <-> 1301 +1274 <-> 1007, 1860 +1275 <-> 216, 393, 989, 1275 +1276 <-> 470 +1277 <-> 288 +1278 <-> 869 +1279 <-> 1083, 1755 +1280 <-> 1588 +1281 <-> 1266 +1282 <-> 677, 1073, 1575, 1625 +1283 <-> 1571 +1284 <-> 1828 +1285 <-> 847, 1061, 1641 +1286 <-> 1494, 1649, 1889 +1287 <-> 159 +1288 <-> 142, 1288 +1289 <-> 970, 1267, 1668 +1290 <-> 406 +1291 <-> 728, 879, 1063, 1885 +1292 <-> 1407 +1293 <-> 942, 1318, 1459 +1294 <-> 311, 1754 +1295 <-> 990, 1512 +1296 <-> 130, 479, 508 +1297 <-> 533, 559 +1298 <-> 1839 +1299 <-> 70 +1300 <-> 37, 1886, 1998 +1301 <-> 1273, 1340 +1302 <-> 317, 674, 1485 +1303 <-> 161, 1624 +1304 <-> 1304 +1305 <-> 1410 +1306 <-> 744 +1307 <-> 20, 870, 1072 +1308 <-> 194, 212, 1125 +1309 <-> 251, 1027 +1310 <-> 22, 1022, 1777 +1311 <-> 1177 +1312 <-> 786 +1313 <-> 1154, 1706 +1314 <-> 1060 +1315 <-> 683, 745 +1316 <-> 1793, 1898 +1317 <-> 523, 980, 1065, 1787 +1318 <-> 1293 +1319 <-> 1319 +1320 <-> 1320 +1321 <-> 206 +1322 <-> 950, 1957 +1323 <-> 1074, 1823 +1324 <-> 352 +1325 <-> 875, 1740 +1326 <-> 493, 1100 +1327 <-> 701, 1633 +1328 <-> 1, 55 +1329 <-> 1633 +1330 <-> 503, 1687, 1782 +1331 <-> 376, 1531, 1766 +1332 <-> 436, 705, 1205 +1333 <-> 565 +1334 <-> 1805 +1335 <-> 408, 944 +1336 <-> 917, 1155 +1337 <-> 1026 +1338 <-> 527, 1062 +1339 <-> 517, 853 +1340 <-> 601, 1301, 1708 +1341 <-> 1173, 1255 +1342 <-> 684 +1343 <-> 210 +1344 <-> 121, 483 +1345 <-> 175 +1346 <-> 578, 1256 +1347 <-> 937, 1037, 1735 +1348 <-> 685 +1349 <-> 275, 1594 +1350 <-> 127, 130 +1351 <-> 485 +1352 <-> 884, 1352 +1353 <-> 1604, 1800 +1354 <-> 1217 +1355 <-> 1355, 1985 +1356 <-> 855, 1840 +1357 <-> 651, 1160, 1388 +1358 <-> 92 +1359 <-> 112 +1360 <-> 1455 +1361 <-> 1071, 1909 +1362 <-> 304, 1212 +1363 <-> 791 +1364 <-> 161, 1426 +1365 <-> 1365 +1366 <-> 1366, 1433 +1367 <-> 133, 998 +1368 <-> 851 +1369 <-> 12, 996, 1425 +1370 <-> 665 +1371 <-> 13, 735, 952, 1371, 1857 +1372 <-> 613, 1057 +1373 <-> 638, 1511 +1374 <-> 230, 1593 +1375 <-> 104 +1376 <-> 179, 1271, 1639 +1377 <-> 291 +1378 <-> 1919 +1379 <-> 575, 969 +1380 <-> 1246, 1501, 1903 +1381 <-> 73, 825, 1922 +1382 <-> 1071, 1117, 1541, 1810 +1383 <-> 111 +1384 <-> 457 +1385 <-> 1878, 1966 +1386 <-> 1396 +1387 <-> 229, 934, 1853 +1388 <-> 958, 1357, 1424 +1389 <-> 531 +1390 <-> 1093, 1603 +1391 <-> 408 +1392 <-> 446 +1393 <-> 411 +1394 <-> 1866 +1395 <-> 450, 1851 +1396 <-> 519, 1386 +1397 <-> 79, 568, 992 +1398 <-> 224 +1399 <-> 1443, 1799, 1915 +1400 <-> 744 +1401 <-> 1685 +1402 <-> 892 +1403 <-> 1714 +1404 <-> 632 +1405 <-> 911, 1532 +1406 <-> 233, 1606 +1407 <-> 700, 1292 +1408 <-> 431, 1408, 1416 +1409 <-> 211, 472 +1410 <-> 821, 1305 +1411 <-> 1653, 1993 +1412 <-> 628, 1222 +1413 <-> 473, 816 +1414 <-> 451 +1415 <-> 991, 1026 +1416 <-> 1408 +1417 <-> 752 +1418 <-> 423, 897 +1419 <-> 2, 30 +1420 <-> 1420 +1421 <-> 808 +1422 <-> 58, 104 +1423 <-> 1266 +1424 <-> 1388 +1425 <-> 1369 +1426 <-> 737, 1364, 1847, 1913 +1427 <-> 246, 274 +1428 <-> 1964 +1429 <-> 76, 806, 1221 +1430 <-> 1430 +1431 <-> 322 +1432 <-> 1719 +1433 <-> 1366, 1988 +1434 <-> 89, 106 +1435 <-> 1017, 1730 +1436 <-> 1997 +1437 <-> 317, 352 +1438 <-> 1193, 1263 +1439 <-> 1172 +1440 <-> 344 +1441 <-> 37 +1442 <-> 1002, 1860 +1443 <-> 1399 +1444 <-> 31, 298 +1445 <-> 823, 854 +1446 <-> 113, 403 +1447 <-> 1508, 1720 +1448 <-> 766, 1791 +1449 <-> 527 +1450 <-> 134 +1451 <-> 88, 571 +1452 <-> 923, 1067 +1453 <-> 770 +1454 <-> 95, 823, 1130, 1454 +1455 <-> 1360, 1533 +1456 <-> 1456, 1489, 1529 +1457 <-> 114, 149, 1956 +1458 <-> 382, 631, 1458 +1459 <-> 570, 1293 +1460 <-> 202, 369 +1461 <-> 300 +1462 <-> 1636 +1463 <-> 393, 1659, 1939 +1464 <-> 31 +1465 <-> 3, 323, 547, 1257, 1732 +1466 <-> 320 +1467 <-> 723, 992, 1706 +1468 <-> 154, 843 +1469 <-> 713 +1470 <-> 354, 699 +1471 <-> 1471 +1472 <-> 825 +1473 <-> 715 +1474 <-> 745 +1475 <-> 645 +1476 <-> 622, 758 +1477 <-> 1013, 1645, 1669 +1478 <-> 711 +1479 <-> 734 +1480 <-> 650 +1481 <-> 1481 +1482 <-> 310, 871 +1483 <-> 918, 1504 +1484 <-> 931 +1485 <-> 336, 421, 775, 822, 1302 +1486 <-> 157, 1631 +1487 <-> 236, 437, 788, 1980 +1488 <-> 1560 +1489 <-> 739, 1456 +1490 <-> 383 +1491 <-> 535 +1492 <-> 471, 614 +1493 <-> 743 +1494 <-> 565, 1286 +1495 <-> 1627 +1496 <-> 761, 1496 +1497 <-> 249, 425, 851 +1498 <-> 749 +1499 <-> 231 +1500 <-> 930, 1128 +1501 <-> 390, 1380 +1502 <-> 1713 +1503 <-> 152, 880, 1197 +1504 <-> 47, 876, 941, 1483, 1945 +1505 <-> 295, 530, 753 +1506 <-> 818, 1224, 1247 +1507 <-> 141, 216, 1565, 1726 +1508 <-> 647, 1447, 1521, 1590 +1509 <-> 580, 1036, 1605, 1609 +1510 <-> 40, 1885 +1511 <-> 858, 1373 +1512 <-> 1295 +1513 <-> 78, 430 +1514 <-> 1772 +1515 <-> 153 +1516 <-> 144, 260, 1818 +1517 <-> 32, 1616, 1806 +1518 <-> 472 +1519 <-> 259 +1520 <-> 94, 1542 +1521 <-> 1508 +1522 <-> 313, 1091, 1631 +1523 <-> 685 +1524 <-> 241, 1087, 1239 +1525 <-> 1174 +1526 <-> 1126 +1527 <-> 1835 +1528 <-> 803 +1529 <-> 460, 833, 1238, 1456 +1530 <-> 1784 +1531 <-> 1331 +1532 <-> 629, 1405 +1533 <-> 470, 1455, 1533, 1796 +1534 <-> 1072 +1535 <-> 605, 724, 1039 +1536 <-> 1178 +1537 <-> 273, 801, 935 +1538 <-> 1023, 1734 +1539 <-> 713 +1540 <-> 1748 +1541 <-> 1382, 1683 +1542 <-> 1520 +1543 <-> 781 +1544 <-> 1631 +1545 <-> 1910 +1546 <-> 1942 +1547 <-> 260 +1548 <-> 581, 747 +1549 <-> 804 +1550 <-> 159, 1143 +1551 <-> 1178 +1552 <-> 461, 1239, 1846 +1553 <-> 1553, 1982 +1554 <-> 68, 85, 1263, 1597 +1555 <-> 1713, 1931 +1556 <-> 946, 1556 +1557 <-> 718, 1060 +1558 <-> 783 +1559 <-> 640, 940 +1560 <-> 1488, 1806, 1898, 1949 +1561 <-> 441, 1046 +1562 <-> 715, 1889 +1563 <-> 552 +1564 <-> 986 +1565 <-> 1507, 1689 +1566 <-> 1570 +1567 <-> 1056 +1568 <-> 3, 371 +1569 <-> 119, 1057, 1852 +1570 <-> 1566, 1570 +1571 <-> 1283, 1736 +1572 <-> 569, 1164, 1995 +1573 <-> 1573, 1784, 1987 +1574 <-> 1244, 1574 +1575 <-> 1282, 1575, 1866 +1576 <-> 123 +1577 <-> 1030 +1578 <-> 289, 710 +1579 <-> 992, 1684 +1580 <-> 4 +1581 <-> 1581 +1582 <-> 128, 883 +1583 <-> 57 +1584 <-> 116 +1585 <-> 637 +1586 <-> 1134 +1587 <-> 1587 +1588 <-> 159, 1280 +1589 <-> 1915 +1590 <-> 136, 1508 +1591 <-> 1223 +1592 <-> 293, 1891 +1593 <-> 853, 1374 +1594 <-> 1349, 1886 +1595 <-> 994, 1595 +1596 <-> 364, 1116 +1597 <-> 1554 +1598 <-> 1729 +1599 <-> 583, 1055 +1600 <-> 147, 458, 1600 +1601 <-> 1894 +1602 <-> 116 +1603 <-> 1390 +1604 <-> 481, 657, 949, 1353, 1983 +1605 <-> 115, 668, 863, 1509 +1606 <-> 1406 +1607 <-> 261, 410, 821 +1608 <-> 690 +1609 <-> 1509 +1610 <-> 673, 1248 +1611 <-> 118, 1788 +1612 <-> 1854 +1613 <-> 547 +1614 <-> 547, 1807 +1615 <-> 479 +1616 <-> 222, 1517 +1617 <-> 880, 1989 +1618 <-> 826 +1619 <-> 860, 1807 +1620 <-> 291 +1621 <-> 618, 1957 +1622 <-> 535 +1623 <-> 480, 531 +1624 <-> 1303 +1625 <-> 223, 1282 +1626 <-> 503, 604 +1627 <-> 1495, 1933 +1628 <-> 288, 978 +1629 <-> 1629 +1630 <-> 465, 1872 +1631 <-> 1486, 1522, 1544 +1632 <-> 196 +1633 <-> 1327, 1329 +1634 <-> 123, 661, 740 +1635 <-> 139 +1636 <-> 913, 1462, 1752 +1637 <-> 404, 522 +1638 <-> 1779, 1813 +1639 <-> 33, 190, 1376, 1639 +1640 <-> 1816 +1641 <-> 554, 1285 +1642 <-> 1129 +1643 <-> 71, 1844 +1644 <-> 171, 987 +1645 <-> 1477 +1646 <-> 16, 199 +1647 <-> 1702 +1648 <-> 895 +1649 <-> 1286 +1650 <-> 344, 886, 945 +1651 <-> 799, 1151 +1652 <-> 1149, 1961, 1984 +1653 <-> 222, 1074, 1411 +1654 <-> 108, 553 +1655 <-> 35, 156, 226, 1992 +1656 <-> 537, 655 +1657 <-> 105, 609 +1658 <-> 1658 +1659 <-> 519, 1463 +1660 <-> 958 +1661 <-> 290, 1929 +1662 <-> 435 +1663 <-> 1855 +1664 <-> 345 +1665 <-> 554 +1666 <-> 1021, 1171 +1667 <-> 662, 687 +1668 <-> 1289 +1669 <-> 842, 1477, 1795, 1975 +1670 <-> 1119, 1921 +1671 <-> 941 +1672 <-> 115 +1673 <-> 385 +1674 <-> 518 +1675 <-> 247, 676 +1676 <-> 509, 1987 +1677 <-> 965, 1677 +1678 <-> 151, 1692 +1679 <-> 541 +1680 <-> 1680 +1681 <-> 221, 789 +1682 <-> 1736, 1767, 1947 +1683 <-> 1131, 1541 +1684 <-> 1579 +1685 <-> 1242, 1401 +1686 <-> 1736 +1687 <-> 680, 1330 +1688 <-> 881, 1829 +1689 <-> 1030, 1565 +1690 <-> 778, 1044, 1900 +1691 <-> 28, 75 +1692 <-> 627, 1678 +1693 <-> 122, 400, 671, 969 +1694 <-> 58, 61 +1695 <-> 741 +1696 <-> 224, 1958 +1697 <-> 1935 +1698 <-> 301, 1188 +1699 <-> 29, 37 +1700 <-> 742, 1883 +1701 <-> 662 +1702 <-> 441, 1647 +1703 <-> 1048, 1076 +1704 <-> 185 +1705 <-> 715 +1706 <-> 1313, 1467 +1707 <-> 867 +1708 <-> 1008, 1159, 1340 +1709 <-> 560, 561, 1253, 1976 +1710 <-> 840 +1711 <-> 1711 +1712 <-> 12, 1219 +1713 <-> 631, 1502, 1555 +1714 <-> 1403, 1714, 1902 +1715 <-> 1183 +1716 <-> 79 +1717 <-> 738 +1718 <-> 602, 1251 +1719 <-> 1203, 1432 +1720 <-> 1447 +1721 <-> 1155 +1722 <-> 930 +1723 <-> 941 +1724 <-> 941 +1725 <-> 432 +1726 <-> 1507 +1727 <-> 397 +1728 <-> 1728, 1937 +1729 <-> 1598, 1913 +1730 <-> 105, 757, 768, 1435, 1730 +1731 <-> 789 +1732 <-> 795, 1465 +1733 <-> 551, 1765, 1835 +1734 <-> 1538 +1735 <-> 755, 1347 +1736 <-> 1571, 1682, 1686 +1737 <-> 932, 1795 +1738 <-> 329, 1738 +1739 <-> 267, 1062, 1848 +1740 <-> 1325 +1741 <-> 326, 541, 1952 +1742 <-> 344, 754 +1743 <-> 75, 253, 507 +1744 <-> 288 +1745 <-> 1216 +1746 <-> 92, 138 +1747 <-> 333 +1748 <-> 182, 1540 +1749 <-> 853 +1750 <-> 88 +1751 <-> 363, 1060 +1752 <-> 1060, 1636 +1753 <-> 433, 583, 1873 +1754 <-> 1194, 1294 +1755 <-> 1138, 1279 +1756 <-> 538, 636 +1757 <-> 1080 +1758 <-> 472, 514 +1759 <-> 284 +1760 <-> 1760 +1761 <-> 326, 620 +1762 <-> 648, 939, 1989 +1763 <-> 383 +1764 <-> 599, 1019, 1941 +1765 <-> 1733 +1766 <-> 289, 365, 1331 +1767 <-> 993, 1682, 1767 +1768 <-> 1768, 1859 +1769 <-> 957 +1770 <-> 288 +1771 <-> 1875 +1772 <-> 1514, 1772 +1773 <-> 801, 1228 +1774 <-> 0 +1775 <-> 935 +1776 <-> 133 +1777 <-> 1310 +1778 <-> 17, 320 +1779 <-> 465, 1638 +1780 <-> 1906 +1781 <-> 1969 +1782 <-> 1330 +1783 <-> 97, 963, 1960, 1983 +1784 <-> 1132, 1530, 1573 +1785 <-> 422 +1786 <-> 1786 +1787 <-> 854, 1317 +1788 <-> 926, 1611 +1789 <-> 586, 1829 +1790 <-> 74, 1790 +1791 <-> 52, 109, 1448 +1792 <-> 1860 +1793 <-> 1316, 1981 +1794 <-> 138 +1795 <-> 1669, 1737, 1861 +1796 <-> 1177, 1533 +1797 <-> 327, 875 +1798 <-> 852, 1183 +1799 <-> 1101, 1399, 1964 +1800 <-> 491, 641, 807, 1353 +1801 <-> 20, 455 +1802 <-> 123 +1803 <-> 415, 1010 +1804 <-> 1804 +1805 <-> 1334, 1926 +1806 <-> 1517, 1560 +1807 <-> 1614, 1619 +1808 <-> 261, 643 +1809 <-> 145, 1122 +1810 <-> 1382 +1811 <-> 60 +1812 <-> 1084 +1813 <-> 213, 994, 1638 +1814 <-> 14, 355 +1815 <-> 841, 1996 +1816 <-> 1049, 1640 +1817 <-> 388 +1818 <-> 1051, 1516 +1819 <-> 1008 +1820 <-> 403 +1821 <-> 350, 1163 +1822 <-> 669, 1179, 1927 +1823 <-> 1323 +1824 <-> 667, 824, 1879 +1825 <-> 608, 839, 876, 1965 +1826 <-> 473, 907 +1827 <-> 1115, 1171 +1828 <-> 440, 1195, 1284, 1913 +1829 <-> 275, 1688, 1789 +1830 <-> 1830 +1831 <-> 1831 +1832 <-> 248, 726 +1833 <-> 1833 +1834 <-> 1190 +1835 <-> 639, 1527, 1733 +1836 <-> 250, 1836 +1837 <-> 577, 1970 +1838 <-> 1156, 1261 +1839 <-> 1192, 1244, 1298 +1840 <-> 1356 +1841 <-> 81 +1842 <-> 738, 1215 +1843 <-> 1843 +1844 <-> 383, 1257, 1643 +1845 <-> 260, 451 +1846 <-> 1552 +1847 <-> 755, 879, 1426 +1848 <-> 38, 1739 +1849 <-> 468, 1144 +1850 <-> 1092 +1851 <-> 934, 1395 +1852 <-> 198, 1569 +1853 <-> 718, 1178, 1387 +1854 <-> 588, 1197, 1612 +1855 <-> 162, 734, 1663 +1856 <-> 236, 751 +1857 <-> 1371 +1858 <-> 1015 +1859 <-> 1768 +1860 <-> 940, 1270, 1274, 1442, 1792 +1861 <-> 1014, 1795 +1862 <-> 1142, 1252 +1863 <-> 281 +1864 <-> 717 +1865 <-> 1865 +1866 <-> 574, 602, 1394, 1575 +1867 <-> 707, 1011 +1868 <-> 659, 1868 +1869 <-> 173, 1991 +1870 <-> 391, 828, 956, 1880 +1871 <-> 189, 692 +1872 <-> 1630 +1873 <-> 42, 1753 +1874 <-> 883 +1875 <-> 11, 1771 +1876 <-> 158 +1877 <-> 186 +1878 <-> 796, 1385 +1879 <-> 486, 1824 +1880 <-> 920, 1870 +1881 <-> 433, 573, 905 +1882 <-> 625, 1954 +1883 <-> 300, 1700 +1884 <-> 1884 +1885 <-> 1291, 1510 +1886 <-> 19, 209, 1300, 1594 +1887 <-> 277 +1888 <-> 85 +1889 <-> 489, 1286, 1562 +1890 <-> 170, 832 +1891 <-> 1211, 1592, 1973 +1892 <-> 611, 697, 914 +1893 <-> 1224 +1894 <-> 775, 1601 +1895 <-> 308, 323, 618 +1896 <-> 1106 +1897 <-> 118, 368, 408 +1898 <-> 1316, 1560, 1944 +1899 <-> 463, 1050 +1900 <-> 1088, 1690, 1951 +1901 <-> 16, 27 +1902 <-> 981, 1714 +1903 <-> 1380 +1904 <-> 278, 1052 +1905 <-> 20 +1906 <-> 671, 1225, 1780 +1907 <-> 800 +1908 <-> 583 +1909 <-> 1361, 1940 +1910 <-> 134, 967, 1545 +1911 <-> 1973 +1912 <-> 1262 +1913 <-> 832, 1426, 1729, 1828 +1914 <-> 1914 +1915 <-> 1399, 1589 +1916 <-> 650, 1916 +1917 <-> 726, 1917 +1918 <-> 1040 +1919 <-> 196, 1378, 1919 +1920 <-> 1, 218 +1921 <-> 1670, 1952 +1922 <-> 1381 +1923 <-> 892, 1012, 1247 +1924 <-> 373, 904 +1925 <-> 210, 1935 +1926 <-> 543, 1013, 1805 +1927 <-> 1102, 1822 +1928 <-> 346, 1928 +1929 <-> 1661 +1930 <-> 19 +1931 <-> 983, 1555 +1932 <-> 685 +1933 <-> 16, 1190, 1627, 1933 +1934 <-> 288, 1243 +1935 <-> 535, 1697, 1925 +1936 <-> 295 +1937 <-> 112, 157, 1728 +1938 <-> 293 +1939 <-> 689, 1059, 1463 +1940 <-> 616, 1909 +1941 <-> 1764 +1942 <-> 243, 256, 1546 +1943 <-> 1950 +1944 <-> 260, 1898 +1945 <-> 1504 +1946 <-> 1946 +1947 <-> 87, 1129, 1179, 1682 +1948 <-> 294 +1949 <-> 1560 +1950 <-> 21, 1943 +1951 <-> 407, 1900 +1952 <-> 1741, 1921 +1953 <-> 1067 +1954 <-> 696, 1882 +1955 <-> 754 +1956 <-> 1457 +1957 <-> 1322, 1621 +1958 <-> 48, 708, 1696 +1959 <-> 1959 +1960 <-> 389, 1783 +1961 <-> 1652 +1962 <-> 29 +1963 <-> 914 +1964 <-> 1428, 1799 +1965 <-> 1825 +1966 <-> 1385 +1967 <-> 1168 +1968 <-> 265, 475 +1969 <-> 4, 1781 +1970 <-> 315, 926, 1837 +1971 <-> 242, 545, 1971 +1972 <-> 1972 +1973 <-> 997, 1891, 1911 +1974 <-> 885 +1975 <-> 1196, 1669 +1976 <-> 1709 +1977 <-> 1977 +1978 <-> 1978 +1979 <-> 1979 +1980 <-> 598, 1487 +1981 <-> 1793 +1982 <-> 1553 +1983 <-> 1054, 1604, 1783 +1984 <-> 731, 1652 +1985 <-> 1355 +1986 <-> 795 +1987 <-> 1573, 1676 +1988 <-> 495, 1023, 1433 +1989 <-> 1617, 1762 +1990 <-> 376 +1991 <-> 1869 +1992 <-> 1035, 1655 +1993 <-> 1411 +1994 <-> 1235, 1994 +1995 <-> 57, 1209, 1572 +1996 <-> 181, 1815 +1997 <-> 395, 1436 +1998 <-> 1300 +1999 <-> 175, 1161 diff --git a/2017/inputs/day_13.txt b/2017/inputs/day_13.txt new file mode 100644 index 0000000..87bfdb7 --- /dev/null +++ b/2017/inputs/day_13.txt @@ -0,0 +1,43 @@ +0: 3 +1: 2 +2: 4 +4: 4 +6: 5 +8: 6 +10: 6 +12: 6 +14: 6 +16: 8 +18: 8 +20: 8 +22: 8 +24: 10 +26: 8 +28: 8 +30: 12 +32: 14 +34: 12 +36: 10 +38: 12 +40: 12 +42: 9 +44: 12 +46: 12 +48: 12 +50: 12 +52: 14 +54: 14 +56: 14 +58: 12 +60: 14 +62: 14 +64: 12 +66: 14 +70: 14 +72: 14 +74: 14 +76: 14 +80: 18 +88: 20 +90: 14 +98: 17 diff --git a/2017/inputs/day_13_example.txt b/2017/inputs/day_13_example.txt new file mode 100644 index 0000000..0de4bec --- /dev/null +++ b/2017/inputs/day_13_example.txt @@ -0,0 +1,5 @@ +0: 3 +1: 2 +4: 4 +6: 4 + diff --git a/2017/inputs/day_14.txt b/2017/inputs/day_14.txt new file mode 100644 index 0000000..1155654 --- /dev/null +++ b/2017/inputs/day_14.txt @@ -0,0 +1,2 @@ +uugsqrei + diff --git a/2017/inputs/day_14_example.txt b/2017/inputs/day_14_example.txt new file mode 100644 index 0000000..e0ffae2 --- /dev/null +++ b/2017/inputs/day_14_example.txt @@ -0,0 +1 @@ +flqrgnkx diff --git a/2017/inputs/day_15.txt b/2017/inputs/day_15.txt new file mode 100644 index 0000000..ffb6d14 --- /dev/null +++ b/2017/inputs/day_15.txt @@ -0,0 +1,2 @@ +Generator A starts with 591 +Generator B starts with 393 diff --git a/2017/inputs/day_16.txt b/2017/inputs/day_16.txt new file mode 100644 index 0000000..8e74751 --- /dev/null +++ b/2017/inputs/day_16.txt @@ -0,0 +1 @@ +x3/4,pm/e,x15/7,pp/l,x5/8,s15,x2/6,s9,x0/4,s7,x8/12,pc/b,x2/14,pe/d,x10/11,pg/o,x9/14,ph/n,x15/8,s13,pe/i,x3/7,s2,pd/b,x4/15,s11,x0/14,s10,x7/3,s8,x2/1,pj/i,s8,x10/14,s5,x4/1,pa/h,s11,x12/6,s1,x1/14,s11,x5/12,s4,pn/b,x7/9,pj/l,x1/8,pd/e,s6,pp/g,x10/2,pi/o,x15/5,pp/l,x6/13,s3,x5/12,pk/f,x1/8,s4,x11/10,s10,x4/15,pe/n,x1/5,s14,x7/2,pc/i,x4/10,pj/p,x6/15,s12,x5/0,pa/n,x8/12,s14,x3/5,pb/d,x4/12,s3,x9/6,pg/h,x3/1,s5,x4/10,pm/f,x12/2,s11,x15/13,pa/g,x0/2,s13,pj/i,s13,x6/10,pn/a,x2/1,pm/f,x10/12,s4,pi/c,x14/13,s4,x15/0,s7,x14/8,s5,x5/2,pe/d,x3/9,s14,x7/0,s10,x6/14,s8,x3/15,pn/j,x2/1,pf/a,x13/10,pe/m,x8/0,s2,x4/7,pc/l,s4,x2/0,s4,x3/4,s12,x11/2,s3,x5/8,s2,x4/6,pn/f,x15/5,s15,x4/12,s11,x1/13,pm/b,s13,pj/h,s15,x9/3,pd/l,x14/15,po/i,x10/7,pd/g,x11/13,s5,x9/14,s6,x1/0,s7,x5/8,s7,x0/11,s10,x7/12,s2,x8/9,s7,pb/j,x3/2,s10,x6/0,pe/l,x4/8,pf/p,x6/0,po/i,x7/2,s10,x10/3,pb/n,x2/13,s3,x15/3,ph/c,s14,x1/8,s10,x13/10,s5,x14/7,s7,x1/5,pk/f,x7/0,s11,x13/2,pc/d,x8/10,pi/h,x5/1,pe/f,s8,pa/j,x13/10,pc/f,s12,x9/12,pa/h,x7/0,s15,x8/13,s8,x15/11,pl/d,x2/8,s8,x3/14,s1,pa/e,x4/8,pp/n,x0/14,s3,x10/12,pg/c,x14/9,s2,x0/10,s11,x9/3,pn/a,x5/4,s15,x12/1,s6,x14/6,pf/c,s7,x15/5,s1,x12/13,s13,x9/4,s13,pb/p,x10/5,pe/c,x6/15,s7,x2/14,s15,x7/6,s13,x5/10,pb/l,x9/7,s14,x1/3,s12,x9/10,pn/h,x7/12,pc/k,x9/4,s2,x5/15,s10,x9/0,s2,x11/4,pg/e,x8/1,pm/h,x3/4,s14,x12/2,pi/d,x1/4,s15,x11/15,s14,x13/10,pb/o,x9/12,s5,x6/2,s13,x7/4,ph/m,s4,x8/12,pi/n,s15,x2/5,pj/p,x10/0,s4,x15/9,pn/m,x14/13,pd/b,x10/9,s5,x1/5,s2,x15/3,pe/j,s7,x0/6,s2,x8/9,s3,x2/3,s9,x5/12,pp/b,x6/3,pf/l,x9/0,s15,x3/2,s12,pb/m,x14/6,s12,x3/15,ph/f,x5/1,s13,x0/15,s8,x1/9,pa/p,s9,x15/13,s7,pf/b,x2/8,ph/g,x10/3,pi/o,x13/5,s1,x4/3,s7,x7/8,s13,x0/13,pn/h,x12/15,s14,x2/6,pc/d,x8/12,s5,x5/3,s10,x10/9,pb/p,x4/11,pm/k,x14/3,s12,po/h,x6/1,s14,x15/3,s13,x7/5,pe/i,x12/6,s8,x8/13,s2,x12/15,s15,x2/4,s13,x10/7,s11,x15/1,s4,x5/11,s8,x1/15,s15,x8/13,s8,x1/15,s5,pb/c,x11/10,s13,pm/p,x0/8,s12,x2/5,pj/i,x14/3,pl/o,x2/11,pe/j,x13/1,pa/l,x3/10,s11,x7/4,pj/m,x5/10,ph/g,x13/9,s5,x3/4,s1,x15/8,s4,x0/1,s5,pd/j,x9/12,s6,pk/g,x4/6,s4,x1/3,ph/n,s9,x4/10,pf/i,s10,pk/j,x3/1,s11,pe/h,x12/4,s6,x10/5,s12,x12/13,s15,x7/5,pn/l,x12/15,s9,x14/11,s8,x5/10,s2,x12/8,pc/b,x3/10,po/n,s14,x6/14,pl/j,x3/10,s4,x1/13,pe/c,x15/0,pa/b,x8/4,s4,pk/c,x5/12,s2,pi/g,x11/7,pe/l,x14/12,s5,x8/4,pg/f,x1/7,s8,x4/13,s12,x10/14,pc/h,x13/2,s1,x15/11,s3,x3/14,s5,pb/g,x2/7,s13,x9/3,s9,x13/1,s9,x3/14,s6,x5/0,s6,x8/14,s3,x11/13,s9,x1/5,s12,x4/2,pf/m,x6/5,pi/o,x15/2,s5,x12/5,pc/b,s2,x9/8,s9,x14/0,s6,x6/1,pe/n,x8/9,po/k,x15/4,pl/f,x11/14,s3,x7/15,s14,x14/12,pe/o,x15/7,s15,x6/1,s13,x13/12,pg/h,x5/0,pe/b,x1/9,s1,x8/2,s2,x3/1,pl/k,x9/0,s5,x8/2,pi/c,s1,x6/14,ph/p,x11/15,s4,x4/14,pn/i,x0/3,ph/p,x4/5,s6,x3/7,s3,pj/g,x0/4,po/k,x3/13,s14,x12/2,s8,x15/5,s11,x1/10,pj/e,x6/9,s14,x0/3,s12,x8/5,s10,x4/15,s13,x11/2,pi/m,x13/1,s13,x8/10,s9,x0/13,s14,x5/10,pd/a,x12/8,pg/h,s12,x9/0,s2,x5/2,pi/m,x6/0,s8,x15/13,s10,x6/2,pc/b,x10/4,s12,x15/1,s2,x12/5,pe/d,x10/8,pc/f,s10,x14/1,s9,x6/10,s2,x5/1,s2,x10/0,pp/l,x3/7,s8,x8/2,s13,x13/12,s11,x7/14,pc/k,x0/5,s15,x11/12,pa/g,x13/8,s11,x4/2,s14,x11/5,s8,x0/7,s15,x4/2,pj/n,x11/8,s10,pg/a,x6/10,s9,x2/11,po/h,x8/3,s12,pf/l,x0/1,s12,x10/9,pg/m,x5/2,pl/e,x12/6,s9,x1/14,s12,x10/5,pa/k,x6/12,pe/g,x10/7,pj/d,x13/0,s8,pm/k,x5/12,ph/a,x15/3,po/l,x9/6,pk/g,x7/3,s14,x4/14,s7,x10/11,pp/m,x8/14,s11,x15/0,s1,pe/d,x13/12,pa/k,x8/14,s5,x9/7,pm/g,x8/12,pd/j,x1/13,s9,x10/6,s2,x14/5,pf/e,s1,x4/2,s8,x3/13,pi/k,x11/10,pn/j,x3/7,s3,x1/12,s10,x14/2,s13,x0/10,s4,x12/8,pp/e,x6/7,s13,x5/13,s13,x3/10,s4,x9/12,s12,po/b,x5/4,s6,x0/10,s4,x12/5,pf/c,s10,x10/15,pe/l,x4/9,s14,x6/5,s1,x2/9,pb/m,s1,x4/8,s7,x1/12,s13,x0/14,pa/o,x12/7,pk/m,x1/10,s11,x15/13,s10,x9/0,s8,x1/7,s11,x9/12,s1,x10/13,s3,x11/14,s3,x12/2,s3,x13/7,s11,x11/0,pf/l,x8/10,s10,x12/7,s8,x8/5,s5,x15/1,pj/n,s9,pp/i,x6/12,s15,x0/1,pg/a,x10/15,s1,x1/0,s7,x12/14,pm/d,s15,x6/11,s1,x7/12,pa/h,x3/9,s12,x8/5,pm/b,x9/1,pp/j,x8/7,pb/k,x1/5,s12,x10/9,pa/i,x1/4,s15,x2/0,s3,x15/10,s14,x11/9,s14,x6/14,s11,x13/2,pl/g,x7/11,s10,x4/15,s15,x12/0,s8,x3/6,pa/f,x11/2,s6,x13/6,s10,pk/d,x10/9,po/m,x13/12,pc/b,x8/4,s13,x1/11,pn/o,x8/13,s14,x15/0,s8,x13/9,s15,pa/i,x6/2,s8,x15/1,pc/m,x10/9,s6,x6/5,s3,pg/l,x8/3,s13,pa/m,x2/13,s15,x0/12,s12,x5/11,s3,po/k,x1/15,pa/f,x14/6,s15,x1/15,s3,x14/4,s4,x15/9,s15,pm/n,x1/5,s15,x3/2,pp/h,x13/5,s13,pm/e,x7/10,s5,x15/9,s10,pn/g,x10/6,pb/l,x0/8,s9,x13/1,s14,x5/8,s7,x15/11,s2,x13/4,s14,x12/3,s15,pe/n,x4/0,pk/i,x13/9,s14,x5/15,s11,x3/11,pa/e,x4/5,s13,x3/10,pf/d,x14/0,s14,x10/12,pk/e,s1,x0/1,pm/o,x3/8,s13,x15/9,s7,x11/10,pg/n,s6,ph/p,s12,x12/15,pi/a,x9/0,pe/m,x4/13,pi/p,x11/5,pj/k,x7/6,s7,x3/12,s7,x0/9,pa/d,x15/10,s9,x2/11,s4,x6/1,s4,x13/9,pb/c,x0/11,po/n,x13/6,s7,x5/1,pj/e,x4/10,pp/h,x13/11,pc/d,x3/8,s12,x4/9,s5,pg/m,x13/14,pa/f,x15/3,pi/k,x9/5,pb/e,x3/12,s8,x5/10,s8,po/j,x7/2,s10,x10/11,pg/m,x8/4,s14,x9/11,s5,x2/3,s6,x1/14,pf/h,x2/3,s11,pc/b,s1,x5/6,s11,x13/10,ph/j,s8,x14/9,s5,x4/1,pf/n,x6/13,pc/h,s1,x12/2,pa/j,x1/4,s8,x12/5,ph/o,x6/11,s4,x7/2,pl/b,x9/6,s14,x8/10,pk/h,x0/4,s1,x2/10,pd/o,x4/13,s5,x0/14,s11,x4/10,pl/b,s6,x14/7,pf/o,x6/15,s12,x4/1,s4,x12/13,s6,x8/10,pd/h,s9,x11/0,pb/a,x12/5,pg/h,x15/11,s4,x8/12,s11,x7/14,s15,x8/3,s2,x12/4,po/e,x6/15,s10,x8/10,pi/d,x6/4,pk/g,x5/12,pa/i,x2/9,s13,x15/12,pc/g,x11/9,s11,x2/12,s5,x1/5,pj/p,x15/8,s9,x12/1,s1,x0/2,pf/l,s3,x11/6,s8,x0/10,s9,x5/1,pn/i,x9/2,pd/k,x4/1,pp/l,x10/5,s10,x8/3,s2,x6/9,pg/e,x8/4,s13,x9/2,s8,x14/0,pb/m,x15/3,pi/g,x13/11,s2,x4/14,pj/o,x7/12,s10,x5/2,pm/d,x6/14,pj/b,x10/4,s15,x9/14,s1,x13/3,s7,x8/9,s5,x11/10,pc/a,s12,x9/6,s5,x13/8,s9,x15/12,s5,x0/6,s13,x15/1,s2,x6/3,pd/g,s3,x1/14,s13,x15/7,s6,x12/11,ph/n,x13/2,s12,pm/d,x12/15,pc/p,s12,x14/3,s6,x7/12,pl/h,x6/2,s1,x7/0,pn/c,x13/15,pe/b,x6/11,s1,x2/8,s6,x6/9,s7,x14/1,ph/i,s15,x13/3,s14,x5/6,pm/p,x10/3,s7,pn/d,x12/14,s10,x4/7,s5,x9/2,s9,x10/5,s13,x12/13,ph/k,x15/6,pg/c,x11/4,s1,x9/7,s1,x4/15,pf/m,s10,x6/10,pi/o,x12/2,s8,x4/8,pn/h,x9/6,pd/g,x0/3,s9,x1/7,pj/h,x6/12,pk/f,x7/10,pi/n,x12/0,pb/k,x14/3,pc/g,x7/1,po/n,x4/10,s11,x3/8,s9,x12/6,s13,x7/10,pb/k,x13/5,pc/a,x7/15,s2,x9/12,s14,x11/2,s10,pb/j,x14/5,s14,x4/10,s12,x6/14,s3,x3/13,po/n,x14/7,pb/m,x9/2,pa/k,x14/8,pc/l,x6/10,pj/m,s9,x13/12,pn/a,x15/1,s14,x5/8,pm/c,s1,x11/0,pn/d,x5/14,pc/b,x9/1,s14,x2/8,pi/l,x13/15,s14,x11/2,po/b,s11,x12/10,s12,x7/4,s7,x14/13,pd/n,x6/12,ph/m,x3/10,pp/f,x0/2,pl/g,x5/6,s3,x2/12,s11,x6/5,s11,x13/2,s8,x10/1,s7,pp/d,x11/14,s3,x9/13,pk/o,x2/12,s11,x4/7,s7,x15/2,pl/j,x1/12,s1,x5/9,s12,x12/15,s15,x3/7,s2,x5/8,s14,x2/10,po/m,s9,x5/7,s13,x11/9,pk/g,x3/14,pb/m,x5/2,pk/p,x4/11,s7,x3/6,s4,pe/h,x5/10,pn/j,x0/13,pg/k,x3/11,s11,x4/8,s13,x2/7,po/p,x5/9,pi/f,x8/4,s3,pn/j,x3/13,s2,x12/14,s5,x1/5,s8,x11/15,pf/c,x14/10,s10,x12/0,pa/d,x15/8,s8,x3/0,s15,x1/10,s11,x2/14,pb/n,x5/10,ph/j,x2/12,s12,x8/0,pa/d,s1,x9/15,pm/g,x14/4,s5,x11/9,s14,x14/0,pj/f,x15/6,s14,x9/13,s14,x7/4,s3,x12/10,s4,x9/13,pd/l,x10/6,pe/f,x0/13,pm/h,x6/1,s1,x12/9,pf/p,x2/14,s11,x8/7,ph/l,x15/3,s15,x11/5,pf/p,x15/2,pm/g,x0/10,pe/n,s11,x5/8,pl/o,x0/7,pa/e,x14/10,s11,x15/5,s13,x9/6,pl/o,x14/7,s5,x8/13,pp/m,x0/3,s12,x1/10,pd/l,x15/11,pj/f,x14/10,s5,x1/3,pl/p,x4/7,s8,x12/9,pe/m,x8/14,pa/n,x3/12,ph/o,s10,pi/e,x5/0,pm/g,x3/14,s8,x12/8,s13,x3/13,pc/j,x1/14,s2,x10/6,pe/f,x7/4,s13,x15/12,s7,x2/7,s1,x11/0,s6,x10/7,pd/n,s5,x4/0,s2,x12/10,s13,x9/2,s8,x14/13,s2,x12/0,pk/m,s14,x1/10,pj/c,x9/15,pm/p,x5/14,s5,x0/13,s11,x12/15,s7,x0/13,pl/i,x4/5,pn/o,x8/6,s5,x5/1,pp/b,x14/15,pc/m,x4/3,s3,x5/7,pb/f,x6/8,pi/l,x11/0,pb/a,x6/14,s4,x8/13,s9,x9/7,s9,pc/o,x2/14,s9,x15/10,pl/i,x2/1,s15,pp/b,x8/13,pk/n,x3/11,s11,x6/4,s1,x15/13,pd/i,x5/7,s8,x15/14,s4,x12/3,s4,x13/2,s4,x10/3,s10,x1/14,s14,x9/0,s1,x8/14,pp/o,x0/11,pd/c,x12/9,s3,x14/6,s13,x4/11,s2,x9/12,pn/e,x0/6,pk/l,x11/4,s9,pd/c,x7/9,po/a,s14,x14/4,s10,pd/j,x6/15,s4,x4/11,pl/h,x1/8,pj/k,x2/10,s14,x14/1,pl/o,x11/0,s4,x13/10,ph/e,x1/6,s8,pm/j,x0/8,pc/o,x15/10,pf/m,x7/3,s10,x15/0,s1,x6/1,pe/l,x13/7,s10,x8/1,s12,x4/6,s11,x5/15,s15,x14/7,pb/g,x0/12,pf/o,x1/9,s8,x0/7,s10,x1/11,s7,x4/15,pl/j,x3/9,s9,x14/15,s12,x9/1,s7,x5/8,pm/n,x6/13,pk/b,x0/7,s8,x11/10,s3,x13/12,pn/h,x10/4,pa/p,x13/15,s12,x4/14,s13,x2/1,s5,x15/10,s10,x9/3,po/m,x15/11,s11,x8/6,s1,x11/9,s7,pb/l,s8,x8/0,s15,x15/5,s14,x8/10,s5,x15/14,pf/h,x10/13,s14,x5/9,pm/c,x14/8,s9,x9/7,pg/a,x1/11,s14,x8/3,pm/n,x9/4,s4,x2/6,s3,x3/5,pf/a,x9/0,pp/k,x13/14,s1,ph/e,x1/5,s13,x3/15,s5,x12/9,s3,x7/11,s1,x6/12,pm/b,x10/11,s7,x4/1,pn/l,x6/5,s6,x12/7,ph/o,x0/8,pg/f,x12/6,s5,x0/2,s1,x10/9,pa/c,x6/1,s12,pl/j,x4/15,pi/o,x3/11,s6,x6/9,s7,x2/8,ph/j,x9/12,s14,x6/4,s6,pm/k,x13/15,s10,x9/11,pp/c,x7/6,s2,x11/10,s15,x14/8,pl/i,x4/5,ph/c,x13/12,pl/g,x8/11,pd/p,x4/9,ph/e,x12/6,s5,x13/10,pn/c,x3/5,s5,x1/8,pk/d,x14/6,s10,x4/3,s10,x12/11,s2,x5/2,pi/j,s14,x11/15,s9,x1/9,pm/k,x10/15,pp/f,x5/4,s4,x2/7,s5,x10/13,pn/o,x1/11,s10,x0/12,pe/b,x5/4,s15,x12/14,pc/i,s2,x13/4,s14,x14/1,s1,x2/4,ph/m,x14/1,s15,x3/13,pc/b,x14/9,s4,x6/8,s9,x12/14,s5,x10/9,pa/k,x14/13,s3,x5/7,s4,pj/i,x6/4,s1,pe/a,x8/5,s14,x12/9,s9,x13/14,s11,x3/15,s3,x13/11,s6,x12/7,pc/m,x8/11,s11,x10/1,s10,x15/12,pp/g,x3/4,pm/c,x15/13,s12,x10/8,s8,x5/12,pj/h,x13/4,s7,x11/9,s15,x10/12,s7,x2/11,pf/m,s13,x15/4,s4,x5/3,s4,ph/p,x4/8,s6,x9/14,pa/b,x5/4,s11,x11/8,pf/m,x15/7,s7,x4/2,s4,x15/9,pp/g,x5/7,s1,x13/11,pd/m,x5/0,s6,x3/8,pb/e,x12/2,s3,x3/6,s15,x13/2,pg/o,x5/1,s9,x10/13,s1,x2/14,s5,x10/6,s9,x5/1,pj/h,x10/3,pc/b,x2/8,pd/j,x12/1,s9,x13/8,s12,x15/12,s5,x8/9,s15,x13/0,s9,x2/11,pm/i,x8/10,s3,x14/0,s10,x10/8,s12,x2/5,s8,x1/14,pa/d,x2/0,s3,x14/9,s15,x1/0,s8,x13/7,pi/g,x0/1,s10,x10/13,pl/d,s7,x2/8,s10,x0/15,s12,x4/3,pi/k,x11/5,s3,x7/2,s15,pg/f,x4/0,pp/c,x10/15,s10,pj/a,x4/2,pg/o,s13,x9/8,pi/f,x5/7,s12,x12/9,pe/m,x2/6,s5,x11/0,s8,x6/12,pd/a,x0/2,s7,x9/7,ph/e,x14/11,pl/c,x4/3,s11,x7/0,pd/b,x8/2,s7,x15/13,pf/p,x9/11,s9,x0/10,pd/g,x2/4,pa/j,x3/8,s5,x12/1,s12,x15/5,pb/e,x9/10,pj/p,x6/5,pm/k,x11/7,pd/h,x4/0,pf/b,x10/5,pn/a,x14/11,s14,pj/l,x7/1,s9,x5/13,pg/h,x1/11,po/c,s11,x7/12,s12,x2/14,s2,x15/10,pb/d,x8/13,po/h,x12/6,pl/e,x9/11,s6,x14/15,s13,x12/13,ph/d,x9/7,s5,x11/10,pj/b,x5/13,s12,x2/11,s3,x5/6,s11,x10/4,s2,x13/11,s15,x0/2,pa/n,x12/13,pb/h,x14/3,pf/e,x9/6,s8,pj/l,x12/13,pd/k,x15/0,s5,pg/m,x14/10,pe/k,x4/3,s14,x1/9,s1,x15/0,s5,x3/8,s10,x2/1,pn/i,x0/4,s10,pj/p,x7/5,s15,x3/14,s15,x7/5,s4,x15/6,s10,x7/3,s2,x8/12,s13,x10/14,s15,x3/12,pg/i,x1/9,s6,x4/3,ph/b,x0/5,s5,pa/c,s7,x15/8,s8,x0/10,s9,x9/12,s6,x11/7,s2,x15/1,pm/p,x8/2,s15,x3/4,s3,x6/5,pa/f,x14/8,pm/b,x15/11,s2,x0/3,s6,x12/9,pi/e,x15/7,pp/n,x4/2,s15,x15/0,pf/g,x13/14,pj/m,x1/0,pe/i,x10/11,pp/d,x15/6,s2,x10/13,pj/o,x12/9,ph/e,x14/10,pm/a,x3/0,s4,x15/4,s11,x14/8,pp/n,x6/0,s3,x10/3,s3,x13/0,s7,x5/2,s2,x1/13,pk/j,x9/10,pn/a,s14,x13/8,pc/k,x6/10,pi/j,x3/12,s2,x9/8,s7,x3/1,pl/e,x12/15,po/m,x5/1,s1,x2/7,pk/l,x3/15,s10,pi/c,x11/10,s15,x12/0,pj/g,x8/7,pi/k,x11/15,s6,x1/13,s11,x14/8,s11,x13/5,s2,x15/4,s9,x1/9,pm/p,x3/11,pb/g,s13,x9/0,pl/k,x6/2,pb/f,x11/4,s14,x8/3,s6,x4/6,s10,x13/15,s9,x9/6,s6,x14/4,pd/i,x10/12,pl/h,x11/13,po/n,x6/9,pg/p,x14/7,s1,x0/11,s13,x9/3,pi/j,x14/1,s8,x8/13,s12,x4/11,s8,x13/3,pd/e,x6/7,s10,x2/5,s11,x9/14,pl/g,x15/1,pn/a,x14/12,s8,x1/15,s11,x6/9,s8,x3/7,pd/g,x11/0,pj/b,s10,x8/1,pa/m,x4/10,pe/d,x2/6,pg/b,x13/0,s14,x3/12,s11,x9/15,s6,x14/10,pk/p,x6/3,s7,x13/15,s10,x10/3,pa/e,x4/0,s13,x3/7,pl/n,s5,x5/15,pj/b,x0/1,s10,x12/13,s2,x0/6,pl/g,x3/12,pm/c,x5/1,pn/p,x4/6,pk/d,x8/2,s6,x14/12,pi/l,x3/9,s12,x6/5,s1,x2/10,s12,x12/3,pe/n,x15/4,pf/l,x12/14,pb/d,s13,x7/9,s4,x11/3,pe/f,x6/13,po/j,s8,pe/h,s12,x11/12,s15,x1/3,pl/g,s12,x10/13,s9,x5/8,s6,x0/6,s4,x5/3,pj/m,x10/2,s13,x15/7,pe/g,x5/3,s12,x1/9,s12,x2/14,s4,x11/0,s11,x2/7,pi/k,x11/9,po/b,x14/13,s11,x2/12,s10,x6/5,s11,x8/11,s14,x3/4,s3,x12/8,s2,x11/6,s8,x7/5,s9,x3/9,s13,x10/14,s2,x2/0,s8,x5/7,s5,x14/2,s1,x4/13,s5,x14/8,s2,pp/m,s15,x13/1,s5,x6/7,s4,x11/12,s5,x14/3,s2,x8/10,s7,pb/f,s1,x7/6,s7,x15/9,s13,x13/12,pg/h,x3/4,s13,x13/9,s5,x12/6,pk/c,s10,x8/1,s11,x14/0,pm/p,s12,x2/1,pb/h,x0/4,pm/l,x13/6,s3,x5/14,s14,x10/3,po/j,x0/9,s12,x1/5,s9,x8/4,s1,x12/6,ph/g,x10/11,s5,x12/9,pd/n,x1/14,s6,x11/4,pi/e,x2/1,pn/f,x11/13,s1,x5/0,s2,x6/9,pa/e,x0/10,pg/f,x13/15,s9,x5/11,po/c,x15/13,s15,x1/7,pp/l,x6/15,pg/k,x12/14,s7,x10/1,s12,pf/i,x2/7,s9,x13/4,pl/d,x14/10,s10,pm/k,x15/1,pd/e,s1,x11/12,s2,pg/o,x6/9,s14,x14/2,s4,x8/10,s4,x4/14,s15,pa/k,x3/11,s14,x14/15,pl/c,x8/3,s13,x5/1,s14,x14/8,s13,x3/7,pf/p,x13/8,pg/l,x7/6,s2,x11/9,ph/o,x0/2,pd/e,x4/6,s5,x7/2,s2,pj/i,s5,x5/12,s13,x0/10,s5,x7/8,s1,x4/1,s6,x7/9,s10,x3/15,pd/p,x2/11,s9,x0/10,pa/f,x15/4,s1,x6/10,pb/p,x4/14,s7,x2/13,pg/c,x12/10,s1,x13/4,s1,x1/7,s4,x4/5,pn/k,x11/10,pj/i,x1/0,s7,x14/6,s9,x11/5,s10,x4/13,s7,x1/12,s9,x3/14,s13,x0/1,pc/d,x11/10,s7,x8/2,s2,x5/11,s8,x15/6,pf/j,x10/0,s5,pm/d,s5,x7/5,s6,pg/a,x1/9,s4,x3/14,s14,pj/k,x12/10,s4,x15/3,pn/p,x6/11,pa/d,x10/8,s15,x9/11,s2,x2/3,po/g,x12/15,s15,x0/13,pj/p,x4/9,s6,x15/11,pk/g,x5/12,s3,x9/4,pj/a,s6,x0/14,s12,x12/7,pm/k,x2/0,s7,x6/1,pa/l,x14/5,s12,x1/4,s10,pn/g,x14/10,s8,x6/8,po/p,s8,x1/10,pc/a,x9/2,pg/h,s15,x10/11,pc/m,x14/4,s8,x11/7,s13,x9/12,s1,x6/2,pj/b,x1/12,s1,x10/6,ph/i,x3/13,s10,x2/7,s9,x14/4,s8,x3/5,s7,x7/8,pk/m,x12/15,s14,x0/9,s6,x5/4,s13,x0/11,s15,x15/14,pa/h,x4/9,s10,x5/0,s1,x13/14,s8,x12/15,s6,x2/4,pp/l,x5/6,pk/o,x13/3,s3,x8/10,s5,x11/12,ph/a,x5/0,s2,x6/13,pp/m,x5/2,pe/d,x6/13,po/n,x7/9,s13,x14/8,pm/f,x1/11,s6,pj/i,x2/9,s10,x15/5,pf/l,x14/9,s6,x15/1,s2,x4/8,pm/o,x15/13,s10,x8/1,pc/b,s6,x3/7,s1,x13/2,s4,x4/1,s4,x2/11,pe/m,x14/4,s10,x7/9,pd/k,x2/13,po/c,x3/9,s10,x13/8,s14,x4/7,s5,x2/0,pb/f,x12/6,pe/p,x11/9,s9,x12/7,pm/i,x4/3,s6,x2/13,pg/j,x12/0,s3,pl/b,x11/13,s10,x15/8,s2,x9/5,s4,x6/10,s2,x5/13,s13,x7/11,s15,x4/2,s8,x0/11,ph/p,x5/2,pm/n,x4/0,pe/l,x13/8,s13,x10/6,pp/b,x7/9,s14,x1/0,po/i,x3/13,s5,x8/12,pm/e,s10,x9/0,pp/k,x4/13,s8,x5/10,s5,pc/d,x14/4,s5,x12/10,pj/l,x13/11,s2,x8/1,s11,x3/12,s6,x10/2,s6,x0/12,s15,x9/7,pb/p,s7,x2/3,s11,x8/1,pk/m,x5/15,pf/d,x11/6,s10,x1/8,s11,x10/9,pm/p,x7/11,pn/b,s5,x13/6,s2,x8/9,s5,x7/13,s13,x4/1,s12,x3/9,pd/f,x13/14,s8,x2/0,s10,x10/14,pb/h,x11/1,s2,x15/3,s5,x10/6,s11,x8/1,pm/g,x11/12,pa/b,x5/4,s12,x7/12,pg/o,x1/15,pn/d,x13/9,s7,x2/4,s4,x12/14,pm/i,s5,x8/11,pb/g,x9/0,s6,x1/14,s3,x4/9,pd/i,x2/6,s14,x3/7,s4,x8/13,pf/k,x6/9,s7,x10/14,s3,x8/9,s8,x0/15,s1,x8/9,pl/n,x11/12,s12,x3/9,pc/a,x11/4,s2,x1/12,s12,x4/10,pb/l,x3/8,s3,x0/1,s1,x10/8,s6,x7/6,pn/e,s6,x9/8,s12,x7/5,pm/k,x14/0,pb/i,x12/5,s1,x15/3,s14,x6/10,s15,x15/11,pa/f,s7,x3/4,pj/h,s9,x8/2,pb/g,x4/3,s15,x2/11,s9,x1/4,s2,x0/12,pf/c,x13/10,s11,x5/14,s8,x9/0,s9,x11/8,pj/n,x2/15,s8,pf/k,s10,pb/j,x10/6,s13,x13/2,pg/n,x11/10,pi/j,x6/0,s12,x10/9,s10,x12/2,s11,x7/13,pa/d,x3/15,s2,x11/12,s11,x10/5,s6,x8/12,s8,x5/15,s15,x13/6,s3,po/i,x11/12,s9,x15/1,pb/f,s2,x12/6,s9,x13/4,s5,pp/d,x5/2,s6,x0/6,s9,x9/11,s14,pa/o,x15/3,s8,x9/1,s8,x11/12,pe/i,x6/3,s8,x0/4,po/f,x7/11,pm/n,x15/8,pg/o,x12/3,s8,x14/8,pk/b,x12/1,s8,x9/4,s7,x10/12,s12,x4/6,pe/d,x10/2,pb/c,s15,x4/12,s10,x9/1,po/n,s8,x3/2,pm/g,x4/1,pi/p,s11,x13/15,pk/a,x9/0,pe/m,x15/14,s4,x6/7,pl/k,x10/13,s14,x7/3,pg/e,x11/1,ph/k,s9,x15/7,s11,x14/9,pc/i,x6/15,pn/f,s6,x9/3,pk/c,x1/8,s2,x9/4,s8,x7/13,s3,pa/o,s11,x14/15,pm/e,x11/8,s1,x6/0,pb/k,x11/15,s14,x12/6,s4,x1/8,pa/h,s9,x5/0,s4,x10/9,s3,x0/4,s1,x12/7,s8,x5/15,s3,x11/0,s1,x5/12,s7,x0/6,s14,pd/c,x3/7,pa/n,s5,x12/4,s2,x3/13,pg/e,x2/15,s10,x4/1,s12,x8/15,pn/l,x3/14,s4,x1/15,pe/j,x5/4,s6,x14/7,s2,x12/13,pc/g,x2/3,pn/b,x0/6,s9,x10/2,pc/a,x15/8,pf/g,x10/11,s1,x8/13,pe/h,x4/6,pj/g,s15,x9/12,pm/l,x15/10,s8,x7/12,s8,x6/9,pn/i,x4/0,pd/a,x3/1,s7,x2/4,s1,x10/0,s4,x9/11,pe/k,x12/15,s13,pf/i,x14/11,s2,x0/15,s11,x12/13,po/k,x1/7,pi/j,x5/2,pk/m,x0/10,s2,x5/4,pp/d,s6,x8/12,pe/c,x0/14,s6,x11/6,s9,x9/7,s7,x6/0,s10,x5/2,s5,x14/11,s12,x0/4,pp/a,x9/12,pm/d,x14/6,s2,x15/4,pl/c,x11/12,s4,x7/5,po/j,x14/1,s12,pn/e,x10/4,pm/a,x2/13,s10,x12/6,s2,x9/2,s4,x3/6,s6,x2/0,s15,x11/14,pn/c,x15/13,s4,x14/0,s4,x11/9,s13,x2/6,pm/b,s8,x15/1,po/n,x9/10,s10,x5/0,pg/j,x2/8,s13,x0/15,s7,x9/1,s3,x8/6,s9,x4/0,po/l,x14/5,pd/h,x8/4,pa/l,x13/11,s7,x15/14,pb/n,x10/8,pj/f,x15/13,s13,x6/5,s15,x1/11,pd/o,x3/9,s4,x14/11,pb/m,x5/15,pa/h,s6,x1/11,pj/b,x5/14,s15,x15/3,s11,x5/12,pa/m,x9/11,s1,x10/1,s5,x12/11,pc/i,x4/1,s6,x11/13,pl/f,x1/6,s11,x15/11,pi/h,x7/10,s14,x2/9,pd/m,x8/1,s13,x0/3,s3,x7/12,pj/e,x2/14,s7,x9/12,s4,x1/10,pp/g,x9/13,s14,x12/0,s13,x1/3,pi/o,x5/9,s5,x4/12,pf/m,s15,x11/3,s11,x13/4,po/k,x5/0,s11,x7/13,pl/d,x15/11,s14,x13/6,s14,pe/o,s11,x12/14,s14,pc/j,x5/7,pa/g,x6/15,s1,x14/3,pd/j,s15,x1/8,s14,x2/6,s3,x1/0,pb/n,x14/6,pg/e,x4/13,s4,x7/0,pf/n,s10,x6/12,pj/o,x9/14,s10,x11/1,pi/m,x7/8,pf/d,x11/14,s10,pm/b,x4/5,s9,x9/7,po/j,x4/15,pi/b,s4,x8/2,s1,x3/13,s12,x15/1,s11,pm/d,x11/8,s1,x12/6,pf/g,x1/7,pm/p,x15/5,s11,x8/14,pl/h,x0/1,pe/a,x4/10,pm/p,x6/12,po/f,x7/2,pp/m,x14/3,s4,x10/15,pa/f,x0/14,pc/b,x7/11,s1,x15/9,pa/o,x3/5,pd/e,x11/6,po/m,x15/12,s5,x10/6,pb/h,x2/12,s5,x10/4,pg/i,x14/12,s4,x8/1,s13,x3/13,pj/b,x5/0,s3,x6/14,pg/m,x7/3,s4,x10/1,pb/l,s12,x8/15,s6,pm/f,x6/9,s14,x14/3,pg/k,x5/12,pd/n,x6/14,pj/f,x10/12,s1,x14/1,pc/g,x10/7,s11,x4/14,s9,x3/15,s12,x12/11,s8,x5/1,s6,x2/13,s5,x6/8,pm/k,x14/5,pf/p,x0/11,s12,x7/13,s3,x3/14,pj/h,x6/2,pe/k,x4/7,po/h,x3/8,s5,x14/10,s12,x12/4,s7,x13/14,pm/i,x4/0,po/d,x12/7,pp/b,x15/10,s7,x8/5,pl/a,x6/10,s7,x13/15,s6,x3/8,s11,x13/12,s13,x14/6,pb/m,x13/9,pe/j,x15/11,pb/f,x5/13,s3,x4/1,s3,x12/7,s5,pk/c,x15/10,s11,x1/13,s15,x9/5,s1,x14/3,pn/p,s10,x7/15,s2,pl/d,x0/2,pa/m,s7,x1/13,s10,ph/e,x6/12,pn/a,x3/15,pg/i,x10/8,pd/o,x7/13,pc/a,x10/0,pi/b,x3/12,pc/h,x15/1,s1,x0/11,pe/f,x3/15,pm/k,x8/4,pf/b,x7/10,s3,x2/13,po/k,x6/1,pl/h,x7/3,s6,pf/o,x8/1,s10,x14/13,pl/p,x4/8,s5,x14/5,pb/o,x13/2,pf/c,x9/1,pk/o,x6/11,s4,x7/0,s6,x3/11,s3,pc/b,x2/5,s15,x4/15,pm/o,s11,x7/5,pb/n,x12/10,s11,x13/15,pp/c,x8/14,s12,x3/1,s1,pe/g,x4/14,s6,x3/13,pc/p,x10/8,pn/e,s11,x4/11,s1,x7/10,s4,x5/14,pd/g,x2/12,s5,x3/13,s14,pp/b,x14/4,pk/n,x3/1,pd/g,x11/10,pe/p,s6,x9/8,s10,x11/3,s1,x5/10,s13,x8/15,s2,x12/9,s1,x0/10,pa/i,x1/9,pd/o,x5/12,s13,x2/0,s10,x13/9,s14,pb/p,x0/10,pa/h,x9/5,s3,pm/k,x4/8,s10,x6/10,s4,x11/3,s12,x4/7,s13,x9/6,s5,pd/i,x7/10,po/l,x4/14,s1,x0/2,s6,x1/5,s9,pm/c,x14/4,pp/n,x2/5,pl/k,x15/4,s2,x1/14,s9,x0/13,s14,pm/i,s1,x8/2,s10,x12/13,s1,x8/2,s3,x6/1,pb/e,x4/3,s2,x2/12,s6,x0/5,po/j,x8/4,pi/a,x10/2,pp/f,s5,x4/8,pl/g,x1/0,s8,x12/3,s3,x5/15,s4,x3/0,pm/n,x11/6,s5,x14/13,s14,x6/3,s7,x2/1,s15,x7/6,s14,x5/9,s9,x1/15,s9,x6/0,s12,x7/9,s13,x13/12,s14,x14/9,s15,x8/13,s5,x5/14,s8,x11/13,pj/b,x2/3,pn/o,x15/5,s4,x6/13,s6,pd/l,x9/8,s1,x0/14,s10,x6/5,s2,pp/i,x12/9,s7,x14/2,ph/f,s4,pi/l,x15/11,s12,x13/2,pn/h,s6,x4/10,s15,x13/6,s15,x15/8,s5,x4/14,pf/i,x3/7,po/g,x2/4,s5,x14/8,s10,x9/3,s4,x2/13,pf/a,x15/11,pd/c,x12/13,s1,x10/11,s12,x1/7,s10,x14/15,s10,x6/3,s12,x9/15,s14,x3/10,s11,pa/b,x14/2,s12,x5/13,s5,x9/2,pn/k,x7/1,s7,x4/5,s13,x13/6,s5,x15/3,s4,x13/1,pa/h,s8,x3/4,pm/e,x5/10,pb/g,x3/15,pe/i,s7,x4/5,s2,x2/15,s1,pm/a,x6/0,s5,x13/11,pp/b,x5/9,s6,x2/10,pk/o,x1/13,s3,x10/14,s1,x6/5,s11,x2/7,pg/i,s12,x13/9,s8,x2/10,s11,pm/a,x5/14,pg/o,x11/4,s11,x6/13,pd/p,x4/5,s1,x10/13,s15,x0/2,s1,x3/10,s4,x5/9,s11,x3/13,s13,x5/9,s1,x11/8,s14,x14/4,s9,x12/6,pm/f,s15,x7/2,pc/k,x5/6,s14,x13/1,pa/i,s10,x4/9,ph/c,x6/5,s1,x11/14,s1,x9/13,s14,pa/j,x7/14,pi/b,x12/10,pd/a,x0/11,s15,x12/7,pb/i,s12,x9/15,pe/f,x5/3,s7,x10/4,pg/i,s2,x1/6,s15,x8/14,po/j,s10,x9/11,pe/d,x2/3,s11,x14/10,s5,x13/3,pm/l,x7/15,pn/e,x12/6,s12,x8/5,s1,x1/14,s5,x6/7,s2,x3/12,s3,x5/15,s4,x13/3,s2,x11/2,pd/b,x7/0,s10,x13/8,s6,x6/5,s13,x7/8,pg/l,s10,x11/9,pn/a,x8/1,pm/f,s14,x15/14,s14,x2/9,s12,x13/11,s8,x5/2,pk/o,x7/11,pf/j,x15/13,pi/m,x1/7,s15,x13/14,s3,x12/0,s4,x6/1,s9,ph/l,x8/2,s4,x12/10,pm/n,x11/1,pl/j,x2/6,s7,x8/5,s7,x15/13,s6,x8/7,s2,x2/3,pk/p,x0/9,s9,x6/10,po/e,x3/14,pa/p,x8/15,s6,x3/7,s12,x14/9,s13,x2/8,pi/c,x13/15,s6,x1/3,pp/j,x5/10,s8,x15/1,po/f,x13/6,s13,x10/12,pp/j,x2/7,s14,x5/4,pe/a,x3/11,s9,x13/9,s10,x5/11,pg/n,x9/7,pa/l,x1/14,s6,x9/10,s14,x13/3,pn/o,x15/9,s3,x11/10,s7,x13/3,s7,x12/10,s1,x7/14,s4,x9/15,s8,x8/7,s3,x5/14,s7,x11/13,pc/g,x4/9,pi/n,x2/3,s11,x11/10,s13,x5/12,pf/e,x3/2,s4,x10/1,s12,po/m,x9/0,s6,x2/14,pl/f,x12/3,s6,x9/2,s10,x15/6,pi/c,x2/7,s7,x14/0,pl/m,x13/1,pe/p,x9/2,pb/j,x8/1,s11,x3/11,s4,x15/12,s7,x14/9,pg/l,x3/0,pa/p,x13/4,s5,x1/8,s10,x10/3,s6,x6/12,s8,x10/7,s1,x9/13,pk/h,x2/7,s15,pi/b,s5,pe/j,x12/6,pn/k,s14,x4/5,pi/b,x14/15,s15,x7/1,pc/a,x8/10,s6,x0/1,s4,x7/9,s10,x13/1,ph/l,x15/11,pg/a,x7/3,s4,x15/1,s1,x14/7,s13,x6/15,s8,x0/10,pm/o,x4/6,s8,x3/13,s2,x9/6,pg/p,x3/11,pi/k,x6/14,s7,x7/10,pe/l,x8/15,s9,pg/c,x7/11,pf/d,x2/8,s12,x15/11,s6,x5/9,pk/i,s5,x7/10,pa/g,x12/8,s5,x7/15,s6,x13/1,pf/b,x3/7,ph/n,x15/13,s4,x9/4,pc/g,x3/2,s12,x11/12,pm/o,x14/6,s6,pj/i,x3/4,s7,x12/0,pk/b,s11,x15/1,s14,pn/d,x11/0,pg/m,x12/1,s4,x5/7,s8,x9/15,s3,pj/h,x0/1,s10,x2/4,pd/m,x13/14,s11,pb/p,x3/10,s5,x15/8,pm/c,x4/14,s4,x5/8,s2,pa/h,x14/2,pe/i,x15/10,pp/b,x14/5,s15,x13/7,s12,x5/6,pa/c,x11/12,s9,x10/5,s7,x0/13,ph/f,s10,x3/12,s8,x15/2,pp/a,x5/0,s14,x13/11,s2,pn/e,x15/0,s11,x4/13,po/c,x2/5,s13,x11/1,s5,x12/2,s15,x15/13,s14,x9/5,s10,x13/12,pn/e,x10/8,pk/i,x0/9,s8,x2/10,s1,x8/0,po/c,x10/14,pb/h,x0/5,pn/i,x14/10,s2,x3/6,s8,x1/10,s15,x2/0,s13,x15/8,pc/h,x2/3,s15,x5/9,s11,pb/a,x14/4,s10,x13/7,s11,x6/2,s1,x5/4,pj/e,x9/3,ph/l,x15/4,s3,x5/0,s4,x10/3,s4,x4/14,pm/d,x13/9,s3,x15/7,s6,x9/14,s8,x2/10,s7,x0/4,s4,x11/6,pp/a,x13/4,s4,x0/12,s9,x14/8,pc/n,x4/2,s14,x11/9,pj/k,s14,x15/10,pd/g,x6/7,s8,x8/15,s8,pm/j,x11/1,pg/a,x5/8,pk/i,x10/2,s13,x5/14,s15,x1/15,pl/m,x5/14,s3,x10/3,pj/g,x13/9,ph/p,x5/2,pi/o,x15/12,s11,x6/10,pg/l,x8/5,s8,x4/13,pe/k,x3/0,pn/j,x2/5,s3,x10/8,pd/m,s10,x2/12,s14,x0/7,s10,x15/3,s15,x6/13,s14,x4/0,s15,x11/6,s2,x3/13,s8,x4/14,ph/k,s2,x15/6,pe/o,x3/14,s11,x1/7,s7,x2/11,pa/l,x3/0,pf/o,x4/7,s10,x11/6,pg/i,s6,pj/n,s14,x9/4,ph/d,x2/12,s13,x13/0,s13,x3/8,po/p,x14/11,s1,x0/10,pj/m,x12/1,s10,x15/11,pn/a,x2/14,ph/j,s3,x10/11,s12,x6/15,s3,x11/14,pp/c,x5/6,s4,x14/12,s8,x7/15,s2,x10/2,pl/m,x0/12,po/n,x8/5,s3,x4/14,pi/a,s13,x12/5,pd/j,x15/2,s13,x14/7,s5,x5/3,s13,x11/6,pa/c,x4/12,pp/e,x14/0,s13,x8/11,s6,x14/13,s10,x2/11,pk/i,s9,ph/f,x5/9,s5,x7/12,pk/a,x11/8,pb/n,x15/0,s3,x6/4,pl/m,x12/11,s10,x4/15,s15,x13/10,pj/p,x8/14,pg/m,x4/3,s10,x0/2,s15,x6/4,s14,pd/f,x3/12,s3,x14/9,pp/l,x3/15,s10,x4/14,pi/d,x12/1,s1,x4/11,s3,x14/3,s2,x5/8,s12,pj/p,x2/10,s3,x3/12,s14,x11/1,s1,x13/3,s5,x6/0,pl/g,x4/2,s6,x14/10,s11,x0/11,ph/j,x14/2,s13,x3/11,s5,x10/7,s8,x15/12,s8,x4/5,s10,x13/14,s11,x5/8,pg/p,x1/7,s13,x11/8,s8,x1/4,pf/h,s5,x9/12,po/k,x1/4,s10,x3/7,s8,x9/8,s13,x5/1,s11,x13/14,s2,x8/10,pf/e,s1,x12/9,po/k,s10,x11/15,s6,x7/1,s6,x8/9,pe/p,s13,x10/3,s2,x8/9,pb/c,x2/15,s11,x7/11,s3,x9/10,s15,x6/7,s5,x10/13,pa/e,x7/11,s10,x12/10,pm/l,x8/13,s9,pj/n,x15/11,pf/i,s11,x7/2,s14,x0/10,s15,x1/5,s7,x8/3,s8,x5/11,s15,pl/h,x4/2,s10,x6/8,s8,pb/g,x12/2,s11,x6/11,s6,pc/j,x14/12,s5,x6/8,s9,x11/9,s13,x12/5,s5,x3/14,s12,x1/0,pd/b,x4/5,s3,x0/6,s5,x14/15,pa/e,x7/1,s6,x11/15,s13,x14/1,s15,x10/6,pm/i,x13/2,pl/n,x6/15,pj/i,x5/7,s3,x0/8,s4,x2/9,s11,x1/3,pg/c,x11/15,pf/k,x0/9,s11,x10/7,pl/d,s11,x14/1,s1,x0/7,s12,pp/e,x10/6,pf/d,x9/4,pj/c,x7/0,s12,x14/3,s1,x9/12,s2,x15/11,s2,x12/14,s12,x4/5,pp/d,x15/12,po/h,x13/9,s4,x3/6,pa/g,x8/10,po/d,x12/14,s7,x13/9,s4,x7/12,s7,x1/6,pg/m,x2/4,s11,x5/9,s7,pc/i,x13/2,s4,x6/15,pg/o,x8/11,s15,x4/6,s5,x10/12,pe/b,x9/14,pc/a,x4/6,s10,pg/f,s5,x12/9,s9,x13/15,s9,x0/5,s10,x8/10,s1,x6/5,s9,x2/0,ph/e,x4/14,s12,x2/11,pd/k,x13/9,s4,x7/4,ph/n,s11,x8/13,pp/i,x6/11,s2,x5/15,s4,pl/c,x12/3,s10,x1/15,pg/n,s9,x11/4,s3,x9/8,s7,x11/15,s10,po/f,x5/0,s15,pa/g,x14/3,ph/m,x15/12,s8,x8/2,s3,x1/6,s1,pf/b,x7/3,s12,x11/12,po/g,x13/4,s4,pi/n,x6/9,s4,x5/13,pj/f,x6/10,s7,x3/11,s3,pg/p,x1/15,po/k,x6/0,s11,x13/2,pe/m,x0/5,s15,x1/14,s7,x2/6,pf/l,s6,x15/9,s15,x8/12,pg/o,x10/1,s8,x7/9,pa/e,s9,x0/13,pj/d,x15/9,s5,x11/4,s4,x5/7,s15,x12/1,s14,x11/15,s3,x10/0,s13,x9/14,s11,pb/h,x8/12,pn/f,x0/14,pp/l,x8/13,s10,x2/1,s11,po/f,x14/8,pn/j,x2/5,pc/h,x7/10,pn/e,x8/15,s15,x12/11,pd/l,x13/3,s9,x1/11,s3,x12/13,pb/k,x2/9,pd/m,x7/5,pf/g,x13/11,s12,x14/2,s10,x3/13,pj/e,x7/15,s2,x9/10,pc/d,x6/8,s10,x7/9,pm/e,x12/6,s10,x7/8,pp/a,x0/9,s2,pj/i,x8/1,s15,x7/10,s10,x0/3,po/g,x13/14,s4,x15/3,s11,x4/8,s2,pp/d,x7/11,s1,x9/8,s3,x15/5,s15,x3/12,s12,x9/14,pa/j,x8/0,s7,x4/5,pk/o,x7/3,s9,x6/0,s10,x4/7,pe/i,s8,x13/8,s4,x9/0,pd/k,x5/13,s8,x10/15,pf/a,x11/9,s5,x6/7,s3,x5/11,s3,x15/1,pb/d,s11,x2/8,s15,x3/15,pg/c,x2/8,pl/k,x0/9,s9,pg/h,x7/4,pa/f,s3,x13/3,pd/i,x6/12,s2,x13/9,pa/n,x0/5,s5,x3/12,s15,pl/k,x7/6,s1,x2/11,s14,x3/4,s9,x14/12,s15,pj/i,x4/3,pg/p,x15/0,po/a,x7/3,pp/n,x15/4,pd/o,s4,x5/13,ph/c,s3,x1/3,pj/i,x7/11,pd/g,x9/10,po/i,x11/5,pk/h,x8/2,s4,x0/12,pf/l,x9/5,pa/g,s2,x13/3,pk/c,x11/0,s10,x3/8,s10,x10/1,pg/o,x3/11,s11,x9/12,s4,pm/n,x3/14,s5,x15/0,s4,x10/12,ph/b,x15/0,pj/o,x2/1,s6,x9/10,s11,x7/12,pm/l,x1/8,pi/e,x2/12,pb/f,x1/10,pm/j,x14/4,pf/h,x2/3,pc/d,x13/1,s4,x4/7,pk/g,x3/6,s9,x0/14,s6,x6/11,s1,x10/1,s5,x11/12,pp/o,x14/3,s13,x7/5,s8,x11/4,s12,pk/e,x6/5,po/m,x1/15,s3,x8/4,s15,x1/5,s4,x4/15,s9,x13/3,pg/d,s2,x7/5,s9,x13/2,pk/n,s3,x9/4,s1,x0/6,s15,pb/i,x14/10,pl/j,x1/12,pp/i,x14/15,s14,pn/m,s9,pj/b,x6/3,s12,pe/k,x1/10,po/b,x13/6,ph/l,x5/8,pk/e,x6/15,pn/b,x13/7,pe/f,x10/15,s14,x8/5,ph/b,x15/2,pj/k,x9/5,s12,pi/o,x0/2,s13,x4/12,pe/c,x9/5,pg/h,x3/2,pa/m,x0/10,s10,x12/9,pc/g,x1/5,s15,x6/12,pl/m,x1/8,s4,x11/10,pb/k,x12/14,pg/i,x0/7,pj/e,s1,x12/8,s12,x7/11,pm/p,x14/8,pl/e,s14,x9/2,pk/d,x8/10,s9,x6/4,s5,x2/1,pn/j,x5/7,s2,x9/10,s12,x8/12,s7,x3/10,s2,pp/l,x7/11,pf/a,x14/8,s15,x15/4,po/k,x14/2,s7,x11/5,pc/b,x1/9,s1,x8/11,s13,x1/15,pj/p,x9/7,pe/a,x11/0,pg/i,x9/15,s13,x4/8,pa/l,x13/14,pg/d,x15/1,s10,x7/11,s3,x4/3,s9,x7/14,pi/k,x15/9,s3,x8/6,s6,x14/5,pa/m,x8/9,pc/f,s5,x5/6,s11,pi/l,x11/4,s13,x8/7,pm/c,x12/15,pl/g,x0/2,s3,x11/8,ph/m,s3,x3/14,s3,pn/j,x10/4,s5,x6/5,s9,x9/10,pm/i,x0/7,s5,x8/6,pg/e,x11/12,s7,x14/4,s7,x1/8,pn/d,x12/3,pl/f,x5/10,s12,x0/11,s8,x7/3,pg/j,x0/13,s15,x14/9,s2,x8/4,po/p,x13/10,pn/f,x15/9,s8,x5/2,s2,pg/o,x9/11,s7,x12/0,pl/c,x13/11,s11,x7/9,po/j,x5/13,s4,x9/6,s9,x11/5,s1,x1/2,s15,x3/5,s8,x10/15,pb/n,x2/1,s7,x10/4,s1,x3/5,pd/p,x12/1,s1,x11/8,s1,x6/10,s3,x15/1,pf/k,x5/2,pn/h,x3/12,pp/o,x11/5,s11,x3/10,s3,x8/0,s13,pc/d,x15/11,po/a,x13/2,ph/l,s8,pb/i,x1/12,pe/o,x13/5,ph/n,s6,x2/3,s7,x14/1,s13,x8/15,s5,x4/13,pi/b,x8/2,s10,x10/9,ph/k,x6/14,pc/n,x9/12,ph/a,x7/8,s4,x11/1,s10,x12/2,s1,x0/5,po/l,s11,pa/d,x1/14,s13,x10/13,pg/e,s4,x1/7,s5,x4/13,pf/h,x2/6,pi/p,x10/3,s13,x0/5,pg/l,x10/8,s4,x15/2,s15,x13/4,pk/c,x3/14,s5,x4/11,s13,x8/6,s7,x5/2,pi/g,x14/13,s8,x11/5,s9,x10/15,pc/b,x8/2,s15,x5/0,pm/p,x13/4,s11,x5/9,pe/c,x11/0,po/d,x7/9,s6,x11/0,s5,x13/12,ph/k,x3/15,s6,x2/6,s13,x1/10,s14,x9/5,s9,x10/7,s1,x15/6,s7,x4/11,s7,x7/6,pa/j,x0/14,pe/g,x9/6,s7,x10/3,pi/l,x15/12,pk/g,x6/13,s15,x15/1,s3,x11/8,s8,pa/n,x7/15,s10,pi/p,s15,x1/13,s13,pc/a,x8/12,s9,x11/4,pl/m,x14/8,s10,x9/15,pj/p,x7/3,s4,x9/15,pn/b,x6/8,s4,x11/1,pa/g,s9,pk/i,x4/12,s8,x0/13,pn/j,x14/10,s2,x15/7,s5,x9/8,s15,x5/1,s15,x4/11,s6,x8/15,s12,x10/14,s14,x6/1,po/m,x10/3,s6,pe/i,x1/13,pc/l,x4/9,s2,pg/p,x2/13,s9,x3/6,s13,x10/13,s11,x0/8,pe/m,s5,x2/9,pi/c,x13/6,pm/h,s14,x5/4,pa/e,x15/7,s12,x13/2,s6,x1/4,s4,x11/5,s5,x9/14,pn/f,x12/5,s12,x9/0,s3,x15/3,s4,x10/9,po/j,x7/4,s12,x14/5,pb/h,x10/11,po/j,x14/4,s4,x11/5,s12,x12/15,pb/n,x5/13,pl/e,x14/12,pj/m,x3/6,s2,x4/12,s3,x9/5,ph/o,x1/4,s7,x6/5,s2,x0/8,pc/m,x12/4,s13,x7/1,s14,x9/4,s13,ph/k,x10/3,pe/d,x5/7,pb/n,x1/11,s7,x14/12,s4,x5/8,s15,x9/2,s2,x8/10,s15,x4/1,pd/a,x8/3,pk/b,x2/11,pg/o,x15/5,s2,x1/6,pp/n,x0/5,pf/g,s1,x14/12,s11,x2/6,pj/l,x3/7,s1,x4/15,ph/a,x3/6,s14,x2/12,pi/p,x15/13,pd/m,x3/2,pg/l,x5/13,s9,x4/14,pj/c,x5/13,s6,x0/7,s10,x8/10,pm/i,x12/4,s13,x10/0,s2,x5/6,s4,x3/7,pl/j,x12/10,s6,x9/6,s5,x14/8,s2,x1/2,s12,x6/12,pn/m,x11/7,s3,x0/12,s11,pb/p,s15,x10/8,s12,x4/1,s6,x15/5,pi/a,x9/1,s14,x15/5,s11,x8/12,po/g,x4/9,s3,pn/m,s14,pl/f,x3/2,pa/p,x14/4,s9,pe/n,x11/2,pc/b,x13/10,s14,x3/11,s3,pp/d,x14/15,s13,x11/9,s14,x0/12,s7,x6/14,s2,x8/9,s2,x2/10,s13,x14/11,pe/n,x9/6,s5,x5/0,s9,x11/14,ph/d,x1/12,s3,x9/0,pb/c,x6/1,pl/m,x7/0,s5,x2/8,pc/e,x9/11,pk/m,x0/4,pi/p,x7/9,s3,x11/4,s5,x9/15,s10,x7/14,ph/n,s8,x9/5,s14,x8/12,s3,x5/7,s7,x12/3,s7,x13/7,pi/d,x8/2,s15,x3/13,s11,x8/15,s2,x12/7,s13,x3/4,s11,x15/0,pl/o,x4/2,s10,pb/d,x7/8,s12,x10/3,s3,x5/0,pl/k,x9/2,s11,x10/7,s11,pi/h,x13/0,pm/j,x11/14,s8,x7/13,pk/c,s2,x6/14,pn/i,x5/1,s5,x10/8,s11,x9/13,s1,pb/c,x8/2,s13,pd/j,x15/5,s2,x3/2,s8,x11/7,s8,x2/1,s5,x9/10,s6,x4/7,s14,x11/15,s3,x1/14,s7,x7/9,s1,x8/13,pb/e,x6/11,pp/i,x2/5,s13,pa/n,x12/13,s2,x11/7,pi/k,x1/5,s3,x11/9,s2,x2/6,pc/l,x12/9,s6,x2/15,pi/a,x6/10,pn/d,x0/1,s11,x15/6,s13,x4/11,pg/f,s7,x6/9,s14,x1/11,po/m,x14/9,s9,x15/6,s10,x5/0,s12,x3/8,s12,x10/4,s13,pb/d,x11/9,pf/e,x8/6,s10,x9/14,s10,x1/10,s5,pl/n,x12/4,pp/f,x15/8,s5,x0/4,s11,x10/12,s13,x11/1,s6,pm/l,x5/2,s9,pf/a,x10/12,s5,x0/13,pk/p,x10/7,s8,x14/11,pj/f,x0/8,pl/b,x3/9,pe/n,x8/5,pm/d,x15/6,s13,x2/13,pp/n,x6/4,s4,x7/13,s1,x2/11,s3,x14/7,pi/a,x4/3,s3,x15/7,s1,x14/4,s6,x7/5,s13,x0/12,s10,ph/b,x3/10,pn/d,x2/1,pk/f,x3/5,pd/e,s3,x11/7,s8,x14/3,s3,x7/8,s2,x4/1,pm/f,x6/11,s4,x10/7,s9,x11/0,pj/i,s5,x3/1,s6,x5/0,pc/d,x11/13,s14,pf/j,x4/12,s6,x14/0,pm/n,x3/5,po/i,x13/12,pk/b,x0/15,s9,x2/5,s9,pa/j,s6,x3/12,s12,x8/2,pe/m,x13/5,s13,x7/4,s2,x2/15,po/h,x8/0,s15,pj/g,x9/12,s10,x13/6,s13,pl/n,x2/10,s6,x5/12,pe/p,x4/11,s13,x2/14,s14,x10/4,pj/h,x2/11,pi/p,x13/5,s12,x9/0,s14,x2/11,s8,x12/15,s7,x8/10,pe/j,x6/11,s12,pp/m,x5/4,pn/k,x7/6,s13,x12/5,s10,x10/0,s11,x1/6,pm/h,x13/9,pa/d,x10/3,s15,x0/13,s11,x6/1,s2,x0/7,s2,x13/14,pp/h,x0/5,pj/d,x7/9,pb/i,s2,x0/14,s4,x4/5,s11,x11/10,s14,x7/12,s8,x5/6,s12,x8/3,pg/m,x2/13,s12,x9/5,pc/o,x3/6,pe/b,x14/2,s4,x0/1,s14,x13/4,s2,x11/9,pa/k,x12/14,s4,x13/4,pg/p,x5/11,pb/d,x8/7,pa/n,x13/6,pd/g,x10/0,s8,pm/n,x13/4,pk/d,s9,x3/5,s6,x1/4,s15,x9/12,pm/b,x5/11,pl/a,x3/8,s2,x2/1,s11,x7/10,s8,po/c,x12/5,s4,x6/9,pl/p,x1/11,s8,x14/12,pa/i,x10/8,pl/e,x7/13,s14,x10/0,s9,x6/4,s14,x10/11,ph/g,x0/9,s4,x6/2,s10,x3/7,s14,x6/5,pj/k,s2,x3/10,s3,x5/8,pp/d,x9/3,s11,x12/6,s11,x8/10,s6,x5/6,ph/n,x4/1,s13,x2/8,pl/p,s7,x6/5,s5,x3/4,s4,x7/11,s15,x13/14,pb/g,x9/8,po/n,s14,x2/15,s13,x12/3,s15,x9/13,pa/f,x3/6,s13,x1/4,pn/b,x7/0,pl/f,x1/10,pa/c,x2/7,s5,x15/14,pj/g,s13,x3/0,s7,pc/d,x12/6,pa/p,x15/8,s13,x0/9,pm/l,x4/12,pk/a,x0/3,pg/i,x2/12,s13,x4/1,pe/p,x6/0,pm/a,x15/2,pe/l,x0/6,po/f,x11/10,s5,x6/0,s9,x11/15,s5,x1/7,s8,x9/3,pg/i,s4,pb/e,x11/6,pl/k,s3,x2/3,pf/b,x1/13,pk/h,x2/5,s6,x3/6,pn/f,x5/1,pe/h,x14/12,pn/j,x10/2,s3,x1/15,s12,x13/3,s12,x1/6,pm/k,x8/15,s5,x10/14,pg/c,s6,x8/2,s14,x4/12,pj/i,x8/0,s14,x13/15,po/e,s15,x7/1,s11,pj/h,x3/5,pb/n,x11/1,s13,x8/9,s10,x0/14,s8,x9/7,s7,x4/12,s6,pc/m,x13/0,s1,x8/15,s1,x0/2,s6,x10/3,s5,x7/12,s4,x1/2,s12,x13/4,s14,x12/2,pe/n,x0/9,s5,x5/15,s8,x3/0,s4,x5/1,pg/k,x4/6,s9,x13/3,s15,x10/7,s6,x9/15,pp/n,x6/11,pd/j,s10,x1/7,s10,x13/10,s15,x4/1,s6,x2/9,pp/h,x11/14,s6,x4/0,s1,x1/5,pn/c,x8/11,s6,pp/f,x0/13,pe/m,x3/8,s9,x2/6,s12,x8/7,s14,x12/1,s1,x13/3,s1,x4/11,s9,x7/2,pn/j,x15/6,s9,x13/9,s9,x3/0,pk/c,x14/10,pf/e,x13/3,s7,x7/4,pk/p,s8,x14/2,s9,x15/3,s13,x5/6,pd/l,x8/2,s5,pm/c,x11/3,pe/g,x6/5,s4,x15/0,s10,x14/9,pc/l,x7/12,pf/i,x14/2,s2,x11/6,s10,x15/12,pg/l,x3/14,pp/h,x9/8,pl/a,x0/14,pi/m,x7/9,s8,pg/c,x2/0,pe/l,s7,x5/6,s15,x9/0,s12,pf/d,x4/11,s12,x15/1,pi/e,x4/14,pb/k,x3/0,s4,x2/14,s9,x1/6,s7,x11/7,s12,x1/10,pp/n,x15/6,ph/k,x4/11,s11,x7/0,po/g,x15/8,s3,x12/14,pl/j,x11/5,pe/d,x6/13,ph/k,s8,x10/4,s7,x14/11,pn/b,x7/1,s3,x10/3,pj/k,x11/4,s4,x13/5,s14,x1/9,s12,x0/6,s8,x15/11,s1,x5/4,po/c,x14/0,pe/k,x5/8,pb/j,x15/14,s2,x0/10,s9,x11/9,s7,x3/0,s12,x5/14,s11,pc/p,x7/2,s3,x12/1,s5,x6/0,s13,x11/5,pm/b,x14/13,pd/j,x7/1,s10,x11/14,s5,x4/13,s12,x10/8,s14,x5/12,s6,x9/4,pm/c,x10/15,s6,x3/0,pk/o,x6/13,s11,x4/11,ph/e,x1/13,s6,x2/0,s13,x3/13,s7,x14/12,s10,pk/p,x8/9,s11,x10/2,s2,x7/6,pa/l,x14/13,s11,x3/15,s3,x12/11,s10,pb/c,x0/6,pe/n,x10/4,pf/c,x2/5,pj/e,x14/13,s12,x7/3,pd/n,x10/1,pc/b,x4/3,ph/k,x9/13,s2,x14/6,s2,x5/9,s5,x2/14,s7,pa/m,x11/0,s13,x7/3,s2,x4/1,pd/l,x7/13,pp/b,x8/4,s6,x10/5,pe/g,s14,x1/12,s12,x11/6,s6,x5/8,s5,x11/15,ph/c,x6/0,po/m,x4/10,s2,pe/d,s15,x11/15,ph/c,x1/9,s6,x3/8,pf/b,x10/11,pp/n,x5/13,pj/g,s4,x12/9,s14,x4/15,s6,x1/9,s1,pp/f,s4,x15/11,pa/g,x14/2,pn/o,s9,x8/3,s12,x6/13,pa/j,x1/10,pc/h,x3/12,s14,x2/5,pk/l,x12/7,pg/i,x2/15,pk/f,x14/5,pd/g,x4/6,pj/n,x10/13,s1,x15/3,s11,x4/8,s5,x15/12,s14,x9/10,pf/b,x8/3,s2,x0/15,s14,x14/7,po/d,x5/0,s5,x8/14,s2,x3/4,s4,x0/2,s2,x5/4,s9,pb/j,x15/9,pe/p,x0/5,s12,x2/12,s15,x13/0,s15,x10/9,s8,x4/6,po/g,x11/15,pc/f,x10/2,s11,x5/11,s12,x2/1,pd/j,s14,x12/5,s14,x11/6,pi/l,x7/5,s9,x6/2,s3,x7/15,s14,x3/2,s10,x0/10,pp/f,x11/14,s9,x10/13,s3,x9/2,po/e,x12/10,s2,x7/6,s10,x8/3,s11,x11/10,pf/j,x1/5,s9,x15/4,pb/g,x11/0,pk/f,x12/14,s10,x8/2,s5,x6/10,pi/n,s12,x0/8,pm/g,x4/13,s3,x6/3,pn/p,x8/9,s15,x3/4,s1,x5/9,pm/a,x1/4,pe/b,x8/13,s7,x6/7,pk/j,s11,x3/1,s4,x2/9,s14,x6/4,s14,pb/l,s13,x0/3,pf/j,x1/10,s8,x12/11,s12,pe/h,x14/15,s10,x13/3,s11,x6/12,s10,x5/0,s7,x10/14,s11,x4/3,pk/j,x13/0,s8,x14/9,s12,x3/13,pi/m,s11,x9/11,s9,x4/3,s9,x12/7,s3,x0/11,s14,x2/8,pl/h,x5/14,s12,x11/7,s13,x12/2,po/c,x11/8,s3,pm/n,s15,x15/10,pl/c,x8/0,s6,x1/6,pb/p,x4/0,s1,x5/3,pd/i,x2/1,pl/k,x4/13,s8,x3/1,s2,ph/p,x11/4,s5,x9/10,s13,x15/14,pl/f,x2/6,pi/e,x10/0,s3,pn/k,x15/5,s6,x10/9,s8,x8/0,pi/l,x7/1,pg/a,x9/8,pb/p,x7/5,pj/h,x10/0,s9,x11/1,s8,x15/8,s8,x3/9,pd/a,x14/2,pf/c,x10/3,s5,x6/5,s8,x0/10,pd/j,x15/2,s4,pn/o,s13,pj/i,x0/9,pl/b,s12,x11/1,po/g,x13/9,pe/k,x0/15,pl/m,x9/14,po/i,s7,x6/13,s8,x8/1,s3,x12/11,s15,x3/13,s12,x5/0,pk/c,s7,x10/9,pf/m,x3/8,s3,x9/7,s8,x0/4,s7,x14/3,s1,x1/9,pg/a,s3,x5/15,pe/f,x6/13,pb/k,x4/3,po/n,x8/14,pg/i,x11/15,pd/c,s14,x1/0,s13,x15/14,s4,x12/5,s5,x15/7,ph/e,s2,x5/13,s4,pg/k,x2/3,pa/n,x15/5,ph/l,s9,x13/9,s13,x0/8,pb/p,x13/2,s9,x11/4,pk/j,x6/5,s7,x7/1,s5,x5/2,pm/p,x9/14,s11,x2/10,pg/c,x8/9,s5,x4/11,s13,pn/a,x9/0,s13,x5/8,s1,x9/0,s2,pi/p,x4/8,s13,x12/0,pb/m,x4/3,s6,pk/i,x7/12,s11,x11/9,pc/e,x15/14,pn/m,x4/8,pc/e,x9/11,pi/a,x14/6,pl/o,x0/12,pa/g,x9/7,s1,x6/5,s1,x9/3,ph/k,x7/5,s10,x11/1,s4,x5/13,s13,x7/9,pb/c,x5/13,pd/a,s5,x1/6,s5,x13/5,s8,x0/12,pj/g,x13/2,s12,po/e,x5/4,pk/d,x9/13,pp/a,x10/5,pg/n,x0/7,s4,x12/2,pi/k,x5/15,pb/e,s13,po/g,x7/11,pd/a,x12/9,ph/e,x8/2,po/n,x12/7,pg/k,x6/5,s5,x12/4,s2,x10/5,pf/e,s4,x8/2,s5,x5/14,s10,x7/15,s5,x2/9,s8,x3/6,s11,x0/8,s8,pm/a,x3/13,pb/l,x8/4,pa/j,x11/6,s6,pn/k,x7/15,s14,x6/8,pj/a,x14/0,s3,x13/8,ph/i,s13,x3/1,pj/d,x10/14,s10,x7/4,pm/h,x13/10,pp/j,x14/9,pa/h,x2/15,s7,x6/1,s4,x0/4,s6,pj/p,x7/9,s13,x6/4,ph/b,x12/11,pd/f,x4/10,pb/h,x13/7,s8,x11/15,pn/d,x14/3,s11,x12/15,s2,x2/6,s5,x15/3,pk/l,x5/12,s2,x14/8,pc/g,x6/7,pf/p,x8/3,s12,x10/11,pm/o,x7/6,s10,x2/1,pp/j,x15/10,pa/n,x1/0,s9,x8/13,pg/e,x0/4,pd/m,x15/14,pc/j,x1/7,s4,x0/6,pb/o,x9/15,s15,x10/13,s2,pj/d,s9,x12/6,s5,x11/15,s7,x1/0,s6,x4/6,s2,x11/5,ph/n,x6/12,s14,x4/5,s6,x15/6,s8,x12/2,pb/i,x6/9,s15,x8/13,s2,x5/1,s6,x0/10,pe/d,x7/8,s10,x14/1,s13,x8/4,s12,x11/5,pb/m,x7/9,s2,x11/6,s11,x12/9,po/k,x11/4,pc/m,x1/8,pf/o,x3/13,s8,x10/9,s3,x13/12,pb/g,s8,x7/9,s9,x11/4,s4,x10/8,pi/m,x13/3,pa/d,x0/15,s6,x11/10,s14,x8/4,s13,x5/15,ph/n,x10/8,s4,x0/12,s1,x11/14,s5,x6/0,pa/b,s12,x1/11,s7,x3/9,pf/e,x13/15,pm/l,s1,x8/5,ph/f,x6/0,pe/m,x7/14,s1,x5/1,s11,x14/12,po/j,x13/15,pk/f,x4/11,ph/j,x5/8,s11,x15/1,s14,x2/13,s5,x14/1,pl/g,x11/2,s9,x8/7,pb/c,x2/14,s9,x9/12,s3,x4/3,s3,x10/11,s6,x1/15,pl/f,s13,x7/11,pm/n,x3/6,pl/p,x10/4,s10,x7/6,s6,x3/11,s8,x5/2,s1,x15/8,pj/g,x10/0,pa/e,x4/2,pp/c,x12/13,s3,x8/15,s5,x4/2,pf/l,x14/5,s1,x12/10,s4,pi/a,x3/2,po/e,x8/7,pi/c,x5/6,s11,x9/7,s3,x13/12,s15,x10/3,s3,x0/7,s7,x6/8,pj/l,x15/11,s14,x9/7,pp/a,s4,pk/g,x1/2,s7,x14/6,ph/i,x0/9,pp/f,s8,x5/3,s15,pc/b,x10/2,s15,x1/3,s6,x15/12,s6,x9/1,pm/f,x12/11,s3,x10/15,pj/k,x3/5,s5,x4/6,s15,x12/1,s11,x14/2,s14,x1/15,pb/d,x2/10,s4,x14/4,s5,x2/7,s15,pk/l,x10/14,pd/b,x0/1,s11,x14/7,pi/l,s3,x1/11,pb/m,x5/7,s12,x4/1,pk/c,s8,x11/2,s8,x1/13,s11,x3/14,pp/m,s15,x8/10,pk/b,x6/7,pf/j,x14/8,s7,x12/7,s6,x4/11,pe/n,s5,x1/3,s13,x5/14,pm/d,s9,x11/12,s8,x2/1,s2,x0/12,pg/p,x15/13,s14,x3/12,s8,x14/6,pe/j,x0/11,s10,x3/4,pp/b,x6/12,s6,x5/2,pc/h,x8/4,pp/k,x14/5,s14,x7/13,s3,x2/10,s3,x11/1,s4,pl/b,s9,x0/12,ph/i,x15/8,s12,pl/p,x5/0,s1,x2/9,s4,x15/4,s14,po/m,x2/14,s1,x4/7,s14,x8/6,s13,x5/10,s4,x3/11,s5,x9/2,s6,x5/10,pd/a,s11,x8/0,s6,x7/13,s4,pg/i,x11/3,s15,x15/13,pk/d,x7/8,pi/l,x1/2,pk/a,x9/13,s2,x12/14,s8,x13/9,s2,x0/15,pg/f,x11/4,pi/o,x0/7,s7,x6/4,pk/n,x14/5,s10,x13/12,pf/l,x3/14,s13,x8/11,pg/n,x1/9,s12,x5/14,s8,x7/3,s11,pf/j,x10/12,pd/e,x13/11,s13,x1/4,pc/n,x7/8,s9,pa/k,s9,x9/1,s9,x7/11,s10,x9/2,s7,x10/15,ph/d,x7/6,pl/m,x3/2,ph/f,x5/10,pp/g,s13,x12/6,pj/c,x10/8,s3,x6/11,pk/o,x12/15,s12,x10/0,pf/l,x6/1,pc/g,x0/4,s1,x15/7,s10,x9/12,pj/n,s12,x4/5,s7,x9/6,s10,x15/10,s10,x4/9,s10,x0/8,s6,x7/3,pm/g,x15/1,s13,x2/7,s12,x6/15,s2,x5/2,s3,x15/14,s5,x4/3,pc/l,x10/9,pa/e,x3/11,s4,x0/13,s2,x15/10,s8,x0/4,pp/j,x14/13,pl/d,s6,x1/6,pe/o,x14/13,ph/c,x0/6,s3,x1/2,pb/e,x4/5,s11,x1/3,pc/o,x2/9,s14,x12/11,pm/j,x1/7,s11,pi/l,x5/6,s12,x15/8,pj/f,x5/1,s9,x11/12,s3,pb/n,x10/2,s10,x1/4,s11,x12/0,s7,x13/7,s14,x0/3,s9,x8/15,pi/j,x0/11,s5,x13/15,s11,x7/11,ph/f,x8/10,pm/n,x13/12,ph/j,x8/10,s6,x7/5,s7,x4/3,pa/o,x8/15,s4,x3/1,s8,x6/10,s9,ph/c,s6,x12/14,s12,pp/i,s8,x4/9,s1,x8/12,s3,x2/6,s14,x4/11,s2,x8/5,s10,x7/4,s14,x8/12,s4,x5/2,s1,x8/9,s5,x7/12,pb/a,x11/3,s14,x13/12,s4,x9/6,pi/l,x15/2,pk/c,x12/7,pa/d,x9/4,s14,x1/14,pm/e,x6/9,s3,x7/8,s7,x6/14,s12,x3/7,s15,ph/d,s9,x6/12,pc/a,x7/11,s6,x8/12,s1,x3/5,s1,pm/p,x8/15,s14,x0/2,pn/d,x14/8,ph/c,x13/12,pg/i,s5,x8/14,pk/m,x15/2,pp/l,x0/12,s5,x2/7,pk/e,x1/13,pi/h,x6/9,s1,x2/12,s13,x7/10,s12,x12/14,po/k,x11/4,s1,x3/8,s1,x10/2,s9,x5/4,pj/h,x13/10,s8,x8/2,pd/p,x6/3,pi/n,s9,x4/12,pj/e,s5,x8/0,s9,x4/5,s12,x10/7,pm/d,x6/8,pe/i,x0/4,pb/j,s11,x3/13,s8,pg/c,x4/11,s9,x14/5,pl/n,x10/11,s6,x5/0,pk/b,x1/3,s13,x13/4,ph/n,x2/8,s10,x11/3,s6,x7/10,po/c,x3/14,pa/k,s1,x11/8,pb/n,x0/12,s4,x5/9,s6,x2/1,s6,x6/8,s3,x5/13,ph/f,x10/1,pb/l,s9,x12/11,s15,x5/15,s8,x3/1,pd/p,x11/0,s7,x9/15,s5,x0/7,pc/n,x12/10,ph/j,x14/9,s2,x15/0,s1,x7/10,pa/n,x2/15,s1,x11/4,s14,x2/6,pj/i,x13/11,s7,x14/10,pb/f,x8/6,s11,x7/12,pm/i,x13/14,pk/o,x7/12,s12,x3/8,pj/g,x13/7,s15,x1/4,ph/n,x0/15,pl/g,x12/5,s15,pd/h,s11,x9/3,pa/n,s2,x12/6,pk/j,x10/0,s7,x3/8,s13,x0/7,pa/i,x12/11,pj/f,x5/1,s11,x13/12,s9,x15/3,pp/m,x9/5,s8,x8/2,pd/e,s8,pm/n,x10/13,s7,pd/h,x4/9,pj/c,x3/7,s10,pa/l,x12/1,s3,x2/3,pi/o,x10/5,s7,x14/0,pl/m,x2/13,s1,x5/7,s7,x14/1,pi/e,s6,x2/15,s12,x9/3,pf/n,s2,x12/13,s2,x8/1,pa/k,x7/14,pe/p,x11/6,s8,x0/9,s6,x2/15,s13,x7/9,s3,x2/10,pc/o,x3/11,s15,x15/9,pp/k,x4/12,s14,x9/11,pl/i,s13,x6/0,s9,x2/14,pc/g,x9/11,s9,x2/12,s2,x0/3,pd/j,s5,pg/p,x9/6,s8,x10/12,s9,x7/5,s8,x14/13,s13,x8/11,pa/l,x1/0,s8,x11/5,pm/n,x3/10,s2,pc/g,x2/4,pj/d,x15/7,pc/b,s5,x10/12,s8,x15/14,pj/i,x4/11,s8,x1/7,s2,x13/3,pe/p,x15/2,ph/i,x7/10,s12,x13/11,s15,x14/1,s9,x6/11,s12,x1/12,s11,x4/9,s2,x12/8,pd/p,x5/3,po/f,s3,x14/1,s1,x0/3,s9,x8/9,s14,x4/0,s5,x2/6,s2,x0/14,s2,x3/12,s2,x15/9,s6,x6/3,s3,x4/7,pd/g,x2/3,s2,x7/0,s7,x11/6,s10,x9/15,s10,x5/3,s6,x9/2,pf/p,s9,pl/c,s14,x7/11,s3,x5/15,s1,x9/11,s6,x0/13,ph/g,x12/14,s12,x7/4,pm/k,x12/11,s4,x3/7,pl/h,x10/14,s2,pj/g,x0/11,s10,x9/15,s7,x1/7,s14,x3/10,s8,x12/1,s12,x2/5,pp/i,x4/6,s9,x8/2,s14,x0/4,s11,x11/9,s11,x13/6,s8,x0/1,pb/e,x10/5,s3,x2/13,s7,x7/15,s6,x6/8,pn/d,x10/14,s7,x13/5,pf/m,x7/0,pg/l,x8/2,s4,x9/0,pa/m,x2/7,s8,x10/0,pb/f,x15/1,s3,x9/10,pk/d,x14/0,s7,x12/1,pf/h,x9/7,s9,x4/11,pi/n,x0/14,s3,x5/2,s8,x11/0,s11,x15/5,pg/a,x4/6,pk/m,s4,x2/11,s4,x3/8,pi/o,x13/4,s6,x14/9,s14,x3/15,pl/j,x0/9,s12,x2/12,s8,x13/8,ph/n,x10/9,s9,x0/1,s1,x12/5,s3,x3/15,s14,x10/2,pi/p,x1/12,pd/b,s3,x11/2,s13,x10/15,s6,x12/3,s10,x6/15,s3,x10/3,s1,x4/13,s6,x14/5,po/m,x7/0,s6,x5/2,s11,x3/13,pb/d,x7/12,s15,x4/15,pp/c,x5/1,pg/n,x14/15,s13,x12/4,s3,x5/7,s15,x11/4,s3,x13/7,pl/k,x4/0,s3,x1/3,s3,x10/12,s7,pe/i,x11/6,s6,x0/15,s7,x14/12,s9,x10/3,pf/p,x1/11,po/c,s10,x3/15,s10,pi/k,x6/4,pm/g,s11,x1/10,s8,x6/13,s7,x2/14,s11,x15/13,s14,x5/2,pf/b,x13/0,pm/i,s7,x1/2,s13,x11/7,s9,x5/9,s10,x11/15,pb/o,x13/10,s11,x2/6,s4,x8/12,s3,x10/13,pc/n,s14,x7/9,pf/m,x6/8,pi/g,x13/9,s1,x15/3,pl/m,x1/5,s5,x3/4,pd/j,x14/9,s15,pe/f,x6/5,s11,x10/11,s11,x7/15,pp/a,s9,x11/14,po/c,s13,x8/13,s7,x7/11,pi/f,x14/6,s6,x10/15,pj/a,x13/6,s14,x7/1,pl/b,x2/14,s10,x3/15,s2,x9/8,po/d,x12/15,pn/h,x4/1,s5,x2/15,pp/f,s6,x10/7,s8,x3/1,s13,x11/5,s5,x2/1,pb/h,x15/0,s12,x10/4,s13,x9/6,s4,x3/4,s9,x9/8,s15,pj/e,s13,x12/11,s1,x8/14,s7,x12/11,po/g,x4/14,pa/e,s12,x6/2,pp/o,x7/10,s1,x11/5,ph/m,x7/1,pn/o,x5/15,pm/i,s12,x9/0,s3,x5/7,pa/n,x10/11,pk/b,s2,x6/14,pi/f,s2,x9/4,s4,x12/2,s6,x13/14,s13,x10/1,pk/e,s10,x6/3,s5,pd/n,x4/5,s10,pe/i,x1/14,s5,x12/10,pj/f,x0/9,pc/d,x13/14,s11,x3/5,pn/l,x6/2,s10,x1/3,s15,x2/14,s1,x4/10,s13,x7/13,s5,x3/1,s8,x7/2,pi/a,s15,x9/14,s14,x11/0,s5,x1/5,pj/c,x10/6,pp/k,x3/13,s5,x11/12,s13,x15/0,pl/c,x4/11,s2,x10/5,po/b,x8/2,pa/m,x0/11,s14,x6/15,s14,x5/12,pg/j,s5,x9/4,s4,x3/12,po/n,x15/11,ph/m,x4/13,pi/e,s12,x3/6,s13,pd/n,x8/11,s11,x3/0,s12,pc/b,x12/1,pf/d,x3/6,s4,x5/13,s2,x2/4,s2,x15/10,po/g,x14/6,s5,x12/8,s12,x3/7,s7,x14/8,pf/j,s5,x15/11,s8,x3/7,s12,x0/8,po/g,x3/10,pe/m,s13,x15/9,s7,x10/8,s8,x14/15,s13,pl/a,x6/2,s9,x7/9,pe/b,x2/15,s14,x3/13,s7,x14/7,s13,x0/4,s14,x13/9,pk/l,x15/6,s4,x13/4,po/c,x2/1,pa/p,x4/9,s14,x15/10,ph/c,x14/12,pj/g,s8,x2/6,s9,x0/1,s9,x7/11,s10,x5/15,pm/e,x9/14,pb/c,x3/15,s9,x6/7,pk/f,s8,x9/4,pg/b,x0/7,pn/j,x11/15,pf/e,x5/13,pb/m,x12/0,s6,x2/9,s7,x5/6,ph/l,s5,x1/0,pg/f,x8/6,pn/d,x0/14,po/a,x2/15,pb/c,s10,x13/4,po/l,x6/1,pc/h,s10,x2/3,pe/b,x12/7,s15,x9/0,s5,x13/8,s1,x5/6,pk/c,x13/11,s10,x7/14,s2,x10/1,s13,x5/14,pe/l,x8/13,po/b,x11/7,s10,x2/0,s4,x9/13,s13,x3/14,s13,x4/10,s14,x14/2,pj/g,x3/1,s15,x11/6,s3,x13/4,s1,x6/1,s14,x4/14,s6,pk/a,x12/11,s11,x9/15,s6,x12/2,ph/j,x0/1,pe/b,x14/6,s10,x13/7,pi/f,x14/2,s14,x12/0,s7,x1/9,pj/h,x14/13,pg/d,x6/12,s15,x1/7,s5,x9/0,s10,x1/7,pc/e,x15/14,s5,x13/0,s10,x15/7,pj/i,s3,x4/0,s14,x7/3,s15,x14/5,pf/m,x2/1,pb/a,x3/6,pe/n,x9/2,pk/i,x10/15,s2,x4/7,s13,x15/13,s11,x2/6,pp/j,x15/11,s15,x14/5,pn/i,x4/12,s13,x2/6,pg/p,x0/3,pd/a,x15/8,pk/b,x9/14,pf/n,s11,x10/12,pl/a,x2/1,s8,x11/8,pf/h,x12/2,pc/e,x11/5,s6,po/m,x13/9,s5,x0/6,s1,x5/14,s5,x2/8,s11,pj/n,x11/15,s2,x2/3,pe/f,x4/15,s15,x3/6,s14,x0/1,s15,x12/11,pa/c,x5/1,s2,x14/9,pn/p,x0/7,s5,x14/5,s7,pd/c,x11/9,s15,x2/8,pi/b,x15/9,pk/g,x7/3,s15,x2/1,ph/o,x14/6,s7,x12/2,s7,x6/3,s4,x2/8,s3,x4/11,s3,x6/8,s5,x14/15,pe/p,x4/10,s3,x2/6,s2,x15/7,pg/o,x8/11,pc/a,x12/15,s14,x7/13,s4,x14/8,pl/h,s14,pb/p,x12/5,pe/a,x4/7,ph/c,x10/2,pj/m,x6/7,pd/b,s6,x4/9,s12,x10/12,pl/p,x3/8,s13,x10/6,pj/b,x14/15,pn/a,x1/8,s13,x14/6,po/h,x12/9,s7,x5/2,s3,x8/12,s14,x5/14,pe/a,x0/1,s1,x12/3,pl/p,s9,x9/2,s13,x11/1,pg/d,x12/2,ph/f,s10,x11/3,s9,x4/2,pd/e,x14/9,pn/l,x13/6,pi/k,x15/1,s14,x6/12,s6,x15/0,s4,x8/11,pp/j,x9/0,pd/e,x11/4,s15,x8/9,pj/i,x15/10,s3,x5/2,pl/h,x15/8,pe/p,x12/4,s9,x8/2,s5,x10/6,s14,x0/9,s14,x5/3,pm/c,x11/1,pd/o,x9/15,s10,x4/8,s14,x6/7,s12,x14/5,s9,x12/11,s2,x10/13,pi/m,s15,x15/5,s7,x10/2,s6,pk/l,x12/6,pd/h,x11/10,s9,x1/14,s3,x7/12,pf/e,s14,x3/2,s5,x0/12,s8,pc/b,x1/8,s5,x6/9,s3,x10/8,po/m,x14/9,s4,x13/15,pn/f,x3/8,s6,x15/0,ph/d,x13/3,pi/l,s13,pa/p,x12/8,pb/j,x5/13,s2,x3/15,s5,ph/p,x4/1,pj/k,x11/2,s1,pl/o,x7/1,s4,x15/12,s3,x10/4,s10,x0/2,s7,x5/4,s10,x10/1,pb/c,s8,x13/8,s3,pd/p,x6/15,s1,x13/4,s3,x0/7,s8,x8/6,s4,x2/3,s5,x9/4,s4,x3/14,s15,x15/1,s12,x2/5,pg/i,x11/9,pc/d,x3/2,s14,x15/10,pj/p,x7/13,pg/f,x12/15,po/n,x5/1,s14,x6/3,s6,x5/4,s13,x0/7,s1,x1/5,s15,x3/8,s1,x14/11,s11,x5/3,s1,x11/4,s10,x14/9,s4,x13/11,s12,x12/10,s2,x9/2,s6,x12/6,s1,x9/1,pd/f,x10/4,pe/p,x12/3,s9,x2/11,s12,x1/12,s3,x3/4,s1,x9/12,pj/n,x11/10,s3,x6/14,s2,x4/8,s7,x11/14,s3,x9/1,s7,x5/13,po/d,x9/10,pj/e,x1/6,s5,x13/3,pc/d,s8,x4/1,pp/n,x10/11,pd/o,x5/13,s4,x10/8,s13,x12/1,s14,x9/2,s9,x4/0,s6,x11/10,s12,x15/5,s9,x12/6,s7,x15/1,s6,x9/8,s1,x5/15,pm/c,x6/14,s1,x1/10,s2,x11/5,s5,x0/3,s6,x14/1,pl/o,x8/10,s1,x2/14,s6,x15/5,pg/i,x3/8,s1,x0/6,s10,x1/14,s10,x13/2,s7,x6/10,s3,x2/15,s14,x11/0,pk/h,x10/12,s3,x1/6,s8,x10/9,pp/m,x5/7,s14,x8/15,s14,x0/9,pa/l,x13/15,pc/g,s13,x1/14,s5,x15/7,s7,x12/3,s5,x15/4,s8,x13/11,pk/d,x2/15,pp/l,x14/1,s4,x8/5,pm/i,x9/11,po/g,x1/7,s15,x9/13,s12,x3/6,s15,pa/n,x7/1,s14,x15/11,pm/p,x14/6,ph/b,x15/2,s3,x4/9,s4,x5/7,s5,x3/13,s6,x11/14,s8,x2/8,s6,x6/0,s5,x1/10,s6,x14/13,s1,x7/8,pm/e,x1/3,pb/j,x15/4,s10,x6/12,s9,x0/10,s15,pk/p,x5/4,s2,x3/9,pb/l,x10/13,s8,x2/15,pa/f,s14,x12/1,pe/k,x4/14,ph/j,x1/3,pd/l,x0/4,pb/k,x7/11,s12,x4/12,s4,x0/14,s8,x1/15,s9,x13/9,s2,x6/7,s3,x12/13,pg/e,x4/6,pf/c,x0/1,s10,x12/13,s2,x9/10,pe/g,x6/2,pl/f,x7/12,s2,x6/10,pj/g,s11,x3/2,s11,x11/0,po/a,x14/9,pg/l,x4/12,s7,x5/11,pm/b,s11,x12/10,po/a,x5/3,s3,x0/9,s6,x15/4,s3,x6/11,s1,x9/2,s9,x10/6,pe/g,s7,x9/2,s8,x10/13,s11,x6/15,s14,x12/11,pm/a,x7/14,po/c,x9/3,s13,x2/5,pd/f,x13/12,s10,pe/n,x4/9,pk/c,x2/5,s3,x8/10,s1,x1/7,s9,x6/14,s6,x8/4,pf/n,x0/9,s13,x14/2,pl/c,x11/8,pd/a,x2/9,s9,x7/5,pm/b,x1/11,s8,x0/4,pc/f,x12/13,s12,x11/6,s4,x4/3,ph/i,x15/1,pm/g,x4/3,s3,x2/8,s13,x14/0,pj/b,x7/2,pg/i,x11/13,pa/f,x15/7,s11,pn/i,x11/6,pd/g,x9/3,s14,x1/4,s6,x6/11,s10,x15/2,s11,x11/1,s10,x6/4,s6,x14/7,s9,ph/n,x5/11,s8,pj/e,x7/9,s6,x6/11,s2,pc/h,x10/7,s14,x9/1,s7,x15/5,pk/o,s3,x14/7,s7,x0/2,s12,x1/14,pp/a,s8,pk/m,x12/8,s12,x9/13,s6,pj/i,x10/6,s12,x4/15,pp/g,x7/5,s7,x14/15,s6,x5/13,s4,x9/8,pe/a,x0/11,s14,x15/2,pm/o,x11/7,s10,pi/g,x8/5,po/m,x3/12,s5,pg/c,x1/8,pd/o,x11/10,s2,x6/5,ph/p,x14/11,po/b,x9/2,s15,pj/i,s15,x12/14,s10,x11/7,pm/p,s5,x10/3,s10,x7/8,s15,x11/5,po/b,s5,x15/14,s10,x3/6,pd/f,x2/10,pm/e,x4/14,s12,x5/11,s8,x12/8,s11,x10/5,s12,x0/8,s3,x5/2,s10,x11/14,s4,x4/7,pl/n,s10,x14/8,s13,pm/k,x10/15,pi/f,s1,x0/14,s11,x2/13,pc/o,x10/4,pi/g,s1,x13/14,pa/j,x9/5,s1,x4/7,s5,x1/13,s4,x5/9,pi/b,x8/11,pj/a,x2/10,pe/f,x4/12,s10,x0/3,s5,x7/12,s11,x11/6,pi/k,x5/1,s1,x0/2,pl/f,x5/15,pp/c,x14/10,pa/k,s14,x7/11,ph/b,x0/5,pe/a,x14/7,ph/i,x0/13,s9,pb/j,x1/9,pc/k,x3/8,ph/n,x10/6,pi/o,x15/7,s15,x0/14,pj/f,s1,x4/5,s11,x12/11,s4,x3/6,s5,x1/12,pp/l,x2/4,s15,x8/3,s7,x7/12,pj/o,x4/13,pe/d,s2,x6/3,s15,x5/8,s14,x3/9,s1,x7/0,s11,x2/8,pp/i,x12/13,s15,x9/11,s4,x3/4,po/n,s12,x2/11,s14,x7/6,s4,x9/14,pm/a,x2/13,s12,x9/14,s14,x5/3,pp/j,x15/7,pd/k,x0/6,s9,x12/11,pn/i,s8,x5/14,s11,x4/10,s7,x11/6,s7,x5/2,s6,x11/7,s2,x0/9,ph/d,x1/2,s7,x3/8,s11,x6/9,po/e,x0/2,s9,x8/7,s12,x4/0,pb/n,x5/11,s4,x8/1,pm/p,x12/5,s6,x2/7,s9,x6/13,pk/f,x15/3,s15,x0/5,pi/j,x11/14,pl/e,x8/4,s10,x12/9,s3,x6/1,s3,x8/9,pg/k,x6/10,s3,x15/3,s1,x8/0,s1,x6/13,pa/h,x8/7,s4,pb/f,x9/2,s10,pi/a,x1/0,pl/j,x14/3,pf/d,x9/1,pe/i,x8/4,pa/f,x7/12,pc/h,x1/10,s13,x9/15,pb/f,x5/1,ph/j,x14/12,s10,pf/p,x8/1,s4,x6/2,pa/b,x3/7,pp/k,x5/11,ph/f,x10/12,s3,x0/8,pk/d,x10/4,pb/c,x0/13,pg/o,x10/2,s14,pb/k,x5/1,s3,x10/9,ph/j,x4/8,s7,x9/7,s6,x1/5,s9,x14/13,s3,x11/6,s15,x13/9,s4,x5/7,pn/b,x10/12,s8,x1/8,s7,x3/0,s9,pj/f,x7/6,s4,x8/1,s7,x12/5,pe/b,s13,x9/13,pn/d,x14/8,pb/f,x4/7,s9,x9/14,s13,x2/11,s15,x6/4,pn/g,x3/9,s5,x8/14,pp/m,x11/7,s6,pi/e,x15/1,s9,x10/8,s1,x6/1,s6,ph/n,x4/8,pd/k,s10,x9/0,s8,pf/g,x4/8,pk/l,s4,x7/0,s2,x1/10,s9,x8/6,pf/b,x3/11,ph/j,x6/14,pk/l,x2/1,pp/m,x4/10,pa/k,x11/8,pg/j,x6/13,pe/k,x11/9,pg/o,s2,x13/6,s1,x14/4,s2,x3/9,s6,x11/13,s7,x14/15,pe/l,x11/6,pf/d,x9/15,pn/h,x2/4,s7,pg/m,x3/15,s10,x4/11,s1,x7/10,po/d,x12/11,s1,x10/9,s1,x8/7,s6,x1/2,s10,x8/5,s14,x13/9,s10,x2/1,pl/p,x7/4,s12,x0/3,pm/k,x8/1,pp/d,x14/15,s15,x6/11,s4,x9/4,s8,x1/12,pj/a,x8/9,s14,x13/5,pd/f,x8/4,s1,x0/15,pm/p,x4/7,pf/e,x3/5,pp/k,x12/10,s11,x4/14,pn/f,x11/13,s3,x8/2,pi/j,x14/13,s1,x12/15,pd/l,x14/4,po/b,x9/6,s4,x10/2,s2,x1/0,s9,x5/7,pk/g,s7,x14/15,s13,x9/4,s9,pa/m,x1/3,pf/e,x6/2,pd/l,x13/9,s5,pj/n,s11,x4/7,pi/f,x10/3,pb/l,x4/7,pj/g,x15/13,s5,x8/7,s4,pk/l,x9/12,s4,x2/0,s9,po/g,x6/4,pb/k,x5/0,s4,x13/4,pe/l,s11,x14/1,s4,x7/11,s11,x10/6,s10,pj/h,s14,x13/9,s15,x4/1,pe/c,x11/15,s15,x5/2,pd/i,x1/3,pb/a,x2/11,s6,x0/12,s9,pj/i,x1/3,pb/e,s13,x6/15,s7,x7/14,pp/h,s11,x3/15,s6,x7/12,s9,x1/14,pl/m,x6/8,pd/j,x2/11,s7,x15/1,s8,x3/6,s1,x15/9,pi/g,x7/1,pd/b,x6/5,s3,x13/4,s1,x0/2,pp/e,x9/15,pa/n,x8/2,s4,x1/7,s14,x11/6,pg/f,x3/1,pl/o,x6/15,pg/p,x1/12,s12,x0/6,pe/b,x15/10,s6,x3/2,s14,x14/1,s6,x9/12,s2,x14/2,s11,x3/5,ph/a,x10/2,s15,x12/13,pg/n,s2,pe/a,x4/11,s15,x15/7,s7,x14/0,s15,x10/9,pd/l,x12/4,s4,x15/5,pn/i,x10/1,pc/j,x5/12,s13,x2/9,s10,x15/10,s12,x11/9,s13,x13/14,pe/a,x15/8,s7,pj/h,x0/11,s3,x10/6,pe/m,x13/5,pc/k,x11/0,pf/j,x6/4,pe/o,x8/0,pj/c,x15/13,s7,x10/8,s10,x5/6,s1,x2/15,s6,x9/4,pb/h,x8/12,pe/o,x7/9,pp/k,s9,x0/2,s5,x8/14,s2,x0/3,pj/m,x4/12,pg/n,s8,x5/1,s7,x4/14,s15,x5/8,s5,x0/14,s9,x9/2,s4,x14/15,pj/l,x0/13,s4,x14/15,pn/k,x1/8,s15,x2/5,po/c,x6/7,ph/a,s6,x8/1,pm/b,s2,x7/13,s7,x6/5,s14,x0/7,s9,x2/1,s7,x15/14,po/e,x3/13,s8,x14/7,pk/c,x15/4,s14,x5/10,s6,pp/m,x11/6,s10,x5/9,s6,x10/11,s4,x13/14,pa/h,s2,x3/5,s10,x6/11,pm/e,s4,x8/3,s14,pj/l,x1/0,s9,pn/i,x11/3,pg/j,x4/10,pk/n,x0/8,pc/p,x3/15,pd/j,x9/7,pg/i,x12/1,s11,x3/8,pp/a,x0/14,pf/j,x12/13,s14,x8/9,pi/m,x13/3,s3,x7/6,pd/h,s2,x8/0,s5,pa/p,x4/12,s13,x1/2,s1,x8/5,pf/k,x11/1,s12,x10/7,s11,x13/1,s3,x2/6,pc/i,x15/8,s6,x14/7,s7,x11/1,pn/h,x13/5,s10,pj/c,x9/3,po/l,x14/0,pj/p,x8/3,s13,x0/7,s13,x1/14,pl/m,x11/10,s15,x4/2,s11,x13/7,s1,pd/j,x1/4,s4,x6/3,s13,x15/7,s9,x0/3,pi/n,x4/5,pm/e,x14/13,po/n,x5/12,pd/i,x7/3,s2,x8/11,ph/a,x3/14,s4,x5/4,pd/c,x12/3,s15,x10/7,s9,x8/11,pf/n,x5/15,s4,x7/10,pm/c,s14,x15/9,pg/o,x1/7,s6,x9/5,s15,x2/3,pp/d,x13/7,pb/c,x1/8,s5,x2/12,s13,x14/13,s10,x15/9,s10,x8/3,s1,x1/11,s10,x3/9,pi/l,x7/5,s10,x14/1,pn/p,s1,x0/4,s14,x12/11,s6,pg/h,x2/4,pc/a,x14/13,s3,x11/6,pl/k,x3/14,s9,x10/2,pm/o,x3/5,pd/k,x13/4,s7,x3/14,ph/i,x13/4,s6,x5/12,s15,x8/15,s11,x9/3,pc/g,x10/14,s9,x8/5,pe/m,s10,x15/11,pk/h,x4/10,pi/a,x0/11,s4,x3/9,ph/e,x11/8,pn/f,x10/1,pb/h,s12,x2/9,s7,x10/15,pp/d,x11/7,s12,x5/15,pk/h,x8/1,s1,x14/15,s7 diff --git a/2017/inputs/day_17.txt b/2017/inputs/day_17.txt new file mode 100644 index 0000000..67bf40f --- /dev/null +++ b/2017/inputs/day_17.txt @@ -0,0 +1 @@ +371 diff --git a/2017/inputs/day_18.txt b/2017/inputs/day_18.txt new file mode 100644 index 0000000..8b74206 --- /dev/null +++ b/2017/inputs/day_18.txt @@ -0,0 +1,41 @@ +set i 31 +set a 1 +mul p 17 +jgz p p +mul a 2 +add i -1 +jgz i -2 +add a -1 +set i 127 +set p 735 +mul p 8505 +mod p a +mul p 129749 +add p 12345 +mod p a +set b p +mod b 10000 +snd b +add i -1 +jgz i -9 +jgz a 3 +rcv b +jgz b -1 +set f 0 +set i 126 +rcv a +rcv b +set p a +mul p -1 +add p b +jgz p 4 +snd a +set a b +jgz 1 3 +snd b +set f 1 +add i -1 +jgz i -11 +snd a +jgz f -16 +jgz a -19 diff --git a/2017/inputs/day_19.txt b/2017/inputs/day_19.txt new file mode 100644 index 0000000..b4826aa --- /dev/null +++ b/2017/inputs/day_19.txt @@ -0,0 +1,201 @@ + | + +-----------------------+ +-------------------------------------------------------------------------------------------+ + | | | | | + +-------------------|-----------------------|-----------------------+ +-----------------------------------------------------------------------|-----+ | + | | | | | | | + +-----------+ | +---------------------------------|-------------------------+ | | | + | | | | | | | | | + | +-----+ | | | | +---------------------|---------------------------------------+ | | | + | | | | | | | | | | | | | + | | | | +---|-------+ +---------------------------|---------------------------------------------------------------------|-----|-------------+ + | | | | | | | | | | | | | + +-------|-------------------------------|-+ +-+ | | | +---------------------+ +-+ | +-----------------------+ +-------------+ + | | | | | | | | | | | | | | | | | | | | | + | +---|---------|-----------------------|---|---|---|---------------|-----------------+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | + | | | +-|-----+ | | | | | | | | +-------------------------------------|-----------------------------------------|-+ + | | | | | | | | | | | | | | | | | | | | | + | +-------------|-----------------------|---|---|----Y------|-------|-----------------------------------------------------------+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | +-----------------------------------------------------------|-----|-------------------|-+ | | + | | | | | | | | | | | | | | | | | | | | | | | + | | +---------------------------|-----------|---------------|-------------------------------------------------------------------------------------|-----------------+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | +---------------------------+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-+ | | | | | | | | | | | | +-+ +-------------------------------------|-----------------------------------|-----+ | +-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-|-------------------|-------------|-|---------|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-+ | | | | | | | +-----|-------------|-----------|---|-------------------------------------------------------------|-|-----|-----------|-------|-|---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-|---|---+ | | | | | | | | +-------|-----|-|---------|-------|-|-----+ | | | | | | | | +-|---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | +-|---+ | +---------|---|-----|-------------------------------|-----------------------|-----------+ +-|-------|-|---+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-|---------------|-------|-----|-------------|-----|---------+ | | +-|---+ | +-------------------+ | +-------------------|---------|-+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------|---+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-|---|-|-------|-----------|-----|---------|-------|-------|-+ | | +-+ | | | | +-----------+ | | | +-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | +-----------------|---|---|-|---+ | +-----------------------|-------+ +-+ | | +-|-|---|-|-------|-+ | | +-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | +---|-----|-------------|---|-+ +-------|---------+ | | | | | | | | | | | | | | | | | | | | +-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|-|-----|---|-|-|-------------------------------------------|-----|-|-------+ | | | | +-----|---|---------+ | | +-----------|---------+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-|---|-|-|-+ | +---|---|-------------------------+ | | | | | +---|-------|---|-+ +-|-|---|-|-----------|-----------|-----|-|-----|---|-|-----+ | +---|-----|---+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | +-----|-------------------+ | | | | +---|---------+ | | | | | | | | | | +-------|-|-----|-----|-------+ | | | +-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +---------------------|-+ | | | | | | +-----|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | +-|-|-----|---|---|-|-|-|-|-------------------+ | | | | | | | | | +-|-----+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-|---|---------------------------|-------------+ | +---+ | | | | | | | | | | | | | | +-----|-----------|-----|-------|---|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +---------|-|-|-----------------------|-|-----------|---------------|-----|---|---------|---|-|---|-|-|-----|-----------|-------|---+ | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | E | | | | | | | | | | | | | | | + | | | | | | | | | | +-----|-----------|---|---------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---|-+ | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-|-------------|-|-|-----|----------U----|-|---|-------|-------------|-|-|---|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +---------------|---------------------------|-----|---------|-----|-------------|-----------------+ | | | | | | | | | +-+ | +-|---|-----------------+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|-----+ | +-|-+ +---------------|-|---+ | | | | | | | | | | | | | | | | | +-------|-----------------------|-|---|---|-|-----|---------|-|---------|---------+ T | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-----------------------+ | | | | | +---+ | | +-|-----|---|-|-|-+ | | | | | +-------|---+ +-+ +-|-|-+ | | +---+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | +-----------|-----|-----------|-----|-----|-----------------|-|---|-------------|---|---|---|-----|---------|---------|-------|-----------+ | +---|-|-|-|-|---|---|-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +---+ | | | | | +-|-----|-----|-------|---------|-+ | | | | | +---|-----|---------|---------|-------------+ | | | +-----------|---|-------|-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------|-----|-|-----|-------|-|-----------|-|-|-----|---|-------|-------|---|-|--D------|-|---|-------------|---------+ | +-------------|-|-----------------|-|---|-|-|-------|-------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +---------|---+ +-------|---|-------+ | | | | | | | | | | | | | | | +---|---------|---+ | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------------|---|-|-----|-----+ | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------+ +-+ | +-|-----|-----|-----|-|-|-------|-|-------|-|-|-|---+ | | | +-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-|-------|-------|-----------------------------------|-+ | | | | | | | | | | | | | +---------------|---|-|-----|-|-|-------|-|-------+ | | | | +-|-|---|-+ +-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +---|-|---------|-|---------|-|---|-|-----|-----|-|-|-----+ +---------+ | | | | | | | | | +---|-|-|-|-+ | | | +-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | +-------------|-|-----------------|-----------|-|-----|-----|-----|-|-----+ | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-----|-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|---+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | I | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-|---------|-----|---------------------------+ | | | | | | | | | | | | | | | +-|-------+ | | | | | | | | | | | | | | | | | | +-+ | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|---|-------|---|-----|-|-----|---------------|-----|-----|-----------|---|-----------|-|-----|-----|---------------|---------|-|-|-+ | | | +-------|-------+ | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +---|-|-+ +---------+ | | +-------|-----|-----|---------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-|-------|---+ | | | | | | | | +-----------------|-|---------------|---+ | | | | | | | +---|---|-----------|-|---+ | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | +---|---|-|-------------------------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-|-------|---|-----|-----|-----------|-------------------------|---|-+ | | | | | | | | | | | | | | | | | | +-----|-----------|---|---|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-------------|-|-|-------|-----|-------|---------|---------|-------------------|-|---------+ +-|---|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-|-------------|---------|---|-|-----|-|-------------------|-|-----|-----|---------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-----------|---|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +-----|---|-----------|-|-|---------|-----|-|-------------|---|-------+ | | | | | | | | | | | | | | | | | | | | +---------|-|-----------|---|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +---------|-----|---|-|-----|-----|-----|-|-|-----|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-|---|---|---|-------|-----------|-|-+ +-|-|-----+ | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-----|-|-+ | | | | | | | | +-----------|---|-----|-|-------|-|---|-|N|-|-----|-------|-|-----------|---|-|-----|-+ | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|-|-------|-|---|-------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----+ | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-------|---|-+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | +---|-----|-----------|-|-|-|-----|-|---|---|-+ | | | | | | | | | | +-|-|-|-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +---+ +---|-------|---------------|---|---|-------------------|-------------------|-|---|-|-|---|-|-------------------|-----|-----|-|---|---+ | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----|---------------|-----------|---|-------|-----------------|-------|-------|-----------|-------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | +-|---|---|-------------------|-----|-----|-----|-|-|-|-----------+ | | | | | | | +-|-|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----|---------------|-------|---|---+ | | | | | | | +-----|-|-----|-|---|---|---|-|-|---------|---------|---------|---------+ | +-----------+ | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---------------|---|---|---|-|---------|-|---+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | +-------|-|-|-------|-------|---|---------|-------|-----------+ +-|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | +-------|---------|-----|---------|---------------------|-----|-----------|-|-----------|-+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | X | | | | | | | | | | | | + | | | | | | | | | +-----|-----|-|-|---------+ | | +-----------+ | | | | | | | | | | | | | | | +-----------+ +-|---+ | +-|-------|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | +-----------------|-|---+ | | | +-------|-|-------------|-------------|-----+ | | | | +-|---|-----|-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------|-----------|-----------------|---|---|-----|-+ | | | | | | | | +-----|-|-|---|-------|-----|---------------|-----|-----|-|---|-----------|-----|---------|-----+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +---+ | | | | | +---------------------|-----|-----|-|-------------|-----|-----|-|-----------|-|-|-|-|---|-------------|---------|-----+ | +-----------|---------|---|-----|-----|-|---|-+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|---|-----|---|-----|-------|-------|-----------|---------------------------|-|-|---------------------|-|-|---------------------|---+ | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | +-------|-----|-----------------+ | +-+ | | | | | | | | +-|-|---|-+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-----|---+ | | | | | | | | | | +-|-|-------------|-|-----|---------+ | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | +-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-----|-|-|-------|---|---------|-------|---------|---|-----|-|-------------------|-------|-------------|-----|-|---------|-|---------------|---|-----------------|-------|-|---|-----------|---------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------+ | | | | | | +-----|---|-----|-----|---|-|-------------------------|-|-|-----------|-|-----|---------|-----|-----------------|-----|-----|-|-------|-----------------|---------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | +---|-|-----------|-|-|-----|---------|-----|-----------|---|-|---+ | | | | | | | +-----------|-+ | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | A | | | | | | | | | | | | | | | | | | | | | | | | | + +-----|-----|-|---|-+ | | | +---+ +-----|---|-------------------------+ | | | | | +---------|---------------|-----------|-----|-+ | | | | | | +-|-------------|-|-|-|---|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | +-----|-----------|-+ | | | | | | | | | | | +-+ | | | | | +---|---|---+ | | | | | +---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-|-----|-|-------|-----------+ | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-----|-|-----------|-+ | | | | | | | +-------|-|-------------|-----|-----|-----|---------------------|-|-------|---|-|---|---|---|-----|-----|---+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | +---|---+ | | | | | | +-|-|---+ | | +-+ | | | | | | | | +---|---|-|---|-------|-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-------------|-+ | | +-|-----------------------------------+ | | | +---|-----+ | | | | | | | | | | | | +-|-----------+ | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---|-|-------|-+ | | +---|-------+ | | | +---------------------------|-----------|---|-------|-----|-----|---------------------------------|-------------------+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-------|---+ +-------------+ +---+ +-|-|-------|-------------|-|---------------------------|-+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-------|---+ | | | | | | | | | | | +-+ +-------------------|-----+ +-+ +-----|-+ | +---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-----|-------------------|---------|---|-------|-|---+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-+ +---|-----------|-----------------------------------------------------------------------|-------|-----------|-----|-----------------------------------+ | +-------------------+ +-|-+ + | | | | | | | | | | | | | | | | | | | | | | | | | P + | +-------|---------+ | | +-------------|-------------------------|---------|---|---------|-------------|-------------------------+ | +-----------------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-----------------------------|-----+ | +-------|-------------|---+ | +-----|---+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | + | +---+ | +-|-------------+ | | | +---------+ +-------+ +-------------+ +---+ | | +---+ | + | | | | | | | | | | | | + +-----+ +-----+ +-+ +-----+ +-----------------------------------------------------------------------------------+ +-----------------+ + diff --git a/2017/inputs/day_2.txt b/2017/inputs/day_2.txt new file mode 100644 index 0000000..f2f1f5e --- /dev/null +++ b/2017/inputs/day_2.txt @@ -0,0 +1,16 @@ +493 458 321 120 49 432 433 92 54 452 41 461 388 409 263 58 +961 98 518 188 958 114 1044 881 948 590 972 398 115 116 451 492 +76 783 709 489 617 72 824 452 748 737 691 90 94 77 84 756 +204 217 90 335 220 127 302 205 242 202 259 110 118 111 200 112 +249 679 4015 106 3358 1642 228 4559 307 193 4407 3984 3546 2635 3858 924 +1151 1060 2002 168 3635 3515 3158 141 4009 3725 996 142 3672 153 134 1438 +95 600 1171 1896 174 1852 1616 928 79 1308 2016 88 80 1559 1183 107 +187 567 432 553 69 38 131 166 93 132 498 153 441 451 172 575 +216 599 480 208 224 240 349 593 516 450 385 188 482 461 635 220 +788 1263 1119 1391 1464 179 1200 621 1304 55 700 1275 226 57 43 51 +1571 58 1331 1253 60 1496 1261 1298 1500 1303 201 73 1023 582 69 339 +80 438 467 512 381 74 259 73 88 448 386 509 346 61 447 435 +215 679 117 645 137 426 195 619 268 223 792 200 720 260 303 603 +631 481 185 135 665 641 492 408 164 132 478 188 444 378 633 516 +1165 1119 194 280 223 1181 267 898 1108 124 618 1135 817 997 129 227 +404 1757 358 2293 2626 87 613 95 1658 147 75 930 2394 2349 86 385 diff --git a/2017/inputs/day_20.txt b/2017/inputs/day_20.txt new file mode 100644 index 0000000..f249f9e --- /dev/null +++ b/2017/inputs/day_20.txt @@ -0,0 +1,1000 @@ +p=<-317,1413,1507>, v=<19,-102,-108>, a=<1,-3,-3> +p=<1639,477,-2519>, v=<-79,-102,130>, a=<-9,9,12> +p=<613,-993,-305>, v=<-39,27,-48>, a=<-2,8,11> +p=<1343,190,-1565>, v=<-82,31,31>, a=<1,-4,5> +p=<735,-285,2387>, v=<-20,-64,-67>, a=<-2,8,-6> +p=<963,456,-1888>, v=<-42,-73,88>, a=<-1,5,1> +p=<-1659,1444,-463>, v=<-14,-25,-77>, a=<10,-5,10> +p=<-443,-95,-1185>, v=<142,-14,81>, a=<-12,2,-2> +p=<-2590,3249,-710>, v=<35,-30,36>, a=<10,-14,0> +p=<-1602,-171,924>, v=<83,-50,-20>, a=<0,6,-3> +p=<-633,2195,-458>, v=<31,-200,31>, a=<4,0,2> +p=<-347,-49,-1976>, v=<-19,-50,151>, a=<8,9,5> +p=<852,314,125>, v=<-56,-83,-22>, a=<-4,9,2> +p=<-10088,3682,-5210>, v=<52,32,-38>, a=<14,-8,11> +p=<-4019,1982,4446>, v=<-4,47,-7>, a=<7,-6,-7> +p=<3444,-2319,-11041>, v=<-171,-89,81>, a=<4,9,14> +p=<2390,792,2117>, v=<0,47,114>, a=<-4,-4,-10> +p=<5661,-1318,-1666>, v=<-87,-44,-33>, a=<-5,5,5> +p=<2856,-1912,743>, v=<-36,59,-174>, a=<-3,0,9> +p=<4275,5447,-5461>, v=<6,-11,31>, a=<-8,-9,8> +p=<1263,1223,980>, v=<-98,-69,-68>, a=<0,-3,-1> +p=<1094,963,1253>, v=<-85,-105,-75>, a=<0,5,-3> +p=<2641,-922,2124>, v=<-113,61,-142>, a=<-13,2,-3> +p=<600,859,-398>, v=<-26,-97,-4>, a=<-3,5,5> +p=<-128,-1533,330>, v=<-12,73,-88>, a=<3,7,9> +p=<1419,-1507,-528>, v=<-159,29,-15>, a=<7,13,8> +p=<574,-1299,-1100>, v=<-17,104,113>, a=<-4,0,-4> +p=<-440,-1923,-8>, v=<-2,131,36>, a=<5,3,-5> +p=<-1705,-1617,-226>, v=<45,42,123>, a=<0,0,-6> +p=<708,36,4790>, v=<1,57,-48>, a=<-1,-3,-4> +p=<2266,9745,3707>, v=<38,-101,-78>, a=<-5,-8,-1> +p=<7320,-629,-2164>, v=<-134,-62,18>, a=<-3,4,2> +p=<746,6097,-2544>, v=<-78,-44,-11>, a=<3,-6,4> +p=<1563,-7678,5873>, v=<115,-13,-57>, a=<-8,11,-5> +p=<-8146,-3232,-5147>, v=<156,-52,155>, a=<3,7,-1> +p=<-3966,4235,1389>, v=<7,44,22>, a=<5,-8,-3> +p=<2171,-5151,14708>, v=<21,-21,-75>, a=<-4,8,-16> +p=<442,-1232,2730>, v=<9,-20,3>, a=<-2,5,-8> +p=<-273,-1960,5408>, v=<-58,89,-100>, a=<5,-1,-8> +p=<-624,-3559,247>, v=<50,137,31>, a=<-2,0,-3> +p=<2106,-2688,1482>, v=<-82,144,-57>, a=<0,-3,0> +p=<-2886,1147,2678>, v=<83,-44,-157>, a=<2,0,4> +p=<1984,472,-191>, v=<-31,-3,63>, a=<-3,-1,-4> +p=<3604,-6710,-2540>, v=<-21,123,-32>, a=<-8,9,9> +p=<5305,1390,781>, v=<-182,103,-15>, a=<-1,-11,-1> +p=<-527,256,-1055>, v=<-22,-107,39>, a=<3,7,0> +p=<7708,1660,5803>, v=<-131,-19,-103>, a=<-11,-3,-8> +p=<-5981,-2228,-6671>, v=<68,-15,23>, a=<11,7,16> +p=<1356,-1869,-687>, v=<39,68,25>, a=<-6,0,0> +p=<-1052,4725,937>, v=<38,-66,54>, a=<0,-7,-6> +p=<-1668,10101,-631>, v=<2,-229,23>, a=<4,-9,0> +p=<-1906,-4165,4255>, v=<-33,-24,37>, a=<7,12,-13> +p=<-2760,-2373,-2325>, v=<-46,57,40>, a=<10,2,3> +p=<516,-6601,-1625>, v=<69,63,44>, a=<-6,12,1> +p=<1062,-6279,-4929>, v=<6,66,17>, a=<-3,11,11> +p=<1636,-2387,-1205>, v=<-87,72,58>, a=<2,1,-1> +p=<3099,3807,-117>, v=<-71,-169,77>, a=<-9,-3,-7> +p=<1009,-3185,-991>, v=<-1,39,-47>, a=<-5,13,10> +p=<-3228,368,1954>, v=<142,32,-62>, a=<3,-5,-4> +p=<1180,1793,-896>, v=<-20,-173,-2>, a=<-4,8,5> +p=<-1936,7,2790>, v=<24,1,-36>, a=<8,0,-11> +p=<-1214,-2045,3474>, v=<116,9,-132>, a=<-5,10,-5> +p=<4619,2971,-3480>, v=<-171,-75,104>, a=<-7,-8,8> +p=<-2088,1166,3018>, v=<112,-40,-28>, a=<0,-2,-13> +p=<211,653,2410>, v=<21,107,-46>, a=<-3,-14,-8> +p=<2415,1926,-1580>, v=<-75,50,34>, a=<-5,-15,5> +p=<1538,-908,976>, v=<-54,31,26>, a=<0,0,-4> +p=<3539,7415,1788>, v=<-18,-151,-32>, a=<-7,-7,-2> +p=<3249,4196,-1373>, v=<-23,-25,2>, a=<-6,-8,3> +p=<2031,-4301,1701>, v=<-41,148,-29>, a=<-2,0,-2> +p=<2002,11678,-2475>, v=<-25,-148,85>, a=<-3,-17,0> +p=<2350,-560,-1315>, v=<-52,64,15>, a=<-2,-3,2> +p=<11423,-875,9878>, v=<-163,-146,-174>, a=<-13,11,-9> +p=<1751,-5773,2469>, v=<53,156,33>, a=<-7,2,-7> +p=<-2155,4333,-7110>, v=<51,-122,38>, a=<1,-1,12> +p=<-5906,7123,1229>, v=<92,-84,-39>, a=<6,-9,0> +p=<4696,-2115,113>, v=<-106,-74,-35>, a=<-3,9,2> +p=<-1132,-4533,1322>, v=<34,36,6>, a=<0,7,-3> +p=<1658,519,-978>, v=<-72,-26,-46>, a=<-5,-1,14> +p=<83,-426,732>, v=<25,-35,32>, a=<-4,8,-10> +p=<278,-1926,-1653>, v=<-52,49,79>, a=<4,10,4> +p=<-787,-6,-183>, v=<-21,57,61>, a=<9,-7,-6> +p=<-487,1044,612>, v=<-65,-109,32>, a=<12,5,-9> +p=<2603,-1521,-123>, v=<-135,86,105>, a=<-5,2,-12> +p=<-562,1044,-1188>, v=<12,-5,160>, a=<3,-8,-10> +p=<-1715,3425,5361>, v=<-30,-42,-103>, a=<5,-4,-4> +p=<-2803,721,-5279>, v=<-95,92,48>, a=<11,-7,7> +p=<957,-303,-5263>, v=<-97,-107,64>, a=<4,7,6> +p=<829,-943,-7839>, v=<-93,12,62>, a=<4,1,11> +p=<-2883,4417,-4703>, v=<56,-40,96>, a=<2,-6,3> +p=<2557,-6319,3889>, v=<51,147,9>, a=<-8,3,-8> +p=<-7939,-799,-4191>, v=<82,-9,-52>, a=<10,2,11> +p=<-7470,-439,367>, v=<120,92,9>, a=<17,-6,-2> +p=<-2134,-94,-898>, v=<20,-115,40>, a=<6,10,0> +p=<-478,1930,2092>, v=<20,-35,-114>, a=<0,-4,2> +p=<1040,-1727,551>, v=<-82,28,-59>, a=<3,4,3> +p=<-2318,-324,2069>, v=<4,63,-77>, a=<8,-4,-1> +p=<-2249,21,-1220>, v=<73,0,18>, a=<2,0,3> +p=<2627,-3199,-2577>, v=<17,44,113>, a=<-11,8,0> +p=<-2732,-1796,482>, v=<-2,103,-68>, a=<10,-2,4> +p=<441,1243,20>, v=<43,-28,83>, a=<-10,-8,-11> +p=<1029,-1151,-764>, v=<-104,68,94>, a=<4,2,-5> +p=<-672,-2551,97>, v=<25,153,40>, a=<3,4,-6> +p=<1027,1714,-804>, v=<-72,-122,60>, a=<-1,-2,1> +p=<416,1506,-50>, v=<-32,-22,16>, a=<0,-14,-1> +p=<-1131,1623,-1103>, v=<150,-108,20>, a=<-9,-3,10> +p=<1001,-990,-1454>, v=<-63,37,75>, a=<-2,5,6> +p=<-418,465,403>, v=<-35,5,45>, a=<12,-8,-14> +p=<682,-734,73>, v=<-21,120,-75>, a=<-7,-9,11> +p=<-2343,333,-1159>, v=<140,-79,25>, a=<12,8,13> +p=<924,421,-587>, v=<-43,3,-75>, a=<-7,-7,21> +p=<-693,-404,293>, v=<44,24,-5>, a=<3,2,-4> +p=<363,355,183>, v=<-58,-33,-49>, a=<4,0,5> +p=<-5454,-1885,-2432>, v=<116,-43,149>, a=<13,12,-3> +p=<342,-793,-941>, v=<-17,15,23>, a=<0,2,2> +p=<-456,1139,-920>, v=<21,-22,0>, a=<0,-3,4> +p=<-101,-4352,13169>, v=<23,75,-150>, a=<-1,2,-10> +p=<-3122,360,-2677>, v=<83,-49,-84>, a=<0,2,8> +p=<-7093,-2072,800>, v=<51,-24,78>, a=<7,4,-5> +p=<6397,1082,4505>, v=<8,88,-39>, a=<-9,-6,-4> +p=<-63,1937,-1005>, v=<22,46,106>, a=<-1,-5,-4> +p=<-595,1367,-910>, v=<-42,-56,45>, a=<3,1,-1> +p=<2578,-11667,-1670>, v=<-28,-25,-52>, a=<-2,17,5> +p=<-3425,-215,4501>, v=<138,8,41>, a=<-2,0,-11> +p=<-4625,-135,-939>, v=<27,-77,13>, a=<7,5,1> +p=<479,1913,2117>, v=<-17,-42,-66>, a=<0,-1,0> +p=<-3015,2181,-3524>, v=<-9,-40,-70>, a=<7,-2,12> +p=<-2280,-5424,436>, v=<137,74,108>, a=<-4,7,-8> +p=<6240,-669,-2024>, v=<-54,-7,-89>, a=<-10,2,10> +p=<-3885,-84,-8054>, v=<51,-11,50>, a=<5,1,14> +p=<-3345,6336,2956>, v=<2,-8,-69>, a=<7,-13,-2> +p=<-3465,-1449,-779>, v=<6,-43,-22>, a=<7,6,3> +p=<-1170,-8754,-1094>, v=<162,92,-27>, a=<-8,13,4> +p=<6195,2541,886>, v=<-68,10,-31>, a=<-9,-6,0> +p=<5625,3321,-2279>, v=<-142,-78,90>, a=<-3,-2,-1> +p=<146,1150,-504>, v=<-34,-42,20>, a=<4,-8,3> +p=<-64,-2,1992>, v=<16,-63,-110>, a=<-1,10,-9> +p=<-1138,334,-24>, v=<99,0,-7>, a=<0,-4,1> +p=<2156,-146,354>, v=<-104,14,-19>, a=<-11,0,-2> +p=<2224,501,-708>, v=<-92,-21,-46>, a=<0,0,6> +p=<664,405,960>, v=<98,33,22>, a=<-10,-4,-5> +p=<1144,2061,-2388>, v=<-47,-36,149>, a=<0,-4,-4> +p=<-212,-2043,4500>, v=<-78,-65,-113>, a=<7,12,-6> +p=<1084,4569,-4644>, v=<-57,-28,-32>, a=<1,-13,18> +p=<-824,5649,-4296>, v=<60,-48,-34>, a=<-2,-15,17> +p=<88,-591,-3132>, v=<22,-13,30>, a=<-2,3,8> +p=<2836,1917,-696>, v=<-30,-105,116>, a=<-7,2,-7> +p=<-4061,279,753>, v=<73,-63,7>, a=<7,4,-3> +p=<4439,579,-422>, v=<-46,-23,-24>, a=<-10,0,3> +p=<-2060,11364,-3131>, v=<-39,-107,-127>, a=<6,-14,13> +p=<6751,672,-9962>, v=<-119,64,97>, a=<-5,-5,12> +p=<-575,7206,-6068>, v=<-33,-100,13>, a=<3,-7,10> +p=<2197,2553,-4418>, v=<2,-78,-71>, a=<-4,0,12> +p=<4045,243,-5342>, v=<31,9,-26>, a=<-9,-1,11> +p=<358,122,480>, v=<-55,-68,25>, a=<4,8,-8> +p=<-1021,-158,1908>, v=<156,12,-122>, a=<-11,0,-2> +p=<939,283,-283>, v=<1,33,-48>, a=<-9,-7,9> +p=<519,-438,1425>, v=<31,107,-35>, a=<-9,-10,-9> +p=<904,-641,-388>, v=<-139,54,12>, a=<10,-1,2> +p=<6864,2454,-491>, v=<65,22,15>, a=<-17,-6,0> +p=<-272,1750,-3947>, v=<57,11,-9>, a=<-3,-4,8> +p=<1168,-6842,3589>, v=<78,164,36>, a=<-7,3,-9> +p=<-2224,4070,-347>, v=<-80,21,-105>, a=<9,-9,7> +p=<-1872,2102,-875>, v=<41,66,-39>, a=<1,-8,4> +p=<-5120,-3610,1701>, v=<126,63,-4>, a=<2,3,-3> +p=<-7936,774,-2043>, v=<115,-74,47>, a=<8,3,1> +p=<-5770,1949,-1810>, v=<144,-4,67>, a=<16,-10,3> +p=<1032,524,-993>, v=<66,-119,54>, a=<-12,9,0> +p=<-241,904,-2703>, v=<23,-39,74>, a=<-1,-1,7> +p=<1659,-2535,52>, v=<73,32,-11>, a=<-16,10,1> +p=<-469,790,-214>, v=<-55,97,-77>, a=<8,-14,9> +p=<-13,-179,356>, v=<31,18,-57>, a=<-3,-1,4> +p=<899,-312,-2000>, v=<-27,-45,127>, a=<-2,6,-2> +p=<1545,581,-727>, v=<-11,38,40>, a=<-7,-7,0> +p=<-3167,1702,-43>, v=<147,49,4>, a=<2,-14,0> +p=<-526,106,-3919>, v=<8,-17,38>, a=<2,1,17> +p=<1381,-388,-404>, v=<-175,24,29>, a=<7,2,2> +p=<-144,-1008,-374>, v=<5,163,59>, a=<2,-12,-4> +p=<-4344,-3608,1616>, v=<45,54,-4>, a=<6,4,-3> +p=<-1647,-787,4189>, v=<-10,-53,25>, a=<4,5,-10> +p=<3965,7621,-1235>, v=<-35,-45,34>, a=<-4,-9,0> +p=<-6925,-515,4255>, v=<27,33,-26>, a=<9,-1,-5> +p=<-3361,-7715,-3737>, v=<76,48,122>, a=<1,9,-1> +p=<4829,5857,-1217>, v=<-96,-107,15>, a=<-2,-3,1> +p=<1877,-1469,-4079>, v=<-51,41,39>, a=<0,0,4> +p=<4584,-3664,7121>, v=<124,69,-87>, a=<-17,3,-9> +p=<4708,-719,1014>, v=<-8,54,-82>, a=<-9,-2,3> +p=<-4530,3249,1665>, v=<-46,22,73>, a=<12,-8,-8> +p=<361,-798,851>, v=<-116,55,25>, a=<10,-1,-8> +p=<-2177,1209,-355>, v=<82,-66,16>, a=<4,0,0> +p=<784,-573,1544>, v=<-54,52,-23>, a=<1,-2,-7> +p=<1639,-879,-436>, v=<-73,-121,68>, a=<-2,18,-5> +p=<1297,1317,-166>, v=<-54,-15,-4>, a=<-2,-6,1> +p=<3466,1938,-2011>, v=<-70,-78,13>, a=<-13,-3,10> +p=<-2096,1173,-1561>, v=<11,-83,121>, a=<11,2,-4> +p=<-548,2163,1724>, v=<-75,-119,-109>, a=<11,0,1> +p=<469,-2427,1067>, v=<11,3,-63>, a=<-4,14,0> +p=<919,57,3083>, v=<-33,-78,-118>, a=<-2,8,-6> +p=<947,-909,986>, v=<-77,0,-36>, a=<1,10,-6> +p=<609,-857,-925>, v=<-79,73,20>, a=<5,-1,7> +p=<-4448,-1323,-14360>, v=<54,34,149>, a=<3,0,11> +p=<1636,4332,-3557>, v=<78,-71,-68>, a=<-6,-2,8> +p=<-2420,-12321,6739>, v=<2,56,88>, a=<3,13,-13> +p=<1636,6477,-944>, v=<-42,34,-35>, a=<0,-10,3> +p=<8812,2148,-5273>, v=<-26,45,96>, a=<-10,-5,2> +p=<-587,-3195,-14945>, v=<-85,22,84>, a=<5,3,15> +p=<6394,-3429,3346>, v=<36,88,15>, a=<-10,0,-5> +p=<-1958,2401,204>, v=<102,-119,-34>, a=<5,-7,3> +p=<-1090,266,1569>, v=<55,-19,-109>, a=<3,0,0> +p=<2574,-921,907>, v=<-139,58,-86>, a=<-6,1,3> +p=<-2718,-298,501>, v=<59,6,-57>, a=<18,2,3> +p=<-219,-1950,998>, v=<23,94,-40>, a=<-1,6,-4> +p=<3407,-809,1474>, v=<-116,35,-89>, a=<-17,3,-2> +p=<-541,-1670,-661>, v=<-14,29,41>, a=<7,12,1> +p=<-485,451,1803>, v=<-18,-25,-75>, a=<7,-1,-7> +p=<796,1109,1586>, v=<3,-132,-82>, a=<-8,7,-4> +p=<5,-438,2104>, v=<22,76,-59>, a=<-3,-6,-12> +p=<2770,724,137>, v=<-138,8,74>, a=<-8,-8,-11> +p=<1335,-935,1586>, v=<-133,59,-52>, a=<5,1,-8> +p=<-600,-494,17>, v=<0,26,-10>, a=<4,0,1> +p=<-73,1376,-1547>, v=<-13,42,37>, a=<2,-14,6> +p=<-2198,1750,-1088>, v=<85,-124,10>, a=<5,2,6> +p=<-955,2741,1118>, v=<87,-214,-96>, a=<0,-6,-1> +p=<79,398,260>, v=<-1,11,0>, a=<-1,-8,-4> +p=<-394,112,-873>, v=<90,55,13>, a=<-9,-11,11> +p=<750,-251,-1390>, v=<-2,-32,72>, a=<-11,9,9> +p=<-933,-625,-1511>, v=<25,68,77>, a=<10,-2,10> +p=<-812,673,-1159>, v=<38,-38,153>, a=<6,-4,-8> +p=<-2490,1276,508>, v=<17,-16,112>, a=<5,-2,-9> +p=<730,-1902,-4252>, v=<18,-62,21>, a=<-3,9,9> +p=<-1678,6904,3168>, v=<17,-72,-41>, a=<3,-12,-5> +p=<-40,-432,-3034>, v=<-56,132,50>, a=<4,-8,4> +p=<2980,-2943,13263>, v=<-88,-2,-129>, a=<0,5,-15> +p=<8216,3432,-5165>, v=<-67,-32,-42>, a=<-10,-4,11> +p=<-2188,11252,-4927>, v=<64,-87,-49>, a=<0,-14,11> +p=<-2513,-3249,3089>, v=<176,-8,-100>, a=<-6,7,0> +p=<-5055,223,-4289>, v=<2,24,-22>, a=<10,-2,10> +p=<-3722,1370,-2274>, v=<7,35,-7>, a=<7,-5,5> +p=<9201,8581,1004>, v=<-55,-80,114>, a=<-9,-7,-7> +p=<-315,469,-6640>, v=<-51,-52,-30>, a=<3,2,10> +p=<5886,-19772,1433>, v=<-70,127,63>, a=<-4,19,-5> +p=<4716,7333,-7264>, v=<120,12,26>, a=<-12,-10,8> +p=<2571,4213,-7108>, v=<75,-108,42>, a=<-7,0,7> +p=<2688,7060,-946>, v=<12,39,-36>, a=<-4,-11,3> +p=<3195,-4523,-5548>, v=<-41,116,-38>, a=<-2,0,9> +p=<16182,20203,8375>, v=<-134,-78,-175>, a=<-14,-22,-2> +p=<-8583,4213,3851>, v=<41,-28,-99>, a=<9,-4,0> +p=<-29,-291,-717>, v=<-1,26,133>, a=<1,0,-11> +p=<-1487,-747,-663>, v=<140,90,44>, a=<-2,-4,2> +p=<-77,-1047,129>, v=<29,63,-48>, a=<-3,4,6> +p=<1,627,-9>, v=<-62,-5,-4>, a=<10,-7,1> +p=<-689,225,1479>, v=<28,-4,-89>, a=<5,-2,-5> +p=<3651,9977,-1851>, v=<-74,-16,28>, a=<-1,-12,1> +p=<-2004,-10303,2127>, v=<-9,4,-54>, a=<3,13,0> +p=<1389,4088,-3060>, v=<104,15,-1>, a=<-7,-6,4> +p=<11256,-2971,-2007>, v=<-129,36,52>, a=<-8,2,0> +p=<6147,-787,12696>, v=<-98,60,-145>, a=<-3,-2,-9> +p=<8994,6467,10551>, v=<-51,-186,110>, a=<-9,1,-19> +p=<2832,3035,2322>, v=<107,62,41>, a=<-9,-7,-5> +p=<-11559,7286,-5244>, v=<116,-47,-45>, a=<9,-7,9> +p=<5991,-8704,8679>, v=<-94,-17,-2>, a=<-3,12,-11> +p=<4718,-4023,8441>, v=<-136,19,-128>, a=<-1,7,-9> +p=<4625,-861,-1262>, v=<-69,77,73>, a=<-5,-3,-2> +p=<589,3578,-416>, v=<58,-10,64>, a=<-7,-12,-4> +p=<1141,-2678,1217>, v=<-50,34,29>, a=<0,7,-7> +p=<3211,1600,2988>, v=<-44,4,-60>, a=<-8,-6,-6> +p=<-2056,-33,-1727>, v=<5,51,13>, a=<7,-4,5> +p=<-3476,6358,-3757>, v=<96,49,73>, a=<1,-16,3> +p=<2476,-4275,-99>, v=<64,40,-29>, a=<-9,6,2> +p=<9885,2111,1265>, v=<-47,-86,-41>, a=<-17,1,0> +p=<-10544,1150,955>, v=<132,121,-31>, a=<13,-10,0> +p=<-717,-338,-6640>, v=<-41,57,54>, a=<4,-3,10> +p=<-1306,3785,-502>, v=<-22,-124,-32>, a=<4,0,3> +p=<-3941,-2105,-5090>, v=<79,-62,-12>, a=<3,8,11> +p=<-3352,4405,-4067>, v=<108,-32,67>, a=<0,-7,4> +p=<403,-1972,-1042>, v=<-28,84,-34>, a=<1,-1,5> +p=<2153,884,-496>, v=<11,69,-68>, a=<-6,-7,6> +p=<-264,-3603,2640>, v=<26,104,-76>, a=<-1,0,0> +p=<-754,4587,1100>, v=<22,-58,4>, a=<0,-4,-2> +p=<4321,-3078,-6425>, v=<93,125,-33>, a=<-12,-2,12> +p=<-1419,387,-8280>, v=<41,26,92>, a=<0,-2,8> +p=<681,4902,3760>, v=<-55,-49,0>, a=<2,-5,-6> +p=<1451,-7348,-10450>, v=<-59,-5,118>, a=<1,12,10> +p=<4286,2802,-7265>, v=<-122,83,-45>, a=<0,-9,14> +p=<1337,5510,-5238>, v=<7,-83,58>, a=<-3,-6,7> +p=<6297,1232,8216>, v=<-89,-25,-184>, a=<-7,-1,-5> +p=<787,3206,2183>, v=<42,-63,4>, a=<-5,-4,-6> +p=<-941,3017,-3568>, v=<8,-112,147>, a=<2,0,-1> +p=<4027,3557,-679>, v=<-134,-104,68>, a=<-1,-2,-3> +p=<4864,-1438,-2137>, v=<31,67,-46>, a=<-15,-1,9> +p=<325,164,754>, v=<-74,3,-4>, a=<7,-4,-13> +p=<610,524,-201>, v=<-75,-22,20>, a=<2,-6,0> +p=<-215,224,699>, v=<-9,-36,-15>, a=<5,2,-10> +p=<-495,1334,-1331>, v=<30,-136,133>, a=<3,0,0> +p=<-390,-6,-861>, v=<25,9,130>, a=<2,-2,-8> +p=<-595,729,-116>, v=<-4,-59,6>, a=<11,-3,1> +p=<1360,804,-56>, v=<-139,-72,0>, a=<0,-2,1> +p=<90,359,-591>, v=<-78,11,92>, a=<12,-9,-6> +p=<-620,-1566,-231>, v=<48,99,23>, a=<2,10,0> +p=<-1355,1069,-1321>, v=<94,-126,110>, a=<7,3,4> +p=<699,-1699,-4607>, v=<5,86,93>, a=<-3,-1,9> +p=<2056,3131,-329>, v=<-90,8,-141>, a=<0,-12,13> +p=<-3602,1291,407>, v=<36,-44,-53>, a=<10,-1,3> +p=<-267,2717,-1870>, v=<83,-142,82>, a=<-6,2,0> +p=<-704,1636,3903>, v=<6,-47,-109>, a=<2,-2,-5> +p=<-1946,1429,1626>, v=<0,22,-70>, a=<7,-7,0> +p=<156,4594,673>, v=<33,8,-18>, a=<-2,-7,0> +p=<3116,1597,3966>, v=<-28,-6,-31>, a=<-3,-2,-4> +p=<10812,5334,1672>, v=<-27,-126,-64>, a=<-14,-1,1> +p=<1414,524,2190>, v=<75,23,131>, a=<-6,-2,-10> +p=<5336,9663,-6357>, v=<26,-91,58>, a=<-9,-9,6> +p=<4300,-438,-12758>, v=<73,-46,22>, a=<-10,3,17> +p=<3967,-3546,-918>, v=<-70,0,44>, a=<-2,5,-1> +p=<6224,10440,3670>, v=<-112,78,-23>, a=<-3,-19,-4> +p=<7334,2707,1783>, v=<-66,-55,-48>, a=<-7,-1,0> +p=<1007,10514,-3175>, v=<-47,-19,86>, a=<1,-14,0> +p=<-2289,2879,3134>, v=<87,43,-47>, a=<-1,-8,-3> +p=<1279,9407,-6930>, v=<157,-194,53>, a=<-12,-6,10> +p=<943,-8481,-1938>, v=<-80,35,-4>, a=<3,14,4> +p=<-7969,4127,-738>, v=<50,37,-58>, a=<12,-10,5> +p=<2019,1112,5886>, v=<-99,-85,-7>, a=<2,3,-13> +p=<4861,6767,-4438>, v=<-137,5,34>, a=<-2,-16,8> +p=<6427,909,3218>, v=<-56,72,10>, a=<-11,-7,-8> +p=<1758,2446,-4960>, v=<45,-146,112>, a=<-7,4,4> +p=<4165,-1469,2000>, v=<-128,124,-128>, a=<-1,-5,4> +p=<1113,-1854,63>, v=<-47,6,-29>, a=<-3,13,3> +p=<-1495,-30,2031>, v=<65,28,-84>, a=<3,-3,-5> +p=<-1055,-998,1583>, v=<-39,148,-56>, a=<12,-10,-5> +p=<-2071,-654,2647>, v=<135,-1,-216>, a=<-1,5,6> +p=<769,10,2767>, v=<-51,0,-11>, a=<0,0,-19> +p=<-1047,3450,943>, v=<20,-45,-16>, a=<5,-20,-5> +p=<-679,-814,1511>, v=<31,-59,-94>, a=<1,13,0> +p=<17,-1334,-273>, v=<-4,-18,-42>, a=<0,12,7> +p=<521,802,-1201>, v=<7,27,84>, a=<-5,-9,-1> +p=<1041,-686,-737>, v=<-68,69,106>, a=<0,-3,-7> +p=<5465,-618,2857>, v=<-66,17,-74>, a=<-4,0,0> +p=<4344,-1207,-15402>, v=<-134,91,75>, a=<1,-3,17> +p=<-1375,-181,-4002>, v=<-3,-14,87>, a=<2,1,1> +p=<15288,-9263,3256>, v=<-71,69,-26>, a=<-17,9,-3> +p=<-6733,-6755,2914>, v=<21,120,22>, a=<8,3,-5> +p=<88,1567,8025>, v=<17,18,-54>, a=<-1,-3,-8> +p=<2026,1168,-2577>, v=<-34,-30,30>, a=<-1,0,2> +p=<-104,1351,-1305>, v=<59,-36,-21>, a=<-4,-1,5> +p=<2137,1108,-738>, v=<-52,-55,28>, a=<-2,1,0> +p=<3730,-2807,5013>, v=<29,90,-73>, a=<-12,1,-8> +p=<2299,-971,1341>, v=<-86,78,-49>, a=<0,-3,0> +p=<-939,-4363,2031>, v=<35,140,-73>, a=<0,1,0> +p=<265,2329,5083>, v=<-66,-41,-95>, a=<4,-3,-6> +p=<-1009,-261,8765>, v=<52,-21,-38>, a=<-1,2,-19> +p=<2393,1125,2717>, v=<-84,-56,-83>, a=<0,1,-1> +p=<1035,1125,-3989>, v=<8,2,84>, a=<-3,-3,4> +p=<-85,4961,7253>, v=<-39,-164,-71>, a=<3,-1,-13> +p=<6201,-3075,7757>, v=<-191,123,-60>, a=<-2,-1,-15> +p=<300,-160,-566>, v=<-5,-6,-76>, a=<-2,2,15> +p=<2281,-1672,-706>, v=<-124,42,84>, a=<-5,10,-5> +p=<-2836,323,-251>, v=<159,-3,44>, a=<6,-3,-4> +p=<2169,-573,-706>, v=<-71,31,54>, a=<-11,1,-1> +p=<1511,-1259,1527>, v=<-9,95,-38>, a=<-13,-1,-10> +p=<-330,-937,-2071>, v=<-50,-18,84>, a=<10,11,8> +p=<13,386,1457>, v=<-7,15,-108>, a=<1,-6,0> +p=<-953,1163,1331>, v=<-28,-33,-144>, a=<13,-7,6> +p=<-799,-1490,246>, v=<126,149,1>, a=<-9,-6,-3> +p=<90,-930,1177>, v=<10,64,-43>, a=<-2,0,-6> +p=<-1763,-994,1921>, v=<95,80,12>, a=<0,-3,-11> +p=<-1155,-709,-834>, v=<73,-25,67>, a=<-1,6,-2> +p=<1429,-405,1959>, v=<-33,79,-90>, a=<-4,-6,-1> +p=<4418,1330,2934>, v=<-78,-60,33>, a=<-4,1,-8> +p=<-3239,4306,-1902>, v=<57,52,93>, a=<3,-12,-2> +p=<-2929,-5149,4949>, v=<-65,-11,-160>, a=<10,11,0> +p=<-511,-778,-6149>, v=<-47,40,22>, a=<4,-1,11> +p=<5162,4306,-2677>, v=<-38,-188,38>, a=<-8,3,3> +p=<-1631,-8674,2819>, v=<130,172,-108>, a=<-5,12,0> +p=<-1761,3091,-1250>, v=<0,-105,8>, a=<5,-1,3> +p=<-1631,-42,-7022>, v=<-32,110,122>, a=<7,-8,11> +p=<150,-5333,3664>, v=<-33,3,8>, a=<2,15,-11> +p=<6923,-3578,-418>, v=<-118,165,57>, a=<-11,-2,-3> +p=<8873,5795,-5189>, v=<-166,-128,119>, a=<-13,-7,6> +p=<-2125,2103,-2628>, v=<41,-40,115>, a=<3,-3,-1> +p=<-2543,858,5229>, v=<21,-7,-67>, a=<3,-1,-5> +p=<-4668,3476,-3917>, v=<-74,-84,132>, a=<12,-1,-1> +p=<-8357,6332,-7793>, v=<17,-63,36>, a=<13,-7,11> +p=<3125,665,3538>, v=<-65,-76,-2>, a=<-1,3,-5> +p=<-6384,-14838,5203>, v=<59,58,-104>, a=<6,18,-2> +p=<-908,3810,-1753>, v=<-51,67,8>, a=<4,-9,2> +p=<-1722,-6180,-6082>, v=<-48,-43,49>, a=<5,11,6> +p=<-3054,1368,-4565>, v=<83,-38,-49>, a=<0,0,9> +p=<-2373,1080,365>, v=<-31,-24,53>, a=<12,-2,-6> +p=<-4430,2169,-614>, v=<51,53,86>, a=<13,-13,-5> +p=<-924,-3134,591>, v=<79,-14,-49>, a=<-3,18,2> +p=<-1874,514,-3988>, v=<-1,-26,32>, a=<10,0,18> +p=<-145,-1747,4486>, v=<8,43,-114>, a=<0,5,-12> +p=<653,-2032,2320>, v=<-34,108,-70>, a=<0,0,-5> +p=<881,2243,1294>, v=<-6,-37,-26>, a=<-4,-8,-4> +p=<-2425,-1101,-1480>, v=<88,-11,70>, a=<4,7,1> +p=<-2919,1578,1256>, v=<194,-32,46>, a=<-4,-5,-11> +p=<-2634,856,2320>, v=<-1,-24,-50>, a=<14,-2,-7> +p=<144,-1759,161>, v=<26,100,-4>, a=<-6,7,-2> +p=<1464,-673,437>, v=<-32,55,-27>, a=<-14,0,-2> +p=<72,1133,65>, v=<-20,-37,4>, a=<2,-9,-2> +p=<-444,-943,-577>, v=<75,19,-53>, a=<-6,9,15> +p=<-4278,-11885,3366>, v=<-11,163,56>, a=<7,9,-8> +p=<3984,5233,8190>, v=<0,76,-4>, a=<-6,-12,-12> +p=<5460,-4091,8892>, v=<-41,39,-5>, a=<-6,4,-13> +p=<150,-2147,1692>, v=<-60,-52,-27>, a=<3,6,-1> +p=<-2874,1183,-576>, v=<61,133,-75>, a=<1,-9,5> +p=<-1956,-1103,1656>, v=<128,104,11>, a=<-4,-4,-3> +p=<186,-3893,4752>, v=<50,15,-38>, a=<-3,5,-5> +p=<-591,7845,4320>, v=<-13,-93,-43>, a=<2,-10,-6> +p=<1889,-5082,-1012>, v=<-29,148,-63>, a=<-2,1,6> +p=<1858,3040,-2283>, v=<100,-34,74>, a=<-10,-4,0> +p=<-3691,1862,-299>, v=<103,132,-102>, a=<1,-12,7> +p=<-6853,2141,1592>, v=<109,-53,13>, a=<7,-1,-4> +p=<6663,1769,9497>, v=<-55,23,-146>, a=<-10,-5,-10> +p=<-5309,-4880,2885>, v=<105,126,4>, a=<3,1,-5> +p=<3021,-8416,6149>, v=<-70,125,-22>, a=<-1,7,-9> +p=<3949,1547,1981>, v=<-5,21,84>, a=<-11,-6,-12> +p=<5093,156,1487>, v=<-76,-47,22>, a=<-9,3,-6> +p=<6094,2899,-5455>, v=<-74,-112,127>, a=<-12,0,6> +p=<6523,-4615,395>, v=<-131,96,-17>, a=<-9,6,0> +p=<-2486,1820,-2023>, v=<94,-84,130>, a=<0,1,-4> +p=<-4028,1467,2219>, v=<128,-43,-17>, a=<10,-4,-11> +p=<-1472,531,-5062>, v=<-14,9,150>, a=<10,-4,14> +p=<-608,-954,-1948>, v=<-43,6,110>, a=<8,5,0> +p=<-3921,1247,5039>, v=<-33,-106,51>, a=<9,4,-12> +p=<-9267,1214,-175>, v=<61,14,-80>, a=<13,-3,5> +p=<2646,4481,-6313>, v=<23,-34,-64>, a=<-6,-6,15> +p=<996,-2548,-3145>, v=<-63,-93,61>, a=<2,10,2> +p=<-786,-6277,-373>, v=<-26,-14,-40>, a=<3,12,3> +p=<-2898,-8323,-2122>, v=<157,150,47>, a=<-4,6,1> +p=<4098,9167,-2617>, v=<-89,-57,113>, a=<-2,-13,-2> +p=<-225,1808,3752>, v=<42,13,-63>, a=<-2,-4,-3> +p=<-4219,1852,5263>, v=<73,-68,-70>, a=<6,0,-9> +p=<-4597,-119,6667>, v=<101,33,-80>, a=<5,-2,-12> +p=<4637,-3521,2887>, v=<-157,-93,-108>, a=<-1,16,0> +p=<1505,-4304,538>, v=<-41,62,7>, a=<-1,7,-2> +p=<-4737,3953,180>, v=<127,-44,-8>, a=<9,-13,0> +p=<-2154,-1066,-4440>, v=<81,-3,179>, a=<2,5,3> +p=<2025,-457,4380>, v=<-8,-109,-87>, a=<-8,12,-11> +p=<870,1916,1125>, v=<-118,-2,-31>, a=<7,-8,-2> +p=<-33,1076,4338>, v=<-9,-94,-195>, a=<1,4,-1> +p=<3726,1664,-1143>, v=<-122,43,-22>, a=<-5,-11,7> +p=<-3855,-142,3645>, v=<85,-14,-19>, a=<9,2,-14> +p=<-3330,-268,-975>, v=<137,-96,36>, a=<2,10,1> +p=<3096,4079,2280>, v=<-4,-105,-20>, a=<-13,-8,-8> +p=<738,943,775>, v=<-36,0,-63>, a=<-7,-16,-2> +p=<-437,-727,-595>, v=<54,123,63>, a=<-2,-8,0> +p=<633,-157,-1665>, v=<-86,-33,170>, a=<4,10,0> +p=<-312,-262,-110>, v=<-8,49,-13>, a=<7,-3,5> +p=<-897,1478,-1095>, v=<67,-92,113>, a=<4,-9,0> +p=<548,-502,880>, v=<-61,73,-101>, a=<1,-3,3> +p=<-957,-77,-260>, v=<18,3,-20>, a=<14,2,9> +p=<23,-1767,370>, v=<-25,128,-50>, a=<4,10,3> +p=<9335,-1502,-1376>, v=<-94,46,109>, a=<-12,0,-4> +p=<-89,-8910,-1472>, v=<19,162,13>, a=<-1,7,2> +p=<1431,402,7824>, v=<-45,-30,-30>, a=<0,1,-13> +p=<3607,-1854,-3216>, v=<-80,90,-15>, a=<-2,-2,7> +p=<-1431,-1856,4713>, v=<-152,52,-127>, a=<10,0,0> +p=<1418,-8072,-4870>, v=<56,30,132>, a=<-5,10,0> +p=<-5020,-6592,-2539>, v=<21,-67,12>, a=<6,13,3> +p=<1418,6284,-4574>, v=<-20,-16,-85>, a=<-1,-8,11> +p=<-1357,3879,-11493>, v=<36,30,-31>, a=<0,-7,18> +p=<4779,-2196,-6490>, v=<34,-13,-96>, a=<-9,4,15> +p=<405,8280,-820>, v=<63,-82,135>, a=<-4,-8,-6> +p=<-4347,2178,890>, v=<84,-42,-153>, a=<2,-1,7> +p=<7425,936,6740>, v=<-21,11,-1>, a=<-10,-2,-10> +p=<2030,-6060,5989>, v=<-94,68,9>, a=<2,5,-9> +p=<-3113,1562,-3557>, v=<121,-62,20>, a=<-2,1,4> +p=<15387,8111,-3927>, v=<-132,-11,-27>, a=<-15,-11,7> +p=<1105,-12905,-1522>, v=<-31,139,-16>, a=<0,11,3> +p=<-13843,4300,957>, v=<50,-22,12>, a=<17,-5,-2> +p=<1364,970,-338>, v=<-38,-46,-67>, a=<0,1,4> +p=<328,-9020,11539>, v=<-67,-23,-160>, a=<3,14,-8> +p=<1441,1858,-3933>, v=<-114,-33,72>, a=<4,-1,2> +p=<-12401,-6674,-9819>, v=<67,19,69>, a=<15,9,11> +p=<5095,6196,567>, v=<25,-24,-16>, a=<-9,-8,0> +p=<-4751,-4964,10125>, v=<21,27,-152>, a=<6,6,-7> +p=<-1546,-4772,-2286>, v=<41,141,-34>, a=<1,2,8> +p=<6784,-1538,4434>, v=<-126,-76,-129>, a=<-8,9,-2> +p=<-1896,4454,-2356>, v=<68,-58,70>, a=<0,-7,1> +p=<4166,296,2040>, v=<-47,-11,0>, a=<-7,0,-5> +p=<-7306,-125,-3525>, v=<148,-33,50>, a=<11,3,7> +p=<-4356,-8500,-3550>, v=<69,68,168>, a=<8,21,-2> +p=<1044,-225,-1950>, v=<-95,23,39>, a=<4,-1,3> +p=<-617,666,-1168>, v=<-14,-32,45>, a=<4,0,1> +p=<5515,5664,-1714>, v=<-141,-83,71>, a=<-11,-17,1> +p=<1735,-1329,-1084>, v=<50,96,52>, a=<-12,-3,0> +p=<1101,-5305,-338>, v=<-82,-26,-62>, a=<3,14,5> +p=<6843,1974,-4137>, v=<5,-37,-51>, a=<-16,-2,13> +p=<-206,-91,-1046>, v=<110,-61,68>, a=<-15,12,4> +p=<520,877,175>, v=<8,-47,-49>, a=<-9,-5,5> +p=<520,-795,65>, v=<-112,-9,-15>, a=<11,14,1> +p=<597,-608,-1046>, v=<-101,10,86>, a=<8,8,1> +p=<-1702,-190,230>, v=<138,2,54>, a=<3,3,-13> +p=<465,-1136,-1321>, v=<-29,58,87>, a=<-2,8,5> +p=<-1152,-487,-331>, v=<94,71,39>, a=<2,-4,-2> +p=<-1733,-1423,-1483>, v=<-61,121,34>, a=<10,-5,2> +p=<-3583,-148,-2933>, v=<78,-8,27>, a=<5,1,7> +p=<1292,-548,1717>, v=<-39,125,-16>, a=<-1,-8,-4> +p=<-333,2677,842>, v=<91,-4,-33>, a=<-6,-8,0> +p=<1542,4377,1792>, v=<-114,32,20>, a=<4,-16,-7> +p=<2192,402,-2183>, v=<16,22,36>, a=<-8,-3,4> +p=<1792,102,3467>, v=<32,-57,-125>, a=<-8,4,-1> +p=<17,2502,1642>, v=<25,29,-78>, a=<-2,-10,1> +p=<158,-2993,164>, v=<-42,8,-3>, a=<2,4,0> +p=<4820,-3011,2756>, v=<-5,-10,36>, a=<-7,5,-6> +p=<-3151,-4516,-1216>, v=<118,172,1>, a=<3,4,5> +p=<-1324,1385,-1867>, v=<-46,1,54>, a=<10,-6,3> +p=<-4012,1028,-2329>, v=<93,40,54>, a=<9,-8,5> +p=<524,-3697,1829>, v=<31,56,32>, a=<-5,11,-11> +p=<-7847,-3949,10230>, v=<-49,45,-93>, a=<13,3,-9> +p=<-969,-3322,-12874>, v=<-152,-69,203>, a=<9,8,7> +p=<-4579,2131,-1113>, v=<-57,41,69>, a=<9,-5,-2> +p=<-1140,-6286,-9758>, v=<67,126,121>, a=<-2,2,7> +p=<399,-8775,5271>, v=<7,16,-99>, a=<-1,11,-2> +p=<-1390,-740,258>, v=<152,-4,-23>, a=<-6,9,1> +p=<2276,-2742,11>, v=<-172,213,59>, a=<0,0,-8> +p=<1522,-714,63>, v=<-107,-62,-1>, a=<-1,17,0> +p=<-948,1236,492>, v=<-36,-86,8>, a=<16,-1,-6> +p=<-350,-1195,895>, v=<-68,24,5>, a=<14,10,-10> +p=<-662,1392,-106>, v=<61,-14,-30>, a=<-1,-13,6> +p=<2744,547,1090>, v=<-82,-82,-52>, a=<-18,6,-4> +p=<-714,508,-886>, v=<44,-79,44>, a=<2,6,4> +p=<91,79,957>, v=<-26,53,12>, a=<3,-10,-17> +p=<-96,1014,-1573>, v=<3,-80,140>, a=<1,-2,0> +p=<-393,827,55>, v=<48,-63,-8>, a=<-2,-2,0> +p=<872,-559,583>, v=<-49,57,-8>, a=<-5,-1,-8> +p=<-30,673,231>, v=<-57,-61,-60>, a=<10,0,6> +p=<-613,-702,1793>, v=<2,88,-70>, a=<9,-4,-16> +p=<663,596,-253>, v=<-48,-90,26>, a=<-2,6,-1> +p=<-394,705,481>, v=<4,30,-34>, a=<3,-10,0> +p=<61,-1297,-1430>, v=<84,38,50>, a=<-12,8,7> +p=<-233,1909,-163>, v=<15,-131,-33>, a=<0,0,6> +p=<-870,348,2105>, v=<83,-42,-45>, a=<-3,3,-14> +p=<1664,285,1755>, v=<-113,45,-35>, a=<-1,-8,-12> +p=<-1269,1545,-415>, v=<89,-60,-30>, a=<0,-6,8> +p=<-534,-261,1293>, v=<-1,-21,-92>, a=<5,6,0> +p=<-135,-121,-2557>, v=<-7,44,93>, a=<2,-4,12> +p=<1223,-415,292>, v=<-74,35,-28>, a=<-2,0,1> +p=<824,-1430,922>, v=<-68,115,-73>, a=<1,-1,1> +p=<-640,2303,-1594>, v=<-90,328,-227>, a=<5,-25,15> +p=<-1065,354,-3254>, v=<-152,47,-462>, a=<10,-3,31> +p=<2462,751,1569>, v=<346,107,226>, a=<-22,-7,-14> +p=<-106,-2052,-2044>, v=<-16,-295,-290>, a=<4,15,15> +p=<-2837,147,1838>, v=<-406,22,262>, a=<24,-6,-22> +p=<2592,-1392,-608>, v=<374,-198,-87>, a=<-23,12,7> +p=<1813,1582,-1758>, v=<259,229,-248>, a=<-18,-17,14> +p=<-1899,1420,658>, v=<-267,200,92>, a=<16,-16,-11> +p=<1208,-1527,-1923>, v=<172,-215,-275>, a=<-16,10,16> +p=<2156,-2278,169>, v=<307,-326,27>, a=<-21,22,-1> +p=<1056,-798,-2596>, v=<147,-116,-372>, a=<-9,7,28> +p=<-1199,620,2328>, v=<-171,88,326>, a=<14,1,-26> +p=<-2396,-657,2316>, v=<-338,-95,329>, a=<24,6,-22> +p=<-824,587,-2484>, v=<-121,82,-353>, a=<8,-2,28> +p=<1659,739,-2320>, v=<235,105,-333>, a=<-18,-8,23> +p=<-2673,-573,489>, v=<-379,-75,67>, a=<25,5,0> +p=<-1570,-2486,60>, v=<-229,-357,7>, a=<14,29,-2> +p=<-2626,179,257>, v=<-375,24,38>, a=<23,-1,-4> +p=<849,-331,-2900>, v=<120,-49,-417>, a=<-8,0,31> +p=<645,1229,2673>, v=<89,177,376>, a=<-6,-14,-28> +p=<-1480,-2064,-361>, v=<-211,-295,-55>, a=<14,21,5> +p=<-2665,43,1552>, v=<-381,6,223>, a=<30,3,-17> +p=<-1459,51,2649>, v=<-202,7,371>, a=<13,-3,-21> +p=<-1482,-2729,-452>, v=<-211,-391,-64>, a=<14,24,4> +p=<1608,2630,144>, v=<228,371,14>, a=<-16,-26,4> +p=<1165,499,2876>, v=<163,71,411>, a=<-12,-9,-30> +p=<2642,-695,-895>, v=<383,-101,-127>, a=<-23,1,4> +p=<-2614,-864,-1341>, v=<-370,-122,-187>, a=<26,8,10> +p=<-1044,729,-2321>, v=<-151,103,-328>, a=<5,-7,22> +p=<-1018,-916,-2755>, v=<-145,-129,-388>, a=<5,8,23> +p=<-3177,847,960>, v=<-456,120,143>, a=<30,-8,-2> +p=<1358,1463,-2332>, v=<194,215,-332>, a=<-15,-12,23> +p=<-1230,-3445,-695>, v=<-178,-496,-100>, a=<9,34,8> +p=<284,229,2992>, v=<41,34,427>, a=<-4,-2,-30> +p=<-1398,-1284,-2531>, v=<-195,-185,-358>, a=<12,18,30> +p=<280,1690,-1795>, v=<41,241,-252>, a=<-4,-16,19> +p=<-1556,637,2590>, v=<-215,94,374>, a=<15,-3,-25> +p=<1970,-1629,2345>, v=<282,-237,335>, a=<-14,13,-29> +p=<624,-2660,-1245>, v=<92,-377,-177>, a=<-6,27,12> +p=<2472,-1297,-1889>, v=<352,-187,-272>, a=<-21,11,21> +p=<1475,-2024,-2192>, v=<216,-292,-316>, a=<-19,18,22> +p=<2316,-1953,720>, v=<327,-284,103>, a=<-25,21,-5> +p=<-1493,692,-3102>, v=<-213,100,-443>, a=<14,-7,27> +p=<1825,1169,2010>, v=<263,164,287>, a=<-18,-10,-16> +p=<132,-416,2718>, v=<18,-59,390>, a=<-2,7,-26> +p=<-3328,-231,203>, v=<-477,-34,36>, a=<31,4,-4> +p=<-1458,911,-2505>, v=<-208,128,-357>, a=<16,-9,26> +p=<-232,2726,-1244>, v=<-34,389,-177>, a=<-3,-28,9> +p=<-2076,-2126,878>, v=<-297,-304,128>, a=<21,23,-10> +p=<3071,-1789,-978>, v=<444,-255,-139>, a=<-32,15,6> +p=<470,1352,2371>, v=<69,192,338>, a=<-1,-14,-19> +p=<-366,2757,334>, v=<-51,394,48>, a=<3,-23,-2> +p=<142,3704,-779>, v=<23,528,-111>, a=<-4,-35,6> +p=<-2560,678,-902>, v=<-365,96,-128>, a=<26,-4,10> +p=<-799,-1439,1718>, v=<-115,-205,245>, a=<2,16,-16> +p=<252,-205,2964>, v=<36,-31,420>, a=<-3,2,-29> +p=<1111,-2850,-712>, v=<159,-409,-107>, a=<-10,28,8> +p=<-460,2649,-1121>, v=<-67,382,-159>, a=<7,-32,15> +p=<3050,-961,419>, v=<434,-142,58>, a=<-31,13,-4> +p=<-690,583,3314>, v=<-98,86,474>, a=<8,-6,-34> +p=<1533,1358,-2236>, v=<218,195,-319>, a=<-15,-12,23> +p=<2116,1539,1334>, v=<296,223,196>, a=<-23,-12,-16> +p=<-480,-2566,1780>, v=<-70,-372,250>, a=<5,19,-14> +p=<-157,-2633,1171>, v=<-20,-380,163>, a=<0,30,-8> +p=<-551,2588,-222>, v=<-81,366,-28>, a=<11,-23,-1> +p=<-2411,917,589>, v=<-341,131,85>, a=<24,-8,-6> +p=<-889,-2793,-844>, v=<-130,-400,-122>, a=<12,24,8> +p=<1520,-2712,-490>, v=<219,-383,-68>, a=<-12,27,6> +p=<-1591,-1155,1957>, v=<-228,-169,282>, a=<14,15,-18> +p=<-2439,1395,-500>, v=<-347,199,-73>, a=<28,-12,5> +p=<-1337,172,-2489>, v=<-187,23,-355>, a=<18,3,23> +p=<316,-2188,1642>, v=<42,-313,230>, a=<-3,21,-17> +p=<-165,1828,-2025>, v=<-19,258,-292>, a=<1,-16,18> +p=<-1747,1095,1978>, v=<-244,154,284>, a=<18,-12,-25> +p=<-2666,540,-1200>, v=<-379,80,-168>, a=<25,1,8> +p=<1683,-834,-1770>, v=<240,-119,-252>, a=<-16,5,18> +p=<-2653,450,-388>, v=<-382,65,-56>, a=<31,3,7> +p=<2146,-2673,-252>, v=<307,-382,-35>, a=<-25,26,-1> +p=<-496,-2646,1797>, v=<-73,-379,258>, a=<3,24,-16> +p=<1530,360,-3009>, v=<217,48,-423>, a=<-15,-1,30> +p=<-640,-802,-2660>, v=<-88,-114,-376>, a=<7,7,28> +p=<-811,1540,-2260>, v=<-116,218,-322>, a=<1,-12,22> +p=<-2796,1328,-710>, v=<-396,191,-100>, a=<27,-13,7> +p=<129,472,2813>, v=<24,63,404>, a=<4,-2,-26> +p=<-1420,-2470,-1046>, v=<-201,-355,-153>, a=<21,18,6> +p=<2451,808,-944>, v=<347,115,-138>, a=<-24,-6,11> +p=<-40,2324,-1830>, v=<-3,330,-266>, a=<-1,-17,18> +p=<-82,3079,1442>, v=<-10,440,210>, a=<0,-26,-10> +p=<2698,-1471,-783>, v=<379,-209,-112>, a=<-26,16,9> +p=<2894,-1493,-387>, v=<412,-213,-57>, a=<-28,14,-3> +p=<1417,2516,-12>, v=<198,358,2>, a=<-17,-23,-2> +p=<747,2897,-1186>, v=<106,417,-165>, a=<-7,-33,15> +p=<-4,2281,-2417>, v=<-4,328,-340>, a=<6,-23,31> +p=<1737,-1461,2393>, v=<243,-202,335>, a=<-13,18,-30> +p=<-902,1843,-2360>, v=<-130,264,-337>, a=<11,-15,25> +p=<-1582,20,-1857>, v=<-227,-1,-263>, a=<14,-1,23> +p=<-1830,629,-1964>, v=<-258,85,-278>, a=<10,-8,17> +p=<-2085,1038,-866>, v=<-292,149,-127>, a=<21,-10,8> +p=<-1186,2355,1683>, v=<-169,335,243>, a=<11,-23,-16> +p=<-2259,248,-2209>, v=<-324,35,-314>, a=<22,0,21> +p=<-1283,-2116,1398>, v=<-186,-301,202>, a=<7,19,-21> +p=<-645,-3178,1278>, v=<-90,-449,181>, a=<6,26,-15> +p=<-1736,-2087,-1254>, v=<-249,-297,-181>, a=<17,19,14> +p=<183,-1786,-1791>, v=<26,-249,-259>, a=<-1,19,17> +p=<2465,-1286,-188>, v=<355,-185,-26>, a=<-24,12,4> +p=<234,-1280,-2961>, v=<29,-180,-419>, a=<-2,13,25> +p=<1084,1772,-2323>, v=<151,254,-331>, a=<-10,-15,23> +p=<-33,-757,2842>, v=<-7,-110,407>, a=<1,7,-27> +p=<-62,223,-2854>, v=<-6,30,-407>, a=<4,-2,29> +p=<-1939,-2234,-470>, v=<-276,-318,-65>, a=<18,23,6> +p=<-1064,-2485,1011>, v=<-154,-357,141>, a=<10,28,-5> +p=<-2793,-281,1074>, v=<-400,-36,156>, a=<25,2,-9> +p=<-2153,1885,362>, v=<-301,274,50>, a=<19,-19,0> +p=<-1097,2219,-1431>, v=<-157,314,-207>, a=<11,-22,12> +p=<1795,-2653,694>, v=<256,-382,99>, a=<-18,29,-6> +p=<-1706,2021,-841>, v=<-238,287,-120>, a=<17,-25,10> +p=<-163,-1743,1795>, v=<-26,-252,258>, a=<1,17,-17> +p=<1425,1729,977>, v=<202,243,138>, a=<-13,-17,-10> +p=<648,2109,-994>, v=<90,303,-143>, a=<-3,-19,14> +p=<-1738,468,1971>, v=<-249,65,278>, a=<18,0,-20> +p=<1045,1218,2731>, v=<148,175,394>, a=<-8,-11,-27> +p=<-540,1940,-2022>, v=<-77,280,-283>, a=<5,-21,17> +p=<-2979,1549,-239>, v=<-430,222,-34>, a=<27,-21,0> +p=<-2598,-2175,-183>, v=<-374,-314,-26>, a=<21,19,2> +p=<-1391,2880,-1142>, v=<-195,410,-163>, a=<9,-28,12> +p=<-1253,-1245,2513>, v=<-182,-173,362>, a=<12,13,-22> +p=<771,75,2400>, v=<104,11,342>, a=<-7,4,-25> +p=<468,988,-2854>, v=<67,143,-403>, a=<1,-13,25> +p=<-1290,2001,1041>, v=<-180,286,148>, a=<12,-22,-8> +p=<11,-1463,2584>, v=<-4,-215,375>, a=<0,13,-30> +p=<1672,-2459,-1046>, v=<233,-348,-149>, a=<-21,24,15> +p=<-1973,2358,-291>, v=<-279,338,-37>, a=<21,-23,1> +p=<327,-2775,2079>, v=<49,-396,298>, a=<-4,32,-24> +p=<-2260,400,-2962>, v=<-327,56,-422>, a=<22,-8,28> +p=<-431,-282,3083>, v=<-61,-39,440>, a=<1,5,-24> +p=<-2378,1821,-1219>, v=<-331,261,-174>, a=<14,-22,18> +p=<187,2556,-1007>, v=<26,368,-146>, a=<-2,-24,10> +p=<1417,-2451,289>, v=<199,-350,40>, a=<-19,25,-3> +p=<-2105,292,2336>, v=<-295,42,329>, a=<22,-1,-23> +p=<1397,2026,1405>, v=<200,289,200>, a=<-8,-19,-11> +p=<2364,323,-382>, v=<341,49,-58>, a=<-21,-6,4> +p=<-256,-3019,633>, v=<-36,-430,90>, a=<2,35,-5> +p=<3025,-164,1078>, v=<429,-21,153>, a=<-29,1,-9> +p=<2723,-2091,-29>, v=<388,-297,-3>, a=<-29,16,-2> +p=<197,709,2512>, v=<30,108,362>, a=<-6,-5,-25> +p=<-1843,874,1771>, v=<-261,131,253>, a=<17,-12,-17> +p=<2707,-769,818>, v=<382,-107,112>, a=<-26,9,-4> +p=<164,-239,3326>, v=<20,-36,474>, a=<-5,-2,-35> +p=<-1484,-1867,1429>, v=<-211,-271,204>, a=<12,18,-16> +p=<-1091,-1732,-2881>, v=<-154,-248,-411>, a=<8,15,29> +p=<2142,1579,-1231>, v=<306,223,-177>, a=<-19,-18,6> +p=<-2977,300,945>, v=<-425,44,133>, a=<30,3,-7> +p=<1742,1775,-36>, v=<244,253,-7>, a=<-17,-17,5> +p=<-1594,-2674,495>, v=<-230,-382,74>, a=<13,21,-1> +p=<-1665,2225,-1776>, v=<-240,314,-250>, a=<17,-21,17> +p=<142,2432,-376>, v=<18,351,-52>, a=<-2,-16,2> +p=<-950,1633,1739>, v=<-139,229,248>, a=<9,-16,-17> +p=<-2816,-480,-893>, v=<-404,-71,-131>, a=<31,6,8> +p=<-455,932,2810>, v=<-69,135,403>, a=<3,-13,-27> +p=<-3730,366,-606>, v=<-532,55,-86>, a=<37,-3,4> +p=<252,-2577,-244>, v=<36,-367,-35>, a=<-6,26,3> +p=<801,-2233,-1237>, v=<112,-315,-174>, a=<-8,27,13> +p=<2442,-462,1909>, v=<350,-65,270>, a=<-22,5,-12> +p=<-2324,1403,-1040>, v=<-332,203,-139>, a=<22,-13,12> +p=<-2533,1295,-1541>, v=<-361,183,-221>, a=<25,-11,17> +p=<-1512,-932,1936>, v=<-216,-134,276>, a=<18,9,-18> +p=<2274,1583,-1494>, v=<319,227,-214>, a=<-21,-17,14> +p=<-2158,-1734,-2643>, v=<-302,-242,-377>, a=<26,15,26> +p=<687,954,2298>, v=<94,130,329>, a=<-12,-8,-28> +p=<-2296,571,-1404>, v=<-334,81,-198>, a=<24,-5,13> +p=<-431,2980,489>, v=<-55,424,64>, a=<4,-33,-4> +p=<-2237,-2695,-582>, v=<-316,-385,-83>, a=<21,32,5> +p=<-1619,759,-2656>, v=<-225,114,-380>, a=<19,-12,26> +p=<945,447,3126>, v=<130,61,444>, a=<-12,-9,-31> +p=<2412,-1076,1127>, v=<344,-158,158>, a=<-28,8,-7> +p=<77,3074,-1824>, v=<14,438,-257>, a=<0,-30,21> +p=<1306,1552,-1954>, v=<187,222,-281>, a=<-16,-13,18> +p=<808,2843,1357>, v=<116,408,190>, a=<-9,-28,-10> +p=<-105,-919,2898>, v=<-15,-129,418>, a=<1,13,-28> +p=<994,1043,-1978>, v=<140,151,-279>, a=<-9,-9,20> +p=<3077,70,482>, v=<442,10,68>, a=<-32,-1,-6> +p=<-2772,1,-1392>, v=<-397,-2,-201>, a=<30,2,13> +p=<1297,-2205,120>, v=<184,-321,17>, a=<-9,20,0> +p=<-3102,-5,-1354>, v=<-444,3,-194>, a=<30,-1,12> +p=<-1621,-2313,374>, v=<-235,-329,52>, a=<18,20,-3> +p=<1902,-240,2425>, v=<266,-34,348>, a=<-19,1,-25> +p=<-1803,-1696,-543>, v=<-257,-238,-74>, a=<21,18,4> +p=<2854,-216,1608>, v=<404,-28,229>, a=<-30,6,-13> +p=<1502,-1352,-2578>, v=<211,-192,-364>, a=<-15,19,16> +p=<1559,-2311,-45>, v=<220,-328,-6>, a=<-17,22,5> +p=<-402,2270,-796>, v=<-58,325,-110>, a=<7,-21,3> +p=<-1370,-11,-2620>, v=<-196,3,-373>, a=<13,4,31> +p=<-953,3009,1273>, v=<-138,429,181>, a=<8,-33,-15> +p=<1782,-1172,-2352>, v=<255,-164,-337>, a=<-20,11,27> +p=<2237,418,2402>, v=<322,59,341>, a=<-21,-8,-24> +p=<2252,1657,1721>, v=<320,238,247>, a=<-20,-18,-15> +p=<-1315,-2410,1308>, v=<-189,-340,189>, a=<10,26,-18> +p=<48,244,-2745>, v=<2,35,-388>, a=<3,-3,29> +p=<1665,2253,-689>, v=<237,317,-98>, a=<-17,-21,5> +p=<1117,-1998,-2158>, v=<161,-285,-308>, a=<-9,21,22> +p=<-1209,2307,-403>, v=<-172,324,-58>, a=<11,-24,2> +p=<-2058,1700,1773>, v=<-291,243,254>, a=<20,-17,-18> +p=<-995,-1138,-2951>, v=<-138,-163,-418>, a=<8,13,27> +p=<785,-983,2672>, v=<116,-146,383>, a=<-7,10,-26> +p=<-1923,-330,-1677>, v=<-271,-41,-241>, a=<16,4,16> +p=<1401,1896,937>, v=<197,268,131>, a=<-16,-15,-10> +p=<-572,2692,1022>, v=<-83,384,149>, a=<1,-24,-10> +p=<1741,1338,-1868>, v=<253,193,-269>, a=<-17,-10,17> +p=<1566,2188,350>, v=<225,312,48>, a=<-16,-21,-4> +p=<-1734,-1324,-1866>, v=<-244,-188,-269>, a=<17,13,17> +p=<3149,-129,-952>, v=<449,-16,-132>, a=<-32,-1,11> +p=<2091,-1276,-782>, v=<293,-179,-108>, a=<-21,10,11> +p=<1814,2072,315>, v=<260,295,47>, a=<-18,-21,-6> +p=<-1036,-1282,1829>, v=<-147,-189,265>, a=<10,14,-18> +p=<-2434,-333,-1071>, v=<-347,-45,-155>, a=<23,2,7> +p=<2813,315,265>, v=<397,43,35>, a=<-29,-3,-2> +p=<704,-541,-2684>, v=<100,-81,-383>, a=<-8,2,25> +p=<180,-1863,-2277>, v=<28,-266,-326>, a=<-2,12,22> +p=<-537,478,-3146>, v=<-73,72,-449>, a=<1,-3,29> +p=<-2275,1286,1169>, v=<-326,182,165>, a=<21,-16,-13> +p=<-3153,-167,839>, v=<-452,-22,117>, a=<31,5,-8> +p=<-2659,-1005,-62>, v=<-379,-143,-11>, a=<33,14,0> +p=<-2857,1552,-245>, v=<-403,219,-34>, a=<26,-15,-2> +p=<-2420,1189,-1497>, v=<-348,165,-213>, a=<22,-10,13> +p=<-996,-2088,1463>, v=<-141,-296,209>, a=<10,21,-13> +p=<785,-2777,-89>, v=<111,-396,-11>, a=<-10,22,2> +p=<-3064,52,457>, v=<-439,3,58>, a=<29,0,-1> +p=<-2003,1537,-2027>, v=<-286,222,-283>, a=<18,-14,20> +p=<-2744,192,516>, v=<-390,27,75>, a=<28,-1,-8> +p=<2627,428,1268>, v=<377,62,183>, a=<-26,-4,-11> +p=<2370,516,-2130>, v=<335,71,-306>, a=<-25,-4,20> +p=<-167,2752,-190>, v=<-23,391,-27>, a=<1,-24,0> +p=<-2333,-1758,399>, v=<-332,-254,59>, a=<23,10,-4> +p=<115,1289,-2001>, v=<17,186,-285>, a=<0,-12,22> +p=<-1645,320,-2350>, v=<-235,48,-336>, a=<15,1,23> +p=<168,539,-2987>, v=<26,80,-429>, a=<4,-6,30> +p=<550,109,2265>, v=<77,14,323>, a=<-1,-1,-15> +p=<2314,-1485,1355>, v=<330,-206,194>, a=<-21,21,-13> +p=<-2350,1553,904>, v=<-337,226,132>, a=<17,-17,-9> +p=<-1292,2795,-539>, v=<-184,402,-74>, a=<12,-30,8> +p=<-770,-1190,-2785>, v=<-108,-172,-397>, a=<7,9,30> +p=<-2348,-1197,1425>, v=<-336,-172,211>, a=<23,14,-13> +p=<1914,787,1936>, v=<275,112,273>, a=<-19,-8,-16> +p=<-20,934,-2534>, v=<-2,133,-361>, a=<0,-9,24> +p=<-1896,-1410,1509>, v=<-269,-201,214>, a=<14,14,-11> +p=<-3039,-1083,-1197>, v=<-436,-151,-174>, a=<30,14,12> +p=<-703,-1842,2083>, v=<-100,-263,297>, a=<8,21,-21> +p=<-865,2968,-1508>, v=<-121,421,-215>, a=<8,-31,19> +p=<3111,410,1160>, v=<442,62,161>, a=<-26,-4,-15> +p=<-783,2409,-1292>, v=<-107,344,-184>, a=<7,-24,11> +p=<3426,56,23>, v=<492,10,-1>, a=<-31,2,0> +p=<-3055,796,570>, v=<-440,112,73>, a=<28,-6,-8> +p=<-407,1576,2244>, v=<-62,226,323>, a=<3,-11,-22> +p=<-1560,2842,919>, v=<-221,405,133>, a=<14,-26,-7> +p=<2900,635,1073>, v=<411,92,158>, a=<-26,-3,-7> +p=<-2028,-452,2148>, v=<-286,-59,306>, a=<22,4,-20> +p=<-2567,1085,45>, v=<-371,157,1>, a=<32,-18,-1> +p=<-991,1405,2370>, v=<-142,203,340>, a=<9,-14,-23> +p=<142,-1409,-2144>, v=<15,-199,-308>, a=<0,8,26> +p=<1497,303,-2973>, v=<213,42,-427>, a=<-13,-6,33> +p=<-1158,221,2675>, v=<-167,32,380>, a=<9,5,-25> +p=<-147,-400,3215>, v=<-21,-51,459>, a=<-1,0,-32> +p=<-1828,-2033,567>, v=<-263,-290,82>, a=<19,26,-4> +p=<-1953,1811,-2055>, v=<-278,255,-294>, a=<15,-18,14> +p=<-838,-1721,-2258>, v=<-119,-250,-324>, a=<10,16,25> +p=<598,-1963,-2331>, v=<84,-274,-335>, a=<-5,21,24> +p=<-210,400,-2911>, v=<-29,61,-416>, a=<4,-9,31> +p=<-1336,-1236,2422>, v=<-192,-175,348>, a=<9,11,-27> +p=<2593,1842,156>, v=<366,258,23>, a=<-26,-22,3> +p=<683,-2491,2131>, v=<94,-355,301>, a=<-5,26,-19> +p=<-1754,-1837,-1551>, v=<-249,-262,-221>, a=<15,23,13> +p=<1971,2423,440>, v=<278,345,64>, a=<-23,-24,-1> +p=<-398,2348,1947>, v=<-56,333,281>, a=<-2,-23,-19> +p=<2374,-1106,-1948>, v=<339,-158,-282>, a=<-24,13,22> +p=<-989,-1488,-1769>, v=<-148,-214,-252>, a=<9,12,12> +p=<2259,-943,-1333>, v=<318,-135,-185>, a=<-21,9,8> +p=<2871,-44,150>, v=<412,-7,23>, a=<-26,2,-2> +p=<876,-1583,-1974>, v=<131,-232,-281>, a=<-12,18,14> +p=<-597,-2656,690>, v=<-82,-383,91>, a=<5,26,-8> +p=<3218,-115,-141>, v=<455,-18,-18>, a=<-36,0,5> +p=<1347,-17,-2874>, v=<195,-2,-410>, a=<-16,-4,28> +p=<2607,646,1802>, v=<375,90,259>, a=<-30,-7,-18> +p=<2246,-82,1413>, v=<316,-6,200>, a=<-21,-5,-11> +p=<-1515,2402,-1329>, v=<-208,341,-188>, a=<16,-22,15> +p=<-740,-2443,839>, v=<-106,-345,118>, a=<9,27,-9> +p=<-370,-1496,2055>, v=<-57,-212,293>, a=<5,14,-19> +p=<-1652,-1944,-1349>, v=<-236,-281,-184>, a=<9,16,13> +p=<-2499,2057,-233>, v=<-355,294,-32>, a=<24,-21,2> +p=<307,-2054,1512>, v=<38,-293,216>, a=<-4,19,-16> +p=<-2617,-1535,-1691>, v=<-371,-221,-238>, a=<26,14,19> +p=<1419,2503,374>, v=<205,362,55>, a=<-18,-25,-3> +p=<2882,48,1837>, v=<407,3,267>, a=<-26,-4,-22> +p=<-563,-3347,223>, v=<-79,-476,34>, a=<7,33,-2> +p=<-814,-2302,-208>, v=<-116,-326,-29>, a=<7,21,2> +p=<2886,-461,892>, v=<417,-72,127>, a=<-30,4,-11> +p=<38,-829,2517>, v=<9,-117,361>, a=<0,6,-29> +p=<1954,768,-1801>, v=<278,111,-257>, a=<-22,-7,22> +p=<-1138,-848,2144>, v=<-161,-121,307>, a=<14,13,-20> +p=<-2676,69,-662>, v=<-388,11,-94>, a=<26,0,6> +p=<-1190,-2014,1742>, v=<-170,-287,249>, a=<11,21,-20> +p=<-865,2859,-981>, v=<-126,407,-140>, a=<8,-31,12> +p=<3060,1455,828>, v=<437,209,118>, a=<-25,-19,-6> +p=<1292,-1828,-1200>, v=<181,-268,-168>, a=<-13,18,9> +p=<-2351,-1092,557>, v=<-339,-155,81>, a=<23,13,-3> +p=<1107,-2033,693>, v=<155,-290,100>, a=<-7,21,-10> +p=<-962,323,3456>, v=<-140,48,493>, a=<11,-4,-30> +p=<2434,637,-1784>, v=<348,96,-252>, a=<-24,-9,18> +p=<2157,1618,59>, v=<308,226,8>, a=<-25,-20,-2> +p=<849,-62,-2418>, v=<121,-8,-344>, a=<-7,-3,23> +p=<2762,1436,-1383>, v=<394,207,-197>, a=<-23,-15,11> +p=<-3036,419,878>, v=<-432,57,124>, a=<24,1,-10> +p=<2503,1489,-756>, v=<356,217,-109>, a=<-25,-12,4> +p=<-1397,-2563,-133>, v=<-199,-361,-19>, a=<12,23,1> +p=<-288,1425,-3042>, v=<-41,207,-432>, a=<1,-13,29> +p=<24,2975,447>, v=<2,428,63>, a=<-2,-37,-4> +p=<285,-2013,-2331>, v=<34,-287,-329>, a=<5,25,26> +p=<-634,-2885,-1380>, v=<-90,-410,-196>, a=<4,31,16> +p=<-2550,-1613,1326>, v=<-369,-228,189>, a=<22,15,-12> +p=<-260,-1885,1699>, v=<-40,-269,242>, a=<7,18,-16> +p=<-632,1319,2283>, v=<-91,186,323>, a=<4,-18,-22> +p=<-865,-2642,-279>, v=<-126,-373,-39>, a=<3,24,0> +p=<2223,-1977,880>, v=<317,-281,130>, a=<-23,20,-8> +p=<42,2810,-450>, v=<10,401,-65>, a=<0,-24,0> +p=<-950,2330,2037>, v=<-134,332,291>, a=<4,-23,-18> +p=<1044,286,3174>, v=<151,40,451>, a=<-8,-1,-30> +p=<-932,2492,-342>, v=<-135,352,-53>, a=<9,-25,-1> +p=<3318,808,-839>, v=<473,112,-125>, a=<-33,-7,8> +p=<2190,802,1373>, v=<314,108,196>, a=<-21,-10,-13> +p=<-110,2227,2514>, v=<-13,321,357>, a=<1,-26,-22> +p=<-762,-2542,1571>, v=<-107,-363,219>, a=<7,27,-15> +p=<-843,1461,-2501>, v=<-121,208,-360>, a=<6,-15,25> +p=<1037,-2192,-1862>, v=<146,-314,-266>, a=<-9,21,16> +p=<1428,-2502,783>, v=<208,-357,117>, a=<-12,24,-1> +p=<-1519,802,-2626>, v=<-214,115,-375>, a=<12,-10,21> +p=<-2483,1663,1263>, v=<-349,237,180>, a=<19,-18,-17> +p=<1246,-500,2566>, v=<175,-69,366>, a=<-15,2,-25> +p=<-2286,-1779,-461>, v=<-327,-255,-65>, a=<22,23,2> +p=<350,3135,1064>, v=<50,449,152>, a=<-3,-31,-6> +p=<-506,275,-2858>, v=<-70,47,-408>, a=<6,-1,29> +p=<2283,2049,-751>, v=<328,292,-107>, a=<-18,-23,12> +p=<-1926,-1360,-1240>, v=<-279,-194,-175>, a=<19,15,14> +p=<1343,457,-2363>, v=<185,63,-333>, a=<-13,-2,23> +p=<-1206,2687,-982>, v=<-173,379,-140>, a=<8,-22,15> +p=<2187,30,2741>, v=<312,5,391>, a=<-21,2,-25> +p=<2627,1354,-644>, v=<375,193,-92>, a=<-23,-13,-2> +p=<2234,1551,-629>, v=<314,221,-87>, a=<-21,-15,6> +p=<-2224,181,-1582>, v=<-317,28,-226>, a=<19,-2,18> +p=<-1203,943,2568>, v=<-174,137,364>, a=<12,-2,-28> +p=<1723,2089,584>, v=<247,300,80>, a=<-17,-19,-9> +p=<1087,-867,2921>, v=<156,-126,421>, a=<-10,7,-29> +p=<359,-2816,1809>, v=<51,-402,255>, a=<0,28,-19> +p=<1010,1125,-2626>, v=<144,160,-377>, a=<-13,-17,27> +p=<-2218,1407,-767>, v=<-321,206,-110>, a=<24,-16,1> +p=<-3075,459,556>, v=<-436,65,76>, a=<28,-5,-5> +p=<-711,3207,1693>, v=<-97,457,242>, a=<10,-35,-20> +p=<2313,-442,-2190>, v=<330,-64,-315>, a=<-19,2,18> +p=<-1225,2747,-653>, v=<-177,394,-93>, a=<8,-30,5> +p=<1874,-2001,-949>, v=<267,-285,-133>, a=<-18,21,8> +p=<1135,-2961,-1056>, v=<159,-420,-148>, a=<-9,25,9> +p=<-992,1847,1999>, v=<-139,262,285>, a=<7,-22,-23> +p=<355,2681,-983>, v=<50,383,-140>, a=<-4,-27,15> +p=<-366,-2446,1278>, v=<-52,-353,183>, a=<4,27,-12> +p=<1878,-2548,244>, v=<268,-365,33>, a=<-18,27,0> +p=<2552,811,567>, v=<366,110,84>, a=<-25,-8,-8> +p=<3105,498,303>, v=<444,68,45>, a=<-31,-5,-2> +p=<167,-2030,-2095>, v=<20,-290,-300>, a=<2,16,26> +p=<637,2069,1692>, v=<83,294,243>, a=<-9,-20,-18> +p=<279,-2256,1998>, v=<45,-322,285>, a=<-6,21,-14> +p=<1300,-1475,2240>, v=<185,-210,320>, a=<-13,10,-26> +p=<-909,1932,1771>, v=<-128,280,256>, a=<4,-20,-20> +p=<-2564,-1688,925>, v=<-368,-238,129>, a=<27,16,-11> +p=<-1016,-2945,738>, v=<-147,-419,106>, a=<9,33,-5> +p=<-53,-2665,-2270>, v=<-11,-379,-324>, a=<-2,28,19> +p=<1575,642,2511>, v=<223,94,355>, a=<-17,-1,-16> +p=<1038,2769,151>, v=<144,397,21>, a=<-12,-27,-3> +p=<2607,805,-1130>, v=<372,115,-161>, a=<-27,-9,11> +p=<2070,170,2504>, v=<298,21,356>, a=<-24,-4,-26> +p=<-2063,152,-2561>, v=<-295,24,-365>, a=<16,-4,31> +p=<2655,-493,-835>, v=<379,-69,-115>, a=<-26,8,7> +p=<-2780,900,-676>, v=<-397,132,-100>, a=<29,-11,6> +p=<252,2668,1762>, v=<39,379,250>, a=<-2,-29,-17> +p=<-2790,-731,-1001>, v=<-395,-101,-140>, a=<26,6,13> +p=<-1229,497,-2048>, v=<-171,72,-295>, a=<12,1,23> +p=<2491,1388,1334>, v=<356,203,191>, a=<-29,-14,-12> +p=<2321,-1287,2441>, v=<333,-179,351>, a=<-24,14,-23> +p=<1460,2731,-68>, v=<209,390,-5>, a=<-15,-28,7> +p=<1398,618,2852>, v=<202,87,407>, a=<-11,-1,-32> +p=<47,1927,2446>, v=<9,271,348>, a=<-1,-25,-19> +p=<757,2073,-2212>, v=<113,296,-317>, a=<-6,-25,21> +p=<-1045,2707,-1885>, v=<-145,385,-264>, a=<5,-27,18> +p=<-1495,-818,-1857>, v=<-215,-118,-262>, a=<14,9,12> +p=<-2627,-718,-1764>, v=<-378,-101,-252>, a=<25,9,18> +p=<2024,960,1742>, v=<293,135,254>, a=<-27,-9,-21> +p=<1784,2855,-138>, v=<252,406,-15>, a=<-16,-32,1> +p=<-2160,-710,-1609>, v=<-304,-103,-223>, a=<17,6,17> +p=<-2478,-2089,95>, v=<-353,-299,15>, a=<28,23,1> +p=<2435,527,2073>, v=<347,75,296>, a=<-27,-4,-20> +p=<-1352,2955,791>, v=<-193,424,117>, a=<13,-31,-6> +p=<3003,1189,678>, v=<424,169,100>, a=<-30,-9,-10> +p=<604,-799,2066>, v=<89,-115,292>, a=<-10,10,-17> +p=<-2506,-1768,406>, v=<-354,-247,58>, a=<30,16,-2> +p=<-1310,-352,-1934>, v=<-188,-48,-276>, a=<13,6,19> +p=<1378,-2170,834>, v=<196,-312,122>, a=<-13,22,-8> +p=<-714,2923,-799>, v=<-107,414,-115>, a=<8,-30,7> +p=<906,232,-2566>, v=<128,32,-362>, a=<-9,2,18> +p=<-2288,-1476,1309>, v=<-327,-210,183>, a=<22,14,-13> +p=<1697,1613,308>, v=<240,226,45>, a=<-16,-18,-4> +p=<2453,773,-1994>, v=<353,111,-283>, a=<-25,-6,24> +p=<2094,-2409,33>, v=<295,-347,4>, a=<-15,25,2> +p=<526,-1113,2073>, v=<77,-157,294>, a=<-5,12,-21> +p=<-2442,591,-1823>, v=<-349,83,-262>, a=<24,-1,17> +p=<-335,-2835,592>, v=<-43,-406,86>, a=<4,28,-4> +p=<-2785,-972,229>, v=<-394,-135,36>, a=<23,11,-1> +p=<-1100,-1480,1796>, v=<-154,-210,257>, a=<10,17,-20> +p=<2325,1914,-452>, v=<332,272,-60>, a=<-23,-21,2> +p=<2180,1218,2887>, v=<313,177,412>, a=<-19,-12,-29> +p=<2374,-881,-1454>, v=<334,-132,-207>, a=<-22,13,16> +p=<-1748,2499,-1372>, v=<-248,359,-196>, a=<17,-23,16> +p=<1727,-1109,1790>, v=<246,-160,255>, a=<-19,13,-19> +p=<905,1527,-2078>, v=<121,218,-303>, a=<-5,-16,19> +p=<2420,-59,2292>, v=<347,-12,329>, a=<-24,0,-16> +p=<2287,-1783,1206>, v=<328,-257,170>, a=<-21,20,-14> +p=<-2664,-152,-1382>, v=<-374,-23,-198>, a=<26,1,13> +p=<-1081,1292,-2263>, v=<-158,184,-324>, a=<5,-11,24> +p=<2446,-545,-2289>, v=<350,-75,-328>, a=<-25,7,22> +p=<2235,-1381,-2054>, v=<322,-198,-298>, a=<-22,16,26> +p=<-3257,-154,-718>, v=<-466,-23,-101>, a=<29,-2,7> +p=<1673,1690,516>, v=<244,239,70>, a=<-19,-22,-6> +p=<1385,-2456,418>, v=<196,-350,58>, a=<-17,25,-4> +p=<2985,-884,-799>, v=<428,-119,-111>, a=<-33,5,7> +p=<-1513,2311,-173>, v=<-212,328,-23>, a=<15,-20,-4> +p=<-2074,-1496,-1222>, v=<-297,-214,-176>, a=<24,18,12> +p=<-2057,-370,-2301>, v=<-294,-52,-326>, a=<21,6,23> +p=<-2227,-2336,-145>, v=<-320,-339,-18>, a=<22,22,-3> +p=<2914,1632,652>, v=<414,227,94>, a=<-28,-16,-6> +p=<-1038,-2308,1378>, v=<-152,-333,198>, a=<13,31,-15> +p=<643,-1788,-2511>, v=<94,-255,-361>, a=<-2,21,23> +p=<902,2772,-1464>, v=<131,400,-212>, a=<-10,-23,17> +p=<1063,-1453,2430>, v=<156,-209,349>, a=<-10,16,-22> +p=<-224,3075,442>, v=<-29,439,67>, a=<-1,-31,1> +p=<-1373,-2192,-921>, v=<-196,-313,-132>, a=<13,24,8> +p=<-3353,295,495>, v=<-481,42,66>, a=<31,-1,-10> +p=<-1853,809,2625>, v=<-260,110,375>, a=<17,-4,-26> +p=<78,-1196,2121>, v=<9,-171,303>, a=<2,6,-18> +p=<3114,913,1260>, v=<443,123,184>, a=<-28,-10,-8> +p=<2387,-357,370>, v=<341,-48,51>, a=<-29,2,-3> +p=<-2301,-1677,-546>, v=<-328,-241,-75>, a=<22,16,3> +p=<1126,2571,-1330>, v=<157,367,-193>, a=<-13,-25,13> +p=<1806,345,2195>, v=<258,46,317>, a=<-20,-3,-18> +p=<1375,2815,-293>, v=<194,400,-43>, a=<-13,-28,0> +p=<2393,-1081,1055>, v=<342,-154,156>, a=<-23,13,-10> +p=<-74,1914,-2448>, v=<-14,273,-350>, a=<2,-17,23> +p=<2018,-1928,814>, v=<287,-279,114>, a=<-23,12,-10> +p=<-89,1458,2267>, v=<-14,213,322>, a=<-1,-16,-22> +p=<-2310,1272,-1141>, v=<-328,178,-156>, a=<23,-12,10> +p=<1157,2183,885>, v=<162,309,120>, a=<-11,-19,-5> +p=<-2528,2520,163>, v=<-360,364,20>, a=<25,-29,4> +p=<1873,1210,2281>, v=<268,176,327>, a=<-22,-10,-25> +p=<-654,-2387,-1867>, v=<-91,-341,-267>, a=<1,22,17> +p=<1619,-1540,-1714>, v=<226,-222,-247>, a=<-20,13,17> +p=<-2781,1254,-451>, v=<-399,186,-64>, a=<26,-13,0> diff --git a/2017/inputs/day_21.txt b/2017/inputs/day_21.txt new file mode 100644 index 0000000..280e26d --- /dev/null +++ b/2017/inputs/day_21.txt @@ -0,0 +1,108 @@ +../.. => ..#/#../.#. +#./.. => #../#../... +##/.. => ###/#.#/#.. +.#/#. => ###/##./.#. +##/#. => .../.#./..# +##/## => ##./#.#/### +.../.../... => ##../.#../#.#./.... +#../.../... => ..../##.#/...#/##.# +.#./.../... => ###./####/#.../#..# +##./.../... => ###./.##./...#/..## +#.#/.../... => .###/.##./#.../#.## +###/.../... => ##.#/#..#/#.#./#.## +.#./#../... => #.#./.###/#.../#.## +##./#../... => #.../####/#.##/.... +..#/#../... => #.##/..#./...#/...# +#.#/#../... => #.##/####/.#.#/#.#. +.##/#../... => #.../##../##.#/.##. +###/#../... => ..../#.#./.###/#... +.../.#./... => .#.#/#..#/##../#.## +#../.#./... => ###./.###/.#.#/..#. +.#./.#./... => ..##/.##./..##/.#.# +##./.#./... => ..#./##../###./...# +#.#/.#./... => ..##/.##./.###/###. +###/.#./... => ..#./.###/###./#.## +.#./##./... => ###./..../.#../#... +##./##./... => .#.#/##../##.#/...# +..#/##./... => ##.#/.##./.###/..## +#.#/##./... => .###/..#./#.##/#### +.##/##./... => ##.#/..#./..##/###. +###/##./... => ..../.#.#/.#../#... +.../#.#/... => ###./.#.#/.#../#.## +#../#.#/... => ####/#..#/..../.... +.#./#.#/... => #.../..##/#.##/#.#. +##./#.#/... => #.#./###./##../#.#. +#.#/#.#/... => ...#/.##./.##./.#.. +###/#.#/... => ..../.##./####/#.#. +.../###/... => .###/.#../.###/#.## +#../###/... => ..##/..##/.##./##.. +.#./###/... => .#.#/..#./..##/##.# +##./###/... => ...#/#.##/#.#./##.# +#.#/###/... => #.##/.##./...#/###. +###/###/... => ##../...#/..##/#### +..#/.../#.. => #.##/#.../.#../#.#. +#.#/.../#.. => .##./.##./.#.#/.##. +.##/.../#.. => .#.#/#.##/...#/##.# +###/.../#.. => ##../..#./...#/##.. +.##/#../#.. => ##../..##/#..#/#..# +###/#../#.. => ##../..#./#.#./.... +..#/.#./#.. => .##./##.#/##../#### +#.#/.#./#.. => ####/...#/.#.#/..#. +.##/.#./#.. => .#.#/..#./##.#/.#.. +###/.#./#.. => #.../#.##/..../##.# +.##/##./#.. => #.#./#.#./#.##/#.#. +###/##./#.. => ...#/###./.##./.#.# +#../..#/#.. => ####/####/..../.##. +.#./..#/#.. => #.##/...#/..#./#### +##./..#/#.. => ..#./#.../..##/#### +#.#/..#/#.. => #.../#.##/#.##/..## +.##/..#/#.. => ####/..../##../#### +###/..#/#.. => ..../##.#/.##./#### +#../#.#/#.. => ...#/..##/###./#..# +.#./#.#/#.. => #..#/..#./.###/##.# +##./#.#/#.. => ###./####/#.##/..#. +..#/#.#/#.. => ##../##.#/..##/.##. +#.#/#.#/#.. => .#.#/.##./#.../##.# +.##/#.#/#.. => .#.#/#..#/.##./..#. +###/#.#/#.. => ...#/.#../.##./##.# +#../.##/#.. => ###./##../#.#./#### +.#./.##/#.. => .#../##../#.#./.#.# +##./.##/#.. => ##.#/.#../.#.#/#### +#.#/.##/#.. => ####/.#.#/..../.... +.##/.##/#.. => ####/##../#..#/#### +###/.##/#.. => .###/##.#/.#../#.## +#../###/#.. => #..#/###./####/.#.# +.#./###/#.. => ..##/##../##.#/.#.# +##./###/#.. => #..#/.#../####/...# +..#/###/#.. => ##../##.#/...#/#..# +#.#/###/#.. => ..#./.##./#..#/.... +.##/###/#.. => #..#/#.../..../.#.. +###/###/#.. => ..#./#.##/.##./#... +.#./#.#/.#. => .#.#/.##./##.#/.##. +##./#.#/.#. => #..#/.###/.#.#/.##. +#.#/#.#/.#. => #.../##../#.../.### +###/#.#/.#. => ###./.###/###./.... +.#./###/.#. => .#../####/...#/##.. +##./###/.#. => ####/###./..../.... +#.#/###/.#. => ...#/.###/..../#### +###/###/.#. => ..../#.../..#./.### +#.#/..#/##. => #.#./#.../####/#.## +###/..#/##. => .#.#/#..#/.###/#... +.##/#.#/##. => ..##/..#./..../##.. +###/#.#/##. => #.#./##.#/####/#..# +#.#/.##/##. => ..../.#../#.#./##.# +###/.##/##. => ..../..../.#../##.# +.##/###/##. => #.#./.###/#.#./#.## +###/###/##. => ##.#/##.#/.###/..#. +#.#/.../#.# => #..#/.#../#.../...# +###/.../#.# => ##../.#../##.#/..#. +###/#../#.# => ..##/#.#./####/.#.. +#.#/.#./#.# => ...#/...#/#..#/#.#. +###/.#./#.# => ..../####/.##./.#.# +###/##./#.# => #..#/.#.#/..##/#### +#.#/#.#/#.# => #.#./..#./...#/.#.. +###/#.#/#.# => ...#/##.#/.###/.#.. +#.#/###/#.# => .#.#/###./.#../.##. +###/###/#.# => ...#/.###/.#.#/###. +###/#.#/### => #.##/.#.#/...#/.#.. +###/###/### => ..##/.#../#.#./.#.. diff --git a/2017/inputs/day_21_example.txt b/2017/inputs/day_21_example.txt new file mode 100644 index 0000000..f6d24df --- /dev/null +++ b/2017/inputs/day_21_example.txt @@ -0,0 +1,2 @@ +../.# => ##./#../... +.#./..#/### => #..#/..../..../#..# diff --git a/2017/inputs/day_22.txt b/2017/inputs/day_22.txt new file mode 100644 index 0000000..1343456 --- /dev/null +++ b/2017/inputs/day_22.txt @@ -0,0 +1,25 @@ +.##..#.#.##...#....#..### +####.#...###.####..#..... +#.#.#####....######.###.# +#.#..###.#.#####....#..#. +####.#.#...#.##.##..#.### +#.####..#####.#.#....#.## +.#.####.#....###..##....# +..##.#..##.#.#.###.##.#.. +##....#....######.###.### +.#.##.###.###.###.#..#.#. +#.##.#.#..#.#.....###.... +####.....#..###..##..##.. +##....#.#...####...#.#.#. +...#.##..###..##..#...... +#....#..##.##.#..#.###..# +...#...##.##.##...#.#.#.. +.##....#.####.#..##.#...# +#.######......#.#...#.##. +#.##....###...###.###.... +#..#.#.#.#.#..#.#.....#.. +...##..##.###....#.###... +.######.#...###.###.#.#.# +####..###.####...#..##### +.##.#.##...##..##...#.#.# +###...##..#..##.##..#..#. diff --git a/2017/inputs/day_22_example.txt b/2017/inputs/day_22_example.txt new file mode 100644 index 0000000..3105a0b --- /dev/null +++ b/2017/inputs/day_22_example.txt @@ -0,0 +1,3 @@ +..# +#.. +... diff --git a/2017/inputs/day_23.txt b/2017/inputs/day_23.txt new file mode 100644 index 0000000..9d29443 --- /dev/null +++ b/2017/inputs/day_23.txt @@ -0,0 +1,32 @@ +set b 99 +set c b +jnz a 2 +jnz 1 5 +mul b 100 +sub b -100000 +set c b +sub c -17000 +set f 1 +set d 2 +set e 2 +set g d +mul g e +sub g b +jnz g 2 +set f 0 +sub e -1 +set g e +sub g b +jnz g -8 +sub d -1 +set g d +sub g b +jnz g -13 +jnz f 2 +sub h -1 +set g b +sub g c +jnz g 2 +jnz 1 3 +sub b -17 +jnz 1 -23 diff --git a/2017/inputs/day_24.txt b/2017/inputs/day_24.txt new file mode 100644 index 0000000..1fbfe25 --- /dev/null +++ b/2017/inputs/day_24.txt @@ -0,0 +1,57 @@ +42/37 +28/28 +29/25 +45/8 +35/23 +49/20 +44/4 +15/33 +14/19 +31/44 +39/14 +25/17 +34/34 +38/42 +8/42 +15/28 +0/7 +49/12 +18/36 +45/45 +28/7 +30/43 +23/41 +0/35 +18/9 +3/31 +20/31 +10/40 +0/22 +1/23 +20/47 +38/36 +15/8 +34/32 +30/30 +30/44 +19/28 +46/15 +34/50 +40/20 +27/39 +3/14 +43/45 +50/42 +1/33 +6/39 +46/44 +22/35 +15/20 +43/31 +23/23 +19/27 +47/15 +43/43 +25/36 +26/38 +1/10 diff --git a/2017/inputs/day_25.txt b/2017/inputs/day_25.txt new file mode 100644 index 0000000..892ee98 --- /dev/null +++ b/2017/inputs/day_25.txt @@ -0,0 +1,62 @@ +Begin in state A. +Perform a diagnostic checksum after 12667664 steps. + +In state A: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state B. + If the current value is 1: + - Write the value 0. + - Move one slot to the left. + - Continue with state C. + +In state B: + If the current value is 0: + - Write the value 1. + - Move one slot to the left. + - Continue with state A. + If the current value is 1: + - Write the value 1. + - Move one slot to the right. + - Continue with state D. + +In state C: + If the current value is 0: + - Write the value 0. + - Move one slot to the left. + - Continue with state B. + If the current value is 1: + - Write the value 0. + - Move one slot to the left. + - Continue with state E. + +In state D: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state A. + If the current value is 1: + - Write the value 0. + - Move one slot to the right. + - Continue with state B. + +In state E: + If the current value is 0: + - Write the value 1. + - Move one slot to the left. + - Continue with state F. + If the current value is 1: + - Write the value 1. + - Move one slot to the left. + - Continue with state C. + +In state F: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state D. + If the current value is 1: + - Write the value 1. + - Move one slot to the right. + - Continue with state A. diff --git a/2017/inputs/day_3.txt b/2017/inputs/day_3.txt new file mode 100644 index 0000000..ce15bc4 --- /dev/null +++ b/2017/inputs/day_3.txt @@ -0,0 +1 @@ +325489 diff --git a/2017/inputs/day_4.txt b/2017/inputs/day_4.txt new file mode 100644 index 0000000..b9f9e0e --- /dev/null +++ b/2017/inputs/day_4.txt @@ -0,0 +1,512 @@ +kvvfl kvvfl olud wjqsqa olud frc +slhm rdfm yxb rsobyt rdfm +pib wzfr xyoakcu zoapeze rtdxt rikc jyeps wdyo hawr xyoakcu hawr +ismtq qwoi kzt ktgzoc gnxblp dzfayil ftfx asscba ionxi dzfayil qwoi +dzuhys kfekxe nvdhdtj hzusdy xzhehgc dhtvdnj oxwlvef +gxg qahl aaipx tkmckn hcsuhy jsudcmy kcefhpn kiasaj tkmckn +roan kqnztj edc zpjwb +yzc roc qrygby rsvts nyijgwr xnpqz +jqgj hhgtw tmychia whkm vvxoq tfbzpe ska ldjmvmo +nyeeg omn geyen ngyee rcjt rjuxh +qpq udci tnp fdfk kffd eyzvmg ufppf wfuodj toamfn tkze jzsb +rrcgxyp rbufd tfjmok vpyhej hcnz ftkojm +jnmomfc jnmomfc bkluz izn ovvm flsch bkluz +odisl hzwv hiasrhi hez ihihsra qpbmi ltwjj iknkwxf nbdtq gbo +gjtszl gjtszl fruo fruo +rdapv gaik cqboix sxnizhh uxmpali jdd usqnz advrp dze +flooz flooz qad tcrq yze bnoijff qpqu vup hyagwll +lnazok dze foi tqwjsk hpx qcql euzpj mwfrk +ilb fmviby ivybmf gtx xtg +rpauuu timere gyg wcolt ireetm safi +croe szwmq bbhd lciird vhcci pdax +hnc ykswt qqqmei goe bri wmyai hnc qpgqc pberqf bzs +hsnrb wdvh iezzrq iezzrq rdbmpta iezzrq kemnptg alkjnp wymmz +ngw don ddvyds nlhkoa aaf gptumum ugtpmmu +vmccke qbpag kvf kvf tgrfghb kvf bhpd sglgx +obomgk bkcgo yso ttft vbw ckl wjgk +fli qvw zhin dfpgfjb udsin nihz ovr tiewo +tgmzmph hauzieo jmg tdbtl lvfr qpaayq qapaqy ausioeu jun piygx +jkp guqrnx asdqmxf vmfvtqb tloqgyo ioix gajowri tmek ilc puhipb +uycn zxqm znft ayal znacus kvcyd ekv qqfpnh +fqghur xtbtdd ztjrylr bpuikb ziyk +rvakn uqbl ozitpdh uqbl dsej xehj +laxp haz jyd xnkrb ijldth woy xapl iqgg alpx gnupa ukptmmh +dyiy dyiy ihb qcyxr +wbwkd hdwu zvgkn hdwu wjc sakwhn zxujdo npllzp uyr uyr +fxczpmn cininu akcxs ggslxr riyxe ojisxe +ppbch sampq dnct afikor dnct edsqy pnzyzmc afikor +jnvygtn hijqjxl vsd jnvygtn nqcqv zns odq gkboxrv kolnq wrvd +mroq mroq flsbu flsbu +fyshor xvpaunj qmktlo xoce wkiyfu ukcl srndc ugwylwm ozcwdw mtqcste kpokr +cfh cxjvx cfh cfh uewshh +bpspbap bpspbap fquj mxmn bwls iirhvuk dmpkyt exrn mxmn +tvyvzk ezszod ntxr xtnr och +knfxhy kbnyl knfxhy xhkssx lxru uprh nkxpbx oodolxr tpvyf +nblmysu iwoffs upgof tyagwf aan vovji ajk ywzq oyfi sfulz +aushzkm lcaeki mkuzsah ynxvte rsntd refk pcm +mgguob gobmug dzenpty gmogbu +yvq eepof rgnree nerger fpb stfrln ernger +hrgkbl mzwvswk rsrsbk ieru holco pajvvn ztgsr qkyp fyeg owpcmoj +fowda gmsqdca yugj mcrroxv mqcbojd fjnqfji qdfsc jqs +qnc rvjfz vvxk sjd xrma ucdjvq sbw zydyt dfzww +ocajazv cozaajv tqunkla udwf ecnnmbz lsakqg bki njnda zsdu ccfqw rxpc +qqm qdfya qxyx qmq qfday uqnfttt +rnbirb iapor qet iapor hxkhz dfvzig pedl ybyb +mkgamxg xkniv meb hbzmxjn dhbj zhbxjmn hdjb +ilteux pyutyfx mau lrr bacak +sjjonmn dbbbgs crxyuu jztstgd ezb uiabyaa +tra fle ufzlvf nnaw kec hiwnnlj tei wld iyt syk hjdczb +qmd jtlud dgh dbanock fzp dsjgqru wwvo jwvxwgv xlemfij jcacd +rpkx oxesil snazcgx fly miiyc ikmtmp oefyyn egbw +ypfpeu wldnyd acchppb yqwcaw wldnyd turbz megci nbgxq xkc ypfpeu +iqqv iqqv neui iqqv +ypsxm icqyup zyetrwq nbisrv +viommi toszx dpueq eyy cunjou ffcjc jaeez djefra pxvkj liudlig yye +fhnacbg jghchh ghjhhc iue hwqmo +vbjw lpn cizba ltnsfpz tzoweml irewlc uzckhpd mszal obd +yeos utxkft hflxkfe fxczge qpgigkc ksgr vuumql vhlvv +xzmkv xzmkv krecdi klpem jsbu nwcmik emfzxf cjmpgnj +vtkjo pmiv zou gxo qdiyxsf hwyinjk jhkgf rjq +dyuoc ywiyvch irfgl ywiyvch fxb fxb +tuz onhr syu rqya abkaf bcfx mbknex juwoor zmksl +oheg spjorx ksdy vwtq fxz phvtazk tcze lrxg +hew lbup botaj ltr jpd +dxgc tzinkej gnz hxvvub adsqmc dxgc asgpp rqbdcra goy pmamdua bhiacva +xqv ygb kihxqz vyv pjcny vmyvsdv cgsi nfyx +tqga ssshrw ndq qlbvwh huyd pxbgj qbxk dkkbf jxy chsobw pph +hxl iwph iwph xnr otifm ljhre +zlgvpd kapxpoc dve rklk ogh hgnp rbrmc zzkz hhmcx aklmo +sar gfor nkf hek nkf aql shc aql +dtcrw kfjzcjx qyhi bldson whwdayo mqtgt xhqzp ttqmg +omspdml isze jdl nvwo qrkm wztfg ssfgyh dryj jhp unsmty +jxt cszylng ifht ixtuna azoi xutqlv jtx tjx +usgm azuayp fgkby ezpyq jqwl ezofj +tnhvil nrvg moyrpqs sldx qymoff megflxh pyhqwms xmdw +zomy zcquwnv lzx bvcna yods mjp dgsez +blklyf xokd gpit tiysj yrwfhm tofx +dtig vhdp omuj vhpd +fogwxim qvdwig emdiv jvhl euwbzkg xvxb hwmqo ujdmlp epmykj +sjxll sjxll pedvgb sjxll +drvay gtzhgtx yrt okz nqf +haxfazn pvkovwb pgu tgshw mxcjf pbe nwoymzc mxcjf pbe hydwy jradcr +prjsloa ahylvj okbsj qbdcdjt pmfo pagyoeg vkmhjzt khzmjvt opfm xfrji gyjqyel +lzypt jdbtrad ogr jdbtrad heink +rcoucuq gdxewa rcoucuq whlw zhhm rcoucuq azaqohe mzyli rdvaf +yuag ebcf yuag nsotg qqzuxr jfmao vyucw wmoye +qwvk xemm hgqrr wyxkpp tojndm xlvzypw jus bgnu bgnu nklfwhs +daqi knenmku ccm xkiuy vkexsbc kvvdagx umopitw yaocnx yoakqql mllmsp +mrxgl gywit mfopia ncnsvw vdxek axuiot rsejua nei prndudz mnu +egqn gaa qgen urs mix zbn rhn +ewharq aihy udkdaob kgrdd kgrdd kugbjtj fcef llqb pduxaq wcexmm +dwtiw nelq hppad algxgf gcc upou akm efnb mxmhrud +yxqaa ups okbhgt iet qns tqn rnjqxgp +npmhdm cgds ldexvr typi jyivoqk zkgq vfyxu xgfo +dkwnmr umm dkwnmr okpjw wqx jpztebl eqsib dkwnmr +dxbild wpbup evscivq dxbild dxbild geqp ojfbpl jshvqej +cxdntxs csfocjd pyy tuhws teb boyloz xfw scxh pxhonky +lteucke xrgwy hszgzu hnyrcvb +pfgsgwg dxzh fworek qbstod +usemcrf psczxu gcjtr brls +hjol efxczux bqdn gvrnpey yyoqse gbam ndzyj lbwb bhzn unsezg +bapw xifz blupk qqdk bofvqpp wnbuwyt rnwocu lzwgtt zucag pov +xkre lqvd juf lqvd xio xyg xyg +tzdao ztheib aymcf aorg iyawrch hetcxa iyawrch czdymc ccv +ucgl azlppu jvxqlj pest +dvwlw fuuy mnhmm okrp ualnqlm uyuznba fzyejk yaq crl ctprp +odfq knox mkbcku pxucmuf lpjpol phl +ixongh hfs ruorbd auy qyssl kykwcix aytsm rlj aytsm duq segpqhk +izufsk wedpzh podjkor eamo vqvev ifnz podjkor xrnuqe +twyfps bmdbgtu qye qkwjms +wlav htym vhsnu cocphsj mdsuq vhsnu jflgmrp +opajag itwjhfu purnnvk opajag +hpkopqp vnj aialpt lzrkzfs nwucez nwuezc +mcx hzcjxq zbxr dsx tpknx fva +rlvgm xrejsvn ghawxb efyos xty wdzdgh olahbtn rga efyos vhtm nsr +cni mbab qtgeiow ulttn rckc kmiaju jvbq emyvpew cdlxldn ulttn brhkprx +eykpffp rapik qki fhjgdyu tome ehjuy bibjk htxd vexvag +wrk dpxt gwkuiov gbkif ike gbkif pcd wpj toywyf qzsa aol +yqwzh uujn ujun ujnu +srs ralwxrz yxvvmgp sjhbhk waasid cqtxoxf whcladv jkmaq khjbsh dlavcwh +mdvsjh xaj etvxlsy fxgiy rgjesel rlegesj ptriz ebdyhkp kugxm dxv egljser +lhehwrs mqevb ygmv gri izop qgb ivm +loqqam alojlwg hgen hbyw qlwpun loqqam worgnwk kope +phozre todsknr todsknr ibj mvllsar +wuripy ruwlfbh wukbkey qhq iishw tvtvci xawvxc vxacwx hsiwi ogq +xryq vxwupqa zhqex aquxpwv bnvxrba dtbxki +yvvwh zvsm vqskhp vqskhp ggqqlw bpn wbuv +kqz tdy goqwge ygn jgd +szjjhdk zkpoo nxexz ebicc +wzuemcj oyd qupulju iaakzmt vzkvz +nppahov umm wpzev wxkgfxd owgekp bhhb bbhh dgviiw kdfgxwx wryb +bnc rhes lmbuhhy kwbefga bnc rtxnvz bnc +ani mggxf mcoixh zdd nai hbhzl mes bdpqr +mjn uinoty jjegvze bjgqg yhqsxbt coj obylb hddude xqi rhfbhha alood +cbjzj drmihy tfkrhsd nuhav hihzx bvblqpl tdd szmp gjgfv box +uumhdxd cmwgyf vepr rwqdkj exwk +hwvr ydvw bqefu kghes gvbhp awms iqsqes khgse +mrey jqfw fwvzhps komj dayvs fbui zmtd cofn mrey +dsjds fdpx irjj usndok qcctsvf fgk wvg txwxcl dxs llp zyilwtq +xmkelgk fdukc cye legkxkm wwly +enlny eynln cccku brkz dpof mwfoxcd yftmnqh wpebvyc +ggdn jnysl dsacffw ukj hdae cmzxku +uqhm gcachmn kxndfrl htmfis jfnajz fiqiypr kekho kekho ndcw ckrndub dejfna +keazuq ertql rauwl keazuq obmh rauwl ksrotm +jppp poigqhv repfsje grjk xwkyuh pkx ayzcj hoxzv +yhjw pcuyad icie icie icie hwcsuy wcd yihjh jnrxs +gaug ivvx ceb xujonak hbtfkeb ttciml cctoz +dggyyi dggyyi gqlyumf yasu fwdfa cbb nncn verhq +rhgcw gpcyct kiuhbg kiuhbg gpcyct jlmleo nhumm +wulxxu jyjek hclcp ogob viex wiqcupq +tthu nxgzpid kcnj mss ukapgkp nnc bxjocv qwxs oejwsif aywqtu brahkb +dtde bgvb smu vbbg zhlu +lyo nwjjmep ldbok wgxhto wwuh qfgjknk wnsl +lleyr onha hkwulbm jfg +bybjwd uoxvbh mvj iqfpnxs bybjwd zqtszp wvc lbazjr zkzenja cev +rbuyyr divtslq yuqmyt ajyveb smxsjb nlk tzqhq ims fewg wpjhr gqh +kpewfd beq klilis klisli eeezut +euqh hueq ldoo crqurv lvrwh tmaewp oodl +bqi lzrf jyhvxfh bqi jyhvxfh nbztd lwpdn cuzi +srjylou phavzjd wost uxkaq byh sluryoj +ihrdk bcegkpq nygrs qbcq wyjg dvzme pgzhjl vibg kvv +ijsx iedemek ktlz gtga tbal lbki gtga +vmiaxn kefig kefig vngxz +vrdmfvi qts vlvhq vlvhq dihmq +cfz dyrz zlw qnt vok fwvahg skshbqf hbwozdc ntana jdb uflp +rimbj bxemw sfps krtk umta vnk ewmbx nrlje ymrtqrz mxewb kjxunbt +egnuti ozat eltl ngueti +qtcwoxq rmaf qtcwoxq qtcwoxq +zws gcoa pydruw qsrk lrkybdf ugr wkrxoj nyvf vitwn +tmr hhd dojid zwrj bhsim righ keqlep flzunou +lwoquvy acjowxk tqudk oenvioh nyavyl +rgh dfhgyke iff cpxhuz hui koe iff hui dmukrei +bjiumig lcbmbgh vleipx sfawua rnf +gftfh qwb tfdroe xbno qhgofm vqfoe mux +ljdrr gyfggai iun nju xrucbis mhrcrh fukr obvuqc whlalfe xrucbis nju +nxjmjr egqwg arllu xqaahri lzc ivt uhsti +sqiepba rcmts kvesv nvp +tiksw tiksw rjni gbhvzm ctbq zuqfyvz +ibsnm kfka aoqigwo sqouih rxz +jmymq lxio adtmk umyu sxvzquq bporqnb heol fow +mepa eckq rqviawv dkqoei ifmngpp jiava rtklseu +yuycd jiufjci yuycd uowg yuycd udq izkicbr csxobh +nwu tfsjavb rruoxbn oepcov elxf rruoxbn rruoxbn azglwth jcjm ksqiqpv +dthfwip zqnwa zqnwa zqnwa +gso wruece ufl crgnlxv vllsm dpyfm wpa ctxko +wvpze seodz lpq lpq pmtp wsxs ffppx +yfxquj phvjn rtwieq rtwieq kgxztyu vbjvkc prqqd lyzmdo ojbrt ojbrt qiqjz +esaezr rpggiy jey kbzrhu uthus osr xxaiijd qfxlf auhzbx gkigoqw +yfhcj uvgck cds gjhhrg cmempgj yfhcj cjb +yxi voxvtuw unwg jqqm +igvjr ljz rus sru gbjtjt qfeg ztu zjl +leof ocxns hbkoysh hbkoysh leof +hab lyxmf yhh qeks fwhfxki xmbcak okqjii nfgzyg bhtfgdj lpmjn +mgognh tad herere lvwnzx ixwqs zphmuuc etdjz kczsf +mtej rlolsnn zbl uykek dpkan gmz etxtgj +mihuieo emjgbp jgks mihuieo iexrfw mjdnr bvp mcuzea xkbusvi +jvqpj bwt jvqpj bwt gxr +qpnd fpt tpor bibbpcg hmvguez wqc afl ckviua gpi +dntmcg jglm sxtnu sxtnu sxtnu +fzkbptw cbfwo ozvwov wbv gcdd izqo ovwzov lolewo xikqpw +nkxyxzd kpn datf fki werq mwidqx oiibor zizcjph +xvgyxym zor ijoy lvwsf fjuara idvvq rreit mqyyy ctio tzwqqhj rnpee +maqkfpk maqkfpk xukg sfdmnlg xjopvr xjopvr irf +liujcd vnlkouy dxkwc gto vhjvtw +swhqhj cas aupsd swhqhj cas bvbooii jquck dtdm +igh iqicicf ghi pcxt srcrjx gmf gyscphv +drplj drplj wopgpnk wytag wopgpnk +zexe ilcqoh qiefb txkuv lirfzv +ovvpn ovvpn uqeurqx uwzn hgmucj ovvpn sjxulms +rox silka irhsvym kutus otasof tdneav pcagds +mkja omu tyshbfq onp trxs lxa tftbv bnpl djhnc zdqfs muo +tjj rmmqas cbbkxs qio pikk ykyew gxlxt nhsyl ykyew +frcprg njrz oaxcmhc qben pedm ecvtga nzxwpb ior gaklot dpem +zyt kncau spoe qlchg sqys wkpbng yflju qlchg vkve bzadbpa +qtq pkaicl qtq mfkfqvr dnleiq brrjxsx uoyxh pkaicl yvmlug +firwy imtlp ywl qfa dqrbazz ztzb pcsbwhn zesmlag +ivey ivey mtvc mtvc +lhize acwf moa cdeoazd voktshy qmvqq jvmuvk ljfmq tsanygc +xreiqkc aawrovl pofcsg xreiqkc xreiqkc +cjbzvn ozds iniqu sdoz gqmki bablvll krs vjzcbn +izsod htkeqz entxn qtns prpcwu omfnmoy +kwfb tctzda aztctd tadtcz gyt wunbcub ydiwdin xxk +epnl ijcp giq ltfk zjcabve zfksmz epnl giq xxxbsom +ulyukpa mdjsbn dydko uhkdt qms aaaj hustlwu +zlsbu ohx jcwovf egf zlvpqgx qhejm wrywdmw +uhxqrzr mmu kjxcalj unuohiq rri yzngnb ikvlxry mfiym qbksdx +khqciz som yklmm jceb khqciz jspy jceb +ncwggv njvi nqox krtsn lnm +bgtqme xaxcoq qbtgme obqual vorfk baoqul lgrb +jli tsbb nlxjc pkwzmz dlxrj hmho gzguko ilj iyaasm +wlmw grkumg dynwtyo emxhhqr huluk slpqu uhqcmd absmr ufirmwr +pbs pcammxv dplfr tzvmav nccyy blvyq ffhnz bccutq +hgge ghge vxmvz hqxgjdg zab guo gheg +ylj bucoyoq udndc wpgyrbx ueh udndc gxdsdh hdoz wwgqlg +cjdeh gttyqe kdkm ltzd lfeozse quvjq mnwhokm kdv oojxm nxt +mfkzus knqxt saxkqww njx zumsfk sbmcyad cpt agvbuv +tukn vyco yobvsn bzgnn klrnzy kea thzk pxpwq ryfff nxzm +ylbm lxlz lybm lzxl +wgtxoij zad slgsi cvnxfg iomswwl vmx +hkm yinhnkj kmh kwkw kayknck chur styjif yknakck +rtfwhkq rtfwhkq zsf zsf +sldq zlntr ueegiw kajivqc ozcbm ceft snvugom pdyc elppeed nnqrp prwwf +lhk xjonc muc tudag tsafx mmivb dvrjbp qgrew +hnzer fbgqp aazta aazta lxaz lmgv aazta +victgxu victgxu mlpd ummrnbx cazjgnw isxcyp efy zfa cyusj +gyojxo onzq gyojxo uxufp awi ilhl wefwfxr gcjlt tmliynw uxufp pdcnxah +wjwachn xkuhfbp oky oky ybaeqkr rbuix yreoaw wepmye brvon aasb +kiidorw vxtxiqx wtqvbrv efdth isel qbom vcssyc vxtxiqx wtqvbrv riafzsw mqzsj +eurpjd vkhdamt tmfx czeoot hiz ykz lmixzq tfur jhzr +ipuftpj qbll sqkkdw fwncmiv bri oeeh lehd ioh wag +suima nanngc imrmc krq atxdo woy atxdo akev qlr aezco qlr +cfc efwbzck ozkmcxv moczkvx ccf +bnekky iakrk sask uwgnjp iyi rynev bdnas ldh kass +sicmw vvjbvv cap nsumc xgvrlm wsoo uoqdu psykckm +ugg mtr wnzhmmh tjxc ehwnji lwhu mdsckk yvmk enubrqo +grb oxmxz ohu ytetedv ssx apzlppg fdkamm sxofc jdt ynmu wyejok +umoep rbyqm eqfk twqnog cptbbi dragna ngqs ffb cexxnc rbyqm +utizi ormkel wvwur bdx ecelqbv xiccama aag glfvmj +znb rsuqoa uxo svc +obs lbifa cffi catpd +qkxwian ajlzjz wewduzp bbyv qmt fsr qgiu epinp ghmf +hatg bfgmb aght ghat +kuq inp dun cknbun wmwsu drlmmg kyxc bdl +bddybth swdbf jhi fva qpobio bjwm wjaztp jywi +mgckz vhveu zkemhp zdf xtiqqew mlx wazgd +umbjq pya lvvxf jeavij rhrxvew bwjqgpr piz +xaycpwo vjcuc qksc yuixhni sfbfb dydyaq gdfvb tggg xidphvf bpjdrl goskxym +agxfoip gguif wvo agxfoip ntkbaw fbyggy ooft zxih +nzvsu ffwq uxvfbl qrql olhmhom qhdltg ymwz krtndtx olhmhom nfsv krtndtx +qdp jqk ustz xjripzv mnk grnodk pjwdsj uug zqxjqj +mufrcox zunisfs ocvcge acamm xua vor bsde kxr vor kxr orccxx +ncycbp anvcxay bmm wndmeaw oso knmk mmb wamenwd kmkv ppdd +motdcn xzagzwu vuzt utffrn yuqxzrh uvzt ujttq +tauoqy coiy ybesz tauoqy wpmr trquyne ahxbj jzhems dsdy +aczq ypw pgmzz srfn quatjgf +cih ypapk bfxvr euvhkk gugru auhqui +vyf pssgfvy dnhvbfl xpacme dnhvbfl mzdv iynq hcqu +lbzvbu hhxiq hdfyiiz iyzihfd xhqih uzdqyxr +iapbdll vdr cprmrkk vdr dfjqse mlry flpqk vdr +grrfkq xcpxd grrfkq dxc bjpr prvwh swoc swoc +bopo chvwuhf qhd ieesl xey ieesl fnjcbe +kic fyq hsucnu agwyl pzzmd hqksh psw +mxf uau iti lcoz lpg zbu ocre wqlocmh mxf nidqj lcoz +bypmix ptzxgmf xmtzgpf hrvzzq +lbfw zwusma lbfw tuyyy +lrf uej unswvh obgsb npbl zajr kenea uej qnyjcu wzufim qpzkgya +qcrxj llyu kligt hlm ehwtbx dda lgsvhdt xewfcv uikn +nfzjx izqdbq mfbxs imiuc yqxb xlmvix izqdbq eflqfq wku omgtuu izqdbq +lasdwg hiy btzt eefd eyoep icn nnmhg otml rek luixac nyzgn +vekteds utsuxdx utsuxdx vekteds +feyov qrij zbebwg ijrq seplram wttkwm zewbgb kzuhuh +dmkgtv wohgqo ddtqmv zatahx mym hqowog tkmvdg +vhha wjrmuyx kqh vyyrj xzchbi ejsdq orlxg vyyrj dlrc +yetngqn zdtuqox hkarjei fqpsgh eaqwbg zsssog ghb gddqqzr hbg +obldb zsrhz zxp uxphnev mwnbc pfjft fms xwslk vjm fxy +nfij dbfykv ttq gyjgac igxuyqi gtiioqx ilhdex dbfykv uyp bdiwya gqf +pffzruz vogfosh dcs wje +pohhf fhpoh oon yyz +xxuam afwm qxl lnt syyr bwxhhf sozauq shlhfmz kwnn milav ochq +wefcqrt gejw cwerqtf fttf gjew +jfsvnmr osca epwtle pgfif sxom +exlfzmq nakp rgdnx rrcvth vhrrct aajjdrt ryyg dsozd jdqlqj pakn iruv +rmcvo txszcs xxhyxz hbsozk wshkocf rmcvo rcbnt +kitz yjgney yvkymef nauj hmllsgl kyhm kqr pzsu rcf pzsu qpte +cdinpx bfur mkj naz ihkheyr nohhoe +ylris xeqcgup wap bbfih tgfoj +ina gnlnm zyeqhij cudfuf ipufae bvkdzni aat teqsg cudfuf bjokrbl teqsg +aedx edax dnfwq qndwf +rdngdy jde wvgkhto bdvngf mdup eskuvg ezli opibo mppoc mdup zrasc +qcnc iaw grjfsxe gnf gnf +zbjm snznt zelswrk gkhlnx dqxqn qqxnd dmro +zisecvx ztezof uzbq otnrtj qsjzkwm ewvcp rlir bfghlq tgapdr qxmr +ipnqj opjf vabyoe wkwnd +wyf mfqxnrf apm snarf jqu aaghx pwecbv lvghayg +acncv jmmbwlg oiphlm ifuo cvt +pvmb egansnd zmh gcuzzci rrxpslv ubith +uoleptg xbouzn xbmg cfh cpn wpqi xbouzn xtxis sxzpns +rilybri kurbpq vfmjpck tjyogho hfyxad svfofx lfbbhxj khaerfs iqr +seaebgz wlmtkre qguv qguv wlmtkre +sgo edkxya zdqgwtt gxu nibuu rairqoq mzxli dci qsv +tsol mdhzqr rmaqnru ggvcq arbwkn hlkcnj ljkcuof +mmliphp ocup puoc eijjv +gmajqpb ijki ijki kvz +pmqss unhlpcj dlkll nuhlcjp expe tlurzmv nsy vlumtzr tgseozl +gkvaoni hsba hsba viuedv phyoclp fdq phyoclp febld nqfs +rxvdtw abn pntv qrqfzz slsvv abn lrxix mnu npot +ghlfjp woy xwkbmv bkahpkj jve cncvk jvdype fwgvoju yrkwjp gwfvln mvkv +kmluh mie bby fwer chsinb ojglqr nqk mie +yzmiu igkgca ybnsqja jpfejtp yjddy xsosxfi ingx qwuhb emrkwpx idqjmmm +btrllw mphm dkvo ewdl dchcul yah btrllw kmqi mtvgk wtb +hxsgard yuikc lykt tdee adprp gpougod klnzk mzsmlb +hdn znblw ifoblur bwzln dbv +smofpbs vjuyiro llk lfzesga tybu tybu +gffnpug xaup iqiyz fjkpnkz drrk fwyxw lwzfskz gslwpmv vjxylva tbkyo nib +evydmb nhwuiiu fkerq nkgbuyy uclrs ydjgglh xhotwbm riirgzt +bsub eavbt uvd dpzwyt rhn khrbptt xszckc djnfxju axofhat powmso nvdffrv +xtuykl fjz mbikc xpnx hmey fjz fjz +rkls nwdcsyx rkls rkls +tygml untequ ybdfumz nqffbq uipc sove hfnqj +ytecew vven koqn royynd qsn ksl qsn sdw +hknlw qwho whoq oqwh +lzmmtqu qvhyeo cnofuj utpwkjz gnirz yhhu aodbnd +zsr axw kwtzcv tydzo kwtzcv lkxsm +rbjtqe nihifd gvdxd bpxzy rxteky vgcgllv vbbua anygiup rqo +dpd wblfwp wblfwp wblfwp ygahc tqjbaq +gsw gsw pacgj xmrcz zmxhmch xmrcz +pdq rhe xqmq lgpkhg fyffrot ovnqh wle +tbjavke ypzzrj jizx gdxoh icjsat otfh fmygumv +snch nxlgjgp jeyn sxoqfj jtage jtage iuice +rtb coefuj grwg grwg rtb krhqnma vfhgbr +vhegtl btorwxg szcev kbvkx itsk nlzpbed +hiukrf ilzkm yllhh xsgwkdp zyy kjbv +rfcg tdorci zcj wzftlv rfcg rfcg +lgbc lzizat vsno pau nvv vsno bbr lzizat qhtb gwp +sfwnio tcugjk bsfsz ykyfwg ibkap fsrvy mygk kzunawx zyhyh +mpavlh qps bylh lttjkz rqabgk vewb bwev tlzkjt gzrbxga ktmso prpkj +gpf ims ynh ffrs vpa iemp gofh cgbauje +secys qks mcnfhwh drog kqs pajy zoltkw lfihnb myb ioxptu +ytq nrta ouk ajqblf yuwwcd zdy blyoxbw dakk nvgi bzrhzaa +nkoych sufiia xkdvw crtldee zycl qblab egqhr qblab +nllno muxaf vds qjnitmw zkpj wskyhft kmqct xamuzpw qcai cdjtbt kaxv +qzdytpe osr fuw osr qzdytpe whperd rydwdcl knoa +zkdznhd peh duoygr zamrgl irnvj otpe pltpq jdkecg +byzgw rece iigdug ehif tpgje +ccnn foqdran gbctca tefdjxh ntcr rjciii xip xlss crl wvvhzqm twyohf +dqyii milqqc qjgkojp qjgkojp ryde +tdkyj tbrcud tsba vqtmb cjwxnf +hqhmq wemvrce nagig pwnw nagig epg nagig vlsi +tqgvw luoplw hccti npjm rytdruq cylrsun rytdruq vjsbjl rytdruq ppti +itgt tuwc itgt rvp itgt tigns eipl ksmru +pdw wdhtkn nbdbpn wff zhuuipg rvemv qxr +qgkwdq cjilayh ymeks mrpuzai dwgs stfstgz ucvqhb yout oiq +vpxik ypfr qytimvu qms oxbmw ppyfx +fwwidn gdhd pyuexk snsz iwndfw +lfcb sllxjna lfcb hpzahfg mmvgaa svny jhuzd +unyg gicmzd fwc spkciy toyq wjupckd vzzx iuqgka ytqycb pxsufj +goj tnrcml eyizngj txa xrkiw zvu igduz +wek xrrlkna clyof rrlnxak +cjm rmyuku vjom gtf +buk cfae awstd dywgqp hxo wcxvf laihqw xdqfes wdbh qceh uzlwj +sudguo dxwplto rlebdh bkamu dxwplto +crwkyxm yuz kjtdhom crwkyxm +trhc sduorxr aizfryh rsudxor gbyc +pczkyl bptp qnn nxmpwsx udrg hhlb rubtrmx twzodlp xygnht +jmqct cden yfajtkz fevcw sxonbxz sxonbxz qkzkm hhngr fbv +sdsnm mwvicr wypfi cty ndbowr woiz mrauwzd qlno mwvicr +vteyo fng lvr lxytn txpj milg +wjx ahtmgo cgwcaj kaxae fhlvlqf +ezj eetqhzu upwda iiefwlk vyvby +imalvy yeghqe jwcu mvrod cwju +bxnmsa yhfu npsdar tsbri hfuy sirbt oofxmy +fkndt elbjtn vepqtxt elvpf fpelv bzkgag qttexpv prblwb +rmq iqs yvprnyy iezqrzm wlqsrr +yviovq lekxghj oey qwhzj lxknxw qiyovv ksnt jptz +tyrg cifxt hugqf tyrg ffuiv jmax qyw fozfosq ffuiv +nmg rsl jpzazd qbtlf yxqtsj czwmdfd bamge lbjdof uqy jssc +cbx boozjip pwgvzlq rjz kxy kxy hszacok fvsq jhnir cnsba gafz +sbcuxb wfur nnnfqjj fdwg huhe sbcuxb +icwk qelbxs uevp qped zsnhh wpuok wddxsln ftnzupr ruxol cgxjb jbhh +izcp htykj xxmndoq amnspe htykj +vverol oixwlny vqd tvfzu henc gnyrwr +ytxio etytsx choynep zqapo hfjit +lkvgr oyzfa taiqr jok djatvy ckif tmdw oyzfa zroy +jlgpyp kkqysg oqjki hjohoug hbhta muilz zft +sumfyu wftcu bwwdcy lezimwa qwvxv zwh mqyv bmfot aii torcol rnt +tpdj xrw ccsbnh fhptv fwkxjfm dmqaokd bjci +zxi vmf vmf dpyg +sfzxysw lcms bkojtv bkojtv +opywo qll ipkitr mtwp tudrr svhyp huz bxsdpn xomfy +gkod luo qrosbp orbd rpsjzyd rlh gdok tze +nusiuq nusiuq zeys ahufexc +veno jntg avtmtdn qojxru zegdcql odfcetz pgehau +uqun vigjm ykac ozlelj danmji bibugox +rpuozh ajwru rbvuevv uhzsq +iawoe tyb aewio ymf byt inijv ctu fcys micsgzl pbby alt +gktyxp ris mqpfm bkqsfl nrg idbbcxg jhcf +qibt invvv qibt luitx rnm eby hrfbmwl wnap sgkzvb qlwc hrfbmwl +jwkv qecsjbw lycgldd wjvk tjcp dycldgl pzrvr zrlcf kji +nzsrmiq nmhse ilivrk kqv +besmyzi imkgpt iekbjax abxeijk uvzs wwv +jdocl uki ltswp tjkljc ymce iuepze qygqxzs tei lkry +hhyfy gvzd mqksxlq czn afe mesnag eep frwgekg mqksxlq phpy +ehg connnza ekt ddgokw +mpbsoms uzhzl xevww ztt uzhzl +lftybr firc awsud dsxdkk ltf ipjv dtx lcymth +vkcpb gxtxq yioeq fexj xxgqt +srvca fslnnvf nfmkpvt egw wemumq jie vznf dzsjw cukf kcvyir +yxjkl lyjkx jyxlk kgc xtz +tpoe xzov csp leleoqo noyre tdhf cyib sjgtdx raehdw nmcxp +qvt uhznqe bpvos vtq ddlebtd tqv +xlw utsxs gpia rvlvnts elkxr dddihy tnrslvv ibf wlx bxg +cwqnnrt rkkqyf dye yde fzl pthanj +boc rqjenpp xjqte jteqx pvoofc pidqe ruoucy gvnro ognrv +qhalb gnazwc fhl iuti +clnbjfo nnfs nnfs heymvr oarew oarew nxu +lwtrotg hiaxwj ymzbly nvhzjhj zlsaheg nvhzjhj ymzbly +rrvi tsjp tsjp tsjp killji +rpx hiclj cmwq ibhj nfd +pvwymn iebkd xmpw vuhhkap ksw zigzy mzzyyxy rmuh iwwhea cglfq +rlwelgy sffml jin qsdzro xlsty mgqzuu etxjuo emzd jgnoyq tkjuy vfvb +tkctdj hhkuc viskmy obw +zvjkuj akeky ikj jqd hfhzbwe bkc +btev nrdo hcyiuph stf qharfg vpmel mpfz nvs ytgbbc +ieepn ndueuw svmdr tcvumw mceyrn mrjwhyl tbdj mgrgvz +uxrs ckyi xpmqm czzrkl cjp +nlliwd wrqkrkz yjmng nlliwd zirde hcjjn wco ysf mgl +dxti lcahe ommare izlwf ramsfb nzgfvo ijvm fwymrdu bndq +isxy jpvuzu tdduyhw dixp cfa fkzbteg ytoi kepk ysf yqcpi +qmeprfj soqo ncgeor cqsuuj grzy wogxy vyblnbg slvtry vdols kka +ltykfp gtzl olrp gxend vapee deq +emywfbn dbfiut rkt wvwe dbfiut bwffhea yuzcxv gogpicp wvwe +vqvmrp ofbk dlfabd jwllzxk obx vqpwjj umvng tqwis fstxy fstxy +miha zgvyux rmraszo xwf +kjaagk btm kjaagk wkewjrg kjaagk +lbmli aizs omrdr gzktnx asiz ptanzpa xlo ljre ckyb wob +svz dlk rijagg avxmg fkzwhk uro gegm +dzplum temdw jqnm tvxcww bmg tftttpp deuw comxey xfimzjx caluczi nqn +uwvhxa ztkd nlsdyt vihl julkwwv uzch dwakhs +wkhuihh ycrc cxff vzcfhpp uegfd gaok kcnvz lhzogq lwa tyrypvu +idp zmrrzp zmrrzp nktp xsnx rjsxn +eybrnib ivgntl vaxsbpi eybrnib +nzvnq xvbfa pbhwwh ylju runvsj imlx vztesn +nfdohd nfdohd gtevnky pivjyct ihvd fzcsrq lko fmqk +kwpkks ecikxu bcxswlt qvrxm sbcqmh +kdjrmj piuh kdjrmj vnaf gyedkg vptxgm xezssxx zsg qjzpo zsg +oqo sley aqx qmpqb fgmylbj egd zivj kepxizv kuakyn lunbnd +hmcf hmcf xlhgc hmcf cdlm buofnx +onjcj yluonz kzmk phqo phqo phqo +ohaafy efl bnkkjww wwjnyoj dxeaig ywnjjwo slk hrbebw ohlyju elf +msohiqz aunk njki bfktdgi htmyrj mgx +numlzrl rmnlulz glb ltt fhbajz gqxpu +gko hco oai ryq xwy sdqosft spjkiu cxfhg ycwpglh noy rah +btzpjem brpk vqr atxu rhlh rqv jmg fvyus +phmxxgj ejx xje qtk hsb kqt npwj gqt +hujyjp nwmsd ant zipuya lrkahww uwqal vzlo qmbo twkjkse ufivi +zfbnyz fwvh xrnrw usn zin daq iwjzj +yykyg iwypfy hehqnl cjvk cevdrec +gui muuto wsta glqmx gfo rdmbv mxwz gffzt eejpw gion +lpng nduid iqbpu nduid knrqd +xwxn oefpckv gjaua ugaaj gjuaa +qxk aeql trqdmqc crzlinj crzlinj trqdmqc rijcne ewyf +rfv qmbe fvr bmeq +upqyfw lowzq wpen upqyfw gfskbil sljuzh wpen +bdcara qyhx rtaez qyq gbyr +evzls qxtxq clzd svbgqi zxlzgss vtrre fko eebo qjyl +zaapeo kpwhz tygknau nyd pch trp xqe +ypzcafg rnqmbh qtteg sncu ssojhhm zonfym thir xmgheb wqj gpjg ssojhhm +wvcwyn xrf muozyya lasdp xpjgu kpqv zkiihiv ifje cbdlavg xbied hfnaa +qqqb rettz rycukl ihpkhh +dnxzxqv znb znb fbxj azxtezb xvxa +peqkd xlzqkov esgnw ucku hrwpfxd xtd vnig vlmfp ajte qswr kqoj +dpwy oavzkk dwyp ehij upqxgii pydw +amfc hfv xmqa nqvn cal rqmcq oej amqx cla ntxj +hqhhe qkbhwli wmhlcq xaczs peywuo +vcr xfv xfv kymo qpszwzo xfv +nmrbur tswo xbo ljlrzo bmhpgc pev zovkznz lok wbbhtkk +tojj lxqgr rhjavrm ndsdup gdbjwaq cqpnl wfaxivl rfry ryfr udspnd +beffod sknlph amb feobdf +mldgn jxovw yuawcvz kzgzwht rxqhzev fsdnvu vluuo eycoh cugf qjugo +tlnd qcxj ker fdir cgkpo nrqhyq raef uqadf iahy rxx +mhvisju lhmdbs tcxied xeidtc ujry cditex gvqpqm +cgc jazrp crgnna uvuokl uvuokl uoiwl sknmc sknmc +rvbu czwpdit vmlihg spz lfaxxev zslfuto oog dvoksub diff --git a/2017/inputs/day_5.txt b/2017/inputs/day_5.txt new file mode 100644 index 0000000..3b5dd14 --- /dev/null +++ b/2017/inputs/day_5.txt @@ -0,0 +1,1070 @@ +2 +2 +-1 +1 +-1 +1 +1 +-5 +-5 +-1 +0 +-8 +-2 +-11 +-4 +-5 +-10 +-4 +-9 +-9 +1 +1 +-11 +-8 +-19 +-14 +-6 +-2 +-1 +-11 +-23 +-8 +-7 +-9 +-26 +-1 +-8 +-11 +-34 +0 +-22 +-17 +-41 +-12 +-43 +-33 +-15 +0 +2 +-41 +-41 +-26 +-48 +-52 +-47 +-30 +-38 +-20 +-4 +-21 +-17 +-19 +-55 +-32 +-12 +-55 +1 +-34 +-8 +-15 +-59 +-56 +-16 +-23 +-43 +-5 +-41 +-56 +-32 +-67 +-14 +0 +-28 +-32 +-7 +-54 +-19 +-9 +-24 +-63 +-2 +-60 +-5 +-78 +-11 +-84 +-50 +-36 +-72 +-14 +-30 +-4 +-62 +-6 +-1 +-69 +-17 +-33 +-32 +-45 +-71 +-87 +-71 +-60 +-19 +-80 +-11 +-106 +-45 +-27 +-23 +-51 +-77 +-67 +-103 +-17 +-98 +-109 +-91 +-125 +-68 +-39 +-34 +-96 +-49 +-64 +-38 +-105 +-31 +-100 +-89 +-108 +-69 +-36 +-94 +-38 +-124 +-123 +-79 +-92 +-42 +-14 +-87 +-68 +-17 +-36 +-21 +-54 +-98 +-79 +-142 +-25 +-60 +-112 +-99 +-64 +-15 +-78 +-37 +-64 +-15 +-129 +-32 +-102 +-74 +-112 +1 +-146 +-151 +-147 +-153 +-4 +-181 +-22 +-176 +-4 +-57 +-151 +-86 +-121 +-38 +-137 +-160 +-156 +-72 +-73 +-149 +-64 +-182 +-117 +-146 +-180 +-195 +-27 +-194 +-191 +-108 +-153 +-40 +-149 +-100 +-120 +-207 +-83 +-94 +-73 +-200 +-95 +-155 +-94 +-76 +-9 +-149 +-70 +-125 +-49 +-146 +-223 +-68 +-139 +-26 +-132 +-142 +-165 +-2 +-45 +-154 +-129 +-130 +-185 +-60 +-34 +-173 +-91 +-37 +-40 +-153 +-189 +-236 +-95 +-128 +-46 +-14 +-53 +-245 +-67 +-9 +-208 +-244 +-198 +-74 +-62 +-104 +-51 +-251 +-48 +-50 +-115 +-76 +-79 +-32 +-82 +-65 +-185 +-124 +-32 +-189 +-124 +-174 +1 +-273 +-223 +-275 +-238 +-200 +-184 +-229 +-195 +-152 +-63 +-150 +-73 +-44 +-54 +-187 +-49 +-250 +-192 +-290 +-282 +-266 +-214 +-117 +-199 +-83 +-104 +-251 +-176 +-262 +-296 +-39 +-259 +-87 +-132 +-166 +-67 +-194 +1 +-294 +-8 +-3 +-264 +-217 +-228 +-233 +-241 +-294 +-210 +-72 +-307 +-259 +-33 +-101 +-103 +-235 +-100 +-110 +-253 +-292 +-134 +-269 +-52 +-265 +-15 +-29 +-272 +-126 +-210 +-151 +-308 +-40 +-40 +-112 +-268 +-185 +-346 +-237 +-287 +-34 +-302 +-41 +-25 +-191 +-29 +-170 +-95 +-315 +-278 +-160 +-220 +-99 +-126 +-224 +-33 +-350 +-76 +-138 +-340 +-284 +-268 +-128 +-238 +-197 +-93 +-110 +-120 +-190 +-140 +-64 +-217 +-296 +-103 +-363 +-199 +-254 +-233 +-190 +-282 +-136 +-174 +-309 +-61 +-206 +-18 +-105 +-111 +-163 +-287 +-188 +-145 +-294 +-251 +-398 +-265 +-273 +-50 +-250 +-376 +-5 +-357 +-6 +-8 +-198 +-20 +-82 +-158 +-122 +-196 +-97 +-183 +-48 +-428 +-36 +-88 +-424 +-35 +-380 +-109 +-209 +-323 +-394 +-102 +-276 +-153 +-229 +-320 +-391 +-7 +-328 +-127 +-430 +-102 +-372 +-447 +-222 +-401 +-184 +-183 +-49 +-239 +-413 +-101 +-187 +-289 +-12 +-418 +-248 +-279 +-318 +-134 +-443 +-272 +-456 +-143 +-3 +-209 +-276 +-414 +-189 +-302 +-238 +-241 +-106 +-332 +-375 +-400 +-476 +-9 +-95 +-412 +-52 +-127 +-442 +-278 +-25 +-446 +-411 +-39 +-55 +-80 +-234 +-361 +-223 +-384 +-283 +-47 +-164 +-18 +-38 +-87 +-393 +-93 +-380 +-493 +-73 +-150 +-241 +-378 +-211 +-516 +-349 +-520 +-38 +-397 +-406 +-16 +-461 +-276 +-448 +-316 +-376 +-156 +-369 +-216 +-431 +-309 +-400 +-135 +-523 +-40 +-508 +-87 +-25 +-151 +-355 +-141 +-3 +-495 +-153 +-438 +-343 +-161 +-66 +-455 +-70 +-248 +-278 +-548 +-300 +-337 +-290 +-551 +-200 +-68 +-540 +-476 +-395 +-245 +-318 +-424 +-112 +-556 +-541 +-94 +-148 +-542 +-100 +-120 +-199 +-569 +-471 +-298 +-16 +-453 +-469 +-50 +-500 +-84 +-435 +-579 +-287 +-522 +-77 +-83 +-347 +-437 +-171 +-231 +-139 +-350 +-357 +-221 +-214 +-224 +-148 +-125 +-385 +-255 +-38 +-320 +-254 +-517 +-532 +-80 +-286 +-58 +-97 +-390 +-309 +-548 +-319 +-323 +-238 +-297 +-12 +-312 +-517 +-434 +-466 +-103 +-621 +-448 +-503 +-72 +-601 +-287 +-61 +-577 +-87 +-143 +-33 +-482 +-275 +-529 +-340 +-279 +-130 +-512 +-63 +-109 +-528 +-22 +-549 +-317 +-375 +-377 +-385 +-23 +-191 +-138 +-509 +-40 +-565 +-559 +-14 +-547 +-28 +-159 +-153 +-585 +-508 +-582 +-431 +-580 +-637 +-561 +-513 +-243 +-420 +-298 +-485 +-132 +-613 +-157 +-521 +-596 +-61 +-420 +-498 +-577 +-563 +-354 +-662 +-264 +-273 +-111 +-597 +-466 +-389 +-345 +-306 +-102 +-57 +-596 +-1 +-45 +-12 +-619 +-47 +-43 +0 +-323 +-9 +-319 +-529 +-402 +-238 +-191 +-487 +-315 +-65 +-386 +-110 +-605 +-363 +-461 +-6 +-95 +-95 +2 +-596 +-454 +-618 +-83 +-481 +-283 +-386 +-247 +-417 +-707 +-564 +-603 +-17 +-712 +-140 +-336 +-567 +-443 +-36 +-476 +-251 +-735 +-589 +-198 +-197 +-476 +-49 +-736 +-422 +-383 +-569 +-732 +-1 +-104 +-261 +-352 +-453 +-273 +-344 +-66 +-307 +-698 +-158 +-238 +-280 +-207 +-624 +-491 +-765 +-506 +-146 +-616 +-711 +-650 +-655 +-393 +-19 +-315 +-311 +-572 +-675 +-533 +-156 +-373 +-744 +-142 +-582 +-491 +-796 +-777 +-125 +-483 +-426 +-510 +-560 +-700 +-778 +-407 +-440 +-409 +-238 +-738 +-477 +-147 +-152 +-317 +-110 +-323 +-788 +-601 +-202 +-517 +-487 +-726 +-300 +-1 +-554 +-448 +-15 +-191 +-531 +-568 +-466 +-527 +-132 +-254 +-290 +-8 +-400 +-655 +-788 +-376 +-249 +-662 +-315 +-378 +-41 +-793 +-163 +-29 +-327 +-839 +-133 +-124 +-129 +-673 +-32 +-605 +-393 +-664 +-374 +-135 +-366 +-717 +-93 +-601 +-763 +-788 +-494 +-802 +-282 +-443 +-491 +-461 +-197 +-83 +-96 +-162 +-97 +-161 +-232 +-144 +-472 +-118 +-429 +-387 +-724 +-789 +-636 +-298 +-484 +-720 +-526 +-382 +-102 +-449 +-846 +-525 +-547 +-696 +-524 +-272 +-843 +-286 +-247 +-838 +-447 +-489 +-797 +-483 +-386 +-775 +-340 +-772 +-158 +-293 +-256 +-432 +-812 +-273 +-93 +-487 +-264 +-594 +-330 +-712 +-798 +-131 +-591 +-539 +-677 +-455 +-470 +-108 +-573 +-57 +-845 +-383 +-273 +-890 +-747 +-913 +-648 +-625 +-650 +-544 +-137 +-490 +-434 +-734 +-182 +-355 +-859 +-835 +-141 +-536 +-874 +-102 +-940 +-359 +-83 +-800 +-894 +-712 +-470 +-687 +-578 +-435 +-935 +-400 +-780 +-814 +-458 +-892 +-481 +-371 +-761 +-348 +-388 +-891 +-764 +-297 +-536 +-695 +-314 +-336 +-978 +-379 +-462 +-597 +-533 +-561 +-9 +-474 +-292 +-560 +-420 +-828 +-721 +-769 +-874 +-157 +-495 +-771 +-899 +-571 +-98 +-282 +-233 +-203 +-982 +-416 +-142 +-993 +-540 +-979 +-851 +-506 +-238 +-292 +-184 +-695 +-195 +-632 +-575 +-962 +-76 +-546 +-705 +-13 +-271 +-222 +-124 +-380 +2 +-1003 +-251 +-525 +-228 +-644 +-159 +-624 +-477 +-912 +-712 +-343 +-263 +-88 +-745 +-85 +-374 +-675 +-804 +-610 +-854 +-511 +-612 +-964 +-731 +-358 +-495 +-946 +-466 +-364 +-1053 +-57 +-101 +-829 +-155 +-600 diff --git a/2017/inputs/day_6.txt b/2017/inputs/day_6.txt new file mode 100644 index 0000000..b16e11b --- /dev/null +++ b/2017/inputs/day_6.txt @@ -0,0 +1 @@ +4 10 4 1 8 4 9 14 5 1 14 15 0 15 3 5 diff --git a/2017/inputs/day_7.txt b/2017/inputs/day_7.txt new file mode 100644 index 0000000..faa4be1 --- /dev/null +++ b/2017/inputs/day_7.txt @@ -0,0 +1,1091 @@ +yjmbbu (75) +zdhvqrl (40) -> fpbsu, fwpfjjd, viqhfi +dywqvqh (9) +gewgn (31) +xfekjt (67) +zezowe (31) +wgqkdcr (79) +ljhwzvv (258) +vustse (1584) -> ffnabs, qinmi, qhafxnl +idfwjgx (112) -> buoakk, itwbpot +lxesg (71) +qkbnq (99) +jppgd (27) +ztghd (125) -> bcibchp, aaheijb +qcrpdy (29) +fwidkbp (152) -> mnkwo, ehjooz, jvccsp, cyrrjtx, imynb, chnkkj, agywjrs +nymhem (52) +cazid (93) +olspit (121) -> bqtas, fhuiyrl +ayteb (92) +hjucki (58) +wrqtk (305) +jfjemon (217) -> bjhickt, uacjhqx +mcmqliy (925) -> coopirx, ekohgo, ioywk +rsancy (70) -> aeuub, vchuc, heacb +zjwpbzs (23) -> jysaup, pgubexv, lckuoqf, eeguu +qflouyn (90) +nswximo (65478) -> ibjvonk, sdhtguj, dxyifeb +rymkqd (102) -> vgqeyx, zezowe +wlujpl (92) -> sjwhig, wymfopy, ylfsnz +imcczga (95) +xehdglb (52) +twubx (46) -> goimlra, vlimzz, xaoncma, gfzbp, spdhhoe, fhmauag, cyapi +yjhes (72) +ymcuygn (81) +yatbsip (19) -> bkdtinl, nzqcq, tkmed, ysbrui +yipoeia (58) +chophr (27) +tdwtlf (305) -> epuaii, idfwjgx, nwikpdm +emzrj (119) -> aimav, dtscjna +vbxmpc (7) +nrpxx (21) +wgexpa (103) -> paxzd, vgdwm +vnrmx (359) -> knzppj, gkkgkp, ttwfig, vcixs +knltna (677) -> zbhtee, ztzwh +ojvlwm (52) +bgflw (27) +lsdrwz (73) +hswzo (40) +spwgm (351) -> mizab, cyzkk +jlnyr (16) +nwikpdm (36) -> ihwaeuw, wwkeej +qbmtmcs (34) +djirpp (19) +pkfhp (59) +qfypnb (76) +jzequar (272) -> mtcrswx, wkcyd +tttle (71) -> xlskkfi, ayteb +zbhtee (48) +iriun (9) +dwezv (73) +tojyt (58) -> dwezv, nbngkou, wnjtb, rarkunn +bsorz (27) +qvkotfd (337) +azxjd (268) -> exeub, lryzkx, nqvxs +wpxxh (998) -> wrqtk, yosnw, vyxfljc +gwournc (85) +aghdlll (88) +lejgcu (19) +lxlbt (363) -> oiosol, mpchqe, bsorz, jbpjt +nbeagw (94) +vbbgeo (19) +lqfyzo (21) -> tggkm, zdbqs +vqclii (331) -> dmkbnot, omdpc +lhmnd (216) -> onnylx, khaupo +wwkeej (60) +laczal (99) +xrbjn (20) +qvteg (64) +ogbsm (92) -> xpzhy, mhsjkm +ymckwqo (41) +ghsjtj (271) -> hhmwlo, faixe +sjrxs (259) -> mnijdlk, hygfoe +hdvel (197) -> upuxd, dtstgj +lckuoqf (78) +yppydul (91) +frirj (6) +duftj (42) +dnmvzeg (64) +cpazlc (19) +krxyaak (198) -> maqgick, xbnmvd +oyczfgb (395) -> rxcnn, ktpte, qybmgto +oxiuaz (12) +wfphcf (6) +ihtnbb (87) +omsroa (45) +lybkeg (6022) -> oyczfgb, jzequar, yrcgsnx, ujulj +agywjrs (184) -> anpnrdt, hgdbaol, hcjmsd, kzbvrxk +tiujei (34) +lwencl (28) -> ieusgd, mthhq, fsuzqyz, miwoup, isrtfc +wekya (34) +bkdtinl (1167) -> ojsjuts, euoclfs, xbkeua, mykrcq, jjsvfy, aazxafl +qinmi (1896) -> qshbt, ruozmjk +yfmxvay (46) +kgpwo (52) +fgjjwep (14) +odvtiti (76) +ienye (19) +tcvabyz (99) +ycclns (7) +njogewi (30) +bfchbs (87) -> jykbb, qnbfk +dlbzng (99) +xnmvtem (51) +ccciux (94) +xwlmsqy (25) +wekkbw (17) +yipzce (21) +hcjmsd (10) +upvhfmn (68) -> fvlfq, ivmndi, ussmw, ccciux +hacwv (50) +redqvw (269) +dtpexjq (52) +kmlwj (84) +mluykm (19) +ucbbun (114) -> hrqzqqh, ccuarv +kymhbse (155) -> tznudmk, hnlgkv +xomnhw (185) +nsmoh (65) -> ceuygh, acpfsnb, vgubuy, apkwi, yoeau, pdosfg, lfpzff +zvepqr (51) +wnotwt (99) +lcrwbqi (27) +hdlqvlg (27) +iphgmyt (160) -> woolxv, ewyzqg +ujulj (50) -> cazid, npmwcx, yeooycn, dmeee +zjaklmn (52) +bjrpalu (53) -> rhodopg, tcospq, cvrcvgp +azdei (48) +snzfrer (149) -> bhsbd, tgdzl +zsxizw (18) +fwpfjjd (89) +fndxl (36) +uzrnud (14) +igyxt (41) +vxdkej (135) -> diomq, qokscr +gjuekv (5) +uzufet (143) -> fgjjwep, uzrnud +vzuqbye (87) -> eviqjr, cgxsmq, egmfbdq +zirocl (29) +jonshpm (99) +zmlth (154) -> zhxhkgf, cokzlht +bujroda (51) +bdvtvcu (74) -> tvcod, ouamzwh +jdrdxu (36) +troyu (29) +nrczsn (86) +aihow (92) +gaihmf (84) +ehjooz (124) -> hgwsl, mefxonk +omydd (6) +raevpsw (64) +aylmbfh (188) -> ddspu, thdwfw, kxnkbs, rziezq, jfjemon +diomq (65) +jjyjrtr (87) -> fjduphn, yjvgwdl +zsiziaa (38) +lyptirp (8) +lctdjj (56) +pbtks (85) +jxhrar (227) -> barnhza, iqovqp +neqfzm (13) +dhwauy (48) +qvjqfi (80) +ivstcsm (72) +aabrjf (72) +jvccsp (86) -> gukuqw, hpmbkwb +ddspu (113) -> yjmbbu, dzbrgb +zgevpxx (48) +qrrey (588) -> bhvmgw, wgexpa, xiotwdk +ncodn (62) +rbcqgqv (75) -> imcczga, xzurwza +fpxtub (11) +ldfopw (30) +ewyzqg (49) +iuhlc (6) +oqphsw (2722) -> iueejt, ekdqf, btbxk, jdshuob +eysrnaa (71) +ojsjuts (176) -> njxyw, dzasw, rpzaqc +ozyexx (83) +nnldikq (316) -> upwlxnb, vbxmpc, dgwcz +tfmtk (69) +hwctdr (76) +rothisa (66) +qnbfk (91) +qcgxvx (99) +igyiie (237) -> knirl, trbzi, auxvur, rvhxik +cverrt (52) +orrutjs (93) +ffloi (25) -> kflize, icgwppo +phrxnli (21) +eopxpo (41) +vlfouc (62) +fdnom (87) +wuxhvnx (86) -> ikfpktb, zcvipz +flefy (38) +yoeau (206) -> rfwgtb, drmyco +ozatmpe (34) +ydbri (66) +tufds (42) +pprhx (57) -> xitzb, zqyua, dtpexjq, zyradhz +zhxhkgf (29) +qwzmv (52) +paxzd (53) +cyzkk (60) +gyjxkl (37) +pzpjw (54) +svayf (89) +xxxqpkx (7) +imihjj (69) -> yygqky, qlkslp +tkpvf (47) +tljdqy (81) -> sxllorg, yatfpqx, zbznuyf, kymhbse, rfmeug, tetmzw +iphzyj (260) -> omsroa, mxupea +xiotwdk (177) -> jlnyr, nsqqw +eyyzy (274) -> opuaau, qolnvo, jxhrar +baewpe (55) -> svkdyq, hitoud, zvnxfa, emfctr, facrq, vykqcnj, bckuyxm +barnhza (20) +oafnfo (51) +pjcttzo (50) +aooni (205) -> xrvbzya, gvjrx +scchi (48) +zcgrnt (73) +pmsdv (93) -> pyypotx, marzlxh, zvepqr +kngbqid (89) +iwhqlr (949) -> ztkgsyt, ffloi, hzgig +vyxfljc (92) -> pyrlph, wdsiq, eysrnaa +hddzn (69) +cxvqvjz (136) -> kfrti, nslettz +tcospq (96) -> aabrjf, dllgpye +mnmwzz (142) +xfblj (40) +vfwegiu (46) +iphncut (138) -> wslsg, qhnaxuy +algqhtz (37) -> qeojk, sybpano +dmoxr (73) +tozktyo (29) +npjxq (46) +uvfyo (675) -> lxlbt, gnjvf, nfsuzef, spwgm +ollhxuy (821) -> vefzbc, faecnr, geldsqv, xneoi, cxvqvjz, jgkvfa, xtwdx +ksvfdcc (72) +avycyh (180) -> hwosyg, alqim +nsqqw (16) +nsfsj (99) +tpphe (64887) -> yatbsip, syzlt, uttujj +miwoup (40) -> gyjpoco, apgjv, eknui +iljwgzf (92) +bfuywyg (82) +aaqdb (44) +fgbyre (11) +kywfqzv (41) -> lajidkr, gyjxkl, wfhyr, evhsybt +aiovxpk (95) -> yoxvx, pbtks +hrovawq (50) +ajenoz (48) +aeuub (53) +gxjvj (163) -> yiusa, nrczsn +ippzix (9) +ttllx (73) +rorqy (43) +dqash (96) +lwvnbzs (24) +ckheb (34) +rgfndsx (18) -> qkbnq, welll, bkextqn, wnotwt +rsazi (62) +rpfmi (52) +uxslfay (72) +aemgsa (40) +jfmnsqg (85) +ggnsa (114) -> xhmfmo, azdei +lndaa (175) -> qvjqfi, iyuuh +kjdoubx (128) -> eopxpo, igyxt +dzasw (47) +emfctr (9120) -> qzckx, fsaoa, bjrpalu, mdneq, tdwtlf, hswrbpz, knltna +srqntb (137) -> raevpsw, qvteg +wweusm (66) +hawsl (13) +cupsjm (146) -> baiaa, pcqyagx +ppqlc (42) +tadnt (47) -> ufefj, rwxggm, rorqy +rvhxik (11) +vijkx (32) +lqcar (71) +dhkahb (49) +ftuemb (19) +ewdqb (50) +npmwcx (93) +wwezydn (97) +fuvru (98) +cdpwklz (83) +dtscjna (46) +exuusj (7) +ouamzwh (88) +ggvbqrp (145) -> opohwq, yrmgc, gewgn +ekdqf (467) -> ugvqayz, ysgsry, ogbsm +torxqh (90) -> dzwol, lepja +hpmbkwb (69) +ripqyzr (48) +eiklbh (32) +omdlwm (168) -> ihtnbb, hjjkx, bomho +lbwzat (74) -> iivncbz, dmoxr +pyypotx (51) +bjabd (7) +auzbdlz (95) +sxfilp (72) -> livlj, lgenxz +kxvlprg (60) +rfmeug (121) -> apygt, viwns, chtlcwq, wekkbw +xajjyba (164) +kzltfq (94288) -> vnrmx, lrihy, arqoys, nsmoh +mbhld (73) +rwxggm (43) +vapwxei (61) +ufefj (43) +oajawn (34) +dgnjf (335) -> yxseri, nscbsob +xaoncma (296) -> yipzce, nrpxx, rrfbngi +kqlsniq (95) -> qwsxpnc, mqmbcl, gtbbuvb +jrvbacq (49) +oavluo (21) +qpldch (54) +ieusgd (295) +tifgptk (100) -> ddldgex, ggvbqrp, focqhgt, cncak, ksvpnt, weuwc +lhradm (583) -> vusxa, lbwzat, ucbbun +apgjv (85) +cbibo (99) +jxhngrl (48) +qwsxpnc (96) +ysbrui (1293) -> iqggu, upvhfmn, kpqyb, wdeuy +ekvall (209) -> jxhngrl, aplvqql, drwfop +mkwfj (35) +pjiqvd (87) +pgubexv (78) +vbhnmr (2850) -> iftfc, kunzpa, qrrey, tljdqy +sjwhig (93) +zyradhz (52) +wcexum (116) -> eiklbh, vijkx +cdcye (53) -> izppmg, rxvyqsp +bdinafh (10) +rziezq (145) -> taiho, pkfhp +nslettz (10) +svhbd (109) -> xcvxle, fqzsq, jopjvd +limljj (68) +kauphp (231) -> dyxsmz, yzxzo +caryo (7) +nahovfk (109) -> flefy, cfztpc +qolnvo (267) +cmqwplb (9) +cfhuce (71) -> cecsr, josdslh +zwnvqu (88) +mhjtjp (91) +apkwi (222) -> rxragg, zsxizw +ioywk (16) -> ozyexx, eikmns, ktjav +yrmgc (31) +kqzemkv (96) +rxvyqsp (60) +hnlgkv (17) +raryuo (73) +bomho (87) +rixnft (85) -> cpndnx, fpxtub +zoewj (193) -> ohbuhy, ymckwqo +hnyqq (34) +tkmed (1959) -> tuqmup, jwgchxu, sjforw, zmsosb, tqikxkp +wlpyulp (10) +pixjzh (158) -> fgjwz, lsknlg, hlcghe, txhfuoh, hdvel +likvlm (62) +xhmfmo (48) +rgrxpe (69) +weuwc (84) -> xtwdau, muncur +uevcwul (92) +kpxqlr (155) -> nbbyqsa, ilkqp +fqzsq (98) -> tiujei, yhubw +ubovv (6) +knirl (11) +lzvniiz (60) +cwtdf (29) +qeojk (99) +ycxzfkf (131) -> bgflw, chophr +thjulip (20) +vgdwm (53) +myhch (25) +bovno (175) +uqlso (48) +rhnkdt (59) -> rsazi, ncodn, pwizhzr, likvlm +acpfsnb (204) -> nmlcne, vfsttaj +wzfkk (99) +oqlpz (81) +nscbsob (24) +mzmfygf (171) -> jxyoypa, ippzix +rvrlma (211) +pfphng (90) +mdiqsgg (12) +jtzkva (274) -> flomey, ukvvt +tvwxmur (64) -> yodoqn, ksvfdcc, ivstcsm, pvgzz +aplvqql (48) +qybmgto (9) +mtcrswx (75) +aphpzub (29) +vchsdif (105) -> ofisj, zwnvqu +dllgpye (72) +lfzahrm (79) +oiosol (27) +geldsqv (80) -> ienye, eeppf, ftuemb, vbbgeo +vlbba (81) -> ewdqb, vfzby, pjcttzo, abddskq +nfsuzef (75) -> dlbzng, cbibo, wzfkk, jonshpm +lryzkx (71) +mhndszl (190) -> tbrfk, xprzeeb +jbepak (66) +nmlcne (27) +gfffvbp (8) +bqtas (93) +fhmauag (221) -> vantwg, kzwqzqf, vfwegiu +misyfn (82) -> uixlx, oupzsh, bovno +jtauf (13) -> xskehl, bmfhjm, srhirm, kjfmqkt, qzxaqvy +eerktn (85) -> npjxq, kasfuwe, ljbss, theau +ktaet (58) +eeppf (19) +vgqeyx (31) +qhnaxuy (31) +xrvbzya (35) +nzqcq (66) -> vewgrvp, vfngjd, sjrxs, hvjtn, ecokyy, gcaxntb, omdlwm +sybpano (99) +ebsniof (39) +urzul (9) +srmiagk (292) -> dvdgowj, vqpeg, gjuekv +uexdnv (82) +pgspysb (40) +wymfopy (93) +nqhdt (164) -> mkwfj, gjwaqu, sxmbcwp +twzpqip (41) +bniti (66) +yfjenp (295) -> qxfce, zsiziaa +meoeea (60) -> laczal, tcvabyz +heacb (53) +focqhgt (238) +dtstgj (36) +kkmqko (7) +vcjjo (98) +nnnkeh (445) -> gzzpja, bhuyfk, xnukvni, tttle, snzfrer +baesyhf (1013) -> tznkwk, hcjxz +hygfoe (85) +wtxbqe (87) +vwzglf (58) +hswrbpz (254) -> flcqsb, sbguah, cdcye +axtqrx (29) +auxvur (11) +iqggu (444) +kceusl (42) +jykbb (91) +nxzkuj (75) +xzurwza (95) +rrflox (52) +kfmzbvk (10) +mnkwo (212) -> jyskb, wfphcf +dfvhic (82) -> fhmazv, hwctdr +gfzbp (197) -> ymcuygn, mxzbcqn +tlednk (39) +lgenxz (54) +emwbbut (9) +exoft (17) +woolxv (49) +auxqbbc (87) +wvocz (67) +hvjtn (325) -> cverrt, kfxoi +aunhcg (613) -> kjdoubx, ggnsa, acknlp +absdwf (39) +wajnxjj (40) -> imjzf, wwezydn +hgdbaol (10) +cfztpc (38) +chlxm (46) +ljbss (46) +gauumxf (230) -> tkiraal, lyptirp +nhlittn (22) +gcaxntb (405) -> mdiqsgg, oxiuaz +lfxew (66) +bamxg (66) +wdsiq (71) +mykrcq (98) -> zcgrnt, raryuo, okrdziq +erpvue (91) +kmwbbz (93) +vsgaam (7) +hokyk (66) +pjzpmq (38) +iqovqp (20) +mmcychg (65) +guncf (259) -> proshun, wxjka +jatnl (216) -> oavluo, phrxnli +nhkvp (100) -> rgrxpe, nscav, illjvf +hcjxz (31) +mqrroj (243) -> jtjcj, dnmvzeg +lvksghj (18) +mhsjkm (84) +popplum (89) +vusxa (30) -> ieadjz, mzmtuw +dmkbnot (26) +httit (18) +tbrfk (19) +ztzwh (48) +imjzf (97) +rypdxr (105) -> qyoqb, lejgcu, djirpp +qzckx (35) -> qzzkvf, pmsdv, gauumxf +xbnmvd (76) +ouymke (47) +rajtef (365) -> iriun, ezaypy +itngcua (65) +orxoo (66) +tcdwurt (18) +auqoj (99) +sqnvvbg (36) +rxragg (18) +kpqyb (258) -> sqkcdf, iqxwh, vnhvilk +proshun (47) +uscufoy (15) +tpipb (61) +owhjmt (155) -> vsruoi, ifxcrug +bkvle (9) +yosnw (32) -> ilymgq, yppydul, yamclb +iynywq (66) +nxpexoq (92) +eviqjr (25) +trbzi (11) +rfvomn (95) +ohbuhy (41) +vkpltts (73) +ktpte (9) +bbgwzg (79) +bgcigo (8) -> bruzfkf, lxcbjgy, vlmcmcu +ecokyy (357) -> iaphzk, httit, vztnh, owmni +jwgchxu (32) -> rfvomn, auzbdlz +xlskkfi (92) +uxjasn (36) +dcumfo (73) +wpnqet (87) +ilqol (88) +bhsbd (53) +flcqsb (115) -> meypo, aphpzub +yvqtyi (85) +oyvhouc (37) -> cdpgoi, bbgwzg, xoziel, lfzahrm +bjhickt (23) +hmvwl (32) -> nswximo, tpphe, baewpe, hghnmib, kzltfq +oiijtm (20) +ylfsnz (93) +imynb (146) -> absdwf, cikaze +yygqky (82) +yuswp (68) +izppmg (60) +itwbpot (22) +hwosyg (42) +mkrzp (211) -> laxsl, zirocl +vqpeg (5) +gddkqw (244) -> vhtyadn, lvksghj +bhuyfk (79) -> aghdlll, ilqol +yrfqaga (103) -> jqinti, zjaklmn +bnfopv (118) -> cjmxed, zlzers, qrlggma +welll (99) +ehuzoq (77) +nqyok (77) +rrfbngi (21) +yoezrpw (38) +rpzaqc (47) +qxlucvg (84) +tehyhc (13) +gqrfok (231) -> kfhnhm, aituccf, qrkhol +zvnxfa (10022) -> aylmbfh, lwencl, pixjzh +gzzpja (255) +ofrwmq (205) -> iigvpqy, wweusm +qanbo (50) +obslyn (13) +hwovhvw (915) -> qdhrchr, nahovfk, xomnhw, ycxzfkf +smlfbc (1615) -> wnjwnr, pprhx, aiovxpk +xbkeua (157) -> pgspysb, aemgsa, xfblj, hswzo +btklib (51) +owmni (18) +qzzkvf (108) -> aobitc, tsrogy +umtrod (22) +vxajmkg (71) +jmlmzpz (62) +plurwe (228) +jyskb (6) +xnuoujm (16) +nakmo (10) +uzhlers (50) +umlkxqv (20) -> ecimj, wudjf, jfmnsqg +ziqwzzy (204) -> uscufoy, fooyrq +ymrogz (272) -> ebsniof, tlednk +lpuass (28) +qrkhol (9) +hpkpw (38) +gtzcxq (73) +gvjrx (35) +ieadjz (95) +tcukgv (66) +ifxcrug (55) +thxtoc (178) -> trtgn, fdnom +puwvse (414) +pvppi (246) -> qlwxeb, nuqyqh +vcixs (260) -> noipcz, frohei +cichyqw (71) +ugvqayz (126) -> xfekjt, wvocz +hrqzqqh (53) +qedst (18) +wnjtb (73) +kjfmqkt (138) -> pzpjw, qpldch +ussmw (94) +sxmbcwp (35) +dqdfv (73) +ptyxo (13) +upuxd (36) +fppcif (209) -> uxslfay, yjhes +kxykfr (82) -> twzpqip, qymwy +yodoqn (72) +mnzbkuh (28) -> jtouvtb, wdvwub +omdpc (26) +ccrftvw (62) +bmfhjm (222) -> lyvyhkm, sbyxyf, kblshw +fwgqj (1924) -> zmcgfdp, vzuqbye, rypdxr +rlbom (79) +livlj (54) +ybvgki (8) +zcvipz (97) +xyohoxa (928) -> qkkzzlm, lmuyfcw, avycyh +dchts (99) -> lctdjj, oevyknd +ksfok (217) -> gfffvbp, ybvgki +hoomyh (88) -> aaqdb, ljfqvk +qijarlh (58) +tznudmk (17) +cyrrjtx (124) -> oqbdf, xwlmsqy, ulztj, rjsnth +nuqyqh (52) +oblsboq (85) +imnhql (94) +hxswghs (126) -> dwwsu, hdlqvlg, jppgd +ulztj (25) +hgwsl (50) +ksvpnt (96) -> fqlezvk, lqcar +mjpzp (10) +fsaoa (89) -> dbwmq, uzufet, arwmalf, gobrf +iftfc (159) -> thxtoc, jtzkva, tvwxmur +zjpsm (83) +vwfhi (9) +opuaau (75) -> dqash, kqzemkv +mxupea (45) +dmkyzy (15) -> ttllx, horqcc, dcumfo +sxllorg (69) -> kxvlprg, lzvniiz +txhfuoh (219) -> lwdqnj, myhch +chtlcwq (17) +hlcbqu (104) -> ccrftvw, jmlmzpz +ivmndi (94) +lficpr (62) +ortqc (99) +dvzlq (33) +acknlp (56) -> aozoac, ehuzoq +jqxnf (60) +hfftu (52) +ihzvygq (94) -> kmwbbz, orrutjs +rarkunn (73) +hitoud (5511) -> vcktg, rqbjbio, xtyzy, ssdgbnh +sdhtguj (58) -> uklsrym, mcmqliy, nnnkeh, clinrg, fwidkbp, hzmhm, xyohoxa +hrlkgen (99) +vuyzhsh (61) +nzzfer (85) -> qcgxvx, ortqc, auqoj, ilfzi +tuqmup (222) +zbznuyf (137) -> ptyxo, qwtzc, neqfzm, hawsl +qwtzc (13) +vykqcnj (71) -> jitzj, nkhadt, tcsbho, fhxpkd, fwgqj, smlfbc +mjzksjz (7) +yfdtz (36) +faixe (56) +tejnuve (209) -> jgmisxl, dhkahb +opohwq (31) +lsknlg (95) -> vwzglf, hjucki, yrkvb +fhmazv (76) +egmfbdq (25) +rxcnn (9) +tboizos (250) +glwhd (122) -> ceoav, troyu +ykehxw (19) +bruzfkf (91) +rjjlus (87) +ocnna (18) +qshbt (73) +raakduh (85) -> fuvru, vcjjo +wudjf (85) +ihwaeuw (60) +kfxoi (52) +oewzluz (39) +coopirx (251) -> exuusj, rvimq +cokzlht (29) +uacjhqx (23) +tznkwk (31) +mthhq (111) -> uevcwul, nxpexoq +uixlx (7) -> kmlwj, gaihmf +nqvxs (71) +ktjav (83) +eknui (85) +fhuiyrl (93) +fktsu (65) +vugnug (65) +ilymgq (91) +clinrg (1033) -> rsancy, jrqorlo, lvklj +bkextqn (99) +ekohgo (251) -> xxxqpkx, wkphn +alkneau (34) +mnijdlk (85) +dyxsmz (38) +mefxonk (50) +lajidkr (37) +uiuokpq (89) +oupzsh (43) -> bzmade, bamxg +cijptz (18) +khibjj (89) +yamclb (91) +okrdziq (73) +sbyxyf (8) +zknziw (18) +fobzai (75) +rjsnth (25) +iaphzk (18) +lufgosn (10) +rzkcu (34) +xlhfyw (471) -> yuswp, limljj +tcsbho (1842) -> mnmwzz, mnzbkuh, zpidc, cpqti +docln (85) +neeqb (7) +tvcod (88) +uklsrym (40) -> bbhniy, gddkqw, lhmnd, ihzvygq, nhkeb, wuxhvnx +qkkzzlm (76) -> imnhql, nbeagw +qywkuqu (20) +fvgbg (191) -> iwkntdi, jdrdxu, sqnvvbg, yfdtz +qlkslp (82) +iqxwh (62) +mdneq (623) -> uzhlers, qanbo, tedplb +msmgk (173) -> fygmpjn, exoft +euoclfs (241) -> pjzpmq, hpkpw +vlimzz (19) -> yvqtyi, gwournc, docln, oblsboq +zoqni (189) -> chlxm, yfmxvay +oignan (206) -> hdaqxlh, fgbyre +zpidc (40) -> bujroda, btklib +aazxafl (215) -> xnmvtem, oafnfo +yhubw (34) +xneoi (138) -> vwfhi, cmqwplb +vefzbc (138) -> dywqvqh, emwbbut +ruozmjk (73) +jrwfehi (75) -> kcnim, bdvtvcu, tfsoxgb, tboizos +iivncbz (73) +ccuarv (53) +lrihy (185) -> vchsdif, bgcigo, raakduh, vlbba, igyiie, zoqni +vewgrvp (73) -> dntphko, svayf, uiuokpq, popplum +iigvpqy (66) +fjduphn (91) +uttujj (11755) -> glwhd, sxfilp, wcexum +tluap (6) +exeub (71) +dzwol (61) +ilfzi (99) +cdpgoi (79) +hxckb (71) +yoxvx (85) +theau (46) +vwnjh (233) -> jqxnf, qfpwln +jbpjt (27) +zmsosb (14) -> rrflox, ovluts, rpfmi, ojvlwm +yoivja (59) +towlhi (36) +zcrjb (253) -> qhohy, uwaiki +josdslh (59) +xoziel (79) +fsuzqyz (169) -> duftj, ppqlc, kceusl +chwjiub (96) +fpbsu (89) +qyoqb (19) +dfeomzr (38) +kfhnhm (9) +oevyknd (56) +buoakk (22) +wduqgix (77) +qokscr (65) +oqbdf (25) +jjsvfy (199) -> yoivja, gdnsat +ssdgbnh (887) -> qtsjbq, plurwe, mhndszl, hlcbqu, pgskth, oignan +lrsedv (213) -> eaqjcju, cekpxgj +iwkntdi (36) +qfgzmtz (73) +rfwgtb (26) +alcvj (7) +bvdxf (30) +ofisj (88) +mpchqe (27) +pwizhzr (62) +wkcyd (75) +mxzbcqn (81) +npzdqeg (227) -> tufds, msxhvo, pcsucog +illjvf (69) +iyuuh (80) +fygmpjn (17) +dvdgowj (5) +hlcghe (91) -> khibjj, kngbqid +zvurtb (77) +ouspx (46) +dbvxai (76) +facrq (13496) -> fkbla, ffvprc, yrfqaga, msmgk, hxswghs +xbcgipi (66) +wfhyr (37) +ziyata (221) -> oqlpz, jjtrisl +muncur (77) +vlvss (183) -> odvtiti, fazqw +kvdkwy (96) +ddldgex (84) -> nqyok, wduqgix +trtgn (87) +jitzj (65) -> fvgbg, nbfqgr, zjwpbzs, lndaa, vlvss, gxjvj, zcrjb +hkhoyje (95) -> frirj, iuhlc +gtbbuvb (96) +tfsoxgb (250) +rohvy (95) +qhohy (41) +goimlra (227) -> orxoo, lfxew +hubbqbi (95) +vchuc (53) +svkdyq (9559) -> akmgfo, lhradm, jtauf, aunhcg +fazqw (76) +flomey (39) +apygt (17) +wjptb (43) +srhirm (147) -> bicsjoc, dvzlq, olykwbi +wdeuy (254) -> hubbqbi, rohvy +yeooycn (93) +qoyzgsp (28) +sqkcdf (62) +rgbvlc (49) +qinzaf (813) -> aooni, zoewj, ogzrdrk, umlkxqv +kflize (84) +isrtfc (201) -> vmutyru, ouymke +nkhadt (292) -> fppcif, vwnjh, oyvhouc, ekvall, guncf, npzdqeg +nbbyqsa (40) +ikfpktb (97) +maqgick (76) +xtwdx (156) +sbyzsq (10) +vgubuy (74) -> iljwgzf, aihow +taiho (59) +cpndnx (11) +vhtyadn (18) +aaheijb (54) +rykadr (19) +onnylx (32) +gukuqw (69) +fooyrq (15) +zqyua (52) +vsruoi (55) +ikmvhid (2745) -> hwovhvw, arsuc, yzrdupu +vztnh (18) +khaupo (32) +cpqti (142) +qtsjbq (126) -> wekya, rzkcu, alkneau +pcsucog (42) +lepja (61) +ibjvonk (10277) -> xlhfyw, svhbd, misyfn +rqbjbio (29) -> mqrroj, hjeysaa, wlujpl, vooac, rrggg, yfjenp +ceuygh (90) -> aqxsjq, qxlucvg +qzxaqvy (78) -> fwskxtt, jlgvplm +fwskxtt (84) +yrkvb (58) +thdwfw (219) -> umtrod, nhlittn +zpkbe (73) -> cwtdf, tozktyo, qcrpdy, axtqrx +hjjkx (87) +jxyoypa (9) +ilkqp (40) +akwvj (238) -> jatnl, iphgmyt, meoeea, gqrfok, ljhwzvv +lkcddrg (2238) -> lqfyzo, rixnft, hkhoyje +xprzeeb (19) +rhodopg (94) -> qfgzmtz, dqdfv +ttwfig (340) -> rykadr, ykehxw +kueyf (85) -> ulbbc, nzzfer, azxjd +zmcgfdp (136) -> tehyhc, obslyn +ffnabs (20) -> guehoas, nnldikq, ofrwmq, lrsedv, qvkotfd, shfdaba +arwmalf (143) -> vsgaam, bjabd, ycclns, kkmqko +gyjpoco (85) +drmyco (26) +arqoys (1859) -> urzul, bkvle +nscav (69) +tsrogy (69) +qhafxnl (1337) -> xbcskih, kpxqlr, algqhtz +yiusa (86) +zdbqs (43) +xzppxad (58) -> ltxkw, ollhxuy, qinzaf, wpxxh +dxyifeb (1862) -> twubx, lkcddrg, uwqgz, uvfyo +zlzers (49) +gkkgkp (358) -> wlpyulp, nakmo +abddskq (50) +tggkm (43) +dgwcz (7) +bhvmgw (29) -> qflouyn, pfphng +guehoas (283) -> qedst, cijptz, zknziw +marzlxh (51) +mizab (60) +jgkvfa (120) -> ocnna, tcdwurt +jopjvd (80) -> dnouufu, wjptb +lwdqnj (25) +xpzhy (84) +noipcz (59) +bbhniy (20) -> itngcua, mmcychg, vugnug, fktsu +jtjcj (64) +tgdzl (53) +gobrf (25) -> gtzcxq, lsdrwz +arsuc (65) -> rbcqgqv, huwsoc, bnfopv, srqntb, vxdkej, owhjmt +ogzrdrk (101) -> vztbn, wtxbqe +oxbkwyr (91) +yatfpqx (109) -> xrbjn, qywkuqu, thjulip, oiijtm +jlgvplm (84) +bcibchp (54) +glgnecl (16) +tqikxkp (222) +bhcal (7) +vmutyru (47) +kzwqzqf (46) +evhsybt (37) +gdnsat (59) +cikaze (39) +jrqorlo (229) +ovluts (52) +nbfqgr (169) -> cdpwklz, zjpsm +nbngkou (73) +wslsg (31) +aobitc (69) +htgxu (24) +wjolzt (46) +hzgig (95) -> jrvbacq, rgbvlc +ulbbc (217) -> bniti, jbepak, iynywq, xbcgipi +wkphn (7) +fkbla (207) +jqinti (52) +yhiogu (256) -> neusnw, tkpvf +ebjsluk (39) +shfdaba (76) -> wpnqet, rjjlus, pjiqvd +anpnrdt (10) +jdshuob (491) -> kywfqzv, zpkbe, cfhuce, mzmfygf +vooac (341) -> lufgosn, sbyzsq, mjpzp +frohei (59) +baiaa (15) +pyrlph (71) +cgxsmq (25) +ukvvt (39) +gaujsyk (26) -> ktaet, yipoeia, qijarlh +gnjvf (375) -> ajenoz, ripqyzr +hghnmib (47802) -> vbhnmr, vustse, lybkeg, ikmvhid, oqphsw, xzppxad, gvkcsad +yrcgsnx (270) -> qfypnb, dbvxai +kwqrbav (34) +wdvwub (57) +viqhfi (89) +akmgfo (243) -> zhvji, iphncut, oyxbblb, gaujsyk, ybftt +faecnr (80) -> dfeomzr, yoezrpw +xskehl (228) -> ubovv, omydd, tluap +pdosfg (21) -> rlbom, lbjwlov, wgqkdcr +tkiraal (8) +aimav (46) +ecimj (85) +eikmns (83) +fqlezvk (71) +qrlggma (49) +ztkgsyt (29) -> bfuywyg, uexdnv +tedplb (50) +cvrcvgp (86) -> zvurtb, dkcix +bckuyxm (11306) -> eyyzy, jrwfehi, baesyhf +ffvprc (65) -> vxajmkg, cichyqw +jjtrisl (81) +vantwg (46) +vlmcmcu (91) +qdhrchr (89) -> dhwauy, uqlso +ceoav (29) +bhrbod (50) -> oxbkwyr, erpvue, zhrnwk, mhjtjp +yxseri (24) +kzbvrxk (10) +kcnim (76) -> zjoxibi, auxqbbc +ltxkw (30) -> eerktn, nqhdt, jjyjrtr, bfchbs, redqvw, mkrzp, nymguj +rrggg (371) +uwqgz (1923) -> torxqh, zmlth, lnctft +dbwmq (117) -> bmecxwd, lcrwbqi +kasfuwe (46) +btbxk (755) -> xajjyba, kxykfr, rymkqd +njxyw (47) +fvlfq (94) +zhvji (162) -> cpazlc, mluykm +aozoac (77) +chnkkj (86) -> tfmtk, hddzn +dkcix (77) +lxcbjgy (91) +mofks (30) +yzrdupu (719) -> wajnxjj, dfvhic, dmkyzy, ziqwzzy +wxjka (47) +xitzb (52) +rvimq (7) +qddsx (30) +lvklj (97) -> ydbri, tcukgv +sjforw (208) -> alcvj, neeqb +yjvgwdl (91) +fhxpkd (261) -> kauphp, zdhvqrl, rhnkdt, nhkvp, tejnuve, olspit, srmiagk +eaqjcju (62) +ybftt (122) -> oewzluz, ebjsluk +jgmisxl (49) +hdaqxlh (11) +cjmxed (49) +aqxsjq (84) +cekpxgj (62) +tetmzw (121) -> ozatmpe, qbmtmcs +mqmbcl (96) +xtyzy (155) -> yhiogu, iphzyj, pvppi, tojyt, krxyaak, ymrogz +drwfop (48) +pgskth (86) -> hxckb, lxesg +pvgzz (72) +kunzpa (687) -> tadnt, cupsjm, hoomyh +nhkeb (252) -> caryo, bhcal, mjzksjz, ufitse +cncak (182) -> qoyzgsp, lpuass +aituccf (9) +qfpwln (60) +laxsl (29) +yzxzo (38) +lnctft (116) -> zgevpxx, scchi +lyvyhkm (8) +vcktg (1556) -> ztghd, imihjj, ksfok +dzbrgb (75) +xbcskih (85) -> fobzai, nxzkuj +jtouvtb (57) +ufitse (7) +upwlxnb (7) +jysaup (78) +ysgsry (228) -> glgnecl, xnuoujm +horqcc (73) +vfsttaj (27) +gvkcsad (5412) -> ghsjtj, dgnjf, ziyata, rajtef, kqlsniq, vqclii +lbjwlov (79) +vnhvilk (62) +dntphko (89) +syzlt (6183) -> tifgptk, iwhqlr, akwvj, kueyf +hzmhm (1087) -> rvrlma, dchts, emzrj +neusnw (47) +vfzby (50) +cecsr (59) +uwaiki (41) +msxhvo (42) +fgjwz (113) -> qwzmv, xehdglb, kgpwo +lmuyfcw (164) -> hrovawq, hacwv +zjoxibi (87) +viwns (17) +olykwbi (33) +meypo (29) +sbguah (49) -> vlfouc, lficpr +oyxbblb (92) -> towlhi, fndxl, uxjasn +bzmade (66) +lfpzff (238) -> bdinafh, kfmzbvk +epuaii (88) -> ckheb, kwqrbav +dwwsu (27) +xnukvni (207) -> htgxu, lwvnbzs +zhrnwk (91) +vfngjd (325) -> hfftu, nymhem +vztbn (87) +kxnkbs (19) -> tpipb, vuyzhsh, vapwxei, wbxdta +bmecxwd (27) +nymguj (123) -> vkpltts, mbhld +qlwxeb (52) +kfrti (10) +xcvxle (106) -> qddsx, bvdxf +wbesqn (99) +kblshw (8) +qymwy (41) +ezaypy (9) +dnouufu (43) +cyapi (227) -> rothisa, hokyk +itbsk (30) +alqim (42) +hjeysaa (251) -> mofks, itbsk, njogewi, ldfopw +ljfqvk (44) +iueejt (5) -> rgfndsx, bhrbod, puwvse +knzppj (81) -> hrlkgen, nsfsj, wbesqn +wnjwnr (197) -> hnyqq, oajawn +xtwdau (77) +dmeee (93) +qxfce (38) +pcqyagx (15) +bicsjoc (33) +eeguu (78) +wbxdta (61) +gjwaqu (35) +mzmtuw (95) +huwsoc (173) -> ouspx, wjolzt +spdhhoe (167) -> chwjiub, kvdkwy +hhmwlo (56) +icgwppo (84) diff --git a/2017/inputs/day_8.txt b/2017/inputs/day_8.txt new file mode 100644 index 0000000..7b63126 --- /dev/null +++ b/2017/inputs/day_8.txt @@ -0,0 +1,1000 @@ +ev dec -705 if cag != 2 +b dec -195 if ty >= -8 +red dec -404 if v > -7 +d inc -971 if k >= -9 +k inc 303 if k > -8 +cag inc 539 if ev > 697 +ev inc -11 if d <= -963 +alf inc -634 if xoc < -2 +eb dec 927 if b <= 201 +e dec 67 if eb >= -930 +he dec -29 if qby < 8 +cox inc 193 if b >= 188 +red dec 340 if alf >= -7 +k dec 8 if red > 57 +eb inc -606 if e <= -75 +xoc inc 337 if red == 64 +xoc inc 186 if mk == 0 +cox inc 840 if npo >= -5 +s inc -449 if anb != -3 +eb inc -233 if npo < 2 +npo inc -808 if mk <= 9 +eb dec 139 if eb > -1161 +ty inc -929 if ty > -7 +mk inc 789 if d > -977 +red dec 915 if k < 299 +anb inc 852 if mk == 789 +red dec 242 if swy == -6 +e inc -29 if cag < 546 +alf dec -219 if cag > 535 +red dec -298 if ty < -921 +tm dec 175 if obo <= 2 +alf dec 553 if eb != -1298 +alf inc -870 if s != -449 +v dec 744 if cox < 1036 +d dec -720 if he > 24 +ty inc -201 if k <= 301 +xoc inc 956 if v > -744 +s dec 539 if e >= -100 +mk dec -37 if anb != 852 +mk dec 833 if tm < -167 +ev dec -410 if ev < 686 +s dec 77 if cag != 539 +anb inc 917 if swy >= -2 +obo dec -5 if s >= -997 +qby inc -231 if tm == -175 +ev dec 378 if tm <= -167 +b dec -106 if s < -985 +s dec 301 if e < -89 +npo inc 232 if b == 301 +red dec -960 if mqk < -9 +he inc -789 if k == 300 +npo dec 826 if cox < 1033 +e inc 101 if k > 291 +v inc -898 if he > 27 +alf inc 141 if anb > 1767 +red inc -613 if e < -2 +tm inc -151 if cag >= 530 +k inc -346 if b != 305 +he dec 967 if cag <= 546 +ev dec -931 if cag < 543 +swy dec 309 if qby < -228 +d inc 437 if cox > 1030 +ty dec 586 if ev <= 1249 +alf dec 299 if e <= -2 +d inc 977 if xoc == 523 +d inc 594 if s <= -1282 +ev inc 21 if swy < -306 +qby dec -722 if cag < 543 +k inc -381 if ev < 1259 +alf inc 847 if anb > 1764 +k inc 126 if s <= -1292 +eb inc -109 if mqk > -4 +obo dec 900 if swy < -300 +obo dec 364 if mk <= -35 +swy inc -211 if eb >= -1416 +ty dec -680 if mqk <= 1 +ty dec -235 if cox > 1024 +cag dec -261 if red <= -559 +obo dec -897 if mqk == 0 +tm inc -981 if mk < -49 +ty inc -805 if eb >= -1402 +mk inc 278 if red < -552 +ev inc 63 if v > -1645 +swy dec -388 if xoc <= 530 +mqk inc 187 if obo != -357 +s inc 416 if b < 309 +qby inc 399 if mqk >= 185 +red inc -680 if mqk != 188 +he inc -981 if eb >= -1407 +d inc 225 if tm >= -327 +he dec 158 if d <= 1991 +d dec 74 if qby == 890 +k dec -930 if anb <= 1770 +s dec -546 if mqk == 179 +ty dec 733 if k >= 874 +ev dec 581 if obo == -362 +cox dec -922 if obo == -362 +obo dec 922 if e == 5 +d inc -948 if tm == -326 +cag inc 161 if mk <= 241 +eb inc -580 if e != -1 +anb inc -632 if qby != 889 +red dec -285 if mk <= 239 +qby inc 550 if eb >= -1997 +e dec 930 if k > 869 +eb inc 604 if swy > -138 +obo inc 383 if he != -1100 +s dec -89 if eb <= -1377 +qby dec -821 if ty < -1532 +ty inc 940 if qby >= 2257 +alf inc -421 if swy != -123 +qby inc 787 if b != 293 +alf inc -80 if b < 301 +b dec 205 if eb <= -1378 +qby dec 870 if obo != -892 +d inc 183 if swy == -132 +s dec -81 if mqk != 187 +swy inc 976 if d >= 1138 +red dec 281 if anb == 1138 +xoc inc 681 if d < 1141 +v dec 14 if obo > -902 +he dec -525 if xoc <= 530 +v inc -866 if red >= -955 +cag inc -835 if mk != 240 +qby inc -549 if s <= -781 +eb dec 584 if mk >= 229 +qby dec -711 if obo >= -904 +ev inc -400 if anb <= 1144 +k inc 82 if swy >= 840 +e dec -415 if mk != 229 +red dec -923 if anb > 1128 +v dec 602 if b != 86 +ty dec -699 if ev > 346 +xoc dec 549 if k > 968 +k inc 317 if qby < 2343 +npo dec 919 if d >= 1137 +e inc 421 if e > -519 +eb dec -104 if ev <= 351 +b inc 368 if qby != 2342 +mk dec -987 if ev == 357 +eb dec -509 if alf <= 236 +obo dec -380 if v != -3127 +npo dec -790 if b < 455 +xoc inc 405 if k < 1287 +obo dec -56 if b < 465 +swy dec 194 if k != 1281 +red inc -562 if tm <= -326 +swy dec 75 if e <= -86 +obo dec -4 if ev == 350 +e inc 533 if xoc < 931 +cox inc -584 if d < 1146 +swy inc 506 if eb >= -1354 +obo dec 458 if k >= 1279 +swy inc 447 if e > 447 +qby dec 847 if cox <= 1377 +xoc inc 225 if xoc < 931 +obo dec 301 if b > 462 +cag inc -740 if e > 438 +tm dec -83 if e <= 447 +tm dec -151 if cag <= -866 +npo inc 26 if s < -784 +v inc 12 if cox != 1368 +eb inc -399 if ev > 340 +eb dec 780 if d == 1143 +e dec 87 if tm == -91 +k dec -13 if anb <= 1139 +v dec 829 if swy >= 567 +k dec -229 if ev < 351 +qby inc 972 if xoc == 1143 +s inc 609 if s >= -789 +mk dec -931 if ev > 346 +mqk inc -605 if cag > -880 +v inc 302 if anb <= 1139 +mk dec 342 if v > -3647 +xoc inc -905 if k <= 1523 +qby inc -412 if qby == 1493 +v dec -548 if d > 1142 +xoc inc 311 if obo >= -771 +npo inc -955 if xoc < 551 +swy inc -885 if mk > 821 +ty dec 91 if ty >= 100 +s dec -840 if npo <= -1492 +qby inc 158 if ev > 342 +ev inc 227 if cag >= -878 +alf dec 612 if tm <= -92 +ev inc 395 if he <= -572 +s inc 570 if swy > -311 +s inc 283 if alf > -382 +xoc inc 297 if tm >= -94 +v dec 100 if d != 1153 +cag inc 928 if ty <= 19 +tm inc 829 if obo > -765 +alf inc -94 if ty >= 8 +ty inc -224 if cox <= 1367 +obo dec -352 if d > 1137 +mqk inc 223 if ev <= 580 +cag inc 55 if eb >= -2541 +red dec 969 if alf > -474 +alf inc -564 if e != 447 +qby inc -97 if obo < -400 +red dec -530 if cag > 107 +ev inc -579 if he > -574 +tm dec -788 if eb <= -2528 +alf inc -217 if v > -3191 +tm inc 635 if cox >= 1362 +tm inc -217 if mqk < -189 +cag dec -547 if v != -3191 +red dec -241 if alf > -1045 +red inc -492 if b <= 473 +he inc 46 if b > 454 +xoc inc 86 if ty > 8 +d dec -755 if qby < 1140 +mk inc -347 if obo <= -405 +v dec 870 if npo >= -1497 +npo inc 216 if red != -1287 +anb inc -574 if obo > -414 +ev inc -364 if eb == -2534 +anb dec -825 if npo < -1277 +k dec 587 if cox < 1372 +anb inc -888 if obo > -401 +swy dec -435 if npo != -1283 +e dec 551 if e != 444 +swy dec 772 if alf == -1036 +tm dec -339 if e == 444 +swy dec 259 if mk == 470 +xoc inc -224 if ev >= -359 +ty inc 265 if red >= -1279 +obo dec 449 if mqk > -202 +d inc 891 if e >= 438 +cag dec 606 if b >= 461 +mk inc -894 if v != -4064 +cag dec -128 if d != 2034 +eb dec 723 if eb <= -2528 +swy inc -12 if s < 1525 +s inc -569 if d == 2032 +npo inc 326 if alf >= -1038 +cox dec -213 if anb == 1379 +obo dec -222 if d > 2026 +ev dec 809 if anb == 1393 +s inc -637 if alf != -1037 +s dec -892 if xoc == 942 +eb inc -248 if cag != -491 +b dec 499 if qby != 1142 +b dec 543 if d <= 2033 +mk inc 345 if mk < -411 +ty dec -284 if npo != -960 +d dec -327 if eb < -3498 +cag inc -743 if mqk > -196 +cag dec 708 if ev > -374 +eb inc 935 if swy == 113 +d dec -908 if swy == 113 +npo inc -753 if swy == 113 +cag dec -227 if alf > -1045 +red dec -658 if v <= -4061 +cox inc -66 if anb < 1397 +cag dec -209 if b > 463 +cox inc -245 if alf != -1037 +alf dec -212 if s >= 2402 +d inc 590 if d >= 3273 +xoc inc -325 if xoc > 935 +red inc 935 if he >= -519 +tm dec 332 if ev >= -366 +cag inc 583 if xoc <= 615 +e inc -892 if e >= 439 +npo inc -628 if obo > -629 +red inc -819 if tm <= 1958 +qby dec -960 if ev > -372 +red dec -781 if tm < 1959 +cox inc -831 if xoc < 621 +b inc -830 if ty >= 559 +anb inc 654 if cag < -1507 +cag dec 995 if red >= -659 +npo inc 356 if b < -361 +tm dec 286 if qby > 2093 +mk dec 369 if ty <= 569 +mk dec -971 if qby != 2112 +swy inc 137 if xoc > 617 +alf dec -743 if npo > -1355 +alf inc 39 if ty < 569 +tm dec -42 if s <= 2413 +anb inc -685 if alf != -48 +ty dec 660 if anb <= 1360 +npo dec 313 if ev < -359 +cag inc -611 if obo >= -646 +tm inc 728 if v <= -4067 +swy inc -4 if cag != -3124 +npo inc 359 if xoc >= 613 +obo inc 694 if b != -358 +obo dec 439 if e >= -452 +npo dec -160 if xoc <= 626 +red inc -659 if e <= -439 +b inc -445 if obo == -382 +red dec 543 if k > 931 +s dec 274 if qby != 2093 +cag dec -338 if k <= 934 +alf dec -211 if alf == -45 +v dec -451 if tm == 1706 +obo dec -465 if v > -3606 +k inc 415 if qby > 2100 +anb dec 220 if swy == 109 +alf inc -3 if cox < 477 +d dec 164 if s > 2131 +qby dec -974 if alf >= -40 +cag dec 891 if anb < 1146 +d dec -337 if qby > 2100 +cag dec -628 if d != 3442 +k dec -648 if alf == -46 +red dec -329 if k == 1996 +e inc -891 if alf <= -38 +cox inc -626 if ty >= -99 +mqk inc -349 if mqk >= -204 +alf inc 388 if qby > 2092 +mk inc -430 if d > 3443 +eb dec 338 if alf < 352 +mk inc -215 if cox == -147 +e dec 171 if b >= -819 +alf dec -205 if d != 3433 +d inc -490 if qby == 2102 +e inc 612 if he > -528 +anb inc -811 if mqk > -543 +he inc 685 if cox >= -154 +red dec -748 if anb <= 1129 +ty dec -872 if ty >= -97 +b inc -920 if eb == -2908 +s inc -701 if mqk >= -548 +tm inc 136 if alf > 545 +he dec -100 if e != -898 +qby inc 552 if anb >= 1132 +xoc inc 700 if xoc == 617 +xoc dec 827 if obo != -385 +anb inc 738 if d != 2956 +eb inc 476 if mqk == -544 +s dec -100 if ev == -366 +obo inc -602 if e == -898 +tm inc -80 if xoc == 490 +eb inc 160 if eb == -2432 +he inc 229 if he == 159 +tm inc 453 if b > -1739 +obo dec 786 if qby < 2655 +swy inc -120 if qby != 2651 +ev dec -382 if obo != -1770 +qby dec 41 if eb < -2265 +cox inc -991 if obo > -1765 +cag inc -713 if obo > -1773 +he inc -958 if red <= -1522 +ty inc -426 if mqk != -551 +k inc 902 if ty == 349 +npo dec -550 if eb < -2274 +swy inc -30 if d < 2954 +anb dec 990 if npo < -1139 +ty dec 301 if red >= -1529 +ev inc -687 if ty > 347 +ty dec 261 if he <= -802 +b dec -313 if ev < -1043 +alf dec 231 if k != 2889 +npo inc 956 if qby >= 2618 +cag inc -39 if npo <= -1135 +he dec 117 if qby > 2605 +v inc -574 if cag > -4421 +npo inc -179 if mk <= 538 +v inc -737 if he < -910 +npo inc 722 if swy < -37 +mk inc 200 if alf != 313 +npo dec -604 if mqk == -544 +ev dec -794 if ev > -1048 +eb inc -384 if npo == 3 +he dec -10 if qby != 2614 +e dec -317 if e > -906 +e inc -662 if d >= 2946 +s inc 941 if npo != 0 +xoc inc 765 if e <= -1235 +b inc 434 if ty > 354 +e inc 513 if anb > 880 +cox inc 146 if mk > 734 +mk inc -31 if alf == 316 +qby inc 887 if mqk == -547 +obo dec -87 if mqk != -536 +he inc -230 if tm != 2217 +e dec -469 if alf < 326 +alf inc 608 if d != 2950 +mqk dec -78 if v < -4355 +b inc -865 if ty < 356 +s dec 57 if npo < 7 +npo dec -100 if cag > -4428 +cag inc -217 if red > -1522 +b dec 338 if k == 2898 +npo inc -324 if k <= 2906 +mk dec -763 if obo >= -1687 +e inc 760 if d > 2945 +e dec 984 if v == -4350 +obo inc 651 if he <= -1126 +red dec -380 if d >= 2950 +b inc 11 if k > 2888 +v dec -406 if red <= -1142 +anb dec -900 if e <= 501 +ty inc -2 if mk != 1471 +tm dec -655 if qby > 2619 +k inc 142 if mqk < -540 +ev inc -346 if xoc != 1265 +xoc dec -284 if k >= 3032 +d inc -908 if k == 3040 +e inc 36 if swy == -41 +xoc dec 372 if alf != 930 +s dec -327 if xoc != 1159 +e inc 56 if ty < 343 +v inc -445 if npo == -221 +xoc dec 265 if s >= 2746 +k dec 604 if swy >= -42 +alf inc 918 if eb > -2662 +mk inc -227 if cox != -150 +cox dec -693 if qby <= 2614 +d inc 88 if k != 2434 +tm dec -278 if k > 2428 +v dec 384 if red <= -1145 +npo inc 854 if ev != -1390 +he inc 69 if xoc >= 893 +d inc 587 if eb <= -2650 +b dec 873 if anb == 1785 +tm dec -557 if mk != 1230 +k dec -335 if k <= 2437 +d inc -215 if cag != -4424 +obo dec -754 if red == -1140 +d inc 369 if v != -4766 +tm dec -12 if red >= -1155 +anb dec -836 if xoc <= 892 +s inc -170 if cag <= -4422 +k dec -717 if mk != 1234 +npo inc -790 if k >= 2764 +obo dec -87 if red <= -1157 +v dec -894 if ev >= -1401 +cag inc -440 if swy >= -49 +e inc 31 if d > 3091 +v dec -581 if he != -1057 +anb dec 760 if k <= 2775 +swy dec 513 if v != -3295 +s inc 840 if mk > 1242 +npo dec -359 if mqk > -549 +red dec -958 if ev >= -1403 +ty dec -246 if qby != 2617 +k inc -28 if cox <= 544 +npo inc -881 if cox > 545 +ty dec -733 if ev < -1391 +e dec 750 if cag <= -4863 +cox dec -44 if alf < 1843 +mk inc 751 if ev < -1390 +he inc -968 if mk > 1980 +d dec -431 if npo != 202 +v inc 406 if xoc != 902 +tm inc 635 if mk <= 1991 +npo dec 401 if anb <= 1022 +v dec 940 if obo >= -1034 +npo dec 572 if qby < 2619 +swy inc 934 if anb != 1021 +eb inc 499 if swy == 893 +mqk inc 17 if s < 2568 +mqk dec -704 if alf != 1836 +ty inc -301 if mqk != 162 +npo dec 29 if cox >= 579 +alf inc -677 if npo > -409 +mk dec -399 if npo == -399 +cox dec 639 if e == -213 +ev inc 602 if qby < 2617 +ev dec -238 if eb != -2149 +mqk inc 26 if k > 2734 +anb dec -153 if v > -4238 +b inc -331 if cox != 584 +mk dec 411 if s > 2574 +xoc dec -631 if xoc == 902 +mqk dec 795 if d != 3083 +swy dec -911 if anb > 1184 +anb dec 368 if e >= -217 +b dec 463 if qby != 2612 +qby dec -127 if v <= -4226 +alf inc -848 if npo != -409 +obo dec -499 if s >= 2571 +swy dec 165 if v < -4225 +alf dec 71 if mqk == -609 +b dec -717 if d != 3090 +cag inc 721 if tm <= 3694 +xoc inc 304 if ty > 1033 +swy inc 728 if d < 3096 +tm inc -690 if eb >= -2163 +qby inc 979 if ty == 1025 +s dec -175 if swy >= 1449 +s dec 639 if he > -2038 +mqk dec 615 if red <= -189 +he dec 481 if cox >= 578 +anb inc -329 if xoc <= 1532 +anb inc 350 if red != -192 +obo inc 720 if s != 2108 +ev dec -316 if s > 2111 +mqk inc 322 if alf == 246 +d dec -723 if cox > 580 +b inc -301 if alf >= 254 +cox dec 847 if xoc > 1528 +v dec -298 if cox <= -254 +eb dec -842 if cag != -4874 +he inc 483 if eb != -1324 +b inc -160 if npo >= -400 +tm dec 885 if obo == 187 +anb inc -505 if tm <= 2129 +red dec 387 if e < -212 +e dec 761 if npo <= -397 +he dec 303 if tm == 2128 +s dec 308 if b < -3718 +mqk dec -207 if he > -2041 +ev inc -655 if xoc != 1533 +s inc -601 if d > 3809 +ev dec 666 if cox < -256 +ty inc 384 if he != -2041 +v inc -560 if ty >= 1403 +ty inc 446 if obo != 194 +obo inc -570 if cag != -4868 +obo inc 21 if k == 2743 +cox dec -183 if mk != 1973 +s inc -780 if eb <= -1306 +b inc -173 if tm != 2131 +b inc 489 if v > -4488 +swy inc 337 if s < 431 +ty inc 36 if alf >= 240 +xoc inc -941 if s < 427 +xoc dec -533 if xoc <= 600 +eb dec 269 if swy == 1795 +eb inc -718 if swy < 1796 +xoc dec 319 if eb <= -2039 +ev dec 855 if npo < -390 +v inc 208 if d >= 3805 +d inc -846 if tm == 2122 +red inc -636 if mk <= 1977 +d dec 695 if ev == -1764 +e dec -864 if cox == -268 +v dec -913 if d == 2270 +alf inc -364 if cox > -270 +he dec -211 if cag != -4862 +b dec 624 if b != -3887 +v dec -953 if b < -4514 +ty dec 631 if b < -4518 +e dec -496 if obo <= -367 +d dec -911 if cag >= -4872 +mk inc -549 if xoc >= 1117 +alf dec -586 if e <= -971 +cag dec -919 if k == 2743 +qby inc -803 if cag <= -3943 +k dec 18 if k > 2734 +ty dec 537 if qby > 2909 +swy dec 973 if tm >= 2122 +d dec -502 if qby == 2916 +ty inc 50 if he >= -1816 +cag dec 344 if e > -985 +cag inc -967 if anb < 311 +ev inc 193 if npo != -393 +ev inc -934 if cag >= -5265 +ev dec 416 if d == 3683 +ty inc -963 if d < 3688 +s dec -904 if s <= 424 +b dec 52 if b >= -4524 +alf inc -427 if obo <= -363 +red dec -686 if cox > -268 +b dec 551 if mqk == -695 +xoc dec -670 if v > -2428 +anb inc 310 if ty >= 401 +ev dec 768 if red < -519 +tm dec -391 if k == 2725 +b inc -624 if xoc < 1797 +s inc -962 if ty != 391 +xoc inc -482 if mqk > -703 +alf inc -110 if v < -2418 +mqk inc -812 if s < 1329 +cag dec -584 if red >= -529 +qby dec -503 if npo >= -405 +npo dec -592 if npo <= -396 +anb inc -611 if anb < 313 +anb inc -537 if red < -538 +eb inc 781 if cag < -4664 +xoc dec -241 if he >= -1821 +k inc -974 if swy >= 816 +eb dec -649 if ev > -3690 +he dec 258 if b > -5750 +cag inc -618 if tm >= 2513 +b inc -132 if npo == 190 +cox inc -187 if mk > 1427 +tm dec 244 if npo <= 198 +cag inc -21 if alf != 350 +npo inc -332 if ev >= -3696 +obo inc -144 if ev < -3698 +npo inc 652 if k >= 1744 +anb inc 682 if b > -5739 +mk dec -585 if eb > -607 +ty dec -395 if red <= -521 +d dec -118 if cox < -260 +obo dec 97 if d < 3797 +mk inc 561 if s != 1327 +mqk inc 341 if xoc < 1558 +eb dec 136 if xoc >= 1546 +eb dec -144 if b == -5744 +b dec 416 if xoc < 1560 +e inc -688 if red <= -520 +cag inc -846 if cox <= -264 +e inc 858 if mk >= 2009 +d inc 120 if mqk < -1165 +eb inc 275 if anb < -304 +d dec 426 if e <= -801 +obo inc -175 if alf == 358 +b inc 411 if v > -2433 +anb dec -285 if qby != 3420 +e inc -899 if cox != -257 +ty inc 764 if xoc >= 1552 +eb inc 157 if tm == 2273 +alf dec 416 if xoc <= 1562 +mqk inc -251 if d <= 3498 +s inc -405 if e != -1698 +he dec 280 if v < -2419 +mqk dec 783 if e == -1705 +s dec -530 if mk > 2013 +cox dec 601 if qby >= 3421 +alf dec -214 if cox <= -253 +cox inc -280 if v < -2418 +obo inc -617 if k > 1749 +tm dec 400 if v >= -2427 +obo inc -810 if swy == 820 +cag inc 245 if red < -524 +k inc 939 if obo < -1973 +xoc inc -867 if d != 3499 +ev inc 930 if ev >= -3690 +npo inc 490 if npo == 513 +obo dec -127 if tm <= 1874 +v inc -937 if cox < -539 +cox inc 806 if eb < -315 +tm inc 868 if b == -5749 +d inc 370 if cox != 264 +mk dec 735 if d >= 3488 +v dec 651 if tm >= 2736 +d dec 751 if d == 3495 +eb inc 73 if eb == -320 +anb inc 946 if mqk >= -2202 +k inc -879 if tm != 2731 +cag dec 329 if cag >= -5075 +v dec 110 if npo <= 998 +cox inc -324 if v != -4012 +s dec -43 if xoc <= 688 +xoc inc 154 if ty <= 1552 +npo dec 126 if e == -1705 +mqk inc 631 if qby < 3428 +obo dec 875 if k < 882 +eb inc -159 if d >= 2737 +ty inc 158 if mk < 1266 +cox inc -726 if cox != -65 +red inc 699 if he <= -2352 +anb dec 348 if he == -2353 +mqk dec -25 if cox <= -792 +he inc -72 if ty == 1550 +tm dec -396 if obo >= -2712 +mqk inc -730 if alf >= 153 +ty inc 950 if b <= -5741 +qby inc 711 if b <= -5747 +he inc 990 if ty == 2500 +eb inc 691 if cag <= -5394 +v dec 315 if v >= -4001 +cag inc 831 if k == 872 +cag dec -285 if s != 974 +tm inc 500 if k >= 865 +ty inc -407 if ev >= -2761 +ev dec -960 if v >= -4019 +anb dec 698 if cox < -781 +swy dec 265 if cox <= -783 +e dec -962 if anb < 237 +he dec -152 if swy != 555 +npo dec -416 if alf < 159 +red dec 450 if qby > 4127 +cag inc 253 if s <= 964 +cox dec -969 if tm <= 3634 +e dec 442 if qby < 4135 +mk dec 890 if qby > 4128 +cag dec -934 if ty != 2085 +cox dec 905 if k != 876 +red inc 595 if k <= 862 +b inc 105 if npo > 1286 +obo dec 502 if mk == 394 +ty dec 533 if obo != -2718 +ev inc -6 if mk < 386 +npo inc -144 if d < 2746 +e inc -232 if ev >= -1813 +alf inc -78 if ty > 1553 +eb inc -637 if ev != -1796 +tm dec 132 if e != -1425 +swy inc 667 if alf == 78 +red dec -166 if mk <= 387 +swy dec -173 if v >= -4014 +qby inc 788 if qby > 4121 +ty dec 172 if qby <= 4919 +red dec 447 if tm == 3501 +obo dec 366 if alf == 78 +he dec -842 if mqk != -2305 +xoc inc -10 if d >= 2736 +ev inc 517 if cox != -726 +mqk dec 865 if npo != 1151 +obo inc 29 if red <= -552 +qby inc -337 if b == -5644 +cag dec -970 if mqk != -3172 +e dec 343 if xoc != 827 +d dec -890 if v == -4017 +v dec 793 if anb > 220 +cox dec -442 if he == -599 +eb dec -759 if anb > 225 +obo dec 45 if k == 872 +obo dec -534 if e > -1764 +cag inc 344 if npo >= 1149 +eb inc -458 if e <= -1764 +obo dec 55 if mqk > -3167 +s dec -487 if v > -4813 +xoc dec -51 if d >= 2744 +ty dec 568 if ty >= 1387 +cag inc -698 if cox <= -276 +cag dec 162 if mqk > -3170 +k inc 563 if qby > 4579 +alf inc -784 if tm >= 3498 +mqk dec 520 if obo > -2624 +npo inc -780 if qby > 4576 +alf dec 152 if he >= -602 +v inc -614 if eb <= 415 +he dec 659 if k < 1445 +ev inc -49 if d >= 2740 +e dec 302 if v >= -5424 +ty dec -877 if alf < -867 +qby inc 368 if swy != 1394 +anb inc 732 if swy < 1396 +mk inc 61 if ev > -1344 +b inc -66 if cox == -280 +npo inc 11 if swy <= 1397 +swy inc 292 if alf >= -852 +red inc -606 if mqk == -3684 +e dec -460 if cox > -272 +s dec -469 if cag > -2898 +tm dec -717 if obo > -2618 +xoc dec -796 if cag != -2893 +ev inc -145 if tm < 4222 +e dec 892 if red == -1167 +red inc -403 if red == -1164 +tm dec 519 if npo != 389 +cag dec -107 if cag <= -2900 +ev inc -385 if d > 2743 +qby inc -444 if alf <= -857 +ev inc -201 if swy != 1398 +npo dec -851 if s >= 1922 +s inc 975 if s <= 1923 +alf inc -906 if v != -5413 +obo dec 870 if ty >= 815 +obo inc -26 if anb == 959 +e dec -65 if e <= -2951 +ty dec -835 if anb == 958 +anb dec -49 if swy > 1394 +mk inc -253 if mqk <= -3680 +e dec -862 if b != -5708 +qby dec -293 if s == 2896 +s inc -845 if cox != -271 +xoc inc 509 if npo >= 387 +obo dec -758 if mqk >= -3675 +v inc 370 if b < -5703 +cox dec -986 if red >= -1172 +b inc -682 if d >= 2739 +k dec 568 if v >= -5055 +mk inc 451 if alf == -1764 +ty inc -56 if mk <= 645 +eb dec 173 if s <= 2051 +s inc 836 if ty != 764 +alf dec 345 if cag <= -2887 +cox dec 206 if k != 867 +eb inc 44 if s > 2053 +d dec -294 if cag <= -2891 +he dec 904 if swy >= 1386 +ty dec 499 if swy < 1399 +e dec 891 if tm > 3698 +b dec -732 if v < -5057 +qby inc 722 if red != -1168 +e inc -609 if npo != 379 +b inc 741 if e < -3525 +b inc -833 if tm >= 3701 +red inc 282 if ev > -2072 +obo dec 441 if b < -5647 +xoc dec -612 if anb != 1005 +s dec 67 if mk > 647 +cox dec -341 if red > -879 +v inc 316 if qby <= 5519 +mk inc -251 if ty == 271 +ty dec 587 if b <= -5658 +anb dec 204 if d < 3044 +he dec -358 if qby < 5521 +s dec -594 if obo < -3946 +xoc dec -802 if d > 3029 +alf dec -536 if alf <= -2105 +tm dec 209 if cox <= 711 +s inc -142 if anb > 809 +s inc -571 if mqk >= -3676 +npo inc 607 if alf == -1563 +swy inc -438 if swy >= 1388 +b inc 325 if xoc != 3092 +k dec 338 if s <= 2650 +cag dec -748 if he == -1804 +npo inc -186 if npo <= 382 +cag inc -920 if tm != 3483 +swy dec 288 if mk >= 652 +ty dec 362 if mqk != -3685 +alf inc 291 if anb == 811 +mqk inc 203 if red == -890 +swy inc 712 if eb >= 231 +ty dec 327 if v > -5052 +npo inc -453 if mqk == -3684 +cox inc 747 if mqk < -3685 +qby dec 844 if cox >= 698 +cag inc 785 if swy != 1659 +red dec -820 if xoc > 3086 +anb inc -2 if cox < 709 +cox inc 91 if cag <= -2280 +cox inc 988 if mk <= 643 +ev inc 895 if ty != -433 +red dec -411 if npo == -259 +npo dec 831 if npo > -261 +k dec 799 if mk == 643 +qby inc 373 if v != -5054 +e inc 949 if swy > 1668 +qby inc 278 if d > 3037 +eb inc -839 if obo != -3946 +mk dec 758 if anb <= 800 +npo inc -662 if s != 2642 +e inc -807 if e < -2575 +cag inc 755 if swy <= 1669 +e dec -532 if swy > 1662 +alf dec -4 if eb <= -596 +swy dec -552 if ev <= -1170 +d dec -857 if cox != 1700 +anb dec -31 if anb > 798 +eb dec -482 if npo < -1759 +ty inc 820 if d == 3897 +xoc inc -846 if v >= -5054 +alf dec 312 if d != 3895 +obo dec -531 if npo >= -1752 +b dec 722 if ev > -1177 +d inc 912 if ev == -1173 +e inc -497 if cag <= -1514 +b dec 551 if eb <= -599 +mqk dec -130 if alf >= -1576 +obo dec 426 if s >= 2649 +mqk inc 672 if cox >= 1698 +red inc -879 if alf <= -1568 +he dec -503 if cox != 1687 +tm dec 117 if ev != -1173 +he dec 237 if mk < 645 +qby inc 189 if eb != -601 +k inc 820 if k < -279 +mqk inc -594 if obo <= -3421 +k dec 375 if v > -5041 +cag dec 298 if d != 4807 +b inc 985 if ev != -1163 +tm inc -697 if cox >= 1687 +v dec -940 if swy >= 2212 +k inc -260 if d >= 4806 +ty dec 73 if k < -526 +swy inc -530 if s <= 2654 +mqk dec 636 if swy >= 1686 +d inc 32 if qby <= 5516 +v inc -809 if v <= -4103 +e dec 380 if k != -540 +ev inc -651 if b == -5939 +qby inc 352 if alf >= -1576 +v inc -256 if obo > -3416 +mqk dec 28 if red <= -527 +alf inc 395 if npo > -1762 +ev dec 317 if d < 4837 +cag inc 74 if red >= -528 +mk dec -575 if anb == 833 +cag dec 744 if obo == -3421 +mk dec -455 if qby == 5868 +k inc 350 if cag <= -2266 +d inc 730 if npo <= -1749 +ty dec 180 if mk != 1673 +xoc inc 364 if cox == 1694 +anb inc 937 if cox == 1694 +s dec 459 if tm >= 2785 +cox inc -594 if cag != -2271 +cox dec 874 if cox > 1102 +xoc dec 289 if alf > -1178 +e inc -178 if obo < -3413 +red dec -965 if obo >= -3416 +npo dec -47 if ty == -497 +alf inc -264 if npo < -1697 +v inc -518 if alf == -1429 +red dec -264 if swy == 1697 +k inc 540 if obo > -3415 +ev dec 208 if tm != 2799 +npo dec -967 if tm >= 2788 +xoc inc 106 if swy == 1691 +eb dec -276 if s >= 2185 +b inc -151 if mqk == -4812 +he dec 120 if he <= -1534 +e inc -236 if cox >= 1091 +tm dec -25 if alf == -1436 +xoc inc 618 if s == 2186 +b dec 269 if qby != 5876 +cag inc -911 if cag != -2267 +mqk inc -68 if he == -1658 +alf inc -267 if ev > -2035 +cag dec -228 if npo < -733 +k inc -527 if cag > -2043 +qby inc 341 if red == -533 +xoc dec 539 if mqk >= -4879 +d dec 884 if ev == -2032 +mk dec -837 if ty == -497 +tm inc -879 if k == -707 +k dec -32 if tm > 1907 +e dec 771 if ev > -2026 +qby inc -732 if s <= 2192 +ev dec 629 if swy < 1700 +obo dec -799 if e > -4138 +e dec -954 if k >= -683 +ev inc 177 if eb == -329 +d inc -151 if cag < -2032 +b dec 967 if alf > -1711 +e dec 836 if b == -7326 +he dec -543 if eb > -337 +d inc 478 if alf == -1705 +mqk dec 251 if xoc < 3047 +v inc 235 if anb == 1770 +xoc inc 94 if mqk > -5134 +swy dec -106 if s > 2176 +cox inc 591 if xoc != 3138 +eb dec -594 if eb == -329 +he inc -389 if qby == 5469 +swy dec 680 if ty != -487 +alf inc 713 if ev < -2483 +mqk dec 533 if b != -7332 +mk dec -282 if tm <= 1920 +d dec -878 if tm >= 1913 +ev inc -821 if b > -7327 +s dec -229 if qby > 5475 +tm dec -671 if swy > 1115 +mk dec 703 if eb > 262 +cag inc 96 if v == -4682 +alf inc -771 if mqk != -5672 +eb inc 140 if b > -7322 +swy inc -493 if eb != 270 +he inc 826 if eb == 273 +v inc 82 if s <= 2408 +anb inc -898 if tm <= 2585 +mk dec 735 if red <= -531 +obo inc -704 if eb >= 262 +cag dec -145 if tm == 2585 +k dec -952 if swy > 620 +mqk inc 818 if eb == 265 +he inc 229 if b > -7325 +v dec -717 if npo != -746 +npo inc -329 if d == 5890 +xoc inc 820 if v > -3957 +ev inc -751 if alf != -1768 +he inc -105 if npo == -1066 +tm inc -86 if swy <= 627 +npo inc 83 if qby < 5486 +npo inc 829 if mk != 1347 +swy dec -554 if tm >= 2504 +anb inc 836 if red <= -524 +npo dec -878 if b > -7328 +cag inc -276 if alf != -1763 +red inc 215 if qby >= 5469 +eb inc -509 if d >= 5884 +xoc dec -707 if he >= -1119 +s dec 42 if cag > -1801 +s dec 63 if obo >= -4125 +mk dec 358 if cag <= -1793 +eb inc 95 if cag <= -1793 +eb dec -637 if b >= -7323 +ty inc -617 if xoc != 3854 +mqk dec 510 if ty < -1112 +he inc -285 if tm != 2499 +ev inc -547 if qby < 5487 +mk dec -915 if npo < 730 +eb inc -953 if e > -4036 +obo dec 412 if he >= -1108 +npo inc -925 if d < 5888 +ev inc 930 if cag < -1792 +v inc 658 if npo <= 726 +ev inc 892 if mk <= 1918 +ev inc 756 if b == -7326 +qby inc -574 if s > 2307 +npo inc -638 if red >= -326 +tm dec 248 if mk < 1913 +cox inc 865 if s < 2317 +cox dec -950 if d <= 5893 +mk dec -632 if he <= -1108 +v inc 176 if d <= 5893 +mk inc -805 if ty != -1120 +ev dec 973 if npo < 89 +swy dec -601 if s < 2308 +e dec -146 if cox < 3509 +mqk inc 321 if cag > -1803 +xoc inc -534 if alf >= -1764 +d dec 747 if ev >= -3004 +npo inc -826 if obo != -4120 +xoc inc -343 if ev < -2994 +b dec 415 if anb <= 1708 +b dec 323 if xoc > 2976 +b inc 697 if ty <= -1118 diff --git a/2017/inputs/day_9.txt b/2017/inputs/day_9.txt new file mode 100644 index 0000000..eb4d605 --- /dev/null +++ b/2017/inputs/day_9.txt @@ -0,0 +1 @@ +{{{{{<!!!>!>'!!!>!!!!!!!>u!!!!!>},<'>,<!>e{o!!!>!'>}},{{{<!!u<>},<!!!!!>!'!!a}!!!>,<!>!!!!!i!!,e!>,<i{o!>},<!!>}},{{},{{<e},!>},<!{"!!'e'>},<auu<oa{!!!>!i>},{<a!!,'<!>>,{<a}!!!>a>}}},{{{{<!!'!>,u!!,}!!!>!!"'!!!>,i!!e>},<!!}<!>},<!!!!'i!!!>ii{!>},<!>,<!!"!>">}},{<!!ua<!>},<{!!!>!>},<!<e''!!!>ou!!!!!>!"!!!!!!!>!!>,{<!>},<u!!a!>,<!><"ui!!,u'!>,<!!!>!!o!!a>}},{{<"!!<<!>,<!>},<o{<e!!!>!!"<!>},<o>}}}}},{{{{{{{{{<!>!>,<,>},{<!>,<,}!>},<!a"!!!>},<,!!!>,<!!!>!!!>'>}},{{<{}!!e!!!!>},{<e!!!><!!!!'!>,<ea!!u'i,e{!i>,<""a!!!>},<o>}},{<!>,<!u<!!!!au!!!>!eia'!>},<!>,<!<>,{}}},{<,oo>,{{<!>},<ei,{<oeo,!!'a!!!>!>},<''>,{<{e!!!>!!!>}>}},{{}}}},{{<i!!'}u!>>}}},{{{{<!>,<oe}'u<!>,<e"e!a>}},{{}},{{{{<!!!!!>o!!!>!!"o!!!>>}},{<'>}},{<e>}}},{{<!>,<!!o<<!>i>}},{}}},{{{<a!>!>},<!!!!{!a,!!!>{!"i!}oie>},{<e!!!!!>,<,">}}},{{{},{{{{{{<{uu{'!!>},{<>,<!aeoae>}},{{{<!!!>,<!<<!>,<!!!!i<!!!ue!>,<ui}o!!e>}},<!>,<!!e"i!!'{"'>}},{}}},<'i!!ueiu,!>},<!>},<!>!!<"}!!!>,<!>},<>}}}},{{{{<,!>},<',!!',ei!>!>},<!}!!!>i!!}ee,>,{{}}},{{{<'a'!!e!"i!>o!!!>!!!>!!!>{!!!>,<,>},<ei!<!!<!{e{ua>},{<!!!>,<{!!!!!>!!,!!!>>,{<,!!>}},{<!>,<!>!>}e!>},<!!!>}{'!!!>o>}},{}},{{{<!!!uu!!!!!!!i<>,{<,}"!>!!!>}o!>,<>}}},{{{{{<!>,<u!oo!>,<!!}a<>},{<!!!'!>o>}},<o!>,<!<!>,<<ii>}},{},{{<<!>,<>},{<i!>"o!!aue,>,<i!>},<!>},<<!!e!!i>}}},{<!>},<!!{"!>,<!o!}!>},<o,o'!>!!a,e!!!!!>,<>,{<u"!!!>!>},<!!>}}}},{{{{{<!>},<!!!>!>,<o>,{<!!!!!>!!!!o!>},<!>u!>,<!!!>i!o!>!e<!!!>''!>!>i>,{{<,u'!>i"o!!"}>}}}}},{<!!!!'}{>}},{<!>"}{!>},<!>},<i<!!!>,<i<>,<"!>,<"u>},{{}}},{{{{{<!!'e!!!!!>>,<!!a{o!>u,,o}"{>},{<!>,<<,!!!>,!>o!,!>,<!!!!'>}}},{{{<uo!!!>!>},<!>,<e>,{}},{<!!'a",!}!!!>!!i>,{{},{<!!!!!e!!"e!>},<'{<!!!>},<o!!u!!!!!>{{!>,<>}}}},{{<,<!,!!">},{{{}},<!"o<o!!}!>},<!>,<{!!!!!>"o!!<,e!o!!!!!>},<!>},<>},{<i!>},<>}},{{<'!>!>!>,<>},<"io!!!''!!!>!!o!!o!!!>,<<i<i!!!>!>,<>}},{}},{{{<'i!!!'}!!!>!>!!u!!!u!>oo!>},<>},{<!!,i!>,<!!a!>!>,<u!>},<ae>}}}},{{<{i!!iu!,!!'!!!!{"!!!>>,{<!a'>}},{{<",!>a{a!!{i!>,<!>},<}u!>,<!>!!oii>},{{<'u!!"!!!>}a!!e!aa!>,<i!!!>!!!>,<<>},<!>},<"}"!!!>i!>,<>}},{{<!!u!a',"{>,{<'}"!!!o!>},<!!'!!<a,,"!!,uo>}},{<e!>,<e{!!,}<!!<!!eu<<uui>,{<{!>,<"!>,<,!!,!!,e!!{{a,!!!!!>},<<a>}}}},{{<}!>'!!{,<!}!!"!!e!!u"e,!!i>,<!!!>e!>,<!>},<!!!!!>>},{{{{{{<!!""!!!a!u>}}},{}},{{<eio>}}}}}}},{{{{},<!!'<!!!>},<u!>!!!!i}e!!},!>,<{!>,<!!!>>},{<'!'''!>o"},!!e{!"o!>,<u!!!>{!>u>,{}}},{{{<!>,<u"o"{!!!>!>!!o!!}iou>}},{{{},<io<!!'"!>,<!>,<!!!>a<>},{<!>,<a!>},<<o!!!>{i!!o>,<!ao!>,<!!"!!u{!!{!!!!<!!e<!!a}{u}{!!!!a>}}}}},{{{{<!!!><!>},<!>},<a!"!>,<,!!!!!!,!!!>,<a!!e>}},{{<!!o<!u!!ee{>},{<!!!><<o<"e>,{<!>},<{!,!!u!!!!!!!!!>},<!!!>,!!!>i!!{<!>,<!!>}}},{<!!!!!>o!>'<!{<{!!{!!>,{<"!>!>!>},<!!!><'{o{e!>,<,a}!!i>}}},{{},{},{<!!!!a!>},<!!!}!>,<!!!>e!!!!!!!!e}!!!!a!!'}">}},{{{{<!>},<i!!!>!>},<uu<o{io>},<e<!!!>!!!>i}!>,<<>},{},{{{},{<i"!!a!!i!!!!}!>},<!}{<!'o!uu,>}},{<u!!eo!!{eo!>,<'!!!>{!!>}}},{{},{<!!!>'""!o!>,<>,<i<!>!!!>ue!!!>i{'!u<<!!!>,!,>},{{<e>}}},{{{},<!>,<!!!>,i}},!>,<!!e!!>},{{<!!!!}e!!i!'"!iu!>},<!!{!!u>},<u!>>}}},{{<"}<!!!>},<ou!o}!>,<>,<!!!>'!!!'u!!!!!u!!}>},{{<!!!>!>},<}>},<!!<!"!,'u!!!>!!,a','>},{{<u>,{}}}}},{{{{{{}}},{{{{{<aa,,!>!>,<>}},{{<oo>}}},{<}!>,<,{i!!}!>},<!!!>>},{{{{<a!!!>,<!'<!>"!!!>u<i!>},<a}'}!<ie>,{<!>,<o!!!!!>i"a}!!}a!>i<!>},<!!!>!!a!!!>>}}},{{},{}},{{{{<!>,<"u<!!}ui!!e<!a}u!>},<!!",>}},{}},{{{<">,<!>},<!!!>!!u>},{<!>,<{>,{{<"ie!}!>a!e>,{}}}},{<}i''ua{!>},<>}},{{},{<!>},<!>!>},<o},!!!>!>},<<!>,<u{,!>},<,a,>}}}}},{{},{{<,"u{>},{}}}}},{{<,!!i!!i!!!!"a"!!!>!>,<>,<e,a,}!>,<<!!!<>}},{<!!!!!>!!ou>,<<!>},<}u!!!!!>{!!,!>,<i!>,<>}},{{{<a!>{!>},<!>">},<a!o!!!>!i"!><!>,<"i}!>!>!>a>}}},{{{{<a>,<!!!>!>e!!>},{<!!a!!>},{{{},{<i>}},{}}},{{{<!>},<>,<"'<<!,">}},{{<e!!""!e!>"iaa,a>}}},{{{}},{{}},{}}},{{{},{<!i>}},{{}},{{{{<<!>},<{a!!!>!!!>}ua!!!!!>a>},{<ea!!{i!!,!!a"}!!}{u'!>ae!!!>'>}},{<>}},{{<!>},<!',!<<,!>,<>,<{,"ea>}},{<u,o!!u>,{{},<}!!{!>},<i!!!"<!!}!>},<ieo!>!>,<{!>},<!{!<!>,<!!u>}}}},{{<!!"',u"}u!>,<>}},{{{<u!>,<!a!!o>},{<!>},<!>{!>'!!u!!!!'!>,<!!<!>,<!!!>},<},!!!!'>}},{},{{{{<<ou!!e!>},<i>},{<}{!>},<!>,<!>"''!!!>a<!!!>o!!!>ue>,<!<,'!>,<<!>,<o}!!!>,<!!!>}o!!ea}>}},{{<!>eo,a!>!>},<<a!'!>},<"!u!{i!!!!e!>,<,!!u>},<{}>}}}}}},{{{}}}},{{{<,au'!>},<oo!>,<!i},}"!>},<>,<i!!!!!>},<{!!!>!>!!o'"!>!,"}!">}},{{<!!'ia!!o{e}'!>!>!!!>",!!!!!!!!!!!<!>},<>,{<!!""}!'<"{!!!>>}},{{{}}},{{<!!!>i!!!>!>},<!!!!!>!>e!!!>,<!>},<!!}eei<i!!!!uu>},{}}},{{<>},{{<!i<!!a}u!!!>"!>,<'!!!>,!>},<<!>},<ui!>,<>},<<!>o<"!!!!e}}!!!!}!!!>!!">},{{<,<!!!>e>,<!e!i!>i{<!}!>},<}!!!>>},{{<"e""!}u"!!!>!>,<!!">},{<!!!>!>},<oo!!!>'!!e!!!>!>,<!!!>,<{iau!>},<eo'>,<!>{u{e!!"}u!!<!'o>}},{}}}},{{{{{<!o!>},<>,{<o{ee!>}"!!!>},<!!o!>!!!!!>!!!>},<!>!>,<oa>}}}},{{{{<{i!!uu',",u>},<a!>,<"!!,i,!!a!>!!o!>,<!a!!e,!>},<>},<,o<!!!>!!!>o!>o>},{},{<'u!>,<!!!!>,{<i!!!>!>},<!!i!!""{!!e}u!>},<i}!!'e!!!>{'>}}}},{{{<e!>},<,!>>,{<""a'oa<!a}!!!>!>,<>,{<!>},<>}}},{<ou!!!>,!!!>,<>}},{{{<e{!!{!!!>!!!>a!!!o!!!>!!'e!>,<}o{!>},<!!">,<,'>},<!!!,!}i!>oa!>,<i"<!!<',!o>},{<i!>},<>}},{}},{{{{<,{!!o!>i>}},{<oe!>,<,"o!>},<a>}},{<i'!',!>,'>,<o<a!>},<<!>},<!!!>"!!!!o<a>},{}}}},{{{{{<a!iaou>},<!!!!!!!>ua,!>o"}e!>},<e,>},{{<,!!!>!!!><o!>,<!>,<<!>},<!>{a{i!>},<u>}}},{{{<>,{<!>,<u'i!o!>},<>}},{{}}},{{{<>}},{{<'!>,<!>},<",!!o}}{!>},<oo!!!>>},{{{{<'}!!!>,{a>},{}},{<!!!>o'!u"!!!>,<!!!!!>!a!!!>>}},{{<'!!!>,<'"}>}},{}},{{<!!!>e,o<uao>,{<<">}},{},{{{},{{<{e!!!>{!!!>},<"!"!!!>!>},<>},{<o'!!!>{>}}},{{{<'!>},<,!!e>}}}}}},{{<aioa!>{{!>,<",!>,<!!o!!a>,{{<}!>,<<!!!!!>!>},<,'{,}!>{uiu,!!i">},<!!!>u>}},{{<!!!>!!!!!!!!!>ae}'"!ua<i,!!!>,<oe!!!>>},<}!>},<!!!>}}ui!}u>},{{},{}}}},{{},{<!!!>,<!!!>o!!!!o'!!!!!>{u!>,<!>},<'i,!!}<!!,>}}},{{{<u'a,!!!>i>}},{{{{{<!!!>}e,""!{!!!!""!>!!!>ea>}}},<!!!!",'!!!>,<!!!>!!!>!<!!!>,<}>},{{<'!!!'!>ee!>,<>,<!!}!'>},<""!!!>},<i!o<!>,<eie!!",!>e>}},{<!!!>},<i!!!>'"!!!>!!<!>},<a!!,!>},<>}}},{{{{{<!>},<u!>,<!>,<!!{'!>},<!>},<<<>}},{<a!!!!!!!>!>},<<!o<"u<a'">,<!!!>,<'<!>},<!!!e!>},<!!!>oe,!!<>}},{{{{<u''!a",<io!>,<!>'a!!!>,<!!{"!!u'>},{<'!>},<!>,<!!a!>!>},<a!a!!,>}}},{{<!>},<oa>,{{{<!>},<!!o,>}},<i}u!>},<a!>},<<<!}!!!>!"e<!!!>!>},<}i>}}},{<{>,{<!>},<!>,<}{a!>,<u!>},<e!o>,{<!{e!!!>!>,<e!,!!o',>}}}},{{<'!<<i,a!!!!!o>},{{<<"}'!>},<<ao>},{<!!o!<!!!>>}},{{{},{{<!aoa{!>,<i!!e!{!!!!e!'ao!!!>,<}!>!!!>e!!{>}}},{},{{<i!>,<!>},<!>},<!>iaeo>},{{{{<!!u}!!!!,!!!!"uo!>,<<'o!>,<!>},<'i!!!>},<">},{<ii>}},<,>},{{<!>},<!>},<>,{<u>}},{<!>},<!!!!!!'"!!!>!>},<{!!!>i!>ao!>i>}},{{}}},{<i!!'!!!>e<{o"!!!!!>'>,{}}}}},{{{{<ou!{"!>},<!>},<>},<!!!>iauiui!>},<>},{<!!}e}e'!>,<!!!>>}}}}},{{{},{<!!!>}eoei!!!>u!>},<ie!!!>">,{{{<e!o!>},<}!>},<!>!!ie!,!!!i!oi!!!>},<!!!>>}}}}},{{<}!!e!iieu!!'>},{{<!>,<!!!!!>>,<}o!!!>>}},{{<!>!!u!!!>>}}},{{<!>},<<!>},<},,!!!<'u,!!o!!i<u{">,{<!>,<}!>,<!>!>,<!!!!!>!!!>!!!!}u"}i>}},{{{{<{e!>,<e{'i!oiu>},{{{{<>},{<"e!>},<ie">}}},<uu'<{<!>,<,}!!!>!!!!!>,<!!'o!!u'{>}}},{},{{},{<!!,'}!>!!!!!!!>,o!<!!!>'!>,<>,<o}!>!>,<{!!e!!,!>!!e!>,<!>i!!<{>},{}}}},{{{}},{{{<!!eu!!{o!!!>!>!!!!!!"!!!!>}},{},{<!!!>!!!!!>'oaii!!!>e!>,<!!!!!!!!!>!!!>o!>},<!!!>a>,<!!!>'!!i}u'{e!'!>e!>'!}!!>}},{{<!!!>!>},<o!!!}!!!>}'!!!>>,{}}}}}},{{{{{},{{<}u!!!!i<e!!a,i>}}}},{{<!!<}{<<u}u!>{ioe!!>,<''!!'e}!>>},{<u}eai>}},{{<'!,o>},{{}}},{{}}},{{{{{},<!!<u!!{o!}!!!>"<!>,<!,>},{{{},{}},{{<i,!>!>,<"<!}'!>,<!{>},{<!!!>}a!>ae!!!>o!!u!!"e!!<'o{>,<u<!{!>},<{>}},{{{<{}eeoua!!!>},<!!o"'{{>}},{<u!!!>!!}!!!!!>!u>},{{{<!!!>!>,<'a!>}!>!!<,u"!>!,{e<>},{{<!!eu!e!aa"'o'"!>u"'<!>>,<!>},<!!>}}},{<,eo'}o!'{>,<ia,!>i!!a"!!!>!>},<}!a!!!>!!!!!>,<ee>}}}}},{{{<!>u!!o'!!}!!!!!>!!!>>},<e<!>},<u!!>},{{<,!>!i!!<!>,<!>},<!>!>,<!!!!ao{<ae,,!>},<>,<<"e!>!>!>,<u!!!!u!!!!!>,o!>,<o!!!!!>},<a>},{{}}},{}}},{{{{},{},{<"!"<"!,!!!!!>eau!>,<,>}}}},{{{{{{}},<o<i!!!>,!>,<a,!!!>!!!>!!!>!<<<>},{<a{ue>,{<a!>!>"i!o,!!{!>},<a!!!!>}},{<"ia,i>,<'!>ioi!>},<>}},{{{<>},<!!<,e'au!!!!'>},{},{{<i',e!<!>,<'u,>}}}},{{{<o'i'!!<{!>,<a!!o!!e!!,!u!!o>},<,!>,<<o!>,i!>>},{{{<},}!!",!>!!!><>}}},{{},{{{<!!!'',u'a!<a!!!>},<ou!!!>!!a>},{{},{}}},<}a!!!,'a',!>u>},{{<!u!!!>ia{!!o!!!>},<!>,<!!<!>},<!!!>"!>,<!!!!}i>},{<!>,<!>!!,!>,!>>,{<}i>}},{{},{{<''!!e<!>},<a!!!>e{!e>}}}}}},{{{{{<"u!>!!!!>,<a!!o!>},<}!>},<!>i!}'>}}},{{{{{{<,,!eaa!u!!oie!<,!!!>!>},<!>,<!>{u{!!i>},{<"<i,!a"!!eo>,{}}},{{},{<!!!!e!>},<'!!!!,!!!>!!",>}}},{}}}},{{{<i{}'>},{<{!!!>,,!!e!>,<!!!!!>a"!u!!!!e!>,<{!!!!!',<>}},{{<!!u!!,!<}}<,<>},{<"!,!>},<{a!>},<}}>}},{{<<!!!>}!!"!>,<}!!i""'!!!>{>,<!!!>},<!>,<{!u!!'<io!o{>},{{{{{}},{<!!}!>!'u>,{<'u!!!>,<!eo<!>,<!!!>{>}}},{{<a{o!!!>"!!!>'}e!>,<}>},<!>,<}{!!!>!!!!"!"!>!!!!,}<<>}}}}}}},{{{},{{{{<,!!!>,!>},<!>,<!>},<>}}},{<!>},<>}},{}},{},{},{{},{{<u!>},<ieo!{!!<'"!u<!!!>!!!>,>,{}},{},{{{<o>},<,>},{<<i!a{{{<<!!!>!!!!o>,{<!!{<a!!!>u!>},<,!!!!oo!!!>!!u"!>}!>,<>}},{}}},{}}}},{{{{{{<<!!!!!>i!>!oi}oeuu>},{{<,{!>!>!!!>!!!>},<!!!>!!!>!!!>!!,'!},o!}>}}},{{<!>a!!iu{!e>},{{{<{!!{!!o!,!!!>>},{<!>},<!>},<"oi!"!!!>!>},<>}},{<!>},<i!!i}>},{<ue'!!a"uu{!>,<!>},<uuaa{!"!!!>>,<ee>}},{{},{{{},{}},{{<a!!!>!!!!!!{!"{e}e!!,!>ae!!'},!>},<!!!!o!>},<>}}}}},{{<!!!>},<>},{<u!!!>!><,!!!>},<!!!!<>}}},{{<{<e!<,!>},<'i!"{!>},<!>,<!>,<ie}>,<{,!{},!>e!!!!!!!>!","ua!}!!<'!!u'>},{{{{<!!!>!>,<!!e'u"'<"!"',,i!!i}<a>},<aoie}!>},<'}o,<>},{<'!a!!{"u!e!><i!!'!!"o!>,<>}},{<!>!!i!{{o!!!!!>,<!{!!i<e!!{">,<e!o'u,!!!!uu!!!}!>},<,!!}>},{{{{<!!!>,i""{!!!>},<!a,>,{}},{{<!}!!!>,o!>}"!!o,!!>},{<!>},<"u}!>"!ae!{!<>}},{{<oao}}a"i{!!!>,<o{>},{<o!!!><a!!!>u>}}},{{},{}}},{<!>!!!><",{}!>ee!>,<!'!!!eu!!!><!!>}}}}},{{{<e}!>},<!!!>!!o!!!!{{!!!>!>"a!>!!!!!!>},<!>!!!!!>!!!>e>},{{<!!a!!!>}!!{ie,!!<!>!!<e!}eo!>},<,}>,<!!!!}!>i!>,<,!!"!>},<}!>o!"oo'o!>},<>},{{<{{!!!>ua'ei'!!<>},{}}}}},{{{{{{}}}}},{{},{{<!>iu'!>>}},{{<!!ouo,!>},<i!ii!>},<o!!!>,<>},{}}},{{{{{<}<!!!>},<"}<oa!!''!>'!oe!>,<!>,<iu>},<{o<<a>}},{<!,<!!!>},<>,<>}},{{}},{{{{<!ua""<o{<!!!>!>},<'i<"!",>}},{<a{!!!>,!!i!",!>,<!!i{>},{{<a!>"{aia<!!!>!!!>,<u'!!u,>}}},{{<i!>},<!{!!!!!>},<,,!!}'!!!!ae"!>,<"i!>,<o}>,{{{<,!{o<!>},<!!a}}i>,<!!'!>!oi!!!>!u<'"e!!,{i>}},{<uu{!e!!!>}}a!,o!!a!{a>}}},{}},{{{<{!>,<!!}i!>,<}{!!!>!!!>,<i"!>,<oi"}'>},{<o!>,<!!!!!!!>,!>},<!<!"!!<!>!!!>e,>,{<!>},<!!<o!!'<}i!>!>,<u!>,<!>},<!>,<!>,<!a!>,>,{}}}},{{},<aee}}u!!<}!>i!>,<>},{{{{{},{<!!!>!!"'{!!,'}>}},{{},{<!!!<>}}},{{<'a"!>e!>},<',>},<io,,a!!!>!>,<i!e!!,!>,<,,eu!!!>!!u!>,<>},{{{{<,!}<!!!!{!>,<{!!!><ia}e!>},<{}e>}},{<!!!!!!{a,>}},{{{{<i,e!!{!!!>"o{uu!>},<>},<!>},<!>!!!'!!i!>!"a!!}!>,<"'!'!>>},<{!!!>,<!!!>a!!!!{""!>"!!"'u!!!!!><!!!>>}}}},{{<!!}!>,<!>},<'!!"!"<!!,<!!!!!>!>>},<!>{}!>!>},<}}"ao!!!!ua!!{!><">},{{<!!!!!!ou<!!'u!>!>},<!>,<{!>!><>}}}}}}},{{{{<'}u!>,<{!!,}!>},<'!"'{!>},<!>>}}},{{{<{a!!!>u!>!>!!!>ae}!>!>},<{!!ua>},{{}}},{{<,!!!>},<!>!!!>>},{<}!!!uu{,!!!!i!>},<{!!!>},<ie<!a"e>}},{{<ou{!>!!!>a!!}!!>},{{{{}},{<!,u'!!!>,<u!>,<ui,}u!!!'!!!>{a!>a>,<,,"!!a!!>}},{<!!!>!>},<o!!{!>oa!!{!!!>a}a!!{>},{{<!>},<a>,{<!!o!>,<!"}!!'!!a",!a!>,<i!!!>o!!e!>,>}},{<,!>},<"{}}}"<!>},<!!e!!!e!!!>,<!!!>,<<!>},<>,{}},{<!!iao!>},<}!!!ea{!!!>,<'uui>,<i"!!!>!>,<u!a"ea!!!>,<>}}}}}},{{{{{{{}},{<,!>},<a{!>},<eoei<<o>,<>}},{},{<i!!!>!>!!!>ii!>!'<!!!>"},},!!>}},{{{{{<,,!i,,ae{!!!,!>!!!>},<!,!!o!!}!!!>}>,{{<}!!!>!!!>'!!!>"!{{!>!!!>>}}},{<!!a!>,<{oia}ueue!!!>eai>}},{{<!>},<!}!!!>!!!!!!ei!io}!!!>!!ue>},{<}!!!>!>i}!!!>,<!>u!>,<!a!!!>!>,<"o!>,<!>,<a!>},<!>,<>}}},{{<!>eo,o!'!!!>'<!!e>}}},{{{{{<!e!>!>,<!!<!!!>!!!!!>}>}},<!>!>'}}!!!>!>!>,<!>!u>},{<!o!!!{>,<!>},<'''!>},<">}},{<<,iiu!'iu!><>,{<,!!{e!!!>o!ai'!!'!!!!{a!>>}},{{<a},!>},<!!!!!><,i{!>"}>},<'<ui<!!a!!''!aa!!!!!>!!!>u'ao!!<!'>}},{{{<!u<e!>,<'{"a'!>,<!>},<!!!>>,<!i'>},{}},{{<'!,e!>},<!!>},{},{{{<<euu!>,<!!,!e!>,<!!!!},!>},<a}!!!!!>a{>},{{<!<ee!>},<o<{i!!}!!!>'!u!>,<>},<}!!!!eai!!!>,<e!>!>!!!!!>>}},{<!!!!!u!!!>!!a{oo,i>}}},{{{}},{},{<!!!>,<{'a!!'a!!!>{<!<e!>},<!!'!io>}}},{{{<i!!,!!e!!aee!!!!!>},,!!'>},{{},<e"o!!u{!>,<{!>},<,>}},{<",!>,<'!>,<!!!>!!u!!{'{!>},<}!!{!oa!!!!e'!>>,{<!>,<!>},<!>,<uie!!,!>,<{!>!!!!!!!>>}},{{<>},{{<!>,<!!a!}!!o'!>!>,<>}}}}},{{{{{{<>}},<u{!>},<e'!>,<,!>},<>},{{},<>},{{<',!,ioe!>u>,{<!>}o!>},<}>}},{{<{a'e,i!>"u>},{{{<!>},<!!!>,i,eo!!!!!>},<eo!>>},{}}}}}}},{},{{},{{{{{},{<a!!a!!!>,<e{>}}},{{<>},{{{<!>},<>}},<<ea,},!!!>!>!!"{,uei!>},<}>}},{<!!',eu'"a}!>o'}!<!>!a!!o!eu>}},{<>,<!!!>>},{<!,!!o!!!>,!,u!!}'!{ee!!i!>,<!!!>!!!>!>>}}}},{{<uo!!">},{<!!u!a!!">,<!!!>!!,}o{>},{<iuoa{!}u',{!!,}'!>,<>,<!!!>!!a!>!!!>u!>,<!>},<!>,<!'!>,<!!!!!><!!!>},<!!<>}}},{{{<!!!>},<!e>,{}},{}},{}},{{{{<,e!!,!>,<!>},<,!!!>a!,!!'ie!>,<o!>},<>},{{<e!!'i!>},<!!!>,!e!!!>!!!e"}uu!>},<u!i'>},{{},{{{<o!><!!o<"!'!!!>,<!>},<!!!>!!!>e'u!!!>o!!u!>},<}>},{}}}},{{{<!i<!i>,<{'!!i!>,<>},{{}}},{}}},{{<>,<,<e!!!>,>},<{>}},{<!!!>,<e!>,<<!!,!<!!,ou>,<!!!>o'!!!!!!!>"a!!eeu!o,!>},<o<>},{{<!>},<!!,!!,o,>},{}}},{{<!>,<'o>},{{<aeei{o}i>},{}}}},{{{{},<>},{<{!>},<!!!!!!<!!'e!>'e>,{{}}}},{{{{{{<!>,<e!{!>,<i!u!!!!<!>,<!!!>>},{}},{<oo">}},{{},<',i!!"<>}},{{{<!>,<!!,u,u'}i<!>},<!!!>!!!>{!>},<!i>},{}},{{<!oe!>}'iou!{u!!!!!!}!<!>u<a>,{<{!!'oa}!!!>!!!!,ii!>,<oa!!i!!a>}},{{{<{a}o}!,!!!!!>,<'}{>}},{{{<!>!!i"eeeuo!>},<<aa!{!!!>!!!!!>!>,<>},<{!!'>},<!>,<<<a!!,{'!!<>}},{{<'!>ao!{u!!!>"!i{}i'u,},>,{<!!!>!!iuee!!!>'!!!>,<>}},<!!!>!>},<!o!>,<e!!!!"!>,'e'a<!!}>}},{{{<eou!>o}i!>!!u}>}}}}},{{{<!!}u!>o!>,<u!!u"u!!a",a!>,<>,{}},<}}"!>,<o!>,<!}'!>>}},{{<>,<!>!>'!!!>!>!>,<!!!ai!,>},{<}}!!!><!>!!!>!!!>},<!><!>!!{!{!!}o!}>,<}i!!"!!!>,<,,!!!!!>>},{{<!!!>'!!}!!!>!!!!!>>}}}}},{{{}},{{{{<!'i!>,<ae>}},<!aa!,">}}}},{{{<!!a,"!iu!!e!"'{>},{{{{<uu'i<!!!><!>!>}uieo!!!>!>,<"o>},<}!>}!>,<>}},{{<!!!>'<!>,<!>},<ua{!>},<i!i!}!!i>},{}}},{{<!!u}!!!><a{!u!>"o!!!>!!!>",e">,<{}i!!!>!!!,!!u!!,"}!>,<!>,<i>},{<!!'o!!!!{>},{{{{<!!!>a!}e!!e"!>},<!><!o>},{{<"a""!>},<!!!!,!>}!>},<}'!!u!!!!!>!>},<>}}},{{},<}>},{{<ioo!!u}!>},<<{"!!!!ui!!{>},<"!iui!!!>!!!>'"!!!!,!!o''!>},<}u!!!>{>}},{{},{<a!!oi>}}}}},{{<"o!>},<,!}!!!>"<ao'>,{<e!>,<eu>}},{{},{{<<}!!o!{!i<!!!>,<!!!>,!>},<o"!!!>!>},<!>,<>},{<!!"u!>,<!!oa"'!!!!>}},{<!>},<o!><<<,>,{{{<!!!>{!!'u!>,<!!{o}"!>},<!>,<>}},<!!!>!!>}}},{}},{{<!!!>},<,!>ei'!e!!!>},<u,u!!!>'aui>,{}}},{{{{{<!>,<"oia!!e!!!>!!{!!u!>,<>,<!!>},{<!'!i!!!>o!o{>}},{<',!!{",<>,{<o!!<}'ii!!!>!>},<''!!!>>}},{{}}},{{{},{<!!!>{{!!!!!!a,e!'<!>,<!!!>!!!>u"i!,i!e>},{{<{<}>},{<!>,<!>{>}}},{{},{<i!!},u}'!<>,<!><o!>>},{}},{{{<a!!!!!>{!>,<o>,{<!!!>!>},<!!'a!>ii!!!>u!!oa}}"">}},{<!ai!ua!!<!!!>,<<e}a!>>}},{<u!ea"ue,!!<!<,>,{{<!}"a!>>}}},{<oa!!!>,<{!>},<e!,!>!!!!<u!!i}!>>,{{<,{{"!>},<<!>,<!>u!>!>},<}'{!!!ao>},{<!!!>},<>}}}}}},{{{{<{o'oi!>,<o!>},<ue!>},<ao>},{<!>,<a!!ia!,i}{!>,<!!!>>}}},{{{<!!o!>,<o!>},<!>},<,,{!>},<i!>u!>,<i}>,<e!!!>,<!>,<'!><a<e!>,<!>},<e,",!{!!!>,<i>},{{<!>,<"!>},<!!}!!!!!!!>!!aa!!o'!>},<!>},<>,{{}}}}},{{{<<ea!!!!}!o!!,!!,!!!>!>i!>,<"''!>!!}>,{<,,!!!!!>},<"!>!!!!!>,<o>}}}},{{<!>},<u{!a<"!!>,{<}!>,<}'e!!"<!>},<>}},{{<a!!'}{!>},<{!!!>!!!>,oa"!>,<}''!!!>,<!!}u>}},{<!!'!!'a!>},<!!!>!!!!>,{<!!!>},<{a"u}!>},<!!,!>,<i>}}},{}},{{{}},{{<"!>},<!!,uii"a!>},<a!>>},<aa!>>},{{<!!'>},{<!>!>,<e!!a''!>"!!!>o>}}},{{{<!>},<u'<'!>,<o'"!>,<,"a!>,<!!a!{!>,<!!>},{{{}}}},{{},{{{{<}}}!!!!!>,<!iiue!!"!!>},{}},{<!>!!!!!><!!!!!>!a!!!>!!,<!>},<<aa'!!<u!>,<!">},{{},<>}},{{<e!!!>a<{!!!!'}!>oi!!<!!!!!}>,{{{{<!>}}a"!!,"!!!>!>,<e!!i!!!!!>a'!!e>,{<>,{<{ue!!!!!>!!}!!!>o>,{<!>,<!>}!>!<!>!>},<!!!!!oa!!!>!>},<!>},<}<'>}}}}},<!!"u>},{}}},{<>},{<ii}!!!>}i>}},{{},{<}!>,<!>},<<">,<!>{>},{{{<'>},<>}}},{{{<!{ia!>,<a!!<'!!!",<!}e>}},{},{{{<'u}>}},{<}i!>},<}<!!o}'a,}!>!}!>i<>}}}},{{{{<>},{<!i!!"!!!>},<"!!e}u!!!>},<'!!>,{{<o!>,<!!a"!!<!>,<'!>,<,}!!!!!{!>a!!!!ea>}}},{{<!>,<<!>},<{ao}>},<>}},{{{{<uo!>,<>},{<}<!!>}},{<,u!>},<!>,<}i>}},{{<a!>,<,!!!>o!>!>},<"{oa>,{{<o!>,<!!!>,!{!>},<"}i!!!o!!!>>}}},{<,o!!!i!a{<!>,<!!!!"!,!!!>>}}}},{{<e!!ai!e,!>>,<i{,e}e!>!>},<!!'!!a<>}},{{{<i!>},<!>,<!>},<!!o>,{<"!!!>!>,<>}}},{{},{<!>},<<i>,<<!>,<oi!!!!!>!a!>,<!'"!>,<!>},<"!!!>{>}}},{{<eao!>},<a{a<e"!>!>},<>},{{{{<!!!>!'!!!!!>e!>},<!!",>},<!o<!!!!!>,!!'!!!!,i!>o!!!!!>{!'"u}>}},{{},{{{{<i!<!!,!!!!!>!!!>>}},<!!!>!{}a!!!!!>},<i",>},{},{<>,<{!><o!o!!!!!!!>i"uo}o!!"!!{>}}}}}}},{{{{<,e!!}">},<!>},<e!>,<u!!!>,<'!>},<<!!u!>!!>},{{},{}}},{{<<!>,<{<!!!u>},{{<!,!,>},{<<!>},<}a!!{!><>,{<e!>!>},<,oai!>!>},<!{>}}},{{<"u!>,<<!>},<i!>,<i'<!>!!e!{!>},<!!i,>}}},{{<}!!<!>},<i!!!!<<!!!>,<!>,<!!i!!!!!>!>},<!!!>},<ao,!>},<>},{<i!!!>"a'!!}!!{"{>,{{<!!u!!"!>,<'>},{<!!""u!e!!!!u!>,<io!>,<"u!>,<{'">}}}}},{{<!>!!<oe!>!!!>'!!,<!!<!!!>}!>>,{{{}},<!!!>,!!!>!>"ii>}},{{{<'u!!!>!!!>,<>},<u>}}}}},{{{{<i!!!{,!"!!o"i}!>,<!!!{{>}},{{{}},{{{<ao!>,<!}'!}"e,o!!!!>},<!>!>,<a{e,a<!!!>",'oe<>},{<ae,!!oue}>,{<','a!!!>a!!<!iu!a!!u!!!i>,{<}!!,!>},<!!!>,a>}}},{{<}>}}},{{{},{<i!!o!!!>"!>!!ou!}i!!oo!>},<'!!!!!>>}}}},{<!>!!u}!>,!>i!!!!!!,"!!,!>},<u!!,'>,{<}a'ua!>o!>},<!}!>},<!!u>}}},{<!>,<!!!!!>},<!!e!o!>'!!"!>,<>,{<eu,e!uiioe{>}}},{{{}}}}}},{{{<>,{}},{<o!>},<'>}},{},{{{{{{}},{{<!>},<!!,'ii!>,<!!o,!>},<"!!i'"u}a!"e>}}},<!,<i>},{<!"!e"''!>,<iau!>!>},<i'>,{{}}},{{},<!!!>,<ea!>,<!a!'}<!!!>,<!!!>!>},<!!!!!!!,>}},{{{{<e<e>},{<>}},<!'au!>!!!!!>!>,<'!!',ea'!!o!}}!!}>},{{<!!!>a{!!,!!""oue{o"!>!!}>,{}},{}}},{{{},<a"!><a!!u!>!>,<u{!>!!">},{{{<!!o!>},<ao,o!!!>,<,i<i>}}}}}}}},{{{{{<"e}uu!!,!!i!!!>!>},<"!>>,{<}<!>!!!>!>,<i!!{!!",a<!>},<!>},<!o!>o>}}},{{{{<iuu>,{{{<,>},<!>},<e!>,<}!!!><o!>},<o!!!!}>},<{a>}}},{{<!!!>ie}i<!"a{!!i>}}},{<!>u!e,e!!!!!>e"e!!!!!>ue{{!!"!>},<u>},{{{<,!a!>!,!>},<,,e!!,!,<ui>},{{<auei!!!>{!!!!!!>},<!!!>'}!>,<a!!!>e'"o!>!>"{ou}}!!}>}}}},{{{<!>,<!!'u!u!>!!!>!>,<!!,!!!>i!>,<o"!>,<}>,{}},{<>}},{{{<a'o<!>,<i!'ia!!e!!!"!!!>u'!o>},{<}!!e!!!>>}}},{{<e!>!>},<>}}},{{{},{{{{<!!!!a!!!!!!<u>}}},<'!'<!au!!!>a!<'{e,,!!{a'!!}>}},{<,>,<!!!>!!>}}},{{{{},{<>},{{<!!!>},<"!}{!!'{!!!}e"o!>,<}!>!}ou,!!<>}}},{{<<}!>},<>},{{<!>!>,<!!!>o,""eu!!'u!!i>}}},{{<!>},<iu!>,<e>,<!>},<',o,,{a!!!!o<!<e!>,<>},{{<'!>,<o!>,<!>,<>},{}}}},{{{{}},{{<}!!e!!}!}}!!!>{{>}}},{{},{{{{{{<!>"iu!<!!,i!!!>>},{<u'>,{}}},{},{}},{{<o<}u'e!>,<!!u{a!>,<eaoa>}},{<!>},<{i!>},<o>,{<,!eo!!}>}}},{{{{<!!!!!!!!!><!!!>>},<!!!!!!e{}!>,<!>,<{!,e{}aoo!!{{}>},{<!>},<u!>},<!!!<'>}},{{{},{}}}},{<!!ue!>},<!!""}{!!!>,,{a!{{!!"!!!>,<e>,{<ou,,"}!!!>!!!>!!!""!>,<o,e!}"!!!>a>}}}},{<e!!!>!>},<!>},<u>,<u'!>},<"a"!!!>,!!!>>}},{{{},<eoeo'<eiaa!!,,>},{<!!,!!!>{!!!'!>},<{!>,<ou!}!!!>,'!!!!o>},{{<o!!aa!>!!!>!>,<"!'!!!>!!!!{"a!!!>io<!>},<!>},<>}}},{{{<o"!!!>!!!>},<e!>},<o!!a>,{<ieoie!>,<u!!a!>">}},{{<!!!>!!a!>,<a!!!,!>},<!>},<u!>u">}},{{{}},{<io!!i!>,<!!e{aa!>},<>,{{<!>},<!!!!ui!!,!>!!!!{o}}!>},<>},{{}}}}}},{{{<"!!!>!>,<!>},<,a!'}!!}!>},<u"}!!,>}}}}},{{{<a'"<>},{{<!>u!>{!!i>},{{<!>{!!!>},<o!o!!"!>},<e}i!!!>o>},{<aei<e{",!!>}}},{{{<!!!!!>!o!!!>!>!>},<u{<!!}i!!!>,<!!!!<"'ei>}},{<{e!>"!>,!a!!!>,<!!!{!!!>!!!>{<!>,<!!!>,<>}}}},{{{{{<}u>},<i"!<u}!!u,!>,<>},{<!!!>!>},<}{!!"oeu>}},{{<,"'u}!>!<{'o>,<{!!}!>,!!!!!!,!>,,"!>,<!eu!>},<!>},<<>},{<!>},<'!!!>!>!>},<}<!"!><oua!<'ou>}},{{{<>},<>}}},{{{{<ai!>,<}''!>},<o!"i!>>},{<{!>u!eu{!!!>}'e>}},{<,{!e!!}!!!>,<,i>}},{<!!"i{{>},{}}},{{{{<ui>},{}},{{{}},{{<<!>,<{!!a<!>},<!!!!"a!!!>},<e'!!>}}},{{<u!>},<i!">},{{<e,!}!aea!"!'!!ea>,{<a!>},<!>,<o!>},<!>,<!>>}},{}}}},{},{{{{},{<"!!e!!"!>},<"}!><{}"!>>,{{<!o!!!>uo!!,o!!!!io!!!>'>}}},{{{<a>}},{<e,,!>,,!!i<!}!!{!!!!!>!>e!>},<u>}}},{}},{{<!!!!!!">},{{{},{<uo<!>""!>,<!!}"!>!!!>i!>>}}},{{{<!>,<e!>o!!!>o!>{,'u}!!u',!>},<}>}},{}}}},{{{}},{{{<<!>!!!>,<!>>},<{i"<uu{a!!a!}!>},<!>},<!!!}}>},{{<oaa!>!>},<'>},<!!!!aie>},{<e!>,<u,}<!>},<{iu}'!>}!!<'i>,<oea!>},<!><!u}<a"!>{>}},{<>,{}}}}},{{{},{{{<e}e<u>},{{<a"!>!!!>!!!>'>,<{,'!>!!}!>u<}!!,!!i!!!ei}>},<a!"!!!>>}}}},{{<'!!!>!!o!>,<}',!>o<o!>},<!!i>,{<!>,!>},<>}},{<{!!,!!{<ouu>}},{{{{{<o!{!}!i!io!>!!!!e!!!>!>!>!!!>!>'>}},{}},{<!!!>>,<!!!u!>""!,!>},<i}!>},<ou!>!>{,!>'o>},{}},{{<ua>,{<!!!!!>a,!}!>,<!>iaa>}},{<>}},{{{}}}}},{{{{{<!!!>!>},<{e>},{<!>,<!>,,<i}!!!!!uu,!!!>>,{<!i">}}},{{<!,!u>},{{<!>},<"uoa<au!!!>a!!,}>}}},{<!!aa}!>,<!>,<au!!!<o>}},{{{<!>!,!!u!!!>'<!>,<,!>!!>},{<!!e!>uo!!'ai{a!>>,{}},{{<o{!><i{!!!>!!!>!>>}}},{{{{<!>!>},<a!}!a!!!!>}},<!>},<,<'o!!!!,uiu>},{<!!e}{"u!!!i!>},<!!a!>!!!!!}'>},{}}},{{<!!'!!!>,!""!!!>,'!>},<{o!!}!o<>,{<"o!!"!!uu>}},{},{{}}},{{},{{{<!>},<{!!!!,!>,<>,{}},{{<oie!!i!eo!!!>{!>},<<<>}},{{}}},{{<!>},<!>!!ae!>,<>},<!>,<!{!>!>!>},<'i!!>},{<i}!!!a!>u!<'>}},{{{<!!aee!!!>!>,<!!!>u"}!!"!!i!>!e,i!!{,>},<e'oa{!!e!!}'a!!!!!>>},{{}}},{{{<a!!e!>{,i"i!!!>}!!"!!!!!>},<uu!>},<">}},{<!>!>},<!"a}ee"!>,<{!>,<,oe!!!>!>!>,<!>>}}}},{{{{{<!>,<{!!o>,{<{,!>e}!e!>,<>}},{},{<!>},<<!>,!>u,!>,<!!!!!>ae'>,{<!>},<'!!o!>},<!!e}o}!!!>!>,<e!>},<'i{!!o>}}},{{{<"!!{}"!!,,!>},<i<"e}>,{<>,{}}}},{{<u'<!!'!>},<!!!>>}},{{<!>e!!!>},<!>,<!!!>i!>!>},<ae,{u!iu!!!>u}!!e>},{<!!!>a'i!!au!{u!>},<!>},<o},u>}}}}},{{{{{<!!!ee"!>},<!>,<a!>},<a!>a!>},<}<!!"!!!>>}},{{<!!!u{<",ao!!u,!>,<'!!!>},<!!!>u>},{<ueea}!!!>{!!!!!!!!!!!>!>},<!!>,{<!!!!!>o'>}}}}},{{{<'!!!>!>o{""<i"}!"!>},<!!e!!!>!>},<{>},{<!>!!u!>},<!!,'u!>},<!>"u!>"!}!>{a!!!>},<}>},{{<!>},<e!!!>}"i{>,{}},{{{<a'!>,<,o!!!>,<e'}>}},{<!!u'!!<,e{e!><i!!!>a<>}},{<o{!!'!!!>!!{}!!<{}!>!>,<!!}>}}},{{{}}},{<!>o"u!{u"{!>,<'!!!!!>!>!>},<>,<!,a<{!!!>!!,i!>!>},<e<<!>a>}},{{<,>,{}},{{<!!o"!!!>>},{{{}},<ea">}}}},{{},{{<!!eeou{!!!>ai!>,u!!!>,<!}'!>,<!<{>,{<!!!'!<e>}}},{},{{{{<u!!!>u!>,<!!'!>,<}a!!,!>},<i!>,<>},{}},{<i{!>,<!!!>{!>!>},<!>},<{a>,<oi!i{!>o!>!!{e!>,<}!!!>>}},{},{{{<>}},{{{<!!!'!,!>e!>o<e!>i!>,<>}},{}}}}},{{{{{{{{},<!>},<o!>,<!!'eo!!!>},<!!i!"!>,<!!!>!>ie"ae>},{<!!{au!{!!!i!}a!!!>,<o!u}}!!!>!!!>,<!!!>>}},<ui!!!"","'}!>,<,!!!>e!!,!>,<!>},<!!e!!!>,<!!!!i>},{{<!>!!}"e}{!oe!'}!>!>a,>},{<!{!!u!>},<>}},{<!!!,!>,<o!!!>'''!{!!!>'!!!!!>"!>},<!!>}},{<o!>,<o"i'!>!eo>,{{{<u!!!>,,!!!>!>!>,<!>,<>},<!}!!!>e!a}ao!i!>aau,!!!!!>e>},{<!ee!o,}!!!!!>>,{<!!">}}}}},{},{{},{<!!'a!{!!!>!!{,!>!!u}!!!>,<>}}}}}},{{{},{{{}}},{}},{{{{<uu!i{}!>,<'!i>},<{aa!>,<<e!>},<<!>a!>>},{{<<a<ue!>},<o!!!!!>},<{!!eea!>,<>},{}},{<!>},<"eo!!!!o,a!!"u!!>}},{{{<}}!>,<!!o!>},<e>},{<!!!!ao!>,<!!!!!!!!!>!>!'e<<<!!!,o,!!!>!>,<>}},{<}},'!>e!!!>!!!>!a}<!>,<!!!>e}!>},<!!!>>},{<,e>,{<!>,<eu}!!!!'e"!!"!i!!!>o!!i!>"!>>,{<'}o!!u<!!!>!>},<<a<!>},<!!i<{!>,<u>}}}},{{{{{{<!>!>},<"io>}},{<'!e{!>!>},<!>,<!>,<ii}>}}},<u!!"!!!!!>,<i'e!>},<'i!!!>i{>},{{{{<!>,<a<"<{>},<u!'!>},<!!!!}{!>!!!>!>},<o>}}}},{{{{},{{},<a!!!>!o!>},<i!!!>,<'"e<}!!>}},{{}}},{{<{,!!!,!!!>},<"!>!!!>},<!!!>"'"'!!!>!!!>!>,<>}},{{},{<!!>}}}}}},{{{{<aao!!!>,<'{u"u>},{<!>},<{!>},<i!>ii!>},<!>"a<i!!>}}},{{{{{}},{<"i!!{>,{{{<!><!>},<a,,!{!!!i,!!',,'ae>}},<euio!iu!!!>!!""!>a!>},<"oa>}},{{},{<!!'}!>,<<},!!u,,!!!>!!!!,!!!{',{!<!!o!!!>>,<e{!!>},{{<<!>},<}"">,<a'<!!ouo!>,">},{}}}},{{{<{{!!"!>},<""{!o!>},<!>,<!!!>!>i!!!>!>,<}>},{<!!,"!!!}uu>,{<i!!u<!>},<uo!>,<!!ia!>,<>}}},<!!<!!a<!!!>i<!!!!!a!!ouo!!!!!!!>e>},{<o!{o}o!!!>,!>},<aa!',!!>,{<!!"!!!>},<!>i{>}}},{{<!>!}!>a'>,{{<"a}'eo!!!>,!!!>,<{",!>!>>}}},{},{<!!i!>!!}>,{}}},{{{{{},{{}}},{{}},{{{{<!>>},<}ao!!,'!!u!>,<'}{!!!>o!>},<<!!"a>},{{<e!!i!!}'!!!!!!!>},<!!!!!!i{eiu!>},<!!!>!i!>},<<!>!!!!!>!>,<>}},{{{{},{}},{<!!uo!>,<"!!e!!!!!>,'!!}>}},{<!!}!!!>!>,<>}}},{<!!e"!uuu>},{{<,>},{{},{{}}}}}}},{{},{{<,{e!>},<!,!!ue>}}},{{{{<{!>},<>,{<}"!>!>,<!}"!>,<!!!!a!>},<ea!!!!{>}}},{<!!'o!!!>u<>,{<!i!{>}}},{{<'oa!>},<>},<iio!>!>,<!<!>,<!ie!!{"<}<!!!!!>!>},<!>>}},{{<!>,o!!oe!!{!>,<"e!!!>!>>}}}},{{{},<!>},<}!!a!!!>e!!,!!!>,!!!>!>},<<o!!i!>},<>},{<!i!!!>!>},<!!!!!!!>,<<!!"!!!!a!!!!!><u!>,<>,{{<'''>}}},{{{<!>o'!>i{!>},<!>},<a">},{{<!!e>},{{<>},{{{<"<!!iia!>,<a<a!>},<!i,!>!!!!o!>},<!!!>,<u">},{<}!!,!>ii<!>,<o}io>}}}}},{{<!'"!<"!!!>,<!>!>},<!}!!a!!"!e<u"oi!>,<>,<!!!>,!i!>},<'i>},{<<o!!'oiue!!!>!eiu}!>,<!>},<!>},<>}}},{{}},{{<!>},<!!!!!>>},{<!>,"!!!!!>!i!!!>!>!><{ae!!!>o!>},<>}}}},{{{<!!!!!>}!!!>u"o''"!ai!>,<!!!!>,{{<!!!>!!!!,!>},<{!>,<!>{<eo{,!!o!>},<'i!<'>},{<!!!>>}}},<!>,<!!!>i>},{{<!!!!!{,iu!a{!>!!!>"!>},<a!>a>}}}},{{{{{<!!!>,<!!!!"<"!!<!a!>,<'!>,<<u!>,<">},<!>,<!!!>},<!>,<e!!!>!!o!!o!!!!o!!!!>},{{<'u!>a!>,<>},<!!!>!i<o!a!!!><}aouu'<,>},{{{<!!!>"!!!>,}ea!!}!>!><!!'"!!<{>,<e!!!>!>!a<!!o!!!>i}!!}>},{{{<!>},<!">}},{<,!!!!!!!><>}},{{<!!!>},<'e>,<i!>,!i,!!!>ea>},{{<,>,<!!!>o!u,i!>u!!!!u!!!!!!!>},<}{!!>}},{{<}!>,,>}}}},{<i}}iu}{!>},<!>{<u!!!!!!o'>,<}<!!<<<,!>,<!<!!"u!>,<u>}}},{{{<!>},<!>},<!!'!>,<!!o!!oa!}!>!>!!!!"{>}},{}},{{{<<!>e!ooa!!!>},<<!!!>",!>},<!u{!!!!<e!!<>},{<}}u{!!"!>},<"!!o!!!><!<!!!>,<e!!!>u!!a!!!>},<>}},{{},<a!>'{"!>},<}!>,<!!!>"e>},{{<!>},<>,{<oe!!!>!!u>}},{<!!!!!>},<!>,<!>!!i!>,<!>}},!!!!e",>},{{<}!!!>!>},<!!a'oi<>,{{<"ou!!{{!>,<''euu>}}},{{<i<<o>},{}}}}}},{{{{<uu!!!>,<!>,<e!{,!>,<!!!!!>'!!>}},{{<o,>,{<{}oe}!o!>!!!!>}},{{}},{{<<o'!<!>,<{{,!!!>},<'e!!!!!!,!!!>!!!!!!!!>}}}},{{},{{}},{{<ai!>},<}!>,}<!!"e<!>,<!o>}}},{{{<<}o!!!>!}!}>},<"i"ei<}!!!!ae,!>,<!u!!i!>!!u>},{{{<!!!>"{o!!!>!!!>ii!!!!!}!!"!!u!!!>,<!!!>e!!<>},{<uu!>'ou!'""!"i!!!>,>}},<!o!>,<<!!!!<e!>},<"!>,<>}},{{}}}}},{{{{{},<'e!!'>},{{<!!,!>!e,!>},<,'!>},<!!!!!>!!!>},<,!!a,ie!!o!>},<!u>,{<a}"!a!>!!!!!>!>},<eao!>!!oi>}},{<!a!}!>o!!!>e!>,<!!!>,<!!!>,!!a"!!,{a,>}}},{{<!!!>a!!!!!>!!!>>},{{{<!!!>}!ueae!>!>{o!!!!!>!!"!!!>!>!ua>}},<!!!>}>}},{{{{<'u,!e!{"!!{!!{"''"a}{u!}>},<!!!oo'!>,<!!!>},<!!!!!!!>},<!!!>},<!>},<o!}!!!}>}},{{{<i!>,<!!!>ui!!!>!>}i<e>},{{{<!>,<!!e!>},<"!,'!!!!aa'!!!!,>}},{<u!!"!!!>!>},<!!!>{!!!!">}}},{{<'u!!{!}{>,<!e!>,<}e}!>},<>}},{<ea!!'!>!>,<o}<!!!!!!",e!!!'}>,{<>}}},{{<{!>},<o!!!>,<,>},{{{},{<u,e!!!>},<{u!>,<'au>}},{{<{a!o,!!{<!!!>{"!>!!!>!>},<'{'<>}}}},{}},{{{{<!>{!>,<<'ei!,!!!>iu!>e!!!>!!>}},<!>,<!>},<!!o'}}u!!!>,<!>!!!>},<eu>},{{<i<"{!"}!!!<o>},{<ao!!!i!!}!!!>!>!<oae<>}},{{{},{},{<}"!>,!!}'!>},<i!!!o}!!oo!!!>!!!>i!!>,{<<!!<e<!!!!!!eo!>},<!!o!a!!!>ei!!!>!>,<!!','<u>}}},{}}}}},{{{<}>},{<!!!>eu>,{<ui<!'!!{!!!>!!!>},<o!!!>o"u!!>,<}!!!>i!!!!!!!>!>},<!<uo<''!!,ii>}},{{},{<'e'!>!>},<!!!a!>!!i!!!>!!!!<!>"{<}>}}},{{<!>,<{i>,{{<a'!eu!>"!!!>>}}},{{<!>,<o!!!>,<o<!e}"!!!>!!!>"!},,e>}},{{{{<!>,<>},{<!!a!>,<u!!<,!!o"!'{>}},<!>!>,<o"<!!!,!><<!>u>},{},{{{<e!>,<o!>,<,!>,<!>,<>},{}},{}}}},{{{{<>},{<uo>,{{{<!!!>o!>},<}e}a"{e!!!>,<!>,<u<"!!"!>},<>}}}}}},{{{<,!{>}},{<o>}},{}}}},{{{{},{{<<!!{!!!>!!!!!!!>!>},<!>},<!!a!!!>},<,!!!>'!!!!!>,!!!>''">,{{},{<{}{'!>>}}}},{}},{{{}},{{{<>}},{<a"{!>},<>}}},{},{{{{},{<!!!>>}}},{{{<!"!>},<!!<<{!>,<!!a>},<{aoi'!!>}}}},{{{{{},{<'!>}!!!>,<!!!>i!o!!!>i!!!>},<"!>,!>!!{!>,<o>,<i<!>,<!!}",>},{<i!>},<a!>!!e>,{<<!}{!>},<!!!>!!!>!>,<!>},<!!!!!>!>!!>}}},{{<!!{"!!!{!!u!!!>'!!!>!!e!!!,'>}}},{{{}},{{{<!>},<>},<}e!'i>},{{{<!>ue!!!>},<{uu!!!>}!!{'>,{{<!!!>!e!>,<ooa}ou{!>''!}",!a'>}}},{{<i!!!<}u!!,}u!!!>"!!!>},<}{!!}>},{<!!'o,!>},<o}}',!>},<<!>},<!!,a"!>,<!"!>,<a>}}},{{<i{}o!!>,{<}i!!!>!>,<!!!>!!,!!!>{>,<!>},<!>,<!<!!'!!!"}!!!>e!>,<u<>}}}}},{<!!!u,!>!>,<u>,<e{!!!>u{eu!>},<!!<<!>,<u>}},{{{<!!}!>},<'!!'ii,"!!uu!>!'e>}}},{{{{<!a<'!>,<,>},<>},{<!!,}>}}}},{{<aoo,'!>!!,!>},<!i!!u>,{}},{{}}}},{{{<{!!'e!!!>!>},<!!!>"o!!,!>},<ooi!!!><>},{{<!!!!!>},<ee!!!>,<'!!!>a{!!,e!!!!!>a!>,!<!i!>,<>}}},{{{<ua}!>o>,{<!>,<!>'a{!!!>,<!>>}},{{{<,oiu{!!!!!!!>},<eo>},{<<e>}}}},{<!>},<""!!!>!>,<,ooe!!{!!!>},<!>,<>}},{{<i!!!><>},{},{{{<!!e{!>,<!!o!!!>,<e<!}!!"!!!>!>},<,>},{<!>},<!!oo}!a!!!>!!<'u>}},{{<e>},<>}}},{{<!}{a<!'}"a!>,<a!!o'i>,<!!!>},<!!!>i"!!!!{!!!!}ao!>},<}!!'i!!!!!!>},{{<!>},<!!,!>a!"!!u!!"a!!e>},<o,e!>,<!>,<}!!e!>},<!!'a,ii!o!>},<!!ai">},{{<o"!!!>!!!>}}!!!!!>i!>},<!>},<">,<!!!!!!!><{!!u!!,a'o{!>,<!">},{{<<a<>,<{>},{{{<!>o!>!>e}i">},{{<!!!!!>!>,<<!>},<!{a<a<!!>},{<!!'ue"e{ua>,<!>'!!}o!!!>!!!>a!>,<<!!!>!!!!!!{!>>}}},<{<a"!!"}o'io>},{<ue!>},<}e'e{>}},{{<'!>,<o!!!>},<!>!!!>oi'!!!>},<'o<>},{{{<!>!>!!!>!>},<!!!>},<u,!>,<!o}>},{}},{<!!!!}!u{!o!!ieea",u!!!!!>!!!>!><!!"">}},{<!>},<<}!!aa"!>},<"!>}a{!>},<!!!!!>!uo>}}}}}}},{{{{<{!}>},{{}},{}},{},{{<,!>"!!!>!>,<!!oo!!!>},<}i!'u'!!!>!>!>},<{a>,{<a!!!>!!!>!>,<!!!'!>!a",!>},<!!o!>},<a!!!!}}{>}},{<{u!>{,!>!!<!i>,<e<!>o!i!!!>!!!!"uo"!>,<u'"!>},<,!i>}}},{{{<<iee!!a"!>},<!>,<,>,<,!!!!!>}o!>,<oo!>!>,<"io!>},<}!',"!o>},{<}!!{'{!!!!<{!ai!!!>"!<ou!!a!{<!!">},{<!>},<!>,<i!e!!!>a!>,<!!o!>!>},<!>},<!!!>aa>,{<u"{<!>},<}!!o'"i!!u<}a>}}},{{{{{<>},{<<}uoa,'!e!!e!!!>!{o!!!i>}}},{<ai!!!>eou!!!>!a!!!ei}!{u!!!a!!!<!!ei>,<aue}!!!!}!>,<a{o!>,<!!!!>}},{{<!!o!!ieu!>,<!u',aeaia!!}">},{{{},{<!!'"<}i>}}}}}},{{},{{{{<'!!e!i!>u!><e,!">},{<!<<!>!!uu"!>},<!!u<iia!!}!">,{}}},{{}}},{{<a!!a<!>,<'!>,<!>,<,',!>,<>,{{{<!!!!!!!>e}"!!i<>}},<e!}'!>},<!>!>},<!!a!!'i>}},{<"!a',"a>}}},{{{<<,!>},<!>,<!o<!>},<<!!!>u>},{{{}},{<!!!!e<!!!!!>o!>,<o{!>!>,<>,<>},{}},{{},{<"!>,<!i>,{<>}}}},{{{<{!"!>i"!!<i"{}>}},{<>,<oi,i'>}},{{{<{!!!>oe!'!!!!!>!>!>},<!>,!!!e{a>}},{{<"!>,<!>u!!,!>a{<!!'a,>,{<i"!>},<u!>,<,,'!,!o!>},<!!!!i>}},<i!>},<io<!!a!!,!!!>}!"'"o!!o!>}>},{<!>'ue!!!>,<'ia}{!>},<!>,<{o<u!>,<>}},{{{{{<>}},<!o!!!>},<!!!>!>},<!!{ae!!e!!!!!!!!!!!>i>},{{},{{<o!>},<}{o!>,<!!!!!>!!!>,<!>!!!>!>,<u>}}},{{{<!>,a"!!i!>},<!!"!!"!!u}ue!!"o!!e>},{}},{<!>,<!!!>!!!>{ue!e,!>,<o<o{!>,<!>,<!!!>,<>}}},{{<!>},<i}!!<<!!e!>>}}}}},{{{<,>,<{!>},<{!,{,>},{<<e"}u}}!!!>!>!!!>a!>},<!>,<oea'u!!!>>,<i!>,o<!>!!"!>a!!!>,<!'!>!!!>>},{<{o{uuo<,o!!!>!!!>!!!>}>,{}}}},{{},{{{},{}},{{<i{ie"!o'{!!!>},<!a}!!!>},<>},<!!,e<e!>},<!>},<!!!>a!!e!>i>}},{{{{{{{{{<!>u!!!>!!!>!ui'{!>},<>}},{}},{}}},{<o!!!>>},{}},{{{{}},{{{<}ue<!!!!!>i!>},<!!a}a<!>,<!>,<>}},{{<!!{!>i!!!>},<a<!!!>!>},<!>},<u}{ao!!!!>},<o!>,<o!!!>!!!>i!!!><!>oe}!o>},{{{<!>!>,<!>ee!!!a!>!!!>>}}}},{{<a!!!>!!<<!!!!u!!e>,{}}},{{{<!>},<eu!>i!!'!>!!!!!>!>,<">},{{<'!!!!!>u!>,<ue"{,i!a}"{!!!>!!o!>,<>}},{{},{}}},{{{{},{{{<!>,<!'>}}},{<!i!>,<oe}!!o''<!>},<>}},{{{<ee!>!!>}},{<a{>,<!>!!{!>,<>}},{{{}},{{{{<!!a>},<>},<{!!!>,<o>},{{<{<<>},<!!!"!>,<!!!!!>!!e!!!>!>!!>}}},{{<!!,u{!!}"uie!!}!>,<o>},{{{<}!!!>!>,<!>},<a>}},{<!!!>!>,<<ea{"!>}aua}!>},<}!!!>!!!o'>,{<'",}"}>}}}}}},{{{<e!>},<!>>},{{<!>!>"'!!!<}!io!!!!u!!!>!><i!a!!!!!>>}}},{}},{{}}}},{{{<>},{{<!!!!!}!!i!><!!!>>}},{{<!!!!!>'>}}},{{{<{!!!><!!!>e!>!!!>e"!,}u>},{<!>}>,<!!!>'!"ae<a>},{{<i!>,<"!>},<!!!!!>},<ae!>>},{}}},{{{{<>}},{<o<!!!>e>,{{<oa!>,<"!}'u!>,<o'!>!"",!!!>>},{<!!a!>,<!!}!>},<!>},<!!!!!>,<u!>,<e<!!<a!{a!,!!!>!!!>>}}},{{<}'{!!a!!!>!!o!>!{!>},<!!!!!!""'>},{<{!!!>{>}}},{},{{{{{}},{{{<!!{"eu>},{}},{<!!'ia!}a''!>}>,{{<<},!>,<,ea!oi!!'a!!!"!!!>!>,<!!!>u>},<>}}}},{{<>}},{{{{<!>,<{!e!>,<au<,}>},{<!>!>},<"<e!>!"o',ua'"!>},<!!!{>}},{<!"!>},<!!}!!"e!!!>{{!!'u!e!>,<"!>,<>}},{{{<o!!!>!!"!"o!>!>,<!!!>>},<,a<!>},<!>,<!!o{ioo!"!>>},{{}},{{{<}'!!!!!>},<}{>}}}}}},{{<}e{!!ieia"a!>!eeu!!i!>>,{<!!!!!>"i>}},{{<'<,!'!!!>!>},<e>,<a!>>},{{<!!u<a'!!!><"!ou>,<!!!>!,!!>}}},{{<}u!o>},<!>!>,<ui>}}},{{<uu!i!<u!<u!!!>{!!!ii!!!>>},{<!!,,!<!{!>},<!!!>>,<<i!"}!!!>"oi}"o'!>!'!>!u>},{{<<i!!a!>!!"o!!i!!,e}{!!"i!!!><>},{}}}}},{{{{{},<a"!!!>!>'>}},{{<'>},{<,!!eie!>},<!!!>},<o!!!>!!!>'"!!!!<!>>,<o!>ou<>},{{<a!i!!io,>}}},{{{{<!!!>!>},<!!'!!,"!!!>!}"}!>},<}!!u>,<<a!!!>"!>,<"!!"o!>},<>},{{}}}}}},{{{<u!!!>"!>!!!>oi{!!!!<a!>},<i{!>!>"<}>},{{<}!!ee!>!!!!ea!!!!!!!><,!>>},<i!!!>,<u<i}"!!!>,iii{a}a!o>}},{<!>,<!>},<!!,}!!<!!!>'!!!>'!!!>},<!!!a>,{<!<}!>,<!!!>,!{{<o!>,<a!!!>!{u!>,<}!!!!!!,>}},{<o>}},{{{<!e!!!!!>,<,}a!!o!e}!!<i,a!!!!!>!>>}},{{<'!>},<!!<i!>!>a!><!>,<!!!>'>}}},{{{{<}!>,<!>},<>}},{<}!!!>!!!>!!e!>,<ooia!<>}},{{<}"i,i{!>,<<,}!>}!<!!}!!!!,{!!>},<<ii}!!!>!i>},{}}}},{{{<i,,a"!!oie!>,<u>}}}},{{{<>},{<!ua}>}}},{{},{},{{{},{<'!ou{>}},<!!!>!>!>},<{!>,<oeu>}}},{{<!!!!o!>!!"!!!>!>,<!"!>!!!>!>,<{u!!!>},<!!!>"!!>}},{{{<!>!},<!!{<>},<!>},<o}e!>,<}>},{{{},{{<aio{<!{!!u!>'{a,o!!ii">}},{<ei!>},<},!'<!!o'!!<!!{!>,<a!{>,{{}}}},{},{{<!!!>!>},<,!!!>}!>}!!ou!}ia'i>,<!e!!!!!!i!>},<!!!>!>!>},<!>,<!!!>},<e'!!'u!!!a{>},<u'i}!!!!}!>e">}},{<{!!auo!>,<e!>},<<i!!i!>,<'!!!>ie}"u>}}},{{<>,{{}}},{{{{<!!<a!!<,!!a!!!!!!e<>},<!>>},{<a}!!!>!>},<{!>},<u!>},<,!>},<'>}},{},{<"!!!!i!!{"o!!a}!o!!!>!>'>}}},{{<ou<!>,<>,{<!>,<!!,{'a,'!!,!>,<!!u!>,<!>!<<!>,<">}},{<<'>}}}}}} diff --git a/2017/src/bin/day_1.rs b/2017/src/bin/day_1.rs new file mode 100644 index 0000000..5d0e431 --- /dev/null +++ b/2017/src/bin/day_1.rs @@ -0,0 +1,24 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let number_chars = args.input[0].chars().collect::<Vec<_>>(); + + let mut sum = 0; + + for i in 0..number_chars.len() { + let next = if args.part == 1 { + (i + 1) + } else { + (i + number_chars.len() / 2) + } % number_chars.len(); + if (number_chars[i] == number_chars[next]) { + let parsed: i32 = number_chars[i].to_string().parse().unwrap(); + sum += parsed; + } + } + + println!("Sum is {}", sum); +} diff --git a/2017/src/bin/day_10.rs b/2017/src/bin/day_10.rs new file mode 100644 index 0000000..faec18a --- /dev/null +++ b/2017/src/bin/day_10.rs @@ -0,0 +1,63 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let lengths: Vec<usize> = if args.part == 1 { + args.input[0].split(",").map(|x| x.parse().unwrap()).collect() + } else { + let suffix: [usize; 5] = [17, 31, 73, 47, 23]; + args.input[0].as_bytes() + .iter().map(|&x| x as usize) + .chain(suffix.iter().cloned()) + .collect() + }; + + let mut position = 0; + let mut list: Vec<u32> = (0..256).collect(); + + if args.part == 1 { + hash_round(&mut list, &lengths, &mut position, 0); + } else { + for i in 0..64 { + let skip = lengths.len() * i; + hash_round(&mut list, &lengths, &mut position, skip); + } + } + + + if args.part == 1 { + let answer = list[0]*list[1]; + println!("{}", answer); + } else { + let mut current_char = 0; + for (i, l) in list.iter().enumerate() { + current_char = current_char ^ l; + if i % 16 == 15 { + print!("{:02x}", current_char); + current_char = 0; + } + } + println!(""); + } +} + +fn hash_round(list: &mut Vec<u32>, lengths: &Vec<usize>, position: &mut usize, skip: usize) { + for (inner_skip, &length) in lengths.iter().enumerate() { + reverse(list, *position, length); + *position = (*position + length + skip + inner_skip) % list.len(); + } +} + +fn reverse(list: &mut Vec<u32>, position: usize, length: usize) { + let mut a = position; + let mut b = position + length - 1; + let len = list.len(); + while a < b { + list.swap(a%len, b%len); + + a += 1; + b -= 1; + } +} diff --git a/2017/src/bin/day_11.rs b/2017/src/bin/day_11.rs new file mode 100644 index 0000000..ffb0833 --- /dev/null +++ b/2017/src/bin/day_11.rs @@ -0,0 +1,57 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let directions: Vec<&str> = args.input[0].split(",").collect(); + + let mut x = 0.0; + let mut y = 0.0; + + let mut max_away = 0.0; + + for dir in directions { + y += match dir { + "ne" => 0.5, + "n" => 1.0, + "nw" => 0.5, + "se" => -0.5, + "s" => -1.0, + "sw" => -0.5, + _ => panic!("Unexpected direction {}", dir) + }; + + x += match dir { + "ne" => -0.5, + "n" => 0.0, + "nw" => 0.5, + "se" => -0.5, + "s" => 0.0, + "sw" => 0.5, + _ => panic!("Unexpected direction {}", dir) + }; + + let current_distance = tile_distance(x, y); + if current_distance > max_away { + max_away = current_distance; + } + } + + if args.part == 1 { + println!("Child process is {} away", tile_distance(x, y)); + } else { + println!("At most, child process was {} away", max_away); + } + +} + +fn tile_distance(x: f32, y: f32) -> f32 { + let tiles_x = x.abs()*2.0; + let tiles_y = if y.abs() < tiles_x { + 0.0 + } else { + y.abs() - tiles_x + }; + tiles_x + tiles_y +} diff --git a/2017/src/bin/day_12.rs b/2017/src/bin/day_12.rs new file mode 100644 index 0000000..39f05e9 --- /dev/null +++ b/2017/src/bin/day_12.rs @@ -0,0 +1,52 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::cmp; + +fn main() { + let args = AdventArgs::init(); + + let mut groups: Vec<Vec<i32>> = vec!(vec!(0)); //0 in the first group + + for line in args.input { + let mut words_iter = line.split_whitespace(); + let current: i32 = words_iter.next().unwrap().parse().unwrap(); + if find_group(&groups, current).is_none() { + groups.push(vec!(current)); + } + words_iter.next().unwrap(); //<-> + for other_str in words_iter { + let other: i32 = other_str.trim_right_matches(",").parse().unwrap(); + + match (find_group(&groups, current), find_group(&groups, other)) { + (Some(current_group), Some(other_group)) if current_group != other_group => { + merge_groups(&mut groups, current_group, other_group); + }, + (Some(_), Some(_)) => { + }, + (Some(current_group), None) => { + groups[current_group].push(other); + }, + (None, _) => panic!("Current group not found!") + }; + } + } + + if args.part == 1 { + println!("First group has {} members", groups[0].len()); + } else { + println!("Total of {} groups", groups.len()); + } +} + +fn find_group(groups: &Vec<Vec<i32>>, x: i32) -> Option<usize> { + groups.iter().position(|group| group.contains(&x)) +} + +fn merge_groups(groups: &mut Vec<Vec<i32>>, a: usize, b: usize) { + let src = cmp::max(a, b); + let dest = cmp::min(a, b); + + let mut from = groups.swap_remove(src); + groups[dest].append(&mut from) +} diff --git a/2017/src/bin/day_13.rs b/2017/src/bin/day_13.rs new file mode 100644 index 0000000..e85b541 --- /dev/null +++ b/2017/src/bin/day_13.rs @@ -0,0 +1,46 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::collections::HashMap; + +fn main() { + let args = AdventArgs::init(); + + let input: HashMap<u32, u32> = args.input.iter().map(|line| { + let mut split_line = line.split(": "); + (split_line.next().unwrap().parse().unwrap(), split_line.next().unwrap().parse().unwrap()) + }).collect(); + + if args.part == 1 { + let severity = calculate_severity(&input, 0, &args); + println!("Severity: {}", severity); + } else { + let optimal_delay = (0u32..).find(|&delay| calculate_severity(&input, delay, &args) == 0).unwrap(); + println!("Wait {} picoseconds", optimal_delay); + } +} + +fn calculate_severity(input: &HashMap<u32, u32>, delay: u32, args: &AdventArgs) -> u32 { + let mut severity = 0; + let max_depth = input.keys().max().cloned().unwrap(); + + for depth in 0..max_depth+1 { + severity += match input.get(&depth) { + Some(range) => { + let position = (depth + delay) % (2*range-2); + + if position == 0 { + if args.part == 1 { + range * depth + } else { + range * depth + 1 + } + } else { + 0 + } + }, + None => 0 + }; + } + severity +} diff --git a/2017/src/bin/day_14.rs b/2017/src/bin/day_14.rs new file mode 100644 index 0000000..778a57f --- /dev/null +++ b/2017/src/bin/day_14.rs @@ -0,0 +1,52 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + let input = args.input[0].clone(); + + let mut used = 0; + let mut grid: Vec<Vec<bool>> = vec!(vec!(false; 128); 128); + for i in 0..128 { + let to_hash = format!("{}-{}", input, i); + let hash = knot_hash(&to_hash); + for (x1,c) in hash.chars().enumerate() { + let parsed = u32::from_str_radix(&c.to_string(), 16).unwrap(); + used += parsed.count_ones(); + for (x2,b) in format!("{:04b}",parsed).chars().enumerate() { + grid[i][4*x1+x2] = b == '1'; + } + } + } + + if args.part == 1 { + println!("{} is used", used); + } else { + let mut group_count = 0; + for start_y in 0..128 { + for start_x in 0..128 { + if grid[start_y][start_x] { + group_count += 1; + clear_group(&mut grid, Point{ + x: start_x as i32, + y: start_y as i32 + }); + } + } + } + println!("{} groups", group_count); + + } +} + +fn clear_group(grid: &mut Vec<Vec<bool>>, point: Point) { + if point.x >= 0 && point.x < 128 && point.y >= 0 && point.y < 128 { + if grid[point.y as usize][point.x as usize] { + grid[point.y as usize][point.x as usize] = false; + clear_group(grid, point.up()); + clear_group(grid, point.down()); + clear_group(grid, point.left()); + clear_group(grid, point.right()); + } + } +} diff --git a/2017/src/bin/day_15.rs b/2017/src/bin/day_15.rs new file mode 100644 index 0000000..29b63ad --- /dev/null +++ b/2017/src/bin/day_15.rs @@ -0,0 +1,40 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let mut a: u64 = 591; + let mut b: u64 = 393; + + let mut matches: u64 = 0; + + let comparisons = if args.part == 1 { + 40_000_000 + } else { + 5_000_000 + }; + + for _ in 0..comparisons { + a = (a * 16807) % 2147483647; + b = (b * 48271) % 2147483647; + + while args.part != 1 && a % 4 != 0 { + a = (a * 16807) % 2147483647; + } + while args.part != 1 && b % 8 != 0 { + b = (b * 48271) % 2147483647; + } + + if lower_16_match(a, b) { + matches += 1; + } + } + + println!("There were {} matches", matches); +} + +fn lower_16_match(a: u64, b: u64) -> bool { + let mask = 65535; //2^16-1, ie 16 ones + (a & mask) == (b & mask) +} diff --git a/2017/src/bin/day_16.rs b/2017/src/bin/day_16.rs new file mode 100644 index 0000000..9676714 --- /dev/null +++ b/2017/src/bin/day_16.rs @@ -0,0 +1,87 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +fn main() { + let args = AdventArgs::init(); + + let spin_re = Regex::new(r"s(\d+)").unwrap(); + let exchange_re = Regex::new(r"x(\d+)/(\d+)").unwrap(); + let partner_re = Regex::new(r"p(\w)/(\w)").unwrap(); + let input: Vec<Instruction> = args.input[0] + .split(',') + .map(|instruction| { + if let Some(caps) = spin_re.captures(instruction) { + let spin_amount: usize = caps[1].parse().unwrap(); + Instruction::Spin(spin_amount) + } else if let Some(caps) = exchange_re.captures(instruction) { + let position_a: usize = caps[1].parse().unwrap(); + let position_b: usize = caps[2].parse().unwrap(); + Instruction::Exchange(position_a, position_b) + } else if let Some(caps) = partner_re.captures(instruction) { + let program_a = caps[1].chars().next().unwrap(); + let program_b = caps[2].chars().next().unwrap(); + Instruction::Partner(program_a, program_b) + } else { + panic!("Unhandled instruction: {}", instruction) + } + }) + .collect(); + + let mut states = vec!("abcdefghijklmnop".chars().collect()); + if args.part == 1 { + let answer = run(&input, &states.last().unwrap()); + println!("{}", answer.iter().collect::<String>()); + } else { + let repetitions = 1_000_000_000; + let mut cycle_found = false; + let mut cycle_start = 0; + while !cycle_found { + let next = run(&input, &states.last().unwrap()); + if let Some(i) = states.iter().position(|&ref x| *x == next) { + cycle_found = true; + cycle_start = i; + } else { + states.push(next); + } + } + println!("Cycle found after pushing {} states", states.len()); + println!("Cycle starts at {} states", cycle_start); + + let solution_index = (repetitions - cycle_start) % (states.len() - cycle_start); + println!("{}", states[solution_index].iter().collect::<String>()); + + } +} + +enum Instruction { + Spin(usize), + Exchange(usize, usize), + Partner(char, char) +} + +fn run(instructions: &[Instruction], start: &Vec<char>) -> Vec<char> { + let mut programs = start.clone(); + for instruction in instructions { + match instruction { + &Instruction::Exchange(a, b) => { + programs.swap(a, b); + }, + &Instruction::Spin(spin_amount) => { + for _ in 0..spin_amount { + //this may be slow, but will suffice for right now + let end = programs.pop().unwrap(); + programs.insert(0, end); + } + }, + &Instruction::Partner(program_a, program_b) => { + let position_a: usize = programs.iter().position(|&x| x == program_a).unwrap(); + let position_b: usize = programs.iter().position(|&x| x == program_b).unwrap(); + programs.swap(position_a, position_b); + } + } + } + programs +} diff --git a/2017/src/bin/day_17.rs b/2017/src/bin/day_17.rs new file mode 100644 index 0000000..09d6fdc --- /dev/null +++ b/2017/src/bin/day_17.rs @@ -0,0 +1,47 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + let step_size: usize = args.input[0].parse().unwrap(); + + let inserts = if args.part == 1 { + 2017 + } else { + 50_000_000 + }; + + let mut buffer = Vec::with_capacity(inserts + 1); + buffer.push(0); + let mut position = 0; + + for i in 0..inserts as u32 { + let to_insert = i+1; + // the +1 is because they want it to insert AFTER the element + // that adding position ends on + position = ((position + step_size) % buffer.len()) + 1; + if args.part == 2 && position != 1 { + // for big vectors, push is MUCH more efficient than + // insert (O(C) vs O(n)). In part 2, we want the element + // after 0, which will always be index 1. It only needs to + // be inserted into the right place if it's actually going + // to be in position 1. + // + // If I wasn't meshing the solution with part 1, there + // probably wouldn't even be a vector, just tracking the + // length and index 1. + buffer.push(to_insert); + } else { + buffer.insert(position, to_insert); + } + } + + let answer_position = if args.part == 1 { + (position+1)%buffer.len() + } else { + 1 + }; + + let answer = buffer[answer_position]; + println!("{}", answer); +} diff --git a/2017/src/bin/day_18.rs b/2017/src/bin/day_18.rs new file mode 100644 index 0000000..f763f1f --- /dev/null +++ b/2017/src/bin/day_18.rs @@ -0,0 +1,207 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::str::FromStr; +use std::collections::HashMap; +use std::sync::mpsc::*; + +fn main() { + let args = AdventArgs::init(); + + let instructions: Vec<Instruction> = args.input.iter() + .map(|line| line.parse().unwrap()) + .collect(); + + let (sender0, receiver0) = channel(); + let (sender1, receiver1) = channel(); + + let mut program0 = Program::new(0, instructions.clone(), sender0, receiver1, args.part == 1); + + if args.part == 1 { + program0.run(); + let mut answer = 0; + while let Ok(x) = receiver0.try_recv() { + answer = x; + } + + println!("Last sent value: {}", answer); + } else { + let mut program1 = Program::new(1, instructions.clone(), sender1, receiver0, args.part == 1); + + while !(program0.terminated && program1.terminated) && (program0.run() || program1.run()) { + } + + + println!("Program 0 sent {} messages", program0.sent_count); + println!("Program 1 sent {} messages", program1.sent_count); + } + + +} + +struct Program { + instructions: Vec<Instruction>, + registers: HashMap<char, i64>, + pc: i64, + terminated: bool, + sender: Sender<i64>, + sent_count: u64, + receiver: Receiver<i64>, + part1: bool +} + +impl Program { + fn new(process_id: i64, instructions: Vec<Instruction>, sender: Sender<i64>, receiver: Receiver<i64>, part1: bool) -> Program { + let mut reg = HashMap::new(); + if !part1 { + reg.insert('p', process_id); + } + Program { + instructions: instructions, + registers: reg, + pc: 0, + terminated: false, + sender: sender, + sent_count: 0, + receiver: receiver, + part1: part1 + } + } + fn run(&mut self) -> bool { + use Instruction::*; + + let mut blocked = false; + let mut did_something = false; + + while !blocked && !self.terminated { + if self.pc < 0 || self.pc as usize >= self.instructions.len() { + self.terminated = true; + } + else { + let ins = self.instructions[self.pc as usize].clone(); + + match ins { + Snd(x) => { + self.sent_count += 1; + self.sender.send(self.get(x)).ok(); + }, + Set(x, y) => { + let y_val = self.get(y); + self.set(x, y_val); + }, + Add(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val + y_val); + }, + Mul(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val * y_val); + }, + Mod(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val % y_val); + }, + Rcv(x) => { + if self.part1 { + blocked = self.get(x) != 0; + } else { + match self.receiver.try_recv() { + Ok(y) => { + self.set(x, y); + }, + Err(_) => { + blocked = true; + return did_something; + } + } + } + }, + Jgz(x, y) => { + if self.get(x) > 0 { + self.pc = self.pc + self.get(y) - 1; + } + }, + } + self.pc += 1; + did_something = true; + } + } + true + } + + fn get(&self, register: Data) -> i64 { + use Data::*; + match register { + Register(c) => self.registers.get(&c).cloned().unwrap_or(0), + Literal(i) => i + } + } + + fn set(&mut self, register: Data, value: i64) { + use Data::*; + match register { + Register(c) => { + self.registers.insert(c, value); + }, + _ => {} + } + } +} + +#[derive(Debug, Clone)] +enum Instruction { + Snd(Data), + Set(Data, Data), + Add(Data, Data), + Mul(Data, Data), + Mod(Data, Data), + Rcv(Data), + Jgz(Data, Data) +} + +impl FromStr for Instruction { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + use Instruction::*; + + let mut str_iter = s.split_whitespace(); + let ins = str_iter.next(); + let x = str_iter.next().map(|x| x.parse::<Data>()); + let y = str_iter.next().map(|x| x.parse::<Data>()); + + match (ins, x, y) { + (Some("snd"), Some(Ok(x)), _) => Ok(Snd(x)), + (Some("set"), Some(Ok(x)), Some(Ok(y))) => Ok(Set(x, y)), + (Some("add"), Some(Ok(x)), Some(Ok(y))) => Ok(Add(x, y)), + (Some("mul"), Some(Ok(x)), Some(Ok(y))) => Ok(Mul(x, y)), + (Some("mod"), Some(Ok(x)), Some(Ok(y))) => Ok(Mod(x, y)), + (Some("rcv"), Some(Ok(x)), _) => Ok(Rcv(x)), + (Some("jgz"), Some(Ok(x)), Some(Ok(y))) => Ok(Jgz(x, y)), + (_, _, _) => Err(format!("Unknown instruction {}", s)) + } + } +} + +#[derive(Debug, Clone, Copy)] +enum Data { + Literal(i64), + Register(char) +} + +impl FromStr for Data { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + use Data::*; + + match (s.parse(), s.chars().next()) { + (Ok(num), _) => Ok(Literal(num)), + (Err(_), Some(c)) => Ok(Register(c)), + (_, _) => Err(format!("Invalid data {}", s)) + } + } +} diff --git a/2017/src/bin/day_19.rs b/2017/src/bin/day_19.rs new file mode 100644 index 0000000..b333c98 --- /dev/null +++ b/2017/src/bin/day_19.rs @@ -0,0 +1,78 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + use Direction::*; + + let args = AdventArgs::init(); + + let input: Vec<Vec<char>> = args.input.iter().map(|line| line.chars().collect()).collect(); + + let mut position = Point { + x: input[0].iter().position(|&c| c == '|').unwrap() as i32, + y: 0 + }; + + let mut direction = Down; + let mut path_ended = false; + let mut tokens = Vec::new(); + + // moving onto the map counts as one, but because of how I'm + // counting there's also an off the map step that I shouldn't be + // counting at the end. They cancel out. + let mut steps_moved = 0; + + while !path_ended { + position = position.shift(&direction); + steps_moved += 1; + + match char_at(&input, &position) { + '|' | '-' => { + //continue as is + }, + ' ' => { + path_ended = true; + }, + '+' => { + let left_option = char_at(&input, &position.shift(&direction.rotate_left())); + let right_option = char_at(&input, &position.shift(&direction.rotate_right())); + match (left_option, right_option) { + (' ', ' ') => { + path_ended = true; + }, + (_, ' ') => { + direction = direction.rotate_left(); + }, + (' ', _) => { + direction = direction.rotate_right(); + }, + _ => { + panic!("Don't know where to go from {:?}", position); + } + } + }, + token => { + tokens.push(token); + } + } + + } + + if args.part == 1 { + println!("{}", tokens.iter().collect::<String>()); + } else { + println!("{}", steps_moved); + } +} + +fn char_at(input: &Vec<Vec<char>>, position: &Point) -> char { + if position.y < 0 || + position.x < 0 || + position.y as usize >= input.len() || + position.x as usize >= input[position.y as usize].len() { + ' ' + } else { + input[position.y as usize][position.x as usize] + } + +} diff --git a/2017/src/bin/day_2.rs b/2017/src/bin/day_2.rs new file mode 100644 index 0000000..307029a --- /dev/null +++ b/2017/src/bin/day_2.rs @@ -0,0 +1,26 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + let sum = args.input.iter().map(|line| { + let splitline = parse_space_separated_ints(line).unwrap(); + + if args.part == 1 { + let max = splitline.iter().max().unwrap(); + let min = splitline.iter().min().unwrap(); + max-min + } else { + for i in 0..splitline.len() { + for j in 0..splitline.len() { + if i != j && splitline[i] % splitline[j] == 0 { + return splitline[i] / splitline[j]; + } + } + } + panic!("Didn't find a dividing one! {:?}", splitline) + } + }).sum::<i32>(); + + println!("Checksum is {}", sum); +} diff --git a/2017/src/bin/day_20.rs b/2017/src/bin/day_20.rs new file mode 100644 index 0000000..f528675 --- /dev/null +++ b/2017/src/bin/day_20.rs @@ -0,0 +1,89 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +#[macro_use] +extern crate lazy_static; + +use std::str::FromStr; + +fn main() { + let args = AdventArgs::init(); + + let mut particles: Vec<Particle> = args.input.iter() + .map(|line| line.parse().unwrap()) + .collect(); + + // I took eventually to be after a largish number. Seemed to work + // out, but I'm sure there is a more mathematical way to work it + // out. + for _ in 0..1000 { + particles = particles.iter().map(|p| p.step()).collect(); + if args.part == 2 { + let before_collisions = particles.clone(); + particles.retain(|p| { + before_collisions.iter().filter(|p2| p2.position == p.position).count() == 1 + }); + } + } + + if args.part == 1 { + let (closest, _) = particles.iter().enumerate().min_by_key(|&(_, p)| p.position.manhattan_distance()).unwrap(); + println!("Closest to 0: {}", closest); + } else { + let remaining = particles.iter().count(); + println!("Remaining: {}", remaining); + } + +} + +#[derive(Debug, Clone)] +struct Particle { + position: Point3d, + velocity: Point3d, + acceleration: Point3d +} + + +impl Particle { + fn step(&self) -> Particle { + let v = self.velocity + self.acceleration; + Particle { + position: self.position + v, + velocity: v, + acceleration: self.acceleration + } + } +} + +impl FromStr for Particle { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + lazy_static!{ + static ref RE: Regex = Regex::new(r"p=<(-?\d+),(-?\d+),(-?\d+)>, v=<(-?\d+),(-?\d+),(-?\d+)>, a=<(-?\d+),(-?\d+),(-?\d+)>").unwrap(); + }; + + let caps = RE.captures(s).unwrap(); + Ok(Particle { + position: Point3d { + x: caps[1].parse().unwrap(), + y: caps[2].parse().unwrap(), + z: caps[3].parse().unwrap() + }, + velocity: Point3d { + x: caps[4].parse().unwrap(), + y: caps[5].parse().unwrap(), + z: caps[6].parse().unwrap() + }, + acceleration: Point3d { + x: caps[7].parse().unwrap(), + y: caps[8].parse().unwrap(), + z: caps[9].parse().unwrap() + } + }) + } +} + diff --git a/2017/src/bin/day_21.rs b/2017/src/bin/day_21.rs new file mode 100644 index 0000000..7f7ac79 --- /dev/null +++ b/2017/src/bin/day_21.rs @@ -0,0 +1,200 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +fn main() { + let args = AdventArgs::init(); + + let (t2, t3) = parse_transforms(&args.input); + + let mut picture = vec!( + vec!(false, true, false), + vec!(false, false, true), + vec!(true, true, true) + ); + + let iterations = if args.part == 1 { + 5 + } else { + 18 + }; + for _ in 0..iterations { + picture = expand(&picture, &t2, &t3); + } + + let ones: usize = picture.iter().map( + |row| row.iter().filter(|&&x| x).count() + ).sum(); + println!("{} ones", ones); +} + +fn print(picture: &Vec<Vec<bool>>) { + for row in picture { + for &c in row { + print!("{}", if c {"#"} else {"."}); + } + println!(); + } + println!(); +} + +fn expand(picture: &Vec<Vec<bool>>, t2: &Vec<Transform2>, t3: &Vec<Transform3>) -> Vec<Vec<bool>> { + let size = picture.len(); + let div = if size % 2 == 0 { 2 } else { 3 }; + let segments = size / div; + let new_size = size + segments; + + let mut result = vec!(vec!(false; new_size); new_size); + + for i in 0..segments { + let y = i*div; + let v = i*(div+1); + for j in 0..segments { + let x = j*div; + let u = j*(div+1); + if div == 2 { + let init = [ + [picture[y][x], picture[y][x+1]], + [picture[y+1][x], picture[y+1][x+1]] + ]; + let pattern = t2.iter().find(|p| p.matches(&init)).expect(&format!("No pattern matches {:?}", init)); + let to = pattern.to; + + for a in 0..div+1 { + for b in 0..div+1 { + result[v+a][u+b] = to[a][b]; + } + } + } else { + let init = [ + [picture[y][x], picture[y][x+1], picture[y][x+2]], + [picture[y+1][x], picture[y+1][x+1], picture[y+1][x+2]], + [picture[y+2][x], picture[y+2][x+1], picture[y+2][x+2]] + ]; + let pattern = t3.iter().find(|p| p.matches(&init)).expect(&format!("No pattern matches {:?}", init)); + let to = pattern.to; + + for a in 0..div+1 { + for b in 0..div+1 { + result[v+a][u+b] = to[a][b]; + } + } + } + } + } + + result +} + +fn parse_transforms(input: &Vec<String>) -> (Vec<Transform2>, Vec<Transform3>) { + let t2_re = Regex::new(r"^(.)(.)/(.)(.) => (.)(.)(.)/(.)(.)(.)/(.)(.)(.)$").unwrap(); + let t3_re = Regex::new(r"^(.)(.)(.)/(.)(.)(.)/(.)(.)(.) => (.)(.)(.)(.)/(.)(.)(.)(.)/(.)(.)(.)(.)/(.)(.)(.)(.)$").unwrap(); + + let mut t2 = Vec::new(); + let mut t3 = Vec::new(); + for line in input { + if let Some(t2_caps) = t2_re.captures(line) { + t2.push(Transform2 { + from: [ + [&t2_caps[1] == "#", &t2_caps[2] == "#"], + [&t2_caps[3] == "#", &t2_caps[4] == "#"] + ], + to: [ + [&t2_caps[5] == "#", &t2_caps[6] == "#", &t2_caps[7] == "#"], + [&t2_caps[8] == "#", &t2_caps[9] == "#", &t2_caps[10] == "#"], + [&t2_caps[11] == "#", &t2_caps[12] == "#", &t2_caps[13] == "#"] + ] + }); + } else if let Some(t3_caps) = t3_re.captures(line) { + t3.push(Transform3 { + from: [ + [&t3_caps[1] == "#", &t3_caps[2] == "#", &t3_caps[3] == "#"], + [&t3_caps[4] == "#", &t3_caps[5] == "#", &t3_caps[6] == "#"], + [&t3_caps[7] == "#", &t3_caps[8] == "#", &t3_caps[9] == "#"] + ], + to: [ + [&t3_caps[10] == "#", &t3_caps[11] == "#", &t3_caps[12] == "#", &t3_caps[13] == "#"], + [&t3_caps[14] == "#", &t3_caps[15] == "#", &t3_caps[16] == "#", &t3_caps[17] == "#"], + [&t3_caps[18] == "#", &t3_caps[19] == "#", &t3_caps[20] == "#", &t3_caps[21] == "#"], + [&t3_caps[22] == "#", &t3_caps[23] == "#", &t3_caps[24] == "#", &t3_caps[25] == "#"] + ] + }); + } + } + + (t2, t3) +} + +#[derive(Debug)] +struct Transform2 { + from: [[bool; 2]; 2], + to: [[bool; 3]; 3] +} + +impl Transform2 { + fn rotate(from: &[[bool;2];2]) -> [[bool;2];2] { + [ + [from[1][0],from[0][0]], + [from[1][1],from[0][1]] + ] + } + + fn flip(from: &[[bool;2];2]) -> [[bool;2];2] { + [ + [from[0][1],from[0][0]], + [from[1][1],from[1][0]] + ] + } + + fn matches(&self, other: &[[bool; 2]; 2]) -> bool { + let mut any_match = false; + let mut spinning_other = other.clone(); + for _ in 0..4 { + any_match = any_match || + self.from == spinning_other || + self.from == Transform2::flip(&spinning_other); + + spinning_other = Transform2::rotate(&spinning_other); + } + any_match + } +} + +#[derive(Debug)] +struct Transform3 { + from: [[bool; 3]; 3], + to: [[bool; 4]; 4] +} + +impl Transform3 { + fn rotate(from: &[[bool;3];3]) -> [[bool;3];3] { + [ + [from[2][0],from[1][0],from[0][0]], + [from[2][1],from[1][1],from[0][1]], + [from[2][2],from[1][2],from[0][2]] + ] + } + + fn flip(from: &[[bool;3];3]) -> [[bool;3];3] { + [ + [from[0][2],from[0][1],from[0][0]], + [from[1][2],from[1][1],from[1][0]], + [from[2][2],from[2][1],from[2][0]] + ] + } + + fn matches(&self, other: &[[bool; 3]; 3]) -> bool { + let mut any_match = false; + let mut spinning_other = other.clone(); + for _ in 0..4 { + any_match = any_match || + self.from == spinning_other || + self.from == Transform3::flip(&spinning_other); + + spinning_other = Transform3::rotate(&spinning_other); + } + any_match + } +} diff --git a/2017/src/bin/day_22.rs b/2017/src/bin/day_22.rs new file mode 100644 index 0000000..917ed63 --- /dev/null +++ b/2017/src/bin/day_22.rs @@ -0,0 +1,73 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::collections::HashSet; + +fn main() { + let args = AdventArgs::init(); + let input_width = args.input[0].len(); + let input_height = args.input.len(); + + let mut position = Point { + x: (input_width / 2) as i32, + y: (input_height / 2) as i32, + }; + let mut direction = Direction::Up; + + let mut weakened: HashSet<Point> = HashSet::new(); + let mut infected: HashSet<Point> = HashSet::new(); + let mut flagged: HashSet<Point> = HashSet::new(); + + for (y, line) in args.input.iter().enumerate() { + for (x, c) in line.chars().enumerate() { + if c == '#' { + infected.insert(Point { + x: x as i32, + y: y as i32 + }); + } + } + } + + let mut infections_caused = 0; + + let bursts = if args.part == 1 { + 10_000 + } else { + 10_000_000 + }; + + for _ in 0..bursts { + if args.part == 1 { + if infected.contains(&position) { + direction = direction.rotate_right(); + infected.remove(&position); + } else { + direction = direction.rotate_left(); + infected.insert(position); + infections_caused += 1; + } + } + else { + if weakened.contains(&position) { + infected.insert(position); + weakened.remove(&position); + infections_caused += 1; + } else if infected.contains(&position) { + direction = direction.rotate_right(); + flagged.insert(position); + infected.remove(&position); + } else if flagged.contains(&position) { + direction = direction.rotate_right().rotate_right(); + flagged.remove(&position); + } else { + direction = direction.rotate_left(); + weakened.insert(position); + } + } + position = position.shift(&direction); + } + + println!("Infections caused {}", infections_caused); + +} diff --git a/2017/src/bin/day_23.rs b/2017/src/bin/day_23.rs new file mode 100644 index 0000000..d199af0 --- /dev/null +++ b/2017/src/bin/day_23.rs @@ -0,0 +1,168 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::str::FromStr; + +fn main() { + let args = AdventArgs::init(); + + if args.part == 1 { + let instructions: Vec<Instruction> = args.input.iter() + .map(|line| line.parse().unwrap()) + .collect(); + + let mut program = Program::new(instructions.clone(), args.part == 1); + let mul_called = program.run(); + println!("Mult called {} times", mul_called); + } else { + println!("Result is {}", run_as_rust()); + } + +} + +fn to_register(c: char) -> usize { + (c as u32 - 'a' as u32) as usize +} + +struct Program { + instructions: Vec<Instruction>, + registers: [i64; 8], + pc: i64 +} + +impl Program { + fn new(instructions: Vec<Instruction>, part1: bool) -> Program { + let mut reg = [0; 8]; + if part1 == false { + reg[0] = 1; + } + Program { + instructions: instructions, + registers: reg, + pc: 0 + } + } + fn run(&mut self) -> u32 { + use Instruction::*; + + let mut mul_called = 0; + + while self.pc >= 0 && (self.pc as usize) < self.instructions.len() { + let ins = self.instructions[self.pc as usize].clone(); + + match ins { + Set(x, y) => { + let y_val = self.get(y); + self.set(x, y_val); + }, + Sub(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val - y_val); + }, + Mul(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val * y_val); + mul_called += 1; + }, + Jnz(x, y) => { + if self.get(x) != 0 { + self.pc = self.pc + self.get(y) - 1; + } + }, + } + self.pc += 1; + } + + mul_called + } + + fn get(&self, register: Data) -> i64 { + use Data::*; + match register { + Register(c) => self.registers[c], + Literal(i) => i + } + } + + fn set(&mut self, register: Data, value: i64) { + use Data::*; + match register { + Register(c) => { + self.registers[c] = value; + }, + _ => {} + } + } +} + +#[derive(Debug, Clone)] +enum Instruction { + Set(Data, Data), + Sub(Data, Data), + Mul(Data, Data), + Jnz(Data, Data) +} + +impl FromStr for Instruction { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + use Instruction::*; + + let mut str_iter = s.split_whitespace(); + let ins = str_iter.next(); + let x = str_iter.next().map(|x| x.parse::<Data>()); + let y = str_iter.next().map(|x| x.parse::<Data>()); + + match (ins, x, y) { + (Some("set"), Some(Ok(x)), Some(Ok(y))) => Ok(Set(x, y)), + (Some("sub"), Some(Ok(x)), Some(Ok(y))) => Ok(Sub(x, y)), + (Some("mul"), Some(Ok(x)), Some(Ok(y))) => Ok(Mul(x, y)), + (Some("jnz"), Some(Ok(x)), Some(Ok(y))) => Ok(Jnz(x, y)), + (_, _, _) => Err(format!("Unknown instruction {}", s)) + } + } +} + +#[derive(Debug, Clone, Copy)] +enum Data { + Literal(i64), + Register(usize) +} + +impl FromStr for Data { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + use Data::*; + + match (s.parse(), s.chars().next()) { + (Ok(num), _) => Ok(Literal(num)), + (Err(_), Some(c)) => Ok(Register(to_register(c))), + (_, _) => Err(format!("Invalid data {}", s)) + } + } +} + + +fn run_as_rust() -> i64 { + let mut h: i64 = 0; + let mut b: i64 = 99 * 100 + 100000; + let c: i64 = b + 17000; + + while b <= c { + let f = (2..b).any(|d| { + b % d == 0 + }); + + if f { + h += 1; + } + + b += 17; + } + + h +} diff --git a/2017/src/bin/day_24.rs b/2017/src/bin/day_24.rs new file mode 100644 index 0000000..eb7fddd --- /dev/null +++ b/2017/src/bin/day_24.rs @@ -0,0 +1,60 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + let components: Vec<Component> = args.input.iter() + .map(|line| { + let mut split = line.split('/'); + Component { + a: split.next().unwrap().parse().unwrap(), + b: split.next().unwrap().parse().unwrap() + } + }) + .collect(); + + if args.part == 1 { + let strongest = build_strongest(0, components); + println!("{}", strongest); + } else { + let (strongest, longest) = build_longest(0, components); + println!("length: {}, strength: {}", longest, strongest); + } +} + +fn build_strongest(start: u32, components: Vec<Component>) -> u32 { + components.iter().enumerate() + .filter(|&(_, c)| c.a == start || c.b == start) + .map(|(i, c)| { + let end = if c.a == start { c.b } else { c.a }; + let mut subset = components.clone(); + subset.remove(i); + c.strength() + build_strongest(end, subset) + }).max().unwrap_or(0) +} + +fn build_longest(start: u32, components: Vec<Component>) -> (u32, u32) { + components.iter().enumerate() + .filter(|&(_, c)| c.a == start || c.b == start) + .map(|(i, c)| { + let end = if c.a == start { c.b } else { c.a }; + let mut subset = components.clone(); + subset.remove(i); + let (s, l) = build_longest(end, subset); + (c.strength() + s, 1 + l) + }).max_by(|&(s1, l1), &(s2, l2)| { + l1.cmp(&l2).then(s1.cmp(&s2)) + }).unwrap_or((0, 0)) +} + +#[derive(Debug, Clone)] +struct Component { + a: u32, + b: u32 +} + +impl Component { + fn strength(&self) -> u32 { + self.a + self.b + } +} diff --git a/2017/src/bin/day_25.rs b/2017/src/bin/day_25.rs new file mode 100644 index 0000000..8d7b0da --- /dev/null +++ b/2017/src/bin/day_25.rs @@ -0,0 +1,125 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +use std::slice::Iter; +use std::collections::HashSet; + +fn main() { + let args = AdventArgs::init(); + let program = parse(&args.input); + + let mut position: i32 = 0; + let mut state = program.state(program.start).expect("Started out of program bounds"); + let mut tape = HashSet::new(); + + for _ in 0..program.iterations { + let instruction = if tape.contains(&position) { + &state.if1 + } else { + &state.if0 + }; + if instruction.write { + tape.insert(position); + } else { + tape.remove(&position); + } + position += instruction.offset; + state = program.state(instruction.next).expect("Redirected to unknown state"); + } + + println!("{}", tape.len()); +} + +fn parse(input: &Vec<String>) -> Program { + let state_re = Regex::new(r"state (\w)").unwrap(); + let iterations_re = Regex::new(r"(\d+) steps").unwrap(); + let write_re = Regex::new(r"Write the value (\d)").unwrap(); + let move_re = Regex::new(r"Move one slot to the (\w+)").unwrap(); + + let mut lines = input.iter(); + let start = parse_char(&mut lines, &state_re); + let iterations = parse_number(&mut lines, &iterations_re); + + let mut states = Vec::new(); + while let Some(heading) = lines.next() { + states.push(State { + id: state_re.captures(heading).unwrap()[1].chars().next().unwrap(), + if0: parse_instruction(&mut lines, &write_re, &move_re, &state_re), + if1: parse_instruction(&mut lines, &write_re, &move_re, &state_re) + }); + } + + Program { + start: start, + iterations: iterations, + states: states + } +} + +fn parse_char(lines: &mut Iter<String>, re: &Regex) -> char { + re.captures( + lines.next().unwrap() + ).unwrap()[1].chars().next().unwrap() +} + +fn parse_number(lines: &mut Iter<String>, re: &Regex) -> u32 { + re.captures( + lines.next().unwrap() + ).unwrap()[1].parse().unwrap() +} +fn parse_direction(lines: &mut Iter<String>, re: &Regex) -> i32 { + if re.captures( + lines.next().unwrap() + ).unwrap()[1] == *"left" { + -1 + } else { + 1 + } +} + +fn parse_bool(lines: &mut Iter<String>, re: &Regex) -> bool { + re.captures( + lines.next().unwrap() + ).unwrap()[1] == *"1" +} + +fn parse_instruction(lines: &mut Iter<String>, write_re: &Regex, offset_re: &Regex, next_re: &Regex) -> Instruction { + lines.next(); + Instruction { + write: parse_bool(lines, &write_re), + offset: parse_direction(lines, &offset_re), + next: parse_char(lines, &next_re) + } +} + +#[derive(Debug)] +struct Program { + start: char, + iterations: u32, + states: Vec<State> +} + +impl Program { + fn state(&self, i: char) -> Option<&State> { + self.states.iter().find(|s| s.id == i) + } +} + +#[derive(Debug)] +struct State { + id: char, + if0: Instruction, + if1: Instruction +} + +#[derive(Debug)] +struct Instruction { + write: bool, + offset: i32, + next: char +} + + diff --git a/2017/src/bin/day_3.rs b/2017/src/bin/day_3.rs new file mode 100644 index 0000000..69ded88 --- /dev/null +++ b/2017/src/bin/day_3.rs @@ -0,0 +1,62 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::collections::HashMap; + +fn main() { + use Direction::*; + + let args = AdventArgs::init(); + let input = args.one_number_input().unwrap(); + + let mut memory: HashMap<Point, i32> = HashMap::new(); + let mut last_allocated = 1; + + let mut current = Point { + x: 0, + y: 0 + }; + memory.insert(current, last_allocated); + + let mut steps_per_direction = 1; + let mut steps_to_next_turn = 1; + let mut turns_to_spiral_increase = 2; + + let mut current_index = 1; + let mut current_direction = Right; + + while (args.part == 1 && current_index != input) || (args.part == 2 && last_allocated < input) { + current = current.shift(¤t_direction); + current_index += 1; + + steps_to_next_turn -= 1; + if steps_to_next_turn == 0 { + current_direction = current_direction.rotate_left(); + turns_to_spiral_increase -= 1; + if turns_to_spiral_increase == 0 { + steps_per_direction += 1; + turns_to_spiral_increase = 2; + } + + steps_to_next_turn = steps_per_direction; + } + + if args.part == 2 { + last_allocated = memory.get(¤t.left()).cloned().unwrap_or(0) + + memory.get(¤t.right()).cloned().unwrap_or(0) + + memory.get(¤t.up()).cloned().unwrap_or(0) + + memory.get(¤t.down()).cloned().unwrap_or(0) + + memory.get(¤t.up().left()).cloned().unwrap_or(0) + + memory.get(¤t.up().right()).cloned().unwrap_or(0) + + memory.get(¤t.down().left()).cloned().unwrap_or(0) + + memory.get(¤t.down().right()).cloned().unwrap_or(0); + + memory.insert(current, last_allocated); + } + } + + println!("{:?}", current); + println!("Distance: {}", current.x.abs() + current.y.abs()); + println!("Last Allocated Value: {}", last_allocated); + +} diff --git a/2017/src/bin/day_4.rs b/2017/src/bin/day_4.rs new file mode 100644 index 0000000..a9a098a --- /dev/null +++ b/2017/src/bin/day_4.rs @@ -0,0 +1,37 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let valid_count = args.input.iter() + .map(|line| { + let words = line.split_whitespace().map(|x| x.to_string()).collect::<Vec<String>>(); + if args.part == 1 { + let mut deduped_words = words.clone(); + deduped_words.sort(); + deduped_words.dedup(); + words.len() == deduped_words.len() + } else { + !words.iter().enumerate().any(|(i, word1)| { + words.iter().enumerate().any(|(j, word2)| { + i != j && is_anagram(word1, word2) + }) + }) + } + }) + .filter(|&valid| valid) + .count(); + + println!("Valid count: {}", valid_count); +} + +fn is_anagram(word1: &str, word2: &str) -> bool { + let mut chars1 = word1.chars().collect::<Vec<_>>(); + chars1.sort(); + let mut chars2 = word2.chars().collect::<Vec<_>>(); + chars2.sort(); + + chars1.len() == chars2.len() && + chars1.iter().zip(chars2.iter()).all(|(c1, c2)| c1 == c2) +} diff --git a/2017/src/bin/day_5.rs b/2017/src/bin/day_5.rs new file mode 100644 index 0000000..49bdbd1 --- /dev/null +++ b/2017/src/bin/day_5.rs @@ -0,0 +1,25 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let mut jumps: Vec<i32> = args.input.iter().map(|line| line.parse().unwrap()).collect(); + let mut steps_taken = 0; + let mut current_position: i32 = 0; + + while current_position >= 0 && (current_position as usize) < jumps.len() { + let previous_position = current_position; + current_position += jumps[current_position as usize]; + + if args.part == 1 || jumps[previous_position as usize] < 3 { + jumps[previous_position as usize] += 1; + } else { + jumps[previous_position as usize] -= 1; + } + + steps_taken += 1; + } + + println!("Escaped in {} jumps", steps_taken); +} diff --git a/2017/src/bin/day_6.rs b/2017/src/bin/day_6.rs new file mode 100644 index 0000000..be9a515 --- /dev/null +++ b/2017/src/bin/day_6.rs @@ -0,0 +1,61 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let init_layout = parse_space_separated_ints(&args.input[0]).unwrap(); + + let mut layouts = vec!(init_layout); + let mut balances = 0; + let mut cycle_found = false; + let mut cycle_size = 0; + + while !cycle_found { + balances += 1; + let new_layout = find_next_layout(&layouts); + + if let Some(index) = layouts.iter().position(|x| *x == new_layout) { + cycle_found = true; + cycle_size = layouts.len() - index; + }; + + layouts.push(new_layout); + } + + if args.part == 1 { + println!("Did {} rebalances", balances); + } else { + println!("Cycle was {} long", cycle_size); + } +} + +fn find_next_layout(layouts: &Vec<Vec<i32>>) -> Vec<i32> { + let previous_layout = layouts.last().unwrap(); + rebalance(&previous_layout) +} + +fn rebalance(layout: &Vec<i32>) -> Vec<i32> { + let biggest_container = layout.iter() + .enumerate() + .max_by(|&(ai, &asize), &(bi, &bsize)| { + asize.cmp(&bsize).then(bi.cmp(&ai)) + }) + .map(|(i, _)| i) + .unwrap(); + + + let mut new_layout = layout.clone(); + let mut to_redistribute = new_layout[biggest_container]; + new_layout[biggest_container] = 0; + let mut target = (biggest_container + 1) % layout.len(); + + while to_redistribute > 0 { + new_layout[target] += 1; + to_redistribute -= 1; + target = (target + 1) % layout.len(); + } + + new_layout +} + diff --git a/2017/src/bin/day_7.rs b/2017/src/bin/day_7.rs new file mode 100644 index 0000000..3c3b185 --- /dev/null +++ b/2017/src/bin/day_7.rs @@ -0,0 +1,62 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +fn main() { + let args = AdventArgs::init(); + + let names_re = Regex::new(r"[a-z]+").unwrap(); + let weight_re = Regex::new(r"\d+").unwrap(); + + let tree: Vec<(String, Vec<String>, i32)> = args.input.iter() + .map(|line| { + let mut matches = names_re.find_iter(line); + let base = matches.next().unwrap().as_str().to_string(); + let leaves = matches.map(|m| m.as_str().to_string()).collect(); + let weight = weight_re.find(line).unwrap().as_str().parse().unwrap(); + (base, leaves, weight) + }).collect(); + + let mut possible_roots: Vec<String> = tree.iter().map(|&(ref id, _, _)| id.clone()).collect(); + for &(_, ref leaves, _) in &tree { + for leaf in leaves { + let index = possible_roots.iter().position(|x| x == leaf).unwrap(); + possible_roots.remove(index); + } + } + let root = &possible_roots[0]; + + if args.part == 1 { + println!("{:?}", root); + } else { + find_unweighted_plate(&root, &tree); + } +} + +fn find_unweighted_plate(root: &String, tree: &Vec<(String, Vec<String>, i32)>) -> i32 { + let root_node = find_node(&root, &tree); + let &(_, ref leaves, ref weight) = root_node; + let leaf_weights: Vec<i32> = leaves.iter().map(|leaf| { + find_unweighted_plate(&leaf, &tree) + }).collect(); + + if let Some(base_leaf_weight) = leaf_weights.first() { + if let Some(different_leaf_weight) = leaf_weights.iter().find(|&w| w != base_leaf_weight) { + println!("Unbalanced plate is off by {}", (different_leaf_weight-base_leaf_weight).abs()); + println!("Towers on plate: {:?} weigh {:?}", leaves, leaf_weights); + // This still needs some manual work to get to the puzzle + // output. Take the first unbalanced plate, figure out + // which is the unbalanced tower visually, find its + // individual weight in the file, and add/subtract as + // necessary. + } + } + + leaf_weights.iter().sum::<i32>() + weight +} + +fn find_node<'a>(name: &String, tree: &'a Vec<(String, Vec<String>, i32)>) -> &'a (String, Vec<String>, i32) { + tree.iter().find(|&&(ref id, _, _)| id == name).unwrap() +} diff --git a/2017/src/bin/day_8.rs b/2017/src/bin/day_8.rs new file mode 100644 index 0000000..0359747 --- /dev/null +++ b/2017/src/bin/day_8.rs @@ -0,0 +1,99 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +#[macro_use] +extern crate lazy_static; + +use std::str::FromStr; +use std::collections::HashMap; +use std::cmp; + +fn main() { + let args = AdventArgs::init(); + + let instructions: Vec<Instruction> = args.input.iter() + .map(|line| line.parse().unwrap()) + .collect(); + + let mut memory: HashMap<String, i32> = HashMap::new(); + let mut max_mem_ever = 0; + + for instruction in instructions { + if instruction.is_true(&memory) { + instruction.execute(&mut memory); + max_mem_ever = cmp::max(max_mem_ever, memory.values().max().cloned().unwrap_or(0)); + } + } + + let max_mem = memory.values().max().cloned().unwrap_or(0); + + if args.part == 1 { + println!("Highest value in memory is {}", max_mem); + } else { + println!("Highest value in memory ever is {}", max_mem_ever); + } +} + + +struct Instruction { + target_register: String, + action: String, + value: i32, + condition_register: String, + condition: String, + condition_value: i32 +} + +#[derive(Debug)] +struct InstructionParseError { + reason: String +} + +impl FromStr for Instruction { + type Err = InstructionParseError; + fn from_str(s: &str) -> Result<Self, InstructionParseError> { + lazy_static!{ + static ref INSTRUCTION_RE: Regex = Regex::new(r"^(\w+) (inc|dec) (-?\d+) if (\w+) (<|>|<=|>=|==|!=) (-?\d+)").unwrap(); + } + match INSTRUCTION_RE.captures(s) { + Some(caps) => Ok(Instruction{ + target_register: caps[1].to_string(), + action: caps[2].to_string(), + value: caps[3].parse().unwrap(), + condition_register: caps[4].to_string(), + condition: caps[5].to_string(), + condition_value: caps[6].parse().unwrap() + }), + None => Err(InstructionParseError { + reason: format!("{} did not match regex", s) + }) + } + } +} + +impl Instruction { + fn is_true(&self, memory: &HashMap<String, i32>) -> bool { + let mem = memory.get(&self.condition_register).cloned().unwrap_or(0); + match self.condition.as_ref() { + "<" => mem < self.condition_value, + ">" => mem > self.condition_value, + "<=" => mem <= self.condition_value, + ">=" => mem >= self.condition_value, + "==" => mem == self.condition_value, + "!=" => mem != self.condition_value, + _ => panic!("Unknown condition: {}", self.condition) + } + } + + fn execute(&self, memory: &mut HashMap<String, i32>) { + let modifier = if self.action == "inc" { + self.value + } else { + -self.value + }; + *memory.entry(self.target_register.clone()).or_insert(0) += modifier; + } +} diff --git a/2017/src/bin/day_9.rs b/2017/src/bin/day_9.rs new file mode 100644 index 0000000..e0ca0c0 --- /dev/null +++ b/2017/src/bin/day_9.rs @@ -0,0 +1,42 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let mut cancelled = false; + let mut in_garbage = false; + + let mut depth = 0; + let mut total_score = 0; + let mut total_garbage = 0; + + for c in args.input[0].chars() { + if cancelled { + cancelled = false; + } else if c == '!' { + cancelled = true; + } else if in_garbage { + if c == '>' { + in_garbage = false; + } else { + total_garbage += 1; + } + } else { + if c == '<' { + in_garbage = true; + } else if c == '{' { + depth += 1; + total_score += depth; + } else if c == '}' { + depth -= 1; + } + } + } + + if args.part == 1 { + println!("Total score is {}", total_score); + } else { + println!("Total garbage is {}", total_garbage); + } +} diff --git a/2017/src/lib.rs b/2017/src/lib.rs new file mode 100644 index 0000000..53d7d20 --- /dev/null +++ b/2017/src/lib.rs @@ -0,0 +1,225 @@ +extern crate structopt; +#[macro_use] +extern crate structopt_derive; +use structopt::StructOpt; + +use std::path::PathBuf; +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::process; + +#[derive(StructOpt, Debug)] +#[structopt(name = "AOC2017", about = "An Advent of Code CLI arguments object.")] +struct AdventCli { + #[structopt(help = "Which part of the puzzle you are solving")] + part: u32, + + #[structopt(help = "Input file", parse(from_os_str))] + input: PathBuf +} + +pub struct AdventArgs { + pub part: u32, + pub input: Vec<String> +} + +impl AdventArgs { + pub fn init() -> AdventArgs { + let opt = AdventCli::from_args(); + let input = match AdventArgs::read_file(&opt.input) { + Ok(input) => input, + Err(error) => { + // Typically I would think of exiting the program like + // this to be bad form, but in this case I'm matching the + // interface of StructOpt: if the input parameters were + // invalid, just quit now with a nice message. + eprintln!("Error reading file: {}", error); + process::exit(1); + } + }; + AdventArgs { + part: opt.part, + input: input + } + } + + fn read_file(file: &PathBuf) -> Result<Vec<String>, std::io::Error> { + let file = File::open(file)?; + let file_reader = BufReader::new(file); + file_reader.lines() + .collect::<Result<Vec<_>, _>>() + .map(AdventArgs::preprocess_file_lines) + } + + fn preprocess_file_lines(lines: Vec<String>) -> Vec<String> { + lines.iter() + .filter(|line| line.len() > 0) + .map(|line| line.trim_right().to_string()) + .collect() + } + + pub fn one_number_input(&self) -> Result<i32, std::num::ParseIntError> { + self.input[0].parse() + } + pub fn number_per_line_input(&self) -> Result<Vec<i32>, std::num::ParseIntError> { + self.input.iter().map(|line| line.parse()).collect() + } +} + +pub fn parse_space_separated_ints(line: &String) -> Result<Vec<i32>, std::num::ParseIntError> { + line.split_whitespace() + .map(|x| x.parse::<i32>()) + .collect() +} + + +#[derive(Hash, Eq, PartialEq, Debug, Clone, Copy)] +pub struct Point { + pub x: i32, + pub y: i32 +} + +impl Point { + pub fn up(&self) -> Point { + Point { + y: self.y-1, + ..*self + } + } + + pub fn down(&self) -> Point { + Point { + y: self.y+1, + ..*self + } + } + + pub fn left(&self) -> Point { + Point { + x: self.x-1, + ..*self + } + } + + pub fn right(&self) -> Point { + Point { + x: self.x+1, + ..*self + } + } + + pub fn shift(&self, dir: &Direction) -> Point { + use Direction::*; + + match *dir { + Right => self.right(), + Left => self.left(), + Up => self.up(), + Down => self.down() + } + } +} + +#[derive(Debug)] +pub enum Direction { + Left, + Up, + Down, + Right +} + +impl Direction { + pub fn rotate_left(&self) -> Direction { + use Direction::*; + match *self { + Right => Up, + Up => Left, + Left => Down, + Down => Right + } + } + + pub fn rotate_right(&self) -> Direction { + use Direction::*; + match *self { + Right => Down, + Up => Right, + Left => Up, + Down => Left + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Point3d { + pub x: i32, + pub y: i32, + pub z: i32 +} + +impl std::ops::Add for Point3d { + type Output = Point3d; + + fn add(self, other: Point3d) -> Point3d { + Point3d { + x: self.x + other.x, + y: self.y + other.y, + z: self.z + other.z + } + } + +} + +impl Point3d { + pub fn manhattan_distance(&self) -> i32 { + self.x.abs() + self.y.abs() + self.z.abs() + } +} + +pub fn knot_hash(input: &String) -> String { + let suffix: [usize; 5] = [17, 31, 73, 47, 23]; + let lengths: Vec<usize> = input.as_bytes() + .iter().map(|&x| x as usize) + .chain(suffix.iter().cloned()) + .collect(); + + let mut position = 0; + let mut list: Vec<u32> = (0..256).collect(); + + for i in 0..64 { + let skip = lengths.len() * i; + knot_hash_round(&mut list, &lengths, &mut position, skip); + } + + let mut current_char = 0; + let mut result = String::new(); + for (i, l) in list.iter().enumerate() { + current_char = current_char ^ l; + if i % 16 == 15 { + result.push_str(&format!("{:02x}", current_char)); + current_char = 0; + } + } + result +} + +fn knot_hash_round(list: &mut Vec<u32>, lengths: &Vec<usize>, position: &mut usize, skip: usize) { + for (inner_skip, &length) in lengths.iter().enumerate() { + knot_hash_reverse_segment(list, *position, length); + *position = (*position + length + skip + inner_skip) % list.len(); + } +} + +fn knot_hash_reverse_segment(list: &mut Vec<u32>, position: usize, length: usize) { + let mut a = position; + let mut b = position + length - 1; + let len = list.len(); + while a < b { + list.swap(a%len, b%len); + + a += 1; + b -= 1; + } +} + diff --git a/2018/Cargo.toml b/2018/Cargo.toml new file mode 100644 index 0000000..b1342d1 --- /dev/null +++ b/2018/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "advent_of_code_2018" +version = "0.1.0" +authors = ["Justin Worthe <justin@worthe-it.co.za>"] + +[dependencies] +im-rc = "12.2.0" +arrayvec = "0.4.9" + +[profile.release] +debug = true diff --git a/2018/inputs/1.txt b/2018/inputs/1.txt new file mode 100644 index 0000000..079567f --- /dev/null +++ b/2018/inputs/1.txt @@ -0,0 +1,968 @@ ++11 ++9 ++15 +-17 ++8 ++16 ++5 ++13 ++8 +-6 ++12 +-17 +-16 ++13 ++16 +-15 +-5 ++11 ++19 ++5 +-8 ++20 ++18 ++15 +-4 +-12 ++8 ++2 ++15 ++12 +-13 +-4 +-1 +-14 +-15 +-6 +-9 +-13 ++18 ++13 ++6 +-8 +-3 +-19 ++8 ++17 ++8 ++5 +-11 ++15 +-7 ++9 +-18 +-9 ++17 +-14 +-19 ++4 +-6 ++4 ++1 +-12 ++4 +-1 +-9 ++4 ++19 ++20 ++11 ++8 ++19 +-13 ++17 ++6 ++8 +-11 ++5 ++9 +-15 ++17 +-12 ++6 +-19 +-2 ++17 +-18 ++7 +-5 ++19 ++15 ++5 +-6 ++2 ++5 ++18 ++11 ++2 ++5 +-14 ++17 ++17 ++1 ++17 +-9 +-1 ++5 +-11 ++5 +-17 ++2 ++14 ++16 +-3 ++17 ++18 ++1 +-16 ++19 +-11 +-10 ++3 ++8 ++17 ++19 +-18 ++6 +-1 +-2 ++14 +-2 ++12 ++11 ++1 +-19 +-1 ++18 ++13 +-6 +-10 +-13 ++12 +-11 ++19 ++14 ++17 +-2 +-18 +-4 ++11 +-12 +-2 +-21 ++7 +-1 +-5 +-13 +-18 +-18 +-7 ++9 ++12 ++6 +-12 ++20 +-19 ++6 +-19 ++3 +-16 ++20 +-17 +-8 ++4 ++8 +-21 ++18 +-6 +-13 ++2 ++5 +-14 +-16 +-19 +-17 ++4 +-15 +-11 +-3 ++6 ++13 ++18 +-16 +-16 +-15 +-15 +-2 ++1 +-3 ++13 ++25 ++1 ++14 +-8 +-8 +-19 ++7 ++11 ++20 ++5 +-9 ++8 ++19 +-9 ++3 ++1 ++1 +-12 ++18 ++15 +-5 ++11 +-1 ++18 +-2 +-18 +-14 +-1 +-16 ++12 ++12 +-20 ++10 ++25 +-13 +-17 +-20 +-13 ++11 +-40 +-19 ++5 +-21 +-9 +-15 +-6 ++3 ++13 +-5 +-2 ++33 ++3 +-7 ++42 ++32 +-13 ++2 ++37 +-1 +-20 ++30 ++3 ++8 ++10 ++11 +-5 +-26 ++35 ++16 +-12 ++9 ++16 ++18 +-13 +-15 ++19 ++6 ++18 ++16 ++11 ++16 +-2 +-10 ++1 +-2 ++17 ++7 +-1 ++17 ++6 ++15 ++7 +-5 +-6 ++9 +-4 +-17 +-14 +-1 +-21 +-2 ++15 ++3 ++8 +-18 +-17 +-14 ++6 +-17 ++20 ++13 ++14 +-1 +-1 ++3 +-11 ++19 ++19 ++7 +-18 +-9 ++11 +-12 ++11 ++4 ++2 ++8 +-2 ++6 +-20 ++5 ++6 +-13 +-8 ++6 ++11 ++8 ++2 ++7 ++11 +-7 ++18 ++11 ++15 +-16 +-18 ++6 ++10 ++6 ++15 ++13 ++4 ++4 ++14 ++14 +-47 ++17 +-7 +-20 +-1 ++19 ++16 +-23 +-13 +-17 ++13 +-8 ++6 +-20 ++4 ++15 ++4 ++19 ++19 +-7 +-24 +-17 +-19 +-2 ++19 +-13 ++8 +-4 +-19 +-9 ++29 ++21 +-29 ++2 ++15 ++22 ++1 ++21 +-13 +-14 ++12 +-57 +-5 +-49 +-10 +-19 +-19 +-6 ++7 ++21 +-12 +-13 +-13 ++4 +-15 ++9 ++21 +-7 ++19 ++32 ++31 +-27 +-21 ++25 +-101 ++69 +-75 ++26 +-22 +-45 +-30 ++5 +-40 +-15 +-880 +-60727 ++14 +-13 +-18 ++7 ++2 +-5 ++6 ++14 ++5 ++5 +-18 +-15 +-9 ++7 +-10 ++19 ++4 ++7 ++6 ++3 ++21 ++2 ++5 +-19 ++15 +-11 +-19 +-7 +-1 +-16 ++4 +-12 +-15 ++3 ++5 +-6 +-14 ++11 +-16 +-7 +-15 ++8 ++12 +-2 +-9 +-12 +-17 ++19 +-5 +-19 ++16 +-10 +-13 +-14 +-1 +-10 +-18 +-6 +-11 ++8 +-11 ++4 ++14 ++9 ++8 +-18 +-9 ++8 +-19 +-5 +-14 ++13 ++19 ++13 ++16 ++19 +-4 +-4 ++3 ++19 +-4 +-7 +-15 ++6 +-9 +-15 ++12 +-14 ++6 +-17 ++9 ++13 +-4 +-20 ++17 +-9 +-12 ++16 ++6 +-9 ++19 ++10 ++11 ++17 +-19 +-1 ++12 ++12 ++1 +-6 +-1 ++4 +-12 ++11 +-14 ++19 +-3 +-9 +-6 +-23 +-2 +-13 ++18 +-2 ++10 ++2 ++8 +-9 +-20 +-17 +-21 +-14 ++11 +-5 +-15 ++2 +-9 ++4 +-7 +-12 ++9 +-1 +-11 ++1 +-10 ++11 +-17 +-10 +-17 +-3 +-10 ++11 ++15 +-19 +-14 ++1 ++2 ++18 ++17 ++3 ++17 +-18 +-15 ++2 +-3 +-14 ++9 ++9 ++6 +-18 ++13 +-21 +-18 ++12 ++7 ++13 +-11 ++20 ++12 ++1 ++15 +-14 ++4 ++11 ++18 +-2 +-7 +-12 +-11 ++5 ++10 ++6 ++8 ++18 ++6 +-13 ++19 +-5 +-3 ++14 +-3 +-20 +-3 +-3 ++16 +-15 +-12 ++8 +-24 +-16 +-13 +-3 ++13 ++6 +-12 +-31 ++7 +-18 ++17 +-13 ++1 +-15 ++16 ++4 +-1 +-17 +-1 ++16 +-4 ++13 ++8 ++3 ++33 ++8 +-6 ++20 +-4 ++2 ++13 +-29 +-17 +-22 +-24 +-5 ++2 +-12 +-1 ++2 +-15 ++2 +-11 ++6 ++1 +-2 ++5 ++4 +-22 ++5 ++19 +-13 +-7 ++16 ++6 ++2 +-22 ++19 ++9 ++8 +-9 +-12 +-18 +-13 ++1 ++5 +-9 ++10 +-11 +-10 ++16 +-15 +-2 +-16 ++1 +-15 +-17 +-3 ++6 ++11 ++4 ++11 +-16 +-3 ++6 +-1 ++13 ++18 ++6 +-2 +-6 +-4 +-5 ++20 ++19 +-8 ++1 +-13 ++16 ++1 ++10 +-25 +-19 +-4 ++9 +-8 ++17 ++6 +-19 +-2 ++5 ++12 ++7 +-21 +-12 ++3 +-7 +-11 +-3 +-18 ++2 ++12 ++20 +-23 +-19 +-17 ++9 +-19 ++1 +-14 +-5 +-4 +-9 ++17 ++4 ++3 ++15 +-13 ++1 +-12 +-17 ++8 ++8 +-20 +-17 ++15 +-16 ++10 ++7 ++2 +-10 +-2 ++8 ++19 +-6 +-17 +-8 ++9 ++17 ++25 +-5 +-18 ++4 ++18 ++9 ++18 +-14 +-2 ++11 ++14 +-17 +-15 ++38 ++12 +-2 ++14 ++4 ++21 ++16 ++12 ++15 ++23 +-1 ++6 ++9 +-24 +-6 +-13 +-3 ++33 +-13 ++62 ++81 ++11 +-5 +-27 ++9 +-7 ++20 +-19 +-4 ++27 ++28 +-29 ++82 ++11 +-10 ++8 +-22 ++42 ++34 +-24 +-15 ++19 +-66 +-70 +-34 +-18 +-548 ++408 +-1249 +-60542 ++6 +-17 +-4 ++6 +-7 ++3 ++14 ++2 ++15 +-6 +-5 ++19 +-17 +-10 ++6 +-11 ++2 +-4 ++10 +-5 +-11 +-13 +-12 +-14 +-10 +-9 ++17 ++9 ++15 ++1 +-10 +-10 ++14 ++16 +-17 +-15 ++7 +-6 +-16 +-10 ++15 +-2 +-7 +-3 +-5 +-14 +-8 +-9 ++16 ++7 ++17 +-22 ++12 +-16 ++18 ++5 ++15 ++10 ++20 ++11 +-5 ++12 +-16 ++8 +-16 ++13 ++14 +-5 +-12 +-9 +-16 +-5 ++16 +-18 ++21 +-9 +-13 +-8 +-10 ++14 ++18 +-17 +-16 ++8 +-15 ++2 +-4 ++3 +-21 ++17 +-16 ++18 ++18 +-3 +-21 ++1 +-19 +-3 +-2 +-4 +-5 +-20 +-19 ++6 +-19 ++3 +-12 ++124236 diff --git a/2018/inputs/10.txt b/2018/inputs/10.txt new file mode 100644 index 0000000..3c77538 --- /dev/null +++ b/2018/inputs/10.txt @@ -0,0 +1,369 @@ +position=<-30052, -9918> velocity=< 3, 1> +position=< 20349, -50260> velocity=<-2, 5> +position=< 40505, -40169> velocity=<-4, 4> +position=< 30444, 50599> velocity=<-3, -5> +position=< 40549, -50259> velocity=<-4, 5> +position=< 30454, -30087> velocity=<-3, 3> +position=< 50623, 20347> velocity=<-5, -2> +position=< 30439, -50262> velocity=<-3, 5> +position=< 50623, 40516> velocity=<-5, -4> +position=<-40143, -30090> velocity=< 4, 3> +position=< 50594, 50602> velocity=<-5, -5> +position=< -9884, -30087> velocity=< 1, 3> +position=<-19958, -40168> velocity=< 2, 4> +position=< 20357, 40513> velocity=<-2, -4> +position=<-50240, 30431> velocity=< 5, -3> +position=< 20351, 40516> velocity=<-2, -4> +position=<-50257, -20005> velocity=< 5, 2> +position=<-30073, 10253> velocity=< 3, -1> +position=<-50265, 50597> velocity=< 5, -5> +position=<-40154, 50601> velocity=< 4, -5> +position=<-19987, -40168> velocity=< 2, 4> +position=<-19987, -30087> velocity=< 2, 3> +position=<-50257, 30425> velocity=< 5, -3> +position=< 40558, 30425> velocity=<-4, -3> +position=<-19990, 10256> velocity=< 2, -1> +position=<-19979, 30425> velocity=< 2, -3> +position=<-19976, -50254> velocity=< 2, 5> +position=< 30446, -40172> velocity=<-3, 4> +position=<-40157, 40515> velocity=< 4, -4> +position=<-40143, 20342> velocity=< 4, -2> +position=< 30467, -50255> velocity=<-3, 5> +position=<-30040, 50606> velocity=< 3, -5> +position=<-30037, 50605> velocity=< 3, -5> +position=< 20382, -30086> velocity=<-2, 3> +position=< 50594, 10262> velocity=<-5, -1> +position=< 20342, 40515> velocity=<-2, -4> +position=<-19963, -50258> velocity=< 2, 5> +position=<-40135, 50599> velocity=< 4, -5> +position=< 40558, 10262> velocity=<-4, -1> +position=< 20366, -40177> velocity=<-2, 4> +position=< -9888, -9919> velocity=< 1, 1> +position=<-19998, 40511> velocity=< 2, -4> +position=< 50608, 40516> velocity=<-5, -4> +position=< 10263, 40520> velocity=<-1, -4> +position=< 40521, -40171> velocity=<-4, 4> +position=< 30427, -20005> velocity=<-3, 2> +position=< 20333, -9916> velocity=<-2, 1> +position=< -9909, -9913> velocity=< 1, 1> +position=< 50628, 40511> velocity=<-5, -4> +position=< 50610, 30430> velocity=<-5, -3> +position=<-50248, 30433> velocity=< 5, -3> +position=< 50612, 50599> velocity=<-5, -5> +position=<-50253, -40170> velocity=< 5, 4> +position=< -9880, 40513> velocity=< 1, -4> +position=< 20362, 10256> velocity=<-2, -1> +position=< -9877, -30087> velocity=< 1, 3> +position=<-40182, -30082> velocity=< 4, 3> +position=<-50240, -20003> velocity=< 5, 2> +position=<-40138, 10255> velocity=< 4, -1> +position=<-50221, 20348> velocity=< 5, -2> +position=< -9896, -9917> velocity=< 1, 1> +position=<-50209, 40516> velocity=< 5, -4> +position=< 20352, 50602> velocity=<-2, -5> +position=< 50607, -19998> velocity=<-5, 2> +position=<-19995, -30087> velocity=< 2, 3> +position=<-20003, 40517> velocity=< 2, -4> +position=<-50219, 30431> velocity=< 5, -3> +position=< 40521, -20001> velocity=<-4, 2> +position=<-30036, 20339> velocity=< 3, -2> +position=< 50624, 10257> velocity=<-5, -1> +position=<-50224, 40517> velocity=< 5, -4> +position=< -9907, 20344> velocity=< 1, -2> +position=< 40534, -40169> velocity=<-4, 4> +position=<-30065, -20003> velocity=< 3, 2> +position=< -9922, 20339> velocity=< 1, -2> +position=<-30052, 50602> velocity=< 3, -5> +position=< 10276, -50263> velocity=<-1, 5> +position=< 50594, 10258> velocity=<-5, -1> +position=< -9876, 10258> velocity=< 1, -1> +position=<-20001, -30091> velocity=< 2, 3> +position=<-50253, 50602> velocity=< 5, -5> +position=<-40159, -20002> velocity=< 4, 2> +position=<-50224, -30091> velocity=< 5, 3> +position=<-20001, 40511> velocity=< 2, -4> +position=< 20357, -40173> velocity=<-2, 4> +position=< 50615, 10255> velocity=<-5, -1> +position=< -9877, -50254> velocity=< 1, 5> +position=< 30440, 40516> velocity=<-3, -4> +position=< 30427, 50605> velocity=<-3, -5> +position=< 30419, -30090> velocity=<-3, 3> +position=< 20376, -20001> velocity=<-2, 2> +position=< 10255, 20344> velocity=<-1, -2> +position=< 30419, 20344> velocity=<-3, -2> +position=< 50595, -40169> velocity=<-5, 4> +position=<-30081, 40513> velocity=< 3, -4> +position=<-40143, -30090> velocity=< 4, 3> +position=< 40553, 20344> velocity=<-4, -2> +position=< 40529, -40170> velocity=<-4, 4> +position=< 30427, -50262> velocity=<-3, 5> +position=<-50240, -19996> velocity=< 5, 2> +position=<-50245, -30090> velocity=< 5, 3> +position=< 30448, -30087> velocity=<-3, 3> +position=< -9875, -40171> velocity=< 1, 4> +position=< -9900, 50599> velocity=< 1, -5> +position=<-19954, -40168> velocity=< 2, 4> +position=< 40526, 40518> velocity=<-4, -4> +position=<-20011, 30428> velocity=< 2, -3> +position=< 10283, 10257> velocity=<-1, -1> +position=<-40175, 40520> velocity=< 4, -4> +position=< 50636, -9915> velocity=<-5, 1> +position=< -9904, 10255> velocity=< 1, -1> +position=< 30435, 40520> velocity=<-3, -4> +position=< 30424, -50254> velocity=<-3, 5> +position=< 20393, 50602> velocity=<-2, -5> +position=<-50261, -30083> velocity=< 5, 3> +position=<-30065, 10254> velocity=< 3, -1> +position=<-30052, -40177> velocity=< 3, 4> +position=< 50625, -50263> velocity=<-5, 5> +position=<-40142, -20001> velocity=< 4, 2> +position=< 20338, -19996> velocity=<-2, 2> +position=< 50599, 50604> velocity=<-5, -5> +position=< 40534, -40176> velocity=<-4, 4> +position=<-50235, 20339> velocity=< 5, -2> +position=<-30068, -9918> velocity=< 3, 1> +position=<-40173, 20339> velocity=< 4, -2> +position=<-30054, -9915> velocity=< 3, 1> +position=< 10255, 20348> velocity=<-1, -2> +position=<-40162, 40520> velocity=< 4, -4> +position=<-40158, -9918> velocity=< 4, 1> +position=< 40508, 20348> velocity=<-4, -2> +position=< 10307, -40177> velocity=<-1, 4> +position=< 40545, -50261> velocity=<-4, 5> +position=<-30073, -40172> velocity=< 3, 4> +position=<-50209, -9918> velocity=< 5, 1> +position=< -9913, 40515> velocity=< 1, -4> +position=< -9873, -50262> velocity=< 1, 5> +position=< -9877, 10261> velocity=< 1, -1> +position=<-50245, -30084> velocity=< 5, 3> +position=< 30440, 50606> velocity=<-3, -5> +position=<-40167, 40514> velocity=< 4, -4> +position=<-30076, -50255> velocity=< 3, 5> +position=< -9891, -19996> velocity=< 1, 2> +position=< -9877, 20340> velocity=< 1, -2> +position=< 20365, -9911> velocity=<-2, 1> +position=<-50256, 10253> velocity=< 5, -1> +position=< -9909, -19996> velocity=< 1, 2> +position=< 30479, -9919> velocity=<-3, 1> +position=<-30065, 10257> velocity=< 3, -1> +position=< 50652, -9919> velocity=<-5, 1> +position=< 20338, -9914> velocity=<-2, 1> +position=<-30062, 20339> velocity=< 3, -2> +position=< 20360, 10259> velocity=<-2, -1> +position=< 40537, 50604> velocity=<-4, -5> +position=<-50221, 50603> velocity=< 5, -5> +position=< 40505, -30090> velocity=<-4, 3> +position=< -9890, 20339> velocity=< 1, -2> +position=<-30097, -50261> velocity=< 3, 5> +position=<-19995, -30086> velocity=< 2, 3> +position=< 20341, 10255> velocity=<-2, -1> +position=<-19977, -20005> velocity=< 2, 2> +position=<-30053, -50259> velocity=< 3, 5> +position=<-30065, -40173> velocity=< 3, 4> +position=< 50617, 50601> velocity=<-5, -5> +position=< 50631, -40171> velocity=<-5, 4> +position=< -9925, -9915> velocity=< 1, 1> +position=<-40150, 10262> velocity=< 4, -1> +position=< 40526, 40516> velocity=<-4, -4> +position=<-30055, -9915> velocity=< 3, 1> +position=<-50264, 30432> velocity=< 5, -3> +position=< 10287, -20003> velocity=<-1, 2> +position=< 40534, 20348> velocity=<-4, -2> +position=<-19960, -19998> velocity=< 2, 2> +position=< 30464, -40173> velocity=<-3, 4> +position=<-50220, -50259> velocity=< 5, 5> +position=< 40537, -9919> velocity=<-4, 1> +position=< 20357, 20346> velocity=<-2, -2> +position=< 40510, 50598> velocity=<-4, -5> +position=< 50607, -40172> velocity=<-5, 4> +position=< 40537, -19996> velocity=<-4, 2> +position=< 50636, 10261> velocity=<-5, -1> +position=< -9896, 30425> velocity=< 1, -3> +position=< -9917, 10255> velocity=< 1, -1> +position=<-50248, 50606> velocity=< 5, -5> +position=<-50237, -9919> velocity=< 5, 1> +position=<-30073, -20005> velocity=< 3, 2> +position=< 40529, 50606> velocity=<-4, -5> +position=< 50650, -30082> velocity=<-5, 3> +position=<-30093, 10258> velocity=< 3, -1> +position=< 30456, -40177> velocity=<-3, 4> +position=< 40521, -40170> velocity=<-4, 4> +position=< 30468, 10257> velocity=<-3, -1> +position=< 10276, -50261> velocity=<-1, 5> +position=< 30421, -9919> velocity=<-3, 1> +position=< -9877, 20346> velocity=< 1, -2> +position=< 10258, -40177> velocity=<-1, 4> +position=<-50264, 40516> velocity=< 5, -4> +position=< -9883, -40173> velocity=< 1, 4> +position=<-40127, -50256> velocity=< 4, 5> +position=< -9885, 20343> velocity=< 1, -2> +position=< 20382, -9914> velocity=<-2, 1> +position=<-30076, -19998> velocity=< 3, 2> +position=<-30073, 50601> velocity=< 3, -5> +position=< -9893, 20345> velocity=< 1, -2> +position=< -9904, 10258> velocity=< 1, -1> +position=< 20393, -40171> velocity=<-2, 4> +position=<-19984, 50603> velocity=< 2, -5> +position=< -9889, 20343> velocity=< 1, -2> +position=<-19982, 40512> velocity=< 2, -4> +position=<-20009, -40168> velocity=< 2, 4> +position=<-30069, -19997> velocity=< 3, 2> +position=<-19987, -30085> velocity=< 2, 3> +position=< 10252, 10259> velocity=<-1, -1> +position=< -9917, 30428> velocity=< 1, -3> +position=< 10287, 20342> velocity=<-1, -2> +position=<-50245, -20000> velocity=< 5, 2> +position=<-40165, -40177> velocity=< 4, 4> +position=<-40135, -50262> velocity=< 4, 5> +position=<-19984, -30085> velocity=< 2, 3> +position=< 30428, -30091> velocity=<-3, 3> +position=<-30089, 30431> velocity=< 3, -3> +position=< 30467, 20344> velocity=<-3, -2> +position=<-19987, 40520> velocity=< 2, -4> +position=<-30037, 40512> velocity=< 3, -4> +position=< 40557, -50255> velocity=<-4, 5> +position=< 40550, 10254> velocity=<-4, -1> +position=<-40159, 10258> velocity=< 4, -1> +position=< 40539, 20343> velocity=<-4, -2> +position=< 30440, 50605> velocity=<-3, -5> +position=< 30453, 30434> velocity=<-3, -3> +position=< 40550, -30088> velocity=<-4, 3> +position=<-40151, 10256> velocity=< 4, -1> +position=< 10276, 40514> velocity=<-1, -4> +position=< 10280, 20348> velocity=<-1, -2> +position=<-20009, -30091> velocity=< 2, 3> +position=< 30467, 50601> velocity=<-3, -5> +position=< 30439, -20000> velocity=<-3, 2> +position=< 10276, -20005> velocity=<-1, 2> +position=< 40562, -30082> velocity=<-4, 3> +position=<-19986, -20004> velocity=< 2, 2> +position=< 20333, 10259> velocity=<-2, -1> +position=<-50224, -9911> velocity=< 5, 1> +position=< -9872, -9919> velocity=< 1, 1> +position=< 10295, -30085> velocity=<-1, 3> +position=<-19990, 30429> velocity=< 2, -3> +position=< 10295, -30084> velocity=<-1, 3> +position=< 30429, 40515> velocity=<-3, -4> +position=< 20365, -30086> velocity=<-2, 3> +position=< 50618, 10258> velocity=<-5, -1> +position=<-20010, -9910> velocity=< 2, 1> +position=< 20373, -40169> velocity=<-2, 4> +position=< 10307, -50261> velocity=<-1, 5> +position=< 20381, 10256> velocity=<-2, -1> +position=< 40513, 40517> velocity=<-4, -4> +position=< -9865, 20345> velocity=< 1, -2> +position=< -9909, 20347> velocity=< 1, -2> +position=< 10284, 20348> velocity=<-1, -2> +position=<-30073, 20342> velocity=< 3, -2> +position=<-30078, 30425> velocity=< 3, -3> +position=< -9899, 20342> velocity=< 1, -2> +position=< 20333, 30429> velocity=<-2, -3> +position=< 10306, 10253> velocity=<-1, -1> +position=<-50261, 10260> velocity=< 5, -1> +position=< 30459, -9912> velocity=<-3, 1> +position=< 10292, -40176> velocity=<-1, 4> +position=< 20389, -30083> velocity=<-2, 3> +position=<-40166, 20340> velocity=< 4, -2> +position=< -9901, 20345> velocity=< 1, -2> +position=< 40557, -20004> velocity=<-4, 2> +position=<-40158, -30090> velocity=< 4, 3> +position=<-50209, 10255> velocity=< 5, -1> +position=<-50265, -40172> velocity=< 5, 4> +position=<-50245, 50605> velocity=< 5, -5> +position=< 30443, -40177> velocity=<-3, 4> +position=< -9916, 20339> velocity=< 1, -2> +position=< 50640, 50601> velocity=<-5, -5> +position=<-19971, -20005> velocity=< 2, 2> +position=< 40522, -9914> velocity=<-4, 1> +position=< 50607, -19999> velocity=<-5, 2> +position=<-50243, 40515> velocity=< 5, -4> +position=<-50240, 10260> velocity=< 5, -1> +position=< 40561, -19998> velocity=<-4, 2> +position=<-50211, -50254> velocity=< 5, 5> +position=<-40143, 30431> velocity=< 4, -3> +position=< 30430, -50259> velocity=<-3, 5> +position=< 30479, -20002> velocity=<-3, 2> +position=<-30092, 20344> velocity=< 3, -2> +position=<-30092, -40168> velocity=< 3, 4> +position=< 50601, 10257> velocity=<-5, -1> +position=< 20373, 40515> velocity=<-2, -4> +position=< 30479, -19997> velocity=<-3, 2> +position=<-40175, 50605> velocity=< 4, -5> +position=< -9880, -40173> velocity=< 1, 4> +position=< 20349, -50255> velocity=<-2, 5> +position=< 20362, -9914> velocity=<-2, 1> +position=<-30089, 50601> velocity=< 3, -5> +position=< 30467, 10253> velocity=<-3, -1> +position=< 40565, 30429> velocity=<-4, -3> +position=<-40142, 10257> velocity=< 4, -1> +position=< 50609, -50263> velocity=<-5, 5> +position=< -9881, -40173> velocity=< 1, 4> +position=< 50639, 40515> velocity=<-5, -4> +position=<-50269, -40170> velocity=< 5, 4> +position=< 40553, -9910> velocity=<-4, 1> +position=< 30455, 30434> velocity=<-3, -3> +position=< 20362, 10258> velocity=<-2, -1> +position=< 40505, 50603> velocity=<-4, -5> +position=<-19990, 10260> velocity=< 2, -1> +position=< 30447, -19998> velocity=<-3, 2> +position=<-40150, -30087> velocity=< 4, 3> +position=< -9907, -40172> velocity=< 1, 4> +position=<-30044, 20348> velocity=< 3, -2> +position=<-40178, -9913> velocity=< 4, 1> +position=<-50261, 30428> velocity=< 5, -3> +position=<-40151, 20348> velocity=< 4, -2> +position=<-50224, 30432> velocity=< 5, -3> +position=< 50652, -50263> velocity=<-5, 5> +position=<-19952, 50606> velocity=< 2, -5> +position=< 30431, 40511> velocity=<-3, -4> +position=< 30459, -30088> velocity=<-3, 3> +position=< 50651, 20347> velocity=<-5, -2> +position=< 10292, -30082> velocity=<-1, 3> +position=< 20366, 10257> velocity=<-2, -1> +position=<-19987, -9913> velocity=< 2, 1> +position=< -9865, -40170> velocity=< 1, 4> +position=< -9889, 50597> velocity=< 1, -5> +position=<-30065, -50262> velocity=< 3, 5> +position=< -9921, 20347> velocity=< 1, -2> +position=<-30084, 10253> velocity=< 3, -1> +position=< 10248, -20005> velocity=<-1, 2> +position=< 20345, -9915> velocity=<-2, 1> +position=< -9882, -9915> velocity=< 1, 1> +position=<-30065, 50602> velocity=< 3, -5> +position=< 40565, 50599> velocity=<-4, -5> +position=< 20349, -50261> velocity=<-2, 5> +position=<-19960, -19998> velocity=< 2, 2> +position=< 10255, -50258> velocity=<-1, 5> +position=< -9901, -50255> velocity=< 1, 5> +position=<-50219, -9916> velocity=< 5, 1> +position=< 40524, -30086> velocity=<-4, 3> +position=< 40550, 50600> velocity=<-4, -5> +position=<-50233, -30091> velocity=< 5, 3> +position=< 30440, -50257> velocity=<-3, 5> +position=< -9920, 50605> velocity=< 1, -5> +position=< 40507, 20339> velocity=<-4, -2> +position=< 10264, 30426> velocity=<-1, -3> +position=< 40556, 20341> velocity=<-4, -2> +position=< -9875, -9913> velocity=< 1, 1> +position=<-30068, -50254> velocity=< 3, 5> +position=< -9889, 30425> velocity=< 1, -3> +position=<-20011, -40172> velocity=< 2, 4> +position=<-50269, 10259> velocity=< 5, -1> +position=<-40132, 30432> velocity=< 4, -3> +position=< 40553, -9913> velocity=<-4, 1> +position=<-30073, 10256> velocity=< 3, -1> +position=<-30092, 20340> velocity=< 3, -2> +position=< 40542, 50606> velocity=<-4, -5> +position=<-50224, 20347> velocity=< 5, -2> +position=<-40143, 50606> velocity=< 4, -5> +position=<-19971, -20000> velocity=< 2, 2> +position=< 40553, 20340> velocity=<-4, -2> +position=<-30081, -20001> velocity=< 3, 2> +position=<-30037, -40172> velocity=< 3, 4> +position=< -9865, 30428> velocity=< 1, -3> +position=< 30479, 20340> velocity=<-3, -2> +position=< 30429, 20343> velocity=<-3, -2> +position=<-19971, -40172> velocity=< 2, 4> +position=< 30431, 50601> velocity=<-3, -5> +position=<-19982, 10256> velocity=< 2, -1> +position=< 20344, 20343> velocity=<-2, -2> diff --git a/2018/inputs/12.txt b/2018/inputs/12.txt new file mode 100644 index 0000000..6d801ae --- /dev/null +++ b/2018/inputs/12.txt @@ -0,0 +1,34 @@ +initial state: ###..#...####.#..###.....####.######.....##.#####.##.##..###....#....##...##...##.#..###..#.#...#..# + +.###. => . +..#.. => . +.#### => . +.##.. => # +#.#.# => . +..#.# => # +#.##. => # +#...# => # +..... => . +##..# => # +.#.#. => . +..##. => # +##.#. => . +###.. => . +.#... => # +..### => . +#..## => . +...#. => . +###.# => # +.##.# => . +.#.## => . +....# => . +##### => . +#.#.. => # +...## => # +#.... => . +#.### => # +##... => # +.#..# => . +####. => . +#..#. => # +##.## => # diff --git a/2018/inputs/13.txt b/2018/inputs/13.txt new file mode 100644 index 0000000..a2195f8 --- /dev/null +++ b/2018/inputs/13.txt @@ -0,0 +1,150 @@ + /----------------------------------------------------\ /----------------------------\ + /-------->-------\ | /----+----------+----------------------------+----------\ + | /+-----+-----------------------------------------------+----+----------+-\ /---+-------\ | + | /-------++-----+-----------------------------------------------+----+----------+-+---\ | | | | + /--+-------+-------++-----+-----------------------------------------------+---\| | | | | | | | + /----------+--+-----\ | || | /----------------------------------+---++----------+-+---+----\ | | | | + | | | /---+-+-------++-----+------------+--------------->------------------+---++----------+-+\ | | | | | | + | /-----+--+-+---+-+-------++-----+------------+----------------------------------+---++---\ | || | | | | | | + | | | | | | | || | | /-------------------+---++---+--\ | || | | | | | | + /+----+-----+--+-+---+-+-------++-----+------------+\ | | || | | | || | | | | | | + || | /---+--+-+---+-+-------++-----+------------++-------------+-------------------+---++---+--+-\ | || | | | | | | + || | | | | | | | || /-+---------\ || | | || | | | | || | | | | | | + || | | | | | | | || | | | || | | || | | | | || | | | | | | + || | | | | | | ^ || | | | || | /-----+---++---+--+-+-+-++--+----+-------------+---+--\ | | + || | | | | | | | ||/--+-+---------+--++-------------+------->-----+-----+\ || | | | | || | | | | | | | + || | | | | | | | ||| | | | || /-------+-------------+-----++--++---+--+-+-+-++--+----+-------------+---+\ | | | + || | | | | | | | ||| |/+---------+--++-----+-------+-------------+-----++--++---+--+-+-+-++--+----+-------------+---++\| | | + || \-+---+--+-+---+-+-------+++--+++---------+--++-----+-------+-------------+-----++--++---/ | | | || |/---+-------------+---++++----+--+\ + || | | | | | | ||| ||| | || | | | || || | | | || || | \---++++----/ || + || | | \-+---+-+-------+/| ||| | || | | | |v || | | | || || | |||| || + || | | | | | | |/-+++-----\ | || | | | || || | | | || || | |||| || + || | | | | | | || ||| | | || | | | || || /----+-+-+-++--++---+-----------------++++-------++--\ + || | /+----+---+-+-------+-++-+++-----+---+--++-\ | | | || || | | | | || || | |||| || | + || /--+--++----+---+-+--\ | || ||| | | || | | | /------+-----++--++-+----+-+-+-++--++---+-----------------++++--\ || | + || | | || | | | | | || ||| | | || | | | | /-+-----++-\|| | | | | || || | |||| | || | + || | | ||/---+---+-+--+----+-++-+++-----+---+--++-+---+--->---+-\ | | | || |||/+----+-+-+-++--++---+-----------------++++--+----++--+\ + || | | ||| | | | | | || ||| | | || | | | | | | \-----++-+++++----+-+-+-++--++---+-----------------+++/ | || || + || | | ||| | | | | | || ||| | | || | /+-------+-+----+----+-------++\||||| | | | || || | ||| | || || + || | | ||| | | | | /+-++-+++-----+---+--++-+--++-------+-+\ /+----+-------++++++++----+-+-+-++--++---+-----------------+++-\ | || || + || | | ||| /-+---+-+--+---++-++-+++-----+---+--++-+--++-------+-++--++----+------\|||||||| | | | || || | ||| | | || || + || | | ||| | | | | | || || ||| | | || | || | || || | ||||||||| |/+-+-++--++---+-----------------+++-+-+\ || || + || | | ||| | | | | | || || ||| | | || | || \-++--++----+------+++++++++----/|| | || /++---+------------\ ||| | || || || + || | | ||| | | | | | || || ||| | | || | || /++--++----+---\ ||||||||| || | || ||| | | ||| | || || || + || | | ||| | | | | | || || ||| | | || | || ||| || | | ||||||||| || | || ||\---+------------+----+++-+-++---+/ || + || | | ||| | | | | | || || ||| |/--+--++-+--++-------\||| || | | ||||||||| || | || || | | ||| | || | || + || | | /+++-+-+---+-+--+---++-++-+++-----++--+--++-+--++-------++++--++----+---+--+++++++++----\|| | || || | | ||| | || | || + || | | |||| | | | | | || || ||\-----++--+--++-+--++-------++++--++----+---+--++++++/|| ||| | || || | | ||| | || | || + || | | |||| | |/--+-+--+---++-++-++------++--+--++\| || /----++++--++----+---+--++++++-++----+++-+-++-++----+------\ | ||| | || | || + || | | |||| | || | | | || || || || | |||| || | |||| || | | |||||| || ||| | || || | | | ||| | || | || + || | | |||| | || | | | || || || /++--+--++++--++--+----++++--++----+---+--++++++-++----+++-+-++-++----+------+-----+----+++-+-++---+---++\ + || | | |||| | || | | | || || || /---+++--+--++++--++--+----++++--++----+---+--++++++-++----+++-+-++-++\ | | /+----+++-+-++---+--\||| + || | | |||| | || | | | || || || | ||| | \+++--++--+----++++--++----+---+--++++++-++----+++-+-++-+++---/ | || ||| | || | |||| + || | | |||| | || | | | || || \+-+---+++--/ ||| || | |||| || | | |||||| || ||| | || ||| | || ||| | || | |||| + || | | |||| | || | | | || || |/+---+++------+++--++--+----++++--++\ | | |||||| || ||| | || ||| | || ||| | || | |||| + || | | |||| | || | | | || || ||| ||| ||| || | ||||/-+++---+---+--++++++-++----+++-+-++-+++----------+----++----+++-+\|| | |||| + || | | |||| \-++--+-+--+---++-++--+++---+++------+++--++--+----+++++-+++---+---+--/||||| || ||| | || ||| | || ||| |||| | |||| + || | | |||| || | | | || || ||| ||| ||| || | ||||| ||| | | ||||| || ||| | || ||| | || ||| |||| | |||| + || | | |||| || | | | || || ||| ||| /----+++--++--+----+++++-+++---+---+---+++++-++----+++-+-++-+++----------+----++---\||| |||| | |||| + || | /+-++++---++--+-+--+---++-++--+++---+++-+----+++--++--+----+++++-+++\ | | ||||| || ||| | || ||| | ||/--++++-++++\ | |||| + || |/++-++++---++--+-+--+--\|| || ||| ||\-+----+++--++--+----/\+++-++++--+---/ ||||| || ||| | || ||| | ||| |||| ||||| | |||| + || |||| |||| || | | | ||| || ||| || | ||| || | ||| |||| | ||||| || /-+++-+-++-+++---\ | ||| |||| ||||| | |||| + |\---++++-++++---++--/ | | ||| || ||| || | ||| || \------+++-++++--+-------+++++-++--+-+++-+-++-+++---+------/ ||| |||| ||||| | |||| + | |||| |||| || | | ||| || ||| || | ||| || ||| |||| | ||||| || | ||| | || ||| | ||| |||| ||||| | |||| + | |||| |||| || \--+--+++-++--+++---++--+----+++--++---------+++-++++--+-------+++++-++--+-+++-+-++-+/| | ||| |||| ||||| | |||| + | ||||/++++---++-------+--+++-++--+++---++--+----+++--++---------+++\|||| | ||||| || | |||/+-++-+-+---+-----------+++--++++-+++++--+\ |||| + | ||||||||\<--++-------+--+++-++--+++---++--+----+++--++---------/||||||| \-------+++/| || | ||||| || \-+---+-----------+/| |||| ||||| || |||| + | |||||||| /++------\| ||| || /+++---++--+----+++--++----------+++++++----------+++-+-++--+-+++++-++---+---+---------\ | | |||| ||||| || |||| + | |||||||| ||| ||/-+++-++-++++---++--+-\ ||| || ||||||| ||| | || | ||||| || | | | | | |||| ||||| || |||| + | |||||||| ||| ||| ||| || |||| || | | ||| || ||||||| /+++-+-++--+-+++++-++\ | | | | \--++++-++++/ || |||| + | |||||||| ||| ||| ||| || |||| || | | ||| || ||||||| |\++-+-++--+-+++++-+++--+---+---------+-+----++++-++++---/| |||| + | /--++++++++---+++------+++-+++-++-++++---++--+-+--+++\ || ||||||| | || | || | ||||| ||| | | | \----++++-++++----+-/||| + | | |||||||| ||| ||| ||| || |||| || | | |||| || ||||||| | || | || | ||||| ||| | |/--------+----\ |||| |||| | ||| + | | |||||||| ||| /+++-+++-++-++++---++--+-+--++++-++----------+++++++---\ | || | || | ||||| ||| | || /------+---\| |||| |||| | ||| + | | |||||||| ||| |||| ||| || |||| || | | |||| || /-----+++++++---+---\ | || | || | ||||| ||| |/--++-+------+---++-++++-++++----+-\||| + \-+--++++++++---+++-----++++-+++-++-++++---++--+-+--/||| || | ||||||| | | | || | || | ||||| ||| || || | | || |||| |||| | |||| + | |||||||| /-+++-----++++-+++-++-++++---++--+\| ||| || | ||||||| | | | || | || | ||||| ||| || || | | || |||| |||| | |||| + | |||||||| | ||| |||| ||| ||/++++---++--+++---+++-++----+-----+++++++---+---+-+-++-+-++--+-+++++-+++--++--++-+------+\ || |||| |||| | |||| +/--+--++++++++-+-+++-----++++-+++-+++++++---++--+++---+++-++----+-----+++++++---+---+-+-++-+-++--+-+++++-+++\ || || | || || |||| |||| | |||| +| | |||||||| | ||| ||||/+++-+++++++---++--+++---+++-++----+-----+++++++---+\ | | || | |\--+-+++++-++++-++--++-+------++--++-++++-++++----+-+/|| +| | |||||||| | ||| |||||||| ||||||| || ||| ||| || | ||||||| || | | || | | | ||||| |||| || || | || || |||| |||| | | || +| | |||||||| | |||/----++++++++-+++++++---++--+++---+++-++----+-----+++++++---++--+-+-++-+-+---+-+++++-++++-++\ || | || || |||| |||| | | || +| | |||||||| | |||| |||||||| ||||||| /-++--+++---+++-++----+-----+++++++---++--+\| || | | | ||||| |||| ||| || | || || |||| |||| | | || +| | |||||||| | |||| |||||||| ||||||| | || ||| ||| || | ||||||| || ||| || | | | ||||| |||| ||| || | || || |||| |||| | | || +| | |||\++++-+-++++----++++++++-+++++++-+-++--+++---+++-++----+-----+++++++---++--+++-++-+-+---+-++/|| |||| ||| || | || || |||| |||| | | || +| | ||| |||| | |||| ||||||||/+++++++-+-++\ ||| ||| || \-----+++++++---++--/|| || | | | || || |||| ||| || | || || |||| |||| | | || +| | ||| |||| | |||| |||||||\++++++++-+-+++-+++---+++-++----------+++++++---++---++-++-+-+---+-++-++-/||| ||| || | || || |||| |||| | | || +| | ||| |\++-+-++++----+++++++-++++++++-+-+++-+++---+++-++----------+++++++---++---++-++-+-+---+-/\-++--+++-+++-++-+------++--++-++++-+++/ | | || +| | ||| | || | |||| ||||||| |||||||| | ||| ||| ||| ^| ||||\++---++---++-++-+-+---+----++--+++-+++-++-+------++--++-++++-++/ | | || +| | ||| | || | |||| ||||||| ||||||\+-+-+++-+++---+++-++----------++++-/|/--++---++-++-+-+---+----++--+++-+++-++-+-\ || || |||| || | | || +| | ||| | || \-++++----+++++++-++++++-+-+-+++-+/| /-+++-++-------\ |||| || || || |v | v | \+--+++-+++-++-+-+----++--++-++++-++------/ | || +| | ||| | || |\++----+++++++-++++++-+-+-+++-+-+-+-+++-++-------+--++++--++--++---++-++-+-+---+-----+--/|| ||| || | | || || |||| || | || +| /+--+++-+-++---+-++----+++++++-++++++-+-+-+++-+-+-+-+++-++-------+--++++--++-\|| || || | | /+-----+---++-+++-++-+-+----++--++-++++-++-----\ | || +| || ||| | \+---+-++----+++++++-++++++-+-+-+++-+-+-+-+/| || | |||| || ||| || || | | || | || |\+-++-+-+----++--++-++++-++-----+--/ || +| || ||| | | |/++----+++++++-++++++-+-+-+++-+-+-+-+-+-++-------+--++++--++-+++---++-++-+-+--++-----+---++-+\| || | | || || |||| || | || +| || ||| | | |||| ||||||\-++++++-+-+-+++-+-+-+-+-+-++-------+--/||| || ||| || || | | || /---+---++-+++-++-+-+----++--++-++++-++---\ | || +| || ||| | /+---++++----++++++--++++++-+-+-+++-+-+-+-+-+-++-------+---+++--++-+++---++-++-+-+--++-+--\| || ||| || | | || || |||| || | | || +| || ||| | || /-++++----++++++\ |||||| | \-+++-+-+-+-+-+-++-------+---+++--++-+++---/| ||/+-+--++-+--++---++-+++-++-+\| || || |||| || | | || +| || ||\-+-++-+-++++----+++++++-++++++-+---+++-+-+-+-+-+-++-------+---+++--/| ||| | |||| | || | || || ||| || ||| || || |||| || | | || +| || || | |\-+-++++----+++++++-++++++-+---+++-+-+-+-+-+-++-------+---+++---+-+++----+-+++/ | || | || || ||| || ||| || || |||| || | | || +| || || | | | \+++----+/||||| \+++++-+---++/ | | | | | || | ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | || +| || || | | | |\+----+-+++++--+++++-+---++--+-+-+-/ | || | ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | || +| || || | | | | | | ||||| ||||| | || | | | /+-++-------+\ ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | || +| || || \-+--+--+-+----+-+++++--+++++-+---++--+-+-+--++-++-------++--+/| | ||| \-+++--+--++-+--++---/| ||| || ||| || || |||| || | | || +| || || | | | | | ||||| ||||| | || | | | || || /----++--+-+---+-+++------+++--+--++-+--++----+-+++-++-+++----++-\|| |||| || | | || +| || ||/---+--+-\| |/---+-+++++--+++++-+---++--+-+-+--++-++--+----++--+-+---+-+++----\ ||| | ||/+--++----+-+++-++-+++----++-+++-++++-++---+\| || +| || ||| | | || || | ||||| ||||| | || | | | || || | || | | | ||| | ||| \--++++--++----+-+++-++-+++----++-+++-++++-++---+++----/| +| || ||| | | || || | ||||| ||||| | || | | | /++-++--+----++--+-+---+-+++----+-+++-----++++--++----+-+++-++-+++----++-+++\|||| || ||| | +| || ||| ^ | || || | ||||| ||||| | || | | | ||| || | || | | | ||| | ||| |||\--++----+-+++-++-+++----++-++++++++-++---/|| | +| || ||| | | || || | ||||| ||||| | || \-+-+-+++-++--+----++--+-+---+-+++----+-+++-----+++---++----+-+++-++-+++----++-++++/||| || || | +| || ||| | | || || | ||||| ||||| | || | | ||| || | /-++--+-+---+-+++----+-+++-----+++---++----+-+++-++-+++--\ || |||| ||| || || | +|/++--+++---+--+-++-++---+-+++++--+++++-+--\|| |/+-+++-++--+--+\|| | | | ||| | ||| ||| |\----+-+++-++-+++--+-++-++++-/|| || || | +|||| ||| | | || || | ||||| ||||| | ||| /+++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+++-++-+++--+-++-++++\ || || || | +|||| ||| | | || || | ||||| |\+++-+--++/ |||| ||| || | |||| | | | ||| | ||| ||| | | ||| || ||| | || ||||| || || || | +|||| ||| | | || || | ||||| |/+++-+--++---\|||| ||| || | |||| | | | ||| | ||| ||| | | ||| || ||| | || ||||| || || || | +|||| |\+---+--+-++-++---+-+++/| ||||| | |\---+++++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+++-++-+++--+-++-+++++-++-++----++-----/ +|||| | | | | |\-++---+-+++-+--+++++-+--+----+++++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+/| || ||| | || ||||| || || || +|||| | | | | | /++---+-+++\| ||||| | | ||||| ||| || | |||| | | | ||| | ||| ||| | | | | || ||| | || ||||| || || || +|||| | | | /+-+-+++--\| ||||| ||||| | | ||||| ||| || | |||| | | | ||| | ||| ||| | | | | || ||| | || ||||| || || || +|||| | | | || | ||| || ||||| ||||| | | ||||| ||| || | |||| | | | ||| /-+-+++-----+++---+----\| | | || ||| | || ||||| || || || +|||| | | | || | ||| /++-+++++--+++++-+--+----+++++-+++-++--+--++++-\| | | ||| | | ||| ||\---+----++-+-+-++-+++--+-++-+++++-++-++----/| +|||| | | | || | ||| ||| ||||| ||||| \--+----+++++-+++-++--+--++++-++-+---+-+++--+-+-+++-----++----+----++-/ | || ||| | || ||||| || || | +|||| \-+--<+-++-+-+++-+++-/|||| ||||| | |\+++-+++-++--+--++++-++-+---+-+++--+-+-+++-----++----+----++---+-++-+++--+-++-++++/ || || | +|||| | | || | ||| ||| |||| ||||| | | ||| ||| || | |||| |\-+---+-+++--+-+-+++-----++----+----++---+-++-+++--+-++-++++--++-+/ | +|\++----+---+-++-+-+++-+++--++++--+++++----/ | ||| ||| \+--+--++++-+--+---+-+++--+-+-+/| |\----+----++---+-/| ||| | || |||| || | | +| || | | || | ||| ||| |||| \++++---------+-+++-+++--+--+--++++-+--+---+-+++--+-+-/ | | | || | | ||| | || |||| || | | +| || | | || | ||| ||| |||| |||\---------+-+++-+++--+--+--++++-+--+---+-+++--+-+---+-----+-----+----++---+--+-+++--+-++-++++--+/ | | +| || | | || | ||| ||| |||| ||| /----+-+++-+++--+--+--++++-+--+---+-+++--+-+---+-----+--\ | || | | |||/-+-++-++++--+--+------+-\ +| |\----+---+-++-+-+++-+++--++++---+++-----+----+-+++-++/ | | |||| | \---+-+++--+-+---+-----+--+--+----++---+--+-++++-+-++-++++--+--/ | | +| | | | || | ||| ||| |||| ||| | | ||| || | | |||| | | ||| | | | | | | || | | \+++-+-++-+/|| | | | +| \-----+---+-++-+-+++-+++--++++---+++-----+----+-+++-++---+--+--++++-+------+-/|| | | \-----+--+--+----++---+--+--/|| | || | || | | | +| | \-++-+-+++-+++--++++---+++-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+--/ || | | || |/++-+-++--+---------+-+---\ +| | |\-+-+++-+++--+++/ /+++-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+-------++---+--+>--++-++++-+-++--+-------\ | | | +| | | | ||| ||| ||| ||\+-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+-------++---+--+---++-+++/ | || | | | | | +| | | | ||| ||| ||| || | | | ||| || \--+--++++-+------+--++--+-+---------+--+-------++---+--+---++-+++--+-++--/ | | | | +| | | | ||| ||| \++---++-+-----+----+-/|| || | |||| | | || | | | | || | | || ||| | || | | | | +| | | | \++-+++---+/ || | \----+--++-++------+--++++-+------+--++--+-+---------+--/ || | | || ||| | || | | | | +| | | | || ||| \----++-+----------+--++-++------+--++++-+---->-+--+/ | | | || | | || ||| | || | | | | +| | | | || \++--------++-+----------+--++-++------+--++++-/ | | | | \----------++---+--+---++-+++--+-++----------+-/ | | +| | | | || || || | | || || | |||| | | | | /--------------++---+--+---++-+++--+-++-----\ | | | +| | | | || || || | | || || | \+++--------+--+---+-+-----+--------------++---+--+---++-/|| | || | | | | +| | | | || || || | | || || | ||| | | \-+-----+--------------/| | | || || | || | | | | +| | | | || || /++-+----------+\ || \+------+---+++--------+--+-----+-----+---------------+---+--+---++--++--+-+/ | | | | +| | | | || || |\+-+----------++-++--+------+---+++--------+--+-----+-----+---------------+---+--+---++--++--+-+------+----/ | | +| | | | /++--++-------+-+-+----------++-++--+------+---+++-\ \--+-----+-----+---------------+---+--+---/| || | | | | | +| | | | ||| || | | | || \+--+------+---/|| | | | | | | | | || | | | | | +| | | | ||| || | | | |v | | | || | | | | | | | | \+--+-+------+--------+---/ +| /-+-----+--+-+++--++-------+-+-+----------++--+--+------+----++-+---------+-----+-----+---------------+\ | | | | | | | | +| | | | | ||| |\-------+-+-+----------++--+--+------+----++-+---------/ | | || | | | | | | | | +| | | | | ||| | | | \----------++--+--+------+----++-+---------------+-----+---------------++--+--+----+---/ | | | | +| | | | | ||| | | | || | \------+----+/ | | | || | | | | | | | +| | | \--+-+++--/ ^ | || | | | | | | || | | | | | | | +| | | | ||\-----------+-+------------++--+---------+----+--+---------------/ | || | | \------+-+------+--------/ +| | | | || | | || \---------+----/ | | || | | | | | +\-----+-+--------+-++------------+-+------------++------------+-------+---------------------+---------------/| | | | | | + | | | |\------------+-+------------++------------+-------+-<-------------------+----------------+--/ \-----------+-/ | + | | | | \-+------------+/ \-------+---------------------+----------------+-----------------/ | + | | | \---------------+------------+---------------------/ | | | + | | | \------------/ \----------------+--------------------------/ + \-+--------+-------------------------------------------------------------------------------------------/ + \--------/ diff --git a/2018/inputs/15.txt b/2018/inputs/15.txt new file mode 100644 index 0000000..0bd71e0 --- /dev/null +++ b/2018/inputs/15.txt @@ -0,0 +1,32 @@ +################################ +#######################.######## +#######################.######## +########..#############.######## +#######.....#########....#..#### +#######.....##########......#### +######....#..########.......#..# +#######.G...########...........# +####..GG....G######..........### +########....G..###..E.......#.E# +########...G..#....G..G.....E..# +########...G...G.G...........E.# +####....G.....#####..E......#E.# +####.####.#..#######....G.....## +####.G#####.#########..........# +####G#####..#########..........# +####.####..E#########..........# +####...#..#.#########.G........# +####.....G..#########.........## +####..G....E.#######........#### +####G.........#####...##....#### +#####G................###..E#### +#####..####...............###### +####..#####.............######## +#####.#######...........######## +#####.########.........######### +#####.########.....E..########## +#.....#########...#.############ +#..#############....############ +################....############ +##################.############# +################################ diff --git a/2018/inputs/16_1.txt b/2018/inputs/16_1.txt new file mode 100644 index 0000000..755acda --- /dev/null +++ b/2018/inputs/16_1.txt @@ -0,0 +1,3143 @@ +Before: [2, 3, 2, 2] +0 3 3 0 +After: [0, 3, 2, 2] + +Before: [1, 1, 2, 3] +6 0 2 0 +After: [0, 1, 2, 3] + +Before: [1, 0, 2, 2] +6 0 2 0 +After: [0, 0, 2, 2] + +Before: [1, 1, 1, 1] +11 2 1 0 +After: [2, 1, 1, 1] + +Before: [3, 0, 0, 2] +0 3 3 2 +After: [3, 0, 0, 2] + +Before: [1, 1, 2, 2] +9 1 0 2 +After: [1, 1, 1, 2] + +Before: [3, 2, 1, 1] +5 2 1 1 +After: [3, 2, 1, 1] + +Before: [1, 1, 0, 3] +7 1 3 0 +After: [0, 1, 0, 3] + +Before: [1, 2, 1, 3] +5 2 1 0 +After: [2, 2, 1, 3] + +Before: [0, 2, 2, 0] +8 0 0 0 +After: [0, 2, 2, 0] + +Before: [2, 0, 0, 1] +3 0 3 0 +After: [1, 0, 0, 1] + +Before: [3, 1, 2, 2] +4 1 3 1 +After: [3, 0, 2, 2] + +Before: [2, 2, 1, 1] +5 2 1 1 +After: [2, 2, 1, 1] + +Before: [1, 1, 2, 2] +6 0 2 2 +After: [1, 1, 0, 2] + +Before: [1, 1, 1, 2] +4 1 3 0 +After: [0, 1, 1, 2] + +Before: [2, 1, 3, 1] +13 1 3 0 +After: [1, 1, 3, 1] + +Before: [0, 1, 2, 1] +13 1 3 1 +After: [0, 1, 2, 1] + +Before: [2, 1, 0, 2] +4 1 3 1 +After: [2, 0, 0, 2] + +Before: [2, 1, 0, 1] +2 0 1 3 +After: [2, 1, 0, 1] + +Before: [3, 1, 2, 1] +12 1 2 2 +After: [3, 1, 0, 1] + +Before: [1, 1, 3, 2] +4 1 3 3 +After: [1, 1, 3, 0] + +Before: [2, 2, 1, 3] +7 1 3 0 +After: [0, 2, 1, 3] + +Before: [1, 3, 2, 1] +6 0 2 1 +After: [1, 0, 2, 1] + +Before: [2, 1, 2, 1] +13 1 3 1 +After: [2, 1, 2, 1] + +Before: [2, 1, 3, 0] +14 2 0 3 +After: [2, 1, 3, 1] + +Before: [1, 1, 2, 3] +6 0 2 3 +After: [1, 1, 2, 0] + +Before: [1, 1, 1, 3] +11 2 1 2 +After: [1, 1, 2, 3] + +Before: [2, 2, 3, 2] +0 3 3 0 +After: [0, 2, 3, 2] + +Before: [1, 2, 0, 2] +1 0 2 3 +After: [1, 2, 0, 0] + +Before: [2, 1, 0, 0] +2 0 1 3 +After: [2, 1, 0, 1] + +Before: [0, 2, 1, 1] +5 2 1 3 +After: [0, 2, 1, 2] + +Before: [0, 3, 2, 1] +10 3 2 3 +After: [0, 3, 2, 1] + +Before: [3, 3, 2, 2] +0 3 3 0 +After: [0, 3, 2, 2] + +Before: [1, 1, 2, 0] +12 1 2 0 +After: [0, 1, 2, 0] + +Before: [0, 2, 1, 3] +5 2 1 0 +After: [2, 2, 1, 3] + +Before: [0, 3, 2, 1] +8 0 0 0 +After: [0, 3, 2, 1] + +Before: [1, 1, 1, 3] +11 2 1 1 +After: [1, 2, 1, 3] + +Before: [0, 1, 1, 2] +11 2 1 2 +After: [0, 1, 2, 2] + +Before: [1, 1, 1, 1] +13 1 3 1 +After: [1, 1, 1, 1] + +Before: [1, 3, 0, 0] +1 0 2 1 +After: [1, 0, 0, 0] + +Before: [2, 2, 3, 1] +14 2 0 1 +After: [2, 1, 3, 1] + +Before: [0, 3, 0, 3] +8 0 0 3 +After: [0, 3, 0, 0] + +Before: [0, 0, 1, 1] +8 0 0 2 +After: [0, 0, 0, 1] + +Before: [0, 3, 2, 1] +8 0 0 2 +After: [0, 3, 0, 1] + +Before: [2, 1, 2, 3] +12 1 2 1 +After: [2, 0, 2, 3] + +Before: [3, 2, 2, 3] +14 2 1 2 +After: [3, 2, 1, 3] + +Before: [2, 2, 3, 0] +15 2 2 2 +After: [2, 2, 1, 0] + +Before: [2, 3, 3, 2] +15 2 2 0 +After: [1, 3, 3, 2] + +Before: [1, 1, 0, 0] +1 0 2 3 +After: [1, 1, 0, 0] + +Before: [3, 2, 2, 2] +0 3 3 3 +After: [3, 2, 2, 0] + +Before: [1, 3, 2, 2] +6 0 2 3 +After: [1, 3, 2, 0] + +Before: [2, 1, 0, 1] +3 0 3 1 +After: [2, 1, 0, 1] + +Before: [3, 3, 1, 3] +7 2 3 0 +After: [0, 3, 1, 3] + +Before: [0, 2, 1, 0] +5 2 1 3 +After: [0, 2, 1, 2] + +Before: [1, 1, 1, 2] +4 1 3 2 +After: [1, 1, 0, 2] + +Before: [0, 3, 1, 2] +8 0 0 1 +After: [0, 0, 1, 2] + +Before: [2, 1, 3, 3] +7 1 3 0 +After: [0, 1, 3, 3] + +Before: [3, 2, 2, 1] +10 3 2 0 +After: [1, 2, 2, 1] + +Before: [2, 1, 0, 1] +3 0 3 3 +After: [2, 1, 0, 1] + +Before: [2, 1, 1, 1] +13 1 3 2 +After: [2, 1, 1, 1] + +Before: [2, 2, 0, 3] +7 1 3 1 +After: [2, 0, 0, 3] + +Before: [2, 2, 0, 1] +3 0 3 0 +After: [1, 2, 0, 1] + +Before: [2, 2, 3, 1] +3 0 3 3 +After: [2, 2, 3, 1] + +Before: [1, 2, 0, 0] +1 0 2 1 +After: [1, 0, 0, 0] + +Before: [2, 2, 2, 2] +14 3 2 1 +After: [2, 0, 2, 2] + +Before: [3, 1, 1, 2] +4 1 3 1 +After: [3, 0, 1, 2] + +Before: [2, 1, 1, 1] +2 0 1 3 +After: [2, 1, 1, 1] + +Before: [1, 1, 0, 0] +1 0 2 1 +After: [1, 0, 0, 0] + +Before: [1, 3, 0, 2] +1 0 2 1 +After: [1, 0, 0, 2] + +Before: [1, 1, 1, 3] +9 1 0 2 +After: [1, 1, 1, 3] + +Before: [3, 1, 2, 2] +12 1 2 2 +After: [3, 1, 0, 2] + +Before: [0, 1, 2, 1] +12 1 2 2 +After: [0, 1, 0, 1] + +Before: [3, 2, 0, 3] +7 1 3 3 +After: [3, 2, 0, 0] + +Before: [2, 1, 2, 3] +7 2 3 2 +After: [2, 1, 0, 3] + +Before: [3, 1, 3, 1] +13 1 3 0 +After: [1, 1, 3, 1] + +Before: [2, 1, 1, 1] +11 2 1 0 +After: [2, 1, 1, 1] + +Before: [0, 1, 1, 0] +11 2 1 3 +After: [0, 1, 1, 2] + +Before: [2, 1, 3, 3] +7 1 3 2 +After: [2, 1, 0, 3] + +Before: [2, 3, 2, 1] +10 3 2 1 +After: [2, 1, 2, 1] + +Before: [1, 1, 2, 2] +4 1 3 1 +After: [1, 0, 2, 2] + +Before: [1, 3, 0, 1] +1 0 2 0 +After: [0, 3, 0, 1] + +Before: [1, 3, 0, 3] +1 0 2 3 +After: [1, 3, 0, 0] + +Before: [2, 3, 3, 1] +3 0 3 1 +After: [2, 1, 3, 1] + +Before: [2, 1, 1, 2] +11 2 1 3 +After: [2, 1, 1, 2] + +Before: [2, 1, 1, 1] +2 0 1 1 +After: [2, 1, 1, 1] + +Before: [3, 1, 2, 2] +4 1 3 0 +After: [0, 1, 2, 2] + +Before: [2, 0, 2, 1] +10 3 2 1 +After: [2, 1, 2, 1] + +Before: [1, 3, 0, 1] +1 0 2 1 +After: [1, 0, 0, 1] + +Before: [1, 1, 0, 2] +9 1 0 0 +After: [1, 1, 0, 2] + +Before: [2, 3, 2, 1] +3 0 3 2 +After: [2, 3, 1, 1] + +Before: [1, 2, 2, 1] +0 3 3 3 +After: [1, 2, 2, 0] + +Before: [3, 1, 2, 2] +12 1 2 1 +After: [3, 0, 2, 2] + +Before: [0, 2, 3, 1] +8 0 0 1 +After: [0, 0, 3, 1] + +Before: [0, 0, 2, 1] +10 3 2 2 +After: [0, 0, 1, 1] + +Before: [3, 2, 1, 3] +15 0 0 3 +After: [3, 2, 1, 1] + +Before: [1, 3, 2, 2] +6 0 2 2 +After: [1, 3, 0, 2] + +Before: [1, 2, 2, 3] +6 0 2 3 +After: [1, 2, 2, 0] + +Before: [1, 1, 3, 2] +4 1 3 2 +After: [1, 1, 0, 2] + +Before: [1, 2, 2, 1] +10 3 2 3 +After: [1, 2, 2, 1] + +Before: [1, 2, 2, 1] +6 0 2 2 +After: [1, 2, 0, 1] + +Before: [1, 2, 1, 3] +7 2 3 1 +After: [1, 0, 1, 3] + +Before: [1, 2, 2, 1] +10 3 2 0 +After: [1, 2, 2, 1] + +Before: [2, 3, 3, 1] +3 0 3 3 +After: [2, 3, 3, 1] + +Before: [2, 3, 2, 3] +14 2 0 2 +After: [2, 3, 1, 3] + +Before: [2, 1, 3, 1] +2 0 1 3 +After: [2, 1, 3, 1] + +Before: [0, 3, 3, 0] +8 0 0 1 +After: [0, 0, 3, 0] + +Before: [2, 1, 1, 3] +7 2 3 2 +After: [2, 1, 0, 3] + +Before: [0, 2, 2, 1] +10 3 2 3 +After: [0, 2, 2, 1] + +Before: [3, 2, 1, 3] +5 2 1 3 +After: [3, 2, 1, 2] + +Before: [3, 1, 1, 2] +0 3 3 2 +After: [3, 1, 0, 2] + +Before: [0, 3, 1, 3] +7 2 3 3 +After: [0, 3, 1, 0] + +Before: [2, 0, 2, 1] +10 3 2 3 +After: [2, 0, 2, 1] + +Before: [2, 2, 1, 0] +5 2 1 2 +After: [2, 2, 2, 0] + +Before: [2, 1, 2, 2] +4 1 3 3 +After: [2, 1, 2, 0] + +Before: [1, 3, 1, 1] +0 2 3 2 +After: [1, 3, 0, 1] + +Before: [1, 1, 0, 3] +1 0 2 3 +After: [1, 1, 0, 0] + +Before: [1, 0, 0, 3] +1 0 2 2 +After: [1, 0, 0, 3] + +Before: [2, 1, 1, 0] +11 2 1 0 +After: [2, 1, 1, 0] + +Before: [2, 0, 0, 1] +3 0 3 3 +After: [2, 0, 0, 1] + +Before: [3, 3, 0, 1] +14 0 2 2 +After: [3, 3, 1, 1] + +Before: [0, 1, 2, 0] +8 0 0 1 +After: [0, 0, 2, 0] + +Before: [2, 0, 1, 1] +3 0 3 2 +After: [2, 0, 1, 1] + +Before: [1, 3, 2, 0] +6 0 2 1 +After: [1, 0, 2, 0] + +Before: [3, 3, 2, 0] +2 0 2 3 +After: [3, 3, 2, 1] + +Before: [2, 1, 0, 1] +13 1 3 2 +After: [2, 1, 1, 1] + +Before: [1, 1, 2, 1] +13 1 3 2 +After: [1, 1, 1, 1] + +Before: [1, 3, 2, 0] +6 0 2 2 +After: [1, 3, 0, 0] + +Before: [3, 1, 3, 2] +4 1 3 1 +After: [3, 0, 3, 2] + +Before: [2, 3, 2, 2] +15 0 0 3 +After: [2, 3, 2, 1] + +Before: [2, 3, 2, 1] +3 0 3 3 +After: [2, 3, 2, 1] + +Before: [2, 1, 1, 2] +4 1 3 0 +After: [0, 1, 1, 2] + +Before: [1, 1, 1, 1] +13 1 3 0 +After: [1, 1, 1, 1] + +Before: [3, 1, 1, 0] +11 2 1 2 +After: [3, 1, 2, 0] + +Before: [3, 1, 1, 1] +11 2 1 0 +After: [2, 1, 1, 1] + +Before: [3, 1, 0, 2] +4 1 3 0 +After: [0, 1, 0, 2] + +Before: [3, 3, 1, 3] +15 0 0 3 +After: [3, 3, 1, 1] + +Before: [1, 2, 2, 1] +10 3 2 1 +After: [1, 1, 2, 1] + +Before: [1, 1, 1, 0] +11 2 1 3 +After: [1, 1, 1, 2] + +Before: [1, 1, 1, 2] +11 2 1 0 +After: [2, 1, 1, 2] + +Before: [3, 2, 2, 2] +14 2 1 2 +After: [3, 2, 1, 2] + +Before: [0, 0, 3, 3] +15 2 2 3 +After: [0, 0, 3, 1] + +Before: [0, 3, 2, 2] +0 3 3 0 +After: [0, 3, 2, 2] + +Before: [1, 0, 2, 1] +10 3 2 1 +After: [1, 1, 2, 1] + +Before: [2, 1, 2, 2] +14 3 2 1 +After: [2, 0, 2, 2] + +Before: [1, 0, 0, 3] +1 0 2 1 +After: [1, 0, 0, 3] + +Before: [3, 2, 1, 3] +7 2 3 1 +After: [3, 0, 1, 3] + +Before: [3, 1, 1, 2] +11 2 1 0 +After: [2, 1, 1, 2] + +Before: [1, 3, 2, 1] +6 0 2 0 +After: [0, 3, 2, 1] + +Before: [2, 0, 3, 1] +3 0 3 0 +After: [1, 0, 3, 1] + +Before: [3, 1, 2, 2] +12 1 2 0 +After: [0, 1, 2, 2] + +Before: [3, 1, 2, 0] +12 1 2 3 +After: [3, 1, 2, 0] + +Before: [2, 1, 2, 0] +2 0 1 3 +After: [2, 1, 2, 1] + +Before: [1, 1, 3, 1] +14 2 3 2 +After: [1, 1, 0, 1] + +Before: [1, 3, 2, 3] +6 0 2 0 +After: [0, 3, 2, 3] + +Before: [1, 1, 2, 3] +12 1 2 0 +After: [0, 1, 2, 3] + +Before: [3, 0, 2, 1] +10 3 2 1 +After: [3, 1, 2, 1] + +Before: [1, 0, 2, 0] +6 0 2 1 +After: [1, 0, 2, 0] + +Before: [2, 3, 1, 3] +7 2 3 2 +After: [2, 3, 0, 3] + +Before: [1, 1, 1, 1] +11 2 1 3 +After: [1, 1, 1, 2] + +Before: [2, 1, 2, 2] +2 0 1 0 +After: [1, 1, 2, 2] + +Before: [1, 2, 1, 3] +7 2 3 3 +After: [1, 2, 1, 0] + +Before: [1, 1, 2, 2] +12 1 2 0 +After: [0, 1, 2, 2] + +Before: [2, 0, 2, 1] +10 3 2 2 +After: [2, 0, 1, 1] + +Before: [0, 1, 2, 3] +12 1 2 2 +After: [0, 1, 0, 3] + +Before: [2, 1, 1, 3] +11 2 1 0 +After: [2, 1, 1, 3] + +Before: [2, 1, 3, 1] +13 1 3 3 +After: [2, 1, 3, 1] + +Before: [0, 2, 1, 1] +8 0 0 1 +After: [0, 0, 1, 1] + +Before: [1, 0, 0, 2] +1 0 2 1 +After: [1, 0, 0, 2] + +Before: [2, 1, 3, 3] +2 0 1 1 +After: [2, 1, 3, 3] + +Before: [0, 1, 2, 2] +4 1 3 2 +After: [0, 1, 0, 2] + +Before: [1, 1, 2, 1] +13 1 3 0 +After: [1, 1, 2, 1] + +Before: [1, 1, 3, 0] +9 1 0 1 +After: [1, 1, 3, 0] + +Before: [1, 1, 0, 1] +1 0 2 1 +After: [1, 0, 0, 1] + +Before: [2, 2, 3, 1] +3 0 3 1 +After: [2, 1, 3, 1] + +Before: [3, 2, 1, 2] +5 2 1 0 +After: [2, 2, 1, 2] + +Before: [1, 1, 2, 0] +12 1 2 1 +After: [1, 0, 2, 0] + +Before: [3, 0, 2, 3] +2 0 2 3 +After: [3, 0, 2, 1] + +Before: [2, 1, 3, 3] +2 0 1 2 +After: [2, 1, 1, 3] + +Before: [3, 1, 3, 1] +15 0 0 0 +After: [1, 1, 3, 1] + +Before: [0, 1, 3, 2] +4 1 3 1 +After: [0, 0, 3, 2] + +Before: [3, 2, 3, 3] +15 2 0 0 +After: [1, 2, 3, 3] + +Before: [1, 3, 3, 1] +0 3 3 0 +After: [0, 3, 3, 1] + +Before: [0, 0, 2, 3] +7 2 3 0 +After: [0, 0, 2, 3] + +Before: [0, 2, 1, 3] +7 2 3 2 +After: [0, 2, 0, 3] + +Before: [3, 0, 2, 1] +2 0 2 0 +After: [1, 0, 2, 1] + +Before: [2, 2, 2, 1] +10 3 2 2 +After: [2, 2, 1, 1] + +Before: [1, 2, 0, 1] +1 0 2 0 +After: [0, 2, 0, 1] + +Before: [1, 2, 0, 0] +1 0 2 2 +After: [1, 2, 0, 0] + +Before: [3, 1, 2, 1] +2 0 2 1 +After: [3, 1, 2, 1] + +Before: [0, 0, 3, 1] +8 0 0 1 +After: [0, 0, 3, 1] + +Before: [0, 1, 1, 2] +11 2 1 3 +After: [0, 1, 1, 2] + +Before: [0, 1, 3, 1] +13 1 3 2 +After: [0, 1, 1, 1] + +Before: [1, 1, 1, 2] +11 2 1 2 +After: [1, 1, 2, 2] + +Before: [2, 0, 3, 1] +3 0 3 3 +After: [2, 0, 3, 1] + +Before: [0, 2, 1, 2] +8 0 0 0 +After: [0, 2, 1, 2] + +Before: [1, 0, 2, 1] +6 0 2 1 +After: [1, 0, 2, 1] + +Before: [1, 1, 0, 2] +4 1 3 3 +After: [1, 1, 0, 0] + +Before: [2, 2, 1, 1] +3 0 3 2 +After: [2, 2, 1, 1] + +Before: [1, 2, 1, 2] +5 2 1 2 +After: [1, 2, 2, 2] + +Before: [2, 0, 2, 1] +3 0 3 3 +After: [2, 0, 2, 1] + +Before: [2, 1, 0, 1] +3 0 3 2 +After: [2, 1, 1, 1] + +Before: [2, 2, 1, 2] +5 2 1 1 +After: [2, 2, 1, 2] + +Before: [1, 1, 2, 2] +9 1 0 3 +After: [1, 1, 2, 1] + +Before: [2, 2, 1, 3] +15 0 0 3 +After: [2, 2, 1, 1] + +Before: [3, 1, 0, 1] +13 1 3 3 +After: [3, 1, 0, 1] + +Before: [3, 3, 2, 1] +10 3 2 2 +After: [3, 3, 1, 1] + +Before: [0, 1, 3, 2] +4 1 3 3 +After: [0, 1, 3, 0] + +Before: [0, 1, 1, 0] +11 2 1 2 +After: [0, 1, 2, 0] + +Before: [3, 1, 3, 1] +14 3 1 0 +After: [0, 1, 3, 1] + +Before: [0, 1, 3, 3] +8 0 0 3 +After: [0, 1, 3, 0] + +Before: [0, 1, 2, 1] +10 3 2 0 +After: [1, 1, 2, 1] + +Before: [2, 1, 2, 1] +3 0 3 2 +After: [2, 1, 1, 1] + +Before: [0, 2, 1, 3] +5 2 1 3 +After: [0, 2, 1, 2] + +Before: [1, 0, 0, 3] +1 0 2 0 +After: [0, 0, 0, 3] + +Before: [2, 3, 0, 1] +3 0 3 0 +After: [1, 3, 0, 1] + +Before: [2, 1, 2, 1] +12 1 2 1 +After: [2, 0, 2, 1] + +Before: [2, 1, 3, 2] +4 1 3 0 +After: [0, 1, 3, 2] + +Before: [1, 2, 1, 0] +5 2 1 3 +After: [1, 2, 1, 2] + +Before: [3, 1, 3, 1] +13 1 3 1 +After: [3, 1, 3, 1] + +Before: [1, 2, 1, 0] +5 2 1 1 +After: [1, 2, 1, 0] + +Before: [3, 1, 2, 1] +10 3 2 1 +After: [3, 1, 2, 1] + +Before: [1, 1, 1, 1] +13 1 3 2 +After: [1, 1, 1, 1] + +Before: [2, 1, 2, 1] +13 1 3 2 +After: [2, 1, 1, 1] + +Before: [1, 2, 1, 3] +7 1 3 1 +After: [1, 0, 1, 3] + +Before: [0, 0, 2, 2] +14 3 2 3 +After: [0, 0, 2, 0] + +Before: [2, 2, 1, 3] +15 0 0 1 +After: [2, 1, 1, 3] + +Before: [2, 1, 3, 2] +4 1 3 1 +After: [2, 0, 3, 2] + +Before: [1, 2, 1, 3] +5 2 1 2 +After: [1, 2, 2, 3] + +Before: [2, 2, 1, 0] +5 2 1 3 +After: [2, 2, 1, 2] + +Before: [2, 0, 2, 1] +3 0 3 2 +After: [2, 0, 1, 1] + +Before: [1, 0, 0, 1] +1 0 2 0 +After: [0, 0, 0, 1] + +Before: [2, 1, 1, 0] +15 0 0 0 +After: [1, 1, 1, 0] + +Before: [0, 0, 3, 3] +8 0 0 0 +After: [0, 0, 3, 3] + +Before: [1, 1, 1, 2] +4 1 3 3 +After: [1, 1, 1, 0] + +Before: [1, 2, 0, 3] +1 0 2 1 +After: [1, 0, 0, 3] + +Before: [1, 1, 0, 2] +9 1 0 1 +After: [1, 1, 0, 2] + +Before: [3, 1, 1, 1] +11 2 1 3 +After: [3, 1, 1, 2] + +Before: [1, 1, 0, 3] +7 1 3 1 +After: [1, 0, 0, 3] + +Before: [1, 1, 1, 3] +7 1 3 2 +After: [1, 1, 0, 3] + +Before: [1, 1, 2, 3] +6 0 2 1 +After: [1, 0, 2, 3] + +Before: [2, 1, 1, 2] +4 1 3 3 +After: [2, 1, 1, 0] + +Before: [2, 2, 2, 3] +7 1 3 2 +After: [2, 2, 0, 3] + +Before: [1, 3, 2, 1] +0 3 3 3 +After: [1, 3, 2, 0] + +Before: [0, 0, 3, 3] +8 0 0 3 +After: [0, 0, 3, 0] + +Before: [3, 1, 3, 1] +15 0 0 1 +After: [3, 1, 3, 1] + +Before: [1, 0, 0, 2] +1 0 2 2 +After: [1, 0, 0, 2] + +Before: [0, 0, 0, 1] +0 3 3 1 +After: [0, 0, 0, 1] + +Before: [1, 1, 1, 2] +9 1 0 0 +After: [1, 1, 1, 2] + +Before: [1, 3, 0, 1] +1 0 2 2 +After: [1, 3, 0, 1] + +Before: [1, 1, 3, 3] +9 1 0 0 +After: [1, 1, 3, 3] + +Before: [2, 1, 3, 1] +13 1 3 2 +After: [2, 1, 1, 1] + +Before: [2, 1, 3, 2] +4 1 3 3 +After: [2, 1, 3, 0] + +Before: [2, 1, 2, 1] +13 1 3 3 +After: [2, 1, 2, 1] + +Before: [1, 0, 2, 2] +6 0 2 1 +After: [1, 0, 2, 2] + +Before: [1, 1, 2, 1] +10 3 2 2 +After: [1, 1, 1, 1] + +Before: [3, 2, 1, 3] +5 2 1 2 +After: [3, 2, 2, 3] + +Before: [0, 1, 2, 0] +12 1 2 2 +After: [0, 1, 0, 0] + +Before: [2, 1, 1, 3] +2 0 1 0 +After: [1, 1, 1, 3] + +Before: [1, 2, 2, 3] +14 2 1 2 +After: [1, 2, 1, 3] + +Before: [1, 2, 0, 3] +1 0 2 0 +After: [0, 2, 0, 3] + +Before: [0, 1, 2, 2] +8 0 0 2 +After: [0, 1, 0, 2] + +Before: [0, 2, 1, 0] +5 2 1 1 +After: [0, 2, 1, 0] + +Before: [2, 0, 0, 1] +15 0 0 2 +After: [2, 0, 1, 1] + +Before: [2, 2, 1, 3] +5 2 1 0 +After: [2, 2, 1, 3] + +Before: [3, 2, 2, 1] +10 3 2 2 +After: [3, 2, 1, 1] + +Before: [0, 3, 2, 2] +14 3 2 2 +After: [0, 3, 0, 2] + +Before: [1, 2, 0, 1] +1 0 2 2 +After: [1, 2, 0, 1] + +Before: [0, 1, 1, 0] +11 2 1 0 +After: [2, 1, 1, 0] + +Before: [1, 2, 2, 3] +14 2 1 3 +After: [1, 2, 2, 1] + +Before: [2, 1, 3, 1] +3 0 3 3 +After: [2, 1, 3, 1] + +Before: [0, 1, 2, 3] +7 1 3 3 +After: [0, 1, 2, 0] + +Before: [2, 1, 2, 2] +2 0 1 1 +After: [2, 1, 2, 2] + +Before: [2, 2, 1, 0] +5 2 1 1 +After: [2, 2, 1, 0] + +Before: [3, 2, 1, 3] +5 2 1 0 +After: [2, 2, 1, 3] + +Before: [1, 1, 2, 1] +0 3 3 1 +After: [1, 0, 2, 1] + +Before: [1, 0, 2, 1] +6 0 2 3 +After: [1, 0, 2, 0] + +Before: [1, 3, 0, 2] +1 0 2 0 +After: [0, 3, 0, 2] + +Before: [0, 1, 1, 3] +11 2 1 2 +After: [0, 1, 2, 3] + +Before: [1, 1, 3, 3] +9 1 0 1 +After: [1, 1, 3, 3] + +Before: [3, 1, 2, 3] +12 1 2 1 +After: [3, 0, 2, 3] + +Before: [0, 1, 1, 1] +13 1 3 0 +After: [1, 1, 1, 1] + +Before: [1, 1, 2, 3] +9 1 0 1 +After: [1, 1, 2, 3] + +Before: [0, 3, 1, 3] +7 2 3 0 +After: [0, 3, 1, 3] + +Before: [3, 1, 2, 1] +13 1 3 2 +After: [3, 1, 1, 1] + +Before: [1, 0, 1, 3] +7 2 3 1 +After: [1, 0, 1, 3] + +Before: [1, 1, 0, 3] +1 0 2 0 +After: [0, 1, 0, 3] + +Before: [2, 1, 2, 2] +12 1 2 2 +After: [2, 1, 0, 2] + +Before: [3, 0, 1, 3] +14 3 0 0 +After: [1, 0, 1, 3] + +Before: [3, 1, 3, 3] +7 1 3 3 +After: [3, 1, 3, 0] + +Before: [1, 1, 0, 0] +1 0 2 0 +After: [0, 1, 0, 0] + +Before: [1, 1, 1, 1] +0 2 3 2 +After: [1, 1, 0, 1] + +Before: [2, 1, 0, 1] +2 0 1 2 +After: [2, 1, 1, 1] + +Before: [1, 1, 2, 1] +14 3 1 1 +After: [1, 0, 2, 1] + +Before: [0, 0, 2, 3] +7 2 3 3 +After: [0, 0, 2, 0] + +Before: [3, 2, 0, 0] +14 0 2 1 +After: [3, 1, 0, 0] + +Before: [0, 0, 2, 3] +8 0 0 0 +After: [0, 0, 2, 3] + +Before: [3, 1, 1, 0] +11 2 1 1 +After: [3, 2, 1, 0] + +Before: [1, 2, 1, 1] +5 2 1 2 +After: [1, 2, 2, 1] + +Before: [0, 2, 1, 3] +7 2 3 3 +After: [0, 2, 1, 0] + +Before: [3, 1, 2, 2] +15 0 0 3 +After: [3, 1, 2, 1] + +Before: [0, 0, 0, 2] +8 0 0 2 +After: [0, 0, 0, 2] + +Before: [3, 1, 3, 1] +13 1 3 2 +After: [3, 1, 1, 1] + +Before: [1, 1, 2, 3] +9 1 0 2 +After: [1, 1, 1, 3] + +Before: [1, 2, 0, 2] +1 0 2 2 +After: [1, 2, 0, 2] + +Before: [2, 1, 2, 3] +2 0 1 3 +After: [2, 1, 2, 1] + +Before: [1, 2, 0, 3] +1 0 2 2 +After: [1, 2, 0, 3] + +Before: [1, 0, 2, 0] +6 0 2 3 +After: [1, 0, 2, 0] + +Before: [1, 0, 3, 1] +0 3 3 2 +After: [1, 0, 0, 1] + +Before: [1, 3, 2, 1] +6 0 2 3 +After: [1, 3, 2, 0] + +Before: [1, 1, 1, 1] +9 1 0 3 +After: [1, 1, 1, 1] + +Before: [0, 3, 2, 1] +0 3 3 1 +After: [0, 0, 2, 1] + +Before: [1, 1, 3, 1] +13 1 3 3 +After: [1, 1, 3, 1] + +Before: [2, 2, 0, 3] +7 1 3 0 +After: [0, 2, 0, 3] + +Before: [0, 3, 2, 1] +0 3 3 0 +After: [0, 3, 2, 1] + +Before: [1, 0, 0, 1] +1 0 2 2 +After: [1, 0, 0, 1] + +Before: [2, 1, 2, 1] +2 0 1 2 +After: [2, 1, 1, 1] + +Before: [1, 2, 2, 2] +6 0 2 2 +After: [1, 2, 0, 2] + +Before: [0, 1, 1, 1] +13 1 3 3 +After: [0, 1, 1, 1] + +Before: [2, 1, 1, 0] +11 2 1 2 +After: [2, 1, 2, 0] + +Before: [0, 1, 3, 1] +13 1 3 1 +After: [0, 1, 3, 1] + +Before: [3, 2, 0, 2] +0 3 3 1 +After: [3, 0, 0, 2] + +Before: [1, 1, 2, 1] +10 3 2 3 +After: [1, 1, 2, 1] + +Before: [2, 1, 2, 1] +13 1 3 0 +After: [1, 1, 2, 1] + +Before: [2, 1, 0, 1] +13 1 3 1 +After: [2, 1, 0, 1] + +Before: [2, 1, 2, 2] +12 1 2 3 +After: [2, 1, 2, 0] + +Before: [0, 1, 2, 0] +12 1 2 1 +After: [0, 0, 2, 0] + +Before: [3, 1, 2, 2] +4 1 3 2 +After: [3, 1, 0, 2] + +Before: [1, 1, 0, 2] +1 0 2 1 +After: [1, 0, 0, 2] + +Before: [0, 2, 1, 1] +0 2 3 2 +After: [0, 2, 0, 1] + +Before: [1, 1, 2, 0] +6 0 2 0 +After: [0, 1, 2, 0] + +Before: [0, 3, 1, 2] +8 0 0 3 +After: [0, 3, 1, 0] + +Before: [1, 3, 0, 0] +1 0 2 2 +After: [1, 3, 0, 0] + +Before: [1, 1, 2, 0] +12 1 2 2 +After: [1, 1, 0, 0] + +Before: [2, 1, 0, 2] +0 3 3 1 +After: [2, 0, 0, 2] + +Before: [0, 3, 3, 3] +8 0 0 1 +After: [0, 0, 3, 3] + +Before: [3, 3, 0, 1] +0 3 3 0 +After: [0, 3, 0, 1] + +Before: [3, 1, 1, 2] +4 1 3 3 +After: [3, 1, 1, 0] + +Before: [2, 1, 2, 3] +12 1 2 3 +After: [2, 1, 2, 0] + +Before: [3, 1, 2, 1] +12 1 2 3 +After: [3, 1, 2, 0] + +Before: [1, 0, 2, 2] +6 0 2 3 +After: [1, 0, 2, 0] + +Before: [1, 1, 0, 1] +0 3 3 1 +After: [1, 0, 0, 1] + +Before: [1, 1, 0, 3] +9 1 0 2 +After: [1, 1, 1, 3] + +Before: [3, 0, 2, 1] +10 3 2 3 +After: [3, 0, 2, 1] + +Before: [2, 2, 3, 3] +14 3 2 3 +After: [2, 2, 3, 1] + +Before: [3, 1, 2, 2] +12 1 2 3 +After: [3, 1, 2, 0] + +Before: [0, 1, 2, 1] +10 3 2 1 +After: [0, 1, 2, 1] + +Before: [0, 1, 3, 0] +8 0 0 2 +After: [0, 1, 0, 0] + +Before: [3, 1, 2, 0] +12 1 2 1 +After: [3, 0, 2, 0] + +Before: [1, 3, 2, 0] +6 0 2 3 +After: [1, 3, 2, 0] + +Before: [2, 0, 1, 3] +7 2 3 3 +After: [2, 0, 1, 0] + +Before: [3, 2, 2, 1] +10 3 2 3 +After: [3, 2, 2, 1] + +Before: [1, 2, 0, 0] +1 0 2 3 +After: [1, 2, 0, 0] + +Before: [2, 1, 1, 1] +0 2 3 0 +After: [0, 1, 1, 1] + +Before: [3, 2, 1, 1] +5 2 1 3 +After: [3, 2, 1, 2] + +Before: [3, 1, 3, 1] +14 2 3 0 +After: [0, 1, 3, 1] + +Before: [2, 1, 1, 3] +14 2 1 1 +After: [2, 0, 1, 3] + +Before: [0, 1, 1, 2] +8 0 0 0 +After: [0, 1, 1, 2] + +Before: [2, 3, 3, 2] +15 2 2 2 +After: [2, 3, 1, 2] + +Before: [0, 1, 2, 3] +7 2 3 1 +After: [0, 0, 2, 3] + +Before: [1, 1, 0, 2] +4 1 3 2 +After: [1, 1, 0, 2] + +Before: [0, 2, 3, 0] +8 0 0 2 +After: [0, 2, 0, 0] + +Before: [0, 1, 1, 1] +11 2 1 1 +After: [0, 2, 1, 1] + +Before: [2, 1, 1, 1] +13 1 3 0 +After: [1, 1, 1, 1] + +Before: [2, 3, 1, 3] +7 2 3 0 +After: [0, 3, 1, 3] + +Before: [2, 1, 2, 3] +12 1 2 2 +After: [2, 1, 0, 3] + +Before: [2, 2, 1, 3] +5 2 1 3 +After: [2, 2, 1, 2] + +Before: [3, 1, 1, 3] +11 2 1 0 +After: [2, 1, 1, 3] + +Before: [0, 0, 1, 3] +7 2 3 1 +After: [0, 0, 1, 3] + +Before: [1, 3, 2, 1] +10 3 2 2 +After: [1, 3, 1, 1] + +Before: [3, 2, 1, 2] +15 0 0 2 +After: [3, 2, 1, 2] + +Before: [1, 2, 1, 1] +0 2 3 1 +After: [1, 0, 1, 1] + +Before: [1, 1, 1, 3] +9 1 0 3 +After: [1, 1, 1, 1] + +Before: [1, 1, 0, 3] +9 1 0 3 +After: [1, 1, 0, 1] + +Before: [0, 1, 1, 1] +11 2 1 2 +After: [0, 1, 2, 1] + +Before: [0, 1, 2, 1] +13 1 3 2 +After: [0, 1, 1, 1] + +Before: [1, 1, 2, 2] +4 1 3 2 +After: [1, 1, 0, 2] + +Before: [3, 1, 1, 2] +11 2 1 3 +After: [3, 1, 1, 2] + +Before: [2, 2, 3, 2] +0 3 3 3 +After: [2, 2, 3, 0] + +Before: [0, 0, 1, 1] +0 2 3 1 +After: [0, 0, 1, 1] + +Before: [0, 1, 2, 2] +12 1 2 1 +After: [0, 0, 2, 2] + +Before: [2, 0, 3, 1] +3 0 3 2 +After: [2, 0, 1, 1] + +Before: [1, 0, 2, 0] +6 0 2 0 +After: [0, 0, 2, 0] + +Before: [0, 2, 1, 1] +5 2 1 0 +After: [2, 2, 1, 1] + +Before: [1, 3, 3, 0] +15 2 2 0 +After: [1, 3, 3, 0] + +Before: [0, 3, 2, 0] +8 0 0 2 +After: [0, 3, 0, 0] + +Before: [2, 2, 2, 1] +0 3 3 1 +After: [2, 0, 2, 1] + +Before: [3, 1, 1, 2] +4 1 3 0 +After: [0, 1, 1, 2] + +Before: [1, 2, 1, 0] +5 2 1 0 +After: [2, 2, 1, 0] + +Before: [2, 2, 3, 3] +15 0 0 0 +After: [1, 2, 3, 3] + +Before: [2, 1, 0, 0] +2 0 1 1 +After: [2, 1, 0, 0] + +Before: [1, 2, 2, 3] +6 0 2 2 +After: [1, 2, 0, 3] + +Before: [1, 0, 0, 1] +1 0 2 1 +After: [1, 0, 0, 1] + +Before: [2, 2, 0, 1] +3 0 3 1 +After: [2, 1, 0, 1] + +Before: [3, 2, 1, 2] +5 2 1 1 +After: [3, 2, 1, 2] + +Before: [2, 1, 3, 2] +14 2 0 1 +After: [2, 1, 3, 2] + +Before: [1, 1, 0, 0] +9 1 0 2 +After: [1, 1, 1, 0] + +Before: [2, 2, 3, 3] +15 2 2 2 +After: [2, 2, 1, 3] + +Before: [0, 2, 1, 0] +8 0 0 2 +After: [0, 2, 0, 0] + +Before: [1, 1, 0, 1] +9 1 0 0 +After: [1, 1, 0, 1] + +Before: [0, 1, 2, 2] +4 1 3 0 +After: [0, 1, 2, 2] + +Before: [1, 1, 0, 0] +9 1 0 0 +After: [1, 1, 0, 0] + +Before: [2, 3, 2, 1] +3 0 3 1 +After: [2, 1, 2, 1] + +Before: [1, 2, 1, 3] +5 2 1 3 +After: [1, 2, 1, 2] + +Before: [2, 1, 1, 3] +11 2 1 2 +After: [2, 1, 2, 3] + +Before: [1, 1, 3, 0] +9 1 0 2 +After: [1, 1, 1, 0] + +Before: [2, 1, 1, 3] +11 2 1 1 +After: [2, 2, 1, 3] + +Before: [2, 1, 3, 2] +2 0 1 2 +After: [2, 1, 1, 2] + +Before: [0, 2, 1, 3] +5 2 1 2 +After: [0, 2, 2, 3] + +Before: [1, 0, 0, 2] +1 0 2 3 +After: [1, 0, 0, 0] + +Before: [1, 1, 1, 2] +9 1 0 3 +After: [1, 1, 1, 1] + +Before: [2, 1, 3, 2] +4 1 3 2 +After: [2, 1, 0, 2] + +Before: [1, 0, 2, 2] +6 0 2 2 +After: [1, 0, 0, 2] + +Before: [3, 1, 1, 3] +11 2 1 1 +After: [3, 2, 1, 3] + +Before: [3, 1, 2, 3] +2 0 2 0 +After: [1, 1, 2, 3] + +Before: [1, 2, 0, 2] +1 0 2 0 +After: [0, 2, 0, 2] + +Before: [3, 1, 2, 1] +10 3 2 2 +After: [3, 1, 1, 1] + +Before: [1, 0, 2, 3] +7 2 3 0 +After: [0, 0, 2, 3] + +Before: [3, 1, 2, 3] +12 1 2 0 +After: [0, 1, 2, 3] + +Before: [2, 1, 1, 3] +7 2 3 1 +After: [2, 0, 1, 3] + +Before: [0, 2, 1, 2] +5 2 1 3 +After: [0, 2, 1, 2] + +Before: [3, 1, 1, 0] +11 2 1 0 +After: [2, 1, 1, 0] + +Before: [1, 1, 3, 1] +9 1 0 0 +After: [1, 1, 3, 1] + +Before: [1, 1, 2, 2] +9 1 0 1 +After: [1, 1, 2, 2] + +Before: [2, 1, 1, 3] +11 2 1 3 +After: [2, 1, 1, 2] + +Before: [1, 1, 1, 2] +4 1 3 1 +After: [1, 0, 1, 2] + +Before: [3, 1, 0, 1] +13 1 3 0 +After: [1, 1, 0, 1] + +Before: [1, 2, 2, 3] +6 0 2 0 +After: [0, 2, 2, 3] + +Before: [1, 3, 0, 3] +1 0 2 0 +After: [0, 3, 0, 3] + +Before: [2, 1, 1, 0] +2 0 1 2 +After: [2, 1, 1, 0] + +Before: [0, 1, 2, 1] +12 1 2 3 +After: [0, 1, 2, 0] + +Before: [2, 3, 1, 1] +3 0 3 3 +After: [2, 3, 1, 1] + +Before: [2, 1, 3, 3] +2 0 1 3 +After: [2, 1, 3, 1] + +Before: [1, 3, 2, 1] +10 3 2 3 +After: [1, 3, 2, 1] + +Before: [1, 1, 3, 3] +9 1 0 3 +After: [1, 1, 3, 1] + +Before: [1, 1, 3, 2] +9 1 0 1 +After: [1, 1, 3, 2] + +Before: [1, 1, 0, 1] +13 1 3 2 +After: [1, 1, 1, 1] + +Before: [3, 0, 2, 0] +2 0 2 1 +After: [3, 1, 2, 0] + +Before: [2, 0, 0, 0] +14 0 1 2 +After: [2, 0, 1, 0] + +Before: [0, 1, 2, 1] +13 1 3 3 +After: [0, 1, 2, 1] + +Before: [2, 1, 3, 0] +14 2 0 1 +After: [2, 1, 3, 0] + +Before: [2, 1, 0, 1] +13 1 3 0 +After: [1, 1, 0, 1] + +Before: [2, 1, 0, 1] +2 0 1 1 +After: [2, 1, 0, 1] + +Before: [0, 3, 2, 1] +10 3 2 0 +After: [1, 3, 2, 1] + +Before: [0, 1, 3, 1] +0 3 3 2 +After: [0, 1, 0, 1] + +Before: [0, 2, 1, 1] +5 2 1 1 +After: [0, 2, 1, 1] + +Before: [2, 1, 1, 2] +15 0 0 3 +After: [2, 1, 1, 1] + +Before: [1, 1, 2, 0] +6 0 2 2 +After: [1, 1, 0, 0] + +Before: [1, 1, 2, 1] +6 0 2 0 +After: [0, 1, 2, 1] + +Before: [0, 2, 1, 3] +7 1 3 1 +After: [0, 0, 1, 3] + +Before: [1, 0, 0, 0] +1 0 2 3 +After: [1, 0, 0, 0] + +Before: [2, 1, 2, 3] +2 0 1 2 +After: [2, 1, 1, 3] + +Before: [0, 2, 0, 2] +0 3 3 1 +After: [0, 0, 0, 2] + +Before: [0, 2, 3, 0] +15 2 2 2 +After: [0, 2, 1, 0] + +Before: [1, 2, 2, 2] +14 2 1 3 +After: [1, 2, 2, 1] + +Before: [0, 1, 3, 1] +8 0 0 2 +After: [0, 1, 0, 1] + +Before: [3, 3, 3, 2] +15 0 0 3 +After: [3, 3, 3, 1] + +Before: [3, 3, 0, 2] +14 0 2 1 +After: [3, 1, 0, 2] + +Before: [0, 1, 1, 3] +11 2 1 0 +After: [2, 1, 1, 3] + +Before: [1, 1, 0, 1] +9 1 0 2 +After: [1, 1, 1, 1] + +Before: [0, 1, 2, 1] +10 3 2 3 +After: [0, 1, 2, 1] + +Before: [2, 2, 2, 1] +10 3 2 1 +After: [2, 1, 2, 1] + +Before: [0, 1, 2, 2] +4 1 3 3 +After: [0, 1, 2, 0] + +Before: [1, 2, 2, 1] +10 3 2 2 +After: [1, 2, 1, 1] + +Before: [2, 1, 1, 2] +11 2 1 1 +After: [2, 2, 1, 2] + +Before: [1, 1, 2, 1] +12 1 2 3 +After: [1, 1, 2, 0] + +Before: [3, 3, 1, 1] +0 2 3 1 +After: [3, 0, 1, 1] + +Before: [0, 1, 2, 2] +4 1 3 1 +After: [0, 0, 2, 2] + +Before: [0, 3, 2, 2] +8 0 0 3 +After: [0, 3, 2, 0] + +Before: [2, 1, 2, 1] +2 0 1 0 +After: [1, 1, 2, 1] + +Before: [1, 1, 0, 3] +1 0 2 1 +After: [1, 0, 0, 3] + +Before: [3, 3, 3, 2] +15 0 0 0 +After: [1, 3, 3, 2] + +Before: [0, 1, 1, 2] +4 1 3 2 +After: [0, 1, 0, 2] + +Before: [1, 3, 0, 3] +1 0 2 1 +After: [1, 0, 0, 3] + +Before: [1, 1, 0, 1] +1 0 2 2 +After: [1, 1, 0, 1] + +Before: [2, 1, 0, 2] +4 1 3 0 +After: [0, 1, 0, 2] + +Before: [3, 2, 2, 2] +2 0 2 2 +After: [3, 2, 1, 2] + +Before: [0, 2, 2, 1] +10 3 2 1 +After: [0, 1, 2, 1] + +Before: [0, 1, 0, 2] +4 1 3 2 +After: [0, 1, 0, 2] + +Before: [0, 1, 0, 2] +4 1 3 3 +After: [0, 1, 0, 0] + +Before: [1, 1, 2, 1] +10 3 2 1 +After: [1, 1, 2, 1] + +Before: [1, 1, 0, 1] +13 1 3 0 +After: [1, 1, 0, 1] + +Before: [1, 3, 2, 2] +6 0 2 1 +After: [1, 0, 2, 2] + +Before: [0, 1, 2, 1] +13 1 3 0 +After: [1, 1, 2, 1] + +Before: [0, 1, 1, 3] +11 2 1 1 +After: [0, 2, 1, 3] + +Before: [3, 2, 1, 0] +5 2 1 3 +After: [3, 2, 1, 2] + +Before: [2, 1, 2, 3] +7 2 3 3 +After: [2, 1, 2, 0] + +Before: [1, 1, 1, 1] +11 2 1 2 +After: [1, 1, 2, 1] + +Before: [2, 1, 1, 1] +3 0 3 2 +After: [2, 1, 1, 1] + +Before: [0, 1, 1, 3] +8 0 0 1 +After: [0, 0, 1, 3] + +Before: [3, 2, 3, 3] +7 1 3 3 +After: [3, 2, 3, 0] + +Before: [0, 3, 0, 0] +8 0 0 2 +After: [0, 3, 0, 0] + +Before: [1, 1, 2, 1] +6 0 2 1 +After: [1, 0, 2, 1] + +Before: [0, 1, 1, 2] +4 1 3 0 +After: [0, 1, 1, 2] + +Before: [1, 1, 2, 1] +9 1 0 1 +After: [1, 1, 2, 1] + +Before: [3, 1, 2, 0] +12 1 2 0 +After: [0, 1, 2, 0] + +Before: [1, 3, 0, 3] +1 0 2 2 +After: [1, 3, 0, 3] + +Before: [1, 1, 0, 3] +9 1 0 1 +After: [1, 1, 0, 3] + +Before: [0, 2, 2, 2] +8 0 0 1 +After: [0, 0, 2, 2] + +Before: [0, 1, 1, 1] +13 1 3 1 +After: [0, 1, 1, 1] + +Before: [1, 1, 3, 1] +13 1 3 0 +After: [1, 1, 3, 1] + +Before: [0, 1, 2, 1] +8 0 0 0 +After: [0, 1, 2, 1] + +Before: [2, 1, 2, 1] +12 1 2 2 +After: [2, 1, 0, 1] + +Before: [1, 0, 2, 3] +6 0 2 1 +After: [1, 0, 2, 3] + +Before: [3, 0, 3, 1] +15 2 0 2 +After: [3, 0, 1, 1] + +Before: [0, 1, 1, 1] +0 2 3 0 +After: [0, 1, 1, 1] + +Before: [3, 0, 0, 3] +14 0 2 1 +After: [3, 1, 0, 3] + +Before: [3, 1, 1, 1] +0 2 3 1 +After: [3, 0, 1, 1] + +Before: [0, 1, 2, 3] +7 2 3 3 +After: [0, 1, 2, 0] + +Before: [3, 1, 0, 1] +13 1 3 1 +After: [3, 1, 0, 1] + +Before: [0, 0, 3, 0] +8 0 0 1 +After: [0, 0, 3, 0] + +Before: [1, 1, 0, 2] +1 0 2 3 +After: [1, 1, 0, 0] + +Before: [2, 1, 1, 2] +4 1 3 1 +After: [2, 0, 1, 2] + +Before: [3, 2, 3, 0] +15 2 2 3 +After: [3, 2, 3, 1] + +Before: [0, 2, 0, 3] +7 1 3 0 +After: [0, 2, 0, 3] + +Before: [1, 1, 3, 2] +9 1 0 2 +After: [1, 1, 1, 2] + +Before: [0, 3, 1, 3] +8 0 0 1 +After: [0, 0, 1, 3] + +Before: [3, 1, 2, 1] +2 0 2 0 +After: [1, 1, 2, 1] + +Before: [1, 1, 3, 1] +9 1 0 2 +After: [1, 1, 1, 1] + +Before: [2, 1, 3, 0] +2 0 1 3 +After: [2, 1, 3, 1] + +Before: [2, 1, 1, 0] +11 2 1 1 +After: [2, 2, 1, 0] + +Before: [3, 1, 1, 1] +13 1 3 0 +After: [1, 1, 1, 1] + +Before: [2, 2, 1, 3] +5 2 1 1 +After: [2, 2, 1, 3] + +Before: [0, 0, 2, 1] +10 3 2 3 +After: [0, 0, 2, 1] + +Before: [3, 3, 0, 2] +0 3 3 1 +After: [3, 0, 0, 2] + +Before: [0, 2, 1, 0] +8 0 0 0 +After: [0, 2, 1, 0] + +Before: [3, 3, 0, 2] +15 0 0 3 +After: [3, 3, 0, 1] + +Before: [1, 0, 2, 3] +6 0 2 0 +After: [0, 0, 2, 3] + +Before: [0, 0, 1, 1] +8 0 0 1 +After: [0, 0, 1, 1] + +Before: [1, 0, 2, 1] +10 3 2 0 +After: [1, 0, 2, 1] + +Before: [1, 2, 1, 2] +5 2 1 1 +After: [1, 2, 1, 2] + +Before: [2, 1, 3, 1] +14 2 0 1 +After: [2, 1, 3, 1] + +Before: [2, 1, 2, 0] +2 0 1 0 +After: [1, 1, 2, 0] + +Before: [1, 1, 2, 2] +6 0 2 3 +After: [1, 1, 2, 0] + +Before: [2, 1, 1, 3] +2 0 1 2 +After: [2, 1, 1, 3] + +Before: [2, 3, 3, 2] +14 2 0 2 +After: [2, 3, 1, 2] + +Before: [1, 0, 0, 2] +1 0 2 0 +After: [0, 0, 0, 2] + +Before: [3, 3, 2, 2] +15 0 0 0 +After: [1, 3, 2, 2] + +Before: [0, 1, 1, 2] +4 1 3 3 +After: [0, 1, 1, 0] + +Before: [2, 2, 1, 2] +5 2 1 3 +After: [2, 2, 1, 2] + +Before: [2, 1, 2, 0] +12 1 2 0 +After: [0, 1, 2, 0] + +Before: [3, 1, 0, 1] +13 1 3 2 +After: [3, 1, 1, 1] + +Before: [1, 2, 1, 1] +5 2 1 1 +After: [1, 2, 1, 1] + +Before: [2, 1, 2, 2] +4 1 3 2 +After: [2, 1, 0, 2] + +Before: [0, 1, 0, 2] +4 1 3 0 +After: [0, 1, 0, 2] + +Before: [3, 1, 0, 2] +4 1 3 2 +After: [3, 1, 0, 2] + +Before: [1, 1, 3, 2] +4 1 3 1 +After: [1, 0, 3, 2] + +Before: [3, 1, 1, 1] +13 1 3 2 +After: [3, 1, 1, 1] + +Before: [0, 0, 2, 0] +8 0 0 3 +After: [0, 0, 2, 0] + +Before: [1, 1, 3, 2] +9 1 0 0 +After: [1, 1, 3, 2] + +Before: [3, 2, 1, 0] +5 2 1 1 +After: [3, 2, 1, 0] + +Before: [1, 1, 0, 2] +1 0 2 0 +After: [0, 1, 0, 2] + +Before: [2, 1, 0, 1] +13 1 3 3 +After: [2, 1, 0, 1] + +Before: [3, 1, 2, 0] +12 1 2 2 +After: [3, 1, 0, 0] + +Before: [3, 2, 2, 3] +2 0 2 0 +After: [1, 2, 2, 3] + +Before: [1, 1, 1, 0] +11 2 1 1 +After: [1, 2, 1, 0] + +Before: [0, 0, 1, 2] +8 0 0 3 +After: [0, 0, 1, 0] + +Before: [1, 1, 0, 0] +9 1 0 3 +After: [1, 1, 0, 1] + +Before: [1, 1, 3, 0] +9 1 0 3 +After: [1, 1, 3, 1] + +Before: [1, 1, 1, 1] +11 2 1 1 +After: [1, 2, 1, 1] + +Before: [3, 0, 0, 0] +14 0 2 3 +After: [3, 0, 0, 1] + +Before: [2, 1, 1, 3] +7 1 3 3 +After: [2, 1, 1, 0] + +Before: [0, 3, 3, 2] +8 0 0 2 +After: [0, 3, 0, 2] + +Before: [3, 1, 2, 1] +12 1 2 1 +After: [3, 0, 2, 1] + +Before: [3, 0, 2, 3] +7 2 3 0 +After: [0, 0, 2, 3] + +Before: [3, 1, 1, 1] +14 3 1 1 +After: [3, 0, 1, 1] + +Before: [1, 1, 1, 3] +9 1 0 0 +After: [1, 1, 1, 3] + +Before: [0, 0, 3, 3] +8 0 0 2 +After: [0, 0, 0, 3] + +Before: [3, 1, 3, 3] +7 1 3 1 +After: [3, 0, 3, 3] + +Before: [1, 1, 2, 2] +12 1 2 1 +After: [1, 0, 2, 2] + +Before: [1, 1, 0, 1] +1 0 2 3 +After: [1, 1, 0, 0] + +Before: [2, 2, 2, 1] +3 0 3 2 +After: [2, 2, 1, 1] + +Before: [2, 0, 3, 0] +14 0 1 1 +After: [2, 1, 3, 0] + +Before: [1, 1, 2, 2] +4 1 3 3 +After: [1, 1, 2, 0] + +Before: [1, 1, 2, 3] +12 1 2 2 +After: [1, 1, 0, 3] + +Before: [1, 2, 1, 3] +7 2 3 2 +After: [1, 2, 0, 3] + +Before: [3, 0, 0, 1] +14 0 2 2 +After: [3, 0, 1, 1] + +Before: [3, 2, 1, 0] +5 2 1 0 +After: [2, 2, 1, 0] + +Before: [2, 3, 2, 1] +3 0 3 0 +After: [1, 3, 2, 1] + +Before: [0, 1, 3, 2] +8 0 0 3 +After: [0, 1, 3, 0] + +Before: [2, 2, 1, 1] +3 0 3 3 +After: [2, 2, 1, 1] + +Before: [3, 2, 3, 1] +0 3 3 3 +After: [3, 2, 3, 0] + +Before: [2, 1, 1, 0] +14 2 1 3 +After: [2, 1, 1, 0] + +Before: [2, 2, 1, 3] +7 2 3 1 +After: [2, 0, 1, 3] + +Before: [2, 3, 3, 1] +3 0 3 2 +After: [2, 3, 1, 1] + +Before: [1, 1, 2, 1] +9 1 0 2 +After: [1, 1, 1, 1] + +Before: [0, 3, 2, 1] +10 3 2 1 +After: [0, 1, 2, 1] + +Before: [0, 1, 0, 1] +13 1 3 3 +After: [0, 1, 0, 1] + +Before: [1, 1, 1, 3] +11 2 1 3 +After: [1, 1, 1, 2] + +Before: [3, 1, 1, 2] +11 2 1 2 +After: [3, 1, 2, 2] + +Before: [1, 3, 2, 3] +6 0 2 3 +After: [1, 3, 2, 0] + +Before: [0, 1, 2, 3] +8 0 0 2 +After: [0, 1, 0, 3] + +Before: [3, 0, 1, 3] +14 3 0 2 +After: [3, 0, 1, 3] + +Before: [2, 1, 2, 0] +12 1 2 3 +After: [2, 1, 2, 0] + +Before: [0, 1, 1, 1] +11 2 1 0 +After: [2, 1, 1, 1] + +Before: [2, 3, 2, 1] +0 3 3 2 +After: [2, 3, 0, 1] + +Before: [1, 1, 0, 2] +0 3 3 3 +After: [1, 1, 0, 0] + +Before: [1, 0, 0, 1] +1 0 2 3 +After: [1, 0, 0, 0] + +Before: [3, 2, 1, 3] +7 2 3 3 +After: [3, 2, 1, 0] + +Before: [3, 1, 1, 3] +11 2 1 2 +After: [3, 1, 2, 3] + +Before: [0, 1, 2, 2] +12 1 2 3 +After: [0, 1, 2, 0] + +Before: [3, 3, 2, 1] +10 3 2 0 +After: [1, 3, 2, 1] + +Before: [1, 1, 3, 1] +13 1 3 1 +After: [1, 1, 3, 1] + +Before: [2, 2, 1, 1] +3 0 3 1 +After: [2, 1, 1, 1] + +Before: [2, 1, 2, 2] +4 1 3 0 +After: [0, 1, 2, 2] + +Before: [1, 1, 1, 1] +9 1 0 2 +After: [1, 1, 1, 1] + +Before: [1, 3, 2, 1] +10 3 2 0 +After: [1, 3, 2, 1] + +Before: [2, 0, 2, 1] +10 3 2 0 +After: [1, 0, 2, 1] + +Before: [1, 1, 0, 3] +1 0 2 2 +After: [1, 1, 0, 3] + +Before: [1, 2, 0, 1] +1 0 2 3 +After: [1, 2, 0, 0] + +Before: [1, 3, 0, 0] +1 0 2 0 +After: [0, 3, 0, 0] + +Before: [2, 1, 1, 3] +14 2 1 0 +After: [0, 1, 1, 3] + +Before: [1, 1, 1, 2] +9 1 0 1 +After: [1, 1, 1, 2] + +Before: [1, 1, 0, 1] +13 1 3 1 +After: [1, 1, 0, 1] + +Before: [2, 0, 0, 2] +15 0 0 0 +After: [1, 0, 0, 2] + +Before: [2, 3, 1, 1] +3 0 3 0 +After: [1, 3, 1, 1] + +Before: [0, 1, 2, 0] +12 1 2 3 +After: [0, 1, 2, 0] + +Before: [1, 2, 1, 2] +5 2 1 0 +After: [2, 2, 1, 2] + +Before: [2, 0, 2, 2] +14 3 2 2 +After: [2, 0, 0, 2] + +Before: [0, 2, 2, 1] +10 3 2 0 +After: [1, 2, 2, 1] + +Before: [2, 1, 0, 2] +4 1 3 3 +After: [2, 1, 0, 0] + +Before: [1, 3, 0, 2] +1 0 2 2 +After: [1, 3, 0, 2] + +Before: [0, 0, 2, 3] +8 0 0 1 +After: [0, 0, 2, 3] + +Before: [2, 1, 1, 3] +7 1 3 0 +After: [0, 1, 1, 3] + +Before: [3, 1, 2, 1] +13 1 3 0 +After: [1, 1, 2, 1] + +Before: [2, 0, 1, 1] +3 0 3 1 +After: [2, 1, 1, 1] + +Before: [1, 1, 2, 1] +13 1 3 1 +After: [1, 1, 2, 1] + +Before: [0, 1, 2, 1] +12 1 2 1 +After: [0, 0, 2, 1] + +Before: [2, 2, 3, 3] +14 3 2 2 +After: [2, 2, 1, 3] + +Before: [3, 1, 1, 1] +13 1 3 3 +After: [3, 1, 1, 1] + +Before: [3, 3, 3, 2] +15 2 0 1 +After: [3, 1, 3, 2] + +Before: [2, 1, 2, 1] +3 0 3 1 +After: [2, 1, 2, 1] + +Before: [3, 1, 2, 0] +2 0 2 3 +After: [3, 1, 2, 1] + +Before: [1, 2, 1, 2] +5 2 1 3 +After: [1, 2, 1, 2] + +Before: [3, 2, 1, 1] +5 2 1 0 +After: [2, 2, 1, 1] + +Before: [0, 1, 2, 1] +12 1 2 0 +After: [0, 1, 2, 1] + +Before: [2, 1, 1, 1] +3 0 3 0 +After: [1, 1, 1, 1] + +Before: [3, 1, 1, 2] +11 2 1 1 +After: [3, 2, 1, 2] + +Before: [1, 1, 1, 3] +11 2 1 0 +After: [2, 1, 1, 3] + +Before: [1, 1, 2, 0] +9 1 0 3 +After: [1, 1, 2, 1] + +Before: [0, 2, 2, 3] +8 0 0 3 +After: [0, 2, 2, 0] + +Before: [0, 0, 2, 1] +10 3 2 1 +After: [0, 1, 2, 1] + +Before: [0, 2, 3, 3] +14 3 2 0 +After: [1, 2, 3, 3] + +Before: [2, 1, 0, 3] +2 0 1 2 +After: [2, 1, 1, 3] + +Before: [3, 1, 2, 0] +2 0 2 0 +After: [1, 1, 2, 0] + +Before: [3, 1, 0, 2] +14 0 2 0 +After: [1, 1, 0, 2] + +Before: [2, 1, 3, 0] +2 0 1 1 +After: [2, 1, 3, 0] + +Before: [1, 1, 1, 0] +9 1 0 3 +After: [1, 1, 1, 1] + +Before: [1, 0, 0, 0] +1 0 2 1 +After: [1, 0, 0, 0] + +Before: [0, 3, 2, 2] +8 0 0 2 +After: [0, 3, 0, 2] + +Before: [3, 3, 2, 2] +2 0 2 0 +After: [1, 3, 2, 2] + +Before: [0, 2, 1, 2] +5 2 1 1 +After: [0, 2, 1, 2] + +Before: [3, 3, 2, 2] +2 0 2 3 +After: [3, 3, 2, 1] + +Before: [0, 2, 1, 2] +5 2 1 0 +After: [2, 2, 1, 2] + +Before: [1, 0, 2, 1] +10 3 2 2 +After: [1, 0, 1, 1] + +Before: [0, 1, 0, 1] +13 1 3 2 +After: [0, 1, 1, 1] + +Before: [3, 1, 1, 1] +14 2 1 1 +After: [3, 0, 1, 1] + +Before: [0, 1, 0, 1] +13 1 3 1 +After: [0, 1, 0, 1] + +Before: [2, 2, 0, 1] +3 0 3 2 +After: [2, 2, 1, 1] + +Before: [3, 2, 1, 3] +14 3 0 0 +After: [1, 2, 1, 3] + +Before: [1, 1, 2, 2] +4 1 3 0 +After: [0, 1, 2, 2] + +Before: [3, 1, 2, 3] +7 1 3 1 +After: [3, 0, 2, 3] + +Before: [3, 0, 3, 0] +15 2 2 1 +After: [3, 1, 3, 0] + +Before: [0, 2, 2, 2] +14 2 1 3 +After: [0, 2, 2, 1] + +Before: [1, 1, 2, 3] +12 1 2 1 +After: [1, 0, 2, 3] + +Before: [3, 1, 1, 1] +13 1 3 1 +After: [3, 1, 1, 1] + +Before: [2, 1, 1, 1] +13 1 3 3 +After: [2, 1, 1, 1] + +Before: [2, 2, 2, 3] +7 2 3 3 +After: [2, 2, 2, 0] + +Before: [2, 3, 3, 3] +15 0 0 2 +After: [2, 3, 1, 3] + +Before: [3, 1, 2, 1] +13 1 3 3 +After: [3, 1, 2, 1] + +Before: [3, 3, 3, 2] +15 0 2 0 +After: [1, 3, 3, 2] + +Before: [3, 1, 0, 2] +0 3 3 0 +After: [0, 1, 0, 2] + +Before: [2, 0, 3, 2] +14 0 1 1 +After: [2, 1, 3, 2] + +Before: [1, 0, 2, 1] +10 3 2 3 +After: [1, 0, 2, 1] + +Before: [1, 3, 3, 1] +0 3 3 2 +After: [1, 3, 0, 1] + +Before: [0, 2, 2, 1] +10 3 2 2 +After: [0, 2, 1, 1] + +Before: [2, 2, 1, 0] +5 2 1 0 +After: [2, 2, 1, 0] + +Before: [2, 3, 0, 1] +3 0 3 2 +After: [2, 3, 1, 1] + +Before: [1, 2, 2, 2] +6 0 2 1 +After: [1, 0, 2, 2] + +Before: [0, 1, 2, 2] +12 1 2 0 +After: [0, 1, 2, 2] + +Before: [1, 1, 0, 2] +9 1 0 2 +After: [1, 1, 1, 2] + +Before: [0, 1, 2, 2] +12 1 2 2 +After: [0, 1, 0, 2] + +Before: [2, 1, 2, 0] +12 1 2 2 +After: [2, 1, 0, 0] + +Before: [2, 3, 3, 0] +15 0 0 3 +After: [2, 3, 3, 1] + +Before: [2, 2, 0, 1] +15 0 0 0 +After: [1, 2, 0, 1] + +Before: [2, 0, 3, 2] +0 3 3 2 +After: [2, 0, 0, 2] + +Before: [3, 0, 3, 2] +15 2 2 3 +After: [3, 0, 3, 1] + +Before: [2, 3, 2, 1] +10 3 2 3 +After: [2, 3, 2, 1] + +Before: [2, 1, 2, 1] +3 0 3 3 +After: [2, 1, 2, 1] + +Before: [1, 3, 0, 0] +1 0 2 3 +After: [1, 3, 0, 0] + +Before: [3, 1, 2, 3] +2 0 2 3 +After: [3, 1, 2, 1] + +Before: [2, 1, 1, 2] +11 2 1 2 +After: [2, 1, 2, 2] + +Before: [1, 3, 2, 3] +7 2 3 1 +After: [1, 0, 2, 3] + +Before: [0, 0, 0, 0] +8 0 0 3 +After: [0, 0, 0, 0] + +Before: [1, 0, 3, 1] +14 2 3 2 +After: [1, 0, 0, 1] + +Before: [3, 2, 0, 3] +14 0 2 3 +After: [3, 2, 0, 1] + +Before: [3, 2, 2, 1] +2 0 2 1 +After: [3, 1, 2, 1] + +Before: [2, 1, 2, 1] +3 0 3 0 +After: [1, 1, 2, 1] + +Before: [2, 2, 0, 1] +3 0 3 3 +After: [2, 2, 0, 1] + +Before: [0, 3, 3, 2] +8 0 0 0 +After: [0, 3, 3, 2] + +Before: [3, 2, 0, 1] +14 0 2 1 +After: [3, 1, 0, 1] + +Before: [1, 1, 1, 3] +9 1 0 1 +After: [1, 1, 1, 3] + +Before: [0, 1, 0, 1] +13 1 3 0 +After: [1, 1, 0, 1] + +Before: [1, 1, 1, 0] +9 1 0 1 +After: [1, 1, 1, 0] + +Before: [1, 3, 2, 2] +6 0 2 0 +After: [0, 3, 2, 2] + +Before: [2, 1, 1, 1] +14 3 1 0 +After: [0, 1, 1, 1] + +Before: [1, 1, 3, 0] +9 1 0 0 +After: [1, 1, 3, 0] + +Before: [2, 1, 3, 1] +3 0 3 2 +After: [2, 1, 1, 1] + +Before: [2, 1, 1, 1] +3 0 3 1 +After: [2, 1, 1, 1] + +Before: [3, 2, 1, 3] +7 1 3 3 +After: [3, 2, 1, 0] + +Before: [2, 0, 3, 3] +15 0 0 2 +After: [2, 0, 1, 3] + +Before: [3, 0, 2, 1] +10 3 2 2 +After: [3, 0, 1, 1] + +Before: [1, 1, 2, 3] +9 1 0 0 +After: [1, 1, 2, 3] + +Before: [1, 2, 1, 1] +5 2 1 0 +After: [2, 2, 1, 1] + +Before: [0, 1, 2, 3] +12 1 2 1 +After: [0, 0, 2, 3] + +Before: [1, 3, 0, 1] +1 0 2 3 +After: [1, 3, 0, 0] + +Before: [2, 1, 0, 1] +2 0 1 0 +After: [1, 1, 0, 1] + +Before: [3, 2, 2, 3] +2 0 2 1 +After: [3, 1, 2, 3] + +Before: [1, 2, 0, 1] +1 0 2 1 +After: [1, 0, 0, 1] + +Before: [1, 2, 2, 0] +6 0 2 0 +After: [0, 2, 2, 0] + +Before: [2, 1, 1, 2] +11 2 1 0 +After: [2, 1, 1, 2] + +Before: [3, 1, 1, 3] +7 1 3 2 +After: [3, 1, 0, 3] + +Before: [2, 2, 1, 3] +5 2 1 2 +After: [2, 2, 2, 3] + +Before: [3, 1, 1, 1] +11 2 1 1 +After: [3, 2, 1, 1] + +Before: [2, 1, 2, 2] +4 1 3 1 +After: [2, 0, 2, 2] + +Before: [1, 1, 2, 1] +12 1 2 0 +After: [0, 1, 2, 1] + +Before: [1, 1, 0, 2] +9 1 0 3 +After: [1, 1, 0, 1] + +Before: [3, 3, 2, 3] +2 0 2 0 +After: [1, 3, 2, 3] + +Before: [1, 1, 2, 3] +9 1 0 3 +After: [1, 1, 2, 1] + +Before: [2, 1, 2, 1] +12 1 2 0 +After: [0, 1, 2, 1] + +Before: [1, 1, 0, 2] +4 1 3 1 +After: [1, 0, 0, 2] + +Before: [1, 2, 2, 0] +6 0 2 3 +After: [1, 2, 2, 0] + +Before: [2, 1, 1, 0] +11 2 1 3 +After: [2, 1, 1, 2] + +Before: [1, 1, 0, 1] +13 1 3 3 +After: [1, 1, 0, 1] + +Before: [3, 1, 2, 3] +7 1 3 3 +After: [3, 1, 2, 0] + +Before: [0, 2, 1, 3] +8 0 0 0 +After: [0, 2, 1, 3] + +Before: [3, 2, 1, 3] +7 1 3 0 +After: [0, 2, 1, 3] + +Before: [1, 2, 2, 2] +6 0 2 3 +After: [1, 2, 2, 0] + +Before: [1, 1, 1, 1] +13 1 3 3 +After: [1, 1, 1, 1] + +Before: [2, 1, 3, 2] +15 2 2 1 +After: [2, 1, 3, 2] + +Before: [2, 1, 0, 3] +2 0 1 0 +After: [1, 1, 0, 3] + +Before: [1, 1, 2, 1] +12 1 2 2 +After: [1, 1, 0, 1] + +Before: [1, 1, 3, 2] +4 1 3 0 +After: [0, 1, 3, 2] + +Before: [2, 3, 2, 3] +7 2 3 2 +After: [2, 3, 0, 3] + +Before: [2, 2, 1, 1] +5 2 1 3 +After: [2, 2, 1, 2] + +Before: [0, 0, 2, 1] +10 3 2 0 +After: [1, 0, 2, 1] + +Before: [3, 1, 0, 3] +7 1 3 2 +After: [3, 1, 0, 3] + +Before: [2, 1, 3, 2] +2 0 1 1 +After: [2, 1, 3, 2] + +Before: [2, 3, 1, 1] +3 0 3 1 +After: [2, 1, 1, 1] + +Before: [2, 2, 1, 3] +7 1 3 3 +After: [2, 2, 1, 0] + +Before: [3, 3, 3, 1] +15 0 2 1 +After: [3, 1, 3, 1] + +Before: [0, 1, 1, 0] +11 2 1 1 +After: [0, 2, 1, 0] + +Before: [1, 1, 1, 0] +11 2 1 0 +After: [2, 1, 1, 0] + +Before: [3, 1, 3, 1] +13 1 3 3 +After: [3, 1, 3, 1] + +Before: [0, 1, 3, 2] +8 0 0 1 +After: [0, 0, 3, 2] + +Before: [2, 2, 0, 3] +7 1 3 3 +After: [2, 2, 0, 0] + +Before: [1, 0, 2, 1] +6 0 2 2 +After: [1, 0, 0, 1] + +Before: [1, 3, 0, 2] +0 3 3 3 +After: [1, 3, 0, 0] + +Before: [1, 1, 0, 1] +9 1 0 3 +After: [1, 1, 0, 1] + +Before: [1, 2, 2, 3] +7 1 3 1 +After: [1, 0, 2, 3] + +Before: [1, 1, 2, 2] +12 1 2 3 +After: [1, 1, 2, 0] + +Before: [1, 1, 2, 0] +12 1 2 3 +After: [1, 1, 2, 0] + +Before: [0, 1, 0, 2] +4 1 3 1 +After: [0, 0, 0, 2] + +Before: [1, 1, 1, 0] +9 1 0 0 +After: [1, 1, 1, 0] + +Before: [1, 1, 2, 0] +9 1 0 0 +After: [1, 1, 2, 0] + +Before: [1, 2, 1, 1] +5 2 1 3 +After: [1, 2, 1, 2] + +Before: [3, 0, 3, 2] +15 2 2 0 +After: [1, 0, 3, 2] + +Before: [2, 2, 1, 3] +7 2 3 3 +After: [2, 2, 1, 0] + +Before: [3, 1, 2, 2] +4 1 3 3 +After: [3, 1, 2, 0] + +Before: [3, 1, 2, 1] +15 0 0 1 +After: [3, 1, 2, 1] + +Before: [2, 3, 2, 1] +10 3 2 0 +After: [1, 3, 2, 1] + +Before: [2, 1, 2, 2] +0 3 3 1 +After: [2, 0, 2, 2] + +Before: [1, 2, 0, 2] +1 0 2 1 +After: [1, 0, 0, 2] + +Before: [3, 3, 2, 0] +2 0 2 0 +After: [1, 3, 2, 0] + +Before: [0, 1, 1, 2] +11 2 1 1 +After: [0, 2, 1, 2] + +Before: [3, 1, 2, 1] +13 1 3 1 +After: [3, 1, 2, 1] + +Before: [3, 1, 3, 3] +15 2 0 3 +After: [3, 1, 3, 1] + +Before: [0, 1, 0, 1] +8 0 0 3 +After: [0, 1, 0, 0] + +Before: [2, 3, 2, 1] +0 3 3 3 +After: [2, 3, 2, 0] + +Before: [2, 1, 1, 2] +4 1 3 2 +After: [2, 1, 0, 2] + +Before: [0, 1, 3, 1] +13 1 3 0 +After: [1, 1, 3, 1] + +Before: [2, 2, 1, 1] +5 2 1 0 +After: [2, 2, 1, 1] + +Before: [3, 1, 2, 0] +15 0 0 0 +After: [1, 1, 2, 0] + +Before: [1, 1, 1, 1] +9 1 0 0 +After: [1, 1, 1, 1] + +Before: [1, 1, 2, 2] +12 1 2 2 +After: [1, 1, 0, 2] + +Before: [1, 1, 2, 1] +10 3 2 0 +After: [1, 1, 2, 1] + +Before: [2, 0, 1, 1] +3 0 3 3 +After: [2, 0, 1, 1] diff --git a/2018/inputs/16_2.txt b/2018/inputs/16_2.txt new file mode 100644 index 0000000..6f6f812 --- /dev/null +++ b/2018/inputs/16_2.txt @@ -0,0 +1,1014 @@ +8 0 0 2 +5 2 2 2 +6 3 1 1 +8 0 0 3 +5 3 0 3 +9 2 3 1 +8 1 3 1 +8 1 2 1 +11 0 1 0 +10 0 0 1 +8 0 0 2 +5 2 3 2 +6 3 0 3 +8 2 0 0 +5 0 1 0 +12 3 2 0 +8 0 3 0 +11 1 0 1 +10 1 1 3 +6 1 2 0 +8 1 0 1 +5 1 0 1 +6 0 0 2 +5 0 1 1 +8 1 3 1 +11 3 1 3 +10 3 3 2 +6 3 0 3 +6 2 1 1 +4 3 1 0 +8 0 3 0 +11 0 2 2 +10 2 0 1 +8 1 0 0 +5 0 1 0 +8 3 0 2 +5 2 0 2 +6 2 1 3 +8 0 2 3 +8 3 3 3 +8 3 3 3 +11 3 1 1 +10 1 1 3 +6 3 3 2 +6 0 0 1 +8 0 2 0 +8 0 1 0 +8 0 1 0 +11 3 0 3 +10 3 0 0 +6 2 2 1 +6 1 0 3 +13 1 2 1 +8 1 2 1 +11 1 0 0 +10 0 3 2 +6 2 0 0 +6 3 1 1 +6 2 0 3 +9 0 3 1 +8 1 1 1 +8 1 3 1 +11 1 2 2 +10 2 0 0 +6 3 1 1 +6 2 1 2 +6 0 2 3 +7 3 2 1 +8 1 2 1 +8 1 2 1 +11 1 0 0 +10 0 3 3 +6 3 1 2 +6 1 2 0 +6 0 1 1 +6 2 1 1 +8 1 1 1 +11 3 1 3 +10 3 3 1 +6 2 0 3 +8 0 0 2 +5 2 0 2 +6 2 2 0 +15 0 3 0 +8 0 1 0 +8 0 2 0 +11 0 1 1 +10 1 0 0 +6 3 1 1 +6 0 0 3 +6 2 1 2 +7 3 2 2 +8 2 2 2 +11 2 0 0 +10 0 1 1 +6 1 0 3 +8 0 0 0 +5 0 2 0 +8 0 0 2 +5 2 0 2 +3 0 3 2 +8 2 3 2 +8 2 2 2 +11 1 2 1 +10 1 1 3 +8 2 0 2 +5 2 3 2 +6 3 2 0 +6 1 3 1 +8 1 2 2 +8 2 1 2 +11 2 3 3 +6 1 1 0 +8 1 0 2 +5 2 0 2 +6 2 0 0 +8 0 3 0 +11 3 0 3 +10 3 3 2 +6 2 1 0 +6 2 2 3 +6 0 1 1 +9 0 3 0 +8 0 1 0 +8 0 1 0 +11 0 2 2 +10 2 3 3 +6 3 1 1 +8 3 0 2 +5 2 1 2 +6 1 3 0 +5 0 1 0 +8 0 2 0 +11 0 3 3 +10 3 0 0 +6 1 3 3 +8 0 0 2 +5 2 0 2 +6 0 1 1 +5 3 1 2 +8 2 2 2 +11 0 2 0 +10 0 2 3 +6 2 1 1 +6 2 0 2 +6 3 3 0 +13 1 0 1 +8 1 2 1 +11 1 3 3 +10 3 2 2 +6 1 1 3 +6 0 2 1 +6 0 2 0 +5 3 1 3 +8 3 2 3 +11 2 3 2 +10 2 3 3 +6 1 3 0 +6 0 0 2 +6 3 1 1 +8 0 2 1 +8 1 3 1 +11 3 1 3 +10 3 0 1 +6 2 2 0 +6 2 1 3 +6 3 3 2 +9 0 3 2 +8 2 2 2 +8 2 3 2 +11 2 1 1 +10 1 3 3 +6 0 3 2 +8 2 0 1 +5 1 3 1 +2 0 1 1 +8 1 1 1 +11 1 3 3 +10 3 3 2 +6 3 0 1 +6 1 1 3 +3 0 3 1 +8 1 3 1 +11 2 1 2 +10 2 1 0 +6 2 1 1 +6 1 3 2 +6 2 0 3 +9 1 3 3 +8 3 3 3 +11 3 0 0 +10 0 3 2 +6 2 3 0 +6 1 0 3 +3 0 3 3 +8 3 2 3 +11 2 3 2 +10 2 2 1 +6 1 2 3 +6 2 3 2 +3 0 3 2 +8 2 1 2 +8 2 2 2 +11 2 1 1 +10 1 0 2 +6 3 2 1 +6 3 3 0 +11 3 3 1 +8 1 2 1 +8 1 2 1 +11 2 1 2 +6 2 1 1 +13 1 0 0 +8 0 3 0 +8 0 1 0 +11 0 2 2 +10 2 1 3 +8 1 0 0 +5 0 1 0 +6 0 0 2 +8 0 2 0 +8 0 3 0 +8 0 2 0 +11 3 0 3 +10 3 3 1 +6 3 3 2 +6 2 1 0 +6 2 2 3 +15 0 3 3 +8 3 2 3 +11 3 1 1 +10 1 3 2 +6 3 1 1 +8 2 0 3 +5 3 0 3 +4 1 0 1 +8 1 2 1 +11 2 1 2 +10 2 0 1 +6 3 1 2 +6 1 1 3 +6 1 0 0 +8 3 2 3 +8 3 2 3 +11 1 3 1 +10 1 2 3 +6 2 1 1 +6 2 1 2 +10 0 2 2 +8 2 1 2 +11 3 2 3 +6 0 0 1 +6 2 1 2 +10 0 2 0 +8 0 3 0 +11 3 0 3 +10 3 1 2 +8 2 0 3 +5 3 0 3 +6 1 1 0 +11 0 0 3 +8 3 2 3 +11 3 2 2 +10 2 3 3 +6 2 1 1 +6 3 2 2 +6 2 2 0 +0 0 2 0 +8 0 1 0 +11 0 3 3 +10 3 3 2 +6 2 1 3 +6 2 0 0 +6 3 0 1 +15 0 3 3 +8 3 1 3 +8 3 3 3 +11 3 2 2 +10 2 3 1 +8 1 0 0 +5 0 1 0 +6 3 3 2 +8 0 0 3 +5 3 1 3 +8 0 2 3 +8 3 1 3 +11 3 1 1 +10 1 1 3 +6 0 0 1 +6 2 1 2 +10 0 2 1 +8 1 2 1 +11 1 3 3 +10 3 2 0 +8 0 0 2 +5 2 0 2 +6 3 2 3 +6 3 3 1 +12 3 2 1 +8 1 1 1 +11 1 0 0 +10 0 0 3 +6 3 2 1 +6 2 2 0 +6 3 3 2 +0 0 2 0 +8 0 3 0 +8 0 1 0 +11 0 3 3 +10 3 3 2 +6 1 3 1 +8 1 0 3 +5 3 2 3 +8 0 0 0 +5 0 2 0 +1 1 3 0 +8 0 1 0 +11 2 0 2 +6 3 1 1 +6 2 0 0 +4 1 0 1 +8 1 2 1 +11 2 1 2 +10 2 1 1 +6 3 0 2 +6 1 2 3 +3 0 3 0 +8 0 1 0 +11 0 1 1 +8 3 0 2 +5 2 2 2 +6 2 0 3 +8 2 0 0 +5 0 3 0 +2 2 0 2 +8 2 1 2 +11 1 2 1 +10 1 2 0 +6 3 0 1 +8 0 0 2 +5 2 0 2 +14 2 3 1 +8 1 2 1 +11 1 0 0 +10 0 2 3 +6 3 3 2 +6 1 3 0 +8 3 0 1 +5 1 1 1 +11 1 0 2 +8 2 3 2 +8 2 3 2 +11 3 2 3 +10 3 3 1 +6 2 2 2 +6 0 2 3 +7 3 2 0 +8 0 2 0 +8 0 2 0 +11 1 0 1 +10 1 2 3 +6 3 2 0 +8 2 0 2 +5 2 0 2 +8 1 0 1 +5 1 3 1 +0 2 0 0 +8 0 3 0 +11 0 3 3 +10 3 2 1 +6 1 1 0 +8 3 0 3 +5 3 0 3 +6 1 1 2 +6 3 0 2 +8 2 2 2 +11 2 1 1 +10 1 3 2 +8 3 0 1 +5 1 1 1 +6 3 1 3 +11 0 0 1 +8 1 1 1 +11 1 2 2 +10 2 1 1 +6 1 2 2 +6 3 2 0 +6 2 1 3 +12 0 2 0 +8 0 3 0 +11 1 0 1 +10 1 1 2 +6 2 3 0 +8 2 0 3 +5 3 1 3 +6 3 1 1 +5 3 1 3 +8 3 2 3 +11 2 3 2 +6 0 3 3 +6 3 0 0 +8 2 0 1 +5 1 2 1 +13 1 0 0 +8 0 1 0 +11 0 2 2 +10 2 3 1 +6 2 1 2 +6 1 2 3 +6 3 0 0 +2 2 0 3 +8 3 3 3 +11 1 3 1 +10 1 2 3 +6 1 3 0 +6 3 0 1 +5 0 1 1 +8 1 2 1 +11 1 3 3 +10 3 3 2 +6 1 3 3 +8 0 0 1 +5 1 0 1 +8 1 0 0 +5 0 2 0 +3 0 3 1 +8 1 2 1 +11 2 1 2 +6 1 1 0 +6 0 2 1 +8 3 0 3 +5 3 2 3 +5 0 1 0 +8 0 3 0 +8 0 2 0 +11 0 2 2 +6 1 0 1 +6 2 1 0 +15 0 3 3 +8 3 3 3 +11 3 2 2 +6 0 2 1 +6 2 3 3 +6 3 3 0 +4 0 3 1 +8 1 2 1 +11 2 1 2 +6 0 1 3 +8 0 0 0 +5 0 2 0 +8 3 0 1 +5 1 2 1 +6 3 0 0 +8 0 2 0 +8 0 3 0 +11 0 2 2 +10 2 1 3 +8 2 0 2 +5 2 3 2 +6 1 1 1 +6 2 3 0 +1 1 0 2 +8 2 3 2 +11 3 2 3 +10 3 0 0 +6 0 3 3 +8 3 0 1 +5 1 0 1 +6 2 0 2 +7 3 2 2 +8 2 2 2 +11 0 2 0 +10 0 0 3 +6 2 3 1 +8 3 0 2 +5 2 0 2 +6 3 3 0 +13 1 0 2 +8 2 3 2 +8 2 3 2 +11 3 2 3 +8 3 0 2 +5 2 2 2 +2 2 0 1 +8 1 3 1 +11 3 1 3 +10 3 2 2 +6 1 3 3 +6 3 3 1 +6 2 0 0 +3 0 3 3 +8 3 3 3 +11 3 2 2 +10 2 2 0 +6 1 1 1 +6 2 1 3 +8 2 0 2 +5 2 0 2 +14 2 3 2 +8 2 2 2 +8 2 3 2 +11 2 0 0 +10 0 1 3 +6 3 0 1 +6 3 2 2 +6 2 0 0 +6 2 1 0 +8 0 2 0 +11 3 0 3 +10 3 0 1 +6 0 1 3 +6 2 3 2 +8 3 0 0 +5 0 0 0 +7 3 2 3 +8 3 3 3 +8 3 2 3 +11 1 3 1 +10 1 1 2 +6 2 0 0 +8 0 0 3 +5 3 1 3 +6 1 1 1 +1 3 0 1 +8 1 2 1 +11 1 2 2 +10 2 2 3 +6 0 2 1 +6 3 1 0 +6 2 2 2 +2 2 0 1 +8 1 3 1 +8 1 1 1 +11 1 3 3 +10 3 1 2 +6 1 0 1 +6 2 2 3 +1 1 3 0 +8 0 2 0 +8 0 3 0 +11 2 0 2 +10 2 3 1 +6 2 0 0 +6 2 0 2 +15 0 3 3 +8 3 1 3 +11 3 1 1 +10 1 0 3 +6 3 0 2 +6 1 3 1 +0 0 2 2 +8 2 3 2 +11 3 2 3 +10 3 3 0 +6 1 2 3 +6 3 1 1 +6 0 0 2 +12 1 2 3 +8 3 3 3 +8 3 3 3 +11 3 0 0 +10 0 3 1 +8 1 0 0 +5 0 2 0 +8 1 0 2 +5 2 2 2 +6 0 2 3 +7 3 2 2 +8 2 2 2 +11 2 1 1 +10 1 2 3 +6 2 3 1 +6 3 1 2 +13 1 2 0 +8 0 3 0 +11 0 3 3 +10 3 1 1 +6 1 2 3 +6 3 1 0 +8 3 2 0 +8 0 1 0 +11 1 0 1 +6 1 3 0 +6 2 2 2 +6 3 0 3 +10 0 2 0 +8 0 1 0 +11 0 1 1 +6 3 0 0 +2 2 0 3 +8 3 1 3 +11 3 1 1 +10 1 2 3 +6 1 2 2 +8 1 0 1 +5 1 1 1 +6 2 2 0 +1 1 0 0 +8 0 3 0 +11 3 0 3 +10 3 1 0 +6 2 0 3 +6 2 0 2 +1 1 3 3 +8 3 1 3 +11 3 0 0 +10 0 0 3 +6 3 2 1 +8 3 0 0 +5 0 2 0 +6 3 2 2 +0 0 2 2 +8 2 1 2 +11 3 2 3 +10 3 3 0 +8 0 0 3 +5 3 0 3 +6 1 3 1 +6 2 2 2 +7 3 2 3 +8 3 1 3 +8 3 3 3 +11 0 3 0 +10 0 0 3 +6 3 2 2 +6 2 1 0 +0 0 2 1 +8 1 3 1 +8 1 2 1 +11 1 3 3 +8 1 0 2 +5 2 2 2 +6 3 1 0 +6 3 3 1 +2 2 1 1 +8 1 1 1 +11 3 1 3 +10 3 1 1 +6 3 2 3 +6 2 0 0 +6 3 0 2 +13 0 2 3 +8 3 3 3 +8 3 1 3 +11 3 1 1 +10 1 2 3 +8 2 0 0 +5 0 1 0 +8 3 0 2 +5 2 2 2 +8 0 0 1 +5 1 0 1 +11 0 0 1 +8 1 2 1 +11 3 1 3 +10 3 3 0 +6 0 1 3 +6 3 3 1 +6 3 1 2 +14 3 2 3 +8 3 3 3 +11 0 3 0 +10 0 2 3 +6 1 0 1 +6 1 0 0 +6 2 3 2 +10 0 2 1 +8 1 1 1 +8 1 2 1 +11 1 3 3 +6 1 1 2 +6 0 3 1 +5 0 1 2 +8 2 3 2 +11 3 2 3 +10 3 2 1 +8 3 0 3 +5 3 2 3 +8 1 0 0 +5 0 2 0 +6 3 3 2 +0 0 2 3 +8 3 2 3 +8 3 1 3 +11 3 1 1 +10 1 2 0 +6 1 3 3 +8 3 0 2 +5 2 1 2 +6 0 1 1 +5 3 1 3 +8 3 1 3 +11 0 3 0 +10 0 3 1 +6 1 3 0 +6 0 3 3 +8 1 0 2 +5 2 2 2 +7 3 2 3 +8 3 2 3 +11 3 1 1 +6 0 0 2 +6 2 3 3 +6 0 3 0 +14 2 3 0 +8 0 1 0 +8 0 1 0 +11 0 1 1 +10 1 0 3 +6 3 0 2 +6 2 2 0 +6 2 0 1 +13 0 2 1 +8 1 3 1 +8 1 1 1 +11 3 1 3 +10 3 2 1 +6 3 1 3 +6 1 2 0 +8 0 2 2 +8 2 3 2 +11 1 2 1 +6 1 0 3 +6 3 3 2 +11 0 0 2 +8 2 2 2 +11 1 2 1 +10 1 2 3 +6 0 3 0 +8 1 0 2 +5 2 2 2 +6 3 2 1 +2 2 1 2 +8 2 1 2 +11 3 2 3 +6 0 0 2 +6 1 3 1 +8 1 2 0 +8 0 3 0 +8 0 2 0 +11 0 3 3 +10 3 2 2 +6 2 2 0 +6 1 2 3 +3 0 3 0 +8 0 2 0 +11 2 0 2 +10 2 3 3 +6 0 0 1 +6 2 0 0 +6 3 3 2 +0 0 2 2 +8 2 1 2 +8 2 1 2 +11 2 3 3 +10 3 1 0 +6 2 3 1 +6 2 3 3 +8 3 0 2 +5 2 0 2 +14 2 3 2 +8 2 3 2 +11 2 0 0 +10 0 0 1 +8 2 0 2 +5 2 0 2 +6 1 0 0 +1 0 3 3 +8 3 2 3 +8 3 2 3 +11 1 3 1 +6 2 2 0 +6 2 0 3 +6 1 3 2 +15 0 3 0 +8 0 2 0 +11 1 0 1 +10 1 2 0 +6 3 0 1 +6 0 3 2 +6 1 1 3 +12 1 2 1 +8 1 1 1 +11 1 0 0 +10 0 1 2 +6 3 1 1 +6 3 1 0 +5 3 1 3 +8 3 3 3 +11 2 3 2 +10 2 1 0 +6 0 2 3 +6 2 3 2 +8 1 0 1 +5 1 0 1 +7 3 2 3 +8 3 1 3 +8 3 1 3 +11 3 0 0 +6 2 1 1 +6 3 0 2 +6 0 1 3 +14 3 2 2 +8 2 2 2 +11 2 0 0 +8 2 0 2 +5 2 0 2 +6 1 1 3 +6 2 3 1 +8 1 3 1 +11 0 1 0 +10 0 0 1 +6 2 1 0 +6 3 1 2 +1 3 0 0 +8 0 2 0 +11 0 1 1 +10 1 3 0 +6 0 3 3 +6 1 1 1 +14 3 2 1 +8 1 2 1 +11 0 1 0 +10 0 3 2 +6 2 3 1 +6 2 0 0 +6 1 1 3 +1 3 0 0 +8 0 1 0 +11 0 2 2 +10 2 0 1 +6 0 2 2 +6 2 0 3 +6 2 1 0 +15 0 3 3 +8 3 2 3 +8 3 3 3 +11 1 3 1 +6 3 0 0 +8 0 0 3 +5 3 1 3 +11 3 3 3 +8 3 1 3 +8 3 1 3 +11 3 1 1 +10 1 3 3 +6 2 0 0 +6 3 0 2 +8 0 0 1 +5 1 2 1 +0 0 2 1 +8 1 1 1 +8 1 1 1 +11 1 3 3 +10 3 1 2 +6 2 0 1 +6 2 3 3 +15 0 3 1 +8 1 1 1 +8 1 1 1 +11 1 2 2 +10 2 1 0 +6 0 2 3 +6 3 3 1 +6 2 1 2 +7 3 2 3 +8 3 3 3 +11 3 0 0 +10 0 0 2 +6 2 3 0 +6 0 0 3 +2 0 1 3 +8 3 3 3 +11 2 3 2 +10 2 2 3 +6 1 0 2 +6 1 0 1 +1 1 0 1 +8 1 1 1 +11 3 1 3 +8 1 0 1 +5 1 3 1 +2 0 1 1 +8 1 3 1 +11 3 1 3 +10 3 0 2 +6 2 2 3 +8 2 0 1 +5 1 3 1 +15 0 3 1 +8 1 1 1 +8 1 1 1 +11 2 1 2 +10 2 3 0 +6 3 0 1 +6 1 0 3 +6 2 1 2 +2 2 1 2 +8 2 2 2 +8 2 3 2 +11 0 2 0 +10 0 0 1 +6 1 0 0 +6 2 2 2 +10 0 2 2 +8 2 1 2 +11 1 2 1 +10 1 2 0 +6 3 1 1 +6 2 0 3 +6 2 0 2 +9 2 3 2 +8 2 1 2 +11 0 2 0 +10 0 2 2 +6 1 1 3 +6 0 2 1 +8 0 0 0 +5 0 1 0 +5 3 1 3 +8 3 2 3 +11 3 2 2 +10 2 0 1 +6 1 2 2 +6 2 1 3 +1 0 3 2 +8 2 2 2 +11 2 1 1 +6 3 3 2 +6 2 3 0 +15 0 3 2 +8 2 2 2 +11 2 1 1 +10 1 2 0 +6 2 1 1 +6 3 3 2 +9 1 3 3 +8 3 3 3 +11 0 3 0 +10 0 2 1 +6 0 0 2 +6 2 0 0 +6 1 1 3 +1 3 0 2 +8 2 1 2 +8 2 1 2 +11 2 1 1 +10 1 0 0 +6 2 2 1 +6 0 0 3 +6 3 2 2 +13 1 2 2 +8 2 3 2 +11 0 2 0 +10 0 0 2 +6 2 2 3 +8 2 0 0 +5 0 0 0 +6 3 1 1 +6 3 0 0 +8 0 3 0 +11 0 2 2 +10 2 0 1 +6 0 1 2 +6 3 2 0 +6 0 1 3 +12 0 2 3 +8 3 1 3 +8 3 2 3 +11 3 1 1 +10 1 3 2 +6 2 2 1 +6 2 3 0 +6 3 2 3 +4 3 1 1 +8 1 2 1 +11 2 1 2 +10 2 0 0 +8 3 0 3 +5 3 1 3 +6 1 1 1 +6 3 3 2 +8 3 2 3 +8 3 2 3 +11 0 3 0 +6 2 3 2 +6 2 0 1 +6 2 0 3 +9 1 3 3 +8 3 1 3 +11 0 3 0 +10 0 1 2 +6 1 3 3 +6 2 2 0 +11 3 3 3 +8 3 2 3 +11 2 3 2 +6 2 0 3 +6 3 1 1 +15 0 3 0 +8 0 2 0 +8 0 2 0 +11 2 0 2 +10 2 2 3 +8 2 0 0 +5 0 1 0 +8 3 0 1 +5 1 1 1 +6 0 0 2 +8 1 2 2 +8 2 2 2 +8 2 1 2 +11 3 2 3 +10 3 2 0 diff --git a/2018/inputs/17.txt b/2018/inputs/17.txt new file mode 100644 index 0000000..1e2ccdd --- /dev/null +++ b/2018/inputs/17.txt @@ -0,0 +1,1713 @@ +y=1181, x=576..579 +y=434, x=498..503 +x=647, y=653..675 +y=1204, x=593..595 +y=268, x=475..498 +x=599, y=619..638 +y=1130, x=452..478 +x=439, y=1365..1377 +y=652, x=589..595 +y=1552, x=560..577 +x=439, y=852..867 +x=605, y=292..298 +x=489, y=709..718 +x=567, y=1087..1097 +y=1774, x=631..634 +x=649, y=592..612 +x=610, y=533..555 +x=564, y=996..1008 +x=651, y=416..441 +y=1106, x=502..519 +y=1015, x=479..487 +x=572, y=25..35 +x=630, y=849..865 +x=573, y=884..897 +x=614, y=667..688 +x=464, y=1542..1567 +x=645, y=258..270 +y=1029, x=656..662 +y=1502, x=483..511 +x=589, y=1553..1555 +x=535, y=1792..1795 +x=469, y=166..193 +x=484, y=1117..1142 +x=655, y=1277..1295 +x=598, y=162..170 +y=620, x=430..455 +x=665, y=1205..1212 +x=501, y=1347..1364 +x=661, y=664..684 +x=583, y=131..142 +x=542, y=722..727 +x=475, y=748..761 +x=602, y=1386..1393 +x=578, y=1651..1662 +y=1711, x=598..603 +y=164, x=642..660 +x=488, y=1176..1183 +x=644, y=207..221 +x=654, y=1678..1691 +y=1673, x=448..454 +x=630, y=1299..1312 +y=695, x=472..474 +x=465, y=1022..1045 +x=645, y=1216..1243 +x=623, y=423..437 +x=625, y=200..219 +x=565, y=1153..1166 +x=490, y=1510..1519 +x=553, y=941..947 +x=634, y=1101..1126 +x=515, y=111..113 +y=1146, x=427..438 +y=1096, x=451..460 +x=464, y=1339..1346 +x=612, y=1383..1396 +y=500, x=516..532 +x=555, y=941..947 +x=528, y=1243..1270 +x=646, y=1136..1146 +y=887, x=470..484 +x=617, y=316..343 +x=575, y=1060..1069 +y=1047, x=443..455 +y=1120, x=527..580 +x=514, y=126..135 +y=292, x=484..500 +x=556, y=75..91 +y=646, x=494..518 +x=644, y=552..568 +x=509, y=8..17 +y=735, x=591..614 +x=586, y=1215..1228 +y=1335, x=443..465 +y=495, x=522..526 +x=610, y=864..867 +y=221, x=639..644 +y=1346, x=464..469 +x=489, y=967..983 +x=602, y=1277..1289 +x=620, y=1348..1375 +x=575, y=1736..1744 +x=629, y=462..466 +y=270, x=645..652 +x=518, y=1244..1270 +x=576, y=1151..1162 +x=483, y=970..973 +y=1349, x=606..610 +y=1335, x=634..655 +y=1671, x=650..657 +x=619, y=243..265 +x=585, y=558..563 +x=536, y=1876..1887 +x=652, y=551..559 +x=593, y=1256..1268 +x=440, y=1480..1496 +y=1401, x=520..541 +x=624, y=1297..1306 +x=501, y=1510..1528 +x=587, y=567..575 +y=1470, x=560..580 +y=776, x=519..523 +x=601, y=981..983 +x=516, y=655..666 +y=1803, x=573..578 +x=504, y=1654..1677 +y=1931, x=537..667 +x=540, y=145..163 +x=616, y=204..210 +x=473, y=1856..1859 +x=547, y=241..259 +x=664, y=932..939 +x=475, y=306..316 +y=1572, x=622..628 +x=641, y=985..1001 +x=527, y=1572..1575 +x=447, y=1116..1124 +x=595, y=650..652 +y=1326, x=616..619 +x=626, y=822..835 +x=583, y=1063..1075 +x=576, y=1212..1222 +y=1206, x=486..495 +x=602, y=1885..1910 +x=460, y=1781..1805 +y=996, x=521..527 +x=591, y=1083..1103 +x=569, y=1563..1574 +y=785, x=560..579 +y=857, x=522..524 +x=599, y=804..805 +x=651, y=1724..1736 +y=637, x=449..467 +x=455, y=815..842 +x=476, y=1327..1345 +y=1533, x=615..624 +y=1268, x=633..655 +x=653, y=295..299 +x=522, y=388..415 +y=1365, x=462..487 +y=1430, x=428..438 +x=487, y=488..499 +y=1150, x=599..608 +x=559, y=1922..1927 +x=664, y=170..193 +y=1531, x=441..444 +y=1315, x=600..604 +x=603, y=1541..1543 +x=664, y=1401..1420 +x=580, y=322..345 +x=449, y=627..637 +y=1749, x=497..511 +x=577, y=1060..1069 +y=289, x=492..494 +x=443, y=1330..1335 +x=487, y=405..416 +x=603, y=18..33 +y=1312, x=612..630 +x=605, y=625..633 +x=546, y=1230..1232 +x=553, y=1126..1142 +x=441, y=936..943 +y=1715, x=544..641 +y=1693, x=594..596 +x=649, y=1151..1170 +x=490, y=405..416 +x=602, y=1602..1623 +y=142, x=580..583 +x=574, y=646..660 +y=789, x=479..485 +y=1093, x=640..655 +y=1200, x=501..508 +y=225, x=557..572 +x=591, y=727..735 +x=515, y=1653..1665 +x=467, y=489..499 +y=193, x=459..469 +x=593, y=1143..1162 +x=461, y=489..493 +x=547, y=198..217 +x=522, y=61..73 +x=626, y=1767..1779 +y=446, x=437..448 +y=840, x=443..451 +x=496, y=597..601 +x=650, y=1004..1013 +x=429, y=936..943 +x=557, y=812..822 +x=542, y=1633..1635 +x=469, y=1607..1615 +y=1654, x=624..626 +x=504, y=787..798 +x=569, y=1868..1875 +y=902, x=641..644 +y=1170, x=649..651 +x=606, y=532..555 +x=493, y=1509..1528 +x=452, y=1410..1425 +x=535, y=468..480 +x=599, y=1150..1158 +y=1486, x=429..437 +y=415, x=518..522 +x=511, y=1490..1502 +x=634, y=1765..1774 +x=539, y=869..879 +x=470, y=1413..1418 +x=516, y=1641..1648 +y=598, x=432..434 +x=494, y=807..818 +x=477, y=1875..1898 +x=577, y=77..98 +x=477, y=324..337 +x=451, y=1510..1535 +x=590, y=838..849 +x=565, y=1872..1898 +x=516, y=825..831 +x=541, y=869..879 +y=695, x=427..444 +x=437, y=1166..1194 +x=593, y=1279..1292 +x=518, y=469..480 +x=532, y=1851..1861 +y=1861, x=532..536 +y=1485, x=636..652 +y=1887, x=493..496 +x=436, y=749..766 +y=1268, x=593..610 +y=1145, x=512..520 +y=334, x=482..485 +y=1351, x=553..565 +x=491, y=1547..1556 +y=1908, x=530..549 +y=521, x=607..634 +x=602, y=1687..1698 +x=631, y=1725..1736 +y=1792, x=432..456 +x=530, y=1572..1575 +x=584, y=1154..1166 +x=620, y=1286..1292 +x=537, y=1918..1931 +x=608, y=1474..1489 +x=461, y=989..1006 +x=477, y=1672..1678 +y=1287, x=492..495 +y=1318, x=532..554 +x=463, y=12..30 +x=628, y=595..608 +x=560, y=778..785 +y=1624, x=472..480 +y=673, x=486..489 +x=475, y=1241..1254 +y=1479, x=472..485 +x=458, y=468..477 +y=1298, x=494..497 +x=641, y=1437..1447 +y=973, x=464..483 +y=1695, x=594..596 +x=460, y=1084..1096 +x=613, y=293..298 +x=503, y=1548..1556 +x=574, y=915..931 +y=25, x=482..501 +x=637, y=529..549 +x=441, y=1440..1453 +y=91, x=556..567 +x=432, y=1695..1711 +y=1375, x=620..644 +y=1912, x=553..556 +y=413, x=595..598 +x=584, y=1257..1281 +y=131, x=551..556 +x=493, y=573..576 +x=551, y=860..864 +x=469, y=79..91 +x=462, y=1144..1150 +x=513, y=812..814 +y=1789, x=582..607 +y=1246, x=590..592 +x=544, y=1703..1715 +y=677, x=480..496 +x=432, y=588..598 +x=566, y=556..559 +y=1926, x=511..515 +y=592, x=455..478 +x=610, y=1647..1659 +x=651, y=213..238 +y=1622, x=543..565 +x=451, y=90..104 +x=576, y=1174..1181 +y=1243, x=645..651 +x=553, y=1343..1351 +x=572, y=201..225 +x=648, y=947..970 +x=581, y=444..462 +x=459, y=36..59 +x=642, y=147..164 +x=561, y=1634..1635 +x=593, y=697..707 +x=557, y=200..225 +y=1077, x=457..461 +y=1429, x=600..626 +x=631, y=781..785 +x=565, y=1343..1351 +x=651, y=891..905 +x=445, y=1827..1843 +y=1711, x=432..460 +x=491, y=1819..1821 +x=558, y=725..730 +x=434, y=991..1012 +x=634, y=434..442 +x=452, y=527..540 +x=618, y=1479..1484 +x=644, y=621..626 +x=533, y=1526..1544 +y=831, x=490..516 +y=466, x=629..649 +y=1228, x=568..586 +x=567, y=1062..1075 +x=640, y=1747..1758 +x=579, y=777..785 +x=549, y=812..822 +y=1732, x=638..640 +y=490, x=576..594 +x=516, y=1495..1518 +x=620, y=1297..1306 +y=254, x=460..468 +x=475, y=254..268 +x=482, y=12..25 +y=1183, x=468..488 +x=587, y=666..675 +y=68, x=479..500 +x=524, y=1789..1801 +x=613, y=1046..1058 +x=580, y=567..575 +y=879, x=539..541 +x=448, y=533..537 +x=658, y=1363..1375 +y=410, x=427..438 +y=176, x=501..504 +x=491, y=783..794 +x=570, y=351..373 +y=259, x=521..547 +y=480, x=518..535 +y=633, x=605..607 +x=523, y=767..776 +y=898, x=552..556 +x=606, y=1340..1349 +x=494, y=631..646 +x=496, y=1688..1695 +y=821, x=634..642 +y=1393, x=602..605 +x=443, y=1175..1177 +x=531, y=851..861 +y=582, x=442..546 +y=864, x=551..570 +x=562, y=996..1008 +y=575, x=580..587 +x=529, y=1763..1775 +y=40, x=502..506 +y=73, x=522..529 +y=798, x=504..526 +y=628, x=513..529 +x=520, y=1657..1662 +y=1648, x=516..536 +y=1142, x=484..495 +x=492, y=302..315 +x=586, y=1176..1187 +y=512, x=516..518 +y=218, x=502..504 +y=515, x=516..518 +x=516, y=512..515 +x=444, y=690..695 +y=626, x=624..644 +x=637, y=1276..1295 +y=1370, x=592..595 +y=1860, x=609..620 +x=620, y=900..915 +x=614, y=727..735 +x=437, y=1464..1486 +y=1254, x=457..475 +y=910, x=583..585 +y=294, x=429..436 +y=398, x=481..501 +x=642, y=1768..1779 +y=1845, x=500..524 +y=1898, x=561..565 +y=712, x=571..573 +y=735, x=489..491 +y=887, x=586..589 +y=1518, x=516..521 +x=466, y=551..560 +x=472, y=1613..1624 +x=561, y=701..715 +y=33, x=599..603 +x=538, y=896..908 +x=568, y=1456..1464 +y=559, x=566..568 +x=515, y=328..356 +x=662, y=1020..1029 +x=624, y=355..377 +x=480, y=1612..1624 +y=1139, x=570..574 +y=1795, x=530..535 +x=516, y=490..500 +x=462, y=1830..1837 +x=437, y=202..223 +x=661, y=1504..1509 +x=451, y=470..481 +x=515, y=1836..1840 +x=633, y=189..191 +x=467, y=708..718 +x=528, y=900..902 +x=497, y=232..241 +x=588, y=1686..1698 +y=1306, x=620..624 +x=480, y=667..677 +x=493, y=9..21 +y=1416, x=490..515 +x=624, y=1507..1533 +x=436, y=290..294 +y=708, x=571..573 +x=462, y=601..615 +y=595, x=628..638 +y=1205, x=621..626 +x=582, y=1130..1142 +x=487, y=1000..1015 +x=651, y=1695..1703 +x=544, y=891..902 +x=459, y=165..193 +x=549, y=1897..1908 +y=1484, x=616..618 +x=556, y=1887..1912 +y=1868, x=462..480 +x=621, y=1177..1205 +x=561, y=1873..1898 +x=624, y=1475..1489 +y=1377, x=439..451 +y=943, x=429..441 +y=1553, x=610..615 +x=509, y=1048..1074 +x=483, y=915..928 +x=480, y=606..608 +x=580, y=1027..1043 +x=630, y=978..996 +x=516, y=1875..1887 +x=501, y=1190..1200 +y=377, x=624..632 +y=481, x=451..470 +y=555, x=606..610 +x=445, y=1542..1567 +x=514, y=1231..1233 +x=572, y=62..72 +y=1097, x=548..567 +x=593, y=1784..1786 +x=556, y=29..31 +x=514, y=34..44 +x=651, y=29..31 +x=601, y=1342..1352 +x=439, y=177..182 +x=522, y=853..857 +x=638, y=110..114 +y=1166, x=565..584 +x=549, y=447..457 +x=508, y=1896..1898 +x=525, y=1763..1775 +x=572, y=350..373 +x=583, y=273..301 +x=496, y=148..158 +x=427, y=690..695 +x=506, y=449..461 +x=622, y=592..612 +x=492, y=497..521 +x=554, y=962..972 +x=543, y=827..840 +y=91, x=469..487 +x=446, y=614..616 +x=477, y=453..456 +x=501, y=366..376 +y=487, x=564..568 +x=495, y=1188..1206 +x=530, y=1896..1908 +x=436, y=123..147 +x=471, y=1856..1859 +x=486, y=664..673 +y=770, x=573..583 +x=565, y=1403..1411 +x=599, y=18..33 +y=1599, x=556..577 +y=1411, x=565..567 +x=541, y=986..1012 +x=601, y=1083..1103 +y=1825, x=486..502 +y=1695, x=480..496 +x=440, y=122..147 +x=476, y=364..376 +y=409, x=449..463 +x=446, y=1143..1150 +x=536, y=1614..1619 +y=290, x=510..514 +y=600, x=454..459 +y=1837, x=562..579 +x=462, y=1851..1868 +x=544, y=278..297 +y=902, x=544..563 +x=580, y=1438..1447 +x=546, y=570..582 +x=644, y=1874..1875 +x=447, y=306..316 +x=556, y=277..297 +x=626, y=424..437 +y=806, x=549..557 +x=596, y=1693..1695 +y=936, x=444..451 +y=1156, x=486..510 +y=1567, x=445..464 +y=779, x=514..530 +x=536, y=1851..1861 +y=992, x=504..509 +x=535, y=329..356 +y=814, x=513..519 +y=210, x=604..616 +x=491, y=731..735 +x=558, y=1084..1093 +y=352, x=642..648 +x=425, y=591..601 +x=634, y=1586..1603 +x=554, y=599..608 +x=605, y=397..419 +x=514, y=267..290 +y=263, x=554..568 +x=473, y=911..937 +y=897, x=573..579 +x=595, y=1401..1409 +x=613, y=367..370 +y=1535, x=433..451 +x=573, y=767..770 +x=665, y=41..45 +y=1093, x=558..561 +x=454, y=1666..1673 +x=495, y=1662..1672 +x=566, y=220..222 +x=492, y=1268..1287 +x=534, y=808..818 +x=480, y=1852..1868 +y=282, x=590..616 +x=502, y=218..221 +y=1187, x=566..586 +x=598, y=317..343 +x=562, y=1833..1837 +x=499, y=470..481 +y=113, x=456..478 +y=1703, x=649..651 +x=454, y=598..600 +x=474, y=1058..1074 +x=498, y=434..436 +y=1680, x=481..483 +x=662, y=851..868 +y=987, x=563..565 +y=299, x=653..660 +y=1590, x=617..625 +y=608, x=476..480 +x=538, y=527..540 +y=246, x=488..504 +x=455, y=611..620 +x=490, y=345..356 +x=566, y=602..604 +y=1603, x=634..650 +x=608, y=1150..1158 +x=454, y=363..376 +y=1679, x=596..623 +x=483, y=1569..1571 +x=554, y=1309..1318 +x=660, y=146..164 +x=442, y=752..755 +x=514, y=850..861 +y=1142, x=531..553 +y=1509, x=653..661 +x=509, y=1836..1840 +x=604, y=1301..1315 +x=488, y=426..440 +x=475, y=1733..1758 +x=543, y=41..67 +x=527, y=1107..1120 +y=660, x=574..577 +x=502, y=1081..1106 +x=469, y=1428..1434 +y=564, x=488..492 +x=430, y=1435..1455 +x=547, y=919..929 +x=641, y=1560..1563 +x=480, y=646..657 +y=715, x=478..480 +x=622, y=193..215 +x=445, y=271..274 +x=612, y=1280..1292 +y=938, x=608..621 +x=526, y=1897..1898 +x=610, y=441..443 +x=610, y=666..688 +y=1887, x=516..536 +x=625, y=1287..1292 +x=512, y=1204..1207 +x=505, y=1292..1303 +y=1045, x=465..485 +x=485, y=327..334 +x=574, y=570..587 +x=463, y=394..409 +x=485, y=1460..1479 +y=457, x=549..552 +y=456, x=477..479 +x=453, y=758..770 +x=660, y=360..381 +y=1895, x=616..620 +x=530, y=93..101 +x=589, y=861..887 +x=657, y=41..45 +y=31, x=556..564 +y=1823, x=512..656 +x=542, y=381..398 +y=1897, x=616..620 +x=610, y=1922..1927 +y=675, x=635..647 +x=535, y=938..950 +x=525, y=180..188 +x=635, y=654..675 +y=356, x=515..535 +x=520, y=1525..1544 +x=469, y=1799..1801 +x=478, y=1780..1805 +x=604, y=204..210 +x=456, y=490..493 +x=504, y=1875..1898 +x=527, y=1013..1027 +x=521, y=974..996 +x=583, y=737..760 +x=598, y=410..413 +x=476, y=493..496 +x=478, y=588..592 +x=438, y=1134..1146 +x=639, y=172..182 +x=471, y=1826..1843 +x=489, y=731..735 +x=427, y=888..914 +x=490, y=215..224 +y=1287, x=644..649 +x=655, y=729..747 +x=493, y=1788..1792 +x=596, y=763..765 +y=1236, x=446..456 +x=442, y=590..601 +x=600, y=1277..1289 +y=1224, x=590..608 +x=452, y=1102..1130 +x=504, y=165..176 +x=494, y=1296..1298 +x=615, y=511..516 +x=512, y=1465..1469 +x=649, y=1280..1287 +x=656, y=1811..1823 +x=567, y=76..91 +y=111, x=502..510 +y=867, x=439..444 +x=638, y=595..608 +y=87, x=531..549 +x=484, y=278..292 +y=1364, x=501..511 +x=454, y=1848..1872 +x=607, y=821..835 +x=504, y=218..221 +y=1402, x=626..640 +x=468, y=244..254 +x=554, y=1735..1744 +y=540, x=452..538 +x=472, y=493..496 +x=434, y=1757..1760 +x=502, y=97..111 +x=630, y=1250..1254 +y=1479, x=616..618 +x=549, y=788..806 +x=522, y=198..217 +x=577, y=1539..1552 +x=639, y=206..221 +x=591, y=697..707 +x=514, y=1554..1581 +x=647, y=1325..1330 +x=597, y=192..215 +x=461, y=1058..1077 +y=1528, x=493..501 +x=503, y=191..203 +y=1348, x=431..435 +y=1898, x=477..504 +x=487, y=79..91 +y=1074, x=509..519 +x=601, y=1361..1373 +x=579, y=499..504 +x=640, y=243..265 +y=1922, x=435..438 +y=1267, x=429..448 +x=650, y=156..158 +x=449, y=1439..1453 +x=545, y=417..419 +y=521, x=492..504 +x=517, y=895..908 +y=315, x=492..510 +x=644, y=1280..1287 +y=666, x=512..516 +y=395, x=490..494 +x=433, y=1434..1455 +x=510, y=1595..1617 +x=588, y=763..765 +x=631, y=1550..1552 +x=612, y=1102..1126 +y=1635, x=542..561 +x=526, y=787..798 +x=580, y=1497..1511 +x=603, y=1709..1711 +x=471, y=947..963 +y=730, x=558..564 +x=496, y=168..180 +x=435, y=1331..1348 +y=983, x=489..501 +y=257, x=597..613 +x=617, y=1343..1352 +x=598, y=498..504 +x=580, y=78..98 +y=104, x=441..451 +x=500, y=279..292 +x=626, y=1419..1429 +x=613, y=254..257 +x=610, y=1552..1553 +y=1418, x=470..472 +x=470, y=1038..1041 +y=1375, x=652..658 +y=230, x=457..467 +x=547, y=1370..1395 +x=597, y=1324..1349 +x=504, y=235..246 +x=499, y=728..739 +y=1910, x=602..627 +y=1830, x=456..462 +x=487, y=445..459 +x=525, y=590..610 +y=238, x=651..654 +x=587, y=367..370 +y=1336, x=554..575 +y=462, x=566..581 +x=452, y=1167..1194 +y=798, x=626..643 +x=507, y=507..518 +x=554, y=1523..1525 +x=536, y=1766..1778 +x=539, y=1465..1469 +x=465, y=1329..1335 +x=516, y=1697..1722 +y=970, x=644..648 +y=739, x=483..499 +x=625, y=1584..1590 +x=631, y=1765..1774 +x=598, y=1709..1711 +y=1330, x=645..647 +y=914, x=427..455 +y=1177, x=443..445 +x=618, y=1142..1162 +x=434, y=588..598 +y=560, x=450..466 +x=621, y=921..938 +y=481, x=478..499 +x=620, y=1857..1860 +x=577, y=843..845 +x=486, y=1647..1649 +x=589, y=534..537 +x=576, y=216..223 +y=606, x=476..480 +x=500, y=1831..1845 +x=450, y=644..650 +x=490, y=1401..1416 +x=581, y=63..72 +x=547, y=543..563 +x=605, y=1386..1393 +y=1249, x=575..599 +x=518, y=632..646 +y=563, x=581..585 +y=1805, x=460..478 +x=551, y=125..131 +x=483, y=366..376 +y=1013, x=645..650 +y=1560, x=641..649 +x=664, y=1267..1295 +y=462, x=543..560 +y=221, x=502..504 +x=604, y=101..107 +y=1263, x=602..604 +x=624, y=621..626 +y=996, x=630..632 +y=1659, x=567..571 +y=851, x=606..608 +y=928, x=483..486 +y=840, x=523..543 +y=1649, x=463..486 +x=592, y=1358..1370 +y=1615, x=457..469 +y=1295, x=546..550 +x=581, y=855..868 +y=698, x=462..480 +x=594, y=864..867 +x=593, y=216..223 +x=552, y=723..727 +y=707, x=591..593 +y=1142, x=565..582 +x=496, y=127..135 +x=637, y=1197..1223 +x=608, y=839..851 +x=641, y=1703..1715 +y=745, x=506..518 +x=536, y=1205..1207 +y=1233, x=502..514 +x=447, y=1732..1758 +x=627, y=529..549 +y=1008, x=562..564 +y=1784, x=593..598 +x=496, y=407..421 +x=583, y=163..170 +x=595, y=1193..1204 +x=519, y=1049..1074 +x=509, y=971..992 +y=785, x=631..634 +x=495, y=1117..1142 +y=1563, x=641..649 +x=540, y=591..603 +x=572, y=838..849 +y=1898, x=508..526 +y=568, x=642..644 +y=1571, x=576..585 +y=1001, x=453..455 +x=448, y=1702..1704 +x=553, y=141..164 +y=559, x=647..652 +y=297, x=544..556 +x=451, y=925..936 +x=626, y=1400..1402 +x=467, y=1058..1074 +x=502, y=1230..1233 +y=376, x=454..476 +x=487, y=1354..1365 +x=537, y=1554..1581 +x=495, y=1269..1287 +y=1212, x=656..665 +x=519, y=1082..1106 +x=628, y=728..747 +x=552, y=1652..1662 +x=510, y=98..111 +x=640, y=1730..1732 +y=1035, x=539..558 +x=616, y=1479..1484 +x=472, y=1460..1479 +x=626, y=771..798 +x=520, y=1395..1401 +y=163, x=533..540 +y=931, x=574..578 +y=1455, x=430..433 +x=552, y=674..689 +x=579, y=1832..1837 +x=467, y=208..230 +x=650, y=1587..1603 +x=464, y=969..973 +x=565, y=1129..1142 +x=660, y=294..299 +y=180, x=496..513 +x=622, y=1566..1572 +y=1556, x=491..503 +y=516, x=612..615 +y=1006, x=445..461 +x=574, y=404..411 +x=485, y=787..789 +x=548, y=1086..1097 +x=538, y=7..25 +x=504, y=971..992 +x=517, y=9..17 +x=615, y=803..805 +x=570, y=998..1012 +x=519, y=767..776 +x=571, y=708..712 +y=1295, x=637..655 +y=215, x=597..622 +x=569, y=737..760 +y=1779, x=626..642 +x=549, y=81..87 +y=135, x=496..514 +x=644, y=848..865 +x=543, y=417..419 +x=551, y=591..603 +y=939, x=585..591 +x=498, y=947..963 +x=568, y=1214..1228 +x=588, y=1477..1489 +x=586, y=1196..1207 +x=514, y=749..761 +x=455, y=548..557 +y=1162, x=576..578 +x=481, y=1326..1345 +y=1069, x=575..577 +x=573, y=1777..1803 +x=483, y=1490..1502 +x=595, y=410..413 +x=636, y=1463..1485 +y=1001, x=641..655 +x=486, y=1189..1206 +x=488, y=190..203 +x=493, y=1883..1887 +x=560, y=1539..1552 +x=455, y=992..1001 +x=564, y=482..487 +y=1292, x=593..612 +y=587, x=559..574 +x=436, y=37..59 +x=549, y=872..885 +x=456, y=177..182 +y=991, x=552..572 +y=812, x=513..519 +x=469, y=1338..1346 +x=500, y=1570..1571 +x=518, y=721..745 +y=1821, x=491..493 +x=429, y=1239..1267 +x=430, y=749..766 +x=470, y=471..481 +x=532, y=491..500 +x=612, y=1796..1805 +x=478, y=1103..1130 +x=478, y=471..481 +x=647, y=931..939 +y=983, x=601..622 +x=628, y=1565..1572 +x=631, y=1197..1223 +y=1489, x=570..588 +x=460, y=926..934 +x=542, y=112..113 +x=444, y=482..503 +x=557, y=789..806 +x=446, y=12..30 +x=635, y=1557..1567 +x=660, y=1197..1200 +x=565, y=977..987 +y=549, x=627..637 +x=654, y=213..238 +y=504, x=579..598 +x=565, y=1627..1640 +y=885, x=531..549 +x=474, y=683..695 +x=531, y=380..398 +x=445, y=1175..1177 +y=1455, x=548..550 +y=1235, x=536..556 +x=627, y=1249..1254 +x=595, y=1358..1370 +x=459, y=598..600 +x=496, y=910..937 +x=580, y=1108..1120 +y=1840, x=509..515 +x=499, y=324..337 +x=575, y=1893..1914 +x=593, y=1892..1914 +x=599, y=1239..1249 +x=520, y=1137..1145 +y=343, x=598..617 +x=575, y=1238..1249 +y=947, x=553..555 +x=568, y=482..487 +x=556, y=1224..1235 +y=241, x=495..497 +x=454, y=124..138 +x=550, y=1438..1455 +x=645, y=1004..1013 +y=1722, x=514..516 +x=486, y=915..928 +y=768, x=547..561 +x=499, y=1789..1792 +x=531, y=871..885 +y=1805, x=606..612 +x=437, y=1757..1760 +y=1158, x=599..608 +x=480, y=713..715 +x=541, y=1396..1401 +x=441, y=89..104 +y=493, x=456..461 +x=648, y=359..381 +x=552, y=1043..1053 +x=634, y=1318..1335 +y=1345, x=476..481 +x=620, y=1895..1897 +y=223, x=437..442 +x=432, y=271..274 +x=429, y=1463..1486 +x=579, y=884..897 +x=577, y=1585..1599 +y=141, x=610..633 +y=1075, x=567..583 +y=1270, x=518..528 +x=572, y=980..991 +y=35, x=551..572 +x=656, y=1205..1212 +y=1914, x=575..593 +x=441, y=1516..1531 +y=1801, x=524..550 +x=439, y=614..616 +y=604, x=566..572 +y=222, x=563..566 +x=531, y=674..689 +y=1281, x=559..584 +x=590, y=1222..1224 +x=633, y=120..141 +x=451, y=1365..1377 +x=595, y=534..537 +y=219, x=625..635 +y=1413, x=588..608 +x=470, y=445..459 +y=615, x=462..486 +y=1659, x=610..632 +x=585, y=950..974 +x=603, y=1583..1596 +y=747, x=628..655 +y=1519, x=472..490 +x=643, y=771..798 +x=578, y=914..931 +y=1678, x=461..477 +x=498, y=1531..1542 +y=101, x=627..641 +x=667, y=1918..1931 +x=455, y=587..592 +x=632, y=979..996 +y=1331, x=603..625 +x=519, y=792..794 +y=1223, x=631..637 +x=560, y=1458..1470 +y=1511, x=556..580 +x=610, y=998..1020 +x=441, y=532..537 +y=608, x=628..638 +y=158, x=650..653 +x=568, y=253..263 +y=608, x=554..578 +x=488, y=552..564 +y=1778, x=520..536 +x=430, y=610..620 +x=493, y=1532..1542 +x=497, y=1743..1749 +y=223, x=576..593 +x=500, y=878..881 +x=512, y=427..440 +y=822, x=549..557 +x=551, y=181..188 +y=1640, x=565..618 +x=432, y=1788..1792 +y=437, x=623..626 +x=608, y=1403..1413 +y=1786, x=593..598 +y=1289, x=600..602 +x=477, y=1590..1599 +x=467, y=628..637 +x=513, y=627..628 +y=164, x=553..565 +x=658, y=1400..1420 +x=438, y=645..650 +x=554, y=1422..1437 +x=514, y=1696..1722 +x=492, y=553..564 +x=632, y=1136..1146 +x=648, y=1679..1691 +x=472, y=1412..1418 +y=421, x=479..496 +x=444, y=1745..1773 +x=454, y=645..657 +x=479, y=1000..1015 +x=493, y=1819..1821 +x=490, y=382..395 +x=472, y=683..695 +x=543, y=1609..1622 +x=616, y=1895..1897 +y=881, x=500..515 +y=557, x=455..459 +x=657, y=1656..1671 +y=356, x=468..490 +x=584, y=1028..1043 +y=537, x=589..595 +x=580, y=702..715 +y=657, x=454..480 +x=642, y=810..821 +x=572, y=602..604 +x=474, y=1038..1041 +x=655, y=985..1001 +x=563, y=890..902 +y=107, x=604..614 +x=571, y=1654..1659 +x=609, y=947..963 +x=526, y=488..495 +x=612, y=511..516 +x=466, y=925..934 +x=575, y=542..563 +x=456, y=1224..1236 +y=1927, x=559..610 +y=1124, x=428..447 +x=641, y=899..902 +x=490, y=824..831 +x=600, y=1302..1315 +x=616, y=172..182 +y=527, x=565..567 +y=1596, x=581..603 +y=21, x=491..493 +x=566, y=443..462 +y=1792, x=493..499 +x=607, y=493..521 +y=381, x=648..660 +x=545, y=1519..1530 +y=67, x=535..543 +x=506, y=37..40 +x=529, y=626..628 +y=1043, x=580..584 +x=464, y=784..794 +x=500, y=54..68 +y=934, x=460..466 +y=477, x=458..464 +x=550, y=1789..1801 +x=460, y=245..254 +y=274, x=432..445 +y=204, x=604..616 +x=591, y=919..939 +x=438, y=1915..1922 +x=592, y=1563..1574 +y=1623, x=592..602 +x=445, y=989..1006 +y=1150, x=446..462 +x=567, y=501..527 +x=474, y=125..138 +x=501, y=11..25 +y=1396, x=590..612 +x=652, y=1463..1485 +x=478, y=102..113 +x=479, y=408..421 +x=578, y=1151..1162 +x=461, y=122..135 +x=640, y=111..114 +x=461, y=1671..1678 +x=489, y=1654..1677 +y=135, x=461..466 +x=536, y=1225..1235 +x=579, y=843..845 +y=170, x=583..598 +x=524, y=1832..1845 +x=501, y=165..176 +x=457, y=1059..1077 +x=466, y=122..135 +x=652, y=1442..1456 +x=565, y=500..527 +y=1792, x=530..535 +y=1295, x=659..664 +x=427, y=386..410 +y=31, x=648..651 +x=509, y=597..601 +x=585, y=1324..1349 +x=623, y=1668..1679 +x=435, y=1849..1872 +x=445, y=147..158 +y=1544, x=520..533 +x=592, y=1243..1246 +x=556, y=1585..1599 +x=624, y=947..963 +y=781, x=631..634 +x=626, y=1654..1656 +x=527, y=973..996 +x=442, y=1340..1350 +y=1662, x=520..530 +x=602, y=1260..1263 +x=606, y=1796..1805 +x=633, y=890..905 +x=494, y=35..44 +x=456, y=1788..1792 +x=498, y=255..268 +y=1656, x=624..626 +y=1162, x=593..618 +x=510, y=1154..1156 +x=633, y=1258..1268 +x=547, y=765..768 +y=217, x=522..547 +x=444, y=926..936 +x=581, y=1582..1596 +x=593, y=1193..1204 +x=471, y=1799..1801 +x=483, y=1589..1599 +y=849, x=572..590 +y=1837, x=456..462 +x=496, y=666..677 +x=458, y=753..755 +x=468, y=345..356 +x=511, y=214..224 +x=444, y=853..867 +y=1469, x=512..539 +x=523, y=589..610 +y=761, x=475..514 +x=439, y=326..335 +x=597, y=255..257 +x=579, y=1212..1222 +x=426, y=954..975 +x=489, y=1293..1303 +x=615, y=1551..1553 +x=582, y=1541..1543 +x=650, y=1656..1671 +x=575, y=1324..1336 +x=568, y=1519..1530 +y=147, x=436..440 +x=638, y=189..191 +x=627, y=77..101 +x=518, y=512..515 +x=515, y=1400..1416 +y=684, x=657..661 +y=1654, x=567..571 +y=1856, x=471..473 +y=1875, x=631..644 +x=494, y=382..395 +x=524, y=853..857 +x=645, y=1478..1480 +x=552, y=447..457 +y=612, x=622..649 +x=645, y=169..193 +x=462, y=1354..1365 +y=1555, x=589..606 +x=428, y=1746..1773 +x=590, y=1383..1396 +x=647, y=552..559 +y=503, x=444..446 +y=25, x=523..538 +y=1672, x=495..498 +y=794, x=511..519 +x=663, y=1557..1567 +y=1012, x=425..434 +x=495, y=232..241 +x=478, y=713..715 +x=484, y=861..887 +y=1464, x=568..571 +x=655, y=1319..1335 +y=1373, x=584..601 +y=576, x=493..532 +x=574, y=1127..1139 +y=1456, x=652..665 +x=455, y=888..914 +y=1859, x=471..473 +x=649, y=461..466 +x=579, y=1174..1181 +y=1425, x=445..452 +y=1194, x=437..452 +x=556, y=124..131 +y=496, x=472..476 +y=718, x=467..489 +x=652, y=1363..1375 +x=627, y=1884..1910 +y=794, x=464..491 +y=1437, x=554..561 +x=550, y=999..1012 +x=578, y=598..608 +x=446, y=481..503 +x=581, y=558..563 +x=481, y=384..398 +x=559, y=1256..1281 +y=937, x=473..496 +x=585, y=1568..1571 +x=465, y=758..770 +y=867, x=594..610 +y=805, x=599..615 +y=1395, x=547..575 +x=511, y=792..794 +y=675, x=568..587 +y=1207, x=512..536 +y=845, x=577..579 +x=470, y=860..887 +x=481, y=1675..1680 +x=642, y=553..568 +y=974, x=585..599 +x=479, y=55..68 +x=583, y=768..770 +x=518, y=387..415 +x=443, y=1020..1047 +x=480, y=686..698 +x=616, y=620..638 +x=592, y=1602..1623 +x=612, y=1300..1312 +x=550, y=1273..1295 +y=461, x=506..525 +y=316, x=447..475 +x=638, y=1730..1732 +x=634, y=781..785 +x=521, y=1496..1518 +x=563, y=977..987 +y=1496, x=440..465 +x=510, y=266..290 +x=519, y=812..814 +x=497, y=1595..1618 +x=438, y=387..410 +x=448, y=436..446 +x=658, y=224..247 +x=455, y=1021..1047 +y=459, x=470..487 +x=479, y=453..456 +x=443, y=833..840 +x=528, y=1614..1619 +x=448, y=1240..1267 +x=542, y=1230..1232 +x=632, y=354..377 +x=511, y=1743..1749 +y=1027, x=513..527 +y=963, x=471..498 +x=464, y=468..477 +y=939, x=647..664 +x=433, y=1510..1535 +x=511, y=1346..1364 +x=553, y=1886..1912 +x=602, y=441..443 +x=551, y=26..35 +y=376, x=483..501 +y=1698, x=588..602 +x=640, y=1400..1402 +x=536, y=414..424 +x=506, y=722..745 +x=502, y=1809..1825 +y=1691, x=648..654 +x=449, y=395..409 +x=643, y=1478..1480 +x=600, y=1418..1429 +x=502, y=37..40 +y=908, x=517..538 +y=1074, x=467..474 +y=1662, x=552..578 +x=514, y=1596..1617 +y=441, x=651..663 +x=445, y=1411..1425 +y=894, x=552..556 +y=1058, x=613..628 +x=645, y=1325..1330 +y=1568, x=576..585 +y=370, x=587..613 +x=515, y=878..881 +x=442, y=203..223 +x=435, y=1914..1922 +y=1420, x=658..664 +x=530, y=1792..1795 +y=443, x=602..610 +x=598, y=1784..1786 +x=607, y=625..633 +x=537, y=1653..1665 +x=524, y=900..902 +x=561, y=1084..1093 +x=468, y=1175..1183 +y=766, x=430..436 +x=645, y=1891..1908 +x=663, y=416..441 +x=425, y=992..1012 +x=457, y=1608..1615 +y=1349, x=585..597 +y=1760, x=434..437 +y=1200, x=656..660 +x=513, y=1013..1027 +y=688, x=610..614 +x=523, y=828..840 +y=59, x=436..459 +y=715, x=561..580 +x=570, y=1127..1139 +x=585, y=998..1020 +x=501, y=385..398 +x=590, y=1243..1246 +x=536, y=1747..1758 +y=835, x=607..626 +y=424, x=536..552 +x=622, y=980..983 +x=604, y=1260..1263 +x=648, y=343..352 +x=645, y=435..442 +x=536, y=1640..1648 +y=770, x=453..465 +x=552, y=894..898 +x=606, y=839..851 +y=1736, x=631..651 +x=564, y=29..31 +y=1434, x=469..490 +x=521, y=242..259 +y=114, x=638..640 +y=765, x=588..596 +x=577, y=647..660 +x=606, y=1552..1555 +x=653, y=1505..1509 +y=1617, x=510..514 +y=499, x=467..487 +y=915, x=607..620 +y=1908, x=637..645 +x=463, y=1646..1649 +x=483, y=1674..1680 +y=1677, x=489..504 +y=373, x=570..572 +x=624, y=1654..1656 +x=453, y=1897..1912 +x=585, y=919..939 +x=626, y=1177..1205 +x=529, y=61..73 +x=531, y=1125..1142 +x=450, y=550..560 +y=1012, x=550..570 +x=583, y=906..910 +x=592, y=1869..1875 +y=865, x=630..644 +x=490, y=1428..1434 +x=582, y=1773..1789 +x=655, y=1258..1268 +x=608, y=1223..1224 +x=558, y=1023..1035 +x=486, y=601..615 +x=635, y=201..219 +x=659, y=1267..1295 +x=576, y=1568..1571 +y=1704, x=448..453 +x=503, y=434..436 +y=72, x=572..581 +x=657, y=663..684 +x=665, y=1443..1456 +x=453, y=1702..1704 +x=580, y=1459..1470 +x=588, y=1404..1413 +x=524, y=1854..1867 +y=905, x=633..651 +x=567, y=1044..1053 +x=499, y=701..713 +y=601, x=425..442 +y=1883, x=493..496 +x=492, y=276..289 +y=193, x=645..664 +y=442, x=634..645 +x=610, y=121..141 +x=570, y=1478..1489 +x=427, y=1133..1146 +x=652, y=257..270 +y=1126, x=612..634 +x=568, y=667..675 +x=559, y=403..411 +y=224, x=490..511 +y=537, x=441..448 +x=642, y=343..352 +y=518, x=507..529 +x=561, y=765..768 +x=586, y=862..887 +x=614, y=102..107 +x=451, y=1083..1096 +x=533, y=144..163 +x=522, y=488..495 +x=557, y=322..345 +y=1775, x=525..529 +x=585, y=906..910 +x=644, y=899..902 +y=610, x=523..525 +x=476, y=606..608 +y=1041, x=470..474 +y=603, x=540..551 +y=1574, x=569..592 +x=594, y=476..490 +y=1254, x=627..630 +x=610, y=1340..1349 +x=510, y=301..315 +x=535, y=40..67 +x=485, y=1023..1045 +x=644, y=948..970 +x=459, y=548..557 +y=1409, x=595..599 +y=1665, x=515..537 +x=653, y=156..158 +y=247, x=658..662 +x=483, y=728..739 +y=861, x=514..531 +y=1801, x=469..471 +y=17, x=509..517 +y=818, x=494..534 +x=610, y=1257..1268 +y=1489, x=608..624 +x=649, y=1560..1563 +y=950, x=535..561 +y=713, x=499..511 +y=301, x=570..583 +x=463, y=816..842 +x=573, y=961..972 +y=335, x=439..453 +x=496, y=1883..1887 +x=556, y=1523..1525 +x=515, y=1904..1926 +x=656, y=1197..1200 +x=456, y=103..113 +x=617, y=1583..1590 +y=1543, x=582..603 +x=570, y=274..301 +x=460, y=1696..1711 +y=1758, x=536..640 +x=437, y=435..446 +x=465, y=1479..1496 +y=1020, x=585..610 +x=641, y=77..101 +y=929, x=527..547 +x=618, y=1627..1640 +y=601, x=496..509 +x=651, y=1217..1243 +x=494, y=276..289 +x=656, y=1021..1029 +x=616, y=266..282 +x=619, y=1324..1326 +y=616, x=439..446 +x=514, y=770..779 +x=616, y=1324..1326 +y=899, x=641..644 +y=1103, x=591..601 +y=1710, x=659..663 +x=542, y=1853..1867 +x=488, y=234..246 +y=1352, x=601..617 +x=523, y=6..25 +x=630, y=1231..1233 +x=444, y=1339..1350 +y=975, x=426..434 +x=438, y=1412..1430 +x=546, y=1272..1295 +y=1530, x=545..568 +x=590, y=266..282 +y=868, x=656..662 +x=603, y=1320..1331 +x=457, y=1241..1254 +x=498, y=1662..1672 +x=573, y=856..868 +x=634, y=494..521 +x=552, y=979..991 +x=532, y=573..576 +x=428, y=1412..1430 +y=158, x=445..496 +x=644, y=1347..1375 +y=182, x=616..639 +x=491, y=9..21 +x=532, y=1309..1318 +x=442, y=1896..1912 +x=520, y=1765..1778 +x=497, y=1296..1298 +y=1233, x=620..630 +y=1296, x=494..497 +y=1447, x=580..641 +x=659, y=1709..1710 +x=615, y=1507..1533 +x=564, y=726..730 +x=462, y=685..698 +x=640, y=1075..1093 +x=632, y=1647..1659 +x=576, y=476..490 +x=482, y=327..334 +x=559, y=569..587 +y=345, x=557..580 +x=656, y=851..868 +x=456, y=1830..1837 +x=607, y=1773..1789 +y=755, x=442..458 +y=101, x=530..550 +x=561, y=939..950 +y=1744, x=554..575 +y=1567, x=635..663 +x=556, y=894..898 +y=1525, x=554..556 +x=655, y=1076..1093 +y=1618, x=490..497 +x=442, y=571..582 +x=649, y=1694..1703 +y=1453, x=441..449 +y=1575, x=527..530 +y=1843, x=445..471 +x=512, y=1811..1823 +y=650, x=438..450 +x=434, y=954..975 +x=662, y=223..247 +x=472, y=1511..1519 +x=568, y=556..559 +x=453, y=992..1001 +y=398, x=531..542 +x=619, y=1550..1552 +x=561, y=1421..1437 +y=337, x=477..499 +y=44, x=494..514 +x=457, y=208..230 +x=511, y=701..713 +x=620, y=1232..1233 +y=1146, x=632..646 +y=1872, x=435..454 +x=451, y=834..840 +x=565, y=142..164 +y=419, x=543..545 +y=1875, x=569..592 +y=1552, x=619..631 +x=490, y=1595..1618 +x=578, y=1777..1803 +x=543, y=434..462 +y=113, x=515..542 +y=1350, x=442..444 +y=963, x=609..624 +x=587, y=398..419 +y=1572, x=527..530 +x=501, y=966..983 +x=563, y=220..222 +x=566, y=1177..1187 +x=429, y=289..294 +y=972, x=554..573 +x=554, y=1323..1336 +x=584, y=1360..1373 +y=419, x=587..605 +x=565, y=1610..1622 +x=486, y=1810..1825 +y=1571, x=483..500 +y=30, x=446..463 +x=512, y=656..666 +y=1599, x=477..483 +x=530, y=1657..1662 +y=138, x=454..474 +y=1773, x=428..444 +y=1619, x=528..536 +x=486, y=1154..1156 +x=550, y=92..101 +y=1581, x=514..537 +y=440, x=488..512 +x=634, y=809..821 +x=599, y=1401..1409 +y=1222, x=576..579 +x=552, y=413..424 +y=265, x=619..640 +x=599, y=951..974 +x=504, y=496..521 +x=532, y=985..1012 +x=508, y=1189..1200 +y=188, x=525..551 +y=727, x=542..552 +x=631, y=1873..1875 +y=638, x=599..616 +x=556, y=1498..1511 +y=1292, x=620..625 +x=513, y=167..180 +y=1912, x=442..453 +x=531, y=82..87 +x=589, y=651..652 +x=637, y=1892..1908 +x=560, y=435..462 +y=411, x=559..574 +y=416, x=487..490 +y=1542, x=493..498 +x=602, y=1195..1207 +x=573, y=708..712 +x=575, y=1370..1395 +y=1480, x=643..645 +x=489, y=664..673 +x=428, y=1116..1124 +x=651, y=1152..1170 +x=625, y=1319..1331 +y=45, x=657..665 +x=453, y=325..335 +y=760, x=569..583 +x=628, y=1047..1058 +x=530, y=769..779 +y=842, x=455..463 +x=596, y=1669..1679 +x=571, y=1456..1464 +x=448, y=1667..1673 +x=648, y=29..31 +y=868, x=573..581 +y=1207, x=586..602 +y=1758, x=447..475 +x=444, y=1516..1531 +y=1303, x=489..505 +x=567, y=1404..1411 +y=689, x=531..552 +y=182, x=439..456 +x=570, y=861..864 +y=1012, x=532..541 +x=608, y=920..938 +y=563, x=547..575 +x=525, y=450..461 +y=1232, x=542..546 +x=539, y=1023..1035 +x=480, y=1689..1695 +y=191, x=633..638 +x=548, y=1437..1455 +y=1243, x=590..592 +x=431, y=1330..1348 +y=1053, x=552..567 +x=594, y=1693..1695 +x=479, y=787..789 +x=567, y=1654..1659 +y=902, x=524..528 +y=98, x=577..580 +x=554, y=253..263 +x=609, y=1856..1860 +y=203, x=488..503 +x=527, y=918..929 +x=607, y=901..915 +x=511, y=1905..1926 +y=436, x=498..503 +x=446, y=1224..1236 +x=580, y=131..142 +x=663, y=1708..1710 +x=512, y=1138..1145 +x=529, y=508..518 +y=298, x=605..613 +y=1867, x=524..542 diff --git a/2018/inputs/18.txt b/2018/inputs/18.txt new file mode 100644 index 0000000..9e354bc --- /dev/null +++ b/2018/inputs/18.txt @@ -0,0 +1,50 @@ +#.#.|..#|.||.#...|...#.|.......##|##..#..||.||.... +#.......#.....|##..#|..#.##..##|.|.#..|.#...|....# +.|..........#.|..|.....|..|#.#...##|#|.|#|##|...#| +#|....#|##..#|.|||.#.|.#...#.##.......#||..#...... +.#|....|.|..#..||...#||...|......###.#.#...##..#.. +..||#...|.#.|||||.....|.......##...#.#....|..#.... +###|..##...|.#|..|.#|#...|.#.|....||.|...#|.|#...# +|.#.|#.#.|###.|..#..|....#....#|.#..||.||.....#..# +.#..|.#..#|##..|.....|.#.|.#.#|.......#..|...#..|. +...|||##...|..#.#|#|..#.#..#|.|.|#..##........##.# +|#.#..||....|...|#..|....|#|...#.#.#.##|.|.#...... +|..|...|.|#.........|..#|...|.#.|##....|..|..|#.|| +|....#..||..|...#|......|||||.|#....||....|.#|.#.. +......#||.#.#.||..|.......|....||#||#.|.#.|.##||#| +.##.#....##.#.|....|...###..#...|.#....|.#...|..## +.##..#|#.#.##.||..|.#|..|.|.##|....|...#||||.|..#. +|.|..|#|....|.#.#..||.....|.....##....||....|.||.. +#|.|.##...||...........|..#.||.|.#..##..|#||...... +||..||.||..#.##.#...|.#|.....|###....#.....#...|.. +|.#.##|.|...||#.#...||....|.|#..|.#....##........# +..|....|.#.##|....|||#....#.|.|.##....|##|.|#..... +.|.....#|.#....|###|..#|||........||#.#..||..|..#. +#..#...|#|.#...|.||##..#.|..|.|.#.|..#.#.|.....#.# +|#||.##..#..|||.......#|..#...#..##....#||.#|..... +.|.#.....|..#...#...##...|.#...|.#|.......|..#...| +.||.......|..##..##.#|.|..|...#.|.#..#.|....#.|#.| +....#..#|##|....#..|.#..|||..#....#.#|...||.#..|.. +#......#|.##..|..|....|.##.#|...#..#.|..|..|..|##. +...|||.#|#.#.|..|||.#.#.#...||...||..##..#.....|.. +..#..|.|#.#..|..##|..#....#.|..|.......|||#.|.|.|# +.##|..#...#..||..|.........|#.|#.....|...##.|..||# +#.....||....#.....|#.||......|.#|.#|....||.||.#.#. +#..|#..|......|.#.#.#.##..||.|.#.|......#|#||#.|.# +..||..||.....|.#..###.#.|#..|.......|....#||.|..#. +.#...###|#|#|||...|...#.#|.#|..|...#..#.|#|.#...|. +...|..#||....##|..#...#....#||#.......|....#.|###. +..#....|#..#|.....|.#|..#..|#....||......|.|.#.|#. +..|##....#.|..#..#.|.#..||....#...|.....|..#.....| +.......#||..#||...|.#.|#...#....|.|.||.#.|...#.##| +.|.|||.....#............#..#..|..|..#.|.#..|...... +|...|.|####..#.....#..#..|#|#..#..|......|...|.#|# +|.|...#..#..|....|.....#|#||..#.||..|#|..|||.|.|.| +..#...|#.......||.#.#.#....#.........##|.|..#.##|| +#|#..|..|#|.##.|.|#......||......|.....#||###.|### +....#..#.|..|...#|#|..|#..|.#|....||#|.||.|#|..... +|..#.|..#.|#......#...#|.#|#|.....|#...###....##.. +...##..#..|..#..#.#...|.#..#|...|#.##|.#|..##..#.# +|.|.|...#.|..##.|.|....|..#..|...|..##|...|..|.... +.#|..|..|..|.|..#...|.||#...#......||.#.#......... +.#.##..|............|.||.....#||..|##.|..|.....#.| diff --git a/2018/inputs/19.txt b/2018/inputs/19.txt new file mode 100644 index 0000000..1207b7b --- /dev/null +++ b/2018/inputs/19.txt @@ -0,0 +1,37 @@ +#ip 4 +addi 4 16 4 +seti 1 7 2 +seti 1 1 5 +mulr 2 5 3 +eqrr 3 1 3 +addr 3 4 4 +addi 4 1 4 +addr 2 0 0 +addi 5 1 5 +gtrr 5 1 3 +addr 4 3 4 +seti 2 7 4 +addi 2 1 2 +gtrr 2 1 3 +addr 3 4 4 +seti 1 3 4 +mulr 4 4 4 +addi 1 2 1 +mulr 1 1 1 +mulr 4 1 1 +muli 1 11 1 +addi 3 3 3 +mulr 3 4 3 +addi 3 9 3 +addr 1 3 1 +addr 4 0 4 +seti 0 1 4 +setr 4 9 3 +mulr 3 4 3 +addr 4 3 3 +mulr 4 3 3 +muli 3 14 3 +mulr 3 4 3 +addr 1 3 1 +seti 0 6 0 +seti 0 7 4 diff --git a/2018/inputs/2.txt b/2018/inputs/2.txt new file mode 100644 index 0000000..1edb865 --- /dev/null +++ b/2018/inputs/2.txt @@ -0,0 +1,250 @@ +krdmtuqjmwfoevnadixyclzspv +yrdmtuqjiwfoevnabfxyclzsph +kqjvtuqjgwfoevnabixyclzsph +krdmtuqjgwjoevnaolxyclzsph +krdmtnqjgwfoevnabiiyxlzsph +lrymtuqjgwhoevnabixyclzsph +krdmguqjgwfoevnabixkclzsah +krdmtuqjgwfoevnibinyclzdph +krdmtucjgwfoevnabhxyclzspv +krdmtuqjgwfoevtabixyulzsuh +krdmtuqqgwfoevnabixdblzsph +krdmtuqjawfsevnabiyyclzsph +krdmtuqjgwfoevnabzxccldsph +krdmtcqegwfhevnabixyclzsph +krdmtuqjgwforvnaxixycgzsph +krdmtuqjgwfoqvnaxixyclzskh +krdmtutjgwfoevyajixyclzsph +krdmtuqmgwfoevnabixycxzspc +krdptuqjgwhoevkabixyclzsph +krdttuqjhwfoevnabixyclzspa +krdmtuqjgwfoevnabibyhnzsph +krdmtuqjywfoevntbidyclzsph +krdmtojdgwfoevnabixyclzsph +krdmtuqjgpfuevnauixyclzsph +krdmtoqjgwfrevjabixyclzsph +krdmtuqjgwfoyvndbixyclzyph +krdmtxqjgwfomvnayixyclzsph +crdmtuqjgwfoevnabixyoxzsph +krdmtpqjgwfdevnabixycqzsph +krdmtuqjgwfoevuabfxsclzsph +krdmtuqjgwfoevnybixycdzskh +krdmtusjgwfoevnabixxclzdph +krdmtuqjgwfoevnaboxyglzjph +zrdmtuqjgrfoevnalixyclzsph +krdmtuqjclfoevnabixyclzsih +kqdmtlqjgwfoevnabtxyclzsph +krdmtuqggwpoevnabixyclzlph +krdmtuqjgwfobwnrbixyclzsph +krdmtuqjgwfoevwabkxycnzsph +kldmtuqjgwfogvyabixyclzsph +krdmtuqvgwfoevnabixtcrzsph +krdmtuqjgwroevnabixyrlzspw +krdmtuqjgjfoevnabixyelzrph +krdmtuqjgffoevnaaixyclzspa +krdmtuqjgwfoevxabifywlzsph +krdmtuqjgwfoevlabixycrzsrh +krdmtuqjgwfpevnabixocqzsph +krdmtuqjgwfoevdabixycnhsph +krdmtmqjgwfoevnajixyclvsph +krdmtuqjjvfoevnabgxyclzsph +krzmtuqjgwfoevnabioyckzsph +kodmtwqjgwfoevnabieyclzsph +ehdmthqjgwfoevnabixyclzsph +krdmtuqjxwioevnabixyclbsph +grdmkutjgwfoevnabixyclzsph +krdutuqjgwfoebnabixaclzsph +krdmtuqjgwfoebnabixyclcjph +krdmteqjgwfoevnlbixycizsph +krdmtegjgwhoevnabixyclzsph +krdmtuqjgwfdrvnabixbclzsph +krdmtuqjgyfoevidbixyclzsph +krdmtubjawfoevnabixyclzuph +krdmtuqjgwfoavjabixyclzssh +krdmtuqjgwfoeonabixyclzsvo +vrdmtuqjgwffevnabixpclzsph +krdmtuqonwfoevnabixycfzsph +krdmtumjgwfpevnubixyclzsph +krdmtutjgwfoevnaciyyclzsph +krdrtuqjgwfoevnwbixyglzsph +krdmtuqjgwfoevbabixyclesdh +krdmtuqcgwfoevnabixyqdzsph +krdmtuqjgwfogvnabrxycezsph +krdmujqkgwfoevnabixyclzsph +krdmtuqjgtooevnabixyclzzph +jrdntuqjgwfoevnabixyclrsph +krdmtuqjgzfoevkebixyclzsph +krdmtuqjgwfosvnaeixyclztph +krdmtuqjgwfoevzabixydlzaph +krdmtuqzgwfoavnabiqyclzsph +krdmtuqvgwfoevnabixycwzspv +krdmvuqjgwteevnabixyclzsph +krdmtujjgwfoevgybixyclzsph +kydmtuqjgwfoeunacixyclzsph +krdmtuqjgifoqvnabicyclzsph +krnltiqjgwfoevnabixyclzsph +krdmtuqjgwfoevnabhxyclzsgi +kfdmtuqjnwfowvnabixyclzsph +kmdmtuljgwfoevnabixycvzsph +krdmtxqjgwaoevvabixyclzsph +kramduqjgwfoevnabixyclzwph +krdutuqjgwfoennabixyclziph +krdmvuqfgwfoevnacixyclzsph +krdmtuqogwfoevnabmvyclzsph +krdmfuqjgwfoyvnabixyclzseh +krdmtuqjgweoelnabixyclzspd +krdmtumjgwfoevnabixyclzypo +krdmtuqjgkfoevhabixyclzsqh +kjdmtuqjgwfoevgabixyclzsah +krdmtuqjgwfoevnlbixyclzsbw +mrdmtxqjgwfoevnabgxyclzsph +krdmtuqpgwfoevnhbixycltsph +krdmtuqjgwfmqvnabixyclzslh +krqmtuqogwfoevnaqixyclzsph +krdmtusjggfoevnabicyclzsph +krcmtuljgwfoevlabixyclzsph +krdmtuojgwfoeknabixyclzsrh +krdmtuqjtwfoevnabiypclzsph +krvmtupjgwfoevnabixycldsph +krdmtuxjgwfoevaabxxyclzsph +krdmtvqlgwfoehnabixyclzsph +wrdmtuqjgwfoevnabixyclzdpy +krdatuqlgwfoevnabixyclzsjh +krdmtuqjgwfoevpabkxyclzsjh +krdmtuqjgwqvsvnabixyclzsph +krdmtwqjgwfoevnobixyclzspm +krdmtuqjgssoevnabixyclgsph +krdmtuqjgwfoevnafixyclzbpp +krdmtuqjowfoevxabiuyclzsph +krdmtuqrgwfoevntbixyclzspu +krdmtucjgwfoevnabixcnlzsph +krddtuojgwfoevnabixyclzzph +krdmtuqjgwuoevnabiqycldsph +kpdmpuqjgwfoevnabixyclzslh +krdmtuqjgwfoewnabixyzxzsph +krdmtuejswfoevhabixyclzsph +krdmtuqggwfoevntbikyclzsph +krdmtuqjgwfoevnabixydlhnph +krdmtcqjglfoevnaxixyclzsph +krumyuqjgwfoevnrbixyclzsph +kgdmmuqjgwooevnabixyclzsph +krdmteqjgwfqevwabixyclzsph +krdmfuqjgwfpevnabixyclzspq +erdmtycjgwfoevnabixyclzsph +krdmcuqjgwfoevnabixjglzsph +krdmtuqjgtfoeunabixiclzsph +krdmtuqjgwfoevmqbixyclzspu +krlmtuqjvwfoevnabikyclzsph +krdotuqjgwfoevnagrxyclzsph +krdmtuqbgwfoefnabixyclasph +kwdmtuqjgwfosjnabixyclzsph +kydmtuqjgwfoevcabixycezsph +crdmtuqjgwloevnabixkclzsph +krimtuqhgwfoevnbbixyclzsph +krdmjuqagwfoevnabicyclzsph +krdmtuqdgzfoevnabixydlzsph +krdmtuqjgwwoevnaqixyclzspf +krdmtuqjgwfoevnabdxyzvzsph +krdmtuqjgwaofvnabixyclzsnh +krdmturjgwfmevnabixyclzspn +krdmvuqjgwboevnabixyolzsph +krdmtuqjgwfomvnabijyclzspx +bedmtuqjgwfoevnabixyslzsph +krdmtenjgwfoevnabixyclzsqh +krdmtuqugwfoevnabixpcdzsph +krdmtuqjgiloevnabrxyclzsph +krdmtupjcwfoevnabixyclwsph +kremtuqjgwfoevnabixyyjzsph +krdmtuqjgwnoovnabixyclzshh +qrdmtuqjgwfoevnabixyciasph +krdituqjgbfoevnagixyclzsph +krdmnoqjgwfoqvnabixyclzsph +krdmtuqegwfoevhkbixyclzsph +krdmkucjgwfoevnabixnclzsph +krdmtuqbnwpoevnabixyclzsph +krdmttqjgwfoevnabixyclbspz +srdmtubjgwfrevnabixyclzsph +krdmruqjzwfoevnabixyclesph +ardmtuqfgwwoevnabixyclzsph +yrumtuqjgwhoevnabixyclzsph +rrdmtuqjgwfoevnabsxycwzsph +krpmtuqjgwfoevdabixyclzzph +krdmuuqjgwfoevnabixyclriph +krdmtuqjgwfobvnabixyvgzsph +krdmbuujgwfoevnabixycczsph +krhmtuwjgwfoeqnabixyclzsph +krdwtuqjgwfoevnkbixyclzzph +krdmtuqjgwkoeqnabixyvlzsph +kadmtuqjgwfoednabcxyclzsph +krdmtyqqgwfoevnabizyclzsph +krdmtuqjgnfoevnabiyycmzsph +krdmtuqjcwfouvnabixyclznph +krdmtuqjjwfcevnqbixyclzsph +krdmtuqfgbfoevgabixyclzsph +kkdmtuqjgwfoevnapixyclzsth +nrdmtuqjgwtoevnakixyclzsph +krdmtuqjglfoevlabixdclzsph +zrdmtuqjgwfoevndbixbclzsph +krdmeuqjgwfoeenabixyclrsph +krdmoaqjzwfoevnabixyclzsph +krsmtuqjgwfoevnwbixyclzsfh +kadmtuqjgwfoqdnabixyclzsph +krsmtuqjgofoevnabixkclzsph +krdmtuqjdwfoevnibixdclzsph +mrdmtuqjgwfouvnabixyclzfph +trdmtlqjgwfoevnabixyclzjph +trdmyuqjgwfozvnabixyclzsph +krdmtiqjgwroevnabixyclzspk +erdmtutjgwftevnabixyclzsph +krdwyuqjgwfoevnaaixyclzsph +krdmthqbgwfoevnabixyclksph +krdmttqjgwfoivnabixyclvsph +krdmtuqjgwfoefnabixyflgsph +khdmtuqjgwfoevnajixyvlzsph +krdmtuqvgwfoevnasixyclzspt +krdmtuqjgkwogvnabixyclzsph +krdmtuqjgwfoevnaboxpglzjph +kadmtuqjgwfoxvnabixyclziph +krdmtuqjfwfoevnabaxycbzsph +krdjtuqjgwfoevnabiryhlzsph +krdvtuqjgpfoevnabcxyclzsph +brdmtuqjgwfoevnafixyqlzsph +krdmtuqjgwfoevnavixxcllsph +krdhtuqjkwfoevfabixyclzsph +krdmtuqjgjfoevnawixyclzsuh +krddtuqjgwfoeqnabiwyclzsph +krhmtuqjgwfnevnabinyclzsph +kedmtuqjgzfmevnabixyclzsph +qrdmtuqjgwfoevntbixyclzxph +krdmtuqsgwfoevnabixvclzrph +scdmtuqjgwfoevnabixtclzsph +krymtuqjgjfolvnabixyclzsph +krdmtuqjgwfkevnablxyclzskh +krymtuqjswfoevnabixyclzvph +krdmtuqjhwfoevnabixycwzspd +krdmtuxjgwfoevnabyxyclzzph +krdmtlqjgwfovvnabilyclzsph +krdmtuqjgwfoevnaaijcclzsph +krdatrqjgwfokvnabixyclzsph +krdmtuqjgwfoevnaxifyclzkph +krddtuqjgwfoevnabixccozsph +krdmtuqngwfoevnabiyycxzsph +krdmtumdgwfoevnqbixyclzsph +krdmtuqjgwfoevnabixyxlmsch +krdmtudzgwfoevnabixtclzsph +krdmtuqjgwfoevnpbixyclhspl +krdmtqqjgwjoevnabexyclzsph +kydmtuqzgwfoevnabixyclwsph +krdmeucjgwqoevnabixyclzsph +krdmtuqjghfoevjabixyclzspp +krdmtuqjgjfwevnabixyclzskh +krdmkuhjgwfoevnabipyclzsph +krdytuqjgwfoevnabibyclztph +krdmtuqjgwfpevnabisyzlzsph +kmdmtgqjgwfsevnabixyclzsph +krdmtuqjgsfoevnabijyclzszh +krdmtuqjgwfoevnabivyclzuuh +krdstuqjgrfoevnabixyclzspu +jrdmtuqjgwfotvnabixyclzspj +krdmrumjgwfoevnabixeclzsph +krpmtusjgwfoevnabioyclzsph diff --git a/2018/inputs/20.txt b/2018/inputs/20.txt new file mode 100644 index 0000000..620f018 --- /dev/null +++ b/2018/inputs/20.txt @@ -0,0 +1 @@ +^ESEEEESSWNWSWSEESESENENNNW(SSWENN|)NENWWWWWNWNWWS(SWSEESE(SSWSWNWSSSESWWSSSSEEESWWSESSEENN(WSNE|)NENEEEEESSSEENNNNENEEENNWWS(WWNNNENWW(NENNNNNEEENWNNWWWWWWWSWNNNWNNEES(SENNNWNNWNNNWWNWSWNWNNENNEENNNWSWNNNWWNWWWSWWSEEEE(NWES|)SENESSS(EE|WNWSSSSE(NNESNWSS|)SWWNNNNNWN(E|WWWWNNWSWWSWWWWWNNESEENNEEE(SWWSNEEN|)NWWNWNNWWSESWSE(E|S(WWNNNNWNWWNNENNWNWNNNNWSSWWNENWWWNWSSSWSSENESEEEE(NWWWNWNE(WSESEEWWNWNE|)|SSE(SWSWNNNWSSWSSSWNWSWNNWNNN(NWSWWNENWWNWWNWWNNNESSEEES(W|ENNENNESENNWWNNWWNWNNNWWWSEESSWSSENESESE(N|SSWSWNW(S|NWN(EESEWNWW|)WWNNE(NWWNNE(SEEWWN|)NWWSWWWN(WSWSEEEEESSSE(SSSSWSSWNWSSWNWWWNENEE(SWEN|)ENE(S|NN(ESSNNW|)NWSWNWSWWSW(NNNEN(NNN(WSSSNNNE|)E|ES(SWEN|)EEEN(ESNW|)WW)|SE(SWSSSEEESWSSESSSENNNENEN(WWSWENEE|)EEESSWW(NEWS|)WSWSEENESSEEENNNW(SWSEWNEN|)NNE(SESEE(NWNWESES|)SSSWSW(NNNESNWSSS|)WSWSSWWNENWN(EE|WSSSWSWWNWWNWSW(NNNNNESSE(NNNWWNNE(NWES|)S|EEENE(SSSW(S|WN(W(WW|S)|E))|E))|SESWSSSESESEEEESWWWSSWWNENWNW(N|SSSSSSEEENN(WSWNSENE|)EEENWWNEEESSSSSENENNENNNNWWW(SEESSW(N|SS)|NNNWWSS(ENSW|)WNW(NW(S|WNENNESSE(S|NEEENEEEESWSWNWS(WWW|SSSEENN(WSNE|)EEN(W|NEENENEEEEESSWWN(WWSWSEE(SENEESENNENEESSW(N|SEENNNEEEE(SWWSEESWSWSSSSSSESSENNEESESSWSWWWSWNWSWNWSSWNWWWWWSWWNWNWSWWNNE(NWWW(NENNNENEENNNEE(NWWNWSSSSWNW(NEWS|)SS|ESWWSEESSWNWSSESWWNNWSSW(SEESES(W|EENN(NNEESWSSEEN(W|NEENESENENE(NWWWNWSS(EE|WSWNNWNNESE(NN(E(SEEES(ENN(N(E|NN)|WWW)|W)|NN)|WW(WSSSSE|N))|S))|SSWSSEE(NWES|)S(WWWWNWSW(NNEEES|WS(WNWSW(S|W)|EEE))|EEEN(N|E))))|W(S|W)))|N))|SWSESWSWNNWWSWNWWWN(WWSESWSESESSEEEEENESSWSESWSESSENESENNNNWSW(SEWN|)NNENENENN(W(WS(SW(S|NWWN(WSSWWNENWW(SS|N(WSNE|)E)|N))|E)|NNN)|ESEE(NWES|)SSWW(NEWS|)SESSSWNW(N(N(N|W)|E)|SSESSESSSSSWWNENNNWN(WWWWWSWSESWWWNWWWNNW(NEEEEES(WS(WWNE|ES)|ENN(ESNW|)NNWSWS(WNWSWWNNE(S|EENE(S|N(EESWENWW|)WWSWNW(NN(ESNW|)N|S)))|E))|SSSEESE(ESSWNWWW(NEWS|)SSESEESSENESESWWWWWW(SSSSSSSSEESESSEENESEENENENESSWSESSESWSEENESSWSEENEESENNENWNNENEEEEENWWNWNWWNWNNEENNWSWWWSESSSSSE(SWSWSESSWNW(S|NWNENNNE(NWWWW(NEENWNNWNWSSWNNWSSSES(ENENSWSW|)WWWWWNNNENEE(NWN(ENNW(NNNWS(S|WWN(WWNWESEE|)ENNNESES(W|EEEE(NWWWN(W|NESENNE(NWWSWN|S(ENSW|)S))|ESSESENENN(WSWNSENE|)NNNNESENEENWWNNENEEEENEENNNNESSEESSENNNWWNNWN(WWS(E|WSWSWWSWNWSWSW(SSWSESSENNNEN(W|NESENENES(SWEN|)ENNE(N|SS))|NNENEENESENENWN(EESNWW|)WSWWWSE(WNEEENSWWWSE|)))|EN(ESSSENESENEEEEESESENESENEESSENNNESSSESESWWSSENES(ENNNNENENE(NNNNWNN(WWNWWWSESE(SSEE(NNWSNESS|)ESWWWSSW(SE(ENEN(E|W)|S)|NNWWWSWWWWWNWNENNNNWNWW(NEENWWNEEESEESWS(WNSE|)ESSSW(SSES(EENNNW(S(W|S)|NENEE(N(EEE|NNWSWNNEENWN(WSWWNWN(EE(EE|S)|W(NEWS|)SWS(WNWSWNWWSWNW(NE(EEEEEE|N)|SSES(W|ENE(SE(N|S)|N)))|EESEESSS(S|EE)))|E))|SSW(N|SSENE(SENSWN|)N)))|W)|NN)|SESESSWSSWNNN(WSSSWWWN(WS|EENWW)|N|E)))|N)|EES(SSESWENWNN|)W)|SSWSWSEEE(SESEEN(EN(EES(EENWESWW|)S(SSSS|W(N|W))|W)|W)|N(W|N)))|SSWSWWSWSEEEE(N(NESE(E|N)|WW)|SSSWWNENWWSSSWSSESENN(W|NESSSSWWWNWWSESESSESENNWNEEESWSSESWSWWWSESENEENEN(NNWESS|)EEESSEEEENWWNW(S|NNEEEE(NNWWWS(EE|W)|SS(WNW(S|W)|EEN(EEENWNENN(WSNE|)NESENESEENNNEESWSSEEN(W|NEESENENENWNNWWNWNENESEENNENWWWS(ESNW|)WNWNEEENNESSEENWNENNENESSEESEESWSWSWNN(WSW(NN(N|EE)|SSSW(SSW(SS(WNNWWEESSE|)EEENNN(WSSWENNE|)EENESENNN(WSWWSWNN(SSENEEWWSWNN|)|NESSSEENWNENWNWNNNESSENNNWNWSWSSWNNWW(SEWN|)NNNWWNENNWNENESSEENNNW(SS|NNWWNENEEENNEESSW(SESSWSW(SSESSEENNW(S|N(W|NEES(ENENWNENEENWNWSWWW(NNENNWNWNEENNWSWWWSESSS(E(N|E)|WWWWSS(EENWESWW|)WSWSWWNNNWNNENNWSWWNWWWSWSWSWWSESEEN(NESESSENENE(NNWWNWS(SE(S|E)|W)|SSSE(SSWWWSESSSSSSWWWSEESENESSSENNNNESE(NNWNNNE(SSEWNN|)NENWNW(SWS(SSSW(S(S|E)|NNNN)|E)|NEESEESW(ENWWNWESEESW|))|EESWWSW(SSWWWSWS(E|WWSWWSWNNENWNNWNEENE(ESE(N|SE(ENWESW|)SWWS(E|W(S|NN(WSNE|)(N|E))))|NNWNWNEEENWNNENWNWWSWWSEEE(SWWS(EE|SWSESSE(E|SWWWSW(SSEE(N(N|W)|ESWWSESWSSWNNWSW(SSSEN(N|ESEESENENN(WSW(NNENNSSWSS|)W|ESSEE(SSESSENESSWWWNWN(NWSWS(E|WSS(WNNNEN(ENEEWWSW|)WWSWNW(SWS|NEE)|S))|E)|NENWW(NEWS|)S)))|N))|WNWSWNNEEE(EN(ESNW|)WWNNNEE(SWSEWNEN|)N(ESNW|)NWNNNWWWWWNWNNNEENNENWWSSWWSWWSESSWWWS(ESEEEN(NNN|ESSSEEENWWNEEEESSS(W(NN|WWWWSEEESSWWN(E|W(SSSSES(ENNWNEEENNN(SSSWWWEEENNN|)|WWW)|WNNNW(NEWS|)S)))|E)|WW)|W(W|NNEE(E|NNNNNEENESS(WWSEWNEE|)ENNNWWNWWSS(ENSW|)WNW(SSEWNN|)NWNNNEENNESESSS(WW(S|N(EN|WS))|ENNEENNWNWNWS(SESEWNWN|)WNNENNWNNESEENWNEESSESEENWNNNW(SS|WWWNNESEEEEEENNNEENNNNWWWN(EEEESSSSSENNENWNEN(EEESESSWWN(E|W(NEWS|)SSSSSSSENESSWWWWWSEEESESWSESENENWNEN(NEEESENNWWWNW(NWNENWW(NEEESESEEENWNNENESESW(W|SEEEEENNNENESSSSENENNESEESESESSENNNESESWSSWSEEENWNEESENNWWNEENNNESESWSSSESENNWNEESE(SWSESWWWSESWSESSSSWNNNWNNNN(WSSWN(N|WSSEESSSSSWSSEEN(N(NNN|ESENESE(NNWNENNW(NNNESS|S)|SSSSSSSWNNWSSSEESSSSSWNWSWWNENWWSWWNNWWNWNENWNWSSSWSWNNW(NNENNNWS(S|WNNEENENESENENESE(SSESSEEE(ENE(NWW(NEE|SWNWS)|S)|SSSSSES(SENNSSWN|)WWNNNWSSSW(NNNNEENWWWNWWWS(EES(SE(SSWNSENN|)N|W)|WNNN(WSSSSS(W|S)|EEE(NWES|)S(E|WW)))|S))|NNENWWNWNWSWSES(WS(WWWS(E|WWS(EE|WWNENEENNENENE(ENNWSWWSWWNWWWSWWWWWWSEEESWWWWSEEESENENEESS(W(N|WSEESWWWSWWWSESSWS(WWNEN(E|WWWWWSS(ENESE(S|N)|WNNWSSWS(SWWWWNENNNWSWNNWNNNESSEENWNNNNNWWSSWNN(NEENNNN(WWWSSENESSW(ENNWSWENESSW|)|NES(ENNN(WSWNSENE|)ESSSENNNNN(SSSSSWENNNNN|)|SSSSEESWSSESEESSWNW(WNSE|)SSS(WW|SES(WSESWENWNE|)ENNN(WSNE|)EES(EENNNENNWSWSWW(SEESNWWN|)NEN(WWNW(NNNWWEESSS|)(S|W)|ENEEESE(SWSESWWSSENESENNENE(SENE|NWWS)|NNWWWNNNESSEEE(N(ENWNENWNN(ENESENESEESWWSWSW(SSENESENN(W|EEENESENNESENNEE(NWNWNWSWSWS(EENEWSWW|)WW(N(WW|NNN|E)|S(SWWEEN|)EE)|SESWW(N|S(EEESEE(NWES|)S(SESENSWNWN|)WW|SWW(NEWS|)(S|WWWWWS)))))|NN(E|W))|WSWWN(WNSE|)E)|WW)|S)))|W))))|WWSWWS(WNNE(NWWSSNNEES|)E|SEESEN(N(WW|N)|E(EENNSSWW|)SSWWSW(SWSS(WNNSSE|)ESENENN(WSWENE|)E(NWES|)SESWSEE(E|SSSESWSWSWNN(WSSSES(EEESES(WSNE|)ENENEN(WWSWNN(E|W(WS(W|E)|NENNEE))|ESE(NN|EEE(N|S(WWS(WNWWEESE|)SSESW(W|SESWS(E|WW))|E))))|WWNWNE)|NNE(NWW(WW|N)|SS)))|NN))))|E)))|SENENNEN(W|ENESENESEE(NWES|)SWWS(WWN(WSWSESE(N|SS(ENSW|)WNWSWN(NEWS|)WWSS(SE(ENWN|SWS)|W))|E)|E))))|ENEENN(WNWS(SEWN|)WWW|E))|SSSW(N|W))))|E)|E(E|N))))|SSS(SWEN|)EEESESESESENN(WNWN(WNWESE|)E|ESE(N|SWSWSSWSSSWSWWNNE(S|NWNW(NENN(WSNE|)E(ESWSSE(NENSWS|)SS|N)|WSWWSESSSWSW(WWWSWNW(S|NNWNEESE(NN|S(W|ENEE(SW|EN))))|SESSSESWS(W|SSSENEESESESESSWSSESSENNN(W|NENNESESEEESWSWWWN(N|WSSEEESSSWWNENWWSSWWN(E|WNWWNWSSSSSWNWNNE(NNWSWSSWWSEESWSEE(N|SSSWSEESENNESEESENNWNEENENNESENN(WWWSWNWNWW(NEWS|)SSE(N|SE(N|E(E|SWWS(S|WNNWSW(N|S(E|S))))))|EEENWNNEN(W|ESE(NNNW(SWEN|)NNWNENE(SSS|NWWSWSSWNNNENNNENESE(NNWWNNWWSSS(ENNSSW|)SWSWWSWSW(SE(ENEE(S(S|W)|N(ENSW|)W)|SS)|WNNW(S|NEEE(SWSNEN|)NWNWWS(WSSWWNENNENENENEEENENNNEESEESESS(SE(SWEN|)NNNNNNNWNENNWWS(SSWWS(EES(E(S|N)|W)|WNNW(SWS(SSWS(E|SWWN(E|WSWS(WN(NENNW(NENSWS|)S|WSSSENE(WSWNNNSSSENE|))|E)))|E)|NEEE(SWEN|)NNEN(WWSSW|EESW)))|E)|WWWNN(ESEWNW|)W(SSSSSSWNW(SSEWNN|)WNEN(WWSWENEE|)E(S|N)|N))|E)))|SWWSEE))|SSSW(NNWESS|)SESSWWN(E|NWWSESSSSWSWNWNN(ESENNWW(EESSWNSENNWW|)|WSSSESEEESWWSWWWWWNWSSSWNNNWN(ENESEESEN(ESEWNW|)NNN|WSWWWSWNWNWSWSESSEN(N|EEESEEE(SEESENESSSENESESEESESESWSSWWSESESEENE(NNWSW(S|W|NNEENNW(S|NENNNNNWSSWNNWNNN(ESSENE(S|NWNWNN(ENE(NNWSW(S|N)|SS(S|W))|W))|WSWWSSEE(NWES|)SESWW(WN(E|WNW(S|NENWWWSE(WNEEESNWWWSE|)))|SEEEESW(W|S)))))|SSSSSWSSWSESE(SSSWNNWWSESWWWS(WNNNENWNNNESSES(SSWENN|)E(E|NNWNNENWNEN(WWSWSS(ENSW|)WNNNWWSSE(SSWSWWWNENWWWSSWSESEESESENESSS(ENNE(SS|NWNWWN(EEE(N(W|N)|S)|W(WWNNSSEE|)S))|WNWWS(E|WNN(NWSWNWN(WSSWSES(WWWWNEENNENWNNWSWWNNE(NNWWWNENENNNWSWWWNEENNWNENNNNEEESSEEESEENNW(NENNWWS(E|WNWN(EENESEESE(N|EESESSSESWWSEESWWSESSWNWWSESESESS(WWN(WSWNNWWNWNWWSSS(W(NNNNEEENNEN(WWSSWWNENN(WWW(NNESNWSS|)SE(SSWNSENN|)E|E)|ESSWSSEE(S(ESEWNW|)W|N(NNNEE(SWSEWNEN|)NNNN(ESSNNW|)NWWSSE(SSWNSENN|)N|W)))|W)|SSEENWNE(NWNSES|)ESSE(ESWWSW(NWW|SEEN)|NN))|E)|E(S(E|S)|NNN(W|NNESSEENE(NWNW(NNW(SSWENN|)NEESES(S|W|EENWN(E|NW(WNWSWNWNN(SSESENSWNWNN|)|S)))|SS)|ES(WSNE|)E)))))|WWNENWNNWWNNENNNNWNENESSEENEE(SSW(N|WWWSEESWS(EEESEN(EESWENWW|)NN(NNES|WWSE)|SW(W|NN)))|NWWW(S|NEENNENE(NNNWSSWNWSS(SWS(WNWNEENNW(WS(E|WSSWNW(NNE(S|E)|SSESWWNW(NENSWS|)SWWSWSSWSESWSSESSSESSSSESSEENWNNNEESENNN(EESWSSE(SWS(WSSSSWNN(NNN(WNSE|)E|WSSSSWWSESWSWWNWNENNNES(EENWNENWWSWNNWSSWSESSWNWNWWNEENWNNNNESSSE(S|NNEE(NWWNEENWNWWWNEEN(ESNW|)NWSWWWWNEENE(S|EENWNWNNWSWSS(E(E|N)|WNNW(SWSSSSE(NN(EE|N)|SESWWSSWNNWWWNWNN(EEENWN(WSWNSENE|)EE(NWES|)SSSWW(SEEEWWWN|)W|WSWSWWWNWSWSEEEEESSSENNE(NWNSES|)SSSSSWNNWSSWNNWSWWSSSWWWWSESWSESEEEENWWNW(NEESEENWNEESSSEESWSEESESESEENWNEEENNNENE(NWNWSWWSSWWNWSS(EEEE(NNEWSS|)SWWW(W|S)|WNNNWNN(W(WWWNE|SSSE)|ESENENNENN(ESSSWSS(ENE(ENESE(ENWNNWSWW(NNE(EENWN(WSNE|)ENE(NWES|)SES(WSSS|ENE)|S)|S)|S)|S)|WS(ESNW|)W)|NWN(WSSS(ENSW|)SS|E))))|SENESSSEN(ESSWWWNWSW(NNEEWWSS|)SWWSESESWSESENENWNN(NEESS(WNSE|)EESSEEEENWWWNNEN(W(WSWNSENE|)N|ESS(ENEESWSESWSEESWWWWN(E|WSWSWWNEN(E|WW(NNESNWSS|)WSSSSEESENN(WWNNSSEE|)ESSENNNESSENEN(ESESENEE(SSW(N|WSS(EEEN(WW|NEENNWSWN(SENESSNNWSWN|))|WWWWNN(ENESESWW(EENWNWESESWW|)|WSSWNWSWNWSWWWWWWWNENENESS(W|EN(ESENSWNW|)NNNWWWWSWNWSWWNENEENEE(NWWNN(ESENSWNW|)WSSSWWWNNESENNWWNE(NWNWWSWWNWWWWSSWWSWWWNNESENEENWNE(EEEEEE(ENWNSESW|)S|NWNNWWSESWSWWS(EEENSWWW|)WSSWSWSSESWSESESWWWSSWWNWWNNWSSSWWNNNE(SS|NWNENENNWWS(E|WS(E|SWWWWSSSESWSSES(ENN(ENWNENN(WSWNSENE|)ESSSSSEEES(WWWWNSEEEE|)EEEN(WWNEWSEE|)EEEES(EENENNW(SW(S|WN(WSNE|)E)|NEESSSS(W|ENESEEENEENWWNWNNEENWNEENNWNNW(NEESSENESSSW(SSWSEEESSEE(SEEN(W|ESE(EN(ENEEWWSW|)W|SSWNWSWWN(E|WSWNN(E|WW(SS(ENSW|)WW|NN(ESNW|)WW(SEWN|)W)))))|NWNN(E(E|S)|WN(WSNE|)ENNW(NNE(N|S)|S)))|N)|SSS(WSSWSWNWS(WWNENEENWWN(EEE(ENWESW|)SS|WSSWS(WNNN(W|NE(SS|NN))|S))|SEESWWSEESEN(SWNWWNSEESEN|))|E))))|WWW)|W)|WWWNENNNWWSS(ENSW|)WWNNWSSWSES(WWWWNENE(S|NWWSWSSWNWSWNNWSWNWNEENWWWWWSESSS(WNWWW(SEEWWN|)NNNENWNEENNNENNWNNWSW(SSSE(SSWNSENN|)N(E|N)|NNENNW(S|NENESSSSENENENNNWSW(S(S|E)|NWNWNW(NNNEESWSEES(W|ES(EEEEESWWWSESEEN(W|ESSSWWWSWW(SSESSENEENNW(W(SEWN|)W|NEESSSEESSSWSEESENEESWSE(S(S|WWWN(WSSWNNN(WWNWNEE(S|NENWWWS(E|WWSESSWS(EE(N|ESSE(SEWN|)NN)|WWNEN(E|WW(SSWSSS(WNSE|)E|NENE(NWN(E|NN(WSNE|)N)|S))))))|E)|E))|EEE(SS|ENWNENNNEEESWS(EENENWNEENNWWWNWNNNNNNWNENESSESENNWNNENNWWS(WWS(W(NNENN(WSWENE|)EES(WSNE|)ENESEESWSSS(SSSSSSESWWNWW(SESEEEENNESSSSENNNNNNNESENEEENENNNNNWWNWWSESWSSWWNNWSSWNW(SSEEES(WWWSSEE(SWW|NW)|ENEEE(SWWEEN|)ENWN(WS|ENW))|NENNNEESS(WNSE|)E(SS|NNENNEEEESWS(WWNEWSEE|)SEESESSSSW(NNN|SSWSSWWSWSWNW(NEENEE|SSESWSS(SSEESESSE(NNNWNNNW(NEN(NESESE(NNE(EENWNENENNNNNENWWNW(NEENWWW(W(NNNNNEENE(SSWWSSSEENN(WSNE|)ESES(W|SEEEE(SWSEESWWSEE(EENNW(N(EESE(SWEN|)N|W)|S)|SSWWWN(EE|NNNW(SSSSW(SE(SWSEWNEN|)EEEE|N)|N(WSWENE|)E)))|NWNW(SWNSEN|)NEENEE(NWES|)S(WSWENE|)EEE(SWEN|)E))|E(NWNNWNWWWWWWNNNESSENNEEE(SSWWNE|NWNNWSSWNNNENENEENNE(ENNWSWWWNNNWSWWNENEENN(WWNWNWSSES(WS(SWSSSEEEN(WWNSEE|)ESSS(ENESNWSW|)SWSWWNENENWWWWNWSWSWNNENEENNNWNW(NEN(W|EE(SWSES|NW))|SSWWWW(NENWESWS|)WSSWWSESSWWSSWSWNWN(WWSSE(N|ESESWSSSWNNNW(NEWS|)SSW(SESESS(ENNESENNWNEENEENWNEESESESEESENNEEE(SWSSW(WSWSWWSSESSEEESWSEE(NNESENNESSES(ENNWNNNN(EESWSEE(ENWN|SWW)|WSWS(WNN(E|N(WSSSS(WWNW(N(EE(S|N(N|W))|W)|S)|E)|NN))|E))|WWW)|SWWWNNWWNWSS(WWNENWW(NW(SWNWESEN|)NNNNEESSW(SEES(E(NNWNENENWN(EES(S|E)|WN(E|WWSS(WNSE|)E(ESNW|)N|N))|E)|W)|N)|S)|ESWSESEN(NN|EEEE)))|NN)|EENNWSWNWWS(E|WWNNNEEENN(WSWWWSWWWN(NENN(WSNE|)NNESE(SWSS(EN|SW)|EN(EENSWW|)W)|WWSES(WWSWS(SWEN|)E|EEEESS(SE|WNW)))|E(SSS(WWWSNEEE|)EE|E))))|WWN(NWWS(WNWSWWNNE(S|NEN(NNWSWNWSSE(E|S)|ESEESWWW(EEENWWEESWWW|)))|SE(SES(SSENSWNN|)W|N))|E))|N))|NESENNNE(SEWN|)NWW(W|NEEEEN)))|E)|EE)|EESE(NN|EE(E|SWSWWN(E|W(N|SSSENEEE(SSENEWSWNN|)N)))))|SSSWWS(ESWSEE(SWSEWNEN|)NEN(W|N)|W)))|EE))|W)|S)|SSESWSSS(ENNSSW|)W(S(SW(N|S(W(S|W)|E))|E)|N))|S)|SWSW(NN|S))|W)|SW(SEWN|)N)|S(WS(WNNW(SS|WN(NESE|WS))|S)|E))|WWWW(SWSSW|NENW))))))|NEENWWN(SEESWWEENWWN|))|W)|WSE(SSWNWSWNW(N|WSWSEE(N|SSWNWSSSESESSSENNNNWN(EENNN(WSSNNE|)ESESE(NNWESS|)SSWNW(N|SWSSEESES(EN(NWNWWEESES|)E(EE|S)|WWW(NEWS|)SESWS(E|SSWNNNWSWWWNENNW(S|NWNEE(NWWNW(SSS|NNESE(NNWNNE(S|N(WWSS(WNNWWWNEENNWSWWWW(SESENSWNWN|)WNENNWSWWNEN(EEESESWSEENNN(ESES(E(NNWNSESS|)SSES(ENSW|)W|W)|W)|NNWW(NEWS|)SESWSS)|S)|E))|S))|SE(N|SS(EE|S)))))))|W)))|E))|EE)|E)|SW(SESWENWN|)NN))))|NEN(EEE|N)))|W))|SS(S|E)))))|EE(NWNNSSES|)EE))|EEENWW))))))|E)|ES(WW|EE))))))|NWW(W|NNESENN(E|WWWNNNE(EN(E|WWWW(NENNE(E|NN)|W))|SS))))|W)))|W))|W)|N))|S)))|NENN(WSNE|)ES(ENEES(W|ENE(SSWS(WNSE|)S|EN(EE|N)))|S))))|S(ESNW|)W))|SSS))|EEE(NWES|)ESEESWW(EENWWNSEESWW|))|N)|WWS(WNW(NENWNNEEESSS(WNNWESSE|)ENNNNWWNNWNEESE(NN(ENNESE|WWWWSSW(N|SS(EENWESWW|)S(SSS|W)))|S(ESSNNW|)W)|SSS)|E))))|NNNEEEES(WSWNWS|EESS(EEEEE(SEWN|)NWNEN(WN(NW(SSSWW(SEEWWN|)NWN(W(S|W)|EE(NWES|)S)|N)|E)|E)|S)))|E)|E)|S)))))|S)|S)|EN(EESWENWW|)N)|E)|E)))|N)|ESE(SWSSWENNEN|)N))|EEEEE)|NNN))|NNWW(SEWN|)W)))))))))|S))|EE))))))))|W)))|W))|N)|NNNNWNN(ESNW|)WWS(ES(SSENSWNN|)W|WWWSWSW(SEENSWWN|)WNWNWSS(E|WNWNN(E(S|EEEES(ENEEEWWWSW|)(S|W))|WS(WNWW(S(SS|E)|WWWSWWSESSWNW(S|NNW(S|WN(WSWSWSW(SESNWN|)NW(S|NN(ESENEWSWNW|)W)|EEEE))))|S))|S))))|SS)|S)|WW))|W)|WWSWNWSSSWWNNN(ESSNNW|)WWSESSWWN(NNWSWWSEESSSEEEN(WW|ESS(WWWWSSESENN(ESSSWWSWNNWSSWNWWNNENENWNNN(ESE(S(W|SSSWSW)|N)|NWNWWSWNN(EEEE(EE|S)|WWWWSWNWSSWSEEEN(W|ENESE(SWWSSEEN(W|EESSSWWSESWWNWSWSWSESENESEENESSENESEN(NWWNW(NNE(NNE(S|NNNW(N|SS|WW))|S)|WW(WW|S))|EEESE(S(E|WWNWSSESWWSWNNENWWWWWWN(EE|WWSWNNWWSWSWNWNNWNEENNENNEENN(WSWNWNWSSWSWWNWNEE(S|ENNNN(WWSSS(ENNSSW|)WNWNWN(EESNWW|)WSWSEESWWWSWSWNNWSWNW(WWNNESEEEEE(ENN(E|WSWWN(WSWNWWWSS(NNEEESNWWWSS|)|E))|S)|SSEESSENESS(EENENEE(ESESES(ENN(W|E(SS|EN(W|N)))|SSWNW(SSSEEN(ESSSE(N|SENEEE(ESSSWSW(SEESW(W|SEEENNNW(NEENNN(EEEESSSSESWWWWSSSE(EEEEE(SEWN|)NNNNW(N(W|ENEE(SWSE|ENNWS))|SSWS(WWN(WSNE|)E|E))|SWW(N(WWSEWNEE|)NNNNENESENNWWNEE(WWSEESNWWNEE|)|SS))|W(WSSENSWNNE|)N)|SS|W))|WNENN(ESNW|)WSWWWW(S(ESENES|W)|N(NNWESS|)E))|N(W|N)))|W)|N(NWSWW(NENEWSWS|)WW|E)))|NWN(ENSW|)WWS(WS(S|E)|E))|WWSWWSSW(S(ESENNENW(ESWSSWENNENW|)|W)|N)))|EEES(ENSW|)S(WNWSNESE|)S))|EESWSSWWSSE(EN(ENEN(E(EENSWW|)S|W)|W)|SSWW(WSEWNE|)N(N|E)))))|N)))|N))))|W)|EESEENNEE(SWSEWNEN|)NNEE(SWEN|)NWWW(N|WWSES(ENSW|)WWWSEES(NWWNEEWWSEES|))))|E)))))))|S))|N))|N)))|N))|NN))|W))|SE(SWSEWNEN|)E)|W)))|NN(E|NW(W|SS)))|N)))|NN)|NN))|E))|W)))))))|W)))))|S)|WWS(E|SWNWN(WWSESESESSWS(WWNEN(WN(E|N)|E)|ES(W|S(EEN(EE(SWSNEN|)E|W)|S)))|E)))|SSW(WSEEWWNE|)N)|SSEE(NWES|)SWWSES)|SS))|EN(WN|ESE))|NN(EESWENWW|)N)|N))|N)))|EEENWNEESS(NNWWSEWNEESS|)))|S)|NNWNWWSS(E(E|N)|WWWWW(N(EENN(N|ESE(NEN|SW))|WWWNWWNNW(SWSES(EE|WSWW(SEWN|)N(ENW|WS))|NNESE(SSEWNN|)N))|S))))|N)|E)))))|S)))))|NWWNW(SWWEEN|)NENNNE)|EEEN(WW|E))))|N)|EE)|S))))|ESSEE(SWEN|)NN(WS|ES))|E|N))|S))))|W)|SWSESSWNWWSWSWS(WW(S|WWWNEEEENWNNEES(S|W|EN(EE|NWNWSW(W(SSSWWEENNN|)W|N))))|EEEEE(SSS|N(WW(W|N)|E))))|E)|E)|E)$ diff --git a/2018/inputs/21.txt b/2018/inputs/21.txt new file mode 100644 index 0000000..aaebbac --- /dev/null +++ b/2018/inputs/21.txt @@ -0,0 +1,32 @@ +#ip 2 +seti 123 0 4 +bani 4 456 4 +eqri 4 72 4 +addr 4 2 2 +seti 0 0 2 +seti 0 1 4 +bori 4 65536 1 +seti 16031208 7 4 +bani 1 255 3 +addr 4 3 4 +bani 4 16777215 4 +muli 4 65899 4 +bani 4 16777215 4 +gtir 256 1 3 +addr 3 2 2 +addi 2 1 2 +seti 27 3 2 +seti 0 9 3 +addi 3 1 5 +muli 5 256 5 +gtrr 5 1 5 +addr 5 2 2 +addi 2 1 2 +seti 25 7 2 +addi 3 1 3 +seti 17 4 2 +setr 3 1 1 +seti 7 5 2 +eqrr 4 0 3 +addr 3 2 2 +seti 5 1 2 diff --git a/2018/inputs/22.txt b/2018/inputs/22.txt new file mode 100644 index 0000000..e2e94a0 --- /dev/null +++ b/2018/inputs/22.txt @@ -0,0 +1,2 @@ +depth: 7863 +target: 14,760 diff --git a/2018/inputs/23.txt b/2018/inputs/23.txt new file mode 100644 index 0000000..306c4ad --- /dev/null +++ b/2018/inputs/23.txt @@ -0,0 +1,1000 @@ +pos=<61981295,70302690,50074583>, r=86817788 +pos=<-39574082,11593440,52034024>, r=86226353 +pos=<-22613800,41560771,22762338>, r=83067593 +pos=<-12414843,51978293,68300191>, r=85018769 +pos=<-12727191,34870716,52975971>, r=52899633 +pos=<-32063168,40924402,49558575>, r=74871596 +pos=<18752046,16372097,-9651854>, r=70068867 +pos=<3474631,29804741,98417262>, r=77072884 +pos=<18354169,57026789,74027645>, r=65025959 +pos=<22104105,74882695,61927007>, r=67031041 +pos=<-42133805,38530007,57591711>, r=90581205 +pos=<-47869746,22599340,42855147>, r=77956291 +pos=<-27020782,-4791281,34203354>, r=93149809 +pos=<-18487970,40655084,49627122>, r=61095611 +pos=<10137288,54171533,97007570>, r=93367254 +pos=<21836035,43430190,47217893>, r=78376026 +pos=<8216569,21003453,101684850>, r=78676489 +pos=<-40466865,34952266,70038151>, r=97782720 +pos=<72670731,-8427298,58419388>, r=97862747 +pos=<-26904810,19437248,39548346>, r=63460381 +pos=<-14862223,38537164,6158587>, r=88895667 +pos=<-4093645,28809183,65079634>, r=50307904 +pos=<-13276886,43613687,45971502>, r=55187766 +pos=<49089034,29003918,14560017>, r=57321614 +pos=<-13807521,-29104885,50131321>, r=99255387 +pos=<48476757,37188242,72540714>, r=62665037 +pos=<7140081,51751715,-8561127>, r=94827577 +pos=<-43249072,32737116,53752441>, r=82064216 +pos=<6641528,98591490,47271959>, r=91547386 +pos=<-23305462,10475650,56073326>, r=75115096 +pos=<6053316,21990329,84119652>, r=62287689 +pos=<7023331,60698763,57949984>, r=63950985 +pos=<-36608889,31399128,35446137>, r=74217136 +pos=<6817093,34966536,98116734>, r=78591704 +pos=<4957605,61740316,52702032>, r=61810336 +pos=<-2269508,-8851147,43341014>, r=63321024 +pos=<12839874,52090204,58609561>, r=50185956 +pos=<-24117273,33915884,49793440>, r=60152075 +pos=<74759590,28034712,42456610>, r=54126256 +pos=<-48197949,37668470,48713802>, r=86905688 +pos=<-465248,41562365,60498029>, r=54851108 +pos=<10694430,32208520,48027772>, r=61692668 +pos=<-8548512,14246214,83247198>, r=83761331 +pos=<43950964,33755026,90173201>, r=72338199 +pos=<-14628694,43441676,58236468>, r=68632319 +pos=<106381567,34503222,46141825>, r=91485627 +pos=<-42403687,53189612,46049581>, r=93968393 +pos=<3940021,35797440,82233626>, r=66416478 +pos=<-12215361,4082478,43661351>, r=60012674 +pos=<19860123,68466722,60165468>, r=61097501 +pos=<70777186,32758921,32118468>, r=65206073 +pos=<-38591125,46522298,54596946>, r=92035892 +pos=<22636563,105345403,45688673>, r=80723037 +pos=<-3951303,29434316,22353040>, r=52688125 +pos=<-176419819,31194464,52039201>, r=76587195 +pos=<-3596358,48726226,78390625>, r=83038642 +pos=<7182613,37282188,20126279>, r=51628082 +pos=<-25240363,51483969,55323702>, r=84373768 +pos=<21428319,64401806,57994375>, r=53293330 +pos=<-5939048,7790261,21935573>, r=71754303 +pos=<-14391272,30291007,70042112>, r=67049881 +pos=<-22323827,29920141,55916312>, r=60485891 +pos=<13475129,52193445,63897921>, r=54942071 +pos=<-3994272,15505795,89454649>, r=84155011 +pos=<475865,1537450,69193888>, r=73392255 +pos=<-10815135,44879964,69035166>, r=77056155 +pos=<11306358,28884419,64442081>, r=91273574 +pos=<14678811,33694651,48185622>, r=71901550 +pos=<3756099,71276526,21743645>, r=87431573 +pos=<40262582,59466852,61256380>, r=65445301 +pos=<11616060,70966185,64722364>, r=76397938 +pos=<3872060,39650278,107716165>, r=95819913 +pos=<9586133,45083261,78735554>, r=66558242 +pos=<77865670,42917012,73695024>, r=98936729 +pos=<-1745961,55327607,42088395>, r=56640112 +pos=<26855240,67981174,26878283>, r=61746856 +pos=<-14224458,28877026,31495228>, r=53261041 +pos=<15850501,66941649,70246547>, r=73663230 +pos=<-22483771,25856673,49504583>, r=52343508 +pos=<9442908,53159770,55875115>, r=51917541 +pos=<1959101,903989,50510107>, r=53859027 +pos=<7569188,-24881655,45995388>, r=69519533 +pos=<1336123,50534199,50773018>, r=52296589 +pos=<-6780305,30188574,97998637>, r=87293233 +pos=<-27347231,32710526,48539527>, r=60922750 +pos=<-54109318,45563567,46755290>, r=98753653 +pos=<-23931716,34591305,51177382>, r=62025865 +pos=<1842700,54313361,57870403>, r=62666497 +pos=<9906862,47176518,46588813>, r=49926624 +pos=<-5650338,36212767,99081721>, r=93270578 +pos=<-9210222,73861103,51071528>, r=86469031 +pos=<-48605170,28058111,39410284>, r=78908074 +pos=<6277738,31698726,83207681>, r=60954109 +pos=<5935953,25376812,52194560>, r=66482724 +pos=<-33349449,32090950,46515684>, r=64281651 +pos=<-1144497,68829923,72349587>, r=94649606 +pos=<68150356,106204720,129297951>, r=83514523 +pos=<8426203,98908672,49758875>, r=92566786 +pos=<16538168,48418035,65737293>, r=49942650 +pos=<19573131,82515397,58801909>, r=74069662 +pos=<98906639,46422007,45986912>, r=95774562 +pos=<12340098,62609442,59505078>, r=62099865 +pos=<-28251146,31055125,25461712>, r=75499853 +pos=<19758085,59632651,60443124>, r=52643379 +pos=<-63046046,25663836,40121278>, r=92801960 +pos=<-37359413,31532323,71313730>, r=92530910 +pos=<53387378,31226416,70902974>, r=59975761 +pos=<-111343725,90010574,65438544>, r=96905196 +pos=<39565178,36023094,48981621>, r=96285986 +pos=<-18425354,35959496,54078093>, r=60788536 +pos=<4117058,66844365,17924670>, r=86457430 +pos=<4823188,-14314294,64385895>, r=80088678 +pos=<20323219,61060408,10757887>, r=71634602 +pos=<89860271,38268711,51332073>, r=83920073 +pos=<6829746,30401653,100430131>, r=76327501 +pos=<-18163621,73955629,42658058>, r=91116552 +pos=<-9868198,28983545,82688052>, r=73865474 +pos=<-3955635,32776886,7789254>, r=70598099 +pos=<22115720,88382733,50485824>, r=69078561 +pos=<-25241164,31938266,56917737>, r=66422608 +pos=<14985873,-15753032,55823238>, r=62802267 +pos=<16643466,61628684,29386869>, r=57253552 +pos=<21580242,42328478,123256438>, r=96330398 +pos=<-25199672,13587085,61865724>, r=79689986 +pos=<25598120,-21677261,57401363>, r=63021973 +pos=<20683805,43416073,80207144>, r=55264851 +pos=<-12206963,28525784,76317729>, r=69375956 +pos=<66517337,40023722,63765750>, r=74765959 +pos=<21046583,32632182,66997632>, r=92540759 +pos=<-13138431,65411819,48286547>, r=79162230 +pos=<-33524737,76477821,155964131>, r=73103463 +pos=<-33331228,9961241,69359006>, r=98940886 +pos=<39564979,28572472,53811503>, r=61407169 +pos=<-48869811,21665479,51245298>, r=84661484 +pos=<-8710194,53780076,47547665>, r=62363657 +pos=<-7314943,55087956,46146524>, r=60875047 +pos=<-61837954,25859003,56641091>, r=98831768 +pos=<-5695240,58983811,70577156>, r=87581649 +pos=<-25981379,35101300,31842886>, r=70894580 +pos=<3669996,59130810,1907555>, r=95208068 +pos=<34776272,-4188188,70499131>, r=67808809 +pos=<-35530241,30475154,50076449>, r=68407314 +pos=<-8155622,43149031,72681791>, r=76311918 +pos=<6666752,64359993,46401448>, r=56420132 +pos=<14935236,11018971,47709423>, r=95072999 +pos=<-31457362,28416643,49636691>, r=61836519 +pos=<-16109927,48371152,51014763>, r=67821289 +pos=<42694611,33011663,86560963>, r=66726260 +pos=<10684191,49511278,21069239>, r=59412987 +pos=<-423180,40569321,15553431>, r=67093941 +pos=<-32350990,31916431,66781337>, r=83374335 +pos=<-40417062,33333028,20729982>, r=94675000 +pos=<-5784232,29640751,62496121>, r=50246685 +pos=<-15428974,17471422,52568175>, r=56737766 +pos=<-2932788,33823267,68046768>, r=57128261 +pos=<63579456,43455645,46047101>, r=57541191 +pos=<15403015,31974701,112979009>, r=81876224 +pos=<-24087841,19769551,56050682>, r=66580826 +pos=<-11649390,82772147,39945831>, r=96130620 +pos=<20266288,41030544,49627298>, r=52471876 +pos=<15271488,104802139,55747920>, r=97604129 +pos=<-17294454,29095937,38121063>, r=49924113 +pos=<-28047432,15028531,34900811>, r=73659132 +pos=<63036558,50019938,71871561>, r=89387198 +pos=<-34801957,36642230,53036734>, r=76806612 +pos=<-38144076,30407351,68440798>, r=89317810 +pos=<3512495,54767308,49076598>, r=52656960 +pos=<14274088,34274498,46377106>, r=89548213 +pos=<39329258,25136254,46456590>, r=73770931 +pos=<-43496380,31317940,30852295>, r=85616814 +pos=<14184631,31298574,54769039>, r=52386260 +pos=<80496193,20583845,74488856>, r=92746549 +pos=<-23389071,63823214,32693625>, r=96173548 +pos=<-25690209,44737890,68493032>, r=91246752 +pos=<-27606431,29594954,78055471>, r=87582356 +pos=<72441600,37663099,5449732>, r=98443349 +pos=<64033149,70075201,56633740>, r=95201164 +pos=<-41252112,41584295,58764742>, r=93926622 +pos=<-12824950,60182885,70449830>, r=95783330 +pos=<63858499,1902299,56897189>, r=77198605 +pos=<-35302433,28371559,42263514>, r=63065421 +pos=<-50193553,13029004,178032706>, r=87155339 +pos=<-10241339,30475433,65035094>, r=58077303 +pos=<27176667,88255399,39199151>, r=70021298 +pos=<3789738,63200642,58556644>, r=70293009 +pos=<-29026962,17065408,63626804>, r=81800634 +pos=<-15528112,28599049,55171449>, r=51624044 +pos=<67553889,-12734884,46684710>, r=85318716 +pos=<-22058789,25579659,47800035>, r=50491043 +pos=<65502868,77153034,48367762>, r=95482653 +pos=<52012555,29111973,69892338>, r=55475892 +pos=<7094796,39275693,83735416>, r=68242166 +pos=<1860284,40455320,92877446>, r=83797940 +pos=<11928924,-2446863,70048662>, r=66778312 +pos=<7667696,94196419,41409153>, r=86774357 +pos=<-47571004,37469854,46817463>, r=84183789 +pos=<-4156736,84010739,52365610>, r=92858630 +pos=<6056924,12888978,84519517>, r=71785287 +pos=<-47345906,30387796,45986301>, r=76045882 +pos=<-14305750,38815805,53464135>, r=58911123 +pos=<-5509681,53176769,46879448>, r=57891332 +pos=<-12499446,35923605,56390435>, r=57139055 +pos=<-52764985,37485922,49356853>, r=91933283 +pos=<-995676,157395073,-3073485>, r=52828911 +pos=<20007537,18034710,53163539>, r=53689323 +pos=<14489164,16396768,90904833>, r=66230860 +pos=<-56656961,29846250,59765242>, r=98593988 +pos=<12580077,72518760,77049199>, r=89313340 +pos=<100504676,32770164,49001641>, r=86735485 +pos=<56363428,40982042,51325603>, r=53130348 +pos=<67579027,45292106,26873551>, r=79786057 +pos=<26991023,51464352,68172728>, r=51087111 +pos=<-2477721,38040811,90549029>, r=83393046 +pos=<39812282,49420172,27946843>, r=55074069 +pos=<-7592987,58715561,48320434>, r=66954427 +pos=<7777052,28459937,51985707>, r=53419415 +pos=<-34825568,30793001,25736210>, r=81537269 +pos=<-24303136,54965408,48394944>, r=79988927 +pos=<-23117889,8738217,68644161>, r=89235517 +pos=<-25024083,8306905,47947646>, r=70876621 +pos=<2007442,56985136,59636415>, r=66939562 +pos=<-13687550,71578246,57121637>, r=94712935 +pos=<-16345760,32983233,89061217>, r=90715694 +pos=<86368374,35824210,61445425>, r=88097056 +pos=<-35743614,53334234,57645839>, r=99049305 +pos=<-15191744,62377081,28606960>, r=90616727 +pos=<15180924,74088799,62177344>, r=73410680 +pos=<87747671,31399471,31905651>, r=81030076 +pos=<490300,35168974,87629502>, r=74633619 +pos=<-7639730,47107985,53037366>, r=60110529 +pos=<-15154000,47565888,46724248>, r=61769578 +pos=<-15930553,8949295,49890450>, r=63083820 +pos=<-2085646,59550216,190147611>, r=69262241 +pos=<7225777,50890764,62861738>, r=58852281 +pos=<90275849,20142660,46920592>, r=75399045 +pos=<-26764544,42182428,46746825>, r=68019674 +pos=<76321467,29233298,55996378>, r=66010239 +pos=<-72399950,54572749,137176788>, r=75623903 +pos=<20511710,69381130,54777605>, r=55972482 +pos=<11171812,-1838585,60251989>, r=57130513 +pos=<-15322219,34977106,95397324>, r=98022178 +pos=<45186029,75515109,54316351>, r=79476635 +pos=<-33243023,32685580,54621141>, r=72875433 +pos=<-61584462,35077699,48778369>, r=97765970 +pos=<-2080973,32701858,77315532>, r=64423903 +pos=<-28378799,39591108,22227847>, r=87396852 +pos=<-8099746,62641467,55946146>, r=79012806 +pos=<-24720179,45274695,48132554>, r=70452861 +pos=<20784250,45013508,95099754>, r=71654519 +pos=<-30064753,33988072,46097252>, r=62475758 +pos=<34563348,30488217,55672227>, r=86287854 +pos=<-16742541,7677207,74209817>, r=89487059 +pos=<48717911,60141573,64839376>, r=78157946 +pos=<11980231,77201897,12503508>, r=94373076 +pos=<-35767666,29757894,59267775>, r=77118779 +pos=<-22126819,32362172,682297>, r=95461509 +pos=<-20183006,18654168,80542091>, r=88282618 +pos=<29158741,90530365,43109268>, r=70368234 +pos=<78589607,47357015,57145573>, r=87551217 +pos=<53822697,51713673,83991488>, r=93986944 +pos=<-37287747,28688663,72807970>, r=91110215 +pos=<13542941,37989744,51992083>, r=61754737 +pos=<14525371,30291586,55624740>, r=74352172 +pos=<65594982,25847880,72811378>, r=70903881 +pos=<85028254,32319009,59775298>, r=81581589 +pos=<-47952231,24568531,49936283>, r=79531659 +pos=<-21321958,21913518,49475661>, r=55095834 +pos=<-48453939,34233126,49830769>, r=84843339 +pos=<99391685,35202974,43142729>, r=85240537 +pos=<22710331,34170304,55092906>, r=91207796 +pos=<-12135705,32243191,63938331>, r=60642766 +pos=<-12338157,43480193,54115729>, r=62259632 +pos=<8622864,24881999,3805702>, r=58230495 +pos=<34000374,4364405,71395390>, r=59376643 +pos=<-19712623,50327429,47038637>, r=69404671 +pos=<-8596487,17062414,87164926>, r=84910663 +pos=<-18913938,45008114,51843283>, r=68090880 +pos=<19472967,181579393,106030809>, r=56142937 +pos=<-17173370,-3226764,55066991>, r=81678816 +pos=<63850431,62835473,23871657>, r=96602589 +pos=<-3798894,30299579,101412001>, r=87836232 +pos=<9068586,62089120,57368844>, r=62714847 +pos=<-22474207,29499886,47923819>, r=52223751 +pos=<-45651602,35036414,46323892>, r=79337438 +pos=<-12419250,32111741,56514558>, r=53370983 +pos=<12664542,52854651,103268523>, r=95784065 +pos=<22357114,12328694,108875611>, r=80401468 +pos=<-6746842,50055566,49180574>, r=58308458 +pos=<-27320265,33686937,48286622>, r=61619350 +pos=<-5359976,29458721,92619986>, r=79764181 +pos=<10052919,30248699,46342959>, r=64500134 +pos=<31603672,24458394,109318746>, r=74809324 +pos=<15363324,39635782,101274262>, r=77872183 +pos=<13846270,53578231,29556061>, r=51830690 +pos=<-15354477,46149883,46658194>, r=60488156 +pos=<-569362,85626876,46006904>, r=84528844 +pos=<10749296,42284246,82711135>, r=66571646 +pos=<-14856420,53289609,77345425>, r=97817094 +pos=<-23825436,15929136,64937891>, r=79045870 +pos=<89568342,30383137,46009564>, r=70420359 +pos=<13145554,32649278,85217834>, r=57047183 +pos=<554467,16643477,85598183>, r=74612189 +pos=<36666635,41828463,88364574>, r=71318747 +pos=<12602990,89529451,67821002>, r=97072935 +pos=<-33112360,18329619,59694200>, r=80688742 +pos=<-15561603,38236853,67667639>, r=73791835 +pos=<3519076,58523179,5256274>, r=91402635 +pos=<37058015,73816180,6497217>, r=98165326 +pos=<-485820,34664283,76480969>, r=63956703 +pos=<8046540,50222182,60417372>, r=54918488 +pos=<6698732,2095928,57478145>, r=54895175 +pos=<-110267625,103715108,49404770>, r=83596582 +pos=<14488717,37517183,47868787>, r=90880734 +pos=<11594929,31481958,92334208>, r=64546675 +pos=<13142664,33433973,51871828>, r=78783673 +pos=<14725843,21079396,84588725>, r=54995145 +pos=<17991922,28746415,53178977>, r=62665596 +pos=<21345476,109893878,54658351>, r=95532225 +pos=<99514509,32213492,45962288>, r=82149323 +pos=<37772543,40405568,108402968>, r=91040181 +pos=<16477866,1889108,-9755558>, r=86930037 +pos=<6066766,45074819,93307079>, r=84640752 +pos=<63259627,39790194,63298460>, r=70807277 +pos=<85870661,25697065,48142683>, r=66661876 +pos=<-20063299,13270466,81943036>, r=94947530 +pos=<9219021,14187810,110350611>, r=93155487 +pos=<11396690,79601451,29059476>, r=80800086 +pos=<-5992626,63895408,63403216>, r=85617223 +pos=<13745746,56178190,15154849>, r=68932414 +pos=<-19200598,41415603,54301128>, r=67242872 +pos=<66801369,67709049,33790327>, r=94508881 +pos=<-58054899,31429373,50412427>, r=92222250 +pos=<17725131,19747008,101361033>, r=70100661 +pos=<16315702,21937157,109577476>, r=77536345 +pos=<-21450279,31429149,47689387>, r=52894343 +pos=<16503867,46780903,71008828>, r=53611297 +pos=<-10617311,71781674,53581209>, r=88305651 +pos=<-18369624,34464166,58808640>, r=63968022 +pos=<-44338154,47516775,49329347>, r=93509756 +pos=<7546939,23561808,74615854>, r=49718921 +pos=<-23553075,43233473,30179868>, r=78262286 +pos=<-33728549,33419608,75400040>, r=94873708 +pos=<4130401,-415851,60422323>, r=62919529 +pos=<12199308,42656684,46658363>, r=62914010 +pos=<-10823045,40017720,87358982>, r=90525236 +pos=<54855928,43498518,54679995>, r=57493498 +pos=<12261573,29515175,45893575>, r=97366173 +pos=<15817533,48376146,72425161>, r=57309456 +pos=<22499943,43484899,49303866>, r=84870164 +pos=<15087449,40820405,15442472>, r=51945357 +pos=<2380830,39189079,87564730>, r=76698440 +pos=<10292232,61644825,58639264>, r=62317309 +pos=<-25063352,29824290,49726684>, r=56939825 +pos=<9247300,60592893,82851862>, r=86522910 +pos=<34974237,51631378,71206261>, r=62271044 +pos=<11115341,39008866,88216499>, r=68435471 +pos=<-47347839,33255463,54507917>, r=87436830 +pos=<-12385471,35476634,66586332>, r=66774052 +pos=<40297014,43609070,76102045>, r=64467152 +pos=<-25028316,48459326,70188306>, r=96001387 +pos=<29716238,95743100,36047260>, r=83200834 +pos=<-2195894,57161709,59974579>, r=71657615 +pos=<-34897564,36092514,37195303>, r=75449626 +pos=<-34350080,30930206,62762967>, r=80368703 +pos=<-13299160,-1305686,52546724>, r=73363335 +pos=<74203994,40071747,39943051>, r=68121068 +pos=<-30255218,53252625,55149209>, r=90982504 +pos=<-23708755,36047177,30518158>, r=70892646 +pos=<-42225041,28551593,47086408>, r=70188476 +pos=<45093813,91953991,40089158>, r=90747011 +pos=<20989497,-9578662,65146013>, r=59947021 +pos=<-9469151,9360043,19787978>, r=75862353 +pos=<-10455182,76182076,47046337>, r=86009032 +pos=<1489674,30920418,49075947>, r=50871653 +pos=<-1805815,40895592,59548754>, r=54575822 +pos=<22434664,50411195,76723826>, r=57025799 +pos=<1351173,-35240030,57415985>, r=97516622 +pos=<-32995557,45695405,31582059>, r=88763841 +pos=<96147879,48598772,48672050>, r=97877850 +pos=<71556712,165083816,80525352>, r=61212474 +pos=<-26738516,51821211,51973287>, r=82858872 +pos=<-45126452,24625563,45768892>, r=72481504 +pos=<-1724534,91435747,47738636>, r=93224354 +pos=<-42642617,17009143,50075464>, r=81920769 +pos=<52222152,55156460,54199932>, r=66037534 +pos=<8639285,85433958,47459393>, r=76579513 +pos=<10141717,61817092,48597374>, r=52598556 +pos=<47916267,47143215,50290112>, r=49808644 +pos=<-1999143,50275699,76700962>, r=81301257 +pos=<-41681257,20679616,56340422>, r=83553725 +pos=<35884408,41646080,79776061>, r=61765620 +pos=<4301038,52856724,21630776>, r=68579717 +pos=<-40960612,30439627,37255922>, r=75799466 +pos=<35444048,43762938,84706440>, r=68372926 +pos=<79975658,29137911,50197120>, r=63769730 +pos=<93007,44307904,61961116>, r=58501565 +pos=<-32671755,39076539,66101849>, r=90175907 +pos=<-19991034,51969552,46041742>, r=70328104 +pos=<-35314188,37602800,46861313>, r=72103772 +pos=<37201145,71666894,82972323>, r=96299533 +pos=<-49234235,28079826,57132180>, r=86771712 +pos=<8312877,40022919,72604965>, r=56640475 +pos=<39181205,52790049,92153926>, r=88584204 +pos=<7068698,47606987,62510305>, r=55374127 +pos=<30603349,56814294,106942634>, r=98819430 +pos=<16115552,28332758,35601360>, r=54887656 +pos=<10074393,95989908,47950308>, r=86191298 +pos=<-5591354,49710053,47446079>, r=55073040 +pos=<-16059874,70092354,52417407>, r=90895487 +pos=<-3286599,20110685,83441267>, r=72828890 +pos=<-6936335,22574502,22140566>, r=57762340 +pos=<32992478,36116750,76761537>, r=50329801 +pos=<-89483882,3641127,125934475>, r=84985845 +pos=<45083402,48971622,84039680>, r=82553733 +pos=<16543763,-12232511,59927146>, r=61828172 +pos=<-128930120,71482570,52773218>, r=59057806 +pos=<-3321066,36249470,10553454>, r=70672189 +pos=<11035114,-4452527,60224262>, r=59853336 +pos=<-26291008,49849603,66835908>, r=95302073 +pos=<7937807,81400916,47819246>, r=73607886 +pos=<16576233,48187487,42040402>, r=56973312 +pos=<4344158,75290424,35788694>, r=76812485 +pos=<32189900,-55403075,49857150>, r=95795351 +pos=<17696418,36185949,87820170>, r=58635317 +pos=<777488,12020182,61326632>, r=54740630 +pos=<33863194,35023084,109647702>, r=82992971 +pos=<27201238,50703815,113905343>, r=96269385 +pos=<13342983,51362786,14113529>, r=65561106 +pos=<-3406344,1514525,71500197>, r=79603699 +pos=<-4003952,88211664,52599168>, r=97140440 +pos=<7364870,66805533,30929588>, r=70166122 +pos=<4337235,69741240,49137686>, r=66867686 +pos=<39289283,41543331,80086140>, r=65377837 +pos=<31061019,37187231,96617615>, r=69325024 +pos=<12227872,90873558,49623164>, r=80594302 +pos=<-29205869,34879980,48574906>, r=64986227 +pos=<-23428908,25034353,70988758>, r=75595080 +pos=<31236415,75651801,72043812>, r=83391270 +pos=<-35663336,33550704,50545521>, r=72085007 +pos=<-25373194,33271630,48939058>, r=59909386 +pos=<81186014,21770112,48774152>, r=66535373 +pos=<-36266473,21205391,64408172>, r=85681063 +pos=<46509791,41930052,-8736829>, r=90965014 +pos=<-22028107,15234691,51487555>, r=64492638 +pos=<-20542339,31539802,48757530>, r=53165383 +pos=<13662571,56928981,15523678>, r=69397563 +pos=<-12746344,18867316,85938166>, r=86028894 +pos=<-301007,47558794,60352290>, r=60537813 +pos=<32207624,60299805,78729522>, r=75695968 +pos=<100081770,31328053,46754080>, r=82623316 +pos=<-48070787,30652729,47098499>, r=78147703 +pos=<3499835,47702960,54008261>, r=50536940 +pos=<-30212070,27990135,63986849>, r=74514607 +pos=<-15832151,28224015,56445561>, r=52827166 +pos=<-67978767,28737500,46365512>, r=95407212 +pos=<-30015019,22627881,66498575>, r=80097431 +pos=<-3376964,87518399,46889764>, r=90110663 +pos=<-12133745,41888151,15297059>, r=80379652 +pos=<-3430750,43859378,-4475364>, r=93420295 +pos=<10612582,58698878,71450281>, r=71862044 +pos=<-16853417,30239412,55512427>, r=54930714 +pos=<9856655,-15034177,76105296>, r=87495006 +pos=<19700487,14896792,94233323>, r=65848189 +pos=<90908533,40366432,47407308>, r=83141710 +pos=<53053613,45815347,47231085>, r=50559042 +pos=<91606120,30241005,62870344>, r=89176478 +pos=<6549177,28253488,45947118>, r=89716871 +pos=<-54966251,31984766,51327953>, r=90604410 +pos=<11739879,47302011,70593259>, r=58480946 +pos=<17782015,-43385757,45900297>, r=77715722 +pos=<-22321136,33175591,26785779>, r=70365922 +pos=<7447288,64317364,46803776>, r=55999602 +pos=<7212096,101522192,49782085>, r=96417911 +pos=<9756698,57513943,50726200>, r=50809212 +pos=<53938302,42703477,85380074>, r=86480889 +pos=<6127018,32634301,81765609>, r=60598446 +pos=<16024259,75089269,42148970>, r=58570841 +pos=<-14467950,30833664,53148474>, r=50775521 +pos=<1055620,-8213227,49647151>, r=63016576 +pos=<20109959,34289334,98011242>, r=64516119 +pos=<-51406886,30261849,39781808>, r=83541835 +pos=<21609187,48166640,103039225>, r=81922186 +pos=<-37318020,42076555,46223326>, r=77943551 +pos=<-9802864,50149053,57309602>, r=69587023 +pos=<8892924,30956296,4508427>, r=59209772 +pos=<17951962,38815438,50096954>, r=68485096 +pos=<12306030,97501425,46533603>, r=84054466 +pos=<-37463875,31083117,49553934>, r=70426366 +pos=<92230728,52683980,47015111>, r=96388808 +pos=<9364608,56647782,54993450>, r=54602057 +pos=<8684942,36838535,105538060>, r=86017275 +pos=<-35827611,42789189,57956518>, r=88898907 +pos=<5807845,31720781,7757680>, r=59810369 +pos=<-25365859,48253374,51239130>, r=77183993 +pos=<-13706311,23188045,2328735>, r=83730603 +pos=<-1053434,40958215,58697392>, r=53034540 +pos=<16686564,43884661,76779893>, r=56303739 +pos=<94046858,44171067,48044994>, r=90722205 +pos=<-59177933,25088148,47504944>, r=87806389 +pos=<-18654288,54793837,56331529>, r=82105172 +pos=<113519092,134203172,41554166>, r=95154840 +pos=<9436438,34715386,46078979>, r=73810378 +pos=<49732913,61362619,75247356>, r=90801939 +pos=<-54495041,22320842,50939618>, r=89325794 +pos=<12427539,17900057,11259909>, r=53954136 +pos=<16888421,45562882,95425764>, r=76425888 +pos=<-13394846,17877372,48322242>, r=50051600 +pos=<-20925432,28703245,52084455>, r=54038872 +pos=<8561924,38380609,101695915>, r=83840427 +pos=<76633366,35686884,48280680>, r=65060182 +pos=<15355031,32838431,53406732>, r=83822095 +pos=<-22241568,21612015,21308708>, r=74861862 +pos=<-45540364,39478825,56854957>, r=94199599 +pos=<-130761639,-7225545,18556230>, r=71625415 +pos=<12371981,60358241,50483820>, r=50795545 +pos=<-52881118,38556375,50525246>, r=94288177 +pos=<-5508845,44982595,39309821>, r=52836406 +pos=<-12223578,42705080,48054452>, r=55308618 +pos=<19782229,-391087,65138940>, r=51959480 +pos=<11688897,65712575,56641017>, r=62990663 +pos=<26728983,4877916,77607591>, r=57803924 +pos=<-66749809,31885857,41453884>, r=98836603 +pos=<12947494,40474371,72186292>, r=52038612 +pos=<22710949,73206326,90156950>, r=92977765 +pos=<21418285,58754538,74497516>, r=64159328 +pos=<-14006029,39388620,45791459>, r=51511854 +pos=<32331392,-9548718,53912995>, r=54138363 +pos=<-11103143,48665873,60597818>, r=72692378 +pos=<8404016,40264319,-15387292>, r=88902405 +pos=<-60697351,19761606,51535474>, r=98682907 +pos=<113332017,31654847,49314512>, r=98760760 +pos=<-17968649,23774520,26514627>, r=63220547 +pos=<-7891448,38548696,51246202>, r=50011819 +pos=<-36243928,28580831,31232834>, r=75246710 +pos=<2236746,78152395,33336820>, r=84233689 +pos=<-42646767,27988371,50996303>, r=73957310 +pos=<-12975938,19343337,62716304>, r=62560618 +pos=<-6698310,59281250,50138827>, r=68443906 +pos=<-29169469,6610144,55165008>, r=83936144 +pos=<-859099,48228088,68790664>, r=70203324 +pos=<-53259426,43091307,49454062>, r=98130240 +pos=<40051035,15273208,52961854>, r=55405641 +pos=<8599969,22173989,57555102>, r=96158345 +pos=<11561358,34996323,107452493>, r=83213190 +pos=<12971841,75769901,53455514>, r=68579059 +pos=<-24609077,31137632,12599716>, r=84801836 +pos=<39964941,58818274,67271078>, r=70513393 +pos=<11590874,44091058,16246818>, r=57908243 +pos=<11534010,42492557,73281128>, r=56565109 +pos=<46029692,44356665,33034407>, r=51140346 +pos=<230818789,28332006,48666836>, r=77009932 +pos=<-49307134,28877489,51162598>, r=81672730 +pos=<-24858611,61344602,49583599>, r=88112245 +pos=<-33971422,31026034,46645662>, r=63968617 +pos=<-14920621,60364341,48024490>, r=75635084 +pos=<-18886432,44383739,46645651>, r=62241356 +pos=<63367787,57050728,56716295>, r=81594314 +pos=<-29235501,30020585,46865414>, r=58446946 +pos=<-1116549,51739608,46803263>, r=51985095 +pos=<-12898335,8922965,49532990>, r=59720175 +pos=<11377440,35121435,54012286>, r=63237886 +pos=<-28362629,38084006,47961632>, r=66733755 +pos=<-32732759,53759806,34185847>, r=93961530 +pos=<-2049132,35100887,26872869>, r=51932182 +pos=<10307391,63192491,78308824>, r=83519668 +pos=<-11173886,50879581,47031969>, r=61411041 +pos=<-6714487,69428860,48945046>, r=77413940 +pos=<-35145310,126288277,94537390>, r=86514887 +pos=<15372059,77344628,57152598>, r=71450857 +pos=<-5534049,28501573,47802916>, r=70800310 +pos=<30282369,-27855631,57777471>, r=74260879 +pos=<27578388,34577846,94631718>, r=61246950 +pos=<5377307,28529784,46392652>, r=82994735 +pos=<-9288964,40034367,85892017>, r=87541479 +pos=<32663376,50111633,96347262>, r=83581281 +pos=<64590061,24883190,74402048>, r=72454312 +pos=<6011059,52895297,-9651139>, r=98190405 +pos=<-40075559,29164760,46796031>, r=68361786 +pos=<-27324257,33280398,58797836>, r=71727947 +pos=<65478625,51242475,73962244>, r=95142344 +pos=<-8161052,44514515,51881665>, r=56882708 +pos=<37117480,70516429,65453164>, r=77546136 +pos=<-66556175,24793456,46807708>, r=94782274 +pos=<6745175,-9697218,46249405>, r=55413236 +pos=<-15842202,54067556,49741202>, r=71976478 +pos=<-26234670,32761687,62384539>, r=73706383 +pos=<27047080,45210798,96262259>, r=72979567 +pos=<-54875381,19475504,41999639>, r=88941400 +pos=<15588049,51830394,45712337>, r=63164637 +pos=<78521098,9084198,53510654>, r=81292772 +pos=<-35117158,30884180,40930824>, r=66725315 +pos=<38517388,31310367,53377273>, r=93263507 +pos=<-34824848,35863485,57039123>, r=80052924 +pos=<87999262,21593229,36952685>, r=77127999 +pos=<-14970039,39281480,31602555>, r=64303877 +pos=<30996868,32710257,-7944148>, r=65439616 +pos=<-46544578,32730823,48455778>, r=80056612 +pos=<-25655223,54235827,24268664>, r=97277174 +pos=<-31661104,34739101,46810221>, r=65535871 +pos=<-15725105,33623089,58648908>, r=60322582 +pos=<30366481,48524611,105759957>, r=89110268 +pos=<7896511,67058144,60224279>, r=71711348 +pos=<8886133,36820409,69879921>, r=50139913 +pos=<-35009499,24967338,48346229>, r=64600051 +pos=<12236743,61232811,36406256>, r=54244674 +pos=<32133015,71147471,65672434>, r=73411928 +pos=<-4312430,48491142,58819757>, r=63948774 +pos=<-11255504,48618070,49019953>, r=61218979 +pos=<-36126448,28661597,45905741>, r=63019487 +pos=<6995492,-14641677,39110487>, r=64076982 +pos=<-494882,62507397,74981307>, r=90309172 +pos=<21658971,20515757,32538766>, r=68078733 +pos=<-42721200,2165630,50987236>, r=97754561 +pos=<-46441522,14810192,60365689>, r=98209160 +pos=<48051150,31166319,50307623>, r=70921992 +pos=<28821739,29694631,-1122960>, r=53427671 +pos=<-54273229,34572094,50463893>, r=91634895 +pos=<14673784,34863932,82993530>, r=55509157 +pos=<-32934723,17649588,51138183>, r=72635067 +pos=<-50994378,41060824,52259311>, r=96639953 +pos=<-13412903,29052830,62027839>, r=56819094 +pos=<16028543,72922360,86313287>, r=95532757 +pos=<-29190239,30088199,43593943>, r=57339282 +pos=<-67676350,28809916,49909454>, r=98721154 +pos=<-43374507,39597274,53913745>, r=89211024 +pos=<-27366900,30364601,50115222>, r=60172177 +pos=<16917628,52399768,64291470>, r=52099066 +pos=<41279617,21014635,54307699>, r=93725431 +pos=<1365818,19740622,70504983>, r=55610202 +pos=<-54647289,29012271,49857475>, r=85842468 +pos=<44221414,66917783,53886884>, r=69485079 +pos=<-9940873,70529264,26788845>, r=95336159 +pos=<-2891536,43027095,81243592>, r=79487809 +pos=<16856578,70770998,65638794>, r=71878974 +pos=<48647431,57474901,3221288>, r=96689472 +pos=<18398962,37387340,106423442>, r=77737407 +pos=<6875506,40281303,93455690>, r=79187050 +pos=<2454291,28249463,81600089>, r=59720809 +pos=<-1468549,29220087,631469>, r=71712205 +pos=<1576323,77863026,52114347>, r=80726896 +pos=<11328724,-1103809,57250256>, r=53237238 +pos=<14166873,32412130,88906135>, r=59476952 +pos=<68172516,66679724,50794113>, r=90105431 +pos=<-4882904,63239852,64521058>, r=84969357 +pos=<-39573626,43281992,58908860>, r=94089955 +pos=<47082853,25450033,45728957>, r=77686997 +pos=<30259034,36081601,79825507>, r=50625134 +pos=<13485963,34007713,111156423>, r=84003646 +pos=<-103414983,93539548,30098680>, r=85922019 +pos=<-6802701,-3790574,59234245>, r=76039201 +pos=<82390172,51540341,50478214>, r=88867872 +pos=<5396715,-12159909,37977747>, r=64326869 +pos=<60082922,38998779,61741375>, r=65282109 +pos=<-16364819,10714145,61687053>, r=73549544 +pos=<-58301485,30719708,55794510>, r=97141432 +pos=<16352057,56953747,89166657>, r=82093799 +pos=<-34630538,59464956,51639108>, r=98060041 +pos=<490228,30703545,109025168>, r=91563918 +pos=<-6013632,8426824,52874814>, r=56673453 +pos=<-36209880,25159205,51113229>, r=68375671 +pos=<17796723,1411910,80111570>, r=67114697 +pos=<-31889116,28510083,45862954>, r=58587653 +pos=<19168448,33254095,39684567>, r=98395168 +pos=<-6095859,46062067,73594989>, r=78078378 +pos=<-304797,59105732,57302395>, r=69038374 +pos=<55099745,36449947,86305322>, r=82314003 +pos=<33473188,6098096,-4438050>, r=79487709 +pos=<-31472777,36089404,51315048>, r=71202749 +pos=<15962314,28423814,-7317040>, r=61433573 +pos=<7998189,2801039,69890583>, r=65303215 +pos=<130870385,104831832,11196492>, r=68126888 +pos=<-5327566,58947831,12940865>, r=92989660 +pos=<3824920,57094208,49926985>, r=55521839 +pos=<-1717656,36673098,102114555>, r=92830763 +pos=<-6542148,37528701,53564176>, r=49960544 +pos=<-14811298,29054822,83783336>, r=79975290 +pos=<-37201984,61523961,41570442>, r=98810391 +pos=<20636169,30198837,103026121>, r=64914223 +pos=<10371395,31519349,55590694>, r=62337567 +pos=<31884149,40789942,72870652>, r=50003827 +pos=<-30398435,29198407,42512686>, r=58738952 +pos=<43939568,28346223,78157090>, r=54901870 +pos=<9128846,67552702,83250788>, r=94000232 +pos=<-2588856,30760371,91977867>, r=77653177 +pos=<15962420,82995471,76760935>, r=96119428 +pos=<-33661280,31365698,48813484>, r=66166075 +pos=<-16115499,43852463,46308402>, r=58601848 +pos=<-6987272,33841983,84781289>, r=77936013 +pos=<-485860,34594456,81980122>, r=69386193 +pos=<-15363694,37898885,53146470>, r=58734501 +pos=<-17124380,71830052,45774058>, r=87053925 +pos=<8219084,70226598,55923252>, r=70256199 +pos=<-3903209,29453615,46544603>, r=75288840 +pos=<-9159457,25097083,71581481>, r=61856037 +pos=<-6436575,16618931,70357346>, r=66386656 +pos=<-8806699,29246129,72352585>, r=62730916 +pos=<68862343,36688765,49225208>, r=59235344 +pos=<-79171684,112113447,67348279>, r=92995215 +pos=<2638935,25190324,85791990>, r=64174419 +pos=<14827988,29466545,48474491>, r=98818958 +pos=<-14381380,32037768,62743833>, r=61488450 +pos=<3154619,88011848,41382872>, r=85129150 +pos=<51747013,31306559,79606148>, r=67118845 +pos=<4782291,34063349,70169217>, r=51776099 +pos=<-39091050,45657329,51675336>, r=88749304 +pos=<-26634338,29826468,49344705>, r=58131168 +pos=<28955639,11886714,83389681>, r=58803847 +pos=<-13895377,39956378,49929456>, r=56106810 +pos=<-20174467,38776446,18529455>, r=82076331 +pos=<11908029,50316295,76200518>, r=66934331 +pos=<79036827,16924288,76062556>, r=96520365 +pos=<9584540,67893747,64596741>, r=75231780 +pos=<1999297,28072699,90660851>, r=69059706 +pos=<-4999516,1406744,49697518>, r=59502059 +pos=<-12138046,52832626,53760320>, r=71057036 +pos=<14911107,50532270,74102432>, r=62049081 +pos=<-28076669,-5209886,42939079>, r=85888492 +pos=<-1381979,35962916,89448258>, r=79118686 +pos=<-27555180,38443112,78090455>, r=96414564 +pos=<-45684157,22499678,51249216>, r=80645467 +pos=<-33262343,42412693,21018032>, r=96311801 +pos=<-24933943,30266769,36206604>, r=60648927 +pos=<47087640,55749463,76069992>, r=83366515 +pos=<40948562,39725308,77828570>, r=62961879 +pos=<-21047756,32265813,60780681>, r=66419686 +pos=<37924327,42452651,67877724>, r=52713763 +pos=<-58689938,30781189,50489915>, r=92286565 +pos=<13216582,64885410,61404468>, r=65398749 +pos=<-43382614,29830485,70345833>, r=95884395 +pos=<-20520219,36470699,75190567>, r=84507131 +pos=<14237854,59338973,85949685>, r=83376237 +pos=<-450228,37867875,64907958>, r=55551952 +pos=<17760677,61033651,84995936>, r=80594372 +pos=<22176975,82022403,46533128>, r=58704060 +pos=<22779974,94329178,17857701>, r=95346900 +pos=<-38001053,34049218,49600706>, r=73976424 +pos=<16848379,29946291,48116237>, r=55533891 +pos=<-42631692,35454176,53098888>, r=83510344 +pos=<4649340,48178580,58429391>, r=54284128 +pos=<847183,51607513,81674534>, r=84760407 +pos=<-21437870,4973092,57201053>, r=79877495 +pos=<-31919810,30134447,55487065>, r=69866771 +pos=<-27341158,67125553,48484104>, r=95276520 +pos=<34772295,-8690710,66519732>, r=68327958 +pos=<-31969415,39408252,48343122>, r=72046242 +pos=<102875003,13271850,46851582>, r=94799961 +pos=<-12487583,35034265,55339911>, r=55187220 +pos=<9093156,39769707,84017977>, r=67020115 +pos=<-16380910,41574541,66165228>, r=76446125 +pos=<78145797,37164108,49128463>, r=68897409 +pos=<12696275,29248422,93349910>, r=62227566 +pos=<3806267,80300805,32983373>, r=85166064 +pos=<96882526,36942217,48757938>, r=87041670 +pos=<-171249798,39499790,57712028>, r=97294519 +pos=<-2013420,51530722,55656270>, r=61525906 +pos=<10506453,22608309,43074519>, r=92987198 +pos=<-12980027,57643628,73634339>, r=96583452 +pos=<9759074,34807718,46383535>, r=76510831 +pos=<-46481921,33185083,62928260>, r=94920705 +pos=<-41982125,32478135,69194276>, r=95980083 +pos=<6066850,16557724,-23317282>, r=96233732 +pos=<-27420476,39804614,13027130>, r=95852751 +pos=<-35598484,27994414,43416148>, r=61831662 +pos=<53497255,74968025,34467126>, r=87786515 +pos=<5629165,76030721,52476464>, r=75203884 +pos=<-52112524,15110086,40185629>, r=92357875 +pos=<-23905340,18683396,67786661>, r=79220265 +pos=<1204692,65009004,78621903>, r=94751674 +pos=<-10066560,46695198,48547405>, r=57634798 +pos=<10289802,-10697128,21104545>, r=74844012 +pos=<-40310292,28833507,46959457>, r=68428878 +pos=<-13764816,49841026,61895287>, r=77826610 +pos=<-19679027,58605601,66152788>, r=96763074 +pos=<8809311,33356810,46152100>, r=63432984 +pos=<-29709153,29461995,49058531>, r=60555118 +pos=<-13129092,-9705209,46828679>, r=75874660 +pos=<102118197,31480871,42422516>, r=84965146 +pos=<-32517383,30565130,33503263>, r=71234788 +pos=<9534874,52896280,70697014>, r=66384094 +pos=<16880678,65311318,51702479>, r=52458646 +pos=<-36132788,43209378,55775064>, r=87442665 +pos=<22744530,34380596,134099136>, r=98061118 +pos=<-26547963,41862023,60462772>, r=81198255 +pos=<-545734,40978449,60677738>, r=54527403 +pos=<16538063,68562231,28273188>, r=65405796 +pos=<14494679,58745235,31512009>, r=54393346 +pos=<7791169,67262375,35493930>, r=65632071 +pos=<8485973,48520508,103076567>, r=95436538 +pos=<8214274,28745216,50655896>, r=92680074 +pos=<-6937397,27971689,49092605>, r=65350532 +pos=<-22481435,9380958,40012423>, r=68629066 +pos=<62129884,16597211,12546768>, r=80660497 +pos=<6258688,62081024,87730516>, r=95878363 +pos=<-32278381,28495170,53585234>, r=66684251 +pos=<8040391,72063718,51083757>, r=67432585 +pos=<-5673174,25046673,73686241>, r=60524423 +pos=<-8001243,63756911,61002978>, r=85086692 +pos=<-26577068,41949907,46813510>, r=67665926 +pos=<27314118,87945331,52949180>, r=72667621 +pos=<-20191543,30416348,7242015>, r=85020749 +pos=<-40509210,25805511,61018374>, r=81933846 +pos=<-27572422,16102428,56368833>, r=74050704 +pos=<-11240828,50248391,27895560>, r=75248609 +pos=<34613570,41153477,100115019>, r=80341645 +pos=<15579024,9723842,69284527>, r=50193328 +pos=<-46066212,37488646,47288596>, r=83168980 +pos=<16651399,81480864,60218612>, r=77373965 +pos=<-4490123,12256693,29836426>, r=57938091 +pos=<-9722027,38414943,53203837>, r=53666284 +pos=<-17608773,53047624,65044179>, r=88026024 +pos=<-46201175,24018662,58511638>, r=86905837 +pos=<83707615,22862590,47033198>, r=66223477 +pos=<75278564,31837146,46877582>, r=58452382 +pos=<66228245,28297748,1246309>, r=87068293 +pos=<-41563889,138361221,22834552>, r=92320836 +pos=<-15149458,41692211,57568440>, r=66735557 +pos=<-29959760,29199939,50714596>, r=62199729 +pos=<42142694,49570710,97616140>, r=93788536 +pos=<61202922,61131481,71470186>, r=98263590 +pos=<29827492,38051686,24415070>, r=56692483 +pos=<17592777,73628928,77556835>, r=85918423 +pos=<-20783874,35242533,54629155>, r=62981079 +pos=<64237574,1302210,73405037>, r=94685683 +pos=<-21188594,47968883,69462691>, r=90945802 +pos=<30657831,49880981,-20723938>, r=95051093 +pos=<22864844,93114017,56937539>, r=79512153 +pos=<36531726,66041045,59031978>, r=66063917 +pos=<19846259,-13074428,65015549>, r=64455431 +pos=<-7113733,38738967,15168250>, r=72339348 +pos=<-25341686,54431754,46334838>, r=78433824 +pos=<20656999,57196763,75771625>, r=64636928 +pos=<-22838713,34493030,27829494>, r=71157081 +pos=<-27835555,38366205,61876949>, r=80404149 +pos=<79754868,48144480,60613367>, r=92971746 +pos=<20721233,45043536,93948762>, r=70596524 +pos=<-46680111,37879564,53763782>, r=90648947 +pos=<16009840,86125003,58588086>, r=81028766 +pos=<20025736,5391570,85015946>, r=65810395 +pos=<33720066,104264468,55486952>, r=97930498 +pos=<-63554526,31193768,49947114>, r=97020908 +pos=<-55699886,23371204,32454537>, r=95415201 +pos=<73230725,36900143,48087090>, r=62677110 +pos=<-32963671,28309367,52478944>, r=66077418 +pos=<5939165,55024902,62755578>, r=64166779 +pos=<-24917309,29082130,46444648>, r=52769524 +pos=<7735621,49034186,60918429>, r=54542530 +pos=<4877732,8430499,59198278>, r=52101779 +pos=<83731770,35839732,49766995>, r=73797528 +pos=<-11074931,33743791,62322816>, r=59467077 +pos=<47699715,55835903,55060273>, r=63055430 +pos=<37657191,-9104085,74776203>, r=79882754 +pos=<-46744861,30151111,64292721>, r=93514232 +pos=<-13186319,46003906,17086538>, r=83758581 +pos=<32840031,56015193,64841941>, r=58156157 +pos=<6062205,42632964,47615029>, r=73781872 +pos=<-19799971,51835559,58790016>, r=82751306 +pos=<-30893469,30656893,46300617>, r=60176438 +pos=<-55830501,22240501,57274377>, r=97076042 +pos=<15868849,46019629,96676898>, r=79153313 +pos=<-16265649,52075245,75590161>, r=96256506 +pos=<14624864,56207969,57618910>, r=51527552 +pos=<318934,59504614,60032696>, r=71543938 +pos=<-23487442,41093331,19776590>, r=86459237 +pos=<67237678,41609284,51037661>, r=64343635 +pos=<-19179700,33732993,56360250>, r=61598596 +pos=<-34730837,5580174,61364913>, r=96727618 +pos=<53061020,1668645,85754857>, r=95492537 +pos=<3877306,43959248,85023639>, r=77431037 +pos=<-10413451,33996655,77197477>, r=73933065 +pos=<-15270541,18375898,55749133>, r=58855471 +pos=<37599773,64150517,58789624>, r=64998919 +pos=<6641382,32884368,86779494>, r=65348099 +pos=<-28989825,39572241,63995218>, r=84883334 +pos=<12972158,71582537,87975353>, r=98911274 +pos=<41852603,48069590,65721204>, r=60103061 +pos=<-12895423,34234299,51393776>, r=50848940 +pos=<76683281,42692313,48821155>, r=72655746 +pos=<9795431,-286238,55311954>, r=52014423 +pos=<-12408641,28693619,67844073>, r=61271790 +pos=<18776047,80030396,38475557>, r=64433947 +pos=<75995398,33442514,24888484>, r=78338116 +pos=<-22764877,22172460,58097441>, r=64901579 +pos=<10239772,40250323,68821851>, r=51158213 +pos=<-6984206,11263546,-3408779>, r=94670545 +pos=<-25723496,46861709,48289286>, r=73199930 +pos=<5729735,28403922,117678625>, r=92678286 +pos=<11079147,38654325,86908021>, r=66808654 +pos=<19012903,51490161,13432661>, r=60699507 +pos=<-19708767,24665073,51422478>, r=52677853 +pos=<2549542,80274103,46746108>, r=76796138 +pos=<-48466554,29995042,56395431>, r=87182744 +pos=<86083343,46696534,52688635>, r=89927531 +pos=<19978558,94248897,26059694>, r=89865438 +pos=<21928133,43444423,89266701>, r=63108468 +pos=<-32662150,34466095,53616954>, r=73070642 +pos=<-4767571,24202491,48306992>, r=52750940 +pos=<-6049891,44411137,66256832>, r=69043725 +pos=<14845730,-1633797,-11680131>, r=94009220 +pos=<65363,73430740,49753549>, r=75444608 +pos=<10919543,55374161,60523054>, r=57303105 +pos=<-33344704,36874381,61740346>, r=84284898 +pos=<90823294,32581102,47524970>, r=75388376 +pos=<56762466,39329407,28284461>, r=61595785 +pos=<14326905,38412743,-13806339>, r=79547110 +pos=<-27408929,29564102,49418580>, r=58717093 +pos=<72828690,34540465,56644790>, r=68473289 +pos=<-23879984,-80533415,-13926388>, r=52569551 +pos=<623363,23117915,46129959>, r=71699945 +pos=<-21310687,28343530,48201114>, r=50180986 +pos=<-11268087,54197123,60947343>, r=78738009 +pos=<62637156,43374891,28845119>, r=70955785 +pos=<101486863,29252465,58609523>, r=93807860 +pos=<-7121743,-17618647,50972485>, r=81924604 +pos=<33712412,33093334,104500328>, r=75765083 +pos=<70057598,30520257,59928664>, r=64965508 +pos=<13577885,32272356,41344051>, r=98076208 +pos=<8955771,46905424,22660149>, r=56944295 +pos=<-31671198,35282234,47777117>, r=67056086 +pos=<-28701991,29968381,30147369>, r=70177802 +pos=<46883174,34145057,15459578>, r=59357035 +pos=<-21541824,-3738229,54506228>, r=85997940 +pos=<-7165905,-13698956,55634555>, r=82711088 +pos=<-42136026,37824576,54914702>, r=87201260 +pos=<75444044,34090961,64356096>, r=78350113 +pos=<27070208,76993574,17498441>, r=80354253 +pos=<-24556265,40605071,29335340>, r=77481284 +pos=<7679148,40322729,74549753>, r=59518815 +pos=<64743952,34069862,51081505>, r=54354571 +pos=<7888777,51012156,-6093924>, r=90872090 +pos=<-38312643,6053130,45786004>, r=84257215 +pos=<-10907447,30880694,71717384>, r=65831363 +pos=<-21415341,33770607,55616361>, r=63127773 +pos=<-9268341,12931923,58776983>, r=61325095 +pos=<53680780,36878021,92991425>, r=88009224 +pos=<16325289,32873290,52486621>, r=50056228 +pos=<2379678,52409295,64101601>, r=66456683 +pos=<12407570,48986679,9677595>, r=68556317 +pos=<-23196672,47847216,47491952>, r=70861580 +pos=<17092834,24513176,91350037>, r=55955816 +pos=<8752629,37508985,49239757>, r=72585978 +pos=<52794942,76928483,47757542>, r=81940023 +pos=<12527582,-6613411,50632808>, r=50930382 +pos=<-70810892,45621857,-48305364>, r=62008194 +pos=<-18412210,36869794,57144258>, r=64752285 +pos=<87656632,20763685,66883781>, r=92122439 +pos=<61764769,33809145,-512978>, r=89875236 +pos=<-21591807,57503330,27237264>, r=93512809 +pos=<-8980322,48822102,24813214>, r=74644293 +pos=<-13586166,29673545,54387395>, r=49972553 +pos=<-21336027,12684379,50240160>, r=65103467 +pos=<15312696,61249932,61078049>, r=59340843 +pos=<3820682,55264026,85971673>, r=89740512 +pos=<-8720944,7901096,48785694>, r=55817204 +pos=<46676113,42744663,57067759>, r=50947525 +pos=<63180707,54936070,46238435>, r=68814227 +pos=<-59988823,31676130,52904181>, r=96894648 +pos=<-55767575,34582277,42911408>, r=89093361 +pos=<-24727493,22617024,22771261>, r=74880311 +pos=<30402823,52581940,78464394>, r=65908330 +pos=<-12446120,14245346,47969322>, r=52381926 +pos=<13932111,12087077,52306416>, r=71083363 +pos=<12361114,5008235,62369519>, r=51211858 +pos=<62655763,37235551,16180822>, r=77498932 +pos=<5158458,57101119,21414371>, r=72183092 +pos=<2908218,33006742,52557556>, r=82743046 +pos=<57439166,18173939,101222852>, r=98833513 +pos=<52238468,31780002,45678724>, r=78491149 +pos=<-45793920,10537217,50965371>, r=92433881 +pos=<-13743952,64107054,54632417>, r=84808943 +pos=<-170006460,33686904,57787874>, r=58950081 +pos=<-26862218,29083237,47085032>, r=55356188 +pos=<794530,52505491,57994889>, r=62031400 +pos=<62469765,31544111,56755533>, r=55228669 +pos=<33597386,32945456,56175425>, r=60893404 +pos=<67662625,38142990,51575060>, r=61839764 +pos=<-48808932,29332298,47264670>, r=77731645 +pos=<-13897506,80448804,52473065>, r=99144940 +pos=<-41499426,33500208,34694650>, r=81959864 +pos=<21500730,1820261,108639134>, r=91529831 +pos=<37273144,59821099,54577329>, r=56130643 +pos=<-21429926,6902774,61057229>, r=81796239 +pos=<3340434,50630706,26961101>, r=61983979 +pos=<20112657,-7766263,32920789>, r=50273913 +pos=<66869619,52342243,67598868>, r=91270061 +pos=<6129880,42603189,67116575>, r=55915349 +pos=<6398878,1688559,79467734>, r=77591971 +pos=<14501207,33194081,103787164>, r=74805573 +pos=<-41363813,41379031,51239687>, r=86308022 +pos=<-5072359,37511009,73502277>, r=68411104 +pos=<9979161,47203323,76860857>, r=66410591 +pos=<8272810,70008182,48415971>, r=62477175 +pos=<16131738,39072448,57020881>, r=66650334 +pos=<-18513223,15536711,73318828>, r=82507011 +pos=<-53344764,29150642,46822282>, r=81643567 +pos=<-19488382,39476575,49309757>, r=60600153 +pos=<17795545,86761153,34350936>, r=76269651 +pos=<-39860391,37740470,42830687>, r=76425286 +pos=<75357927,42659157,48122833>, r=70599033 +pos=<67060727,20786860,43203283>, r=50745152 +pos=<11307310,64243278,77782998>, r=83044472 diff --git a/2018/inputs/24.txt b/2018/inputs/24.txt new file mode 100644 index 0000000..0c90bb1 --- /dev/null +++ b/2018/inputs/24.txt @@ -0,0 +1,23 @@ +Immune System: +2991 units each with 8084 hit points (weak to fire) with an attack that does 19 radiation damage at initiative 11 +4513 units each with 3901 hit points (weak to slashing; immune to bludgeoning, radiation) with an attack that does 7 bludgeoning damage at initiative 12 +5007 units each with 9502 hit points (immune to bludgeoning; weak to fire) with an attack that does 16 fire damage at initiative 2 +2007 units each with 5188 hit points (weak to radiation) with an attack that does 23 cold damage at initiative 9 +1680 units each with 1873 hit points (immune to bludgeoning; weak to radiation) with an attack that does 10 bludgeoning damage at initiative 10 +1344 units each with 9093 hit points (immune to bludgeoning, cold; weak to radiation) with an attack that does 63 cold damage at initiative 16 +498 units each with 2425 hit points (immune to fire, bludgeoning, cold) with an attack that does 44 slashing damage at initiative 3 +1166 units each with 7295 hit points with an attack that does 56 bludgeoning damage at initiative 8 +613 units each with 13254 hit points (immune to radiation, cold, fire) with an attack that does 162 radiation damage at initiative 15 +1431 units each with 2848 hit points (weak to radiation) with an attack that does 19 cold damage at initiative 1 + +Infection: +700 units each with 47055 hit points (weak to fire; immune to slashing) with an attack that does 116 fire damage at initiative 14 +2654 units each with 13093 hit points (weak to radiation) with an attack that does 8 radiation damage at initiative 19 +5513 units each with 18026 hit points (immune to radiation; weak to slashing) with an attack that does 6 slashing damage at initiative 20 +89 units each with 48412 hit points (weak to cold) with an attack that does 815 radiation damage at initiative 17 +2995 units each with 51205 hit points (weak to cold) with an attack that does 28 slashing damage at initiative 7 +495 units each with 21912 hit points with an attack that does 82 cold damage at initiative 13 +2911 units each with 13547 hit points with an attack that does 7 slashing damage at initiative 18 +1017 units each with 28427 hit points (immune to fire) with an attack that does 52 fire damage at initiative 4 +2048 units each with 29191 hit points (weak to bludgeoning) with an attack that does 22 bludgeoning damage at initiative 6 +1718 units each with 15725 hit points (immune to cold) with an attack that does 18 slashing damage at initiative 5 diff --git a/2018/inputs/25.txt b/2018/inputs/25.txt new file mode 100644 index 0000000..d359c48 --- /dev/null +++ b/2018/inputs/25.txt @@ -0,0 +1,1248 @@ +-6,2,-8,3 +7,8,-1,-8 +7,-2,-4,-2 +4,-4,2,7 +5,8,-1,6 +-1,6,-4,-5 +-2,-6,-6,-6 +1,4,7,0 +-1,-3,-8,2 +5,-6,-5,-2 +-5,7,4,-2 +-2,6,-1,6 +5,4,0,-7 +1,5,-8,-3 +-3,3,8,2 +4,0,0,6 +4,-8,-3,3 +0,0,-7,-5 +-2,0,5,-3 +2,1,7,-1 +1,6,2,2 +4,4,7,-6 +-1,0,-1,1 +2,4,4,6 +-4,3,-7,2 +-5,-2,8,-7 +6,-8,-1,3 +-8,-6,-7,-3 +4,1,-7,-1 +-7,-5,-4,4 +5,-2,8,-5 +-5,-1,4,-4 +3,-3,8,4 +3,8,-8,-7 +-3,7,7,0 +-7,-5,-3,5 +-4,-5,-3,-2 +6,-8,3,8 +-2,0,8,7 +-4,3,5,7 +-6,3,5,0 +5,2,-3,-3 +0,8,0,5 +-5,-8,-1,-8 +2,6,0,6 +5,-4,0,0 +3,-2,-8,-5 +8,-4,-7,-7 +-3,-7,-8,-2 +6,7,-2,3 +5,0,-6,0 +0,-6,0,2 +8,-4,6,-3 +-5,-4,4,-4 +2,0,3,-1 +3,-5,8,5 +6,-1,5,5 +-6,-5,-4,8 +7,-4,0,5 +5,3,1,6 +-7,2,-3,1 +-4,1,-6,-7 +-4,4,0,8 +-6,4,1,-8 +3,-6,-6,5 +2,-4,-3,2 +-2,2,-2,1 +2,-4,0,0 +3,1,4,8 +-1,3,-7,-5 +-3,-7,2,0 +-2,-2,-8,0 +1,6,0,7 +-6,-3,0,-1 +7,0,-2,-7 +5,-5,-3,0 +7,0,0,5 +-6,5,6,2 +0,8,3,-1 +0,-8,-7,-1 +3,6,7,-7 +-2,4,-8,-3 +3,-3,-6,-4 +-1,-5,0,2 +-7,2,4,0 +-2,7,4,-2 +2,4,-1,5 +-1,-6,-6,4 +4,-6,-7,-2 +-6,6,-4,-2 +5,-5,-2,-6 +4,5,4,0 +3,3,0,-5 +-5,4,3,-2 +-6,1,7,-6 +3,5,-8,5 +-2,8,-2,-2 +-5,6,-2,-7 +-3,-6,7,-4 +-8,-6,7,7 +-5,-7,4,-4 +-8,-8,-6,7 +-7,-1,-2,-1 +3,-1,4,0 +3,6,1,-8 +2,6,-4,0 +-6,4,4,6 +7,7,6,-5 +4,-3,-2,7 +-1,8,2,-2 +3,-1,-4,5 +-2,1,-6,-8 +-3,1,7,-1 +-7,-1,8,6 +4,2,6,-6 +8,-1,8,-8 +4,6,-1,4 +7,-1,6,5 +0,-6,2,3 +-2,-8,-8,-6 +0,6,-4,-8 +4,-8,-7,6 +-3,-3,2,2 +2,1,4,7 +-3,7,-1,-8 +1,1,-2,-5 +3,-6,-4,7 +-3,5,0,8 +3,3,1,0 +1,5,4,6 +7,0,-2,-5 +1,5,-3,7 +-1,-4,3,4 +-4,3,-2,0 +-1,-8,2,0 +-8,-8,3,-3 +-2,-6,5,2 +8,-1,-3,-6 +2,-8,3,-5 +-8,-8,3,4 +-3,-5,-7,0 +0,3,1,3 +-8,5,-6,4 +2,0,4,-2 +-5,1,-7,0 +-5,0,-2,1 +4,-7,0,3 +7,0,4,-1 +0,-3,5,4 +-8,-8,-2,3 +2,5,4,6 +7,0,-8,-7 +-1,8,3,-3 +1,-2,2,-4 +-1,-3,3,-2 +4,6,7,-1 +3,8,2,-3 +-1,-8,8,7 +-8,4,7,-2 +-8,2,-8,-7 +-2,5,0,-5 +-1,-2,-5,-5 +4,6,-2,0 +0,8,0,-4 +2,0,-2,-1 +-8,0,-5,0 +-2,-8,-5,6 +2,0,5,7 +6,0,7,0 +-6,-8,3,-1 +2,2,6,-8 +-8,7,-8,7 +5,0,7,-6 +0,-3,6,-4 +-5,7,-6,-6 +2,5,0,-6 +-6,8,-3,3 +-8,-7,-1,-8 +-1,3,0,0 +1,2,3,-7 +-5,-1,7,2 +4,2,0,2 +-6,-6,-1,-2 +1,0,8,-1 +0,-1,-8,7 +2,2,-6,-4 +-2,3,2,6 +-6,-6,-2,-3 +-2,6,-2,1 +4,0,-8,7 +4,8,1,-1 +4,2,-2,5 +1,-2,-6,1 +1,5,-5,-4 +0,8,7,-6 +8,8,2,-3 +-3,-4,-5,3 +-2,6,-8,-1 +-2,-2,-4,2 +0,6,-3,7 +8,3,-3,7 +6,0,-1,-6 +8,8,3,0 +-7,0,8,7 +-5,7,-2,0 +2,-7,7,3 +8,-5,0,0 +-6,-8,1,-7 +-7,-3,0,5 +5,6,1,-7 +-3,8,-3,6 +-4,0,-4,-5 +7,4,2,1 +-7,-7,-8,6 +7,-7,4,4 +-6,-2,-1,1 +5,7,-6,-5 +1,6,-2,5 +-6,5,-6,3 +-6,-8,0,0 +2,-4,2,8 +0,0,0,-8 +-8,0,-2,2 +0,-4,-8,-8 +1,-5,-8,5 +6,-4,-5,6 +8,4,-5,-1 +8,-7,4,-4 +-7,-6,-8,0 +-2,3,-2,3 +-8,-3,-6,-3 +0,5,5,0 +3,7,-8,6 +0,-7,-5,-1 +1,6,-4,-3 +-4,5,-3,5 +7,-5,-5,8 +-4,4,0,-8 +7,-7,0,2 +6,0,2,-8 +-6,-4,1,0 +-1,0,-2,4 +-4,-8,5,7 +-8,4,-5,-2 +2,8,-8,-8 +-4,7,1,6 +-2,-2,-7,3 +6,4,-1,0 +-1,-7,-4,0 +-4,0,3,0 +0,3,5,2 +-4,-5,-1,0 +8,2,-6,0 +-2,5,-3,8 +7,0,3,-2 +6,0,-5,0 +4,-6,-5,6 +-7,8,0,-1 +8,-2,3,-4 +7,0,-4,7 +-4,-6,-7,-7 +2,8,0,4 +1,-6,5,-6 +4,-7,-2,-2 +4,1,-6,2 +0,7,4,3 +4,1,-1,-5 +1,-4,6,-6 +1,2,-2,-2 +2,-2,6,-5 +-8,6,-6,6 +0,6,8,2 +-3,-2,0,-8 +-6,-5,2,-6 +0,5,-8,-5 +1,-1,7,6 +-6,-3,-7,-3 +-4,-6,-1,0 +8,-3,-6,-2 +-5,-2,6,-1 +-1,0,3,1 +0,2,-6,7 +3,3,5,-2 +8,4,5,-1 +-5,-1,0,-1 +-6,-1,0,6 +2,6,-3,-3 +8,7,-8,4 +-6,-8,-3,0 +-1,-1,0,7 +6,-2,-8,4 +-3,8,3,-1 +6,2,0,4 +0,-3,7,3 +-5,3,-2,-1 +-6,-7,-2,-3 +4,-5,-3,-6 +-7,6,-2,4 +-2,-5,7,0 +1,8,-8,7 +8,3,-3,4 +-3,3,2,-4 +5,-7,4,1 +8,-3,-5,0 +-5,-4,-1,-8 +2,1,-2,-3 +-1,-4,-1,-7 +-7,-8,-7,-2 +3,0,7,4 +6,3,7,7 +0,-2,-4,2 +0,-1,-6,7 +-3,-8,-1,-7 +-8,-6,-6,-4 +-5,-4,-4,0 +0,7,-7,3 +-8,-7,-6,-8 +-5,3,0,-3 +-7,-6,0,7 +-7,6,-6,-2 +-2,8,2,-4 +2,0,0,5 +0,5,-2,0 +8,-7,-7,-1 +-1,3,2,-7 +-3,4,-7,-4 +-6,-3,2,-7 +-7,5,4,3 +5,-1,-6,-2 +3,-7,1,0 +-7,0,-4,-3 +-6,8,-1,0 +3,8,4,-2 +-1,-4,-8,-7 +3,3,8,1 +-5,1,4,5 +8,8,-1,2 +-3,-3,7,-4 +8,-3,2,-4 +6,-8,-6,8 +3,6,3,-2 +-7,-2,6,-4 +-6,-8,-8,5 +6,0,0,7 +-6,7,0,7 +8,0,-6,-3 +0,-3,-7,0 +-2,6,-7,-7 +5,-1,-3,0 +2,3,4,-5 +1,7,-6,0 +3,3,0,-3 +-1,0,-8,-8 +-2,5,-7,4 +7,-1,-8,5 +-2,-1,-1,6 +-2,-6,5,1 +4,-2,5,5 +-7,8,4,7 +-2,-2,6,5 +-6,1,-5,3 +-8,4,0,7 +8,-4,5,5 +-4,8,-4,1 +-8,0,5,4 +8,1,0,0 +-6,-8,-6,-2 +2,-5,0,0 +5,-6,5,-4 +1,2,7,2 +8,-4,6,5 +-6,0,7,6 +6,5,7,-6 +-2,-6,-2,5 +-6,-4,3,1 +6,-8,4,-4 +8,6,1,2 +7,5,7,-2 +7,-2,-6,-1 +4,-2,1,2 +1,1,-3,5 +0,-4,8,4 +5,2,-3,-4 +8,4,1,-3 +-1,1,-8,1 +-1,-1,0,5 +-4,4,6,0 +0,6,-2,6 +-3,4,5,5 +-7,5,4,-4 +2,2,-2,-4 +8,-1,2,-5 +-5,-2,6,-2 +7,2,1,6 +-3,-2,4,-5 +8,8,-7,-8 +0,1,-8,-4 +-3,-6,-3,3 +-4,-4,8,4 +-3,2,-4,-6 +-6,5,-5,-2 +-3,-7,-3,8 +0,6,-1,8 +8,0,7,1 +1,1,-8,-2 +6,-6,-7,3 +4,-5,8,-8 +-3,-6,6,7 +8,-5,2,4 +2,5,-3,-4 +-3,0,-6,7 +-1,-7,7,0 +2,-3,-5,5 +-7,-7,0,-2 +0,-4,7,8 +5,3,7,2 +-2,-7,5,5 +-6,-1,0,-8 +-3,0,8,-5 +-8,-1,1,1 +1,0,-6,8 +-1,-5,8,4 +-5,-4,4,8 +2,-3,0,-4 +-4,-3,0,7 +5,6,5,-5 +-3,-8,-3,-2 +5,8,-8,5 +-7,-2,-2,-2 +7,6,8,6 +0,-6,4,-7 +-1,-4,-7,0 +8,7,-6,6 +6,-5,-1,-3 +5,-2,-2,-3 +6,-3,-5,0 +-8,5,6,-5 +3,-7,7,8 +1,3,-8,0 +-6,8,-5,6 +6,-5,-5,-2 +3,8,1,-8 +-8,5,2,0 +0,5,-3,6 +-5,-7,-8,4 +0,7,0,0 +-5,6,-5,6 +-5,1,6,5 +6,1,-2,-8 +0,-8,3,1 +0,-3,-8,-3 +0,6,0,-2 +-8,0,-7,-5 +-8,2,0,6 +1,6,3,-4 +8,-5,0,-4 +-6,7,0,0 +5,0,1,0 +-8,8,2,8 +-7,4,2,4 +0,3,-2,-4 +-5,5,7,0 +5,0,-1,5 +-7,8,-6,8 +-8,-1,3,-3 +0,-7,-7,-7 +-4,4,8,-2 +1,2,1,-4 +1,-5,-1,8 +-3,8,-2,-2 +8,0,4,-4 +-8,5,-5,3 +-7,-7,-6,-2 +0,-6,-8,-8 +-1,-2,-3,0 +-4,0,1,7 +1,-6,-8,4 +0,8,6,-1 +-8,-5,-7,8 +2,7,-8,4 +-8,4,-3,2 +3,-1,-7,3 +4,-2,-6,-6 +-1,-4,1,-2 +3,-4,2,-6 +2,4,5,-3 +-7,7,1,6 +8,-6,-5,-3 +-7,1,-6,0 +-3,-6,-6,-8 +-8,-5,-6,4 +-5,-1,7,8 +0,7,6,2 +6,-2,-1,5 +0,4,-8,8 +-3,-5,-8,0 +2,-6,-2,-1 +5,8,-6,4 +-5,-1,0,-6 +-8,-5,8,2 +5,6,-3,-3 +-4,-7,2,6 +0,-3,-6,7 +-4,-6,-8,-8 +6,7,1,3 +7,-2,4,-3 +4,2,3,1 +0,8,-3,-8 +-8,0,1,0 +4,5,-4,-2 +-2,-6,4,2 +-4,0,-4,0 +8,-1,2,-2 +5,-7,8,1 +-2,5,-6,1 +6,-7,3,-7 +2,1,0,6 +-8,-3,-1,0 +8,-1,8,-3 +0,-6,6,0 +7,3,7,3 +-8,0,6,-1 +-5,-4,-5,0 +-2,0,3,-7 +0,2,0,0 +-3,6,6,3 +-6,-3,-1,-3 +8,0,1,5 +-7,4,-8,0 +8,8,-5,4 +-2,0,-7,-4 +-8,5,-7,-7 +8,0,-1,4 +8,-7,5,0 +-6,-1,-4,2 +-8,-8,6,-5 +7,2,-3,1 +2,0,2,6 +8,-7,-8,3 +-2,-7,-8,0 +0,3,-1,4 +-8,7,5,3 +0,-4,0,3 +6,6,-2,-6 +-4,8,6,-3 +0,3,0,-4 +6,-2,1,5 +1,4,4,3 +0,-7,4,-1 +1,3,-8,-2 +-5,0,4,0 +8,2,-6,-4 +-8,8,-2,6 +-5,7,-7,-2 +5,0,-4,-4 +-1,-5,3,7 +-2,-3,7,3 +-3,4,2,0 +-7,-8,1,3 +-8,-8,-3,2 +0,5,-8,7 +1,7,-6,5 +2,-6,-5,0 +-8,4,4,2 +7,3,1,-6 +-5,-4,8,2 +-7,7,0,0 +8,6,-1,6 +2,5,3,-7 +-7,3,1,5 +-8,-3,-4,3 +0,-2,0,8 +-7,-7,-5,8 +3,6,3,0 +-4,2,8,-4 +-6,2,6,-3 +0,-7,-6,-7 +0,-6,3,-6 +-4,-5,-5,-2 +1,-7,-2,-5 +5,7,0,4 +2,-1,3,-3 +7,1,-5,8 +0,3,0,2 +5,0,-5,-3 +-2,6,2,5 +6,4,-4,-7 +4,-8,4,8 +-5,-2,-6,7 +-1,-4,-4,5 +-2,-7,3,7 +-3,-8,-2,2 +1,-2,-5,-3 +0,-4,-1,3 +4,8,2,-5 +8,6,-6,1 +-8,-1,1,-4 +5,6,4,-8 +-7,-6,-5,4 +-3,-3,5,0 +-6,7,2,1 +-5,5,-1,0 +1,-8,2,0 +0,-3,-7,6 +4,-4,1,0 +-4,-6,0,4 +4,0,4,0 +4,-7,3,-2 +0,-3,0,4 +2,-3,2,2 +2,0,0,-4 +-8,6,6,4 +7,7,4,-2 +0,5,0,-1 +5,7,3,6 +5,2,4,-3 +5,4,-7,-6 +-8,1,7,2 +0,5,8,-1 +5,-3,-6,0 +-6,0,4,6 +-2,-2,6,-6 +-6,3,5,2 +8,-2,-3,-1 +-8,1,3,-4 +1,-6,-5,-6 +8,-4,6,-1 +-5,-7,-7,-5 +-1,-6,1,-4 +4,2,-3,0 +7,1,-4,4 +2,6,-8,0 +7,7,2,-5 +5,-2,-8,-3 +-5,0,3,2 +-1,6,-1,-4 +6,4,-3,-4 +4,1,4,-6 +3,5,0,-1 +5,-3,7,2 +3,-3,-7,5 +-3,-6,-1,2 +-7,-6,5,5 +-3,-7,1,-7 +5,5,-4,3 +6,-4,0,-1 +-7,-8,-1,7 +6,1,3,8 +8,-3,-5,2 +-3,1,-2,7 +-3,8,3,-4 +0,-8,7,3 +5,0,-4,-3 +3,-8,2,4 +-8,-3,6,-3 +0,6,-5,4 +-2,-8,-2,0 +-4,-4,-4,8 +-6,8,-5,-1 +-8,0,1,1 +-4,3,1,-2 +-1,-7,4,8 +3,0,7,-4 +5,7,3,-1 +7,-8,-3,1 +5,5,0,1 +-3,-1,0,8 +-6,-8,-4,1 +-3,-1,-6,0 +0,-1,0,0 +6,0,0,8 +3,-1,-4,6 +-4,4,0,-5 +3,7,1,7 +-5,0,6,7 +5,-5,2,3 +5,-7,2,1 +-6,1,-3,-6 +7,8,-2,8 +5,4,0,6 +-8,-3,4,-3 +-3,-6,2,6 +1,4,2,5 +0,7,6,-5 +-1,7,5,4 +4,-5,-4,0 +-2,1,4,-7 +-2,0,0,8 +7,0,1,1 +-3,-7,8,6 +-2,-8,6,7 +6,3,-4,5 +5,2,-5,8 +4,-2,5,-2 +8,5,-4,-4 +2,6,-7,6 +-4,-2,-6,-5 +0,5,-6,-1 +5,3,4,3 +4,2,1,5 +6,-6,-8,3 +-7,2,3,-2 +0,2,2,1 +0,1,2,3 +-6,4,1,-4 +7,-4,-1,4 +-5,3,-3,0 +3,8,-3,-4 +-2,-3,4,2 +4,7,-2,4 +4,-4,-3,-8 +1,0,-2,-6 +6,7,-4,0 +-2,-7,2,-2 +0,4,2,2 +-4,8,-1,0 +-4,5,1,1 +-2,-8,-1,4 +2,3,-3,4 +-8,-4,-5,0 +-6,3,0,2 +6,-5,1,0 +4,-2,-8,4 +0,7,-5,-2 +-7,-3,5,-1 +5,7,-4,1 +-3,-3,3,5 +2,0,-4,-4 +-7,0,6,6 +4,-4,-3,-1 +-6,6,-1,-6 +-1,2,1,-8 +-2,3,4,6 +5,8,-4,-8 +0,5,0,-4 +-5,-3,7,7 +5,4,5,-2 +4,-2,8,-5 +-4,2,-7,4 +1,-8,4,-4 +7,8,-7,3 +2,7,-8,-5 +-1,-5,6,-7 +5,-4,7,-2 +0,-3,0,6 +0,-7,-2,2 +4,8,0,-1 +0,-3,5,-3 +5,-6,0,4 +1,-7,2,-2 +-1,0,-3,1 +-4,0,4,-6 +5,3,7,3 +7,-4,7,-8 +-3,-5,3,7 +0,-6,8,2 +4,-6,-1,8 +0,-7,0,-8 +-4,5,0,6 +7,6,-6,2 +-6,-5,-7,3 +0,-1,4,-8 +4,6,-4,4 +-4,-2,5,4 +-8,-8,0,4 +2,-8,4,-1 +2,4,0,0 +-6,-1,8,7 +-6,5,8,-5 +-3,-5,-7,-3 +3,-1,-5,-7 +0,4,-4,-7 +2,-4,-1,-6 +-6,-6,0,5 +0,6,3,-5 +0,-3,8,2 +7,-6,6,-1 +-3,7,-4,-5 +-3,1,3,7 +5,-2,-6,-7 +-6,3,-1,8 +0,0,-4,-2 +-8,2,3,-4 +0,-2,-4,0 +1,8,-3,-7 +-2,-4,3,0 +3,-8,7,0 +-1,-6,3,-4 +3,0,8,4 +3,3,-5,-6 +5,0,-1,-2 +7,1,-4,8 +4,-5,3,-2 +4,-4,0,8 +-4,2,1,-8 +-8,0,-7,-2 +4,-2,0,0 +-8,3,7,-8 +8,-8,6,-5 +-8,0,3,-5 +6,3,-2,-3 +4,0,-5,7 +-1,-5,-6,2 +4,-1,-7,2 +-8,-1,-2,0 +1,7,-7,-2 +5,0,-5,-7 +8,-3,6,-2 +1,-6,2,-3 +6,-1,6,3 +-7,4,3,4 +-7,-5,-5,-4 +-7,2,-8,-4 +-5,8,3,-3 +1,2,-3,4 +-6,-5,-4,1 +5,4,5,7 +0,0,-1,-4 +5,-8,3,-1 +5,6,-5,0 +-7,-3,-6,0 +2,-8,0,1 +1,4,-7,-8 +-4,-7,-6,3 +0,1,-1,0 +-6,-1,6,0 +1,6,-4,-2 +8,-3,0,0 +-2,0,-3,7 +3,8,-4,3 +-8,7,2,0 +1,4,-6,3 +5,-3,4,-4 +-3,-5,5,5 +-6,4,-2,2 +-4,0,2,4 +-7,1,6,1 +-2,2,4,6 +-5,-2,6,0 +-1,4,8,0 +0,8,6,-6 +-6,6,-4,-7 +-6,-7,3,0 +4,-1,3,4 +0,-7,-4,-6 +-6,-5,-5,0 +-2,-5,-4,0 +2,0,-8,6 +-1,1,0,0 +-6,-4,-3,-1 +7,5,-7,1 +-5,-1,3,3 +6,1,0,1 +6,7,6,7 +-3,1,0,-3 +-5,-1,-6,4 +-5,1,1,8 +8,-1,-2,-6 +3,0,6,7 +0,8,4,0 +-8,0,-2,5 +-4,-3,-5,5 +-5,3,2,5 +-2,-3,0,-6 +-3,-4,1,-2 +8,-4,-7,-6 +2,8,6,-7 +3,-1,1,-6 +0,-8,1,3 +-2,-4,8,0 +7,-7,-3,5 +8,5,6,-5 +-3,7,2,8 +6,-1,-7,1 +-4,0,-2,-2 +7,8,1,-3 +-2,5,8,6 +-7,-5,0,3 +-7,3,-1,6 +2,-1,-4,0 +-8,-6,2,-8 +-7,-5,-5,1 +0,-5,-4,4 +5,-2,-3,-8 +-5,-8,1,4 +5,0,7,-4 +8,7,1,-1 +-4,-1,-5,2 +4,8,-6,1 +-3,2,3,4 +-5,-2,1,3 +-3,5,5,4 +-6,4,-1,5 +6,1,3,0 +0,-4,-5,0 +-4,4,2,6 +-7,-8,-6,7 +8,4,5,1 +0,5,-3,-1 +3,6,5,-8 +1,8,3,-6 +3,-3,-5,-8 +-7,5,-5,0 +-6,4,0,-6 +-7,7,6,-3 +-3,-1,7,8 +-7,-7,1,-4 +-7,-1,-8,6 +6,0,-2,2 +-5,-8,0,7 +-5,-4,8,4 +1,5,4,2 +8,8,-2,6 +-3,2,-2,1 +-5,-2,1,-2 +8,8,-8,-4 +-7,-8,8,-4 +0,-6,8,-2 +-6,8,1,0 +-8,0,8,-4 +-6,5,1,2 +1,7,5,-2 +-4,1,0,-7 +2,-8,3,7 +-1,-6,-2,-1 +3,-5,-1,7 +0,-7,2,1 +0,8,2,0 +-1,-2,-8,-2 +6,2,5,0 +7,-8,-8,0 +-2,1,2,6 +-3,-7,-4,2 +7,1,4,-3 +5,4,-1,1 +8,-8,8,-7 +3,7,7,-1 +0,-7,0,-4 +-4,2,7,-7 +-7,2,-5,7 +7,-3,2,0 +-8,1,2,0 +5,8,8,-3 +0,7,-2,7 +-3,0,0,-1 +6,8,3,-1 +1,0,-8,0 +8,-5,6,6 +3,0,0,3 +1,4,-4,4 +-2,-5,-3,3 +7,3,-1,-1 +2,-5,1,-5 +-3,-2,6,6 +0,7,-2,-2 +0,0,3,-7 +-1,-7,2,-2 +-6,-1,0,1 +-4,1,1,8 +-4,-6,1,1 +5,7,3,-3 +8,-2,4,2 +0,-6,5,-8 +4,5,0,-6 +1,0,-2,-1 +-6,0,0,-6 +-5,-7,-4,-6 +-8,8,-5,-2 +1,-7,0,4 +4,6,8,1 +-2,-6,6,6 +7,1,-6,0 +-5,6,-4,0 +-4,1,1,4 +8,-7,-1,4 +-7,8,4,-2 +8,5,-7,3 +2,-5,5,-1 +-5,-5,3,8 +-5,-3,-7,6 +5,2,2,1 +-1,-7,-5,2 +0,7,8,-5 +6,-4,5,0 +-1,5,-2,8 +-8,7,0,7 +-4,8,-1,1 +5,-1,1,-2 +2,-3,8,0 +0,6,-1,1 +-2,7,-7,8 +-6,1,-1,6 +5,7,-6,0 +-5,-1,-6,-6 +-2,3,-8,-5 +1,5,-7,-8 +7,-5,-2,5 +-5,7,5,-2 +-5,0,0,7 +-4,-4,0,0 +-3,0,2,-7 +5,4,3,-1 +-5,-7,7,5 +-2,-3,4,5 +-5,-3,4,2 +-7,0,-5,3 +0,0,-8,8 +0,5,-7,4 +-8,-3,8,-2 +-5,8,-2,-5 +-8,8,0,0 +-8,-3,5,-1 +-6,1,8,-3 +3,7,-6,3 +-6,6,2,5 +1,-4,-3,0 +-8,-8,5,3 +1,-4,8,-2 +4,7,3,1 +7,0,4,0 +0,3,-4,-2 +-7,3,7,4 +-4,-7,-1,3 +1,-7,2,1 +3,3,-5,-1 +5,-7,2,2 +1,-4,-4,0 +-8,5,-3,-1 +3,-3,4,0 +7,0,4,-5 +0,1,1,2 +1,-5,6,-5 +-3,2,7,7 +-3,-3,6,2 +2,-2,0,-3 +3,8,-3,2 +-1,1,3,-4 +2,7,4,8 +7,6,-1,6 +8,8,6,5 +2,8,-6,-7 +-1,-3,-3,3 +4,0,-5,-1 +-4,-4,-1,2 +2,-1,-2,-3 +3,3,-3,1 +-1,3,2,2 +4,1,4,7 +-1,-6,-4,2 +-5,-5,2,-1 +-2,2,0,-5 +-1,-8,5,-2 +-6,1,-1,-1 +-8,-8,0,2 +7,8,-7,-1 +-6,7,0,-6 +-4,4,8,-7 +7,1,5,7 +-5,2,2,-5 +1,-2,-3,0 +0,7,-8,-5 +-1,0,-5,6 +-6,1,-4,-3 +8,2,4,-7 +0,-3,0,-7 +6,-5,-8,-4 +-3,4,-3,7 +0,-1,-8,2 +3,1,-8,0 +-8,1,3,7 +-7,1,8,6 +7,7,-3,7 +4,0,2,-3 +0,-2,1,-7 +-7,6,-3,7 +-3,8,-7,4 +6,4,2,5 +3,-3,6,-7 +6,-8,-3,-1 +-2,-8,-8,4 +-3,-2,1,6 +3,1,-1,-1 +8,6,7,5 +5,7,7,-8 +-7,3,3,4 +8,6,-5,-4 +1,-4,-5,-3 +4,6,-6,-6 +-3,4,0,7 +1,-4,-3,8 +3,-7,-2,1 +2,-4,4,8 +-5,1,-7,5 +0,-5,0,3 +0,7,-8,5 +-8,-2,1,3 +-5,8,8,6 +0,5,4,-1 +0,-8,-7,8 +3,2,1,-7 +2,-3,4,1 +5,4,7,-3 +-8,-3,7,-3 +-2,5,6,-5 +5,0,0,-3 +-4,6,6,1 +8,-2,-5,2 +0,4,-2,3 +-8,-5,-8,6 +-5,0,5,7 +-7,1,-8,4 +7,2,6,-2 +-2,-7,-2,6 +-7,7,0,5 +-5,-3,1,4 +-4,8,2,3 +-7,0,0,-6 +2,4,0,8 +2,7,7,0 +7,4,-4,-3 +2,7,5,7 +-3,4,1,3 +-2,-3,-3,1 +2,8,-1,8 +0,-7,6,8 +1,6,5,5 +-8,-6,-6,-5 +6,-8,-8,-1 +-8,3,3,3 +5,-7,7,-2 +5,8,1,6 +0,2,3,5 +-2,7,-7,-3 +-5,6,1,-5 +6,7,-1,4 +8,-3,6,-7 +5,0,-8,3 +0,6,2,0 +-8,-6,-6,5 +0,7,2,-3 +1,-4,6,-7 +-6,7,0,4 +4,-4,0,4 +6,3,7,-2 +3,-8,2,3 +0,5,3,-8 +2,6,7,4 +2,-7,-5,1 +-8,-3,-2,4 +-7,-7,0,4 +-4,-5,-6,1 +-6,-6,0,-3 +-8,8,-3,-4 +-6,7,1,-6 +-5,4,0,7 +-4,-1,5,3 +5,-7,3,1 +0,-4,-6,-3 +6,-6,-1,-5 +3,1,5,-3 +-1,1,2,-3 +0,7,-1,-7 +-8,0,8,0 +0,8,0,-6 +2,-7,2,0 +0,-1,-2,-7 +-2,0,1,1 +1,-7,8,4 +3,-6,0,7 +0,0,-5,4 +2,-7,0,6 +-6,4,5,-7 +-3,5,7,4 +-2,-1,7,8 +-7,0,-2,-4 +3,-6,6,0 +5,-4,-4,4 +6,8,8,-3 +6,-6,-6,3 +2,-3,-3,-3 +8,-5,-2,0 +-3,5,7,-4 +-7,-8,1,5 +0,-1,-1,-1 +8,1,7,-8 +4,4,2,4 +6,2,-1,2 +-5,6,-6,5 +-2,-5,-3,4 +6,-3,-4,0 +8,8,-5,-7 +2,2,0,-3 +-5,-8,1,2 +7,-6,-2,8 +-5,0,-3,3 +-2,7,-4,-5 +8,-1,-6,1 +7,6,-1,-4 +-3,0,2,1 +0,0,5,0 +-1,8,-2,3 +-3,2,1,-8 +1,7,-7,0 +1,4,-1,0 +6,-4,3,-2 +-1,-6,-2,2 +-2,2,2,2 +2,0,-3,5 +-4,1,-8,-3 +-4,1,5,-7 +-6,8,1,4 +5,3,0,1 +-8,-7,7,-1 +-8,-3,1,-7 +0,2,4,7 +6,7,2,-8 +4,1,2,8 +3,-2,1,-5 +8,2,-7,6 +8,0,5,3 +-7,4,8,-7 +3,8,-1,-7 +-1,-5,-2,0 +-3,0,6,3 +6,5,-3,-2 +1,8,7,-2 +-4,-1,-7,-2 +-6,-1,8,3 +8,-1,5,-6 +5,0,5,2 +-4,8,0,-1 +-5,2,7,-3 +5,-2,-6,5 +4,-4,4,0 +-7,-1,-5,-5 +-8,-5,4,5 +4,-6,-8,3 +7,2,7,-5 +1,6,2,-3 +-3,3,-8,0 +1,-6,7,-3 +-5,8,6,-3 +-3,-2,-4,-6 +7,-7,-2,1 +5,4,-7,-1 +3,-4,-5,-1 +-1,-5,6,-1 +-8,4,-5,1 diff --git a/2018/inputs/3.txt b/2018/inputs/3.txt new file mode 100644 index 0000000..4701818 --- /dev/null +++ b/2018/inputs/3.txt @@ -0,0 +1,1385 @@ +#1 @ 342,645: 25x20 +#2 @ 124,968: 28x19 +#3 @ 680,765: 26x20 +#4 @ 832,699: 12x15 +#5 @ 4,746: 29x14 +#6 @ 926,115: 19x17 +#7 @ 662,587: 28x12 +#8 @ 532,568: 27x23 +#9 @ 860,23: 16x21 +#10 @ 530,562: 12x27 +#11 @ 15,254: 10x27 +#12 @ 375,611: 18x10 +#13 @ 357,389: 22x23 +#14 @ 483,392: 14x16 +#15 @ 426,705: 17x13 +#16 @ 273,918: 23x28 +#17 @ 873,722: 13x13 +#18 @ 429,749: 12x25 +#19 @ 701,937: 14x11 +#20 @ 89,231: 23x26 +#21 @ 704,220: 10x27 +#22 @ 481,847: 21x24 +#23 @ 9,378: 14x19 +#24 @ 682,442: 10x21 +#25 @ 242,63: 21x23 +#26 @ 748,871: 20x13 +#27 @ 784,338: 25x25 +#28 @ 966,669: 20x20 +#29 @ 589,833: 22x25 +#30 @ 489,489: 16x24 +#31 @ 976,478: 4x4 +#32 @ 739,826: 13x15 +#33 @ 783,753: 21x17 +#34 @ 433,367: 22x11 +#35 @ 32,841: 10x20 +#36 @ 258,497: 26x28 +#37 @ 632,776: 18x25 +#38 @ 517,389: 20x14 +#39 @ 446,740: 19x26 +#40 @ 667,455: 15x14 +#41 @ 664,252: 25x26 +#42 @ 227,45: 29x21 +#43 @ 127,138: 29x27 +#44 @ 466,308: 19x17 +#45 @ 356,134: 12x19 +#46 @ 609,640: 28x24 +#47 @ 677,228: 16x27 +#48 @ 149,610: 10x28 +#49 @ 863,498: 21x28 +#50 @ 913,511: 12x27 +#51 @ 748,761: 24x11 +#52 @ 802,288: 10x22 +#53 @ 26,442: 29x20 +#54 @ 85,464: 20x21 +#55 @ 262,944: 21x18 +#56 @ 876,753: 15x10 +#57 @ 105,199: 23x19 +#58 @ 335,848: 23x24 +#59 @ 467,537: 24x22 +#60 @ 552,217: 14x13 +#61 @ 534,820: 10x19 +#62 @ 261,579: 25x13 +#63 @ 541,445: 19x17 +#64 @ 869,769: 28x11 +#65 @ 447,668: 25x26 +#66 @ 42,734: 18x16 +#67 @ 553,233: 13x13 +#68 @ 47,861: 12x16 +#69 @ 33,834: 21x14 +#70 @ 240,174: 29x13 +#71 @ 611,362: 24x14 +#72 @ 899,371: 21x21 +#73 @ 340,5: 23x23 +#74 @ 69,246: 14x18 +#75 @ 432,558: 11x10 +#76 @ 737,175: 27x20 +#77 @ 623,365: 15x22 +#78 @ 666,453: 26x28 +#79 @ 368,774: 25x10 +#80 @ 923,879: 18x16 +#81 @ 37,315: 16x23 +#82 @ 119,279: 18x26 +#83 @ 928,850: 20x18 +#84 @ 896,902: 18x16 +#85 @ 332,590: 28x13 +#86 @ 902,815: 27x21 +#87 @ 215,508: 19x12 +#88 @ 981,57: 10x15 +#89 @ 706,393: 21x24 +#90 @ 975,369: 10x11 +#91 @ 635,845: 29x18 +#92 @ 831,543: 15x16 +#93 @ 296,865: 19x10 +#94 @ 889,189: 24x19 +#95 @ 59,749: 11x22 +#96 @ 739,946: 24x27 +#97 @ 536,759: 27x29 +#98 @ 982,234: 17x11 +#99 @ 639,615: 26x25 +#100 @ 867,397: 26x29 +#101 @ 881,784: 19x19 +#102 @ 215,912: 22x28 +#103 @ 127,336: 10x15 +#104 @ 313,729: 15x12 +#105 @ 695,74: 17x28 +#106 @ 748,187: 11x16 +#107 @ 809,2: 16x27 +#108 @ 891,192: 17x18 +#109 @ 72,920: 16x20 +#110 @ 41,967: 22x28 +#111 @ 91,733: 22x20 +#112 @ 464,641: 13x13 +#113 @ 464,860: 17x10 +#114 @ 623,106: 13x28 +#115 @ 358,85: 24x21 +#116 @ 774,944: 19x28 +#117 @ 752,587: 11x20 +#118 @ 635,103: 25x11 +#119 @ 498,36: 17x11 +#120 @ 227,659: 15x13 +#121 @ 924,553: 13x13 +#122 @ 775,297: 23x24 +#123 @ 479,866: 10x11 +#124 @ 387,798: 11x28 +#125 @ 526,847: 19x27 +#126 @ 747,861: 11x25 +#127 @ 789,652: 14x10 +#128 @ 419,7: 17x13 +#129 @ 356,142: 26x10 +#130 @ 436,239: 14x27 +#131 @ 555,710: 14x23 +#132 @ 871,447: 13x27 +#133 @ 473,730: 14x14 +#134 @ 558,170: 16x18 +#135 @ 888,882: 29x25 +#136 @ 834,147: 24x18 +#137 @ 721,467: 28x12 +#138 @ 223,105: 28x26 +#139 @ 285,326: 28x23 +#140 @ 584,300: 3x6 +#141 @ 710,754: 23x21 +#142 @ 283,892: 21x14 +#143 @ 448,894: 18x3 +#144 @ 380,479: 16x15 +#145 @ 703,57: 16x20 +#146 @ 692,448: 24x11 +#147 @ 926,350: 20x26 +#148 @ 167,528: 25x12 +#149 @ 444,722: 28x21 +#150 @ 166,183: 15x18 +#151 @ 546,472: 29x18 +#152 @ 532,900: 12x22 +#153 @ 215,490: 29x20 +#154 @ 678,458: 25x23 +#155 @ 601,462: 24x11 +#156 @ 484,514: 12x11 +#157 @ 863,763: 10x18 +#158 @ 653,452: 16x23 +#159 @ 464,302: 13x21 +#160 @ 868,65: 21x18 +#161 @ 227,824: 20x11 +#162 @ 111,629: 29x19 +#163 @ 55,554: 27x21 +#164 @ 0,757: 21x17 +#165 @ 418,861: 13x16 +#166 @ 932,903: 12x16 +#167 @ 429,772: 11x14 +#168 @ 706,805: 11x23 +#169 @ 487,24: 26x15 +#170 @ 806,900: 16x16 +#171 @ 580,719: 24x22 +#172 @ 458,481: 20x17 +#173 @ 343,488: 18x11 +#174 @ 734,342: 12x27 +#175 @ 320,439: 4x3 +#176 @ 446,635: 26x25 +#177 @ 552,683: 11x23 +#178 @ 181,168: 26x24 +#179 @ 851,583: 27x28 +#180 @ 879,363: 10x11 +#181 @ 884,139: 11x21 +#182 @ 912,88: 24x27 +#183 @ 52,35: 22x18 +#184 @ 657,705: 11x14 +#185 @ 370,777: 11x17 +#186 @ 801,354: 21x24 +#187 @ 773,546: 16x20 +#188 @ 888,322: 19x11 +#189 @ 807,788: 27x13 +#190 @ 465,956: 19x29 +#191 @ 369,770: 13x21 +#192 @ 311,137: 12x14 +#193 @ 148,150: 19x29 +#194 @ 389,613: 28x25 +#195 @ 429,373: 10x25 +#196 @ 892,148: 20x15 +#197 @ 890,271: 11x19 +#198 @ 58,861: 18x19 +#199 @ 449,255: 9x5 +#200 @ 257,887: 27x15 +#201 @ 383,616: 20x18 +#202 @ 663,657: 18x21 +#203 @ 331,648: 25x13 +#204 @ 509,53: 10x28 +#205 @ 86,287: 15x20 +#206 @ 753,190: 20x20 +#207 @ 922,527: 19x12 +#208 @ 132,948: 20x26 +#209 @ 883,786: 15x21 +#210 @ 117,592: 27x15 +#211 @ 960,611: 13x22 +#212 @ 829,769: 14x19 +#213 @ 669,686: 17x13 +#214 @ 276,787: 27x10 +#215 @ 619,909: 18x22 +#216 @ 418,209: 21x25 +#217 @ 231,831: 27x18 +#218 @ 336,538: 22x18 +#219 @ 180,783: 14x23 +#220 @ 609,263: 22x10 +#221 @ 360,982: 21x16 +#222 @ 775,813: 14x26 +#223 @ 906,198: 10x24 +#224 @ 937,144: 28x28 +#225 @ 475,903: 24x12 +#226 @ 887,149: 11x16 +#227 @ 927,259: 20x25 +#228 @ 71,862: 29x26 +#229 @ 136,954: 26x17 +#230 @ 721,827: 15x13 +#231 @ 769,931: 21x25 +#232 @ 728,119: 13x28 +#233 @ 654,942: 13x27 +#234 @ 434,737: 18x13 +#235 @ 672,331: 27x20 +#236 @ 816,17: 25x21 +#237 @ 251,781: 28x20 +#238 @ 342,209: 16x10 +#239 @ 581,434: 23x22 +#240 @ 782,100: 14x11 +#241 @ 878,831: 14x12 +#242 @ 667,233: 19x28 +#243 @ 237,650: 28x24 +#244 @ 425,738: 11x15 +#245 @ 936,470: 23x23 +#246 @ 68,321: 21x19 +#247 @ 356,539: 27x29 +#248 @ 945,353: 18x23 +#249 @ 906,933: 22x28 +#250 @ 360,812: 10x29 +#251 @ 884,774: 17x27 +#252 @ 413,769: 23x20 +#253 @ 594,75: 21x15 +#254 @ 676,702: 15x11 +#255 @ 233,529: 27x25 +#256 @ 173,236: 15x17 +#257 @ 907,949: 16x13 +#258 @ 809,570: 24x10 +#259 @ 67,678: 29x22 +#260 @ 176,951: 25x18 +#261 @ 754,625: 10x18 +#262 @ 142,270: 26x29 +#263 @ 558,673: 24x19 +#264 @ 224,27: 24x14 +#265 @ 725,829: 7x6 +#266 @ 703,941: 9x3 +#267 @ 880,864: 28x27 +#268 @ 727,445: 25x24 +#269 @ 747,520: 17x15 +#270 @ 850,410: 26x21 +#271 @ 363,964: 10x16 +#272 @ 752,721: 23x16 +#273 @ 295,351: 26x20 +#274 @ 899,877: 26x16 +#275 @ 95,804: 20x28 +#276 @ 543,866: 20x16 +#277 @ 917,887: 19x27 +#278 @ 449,474: 16x22 +#279 @ 673,459: 28x23 +#280 @ 971,786: 13x17 +#281 @ 42,176: 21x18 +#282 @ 531,886: 15x13 +#283 @ 679,438: 15x22 +#284 @ 161,659: 19x25 +#285 @ 838,148: 15x23 +#286 @ 496,732: 26x14 +#287 @ 482,256: 19x26 +#288 @ 389,941: 27x25 +#289 @ 352,255: 23x15 +#290 @ 825,688: 25x24 +#291 @ 894,313: 23x20 +#292 @ 906,553: 21x17 +#293 @ 293,130: 21x13 +#294 @ 549,80: 25x18 +#295 @ 85,871: 20x10 +#296 @ 876,734: 20x24 +#297 @ 831,935: 14x17 +#298 @ 618,819: 23x20 +#299 @ 750,70: 24x14 +#300 @ 749,711: 22x17 +#301 @ 555,801: 17x12 +#302 @ 544,64: 28x21 +#303 @ 114,413: 21x22 +#304 @ 215,526: 13x21 +#305 @ 147,31: 25x12 +#306 @ 679,427: 18x17 +#307 @ 634,930: 23x24 +#308 @ 41,419: 21x28 +#309 @ 892,162: 18x24 +#310 @ 812,886: 19x14 +#311 @ 440,700: 28x13 +#312 @ 586,832: 28x21 +#313 @ 255,687: 13x22 +#314 @ 945,879: 22x16 +#315 @ 480,731: 18x11 +#316 @ 738,731: 15x10 +#317 @ 528,621: 11x16 +#318 @ 243,787: 28x26 +#319 @ 512,493: 22x13 +#320 @ 762,692: 27x11 +#321 @ 316,57: 12x14 +#322 @ 410,860: 17x12 +#323 @ 772,591: 14x24 +#324 @ 813,221: 13x11 +#325 @ 161,271: 12x14 +#326 @ 520,597: 26x19 +#327 @ 577,129: 25x20 +#328 @ 448,31: 10x15 +#329 @ 594,33: 16x27 +#330 @ 170,498: 25x19 +#331 @ 882,833: 6x4 +#332 @ 190,548: 12x26 +#333 @ 639,879: 28x25 +#334 @ 473,817: 19x26 +#335 @ 543,458: 11x23 +#336 @ 676,657: 26x25 +#337 @ 786,353: 28x17 +#338 @ 873,508: 14x17 +#339 @ 208,782: 17x27 +#340 @ 392,542: 10x26 +#341 @ 672,650: 29x23 +#342 @ 446,637: 20x18 +#343 @ 534,58: 16x15 +#344 @ 696,760: 23x17 +#345 @ 265,767: 18x15 +#346 @ 105,750: 12x16 +#347 @ 731,438: 28x10 +#348 @ 535,833: 24x21 +#349 @ 72,531: 18x28 +#350 @ 640,734: 27x21 +#351 @ 156,265: 15x16 +#352 @ 227,299: 24x22 +#353 @ 552,492: 11x29 +#354 @ 605,95: 14x20 +#355 @ 665,490: 11x25 +#356 @ 456,289: 25x12 +#357 @ 876,516: 13x18 +#358 @ 26,163: 20x28 +#359 @ 228,769: 19x11 +#360 @ 766,766: 16x12 +#361 @ 167,654: 13x28 +#362 @ 728,185: 20x25 +#363 @ 321,340: 23x20 +#364 @ 327,175: 18x14 +#365 @ 83,860: 10x19 +#366 @ 361,177: 20x24 +#367 @ 282,505: 18x16 +#368 @ 780,44: 29x28 +#369 @ 854,406: 15x25 +#370 @ 142,928: 10x19 +#371 @ 114,594: 11x20 +#372 @ 775,78: 26x24 +#373 @ 264,791: 28x12 +#374 @ 789,217: 24x20 +#375 @ 931,559: 19x22 +#376 @ 523,549: 22x20 +#377 @ 744,356: 23x24 +#378 @ 630,746: 25x11 +#379 @ 339,201: 11x28 +#380 @ 777,698: 25x14 +#381 @ 198,933: 29x21 +#382 @ 222,919: 27x25 +#383 @ 356,648: 16x19 +#384 @ 237,915: 10x12 +#385 @ 10,864: 17x26 +#386 @ 494,808: 29x23 +#387 @ 440,547: 24x25 +#388 @ 688,247: 10x16 +#389 @ 95,580: 16x19 +#390 @ 374,8: 12x27 +#391 @ 287,332: 20x26 +#392 @ 453,940: 24x22 +#393 @ 344,878: 10x22 +#394 @ 541,277: 16x18 +#395 @ 965,360: 24x12 +#396 @ 280,878: 21x20 +#397 @ 680,384: 25x19 +#398 @ 670,76: 12x12 +#399 @ 540,457: 18x20 +#400 @ 524,406: 17x16 +#401 @ 625,272: 25x22 +#402 @ 100,906: 26x12 +#403 @ 281,871: 7x10 +#404 @ 275,849: 21x26 +#405 @ 357,559: 13x13 +#406 @ 918,753: 25x21 +#407 @ 270,837: 25x17 +#408 @ 780,84: 20x20 +#409 @ 503,893: 11x13 +#410 @ 154,609: 12x23 +#411 @ 871,739: 21x22 +#412 @ 529,698: 27x27 +#413 @ 376,844: 14x23 +#414 @ 498,876: 13x21 +#415 @ 893,958: 15x27 +#416 @ 635,498: 20x20 +#417 @ 571,884: 24x21 +#418 @ 336,586: 24x24 +#419 @ 0,206: 29x16 +#420 @ 655,64: 24x11 +#421 @ 436,648: 28x16 +#422 @ 952,593: 17x11 +#423 @ 643,6: 17x18 +#424 @ 224,166: 29x11 +#425 @ 818,905: 15x14 +#426 @ 18,863: 18x11 +#427 @ 497,902: 15x10 +#428 @ 564,545: 16x29 +#429 @ 657,446: 18x20 +#430 @ 245,25: 17x11 +#431 @ 936,346: 23x24 +#432 @ 127,152: 24x19 +#433 @ 563,928: 19x27 +#434 @ 684,407: 27x13 +#435 @ 737,584: 15x15 +#436 @ 644,837: 16x14 +#437 @ 702,978: 20x15 +#438 @ 422,65: 11x16 +#439 @ 121,142: 13x20 +#440 @ 68,437: 19x16 +#441 @ 121,382: 24x28 +#442 @ 805,910: 29x14 +#443 @ 795,432: 21x20 +#444 @ 269,735: 25x22 +#445 @ 226,877: 11x17 +#446 @ 550,450: 29x18 +#447 @ 606,726: 14x25 +#448 @ 46,546: 10x19 +#449 @ 320,95: 11x25 +#450 @ 935,419: 12x15 +#451 @ 453,862: 13x16 +#452 @ 315,500: 23x12 +#453 @ 181,127: 17x18 +#454 @ 243,907: 19x13 +#455 @ 263,960: 29x22 +#456 @ 509,159: 14x17 +#457 @ 486,810: 23x21 +#458 @ 560,945: 25x13 +#459 @ 6,400: 24x28 +#460 @ 368,783: 17x23 +#461 @ 75,792: 26x29 +#462 @ 543,395: 22x23 +#463 @ 47,464: 19x10 +#464 @ 342,494: 27x24 +#465 @ 911,861: 19x25 +#466 @ 94,272: 23x23 +#467 @ 420,516: 15x26 +#468 @ 146,233: 20x27 +#469 @ 201,907: 10x23 +#470 @ 446,887: 23x16 +#471 @ 468,702: 14x27 +#472 @ 799,865: 23x25 +#473 @ 451,242: 27x20 +#474 @ 915,801: 28x27 +#475 @ 471,445: 23x16 +#476 @ 381,751: 26x28 +#477 @ 903,539: 23x21 +#478 @ 621,280: 13x26 +#479 @ 658,132: 27x19 +#480 @ 136,639: 22x26 +#481 @ 24,185: 22x23 +#482 @ 732,779: 25x25 +#483 @ 760,858: 20x22 +#484 @ 24,408: 26x19 +#485 @ 457,627: 20x16 +#486 @ 353,284: 20x10 +#487 @ 920,899: 10x3 +#488 @ 436,694: 11x17 +#489 @ 849,162: 17x16 +#490 @ 786,236: 27x20 +#491 @ 709,245: 11x28 +#492 @ 462,389: 13x17 +#493 @ 738,88: 27x21 +#494 @ 111,617: 24x24 +#495 @ 896,764: 11x23 +#496 @ 473,321: 23x16 +#497 @ 589,67: 17x16 +#498 @ 183,298: 18x17 +#499 @ 557,675: 10x11 +#500 @ 875,298: 21x17 +#501 @ 128,420: 18x25 +#502 @ 158,17: 27x26 +#503 @ 966,380: 13x29 +#504 @ 571,449: 15x28 +#505 @ 968,404: 12x27 +#506 @ 722,350: 10x24 +#507 @ 247,595: 17x25 +#508 @ 65,734: 22x21 +#509 @ 411,715: 25x12 +#510 @ 123,742: 15x12 +#511 @ 439,687: 19x12 +#512 @ 829,932: 12x13 +#513 @ 893,146: 23x19 +#514 @ 861,131: 15x23 +#515 @ 551,85: 20x7 +#516 @ 957,437: 22x17 +#517 @ 777,65: 22x24 +#518 @ 638,851: 24x21 +#519 @ 116,492: 12x29 +#520 @ 187,785: 3x18 +#521 @ 791,56: 17x27 +#522 @ 406,108: 28x28 +#523 @ 695,252: 21x16 +#524 @ 498,247: 24x17 +#525 @ 301,235: 19x27 +#526 @ 14,173: 13x10 +#527 @ 116,587: 11x29 +#528 @ 170,247: 18x22 +#529 @ 714,745: 20x23 +#530 @ 682,474: 27x19 +#531 @ 838,605: 23x22 +#532 @ 684,330: 20x18 +#533 @ 754,852: 27x25 +#534 @ 885,197: 24x26 +#535 @ 97,256: 16x18 +#536 @ 604,669: 20x19 +#537 @ 612,14: 18x29 +#538 @ 278,738: 8x14 +#539 @ 102,976: 13x15 +#540 @ 50,860: 16x12 +#541 @ 574,411: 16x22 +#542 @ 124,894: 26x20 +#543 @ 848,521: 25x25 +#544 @ 271,287: 25x27 +#545 @ 253,656: 21x16 +#546 @ 547,979: 18x11 +#547 @ 444,332: 12x26 +#548 @ 106,753: 15x16 +#549 @ 886,615: 14x15 +#550 @ 549,216: 27x24 +#551 @ 481,720: 23x13 +#552 @ 505,7: 17x22 +#553 @ 539,106: 28x27 +#554 @ 395,174: 24x12 +#555 @ 547,490: 10x22 +#556 @ 950,79: 21x12 +#557 @ 529,817: 12x23 +#558 @ 40,270: 19x24 +#559 @ 556,127: 25x14 +#560 @ 407,39: 16x26 +#561 @ 130,852: 29x14 +#562 @ 144,368: 27x22 +#563 @ 980,174: 18x22 +#564 @ 285,98: 16x24 +#565 @ 648,686: 16x26 +#566 @ 361,487: 21x16 +#567 @ 471,380: 23x14 +#568 @ 167,331: 23x25 +#569 @ 768,773: 14x16 +#570 @ 328,13: 29x15 +#571 @ 444,697: 14x17 +#572 @ 215,301: 27x27 +#573 @ 238,207: 23x14 +#574 @ 252,346: 21x20 +#575 @ 910,272: 11x18 +#576 @ 751,833: 18x13 +#577 @ 781,221: 10x17 +#578 @ 538,775: 14x26 +#579 @ 982,705: 11x21 +#580 @ 205,805: 25x27 +#581 @ 948,713: 21x12 +#582 @ 647,249: 11x20 +#583 @ 841,156: 19x21 +#584 @ 401,835: 13x28 +#585 @ 637,819: 24x12 +#586 @ 286,241: 19x23 +#587 @ 661,878: 15x24 +#588 @ 115,774: 19x14 +#589 @ 353,655: 22x14 +#590 @ 838,616: 25x23 +#591 @ 573,395: 28x27 +#592 @ 321,67: 26x13 +#593 @ 371,931: 17x19 +#594 @ 765,719: 24x10 +#595 @ 595,574: 21x21 +#596 @ 346,497: 10x16 +#597 @ 67,869: 16x19 +#598 @ 133,284: 10x25 +#599 @ 464,174: 20x25 +#600 @ 613,82: 29x28 +#601 @ 98,519: 27x12 +#602 @ 896,934: 14x17 +#603 @ 645,205: 23x23 +#604 @ 810,96: 9x15 +#605 @ 91,464: 14x23 +#606 @ 798,67: 18x21 +#607 @ 560,243: 27x20 +#608 @ 486,52: 14x12 +#609 @ 623,174: 11x20 +#610 @ 203,404: 10x14 +#611 @ 927,293: 12x10 +#612 @ 457,860: 26x14 +#613 @ 690,648: 13x15 +#614 @ 673,615: 23x22 +#615 @ 399,718: 16x14 +#616 @ 309,695: 23x17 +#617 @ 881,450: 10x24 +#618 @ 879,295: 12x29 +#619 @ 914,865: 5x4 +#620 @ 692,653: 28x26 +#621 @ 468,183: 19x11 +#622 @ 487,258: 13x25 +#623 @ 458,724: 13x16 +#624 @ 793,416: 28x23 +#625 @ 804,843: 28x13 +#626 @ 345,711: 15x20 +#627 @ 679,461: 28x23 +#628 @ 652,655: 20x20 +#629 @ 330,343: 12x13 +#630 @ 919,801: 16x11 +#631 @ 974,473: 10x28 +#632 @ 112,537: 11x18 +#633 @ 680,494: 23x25 +#634 @ 307,283: 16x28 +#635 @ 904,314: 11x25 +#636 @ 718,778: 12x22 +#637 @ 30,550: 23x25 +#638 @ 146,964: 14x18 +#639 @ 167,242: 28x19 +#640 @ 228,443: 17x15 +#641 @ 914,547: 10x15 +#642 @ 931,708: 23x23 +#643 @ 105,180: 16x10 +#644 @ 455,283: 14x16 +#645 @ 491,723: 28x17 +#646 @ 618,6: 17x27 +#647 @ 635,361: 24x25 +#648 @ 883,585: 26x16 +#649 @ 131,346: 17x26 +#650 @ 78,25: 22x12 +#651 @ 611,643: 28x22 +#652 @ 647,114: 15x23 +#653 @ 229,550: 21x28 +#654 @ 190,124: 15x14 +#655 @ 903,330: 13x16 +#656 @ 750,722: 20x19 +#657 @ 26,456: 25x13 +#658 @ 414,283: 16x16 +#659 @ 940,221: 28x25 +#660 @ 585,932: 20x18 +#661 @ 96,398: 20x17 +#662 @ 371,915: 12x19 +#663 @ 819,706: 22x25 +#664 @ 347,500: 15x9 +#665 @ 275,85: 24x10 +#666 @ 435,743: 26x26 +#667 @ 535,568: 22x20 +#668 @ 46,389: 17x25 +#669 @ 584,880: 24x18 +#670 @ 630,266: 18x18 +#671 @ 431,377: 26x14 +#672 @ 559,677: 4x3 +#673 @ 701,439: 16x14 +#674 @ 829,446: 20x11 +#675 @ 555,565: 20x13 +#676 @ 917,846: 14x17 +#677 @ 593,676: 18x16 +#678 @ 542,798: 20x19 +#679 @ 6,372: 24x29 +#680 @ 578,809: 24x24 +#681 @ 64,522: 11x4 +#682 @ 591,896: 13x26 +#683 @ 932,572: 11x25 +#684 @ 867,131: 27x19 +#685 @ 495,889: 23x22 +#686 @ 367,827: 21x13 +#687 @ 232,45: 18x28 +#688 @ 704,711: 11x27 +#689 @ 309,517: 23x13 +#690 @ 429,199: 17x11 +#691 @ 717,52: 20x15 +#692 @ 912,877: 27x25 +#693 @ 447,764: 16x11 +#694 @ 799,769: 28x22 +#695 @ 361,912: 27x26 +#696 @ 891,829: 10x28 +#697 @ 233,895: 20x23 +#698 @ 806,276: 16x13 +#699 @ 377,966: 21x18 +#700 @ 792,875: 20x22 +#701 @ 255,807: 18x19 +#702 @ 634,238: 15x26 +#703 @ 492,519: 13x24 +#704 @ 953,632: 19x26 +#705 @ 684,587: 10x17 +#706 @ 391,424: 16x17 +#707 @ 654,158: 14x27 +#708 @ 118,638: 23x11 +#709 @ 302,282: 17x13 +#710 @ 662,54: 14x19 +#711 @ 909,835: 14x23 +#712 @ 558,971: 18x11 +#713 @ 90,774: 11x28 +#714 @ 745,346: 15x11 +#715 @ 488,860: 22x14 +#716 @ 848,568: 26x23 +#717 @ 6,625: 28x25 +#718 @ 34,388: 15x18 +#719 @ 965,778: 23x24 +#720 @ 103,500: 20x18 +#721 @ 506,222: 29x17 +#722 @ 226,197: 24x25 +#723 @ 129,939: 15x25 +#724 @ 140,644: 11x18 +#725 @ 905,904: 20x25 +#726 @ 423,276: 13x12 +#727 @ 62,511: 17x24 +#728 @ 932,814: 19x26 +#729 @ 9,810: 11x26 +#730 @ 32,624: 16x20 +#731 @ 967,236: 28x18 +#732 @ 616,948: 27x12 +#733 @ 714,733: 15x17 +#734 @ 277,783: 25x24 +#735 @ 482,675: 16x12 +#736 @ 862,11: 19x26 +#737 @ 667,668: 27x15 +#738 @ 131,406: 13x28 +#739 @ 707,788: 26x27 +#740 @ 859,505: 21x21 +#741 @ 968,785: 4x6 +#742 @ 813,939: 11x27 +#743 @ 611,781: 28x17 +#744 @ 298,82: 28x27 +#745 @ 352,828: 16x27 +#746 @ 920,831: 20x23 +#747 @ 967,694: 19x29 +#748 @ 370,50: 25x18 +#749 @ 545,724: 13x16 +#750 @ 102,391: 13x22 +#751 @ 904,122: 22x19 +#752 @ 118,439: 23x10 +#753 @ 793,859: 23x27 +#754 @ 722,798: 27x29 +#755 @ 97,774: 24x10 +#756 @ 326,707: 26x14 +#757 @ 559,909: 28x14 +#758 @ 33,822: 29x21 +#759 @ 508,227: 24x7 +#760 @ 115,427: 26x16 +#761 @ 665,766: 27x25 +#762 @ 303,847: 19x28 +#763 @ 157,535: 19x12 +#764 @ 968,680: 18x10 +#765 @ 668,464: 20x9 +#766 @ 114,534: 27x10 +#767 @ 841,609: 17x21 +#768 @ 972,671: 20x13 +#769 @ 490,506: 27x18 +#770 @ 0,407: 13x26 +#771 @ 626,219: 11x14 +#772 @ 174,512: 12x24 +#773 @ 162,251: 10x18 +#774 @ 612,206: 11x25 +#775 @ 97,517: 11x10 +#776 @ 31,916: 11x17 +#777 @ 261,148: 17x16 +#778 @ 815,577: 26x24 +#779 @ 545,521: 29x23 +#780 @ 842,800: 25x23 +#781 @ 391,437: 23x20 +#782 @ 333,886: 20x14 +#783 @ 109,171: 11x14 +#784 @ 344,483: 28x16 +#785 @ 581,195: 15x24 +#786 @ 608,372: 12x13 +#787 @ 740,279: 14x18 +#788 @ 653,626: 27x22 +#789 @ 308,182: 24x20 +#790 @ 899,219: 16x12 +#791 @ 515,556: 21x11 +#792 @ 171,0: 18x29 +#793 @ 204,304: 27x14 +#794 @ 488,289: 25x25 +#795 @ 479,382: 14x18 +#796 @ 626,889: 25x11 +#797 @ 604,948: 16x10 +#798 @ 182,277: 21x18 +#799 @ 623,205: 24x20 +#800 @ 720,654: 11x25 +#801 @ 731,103: 26x17 +#802 @ 829,581: 14x25 +#803 @ 431,738: 17x29 +#804 @ 524,620: 15x12 +#805 @ 512,539: 23x23 +#806 @ 829,943: 29x18 +#807 @ 93,176: 13x26 +#808 @ 883,796: 12x12 +#809 @ 214,543: 28x16 +#810 @ 518,231: 15x14 +#811 @ 213,502: 21x20 +#812 @ 255,598: 10x22 +#813 @ 352,477: 24x16 +#814 @ 664,653: 15x20 +#815 @ 741,338: 28x26 +#816 @ 361,174: 25x22 +#817 @ 101,582: 14x27 +#818 @ 237,103: 13x12 +#819 @ 814,157: 20x17 +#820 @ 182,216: 28x21 +#821 @ 194,282: 17x18 +#822 @ 247,657: 20x14 +#823 @ 0,647: 14x29 +#824 @ 899,959: 12x23 +#825 @ 151,90: 20x20 +#826 @ 341,562: 25x22 +#827 @ 895,137: 28x18 +#828 @ 853,703: 16x11 +#829 @ 8,934: 11x17 +#830 @ 395,528: 28x13 +#831 @ 874,122: 13x28 +#832 @ 605,187: 19x17 +#833 @ 684,219: 24x24 +#834 @ 382,885: 13x21 +#835 @ 751,858: 19x21 +#836 @ 518,38: 11x27 +#837 @ 812,383: 21x28 +#838 @ 904,886: 21x19 +#839 @ 356,751: 25x24 +#840 @ 586,554: 28x20 +#841 @ 98,582: 10x25 +#842 @ 438,552: 11x21 +#843 @ 231,601: 20x20 +#844 @ 906,176: 11x21 +#845 @ 237,52: 12x23 +#846 @ 81,19: 15x21 +#847 @ 600,731: 19x14 +#848 @ 553,43: 10x22 +#849 @ 703,825: 14x21 +#850 @ 193,283: 10x26 +#851 @ 73,407: 22x26 +#852 @ 226,602: 25x21 +#853 @ 515,223: 26x15 +#854 @ 95,363: 28x13 +#855 @ 927,2: 28x22 +#856 @ 457,470: 16x13 +#857 @ 67,23: 24x14 +#858 @ 435,244: 10x16 +#859 @ 640,450: 29x22 +#860 @ 385,778: 16x23 +#861 @ 734,157: 23x25 +#862 @ 516,727: 11x15 +#863 @ 488,733: 16x12 +#864 @ 83,719: 19x21 +#865 @ 530,287: 15x15 +#866 @ 729,671: 24x16 +#867 @ 240,320: 26x18 +#868 @ 311,583: 13x24 +#869 @ 224,956: 10x13 +#870 @ 662,482: 17x14 +#871 @ 533,896: 12x17 +#872 @ 844,440: 10x26 +#873 @ 104,625: 16x11 +#874 @ 632,431: 25x17 +#875 @ 735,292: 22x24 +#876 @ 74,625: 22x24 +#877 @ 752,738: 24x25 +#878 @ 599,594: 18x10 +#879 @ 220,951: 15x26 +#880 @ 339,67: 14x19 +#881 @ 856,704: 15x22 +#882 @ 829,158: 10x13 +#883 @ 823,838: 27x11 +#884 @ 368,952: 10x15 +#885 @ 32,281: 23x28 +#886 @ 700,84: 11x26 +#887 @ 800,342: 23x9 +#888 @ 392,728: 18x10 +#889 @ 488,802: 22x26 +#890 @ 206,785: 18x25 +#891 @ 411,294: 24x11 +#892 @ 566,932: 24x10 +#893 @ 529,409: 15x17 +#894 @ 477,549: 24x24 +#895 @ 816,957: 14x22 +#896 @ 256,719: 23x20 +#897 @ 860,304: 15x16 +#898 @ 881,268: 27x10 +#899 @ 470,387: 17x10 +#900 @ 173,25: 24x13 +#901 @ 144,28: 26x16 +#902 @ 685,372: 14x23 +#903 @ 695,681: 22x14 +#904 @ 748,874: 29x22 +#905 @ 897,765: 18x17 +#906 @ 880,756: 24x12 +#907 @ 627,112: 24x18 +#908 @ 655,479: 16x11 +#909 @ 392,560: 15x16 +#910 @ 61,740: 23x20 +#911 @ 696,232: 11x20 +#912 @ 452,30: 11x24 +#913 @ 581,289: 16x23 +#914 @ 786,561: 16x19 +#915 @ 774,346: 23x28 +#916 @ 537,171: 25x11 +#917 @ 326,723: 11x27 +#918 @ 224,914: 17x16 +#919 @ 906,176: 25x18 +#920 @ 878,572: 27x25 +#921 @ 391,561: 19x27 +#922 @ 715,976: 19x12 +#923 @ 275,748: 23x19 +#924 @ 381,802: 10x14 +#925 @ 940,217: 24x23 +#926 @ 741,53: 27x15 +#927 @ 104,445: 16x18 +#928 @ 519,127: 27x20 +#929 @ 445,598: 23x21 +#930 @ 126,601: 29x13 +#931 @ 658,225: 24x19 +#932 @ 920,952: 26x23 +#933 @ 110,776: 16x14 +#934 @ 896,945: 24x14 +#935 @ 733,125: 11x17 +#936 @ 849,555: 23x17 +#937 @ 376,546: 24x18 +#938 @ 153,930: 24x24 +#939 @ 470,855: 22x21 +#940 @ 45,321: 27x10 +#941 @ 773,553: 26x14 +#942 @ 749,180: 12x14 +#943 @ 736,631: 28x26 +#944 @ 737,871: 11x14 +#945 @ 447,253: 14x11 +#946 @ 825,628: 27x26 +#947 @ 749,435: 11x20 +#948 @ 919,271: 10x14 +#949 @ 556,558: 10x14 +#950 @ 258,595: 14x28 +#951 @ 324,858: 12x15 +#952 @ 54,735: 24x20 +#953 @ 718,354: 25x10 +#954 @ 954,20: 22x17 +#955 @ 625,176: 15x28 +#956 @ 828,374: 26x14 +#957 @ 946,677: 29x25 +#958 @ 94,678: 12x26 +#959 @ 657,251: 16x22 +#960 @ 537,124: 26x14 +#961 @ 893,609: 14x11 +#962 @ 131,596: 12x13 +#963 @ 436,44: 18x17 +#964 @ 359,651: 18x21 +#965 @ 427,288: 29x14 +#966 @ 521,545: 13x22 +#967 @ 558,231: 17x28 +#968 @ 179,334: 26x28 +#969 @ 801,166: 20x29 +#970 @ 542,41: 25x27 +#971 @ 545,606: 24x29 +#972 @ 278,868: 20x17 +#973 @ 46,956: 16x25 +#974 @ 62,784: 26x15 +#975 @ 346,55: 13x26 +#976 @ 772,213: 22x28 +#977 @ 581,146: 29x17 +#978 @ 283,845: 16x13 +#979 @ 961,683: 19x13 +#980 @ 968,686: 25x17 +#981 @ 637,18: 29x22 +#982 @ 558,932: 24x10 +#983 @ 376,193: 26x10 +#984 @ 884,430: 15x10 +#985 @ 317,13: 21x18 +#986 @ 568,56: 28x13 +#987 @ 661,718: 25x15 +#988 @ 715,672: 20x20 +#989 @ 861,782: 17x26 +#990 @ 455,852: 12x25 +#991 @ 889,802: 17x11 +#992 @ 879,106: 25x23 +#993 @ 867,347: 15x21 +#994 @ 924,422: 18x10 +#995 @ 814,942: 18x29 +#996 @ 84,858: 12x22 +#997 @ 581,427: 28x24 +#998 @ 247,182: 27x21 +#999 @ 971,182: 23x21 +#1000 @ 978,776: 11x17 +#1001 @ 1,786: 13x26 +#1002 @ 977,224: 20x25 +#1003 @ 576,413: 12x12 +#1004 @ 892,182: 23x11 +#1005 @ 680,350: 26x15 +#1006 @ 489,881: 21x15 +#1007 @ 900,891: 21x17 +#1008 @ 591,883: 12x22 +#1009 @ 826,602: 14x24 +#1010 @ 366,486: 23x22 +#1011 @ 711,115: 19x19 +#1012 @ 707,116: 27x10 +#1013 @ 826,817: 27x19 +#1014 @ 315,770: 14x11 +#1015 @ 296,676: 21x26 +#1016 @ 713,373: 19x18 +#1017 @ 7,925: 28x26 +#1018 @ 821,893: 26x19 +#1019 @ 679,85: 28x11 +#1020 @ 2,802: 27x12 +#1021 @ 335,491: 27x22 +#1022 @ 299,337: 12x21 +#1023 @ 804,708: 20x18 +#1024 @ 903,888: 26x19 +#1025 @ 264,744: 29x26 +#1026 @ 813,823: 18x29 +#1027 @ 757,36: 12x18 +#1028 @ 589,217: 14x29 +#1029 @ 761,553: 16x15 +#1030 @ 632,430: 10x13 +#1031 @ 855,795: 28x27 +#1032 @ 93,625: 15x26 +#1033 @ 139,934: 19x20 +#1034 @ 561,850: 12x17 +#1035 @ 834,159: 23x13 +#1036 @ 479,845: 29x16 +#1037 @ 767,935: 10x29 +#1038 @ 506,816: 18x17 +#1039 @ 670,548: 25x22 +#1040 @ 415,58: 14x27 +#1041 @ 943,188: 12x26 +#1042 @ 7,381: 22x17 +#1043 @ 674,568: 12x17 +#1044 @ 410,2: 12x10 +#1045 @ 685,688: 13x23 +#1046 @ 609,566: 18x10 +#1047 @ 484,48: 29x22 +#1048 @ 676,659: 27x14 +#1049 @ 0,812: 12x28 +#1050 @ 282,572: 20x23 +#1051 @ 898,860: 17x25 +#1052 @ 892,949: 14x20 +#1053 @ 580,906: 14x16 +#1054 @ 65,234: 20x19 +#1055 @ 856,479: 10x24 +#1056 @ 475,143: 13x13 +#1057 @ 822,556: 14x27 +#1058 @ 970,678: 22x16 +#1059 @ 488,191: 19x10 +#1060 @ 843,298: 23x10 +#1061 @ 686,225: 17x12 +#1062 @ 224,784: 24x19 +#1063 @ 104,978: 6x10 +#1064 @ 809,756: 29x23 +#1065 @ 851,756: 28x21 +#1066 @ 144,943: 13x26 +#1067 @ 491,667: 10x27 +#1068 @ 383,574: 29x19 +#1069 @ 525,485: 13x11 +#1070 @ 494,721: 21x14 +#1071 @ 670,473: 16x16 +#1072 @ 923,103: 20x23 +#1073 @ 425,367: 27x11 +#1074 @ 975,667: 18x23 +#1075 @ 607,94: 16x25 +#1076 @ 29,617: 10x14 +#1077 @ 741,763: 27x15 +#1078 @ 907,281: 24x21 +#1079 @ 527,545: 21x24 +#1080 @ 751,599: 26x28 +#1081 @ 129,945: 10x28 +#1082 @ 545,718: 17x21 +#1083 @ 833,143: 14x23 +#1084 @ 678,337: 13x22 +#1085 @ 450,473: 10x20 +#1086 @ 883,388: 17x28 +#1087 @ 865,314: 16x21 +#1088 @ 861,408: 20x22 +#1089 @ 582,264: 15x26 +#1090 @ 612,913: 10x11 +#1091 @ 868,575: 11x15 +#1092 @ 854,596: 14x18 +#1093 @ 551,232: 22x24 +#1094 @ 675,898: 24x10 +#1095 @ 70,425: 12x16 +#1096 @ 325,763: 29x19 +#1097 @ 907,855: 16x21 +#1098 @ 770,817: 11x25 +#1099 @ 370,788: 20x22 +#1100 @ 883,426: 22x13 +#1101 @ 718,42: 10x23 +#1102 @ 670,568: 19x28 +#1103 @ 556,702: 23x27 +#1104 @ 224,245: 17x19 +#1105 @ 861,50: 18x25 +#1106 @ 840,622: 21x16 +#1107 @ 827,711: 13x21 +#1108 @ 211,46: 12x16 +#1109 @ 243,918: 19x19 +#1110 @ 855,323: 17x14 +#1111 @ 409,758: 27x24 +#1112 @ 337,193: 26x24 +#1113 @ 272,288: 12x26 +#1114 @ 197,340: 22x21 +#1115 @ 950,574: 16x21 +#1116 @ 311,508: 27x13 +#1117 @ 798,339: 29x17 +#1118 @ 892,173: 10x15 +#1119 @ 779,604: 11x12 +#1120 @ 225,818: 13x15 +#1121 @ 784,25: 19x11 +#1122 @ 88,25: 25x27 +#1123 @ 246,755: 25x28 +#1124 @ 239,175: 26x24 +#1125 @ 398,547: 18x23 +#1126 @ 756,193: 29x25 +#1127 @ 96,680: 4x20 +#1128 @ 916,826: 20x12 +#1129 @ 457,578: 29x29 +#1130 @ 91,576: 23x27 +#1131 @ 618,39: 29x18 +#1132 @ 621,960: 25x21 +#1133 @ 275,936: 14x27 +#1134 @ 130,144: 29x16 +#1135 @ 400,747: 15x29 +#1136 @ 619,221: 20x15 +#1137 @ 734,169: 17x11 +#1138 @ 359,635: 18x16 +#1139 @ 244,349: 29x22 +#1140 @ 202,270: 14x29 +#1141 @ 461,556: 29x28 +#1142 @ 503,155: 24x21 +#1143 @ 857,610: 18x15 +#1144 @ 660,592: 29x27 +#1145 @ 218,446: 12x13 +#1146 @ 149,850: 28x14 +#1147 @ 564,679: 16x11 +#1148 @ 709,112: 28x22 +#1149 @ 465,713: 17x19 +#1150 @ 36,827: 17x21 +#1151 @ 755,284: 14x29 +#1152 @ 313,74: 12x28 +#1153 @ 371,863: 25x26 +#1154 @ 908,817: 10x28 +#1155 @ 561,136: 17x13 +#1156 @ 449,55: 25x14 +#1157 @ 229,617: 18x11 +#1158 @ 841,529: 23x27 +#1159 @ 946,219: 4x17 +#1160 @ 255,612: 15x28 +#1161 @ 617,908: 28x23 +#1162 @ 830,821: 10x15 +#1163 @ 936,168: 15x27 +#1164 @ 275,84: 11x24 +#1165 @ 182,337: 22x18 +#1166 @ 722,642: 17x19 +#1167 @ 120,542: 20x22 +#1168 @ 377,916: 20x26 +#1169 @ 407,724: 25x10 +#1170 @ 380,470: 23x27 +#1171 @ 235,732: 28x15 +#1172 @ 485,445: 19x21 +#1173 @ 8,248: 11x10 +#1174 @ 96,594: 28x10 +#1175 @ 417,110: 13x17 +#1176 @ 316,128: 15x28 +#1177 @ 895,164: 11x10 +#1178 @ 720,148: 28x22 +#1179 @ 932,807: 13x25 +#1180 @ 615,487: 23x12 +#1181 @ 291,846: 21x21 +#1182 @ 931,467: 13x21 +#1183 @ 766,736: 27x13 +#1184 @ 345,728: 19x12 +#1185 @ 781,161: 17x27 +#1186 @ 262,891: 15x25 +#1187 @ 219,755: 12x20 +#1188 @ 681,109: 23x11 +#1189 @ 941,959: 29x16 +#1190 @ 800,13: 23x25 +#1191 @ 51,902: 28x24 +#1192 @ 261,704: 18x12 +#1193 @ 63,438: 20x17 +#1194 @ 428,339: 22x23 +#1195 @ 732,860: 18x25 +#1196 @ 132,750: 23x12 +#1197 @ 771,59: 26x18 +#1198 @ 19,322: 24x17 +#1199 @ 558,119: 11x22 +#1200 @ 213,33: 13x14 +#1201 @ 746,843: 13x12 +#1202 @ 607,223: 15x25 +#1203 @ 744,185: 13x16 +#1204 @ 896,863: 14x11 +#1205 @ 781,653: 20x16 +#1206 @ 519,411: 14x10 +#1207 @ 587,708: 27x14 +#1208 @ 353,41: 29x16 +#1209 @ 555,555: 14x11 +#1210 @ 408,553: 25x22 +#1211 @ 639,190: 27x29 +#1212 @ 149,88: 12x27 +#1213 @ 988,44: 10x20 +#1214 @ 617,812: 26x19 +#1215 @ 308,435: 25x12 +#1216 @ 629,405: 11x29 +#1217 @ 732,761: 11x25 +#1218 @ 802,229: 16x17 +#1219 @ 302,310: 28x26 +#1220 @ 918,368: 16x10 +#1221 @ 66,423: 12x16 +#1222 @ 917,267: 23x28 +#1223 @ 601,956: 3x10 +#1224 @ 653,919: 14x24 +#1225 @ 144,271: 20x16 +#1226 @ 508,421: 27x15 +#1227 @ 519,505: 18x11 +#1228 @ 530,385: 12x13 +#1229 @ 665,446: 18x16 +#1230 @ 520,399: 19x25 +#1231 @ 637,653: 22x29 +#1232 @ 583,956: 14x11 +#1233 @ 484,567: 23x21 +#1234 @ 216,301: 17x12 +#1235 @ 691,507: 12x17 +#1236 @ 854,476: 12x11 +#1237 @ 64,49: 11x16 +#1238 @ 863,564: 16x10 +#1239 @ 360,381: 16x17 +#1240 @ 925,888: 10x18 +#1241 @ 665,330: 12x18 +#1242 @ 228,601: 16x13 +#1243 @ 574,908: 17x13 +#1244 @ 597,953: 14x20 +#1245 @ 954,866: 17x19 +#1246 @ 791,870: 14x12 +#1247 @ 667,476: 13x28 +#1248 @ 662,488: 10x12 +#1249 @ 497,34: 10x27 +#1250 @ 110,132: 22x24 +#1251 @ 177,93: 4x11 +#1252 @ 721,114: 10x20 +#1253 @ 476,376: 21x27 +#1254 @ 384,888: 6x14 +#1255 @ 698,514: 16x26 +#1256 @ 779,308: 16x11 +#1257 @ 701,777: 26x22 +#1258 @ 933,733: 15x26 +#1259 @ 934,70: 24x26 +#1260 @ 72,787: 22x27 +#1261 @ 449,652: 18x15 +#1262 @ 425,558: 16x22 +#1263 @ 622,445: 15x16 +#1264 @ 157,175: 20x23 +#1265 @ 887,212: 21x21 +#1266 @ 514,490: 16x20 +#1267 @ 368,488: 4x6 +#1268 @ 797,41: 18x27 +#1269 @ 91,685: 22x23 +#1270 @ 277,115: 27x28 +#1271 @ 297,360: 27x20 +#1272 @ 195,559: 3x11 +#1273 @ 719,686: 23x10 +#1274 @ 397,818: 29x15 +#1275 @ 487,267: 27x10 +#1276 @ 711,388: 20x18 +#1277 @ 309,496: 27x27 +#1278 @ 414,173: 29x11 +#1279 @ 857,568: 12x18 +#1280 @ 165,155: 19x28 +#1281 @ 656,714: 12x26 +#1282 @ 255,921: 3x12 +#1283 @ 276,163: 12x14 +#1284 @ 634,812: 16x29 +#1285 @ 340,248: 23x23 +#1286 @ 193,268: 12x10 +#1287 @ 383,629: 21x26 +#1288 @ 933,297: 8x16 +#1289 @ 613,167: 13x25 +#1290 @ 852,118: 15x25 +#1291 @ 661,343: 11x20 +#1292 @ 827,119: 14x28 +#1293 @ 636,46: 27x11 +#1294 @ 629,202: 11x15 +#1295 @ 361,286: 18x23 +#1296 @ 539,925: 10x26 +#1297 @ 489,869: 15x18 +#1298 @ 415,45: 26x17 +#1299 @ 94,358: 20x17 +#1300 @ 413,552: 13x17 +#1301 @ 529,918: 16x24 +#1302 @ 400,808: 10x21 +#1303 @ 940,370: 21x27 +#1304 @ 813,185: 29x14 +#1305 @ 95,28: 24x11 +#1306 @ 249,327: 24x16 +#1307 @ 760,926: 26x12 +#1308 @ 732,957: 13x12 +#1309 @ 582,910: 13x13 +#1310 @ 0,162: 17x20 +#1311 @ 747,594: 10x11 +#1312 @ 712,513: 20x23 +#1313 @ 489,795: 26x29 +#1314 @ 474,335: 11x11 +#1315 @ 928,854: 27x16 +#1316 @ 7,377: 14x23 +#1317 @ 923,373: 20x22 +#1318 @ 411,954: 16x11 +#1319 @ 9,935: 20x14 +#1320 @ 887,848: 26x10 +#1321 @ 404,860: 11x11 +#1322 @ 475,281: 24x22 +#1323 @ 710,774: 21x22 +#1324 @ 794,158: 17x24 +#1325 @ 513,797: 25x28 +#1326 @ 707,755: 26x26 +#1327 @ 53,33: 29x24 +#1328 @ 506,184: 13x26 +#1329 @ 829,145: 20x10 +#1330 @ 891,774: 16x12 +#1331 @ 807,597: 26x27 +#1332 @ 375,313: 16x25 +#1333 @ 918,895: 16x11 +#1334 @ 884,128: 24x23 +#1335 @ 340,833: 25x24 +#1336 @ 202,485: 26x10 +#1337 @ 279,681: 21x10 +#1338 @ 199,913: 19x14 +#1339 @ 537,813: 26x29 +#1340 @ 89,723: 10x24 +#1341 @ 286,935: 22x27 +#1342 @ 347,72: 22x25 +#1343 @ 805,893: 11x28 +#1344 @ 917,81: 18x11 +#1345 @ 630,949: 21x16 +#1346 @ 526,905: 22x17 +#1347 @ 908,578: 17x15 +#1348 @ 235,237: 10x25 +#1349 @ 224,798: 20x23 +#1350 @ 759,525: 24x27 +#1351 @ 738,299: 25x16 +#1352 @ 224,888: 25x14 +#1353 @ 319,601: 28x26 +#1354 @ 212,397: 11x25 +#1355 @ 102,538: 21x28 +#1356 @ 457,251: 14x17 +#1357 @ 931,293: 13x24 +#1358 @ 808,93: 14x22 +#1359 @ 593,814: 12x23 +#1360 @ 468,131: 10x21 +#1361 @ 593,251: 15x15 +#1362 @ 362,16: 20x19 +#1363 @ 862,511: 14x11 +#1364 @ 671,626: 17x16 +#1365 @ 473,697: 16x14 +#1366 @ 368,329: 28x18 +#1367 @ 925,194: 24x29 +#1368 @ 875,511: 12x12 +#1369 @ 967,411: 25x27 +#1370 @ 89,411: 15x18 +#1371 @ 307,943: 12x28 +#1372 @ 119,13: 29x16 +#1373 @ 806,710: 15x11 +#1374 @ 544,534: 13x18 +#1375 @ 672,698: 14x17 +#1376 @ 645,848: 23x20 +#1377 @ 889,954: 25x13 +#1378 @ 378,24: 12x14 +#1379 @ 542,442: 22x15 +#1380 @ 42,454: 18x28 +#1381 @ 175,91: 11x22 +#1382 @ 840,533: 12x21 +#1383 @ 792,736: 24x27 +#1384 @ 731,713: 17x27 +#1385 @ 614,449: 22x20 diff --git a/2018/inputs/4.txt b/2018/inputs/4.txt new file mode 100644 index 0000000..4a0ff6e --- /dev/null +++ b/2018/inputs/4.txt @@ -0,0 +1,1088 @@ +[1518-09-17 23:48] Guard #1307 begins shift +[1518-06-03 00:00] Guard #3217 begins shift +[1518-07-28 00:49] falls asleep +[1518-03-30 00:57] falls asleep +[1518-07-01 23:58] Guard #409 begins shift +[1518-04-13 00:25] wakes up +[1518-04-09 00:22] wakes up +[1518-11-02 00:41] falls asleep +[1518-11-21 00:23] falls asleep +[1518-05-03 00:59] wakes up +[1518-11-21 00:02] Guard #1459 begins shift +[1518-08-18 00:27] wakes up +[1518-08-09 00:48] falls asleep +[1518-09-23 00:23] falls asleep +[1518-03-29 23:57] Guard #113 begins shift +[1518-04-16 00:43] wakes up +[1518-05-13 00:33] falls asleep +[1518-05-19 00:58] wakes up +[1518-07-09 00:44] wakes up +[1518-04-26 00:03] falls asleep +[1518-08-24 00:55] falls asleep +[1518-06-30 00:51] falls asleep +[1518-10-14 00:06] falls asleep +[1518-04-28 00:23] falls asleep +[1518-10-05 00:57] wakes up +[1518-09-02 00:56] wakes up +[1518-03-11 00:38] falls asleep +[1518-07-30 00:54] wakes up +[1518-09-15 23:58] Guard #1811 begins shift +[1518-08-08 23:58] Guard #1033 begins shift +[1518-08-07 00:08] falls asleep +[1518-06-13 00:46] wakes up +[1518-10-08 00:54] falls asleep +[1518-06-08 23:46] Guard #557 begins shift +[1518-06-01 00:22] wakes up +[1518-08-05 00:59] wakes up +[1518-03-08 00:03] Guard #3271 begins shift +[1518-07-18 23:59] Guard #449 begins shift +[1518-09-24 00:00] Guard #389 begins shift +[1518-04-22 00:45] wakes up +[1518-07-31 00:41] falls asleep +[1518-03-24 00:02] falls asleep +[1518-05-21 00:29] falls asleep +[1518-05-27 23:59] Guard #449 begins shift +[1518-10-30 00:52] wakes up +[1518-08-09 00:51] wakes up +[1518-03-16 00:54] wakes up +[1518-04-11 00:28] falls asleep +[1518-04-25 00:58] wakes up +[1518-10-06 00:07] falls asleep +[1518-08-15 23:49] Guard #557 begins shift +[1518-10-17 23:51] Guard #739 begins shift +[1518-06-27 00:00] Guard #3217 begins shift +[1518-06-30 00:01] Guard #1237 begins shift +[1518-04-29 00:01] Guard #3271 begins shift +[1518-11-12 00:19] falls asleep +[1518-07-27 00:50] wakes up +[1518-03-06 00:42] falls asleep +[1518-11-17 00:57] wakes up +[1518-07-21 00:48] wakes up +[1518-03-04 00:28] falls asleep +[1518-08-24 00:37] falls asleep +[1518-09-19 00:21] wakes up +[1518-11-05 00:24] wakes up +[1518-06-24 00:02] falls asleep +[1518-10-24 00:55] falls asleep +[1518-06-14 00:56] wakes up +[1518-06-29 00:47] wakes up +[1518-04-15 00:14] wakes up +[1518-08-21 00:08] falls asleep +[1518-09-16 00:48] falls asleep +[1518-10-11 00:42] wakes up +[1518-03-04 00:09] wakes up +[1518-03-13 00:18] falls asleep +[1518-10-28 00:56] wakes up +[1518-03-27 00:20] wakes up +[1518-05-24 00:03] Guard #739 begins shift +[1518-08-31 00:54] wakes up +[1518-06-22 00:50] falls asleep +[1518-06-15 00:45] wakes up +[1518-07-22 23:47] Guard #2647 begins shift +[1518-09-02 00:00] falls asleep +[1518-05-04 00:14] falls asleep +[1518-03-06 00:51] wakes up +[1518-10-02 00:35] wakes up +[1518-10-05 00:20] falls asleep +[1518-05-06 00:53] falls asleep +[1518-10-12 00:47] wakes up +[1518-04-08 00:30] wakes up +[1518-11-19 00:40] falls asleep +[1518-11-13 00:32] falls asleep +[1518-08-21 23:46] Guard #3271 begins shift +[1518-05-31 00:56] falls asleep +[1518-05-18 00:57] wakes up +[1518-05-17 00:56] wakes up +[1518-05-24 23:51] Guard #601 begins shift +[1518-10-30 00:32] wakes up +[1518-10-05 00:13] wakes up +[1518-11-02 00:03] Guard #2647 begins shift +[1518-05-02 00:36] wakes up +[1518-07-29 00:40] wakes up +[1518-07-16 00:53] wakes up +[1518-09-04 00:18] wakes up +[1518-05-11 00:33] falls asleep +[1518-03-09 00:00] Guard #1811 begins shift +[1518-10-24 23:57] Guard #827 begins shift +[1518-11-18 00:46] wakes up +[1518-08-14 00:27] falls asleep +[1518-05-25 00:17] wakes up +[1518-03-03 00:02] Guard #947 begins shift +[1518-05-29 00:00] falls asleep +[1518-06-05 00:04] wakes up +[1518-07-26 00:42] wakes up +[1518-10-01 00:39] falls asleep +[1518-06-22 00:54] wakes up +[1518-09-06 00:24] wakes up +[1518-08-04 00:24] falls asleep +[1518-04-25 00:35] wakes up +[1518-11-11 00:11] falls asleep +[1518-09-27 00:58] wakes up +[1518-09-16 00:15] falls asleep +[1518-07-25 00:55] wakes up +[1518-08-28 00:27] falls asleep +[1518-08-12 00:39] falls asleep +[1518-11-05 00:32] falls asleep +[1518-05-29 23:52] Guard #3209 begins shift +[1518-04-27 00:35] wakes up +[1518-04-20 00:06] falls asleep +[1518-03-21 00:47] falls asleep +[1518-10-18 00:55] wakes up +[1518-09-29 00:31] falls asleep +[1518-09-17 00:40] wakes up +[1518-04-22 00:19] falls asleep +[1518-06-14 00:32] falls asleep +[1518-10-07 23:59] Guard #1307 begins shift +[1518-04-25 00:55] falls asleep +[1518-08-27 00:24] falls asleep +[1518-08-01 23:56] Guard #389 begins shift +[1518-09-04 23:56] Guard #409 begins shift +[1518-09-29 23:56] Guard #449 begins shift +[1518-10-05 00:23] wakes up +[1518-04-04 00:58] wakes up +[1518-08-05 00:54] falls asleep +[1518-07-20 00:46] wakes up +[1518-04-08 00:46] wakes up +[1518-06-18 00:52] wakes up +[1518-05-03 23:59] Guard #1033 begins shift +[1518-11-01 00:37] wakes up +[1518-03-11 00:30] wakes up +[1518-06-06 00:42] wakes up +[1518-06-20 00:06] falls asleep +[1518-04-05 00:55] wakes up +[1518-09-13 23:57] Guard #3217 begins shift +[1518-04-21 00:00] Guard #1459 begins shift +[1518-03-18 00:00] Guard #1307 begins shift +[1518-09-13 00:03] Guard #557 begins shift +[1518-05-28 23:51] Guard #3217 begins shift +[1518-10-23 23:49] Guard #113 begins shift +[1518-03-11 23:59] Guard #113 begins shift +[1518-09-06 00:07] falls asleep +[1518-03-03 00:42] falls asleep +[1518-07-21 00:57] falls asleep +[1518-06-12 00:08] falls asleep +[1518-10-04 23:59] Guard #1237 begins shift +[1518-08-19 00:36] falls asleep +[1518-10-13 00:09] falls asleep +[1518-08-18 00:57] wakes up +[1518-08-28 23:52] Guard #1307 begins shift +[1518-09-09 00:58] wakes up +[1518-10-11 00:14] falls asleep +[1518-07-25 23:50] Guard #1559 begins shift +[1518-07-14 23:59] Guard #1237 begins shift +[1518-09-26 00:58] wakes up +[1518-05-22 23:59] Guard #3067 begins shift +[1518-05-22 00:57] falls asleep +[1518-05-02 00:58] wakes up +[1518-05-14 00:52] wakes up +[1518-04-18 00:51] wakes up +[1518-06-17 00:35] wakes up +[1518-05-18 23:59] Guard #389 begins shift +[1518-08-16 00:12] wakes up +[1518-11-08 00:49] wakes up +[1518-08-18 00:04] Guard #1307 begins shift +[1518-07-13 00:48] wakes up +[1518-08-18 23:58] Guard #1459 begins shift +[1518-03-09 00:52] wakes up +[1518-03-16 00:00] Guard #1237 begins shift +[1518-06-13 00:24] falls asleep +[1518-08-16 00:04] falls asleep +[1518-09-19 00:55] wakes up +[1518-10-04 00:47] wakes up +[1518-05-04 23:50] Guard #389 begins shift +[1518-07-03 00:57] wakes up +[1518-04-24 00:14] falls asleep +[1518-09-03 00:22] wakes up +[1518-11-09 00:54] falls asleep +[1518-09-02 00:36] wakes up +[1518-06-30 00:56] wakes up +[1518-08-26 00:51] wakes up +[1518-04-27 23:56] Guard #1307 begins shift +[1518-11-02 00:10] falls asleep +[1518-09-20 23:57] Guard #1811 begins shift +[1518-03-14 00:48] wakes up +[1518-05-31 00:30] wakes up +[1518-08-07 00:03] Guard #3209 begins shift +[1518-08-07 00:50] falls asleep +[1518-09-25 00:57] wakes up +[1518-10-18 00:08] wakes up +[1518-10-03 00:56] wakes up +[1518-05-27 00:46] wakes up +[1518-06-07 00:18] falls asleep +[1518-06-06 00:55] wakes up +[1518-03-18 00:56] wakes up +[1518-04-04 23:59] Guard #449 begins shift +[1518-09-28 00:59] wakes up +[1518-08-10 00:12] wakes up +[1518-05-30 00:21] wakes up +[1518-11-09 00:57] wakes up +[1518-11-15 00:13] falls asleep +[1518-06-10 23:57] Guard #1811 begins shift +[1518-11-04 00:01] falls asleep +[1518-05-21 00:47] falls asleep +[1518-10-07 00:05] falls asleep +[1518-03-12 00:36] wakes up +[1518-08-09 00:37] wakes up +[1518-09-23 00:58] wakes up +[1518-04-14 00:22] falls asleep +[1518-07-07 00:35] falls asleep +[1518-03-15 00:59] wakes up +[1518-03-14 00:44] falls asleep +[1518-11-06 00:04] Guard #3067 begins shift +[1518-07-14 00:01] Guard #3217 begins shift +[1518-10-23 00:09] falls asleep +[1518-07-01 00:38] wakes up +[1518-11-05 00:51] wakes up +[1518-04-08 00:52] falls asleep +[1518-09-22 00:40] falls asleep +[1518-09-08 00:20] falls asleep +[1518-05-09 00:49] falls asleep +[1518-10-17 00:02] Guard #3067 begins shift +[1518-10-01 23:56] Guard #3217 begins shift +[1518-05-10 00:58] wakes up +[1518-11-11 23:57] Guard #3271 begins shift +[1518-09-27 00:49] falls asleep +[1518-09-30 00:48] wakes up +[1518-06-06 00:01] Guard #601 begins shift +[1518-03-18 23:59] Guard #3217 begins shift +[1518-03-20 23:57] Guard #2647 begins shift +[1518-07-29 00:52] falls asleep +[1518-04-01 23:51] Guard #1459 begins shift +[1518-03-23 00:14] falls asleep +[1518-07-28 00:38] wakes up +[1518-09-04 00:49] wakes up +[1518-06-10 00:57] wakes up +[1518-10-26 00:57] wakes up +[1518-04-01 00:52] wakes up +[1518-07-10 00:47] wakes up +[1518-03-24 23:56] Guard #3217 begins shift +[1518-07-07 00:58] wakes up +[1518-08-10 00:11] falls asleep +[1518-08-22 00:56] falls asleep +[1518-11-03 00:21] wakes up +[1518-03-28 23:59] Guard #947 begins shift +[1518-07-29 00:35] falls asleep +[1518-09-09 00:05] falls asleep +[1518-04-11 00:58] wakes up +[1518-10-12 00:55] wakes up +[1518-11-14 00:44] wakes up +[1518-03-17 00:47] wakes up +[1518-03-29 00:13] falls asleep +[1518-06-04 00:40] falls asleep +[1518-11-16 00:14] falls asleep +[1518-05-11 00:04] Guard #1459 begins shift +[1518-06-03 00:11] falls asleep +[1518-10-22 00:58] wakes up +[1518-04-15 00:57] falls asleep +[1518-07-12 00:59] wakes up +[1518-05-21 00:31] wakes up +[1518-06-27 00:09] falls asleep +[1518-08-07 00:41] wakes up +[1518-10-22 00:11] falls asleep +[1518-09-02 00:43] falls asleep +[1518-05-31 00:28] falls asleep +[1518-05-25 00:07] falls asleep +[1518-07-25 00:13] wakes up +[1518-06-13 00:35] wakes up +[1518-08-17 00:40] falls asleep +[1518-08-02 00:58] wakes up +[1518-03-26 00:23] falls asleep +[1518-11-04 00:59] wakes up +[1518-03-28 00:38] falls asleep +[1518-10-29 23:57] Guard #113 begins shift +[1518-09-11 23:59] Guard #2647 begins shift +[1518-03-09 00:48] falls asleep +[1518-08-18 00:53] wakes up +[1518-09-02 00:46] wakes up +[1518-06-18 00:02] Guard #739 begins shift +[1518-10-22 00:00] Guard #1811 begins shift +[1518-09-23 00:27] wakes up +[1518-08-31 00:38] falls asleep +[1518-09-25 00:39] falls asleep +[1518-08-08 00:03] Guard #2647 begins shift +[1518-09-14 00:23] falls asleep +[1518-08-21 00:04] Guard #877 begins shift +[1518-10-09 00:31] wakes up +[1518-06-20 00:51] wakes up +[1518-06-06 00:17] falls asleep +[1518-08-10 00:17] falls asleep +[1518-05-08 00:57] wakes up +[1518-11-10 00:06] falls asleep +[1518-05-30 23:58] Guard #1559 begins shift +[1518-10-12 00:44] falls asleep +[1518-09-08 00:53] wakes up +[1518-04-08 00:28] falls asleep +[1518-08-17 00:52] wakes up +[1518-05-02 00:57] falls asleep +[1518-05-06 00:56] wakes up +[1518-03-23 00:00] Guard #1811 begins shift +[1518-04-27 00:10] falls asleep +[1518-06-09 00:04] falls asleep +[1518-08-18 00:10] falls asleep +[1518-07-25 00:46] falls asleep +[1518-10-10 00:43] wakes up +[1518-04-19 00:48] wakes up +[1518-10-20 00:49] wakes up +[1518-04-17 00:01] Guard #1237 begins shift +[1518-05-21 00:06] falls asleep +[1518-11-15 00:37] wakes up +[1518-05-04 00:24] wakes up +[1518-10-04 00:01] Guard #2647 begins shift +[1518-03-26 00:00] Guard #389 begins shift +[1518-08-29 00:23] wakes up +[1518-04-02 00:03] falls asleep +[1518-05-14 00:12] falls asleep +[1518-04-14 00:57] wakes up +[1518-06-01 23:56] Guard #449 begins shift +[1518-08-11 23:56] Guard #1811 begins shift +[1518-07-04 00:01] Guard #3271 begins shift +[1518-07-22 00:38] falls asleep +[1518-11-13 23:58] Guard #2647 begins shift +[1518-05-07 00:59] wakes up +[1518-06-22 00:26] falls asleep +[1518-08-28 00:01] Guard #3067 begins shift +[1518-10-31 00:03] Guard #113 begins shift +[1518-06-24 00:48] wakes up +[1518-03-18 00:28] falls asleep +[1518-03-16 00:13] falls asleep +[1518-04-27 00:57] falls asleep +[1518-07-14 00:24] wakes up +[1518-11-18 00:59] wakes up +[1518-05-01 00:00] Guard #739 begins shift +[1518-11-08 23:56] Guard #3209 begins shift +[1518-06-20 00:36] falls asleep +[1518-09-21 00:20] falls asleep +[1518-05-28 00:21] wakes up +[1518-03-05 00:23] falls asleep +[1518-03-30 00:38] wakes up +[1518-07-12 00:56] falls asleep +[1518-04-03 00:25] wakes up +[1518-03-21 00:58] wakes up +[1518-08-11 00:17] falls asleep +[1518-08-12 23:59] Guard #947 begins shift +[1518-04-29 23:53] Guard #947 begins shift +[1518-05-10 00:03] Guard #3209 begins shift +[1518-03-04 00:38] wakes up +[1518-05-14 00:03] Guard #947 begins shift +[1518-03-22 00:57] wakes up +[1518-07-15 00:37] falls asleep +[1518-06-11 00:48] wakes up +[1518-04-14 00:01] Guard #557 begins shift +[1518-07-24 00:49] wakes up +[1518-09-01 00:56] wakes up +[1518-08-26 00:59] wakes up +[1518-08-25 00:15] falls asleep +[1518-07-06 00:04] falls asleep +[1518-07-03 00:03] Guard #557 begins shift +[1518-10-20 00:45] falls asleep +[1518-10-18 00:53] falls asleep +[1518-06-19 00:53] wakes up +[1518-03-27 00:51] falls asleep +[1518-07-11 00:43] falls asleep +[1518-05-03 00:55] falls asleep +[1518-09-21 00:49] falls asleep +[1518-09-20 00:54] wakes up +[1518-06-01 00:04] falls asleep +[1518-05-13 00:37] wakes up +[1518-06-27 00:46] wakes up +[1518-04-03 00:01] Guard #601 begins shift +[1518-03-13 00:55] falls asleep +[1518-10-10 00:13] falls asleep +[1518-10-31 00:21] falls asleep +[1518-03-14 00:54] falls asleep +[1518-04-06 00:02] Guard #1237 begins shift +[1518-10-15 00:48] wakes up +[1518-03-27 00:02] Guard #1559 begins shift +[1518-10-12 00:14] falls asleep +[1518-07-11 00:25] falls asleep +[1518-03-04 00:43] falls asleep +[1518-04-16 00:53] falls asleep +[1518-06-11 00:54] falls asleep +[1518-06-16 00:15] falls asleep +[1518-10-18 00:46] falls asleep +[1518-07-24 00:02] Guard #389 begins shift +[1518-04-04 00:26] wakes up +[1518-04-07 00:21] falls asleep +[1518-04-12 23:56] Guard #2647 begins shift +[1518-07-18 00:49] wakes up +[1518-05-07 00:04] falls asleep +[1518-10-06 00:04] Guard #947 begins shift +[1518-09-18 00:43] wakes up +[1518-04-29 00:33] wakes up +[1518-07-29 00:57] falls asleep +[1518-08-27 00:42] wakes up +[1518-03-16 23:46] Guard #739 begins shift +[1518-05-20 00:23] falls asleep +[1518-07-27 00:09] falls asleep +[1518-08-18 00:37] falls asleep +[1518-06-26 00:01] Guard #1307 begins shift +[1518-09-30 00:20] falls asleep +[1518-04-11 00:44] falls asleep +[1518-04-09 00:12] falls asleep +[1518-03-31 00:03] Guard #1559 begins shift +[1518-06-08 00:00] Guard #449 begins shift +[1518-11-07 00:46] wakes up +[1518-04-11 00:04] Guard #409 begins shift +[1518-03-04 00:56] wakes up +[1518-07-24 00:47] falls asleep +[1518-08-25 00:21] wakes up +[1518-05-24 00:06] falls asleep +[1518-05-08 00:52] falls asleep +[1518-08-29 23:57] Guard #3067 begins shift +[1518-05-18 00:00] falls asleep +[1518-08-19 23:59] Guard #1459 begins shift +[1518-05-31 00:58] wakes up +[1518-06-13 00:00] Guard #947 begins shift +[1518-10-28 00:48] falls asleep +[1518-05-20 23:58] Guard #877 begins shift +[1518-08-20 00:28] falls asleep +[1518-06-17 00:12] falls asleep +[1518-08-19 00:51] falls asleep +[1518-03-03 23:48] Guard #557 begins shift +[1518-10-28 00:30] falls asleep +[1518-03-30 00:11] falls asleep +[1518-06-07 00:53] wakes up +[1518-07-22 00:01] Guard #557 begins shift +[1518-11-11 00:58] wakes up +[1518-08-27 00:00] Guard #3067 begins shift +[1518-06-06 00:19] wakes up +[1518-10-24 00:59] wakes up +[1518-11-03 00:26] falls asleep +[1518-08-19 00:41] wakes up +[1518-03-19 00:33] falls asleep +[1518-10-02 00:53] wakes up +[1518-07-31 23:58] Guard #1723 begins shift +[1518-08-23 00:53] wakes up +[1518-03-13 00:59] wakes up +[1518-10-20 23:59] Guard #449 begins shift +[1518-05-12 00:09] falls asleep +[1518-05-17 23:54] Guard #1811 begins shift +[1518-06-25 00:53] wakes up +[1518-06-17 00:55] wakes up +[1518-05-09 00:24] falls asleep +[1518-08-14 00:01] Guard #739 begins shift +[1518-03-20 00:06] falls asleep +[1518-11-20 00:28] falls asleep +[1518-04-15 00:58] wakes up +[1518-05-22 00:36] wakes up +[1518-04-12 00:04] Guard #877 begins shift +[1518-06-04 23:52] Guard #877 begins shift +[1518-10-09 00:07] falls asleep +[1518-06-05 00:15] falls asleep +[1518-06-28 00:34] wakes up +[1518-11-13 00:37] wakes up +[1518-09-24 00:48] wakes up +[1518-05-15 00:02] Guard #557 begins shift +[1518-05-27 00:21] falls asleep +[1518-11-12 00:34] wakes up +[1518-06-06 00:51] falls asleep +[1518-11-21 00:43] wakes up +[1518-09-01 00:28] falls asleep +[1518-10-13 00:00] Guard #947 begins shift +[1518-11-20 00:46] wakes up +[1518-05-22 00:01] Guard #1559 begins shift +[1518-04-05 00:07] falls asleep +[1518-06-11 23:56] Guard #3209 begins shift +[1518-07-11 00:51] wakes up +[1518-08-30 00:17] falls asleep +[1518-05-12 23:57] Guard #3271 begins shift +[1518-03-15 00:24] falls asleep +[1518-04-26 23:59] Guard #3067 begins shift +[1518-03-09 00:06] falls asleep +[1518-03-09 00:57] wakes up +[1518-03-08 00:58] wakes up +[1518-04-13 00:22] falls asleep +[1518-04-14 23:46] Guard #1033 begins shift +[1518-07-28 00:54] falls asleep +[1518-09-20 00:00] Guard #3067 begins shift +[1518-05-09 00:43] wakes up +[1518-11-01 00:03] Guard #3067 begins shift +[1518-05-12 00:55] wakes up +[1518-03-08 00:09] falls asleep +[1518-03-10 00:40] wakes up +[1518-03-28 00:00] Guard #1459 begins shift +[1518-10-14 00:34] falls asleep +[1518-09-22 00:26] falls asleep +[1518-10-30 00:26] falls asleep +[1518-09-12 00:07] falls asleep +[1518-03-26 00:58] wakes up +[1518-07-20 00:20] falls asleep +[1518-06-28 00:25] falls asleep +[1518-09-12 00:24] wakes up +[1518-05-22 00:13] falls asleep +[1518-08-13 00:42] wakes up +[1518-08-22 00:04] falls asleep +[1518-07-28 23:59] Guard #1559 begins shift +[1518-08-24 23:59] Guard #2647 begins shift +[1518-10-24 00:05] falls asleep +[1518-06-22 00:47] wakes up +[1518-10-26 00:35] falls asleep +[1518-08-10 00:58] wakes up +[1518-03-14 00:57] wakes up +[1518-07-09 00:32] falls asleep +[1518-04-28 00:55] falls asleep +[1518-10-13 00:41] wakes up +[1518-07-02 00:17] falls asleep +[1518-04-17 00:58] wakes up +[1518-05-22 00:58] wakes up +[1518-09-01 00:48] wakes up +[1518-04-01 00:48] falls asleep +[1518-07-01 00:00] Guard #557 begins shift +[1518-04-18 00:40] falls asleep +[1518-03-13 23:57] Guard #449 begins shift +[1518-04-08 00:00] Guard #877 begins shift +[1518-09-16 23:57] Guard #1459 begins shift +[1518-11-06 00:57] wakes up +[1518-07-19 23:56] Guard #1459 begins shift +[1518-03-07 00:42] falls asleep +[1518-06-10 00:02] Guard #1559 begins shift +[1518-06-20 00:25] wakes up +[1518-04-08 00:44] falls asleep +[1518-06-22 00:01] Guard #113 begins shift +[1518-07-08 23:46] Guard #1811 begins shift +[1518-07-23 00:03] falls asleep +[1518-04-23 00:31] falls asleep +[1518-08-20 00:58] wakes up +[1518-09-30 23:57] Guard #3217 begins shift +[1518-10-28 00:00] Guard #449 begins shift +[1518-06-02 00:30] falls asleep +[1518-09-04 00:36] falls asleep +[1518-07-24 00:56] falls asleep +[1518-04-16 00:04] Guard #601 begins shift +[1518-05-20 00:38] wakes up +[1518-10-29 00:33] falls asleep +[1518-07-17 00:42] wakes up +[1518-04-07 00:01] Guard #449 begins shift +[1518-08-29 00:54] wakes up +[1518-04-08 00:54] wakes up +[1518-03-12 00:32] falls asleep +[1518-05-06 00:43] wakes up +[1518-03-05 00:00] Guard #3271 begins shift +[1518-07-30 00:04] Guard #389 begins shift +[1518-07-26 00:00] falls asleep +[1518-10-17 00:23] falls asleep +[1518-09-06 23:53] Guard #389 begins shift +[1518-03-08 00:56] falls asleep +[1518-09-13 00:55] wakes up +[1518-07-20 00:31] wakes up +[1518-10-14 00:02] Guard #557 begins shift +[1518-05-26 00:01] Guard #1811 begins shift +[1518-05-29 00:29] wakes up +[1518-07-08 00:57] falls asleep +[1518-07-10 00:21] falls asleep +[1518-08-24 00:50] wakes up +[1518-03-09 00:09] wakes up +[1518-08-16 00:22] falls asleep +[1518-05-01 00:52] wakes up +[1518-06-01 00:25] falls asleep +[1518-07-01 00:26] wakes up +[1518-09-08 23:52] Guard #389 begins shift +[1518-09-17 00:35] falls asleep +[1518-05-30 00:58] wakes up +[1518-11-11 00:54] wakes up +[1518-04-30 00:37] wakes up +[1518-05-06 23:54] Guard #1033 begins shift +[1518-11-08 00:25] falls asleep +[1518-11-15 23:58] Guard #3217 begins shift +[1518-11-01 00:14] falls asleep +[1518-10-08 00:57] wakes up +[1518-08-18 00:56] falls asleep +[1518-11-10 23:57] Guard #2647 begins shift +[1518-03-21 23:57] Guard #389 begins shift +[1518-09-22 23:59] Guard #3209 begins shift +[1518-08-24 00:58] wakes up +[1518-10-19 23:57] Guard #389 begins shift +[1518-09-07 23:48] Guard #3209 begins shift +[1518-08-10 23:57] Guard #1033 begins shift +[1518-03-13 00:03] Guard #3271 begins shift +[1518-03-19 00:37] wakes up +[1518-06-18 23:59] Guard #877 begins shift +[1518-10-04 00:51] falls asleep +[1518-09-28 00:42] falls asleep +[1518-05-06 00:00] Guard #1459 begins shift +[1518-05-03 00:26] wakes up +[1518-06-26 00:55] wakes up +[1518-09-15 00:59] wakes up +[1518-07-22 00:35] wakes up +[1518-09-03 00:51] wakes up +[1518-07-22 00:58] wakes up +[1518-04-29 00:15] falls asleep +[1518-10-29 00:58] wakes up +[1518-07-27 00:46] falls asleep +[1518-07-29 00:54] wakes up +[1518-11-23 00:54] wakes up +[1518-04-25 23:48] Guard #877 begins shift +[1518-08-16 23:57] Guard #1559 begins shift +[1518-09-25 00:47] falls asleep +[1518-03-06 00:18] wakes up +[1518-10-18 00:00] falls asleep +[1518-10-01 00:48] wakes up +[1518-04-12 00:59] wakes up +[1518-11-13 00:50] falls asleep +[1518-09-10 23:58] Guard #3209 begins shift +[1518-09-27 00:00] Guard #409 begins shift +[1518-09-21 23:51] Guard #3209 begins shift +[1518-11-03 00:11] falls asleep +[1518-11-18 00:06] falls asleep +[1518-03-06 00:56] falls asleep +[1518-07-14 00:17] falls asleep +[1518-08-05 00:40] falls asleep +[1518-04-23 00:43] falls asleep +[1518-09-18 00:00] falls asleep +[1518-08-02 23:56] Guard #2647 begins shift +[1518-09-22 00:34] wakes up +[1518-06-19 00:08] falls asleep +[1518-06-01 00:41] wakes up +[1518-09-08 00:11] wakes up +[1518-04-17 00:54] falls asleep +[1518-05-27 00:02] Guard #3271 begins shift +[1518-08-07 00:53] wakes up +[1518-07-20 00:39] falls asleep +[1518-11-07 23:58] Guard #449 begins shift +[1518-09-24 23:57] Guard #1459 begins shift +[1518-04-28 00:57] wakes up +[1518-08-28 00:53] wakes up +[1518-04-16 00:29] falls asleep +[1518-07-12 00:42] wakes up +[1518-06-22 23:56] Guard #3067 begins shift +[1518-03-20 00:46] wakes up +[1518-05-07 23:50] Guard #409 begins shift +[1518-08-25 00:48] wakes up +[1518-04-06 00:56] falls asleep +[1518-09-03 00:06] falls asleep +[1518-09-10 00:01] falls asleep +[1518-07-17 00:11] falls asleep +[1518-10-23 00:49] wakes up +[1518-05-30 00:03] falls asleep +[1518-10-12 00:51] falls asleep +[1518-11-17 00:00] Guard #1307 begins shift +[1518-03-23 00:28] wakes up +[1518-08-02 00:54] falls asleep +[1518-08-16 00:53] wakes up +[1518-06-09 00:43] wakes up +[1518-04-23 00:50] wakes up +[1518-11-02 00:51] wakes up +[1518-08-25 00:46] falls asleep +[1518-06-27 00:36] wakes up +[1518-04-08 23:57] Guard #1559 begins shift +[1518-07-09 00:58] wakes up +[1518-10-28 23:56] Guard #449 begins shift +[1518-04-02 00:53] wakes up +[1518-05-17 00:45] falls asleep +[1518-03-15 00:04] Guard #601 begins shift +[1518-03-17 00:15] wakes up +[1518-05-05 00:59] wakes up +[1518-05-25 00:03] wakes up +[1518-10-18 23:57] Guard #1559 begins shift +[1518-10-21 00:27] falls asleep +[1518-05-12 00:40] wakes up +[1518-04-06 00:58] wakes up +[1518-05-23 00:20] falls asleep +[1518-07-16 23:56] Guard #1459 begins shift +[1518-06-12 00:51] wakes up +[1518-04-19 00:34] falls asleep +[1518-06-14 00:09] falls asleep +[1518-08-08 00:19] falls asleep +[1518-09-04 00:02] falls asleep +[1518-05-23 00:57] wakes up +[1518-03-27 00:17] falls asleep +[1518-04-15 00:28] falls asleep +[1518-09-23 00:30] falls asleep +[1518-10-08 00:44] wakes up +[1518-08-29 00:29] falls asleep +[1518-08-03 00:52] falls asleep +[1518-10-24 00:45] wakes up +[1518-05-12 00:45] falls asleep +[1518-09-12 00:29] falls asleep +[1518-04-16 00:59] wakes up +[1518-07-11 00:31] wakes up +[1518-07-04 00:39] wakes up +[1518-05-16 00:44] wakes up +[1518-06-21 00:45] wakes up +[1518-07-26 23:58] Guard #3209 begins shift +[1518-05-08 23:58] Guard #877 begins shift +[1518-11-07 00:20] falls asleep +[1518-08-26 00:04] Guard #389 begins shift +[1518-03-11 00:16] falls asleep +[1518-11-17 00:20] falls asleep +[1518-09-10 00:49] wakes up +[1518-05-10 00:36] falls asleep +[1518-05-16 00:55] wakes up +[1518-08-04 00:01] Guard #409 begins shift +[1518-04-26 00:45] wakes up +[1518-09-07 00:46] wakes up +[1518-10-21 00:47] wakes up +[1518-05-15 00:46] wakes up +[1518-08-21 00:50] wakes up +[1518-08-08 00:58] wakes up +[1518-08-26 00:57] falls asleep +[1518-07-02 00:51] wakes up +[1518-03-25 00:16] falls asleep +[1518-08-11 00:59] wakes up +[1518-04-19 00:58] wakes up +[1518-10-15 00:56] falls asleep +[1518-06-15 00:14] falls asleep +[1518-04-03 00:42] wakes up +[1518-11-14 00:18] falls asleep +[1518-05-12 00:02] Guard #947 begins shift +[1518-04-15 00:05] falls asleep +[1518-04-23 00:39] wakes up +[1518-07-22 00:19] falls asleep +[1518-07-31 00:44] wakes up +[1518-10-27 00:43] wakes up +[1518-09-22 00:03] falls asleep +[1518-03-07 00:02] Guard #3067 begins shift +[1518-03-03 00:55] wakes up +[1518-06-02 00:56] wakes up +[1518-03-04 00:23] wakes up +[1518-08-06 00:37] falls asleep +[1518-06-23 23:50] Guard #1559 begins shift +[1518-09-27 00:50] wakes up +[1518-07-08 00:19] falls asleep +[1518-05-09 00:52] wakes up +[1518-03-06 00:02] falls asleep +[1518-06-05 00:01] falls asleep +[1518-05-03 00:47] wakes up +[1518-05-29 00:41] falls asleep +[1518-10-25 23:58] Guard #947 begins shift +[1518-10-14 23:59] Guard #3209 begins shift +[1518-03-04 00:02] falls asleep +[1518-07-28 00:03] Guard #3217 begins shift +[1518-09-12 00:09] wakes up +[1518-03-09 00:35] wakes up +[1518-10-27 00:00] Guard #739 begins shift +[1518-07-29 00:59] wakes up +[1518-11-10 00:34] wakes up +[1518-05-25 00:02] falls asleep +[1518-03-10 00:30] falls asleep +[1518-07-08 00:48] wakes up +[1518-05-19 23:57] Guard #3217 begins shift +[1518-03-31 00:40] wakes up +[1518-08-02 00:28] falls asleep +[1518-11-11 00:57] falls asleep +[1518-06-27 00:45] falls asleep +[1518-07-05 23:53] Guard #1559 begins shift +[1518-10-02 00:17] falls asleep +[1518-06-13 00:45] falls asleep +[1518-10-04 00:18] falls asleep +[1518-06-03 00:59] wakes up +[1518-06-11 00:57] wakes up +[1518-04-04 00:02] Guard #947 begins shift +[1518-04-24 00:45] falls asleep +[1518-03-20 00:00] Guard #1307 begins shift +[1518-11-16 00:58] wakes up +[1518-05-01 23:58] Guard #389 begins shift +[1518-08-06 00:00] Guard #1559 begins shift +[1518-03-05 23:49] Guard #113 begins shift +[1518-06-23 00:56] wakes up +[1518-09-28 00:48] wakes up +[1518-07-19 00:49] wakes up +[1518-07-08 00:58] wakes up +[1518-04-03 00:41] falls asleep +[1518-09-14 00:57] wakes up +[1518-07-25 00:05] falls asleep +[1518-11-12 23:57] Guard #1811 begins shift +[1518-06-10 00:29] falls asleep +[1518-08-21 00:58] wakes up +[1518-03-17 00:43] falls asleep +[1518-03-06 00:59] wakes up +[1518-08-06 00:44] wakes up +[1518-07-04 23:56] Guard #2389 begins shift +[1518-06-21 00:03] falls asleep +[1518-04-10 00:27] falls asleep +[1518-03-30 00:59] wakes up +[1518-03-31 23:57] Guard #449 begins shift +[1518-09-08 00:01] falls asleep +[1518-04-10 00:58] wakes up +[1518-05-30 00:45] falls asleep +[1518-09-26 00:51] falls asleep +[1518-09-20 00:16] falls asleep +[1518-05-08 00:05] falls asleep +[1518-09-13 00:23] falls asleep +[1518-09-12 00:23] falls asleep +[1518-03-31 00:39] falls asleep +[1518-06-08 00:40] falls asleep +[1518-08-23 23:59] Guard #409 begins shift +[1518-09-03 00:35] falls asleep +[1518-06-04 00:00] Guard #1237 begins shift +[1518-11-05 00:01] Guard #3209 begins shift +[1518-07-21 00:36] falls asleep +[1518-10-11 23:59] Guard #601 begins shift +[1518-11-19 00:59] wakes up +[1518-11-17 23:57] Guard #1559 begins shift +[1518-06-07 00:04] Guard #3209 begins shift +[1518-10-15 00:21] falls asleep +[1518-04-07 00:58] wakes up +[1518-07-09 00:19] wakes up +[1518-08-05 00:51] wakes up +[1518-05-01 00:22] wakes up +[1518-03-07 00:59] wakes up +[1518-08-12 00:33] wakes up +[1518-05-03 00:18] falls asleep +[1518-03-10 00:04] Guard #3271 begins shift +[1518-10-31 00:55] wakes up +[1518-07-03 00:48] falls asleep +[1518-05-31 23:52] Guard #3271 begins shift +[1518-05-23 00:37] wakes up +[1518-06-13 00:59] wakes up +[1518-11-06 00:29] falls asleep +[1518-10-27 00:09] falls asleep +[1518-05-07 00:50] falls asleep +[1518-06-28 23:53] Guard #1459 begins shift +[1518-04-04 00:37] falls asleep +[1518-10-09 23:56] Guard #3209 begins shift +[1518-06-29 00:02] falls asleep +[1518-09-16 00:56] wakes up +[1518-05-08 00:31] wakes up +[1518-10-08 00:20] falls asleep +[1518-04-21 00:58] wakes up +[1518-03-09 00:56] falls asleep +[1518-06-13 23:58] Guard #1033 begins shift +[1518-07-22 00:42] wakes up +[1518-05-28 00:11] falls asleep +[1518-06-17 00:00] Guard #3271 begins shift +[1518-09-27 00:56] falls asleep +[1518-04-18 00:00] Guard #947 begins shift +[1518-09-19 00:04] Guard #3209 begins shift +[1518-11-18 00:49] falls asleep +[1518-08-25 00:42] wakes up +[1518-04-20 00:56] wakes up +[1518-08-22 00:47] wakes up +[1518-10-07 00:59] wakes up +[1518-04-18 23:59] Guard #389 begins shift +[1518-07-16 00:23] falls asleep +[1518-07-30 00:17] falls asleep +[1518-04-24 00:03] Guard #877 begins shift +[1518-05-06 00:38] falls asleep +[1518-05-28 00:44] falls asleep +[1518-05-02 23:56] Guard #557 begins shift +[1518-11-17 00:47] falls asleep +[1518-06-18 00:44] falls asleep +[1518-11-04 00:14] wakes up +[1518-06-16 00:30] wakes up +[1518-11-02 00:22] wakes up +[1518-04-22 23:57] Guard #601 begins shift +[1518-06-20 23:50] Guard #3067 begins shift +[1518-07-28 00:06] falls asleep +[1518-08-25 00:28] falls asleep +[1518-11-06 00:47] falls asleep +[1518-05-16 00:49] falls asleep +[1518-09-15 00:40] falls asleep +[1518-09-25 00:44] wakes up +[1518-06-04 00:58] wakes up +[1518-03-08 00:50] wakes up +[1518-10-30 00:58] wakes up +[1518-05-01 00:25] falls asleep +[1518-11-13 00:51] wakes up +[1518-10-06 00:54] wakes up +[1518-04-28 00:51] wakes up +[1518-04-24 00:33] wakes up +[1518-03-25 00:51] wakes up +[1518-11-02 23:58] Guard #877 begins shift +[1518-07-12 00:00] Guard #1459 begins shift +[1518-09-12 00:45] wakes up +[1518-11-11 00:47] falls asleep +[1518-10-08 23:57] Guard #947 begins shift +[1518-06-08 00:59] wakes up +[1518-07-10 00:04] Guard #3217 begins shift +[1518-09-03 23:50] Guard #1459 begins shift +[1518-09-01 23:50] Guard #3271 begins shift +[1518-11-19 23:56] Guard #113 begins shift +[1518-04-22 00:00] Guard #3217 begins shift +[1518-07-20 23:58] Guard #877 begins shift +[1518-09-28 00:03] Guard #3217 begins shift +[1518-03-04 00:18] falls asleep +[1518-09-03 00:03] Guard #1307 begins shift +[1518-09-14 00:48] falls asleep +[1518-09-02 00:49] falls asleep +[1518-03-24 00:46] wakes up +[1518-07-24 00:59] wakes up +[1518-09-01 00:02] Guard #449 begins shift +[1518-04-25 00:24] falls asleep +[1518-06-11 00:28] falls asleep +[1518-07-09 00:49] falls asleep +[1518-08-31 00:02] Guard #409 begins shift +[1518-08-05 00:02] Guard #389 begins shift +[1518-08-22 00:58] wakes up +[1518-09-29 00:52] wakes up +[1518-09-07 00:01] falls asleep +[1518-10-19 00:15] falls asleep +[1518-07-18 00:39] falls asleep +[1518-07-06 23:58] Guard #113 begins shift +[1518-11-10 00:04] Guard #1033 begins shift +[1518-08-15 00:01] Guard #1559 begins shift +[1518-04-12 00:13] falls asleep +[1518-06-05 00:56] wakes up +[1518-10-17 00:54] falls asleep +[1518-10-10 23:58] Guard #1459 begins shift +[1518-08-13 00:14] falls asleep +[1518-10-16 00:02] Guard #2389 begins shift +[1518-07-11 00:01] Guard #557 begins shift +[1518-10-02 00:42] falls asleep +[1518-07-15 23:57] Guard #449 begins shift +[1518-03-07 00:45] wakes up +[1518-11-19 00:02] Guard #389 begins shift +[1518-11-03 00:51] wakes up +[1518-10-22 23:59] Guard #1459 begins shift +[1518-07-08 00:02] Guard #3271 begins shift +[1518-09-16 00:18] wakes up +[1518-05-05 00:00] falls asleep +[1518-09-15 00:01] Guard #2647 begins shift +[1518-05-19 00:46] falls asleep +[1518-10-17 00:48] wakes up +[1518-03-07 00:57] falls asleep +[1518-09-11 00:52] wakes up +[1518-10-13 00:53] falls asleep +[1518-07-13 00:43] falls asleep +[1518-06-26 00:30] falls asleep +[1518-07-28 00:59] wakes up +[1518-08-12 00:15] falls asleep +[1518-06-25 00:21] falls asleep +[1518-05-26 00:38] falls asleep +[1518-07-12 23:59] Guard #1811 begins shift +[1518-05-28 00:47] wakes up +[1518-10-02 23:56] Guard #1307 begins shift +[1518-09-22 00:47] wakes up +[1518-05-07 00:35] wakes up +[1518-08-09 00:17] falls asleep +[1518-10-30 00:42] falls asleep +[1518-04-04 00:18] falls asleep +[1518-03-22 00:44] falls asleep +[1518-06-13 00:57] falls asleep +[1518-05-02 00:29] falls asleep +[1518-08-15 00:55] wakes up +[1518-04-19 00:57] falls asleep +[1518-04-19 23:59] Guard #947 begins shift +[1518-05-02 00:46] falls asleep +[1518-11-15 00:00] Guard #3209 begins shift +[1518-10-13 00:57] wakes up +[1518-04-03 00:07] falls asleep +[1518-08-15 00:20] falls asleep +[1518-03-13 00:47] wakes up +[1518-09-19 00:09] falls asleep +[1518-11-17 00:21] wakes up +[1518-10-19 00:35] wakes up +[1518-05-15 00:40] falls asleep +[1518-11-03 23:48] Guard #1307 begins shift +[1518-04-10 00:04] Guard #1307 begins shift +[1518-06-20 00:04] Guard #3217 begins shift +[1518-05-16 00:04] falls asleep +[1518-07-19 00:12] falls asleep +[1518-10-12 00:23] wakes up +[1518-03-11 00:56] wakes up +[1518-05-23 00:56] falls asleep +[1518-06-28 00:32] falls asleep +[1518-05-11 00:45] wakes up +[1518-04-09 00:33] falls asleep +[1518-10-05 00:10] falls asleep +[1518-06-30 00:37] wakes up +[1518-07-04 00:06] falls asleep +[1518-05-02 00:53] wakes up +[1518-10-06 23:54] Guard #557 begins shift +[1518-08-23 00:17] falls asleep +[1518-09-11 00:19] falls asleep +[1518-03-27 00:58] wakes up +[1518-09-06 00:01] Guard #1237 begins shift +[1518-07-06 00:45] wakes up +[1518-08-04 00:48] wakes up +[1518-09-19 00:25] falls asleep +[1518-04-11 00:31] wakes up +[1518-04-21 00:20] falls asleep +[1518-10-30 00:57] falls asleep +[1518-08-03 00:58] wakes up +[1518-04-27 00:58] wakes up +[1518-10-15 00:58] wakes up +[1518-11-23 00:42] falls asleep +[1518-06-15 00:01] Guard #1559 begins shift +[1518-04-24 00:49] wakes up +[1518-09-21 00:31] wakes up +[1518-05-26 00:41] wakes up +[1518-07-28 00:51] wakes up +[1518-11-22 23:58] Guard #2647 begins shift +[1518-10-28 00:39] wakes up +[1518-09-14 00:37] wakes up +[1518-05-15 23:51] Guard #3217 begins shift +[1518-07-01 00:33] falls asleep +[1518-03-29 00:44] wakes up +[1518-05-22 00:51] wakes up +[1518-10-14 00:54] wakes up +[1518-07-15 00:45] wakes up +[1518-06-14 00:27] wakes up +[1518-07-13 00:55] wakes up +[1518-09-28 00:54] falls asleep +[1518-10-18 00:50] wakes up +[1518-08-26 00:27] falls asleep +[1518-11-04 00:53] falls asleep +[1518-05-01 00:10] falls asleep +[1518-08-02 00:47] wakes up +[1518-04-30 00:05] falls asleep +[1518-09-05 00:56] wakes up +[1518-09-01 00:55] falls asleep +[1518-06-15 23:56] Guard #1559 begins shift +[1518-09-09 23:46] Guard #947 begins shift +[1518-06-06 00:36] falls asleep +[1518-07-24 23:48] Guard #1237 begins shift +[1518-07-01 00:08] falls asleep +[1518-07-12 00:37] falls asleep +[1518-03-30 00:54] wakes up +[1518-06-17 00:48] falls asleep +[1518-11-07 00:03] Guard #1459 begins shift +[1518-03-28 00:58] wakes up +[1518-08-03 00:48] wakes up +[1518-06-09 00:32] falls asleep +[1518-11-05 00:11] falls asleep +[1518-11-21 23:52] Guard #409 begins shift +[1518-11-22 00:04] falls asleep +[1518-08-22 23:59] Guard #113 begins shift +[1518-11-06 00:41] wakes up +[1518-10-03 00:40] falls asleep +[1518-06-25 00:00] Guard #877 begins shift +[1518-05-17 00:00] Guard #449 begins shift +[1518-06-28 00:03] Guard #3271 begins shift +[1518-09-29 00:03] Guard #2647 begins shift +[1518-05-21 00:19] wakes up +[1518-03-30 00:53] falls asleep +[1518-08-14 00:49] wakes up +[1518-06-23 00:37] falls asleep +[1518-07-31 00:00] Guard #3217 begins shift +[1518-06-09 00:29] wakes up +[1518-03-11 00:00] Guard #389 begins shift +[1518-11-11 00:27] wakes up +[1518-08-21 00:57] falls asleep +[1518-08-09 23:56] Guard #1811 begins shift +[1518-04-25 00:04] Guard #2647 begins shift +[1518-07-09 00:03] falls asleep +[1518-09-25 23:58] Guard #1033 begins shift +[1518-07-17 23:58] Guard #409 begins shift +[1518-05-22 00:47] falls asleep +[1518-08-30 00:32] wakes up +[1518-10-14 00:23] wakes up +[1518-10-17 00:56] wakes up +[1518-08-12 00:59] wakes up +[1518-09-21 00:58] wakes up +[1518-09-22 00:22] wakes up +[1518-05-29 00:52] wakes up +[1518-09-05 00:51] falls asleep +[1518-10-05 00:52] falls asleep +[1518-03-09 00:29] falls asleep +[1518-04-09 00:50] wakes up +[1518-10-04 00:59] wakes up +[1518-07-27 00:33] wakes up +[1518-07-13 00:51] falls asleep +[1518-06-28 00:29] wakes up +[1518-07-23 00:44] wakes up +[1518-05-24 00:58] wakes up +[1518-09-24 00:07] falls asleep +[1518-08-19 00:55] wakes up +[1518-04-15 00:53] wakes up +[1518-08-29 00:04] falls asleep +[1518-07-21 00:59] wakes up +[1518-05-03 00:45] falls asleep +[1518-03-17 00:01] falls asleep +[1518-03-05 00:51] wakes up +[1518-07-22 00:46] falls asleep +[1518-06-30 00:14] falls asleep +[1518-08-03 00:32] falls asleep +[1518-11-22 00:08] wakes up +[1518-05-21 00:58] wakes up +[1518-03-23 23:46] Guard #3209 begins shift diff --git a/2018/inputs/5.txt b/2018/inputs/5.txt new file mode 100644 index 0000000..4d4b703 --- /dev/null +++ b/2018/inputs/5.txt @@ -0,0 +1 @@ +XxSsdDIijNnJACszZScZfFhHQyYrRqzdXTtxDEeNnGgOaAcCMcCLlMmogQeEqGgFfGyYuUOIiYyhHlLmUulAUKkudDOoDdaLGRrgoDdDdGgRruUhJLljQqdwWDZzHXxppPTwWCcZzDmfFlLPpdDSsgGtFfTEeTOotyYMOGgkJjKZUuQdNnDhHvVntKkTNqTjJeEVkZzttTYyTDdIiRrqQyYYyxbBXLlKHhvtYyzoKMmiIkaAUvVuvEejoOJUuQoOLlLloOxoOXaAqYYXxyzMmZyoOVhHIiIKfFkiIKAaUukRrKQqASsakLgGlGgLxXhHmcCzZxXMWdUulLJjDwnNYkKFfZzpPVuUvHhbQqIiLRrlEeVvBQJjlLGgjYyJoAalxXuUqgGQLQqOqNJjzZnyOusSUeEFfodcLuUlCcCIiNnGgaADVwWGgvZtTewWENnSszBKkDdeEYytTzpPsSjJpPZkNnIiPpDIideEcCKCcNABbKnpPGgtTNqQGgklLtTuUgGQqaNnnVveEgjJJEejGkKziIAaZmMbopPOgDdGubBIiUZGgzuUoOkMYymvBbVPpmMqQKDdCiDdIcpDjHhIiqQJLlFCcfqxXwWQdsSKkPgdqQDGjcFfCCceEsSkKjJkKKlcuUCsaUuASLAaEekmYqyXxkKYBbeEQuUZzpPeEdeEDKkNnuUQsSTtqufFUNIGginpAXZiJjJjhOWwkKBbogGHsSRNnqQrIzZxXhEeHKlLtTrpPsbBSbBDdlkSsKZXxnwTtWCrRcNfMmPpFzNbBneFfVYyvuUBjJbEzKkZuUkCcKTPptehHfJjEeBbuUioOIIiqQFDdFfvLUVDZaAkKHhEeAaHRrOohVxXHhvNnzQqdoOaAOxsSXogiEeIGvhWwHROoruVtTvaAUDdPpuImMVePCcpEUuFfptFMmfTVvhaAHUuoQwWlLqmMKkONnhNnIisSgGHPwWQVvroDOodgGORqvGgZRrEeMeEkKBbRyYrrzZREepPCcmJSstTNntTjvOoyyxXYzZIiYVUuUunzZBbNWvVPwnNWeVvLnNlpxvVXjJPDdZOozItTiYzRrKkZngGNiIyXiIxYyCcSsEOmMUeEqQAaINCcxXniuOeAamMmMmMRFfoOHhaArMmpPRGgrVVvvIiUudwPpWDuVvspPSbBUzrJmMjjJnNRAamVvfFMaCTTVYyvXxGRrgttkJjYmkKPpMyTtkKHoOhJnNjifFIKTmMuLFftTlwWUtAyYajJyZzmMhHhrRsSHGtTiIgBmEeXxMnNpKkSsDdbBpPPZJjHRrhKQquUkzvQdDVaAWwveEqAaVSAasBbFftQqCcTuuUOVvoUccAaIiCnNCHhXxpPWfybBYOoFwarPptTRRrArRrRusScOoCUMqpPLlfFMmjJHhDdpDOpPoAabBwWdQqfFPDdeCHSHRrhlLszqQZhVvnNodDQqOPVvpcAnNLlfFSoOsiIOoSsJvOoNnVJjxXjkKuEsSEeWbBnNEewpPbBANnakKkKHhMNnrXxjJREyYemoOqQeTbgGBtIWwiIFfHhiCcEKkeHZzhhHRshzkAajlLJKZVvEeCgGdDhHSPpEQqOoescCuUcPYypJaQqFfGgPpAPpeEjZzXxbBNqQfFRPTIRraAFJjsSfibBZztJjrRprlLiIycCBbYKknrvVHNmMneEhSshHGgSbnNgGBqQDwWdUutxXxFfXGNngaYyGgHSshfFrRjAaJAVTKktzMuviJjIVUmbTtgGBzZmMFfwlwWtHhTLfFWYycXxCrEeNsHhSrECceRTJjtyYRrGgrRZsSiIzpjJgGPeEhHWNnwSsZmOoRrMzxSsQqaAzZKtTkWsSyuvVbBVvUYChHOCcoeEciIwZzWlqQLnNpnNmMPwIiTbNnBLaAlJPpSaAsjGTtyYMZzfFmiaOBboAOAalLEejIikKqQSsXxAaJJpzZwBbBbnEearRAmMNDSsdyxqJjlLQHhpSsPEqQeAauUJKkmkKLlMjvVoOPpPpCBbGgoORrtTXuUxfaIwWiAsIKkpPifFSQqZpPAXxazEpKkPtTqQeaAnLdKOokLlDlpNngGcCmhHMrRiIqWwqQVabBARrcCUuviIvpPbBwnNWHONnIioGgOoIiVvAuUaoMrZzRugGUmMmxXMmaANLAalnOhbZBbzMmZzmMuWwnNUJjdDBqQHjJqQaAbBhNdDnzZZztThHeTtDUTtQquaAkCcGgKkjdDJKZzbcCBwWjBacCAYygGiILtTfdDEeLlFkKiQqItkKDAaKkaloOLARraApFfzZtTYkKcJjdDGgDdfFCPpQzZqvVcCgGfTtJjbBCLlAgGacYyFFfyqQYyPVvvCcrRQqVwWkEeFfpPKBcEeCnBbAarRNnNnCcTtNbYyhHGgPOGZzgopHMmNnIdDihyYHhEeLplLPieENnfFXxAavVIJjJLlAavVJjBHqQmMhbiImMbBEejrRQBbjJKkwiIWqKnpYyPVvNbCcZzBrGgRPpiISszZAazZBbzGgZUuyYbBKkoQXxIiTtOolLfFNnUuqjKRLlbBrNnMmkyOoyYWgOozZlLBbYyOojJDaAkKmMtOoXxqQAaTncCBCcaAevVEeMIQqiQqXxsSmEDdWIiwWIiqYyQwhHXJjxxMmXNwWFfnxRrXXtoOTxzZpPrmMsSRpPbefFEkBbKtTMmYyXgGVvWOowRWwreExUuyYFpPfztTGgNoOFfMmnXoEeOBbxRrUuZzxZCczrdDRxMmZzWOowTtJjanfkZzwWoOfFKuoOUFUuHhFfKLlkyHOovVrvVRHhRrSsJTAPiIpjJoSsOQnNqaQxXLlfnNhHnNlLFiIsSqtVvltcPOozSsjJHhLbBlZrLifFIhBbkKHldDsvVcCSMmtTlLBbumMOovVUWyYcCNnRQqrKkwRpmMBUuASsoOqQabAayuUFfEeVvUuTtJjxXmcYyFfCEeUuPzdDZDdpOWwZyVvQqYfWwNnFzWVvwaAARrkKaoiIcCsWFfbQqBGgnNZzyYcjGgJCrkKFfRZFfzZHhzvVUbBumEkaAlLKsEeVvSIiezZhHisSsSeLlEIxXcLlCMFQqfGgmsLlaAMmaACctTAaYySENoODdEeutHhTKFfTtkkgVvWfiIDdLllSSssLbIhHmMeEgRrGiiIufCZzcFUBFMmdDHhqpOoNnWWwKYySseEKkxZKkzXiIdGgzZMmDhyYHsMmIiCcnbHSXxsTTtthRjJhXxJXxjBbUuPQqUTtupLNnVvtTlHjJqQrBJhHHbBkKhyuUYKknNoOcvVTtyYeESsCqQQKkqQqQRrqHmMZfFnNXVvCcXxgGxzmaAMjJvVTtTtRzZjJrPVpPkaAzZnCtTLlTMmtuUAazXJtgGTjRrSsrRqQqWJnQuUjfGHbBRQqhrRHrtTdyAaKkOoSsYQarRxVqkKngQqGpPHfYyPoOvJvVjVrRpMmFcCkwWaAYfQqtDdNMbBmVvqQpSMdDmgGsPEeyHgBbPZDdGgrPsSsGgrRCcSequTtUQoOKkSsfFflPpLFILliWwEkKcCxnNXYeErRyZztTpHhSBbsmMgXxGRrmMReNnEHheGWwgvVgGEzhHRrlHhhRrhHqQHLwtYwQqWbBjJeQqRZzrEfMmKoOXXxxkYObBoqaAQRrCcLlyhNnEOoebNnKrRTaAtuUkbBbBNuAaoOUnbDdGgZzYyKkbBuCXrRxcAaPfFpGFNZznkBboOsSggGiItXxEeTgGGKsSfrRvbcqQCBVbBqWvVbBIiAaRryYTOotHhwMmSqQjaJVJjvcaACrTjJcCSsQqDUTtucCdtIiHhQVxXdDvVkKvLlqPgYdmMDKrRjrRTKktQqOoAawBbDivVIdWnqFBbfZoOzQOoDRrdYLlhHxNhHnGghsSHVUuvsvuUuoOlEefNnFfWwCclLYyYyZzRroOTtFNnhkKiIHKkqMmwWYyMmPGTpIiwWzZTtpPhnNHmToOTttfFYKkPplPpOoLVUBbuRrVfFFJjffSTtsVvJjFcCgCUueEcoQqyYNnqIeEiTtQpCcWtTpPYyycaACYSyYsJiGgrRIGGgDNGgxyuUYXXxhvVHqQnDDsSukKiIEeUeJjmMGgLlGgtTKwWkxXxEeXEHNTtnhSXDbLlBddLlDzZNyYKYDRrXxGgzZdVvSgaAGsWwlbBIWwzZiiIXxLYyuUllLlXxSsvVLVvQqIgOoGeehzwWdDyiICpPIgGNnanNJjWDdwOoiIAicCxXWYEDbBavuUQQqUbBuuiIUHhWzZZzmMwKkqiiIIhYTtyvwPpTtKksSmMnGgDdNRrHhKhxXOXxpIiPzTteEZVWwvRaArCSIixXFfTtQqsclLmMPpCmxmMBbXMQYfYyPCczpPZqvFlLlyHhYHhjlLlLJOkKdsSDXxovMCcmmCcMqQLlVHLlFfhwWADdREerBbpVmlLMJjIiqQvPbeEBqQJjNnvdDVxZzXYVOFTiImkJjKNnDdMkKqQFfUueWwEhHSsxXKkmnVoOrWAawRvglLPpZCcpPYASstTGyLlSsYCcqQeEgIiVvauZzUnZcCzKkNFfTtWstTSWwzZlrRLMmEwWBRrPpbsSCgcWwJcCIAaijCRrmMdBLlrffFFBbdaAkpPKDRPpBwWbuUGgMmpsSPCcQKvVyYwCcSsuIiLlUHHhDTtlLvVkKIidYyhiIXxxXuLlUzwWiITteEmMiINFfnNnZNDnNcGgdDCveEVdjJnYyBbVvhHyYrRwAKkaChHIiMmcCcICcuKkUjNnJyZzYyYoOrRrRWwefFaAHhPpNvfdeEgGdDbFfBbmMJEejAwWaDnNvVdpPRrMrmIBvVbSsiaJjqmCcMQudDfxXPpIihrRkYylLRruRrUaAKoOyYbvVHuuxXUUxGgXSAPpNnKicCXWuUYyweEuaAUlLOgaAGXxtOoTgBbGCczIiZUuXKkXClLeErUVaAvwWlLXcCxnoQPpqFfOecCjJLlEoOzDdZSzZiuUFUuIifbBiISSlLsQoOqEeBqQbrRxXaAIiOojjJJVzqSsrRwWBqQYybQUCeFfclLCspPSEPGgYyfFpGgnNNtTnQqeKkUuMxXvVmRrhQDdCZzcCCUuccoOeEJjxXMmqHDtnNAvVEezfFAaZUuLlDdcIiZzZzCrTtdDRVdDvLsSlTmMGnNfFeEvVqyfaAFQqBbehHELyjFfJGgNyYTtxSsXkKOoSsJjKkQEebsSGQqNnFfYygmMUbBKggOohHWhHXzburReEUyYRroOnNpPBtfRZzrMEemWwFTklLZzZOozSseESYysszZSqHhQRrnNKpPfFDqBCxXcmMgGbQdsSAadDEAoOoOGeObBoLlEgaUDdVvOooOrUaAOouXhHRrdDUHhudDLlPpsVvSxRrUrNBbTtTwWtCyYcqQrRJTtJjWwXxFfHhseEzEemEkKxXtTerRiIHhamaAbcCTtBteETzZINXxniiRrIMYaAyxKkWwzbcCwuUWBMfRruUFVvvVXxmBbCcpfFOoPQcMmMmBbLljJwWVcCSsPpsSvCMoODdYDeEdyPqQplLlFfxXLmJSsVnNvTtIiUuOoFRHRrhwAXxukCcwWfFQuUcgpPGCqWTkYyjWwJKmMAZvVzaBbaQqACmMcnIiNweEWSoOstTBvcCVouqQUkKdzZNqQnHDwnNNnhHuVvJoOcCskKSPpXWVvxyYXwCBPpIibcesSExqbBqmFRxXrhZYCckUAaaXUrlnNLJxXUUvUMmPiQqZkZztTJWwyMmKkSMSaJjNnpPAQfWTtKKkoOBWwbhDDddQAaqHWwBbhrYyRNnAaNRIireEoObBWUuwnoOBbPlLpwyRrYDdTthHNrRnUTEetWwSbBnMmNgHhGsKkdDErRHbBoraAROpvVVvPGEegrRrdDNRrNndLywWYpTtKkPpTILliAatPlDLvVlFsSfKYTcCIxXVvnfFRrWwWwmmMMmMbRrBVvDdRrsSeiIEUpGtVvTCXxcbPpBjbBJBAVvaDqPpcgGCQOoPjJXxpftNXxVvRAaeEKkpPMHhdDbBiImkKKcCsFVvfvVkKSDdQqAafFAaZxXwWNnzlLnMbBmmMqAaQwTKnkMdDdlLzZDCcmuIcCGgzZiWwGRCcrgUiILUAWwaeEXxFfCciXeEfbBlqaAEBbVQqIYyifZzsSFItTDdanEeNsSlLldDoOeEHhMqSsQaAsmRrMjCcJXRrxScCkKJjfvFbBfVvVlXlgGLbBiQiEyzZYyYehtrRTHiIGpOaAokKkGgKTtVvCtUuTfFcCcuUEmMixXITsSwWgExXYBbBvVbaAfJjLdDSsKkDdAaVRrvpPBbZzjJQqSAaNnsyHhsdDzZlLSYbBdxXetTEgGSsYymlauUeYyEfFaNnAALiIXlJjLxjwWPCcoEecCOJjhpwWPbWKFfIizTeEMmlLteEtTRrCcGgrWCcYgGTHhtydNgAaGnDwTiItYWwUhHwLFKksSflWnXxNaABLTtAaMmlPaAheEHpnNOAaSRrCGDdxKkXlKknNIDdiqQqQoOuTJjtUTtXxUUumMtNnTYmMoWWGgwCcYUumMmMPpvnXxnJjjJNNDdXiBbIxVwWTtFfWwLIiSslqLQqNnXxwfFWyYGgDdQevVARryVoKWCcNnwkGgOMmvVwOocCXkKEehHtBhHbICsSciYytTZaAUGgbBuZbBzzsSTDdPpJXxlLNnzZwygpzZwWtTsAaQqvUpiIiIiIPRrgFMmJjWESseEbBewTtfWwrjJYVSanNhHAfFsVvzZbFfzZBhFKgGKoOkcBEeWwoeEObCpnNPpPlEOCczMmGgZoewNnJjUPkKpkPpRrZzAQqaumMqrXtOoTcCNoFfOnNTtnAaPUuEeesSEwWVvpAaeENhbBHnJjNnZvaAAaVQqQqPpgbBGlukAiIaRFpPfrxXaMsBcCaAbBIiPpbOojUutTbhHXcCrZzoOZzRJjmgGMeGgeNnyYmyYdwWDMVklLKrRvVvjJrtTuUWbBUcCuDdlLyoOYyYmMjRrsVcCPpjniSsOoCcgXCcfNnwWFFVvfnWzZkLlgGwWKdDSsGEhHWsAaSZEUXxLlyYMmdDMmrRupPeAaCcWwzwDQqiIqQfVvQHhwWbTobBsSZXUuXxbsSyFtTjGgSkBbnNKGgtWyYEwWevAaEeVMmDdQqOUuiIbBhHqvVQHAgJjGaAjJbBonHwYyUpPnNuJgGjSsTmImMZuFfmPpsSTccCCiIpfiIFPHhTtPpKkUTlwWLtnNSsdRrXxKkAMqQoOrZYywWzOoqQNFfYyjJnNjJZYyvEeVzfjJZzVVvFdDYQqysSfNwkKWrRdTiAWwahHqcCQRrrbTtJNXxnZmmMJjJjgwFmRrRrAaquUKkXTUuDdbtTBkKmMqQlLEeSsGtlTtoOHhSdDKMmsLlPpgjJGvVSoOPpGggGwWhJaASszZaAPpUqeEVacCAfQqiqpPSstEDdxkKaAxXXenleGguflLRDdrqQwWDdVdeEjRrqHhQuAaOoUgBzZAFfajyJjJXxvVvKrNnplGgpPXiIHhxBlHhHtThLNnnNzZbLCYycSdDsCceuzEIielLCcZiUuEqQtTqQiIIioODXxxXdUlLUiIPZhXFfqQzTtZaomMeEvVDBboOdOxXaAWzsRkyYgSqatTAQsOoGCQqcEedDKMNtXxmuUMgdDGpPTgGWwuUmMncCmslCaUuAcLSrMSwAakZzpzZMmeXQlLwLlWAaBqQNnhoOrCcxXLlRMRrKOorQiwWIlOAaoBBbsSTtbqnMmYcChHUYlRkKqQHkaxpPriIoOPpXvhiYyRrqQqQIHUxXjMmmMrRxcnNeAXUpNnPIipoQqOZWweEXQqDvVSsdtOZzogaAaAUqjAaJhFFYykeEKXWwxQJjfFWzGgugGTJXGgKkgpPGSWwSsPiFpMmPvVfIwHhWpelXxLdDqQwWxXiIVrqyYLOfYyFtOoWHhwDJjGgqkZzKPpsyIQqHXxhNniQUuqcCzZzyaJjvVqgGnDVvnGgKkEevVIxXNniVvTndDQhHpPqmpPMqdpdDWwRrPeEiEeOBboZzZZiIVvzzzZhHIDAaMmXxNnQNRrhHtiLsSCDMjJqQmfFPplIiRreEMPKkpNnzZGgPRrQqpBbDdWtHdDqQhzSLlsZMffSsFFmukKbsSQRrqadDXUuxAXYiIyWwpuUgGHpGgAaPHhXxKklLhfFKzZIikPLlxXjJHhtjJTHhNnNnxMfexkKqQsStpEehJjhvVIRrTtkKNvqQVfFAKdvkCuUKkcOJmTtUqQlLtRKkrXjJoOxLKaAhHTttTkYgsSGyBbXxQqpjdjxFfYyXJDFfVvadkSuUmqSshHQqAaBbAaUxXuXxtNnEeaoOyXxYbBkCcgGFNnPhnNHTnNYyoOxXFBuOowWUbCaAthxfFXjJhHHCcYdQvVOkCLlLlcoOEpPGgLleqfwWFQTTtNRluULrntNdyYJDdyYDdaYpPjrvMoOpIitTPaAqQssaUuLlAkKCcSRHcefCSsOoevVrREvVcdwWwWabBADkKgdTIgGiteTtWtbBTwCeEJkIQkKlLMIlLiGgpTiInaAvOkLDvAaFAdDaXzZxwWuUOnzZlLEcCemzZwVvyEePpYWuUbIitOoeETyNndDYOoyiIYmMIoOeFfEVviWyYwUutQqQzQYyYypuQqkKrRLlDrZKkXOLsSeMmrRFfipPJjnfFLfFSLqQCcwMmKkWuUmSarRAsruXpSsPJMmDdPTtpTtpcCcZzCmMVbBlLXxAamMmjuABbauUddfFmMWUiIfEhHEeseETjpPOoHJZruAaUtLrRlgMmodLlyYOoVvuUDdnNSkuUgGwIKKkYyjsPpmJKJjCcFHhfUYyFfeyfRrJmMjFTthqvBfFdocCnFfRcCgGYyBbrRrEqaAsUulLSKMRrOokKRrKkKlLJWIjJiwdDWwcCGgIixGJrRRrAGgaqOogghHGrRKIcEegdJjDGVKWwfFkxQqmeEMCcXIivmMtYyTGuWtTlRyJjYrXxRrZtTFfzLKHhCAacgGuRrAajbpPBTBbtQqrTtOoeEJjXLmMyYeElbBZzlMwIAaOoUuKkiXGghHxWUiVuvVUvvVrwVaEeOghHGEeHhoAwBIUpAagUuuUGfFqQRNnjJhPeEjKkGDdgIZzKpLlaoOKgGALlaFfLDCcLeECOUubBotgGiINnTjJcEBbelIiTlLeEXmAaMxuUtMzZmYyuRrpPOojJcPxIiXEeaAYKkyEeeEBjJwWExfFXejtTJNVqQoOtTfFvRSsrQEjCDdgGcSsgGJXUuxhHlqQthxXkuytTYUKVsIiwWSNPpnBbZHhzFQqflzZMmGgkcOcCGYyEeWwhHDdgANVvNnBbVLeEmMiFpPfLlKksIMRrmUIiKQqkIiZzuTXeExQqSrFqQPpFbByYTuUlMmThHrEFLZzlZnNzfIsdYhJjHWcCRxXEeSueXpPjyYmMnrRNxXrZzmMPpIiiInNRIhHDpPQqdVxXutTUJLYOodrRDxXmlLEgGeMyDVvdikGgbBRriRrdOouvVdXxRvIlLPpwKsSMmHlLhfvVJmMOiRxXjJaAjJrxAaYyEezZDznSssSQqjlsSWwCMAamiIcqKzEzZZzeBbTESsTnqfFprRPZnNGuUmSfFIkQPqQHhjJpqqQQRfyoLLllnPkcKkSXxTtsxXCgPPsSppNnPdAeQqBbvVcZDdOiMmyqJBiIQTklLKPpsbBGgMntTLlNfFTtWwtPsSppzZSjJsnNTAZOxHRrkKvHUutIsEeJjSiBETCctyvVrUrRRAUuXxarNnuIQqYJjwVsSIiZzdTsnmCcQNnTAHhatHhnkKcYDdyCKbByYkGgYywWuuUQLlqxmIZziJJjLAlgGLacXxYyCKwfFxXxXWCchHkKkpPdDgaALlOqUuFfLlcSsqUuPTtEeMWwMnNmJjNnvKkAaiIKhtjJIaAFfrjJQqrRtTRxvVxXWuUPIiTtpAwWeEaKkwlgGLuUIuUjMgGlwWtTFCdDcxXIbdFCcIwEeWjJiCxXTNzZvVdbvVbBBkKCWwFgGfcRAarmuUNRrGgfVbmEeMHhyLlsOefFEQDaAxXXZmMztKqQlLktTYyLlnNrlLVvRTuUPiIHhXuUagGulVvoVeZztbBUuAKTzZtjJkgZxqQXOqQoFrRzaAGgBbPpVsScCMDdpPGgmEeGIWKkrRnNXxwVoOvPpCcbBZziaAEFfEuUeERreYqeEYgyYQBbqGKknNLzOopPCtcCRrAulLhTtuqQnNtTaAFkWdDMmEepPdDJjssfXtTzwaAZiIzYnlLZzvHhbBUpOEXxeyYyYvVIiwWITgjLlJNnXxfFdEeKbBUuZztTRAafFrkPtfFcCTtTdDhHNEzxXZeeurDdRMzZQqmrvVLlRvKkQaApPlLWwLDdEeOoEZtKkTWYSsFfypPbBqnNmnnNNUuMeEGaAgKEekFfEBbGZzvVmMEegKPpkYyzJjRsAaSoqFcCjFxyAajJYRrCYyXIicCXxvqQVEJKqQBbkYpPyjeEhrrRYEeJwpPWlVvLwWRrAzTKzQqxjJPNsSMmYybqQiUXuUhHFyYfbBKCcksSiIxucCvzYGVvjSPpnzYuuUAaUWwYyuEeUFfzFcqSsjYyBbgmqQMWwkKeEdDsyCgCcGWwRrZzIgGiLrVvtYyDXgNfGgPpnNbBDIiqjJQdzZgMJaMJsSGgjVviINuPIZzJCcooOlLqnNQTtOXxrRyTgGkKABbRrUukKrRsdDSGdPEsSepDoceAaEgwWWwhfVvoSsOeEtZiIMkKpPYqQVDoOdvEetTyMmnNjJwVPbytXxjJTyYFTXxtzKzZkbBhIZOnEeYyywWEeYeESUusudDpQqNiInPAlDdkJlOBbaAqQMFfbZzGgTtBieZpPQqEeoQMMhAakSsKHAakKWUuGoOGgKkgoEehHeEQqlLOVvWwPkHNEBOVLpPAamRTtDdrSswWMWwEeqQxRrXeEPLgLQeZyYzERlHhPqmMQOtIvVwaNncJjuUnNzZOqQWRrQqsgGRrSOmCSEOKSHhseHcHhKkCzLXpRrPrIKHhtmQKHnNVxXOMlFdDkcCKTtQVHhyjJUVZNFflLngGgGuUpPkKkrMXxXnerREhbHhpGFyudwvzaAZKkBbALDYpPSHhsjXwqOodDwfFWQWrtWoMmOwKyYiVqQvPpPubHfFUuYcKYyiIqOSsPpovQQSsoEAwWUuvekKueEAAaUuKXxNEeWgGwcbBCKXxhHQAaFQqWmgrUAJjlNAtTanIZbBDdiIzZggTDdnNJjtCtTIpzQqgMFfCcaAmcChiFfUuHhMYBbymMnuMmUqrRFROEeoEeJjhZzahHJjlFYygGAPtmmMnNdDRrZEzOoZaAaFYpHhPzZyAavbBzZPtrFKtJyYjnYyXWwxZzNdDTNOohHFfquzDdZhkKHUCchsSJYQMmDJjuMmCZzbBcoiwWIiIHJjtTtFfSsHxXhTVvIiaUuhAadyOOeEoWDdeXxoOpSsPEZzCcsSipmSLyKksuUSJTonNOXxGVpPczEebQqkKoKOoXdDxKOnaAECcAxXAGgsWwSaZUwWxcCXuKkwehHXxUuUadDAFHORrohfuaMmASsEjcKTDdDdKNgGksYylLsmMnqeXxPxXceEPpCIlLANqQyYEensSTZiImMzSVJBhHBBbBbKktTJIJMmYyGgSsayJYJxkqdDFfQKPpMmWwXjSprRkKDdnIcCbgGBikgUucCGnSCcsfFJLEDKlAagaJjAjrqQRJZzTGlTtjJfFrHWwhRfqRwXxAaPpWcMmZuULZhHzpPmureEjSsJSJjnNnNcoOCOnNdDEeJjBEHwWcCEzwEkhHAPpnNjPpAYykxVlLlLvWwXXPpxGgmMxXOoFfyYPpPpzgGiBuUYgjYyJVvVvtSMYhAJcgGZXemdRCgmXxMFdDpPzZIvQqBYybVxIiXtVPvHxXBGCcuUgbbeERbBPriIWwRYyMEepPmJAawkKaRyoIiOfZGncCrIifqQKkJOojfHbBlLhFyVvPaGgwyYBFXxpPnNuUNnhSsbBlLpPEMmFffFeHPmdDNnMpwWfjpPLyNnqcuWXzOoZtTzZxjJLlUuXxGgQqVEeFBJjoxfFXeLlMmHCcLGbBqvswbnaZoOzCcVvCGXABBbziITmMUutwWKjJfUuuUMwWaAlLiNsSnAaCcEhHmMHhJOoKkjeIrIEUuyFbiaAIWUuwDeEFrRTtFfLoFTtDSsjUuWwWuUcykKTdvBbFyYfVuBSsbUaAdbBDrYBWwbyVNnGNneEgYONnrRIdmVbOxhWhBbuUoOaBAsbhbBvFfVzLlhOLloZzuMmomtTMiSsiZuUoOBkKbPJYyjISsSshHgxXkaAAaKBDdfbBFfFKfuUsYyiqQXxItEeBFdDhHnNyEevHHFPpvVZzLDdlDHhkKnNqgXwWbBZzPJLlKkMJjjJWDdmMWwwKkFDdjSsoEeRzZeBZzNuHhdOoDJdDDWwqIfFiSsXxKxWmMwXqQjJNpjXRMmsnaArJjCcsSpPlLCclXxdpmMmMbBwPpMbBteCcDTeljbfiIGKkbtcVvCTrRfFrnNmrRHTtXxLVFnTtCcCUTKVcCpPVvwWvxXoXxOvaUAagCcTtQzZFcRrAaAxpPxXhHkKJSsugGlgGLbgVvVKkYRrJjlCQqaHKkeEhHIyixUuMmkKqnNczOgyYexbcCBIibBRWkBbKoXDFPcSseaAKkfbBEeAEeHhqQylLCcHhPpEJxXRrSHhUZzzYyTtnNZzEBxmtTtdtTIiDgoORgGuBbDgeksSzbBPsSPWMmITtFfiKkmjUujJlLJMEcsnNNnIwWJYyxWPpSCcsGgCgMbWrRwRrOdDwWHcChGgoIiBDxFfzFAafnuUzmMjJmMgGInNievVEKMmIGgiuwWUhcAaOeGnCcLUulaAXMmxCctKXxkXRrUowVrYyRlLzlpPyYZUojMYyqhkKHzeMmEMdDmrRAJjDdRYlKkPpaREehHxHhtTLjJIilcJjoZzOEIWwrRDdimoOMsSRJCwWMmMmmIiMmMNNnnSNgGThHtnnNmWwvNMOWOdDonjcCcROoOoFPxUPpHhsSuXSvVsMmVvtTJZWGJjDHIkJZzzZoOTNnaCghyYxgZfnNJDdKUNnBPbBplwNeXxbFfcYPRjJrtTpLXxebBEhNnhHzFUEeriXxZZAogGVvzhbBHIECcBbVvZzDMmKgcCDcCdLxDdcCXlwQqjJWVaknNmMdDLJjlIHhLnsSaAJjrrSpbBPwIMZzYeuUUuBHhbwGQqHhZvfFVvVgGsCUuuHhweNRrqipDIidWbBwDddDZYhHlxKfQwUugVLMDdxXfFPpmhiVeWwrlJLlYyvzPpzVfFvZOogmYXpaAPruUAfoPOomFfRXxjtqnfFNOSsoXBXxLlNnaANnbylLxZkRXvgGZziIZyYpmMPxXaAuOoTtVgaAEeGPGgLlzzGgHhSnNsYxtpPTpvxXkHUuoOVjuUJvMmLlbraglLfFqEezWZzuUfFwkhJjBbhgWwewZzWECWREdDmOoJjwWJjxaAXkTQLlqOofCqQetTOgWxXwvVGtAaesSETyFfYxXoxtkKwxXWCcTdKiIkYyDlFEefFyYMPaPpPCcklLXkKnNoOlAdJOSUuYyrRrThHBbqLMxbBhfFOoHCUucmMeXxdDjnuJcCgiInNrfFvVQsSpPAaAmbBMdadRidDYyRrfZzdbBDLlSopPJjXyRiIMCIMojJXxIxeGtiyYKkioldDdDFTbutTUSsKlLmMXxksSLlrJIaKkOoSNnoOUbucyAjeCcXCctTanNnNAWDjJDNndGgVFsCuUcSwWfBpJjxXBbWYyzZvyhUuHYvhHuUftTFCDRSXyYxseEMmnNZQqOYymXxEeyYbRzaIywWxXSsgsSGtaLlNrRDzwWZdAanZzqQpMmJrqPFElTUutJjwzZlwSaAmzZZrRzoSbBsOCpmMPccnNuUOocMYMnNOTtcLlCPpwWyqQeNGgnMmEEPAaKkZRhHrsSjYyJgiIUtLGgTpgTSQGgqZlowWOLzvzkcCrDjIXxkdDKaAEeElIiCTtcIGMmbBVvIjJJeSkuoBPpzZbphHTxXtoGqScBbElLheXxrREeromMORGgyALXxqjkKJnNSDdNnKlLLlkotgLEelPpmSsMqmDdTtVeEvWLFfloOJiIiTtzWwJkiIKrRrRrlLQqOUxsSXxoOlLoOTvbBVBUulLPLlAxIiqQFzZPpDmMdVvoqdDqQNjJnQwlLFfTtWkIZziKfFhgYueEUjJuZlOrRrHhoOxlLOoXpPRooqxXrRQSsOvzZjhHdyYDWwJTYytwWuUXxMbBmAiInNFQqQKtXxRKUuBkgTtGKxoOcCEsctTCPwWpHhbBfiXDpPIiTtdyYFfwWxdnpPqFTPFfpGQZzJetTPUuplLTtwlLtKkaxMiIfMmOoPrLlfFVJFfPCcloOLSsrRejBbSjJsJUuEHLluvVrHAAadiIgIiaAGqTtxDJfoTBbtCcVvbnmMNPpBSsaeUSLhHjSsEvlLVvVjAaLzZYywUDdWNnwcCKkSyYKuULUDdnsRrSrRNuoTtdDSsprRtTTuUPxNCcBbzZrXVMmQqbBkJjMMmmKCTcmwWpPQhHetTjJUucCUHoPpRLlhHrkIWwWRrhbBftzZTmMFPGgnNuVvrFfxXRciqESsYkKyYymPpMeZzucbBSgGwWvVeLlBbzFfhbiILPpxrRrRQqVdGgjJGxXGgmMLlnNJjqnTtNYyvQrxXRZzOVusGCcPmMpgSDdkuoOxcBbChvrSsYfHcChDdFPUzZnNiWeqQvVkcCKEwzZIbIeELlqWDdPtgGjMmPpFfVLlvZzGFfMOmJjIiykcCFfdRrdDDEOTtoDeWwHhdFfDpsSPzZlawWAVvjNEeyHsSRzzJRUurjPpFiWwnfFsoeETbYbBRiIrOoIiOEqQKSwJhHhHEwWncCPpntMmQKkqmccCwvcCcRBcCzNyMmvOoVvjJLYyloOVNnMjGgyAVpPxXqQgrvVxsCbdDBcGQIipPNDdspQNnqPaARrpnsScCTrRXZKsVbBeDkKdZQtTqhpGvVLDidDEnNeydTVcfLlFImWYQZhhawojJjJQORrousSVwfFPenAaAaPpkgGUuKMmAaNpceEVGKkXxXePjTUgLnNlGGgLNnqpNimMvVOtkAlLayYkUuKrRxTBbAatBkKdDknNKkMmnUgOBbooOMmMeEpjvLlSsIqxLlJjZzUKkTtYyAawuUNEJuUjfLkINVuCArRQqkKJZKTRDhkpPIiBtTCvVHAahcLJjaxBbeEBFYSQqxHhdCUlLAmiaAjLlaAJgLlimMITtFfjZYzuDdoPlLIwWaAIipqsxXBAaVvbjJuUGgFXYyadsBbSYXeIYyeEvVijYAQIiOozZcgGBbcvkBLluURVvAdfzWhHwPbRrvVjKkBdrRDguHkKoOAZVPUDdIYrTLlQPpqsSNZcSsdAWziFfLlqQwWmaAMmMQBZzbUpMVvmoiIsyNeGgkKeEFvVrRMVBhHCcMcljMQkPbLzZwJASMmHpPtTHcBbYPpgGsxXZzUuZlkBbKjJgYyDPpSXxghHCuUGpPggfyYOoLnBVvzTIrGchotThHJRlFBvgghHGXxzPLlpHeLgiIiIVgNnGnYWwySDdpSsMglLzZGkavMPDdBbGUrKkaARuqjJQJwWjbBgPpqQQuoaAOnAduDqHhQdUtOoGsSYynEpLlQqbBMmgyrUDMmnKpPkNdTtLacDgGAaxZqQNnOoAKdFfFHTVBafFAbptTFfOoRLihKkccLEiPLAZFCcYfFyImQLlqZcEVveHMDddnMTwWsKwxRnNYWwyugQqGwWPpIKbBPpkjRrSOoExVvJjNPBodDUukKTwhfFpNnWXxIilyHhzxBGOoYPpDdDayXxzRrZkbaPAhqQzZHfgkkKQBrhJjroHfSsCcNiIcCFjUwWPpsSjJVGMhaALVvlHEeyYuUNnLwWDEeIPfFpvVAPpagGJIihGgaCcFfAzZIZDeNnEdzMmUkyVvWcCGwQEYygKkGNukwWymMYcWqQSrRWEIEeYyEJjMmRreZctbAavVECphHXUuxYtoOTHDdhIiWcCrMmRwvVDdAirRCTVsUuSDvVJwWjMmdkKFfwWuoOYduBdaLVyYbfoLyYlEPpFjCmOoMlLMwWmyJjmMVOafFDIBbLoDdbBLlIiUwWuLxvVXlnNkDzZnNcZhHrRMmzllzNnqTeEmvpPCcWBklLDdrqQoUXxZmMxDfeicCUNqmVvGDoOevBUWwusVyRhGgOocCLQDdqhzgNuUwWaAyqFFLLzZZfbBNnFzISjyYQqWwWwhiIHIiJOoYyskQDpPtTBAaMbRbYyBuUrBSZzJYbqCtpAaPTcAqQawDdZcyOxXzHhzZSssbBdPdRUuBeEbrsRarzkLBQqIYoOpPNnbhfFHcGvVgSsShHYynYyKkiIwWHhNGNPtBkKWbyzlIZzoVvwWiIVvbBRrOPVvNnwWpurIyHYHhPpyfHCMmIiJrrRRjNnSstmRXOoOoSBlJjlrIivNrRngPpGNEVvSLpUvVhHXxfFnNPpzpPZtNAoOYyIOoJjQpJjPiIhcCmMXDdYyYgFkZEIidoOdDmNnJlXiIhnDdQqtWjAIiIbBIiiIgGWLlGoOKruFfUTtTtutTUdQqXOAaMQqmEeGsTKkaArTZoWwOsPwWpVvJjFiumhHAaNSsbBzZblLIfFVviBUMmYskCsSMeEbsGgGYyQqgSgGrsSSmMshKkHRKkVvvzwBwjcCJEPqNvsSCRwuCcUHhcSsOMGPJNCcnMmjHhNnRrtTiQqnNZqtmzZMiNNNnnoHCcuZzgogxXgNnGGgBbUuGPpYpHhnNPsDhCcTNqcCKGhPqQSjkgxFfXwUlCcDdozZCXasRuUQGArgOxXGTtznNZxXgoGRFqQmMKkxjJAwMcTtCUkyYKQPpSspUnNAazZLlnNyWwYKkueMBoOmxUuiISsdDbBDVMwWmnRroiqQBIzjCZDdSsVviNIsQqMmHcRrMzpHhCcPdbDXsuFTPjPpqYuUkKsSfFtTUuuicCiIIULAaiFVBsSmQqDkBHhbUdIiBjyWwDtJjcMwWzbBZhgGrvVMJjJfnNenNulLByaAYcZzgGpkXeZziSQqEnsSGgnNNCgYyPqQvWwOoVcCTiuUrROZEkJjGvVkDdzZbaUWnLppPKyYTtkPRrgYYLfiJZNnzYTbroXKbFwWfXGgUnNJpmMPvoOmMbZzbBkNyvmMVtkKTxXEyOBrEeRbMsSmIiMmdDpgFfGPDbBdmMWwpPPVBzZbKfdlLQqrRlHnoXEeVvaAxXJjxPvOtTwWiWxNrRnXYGgyYzZUxLtTIVTtHsiUmaMmeEAaRluiIUfFvpPvhMXxRrVBMmhHblLtiKDKkgaApPcCNwzWvfFeEeHhWMmwvjAaWwoeLlEgbXxQZAFsxXSfHfFkrLDAaIjJvGuUgBbVEffFjnkwLFjxgGcCVTOotjJeEnVvZRrzkIeEaAIiVBbvLewmMWEcRxXaAtyYtcCyYNRrwWBwWbCchsSzZtbBlLhHhLBblbBemOdCVmMvTtWwcCDdBSXGsOvVZoFNtrRuCbBKkfFcUfxkVvVOalvbBVLduULlpnNhgUMmPpRrulLlLHWoYwWLkVbBHfFKUuAaqhwBIibhHIiOpgGkDDdqQZEscxoOfFXCSiIezZPUMmPMtTebqQMHhzujJtTBnNKjogGsyszcMPIoOvAaSTcORXOTtoOhQaqZzWlWwNzZIiPEfYmRIiUuDdbMsSpPDIwWjJeyYEryYzekKEGgsjUxXuYbTtYVIVJFfojkYDdyaAxoOusYkKErmxaWzCzhHZcLkXAlCjJcRrJAZGgzaeEfPyYQTWbBwuUSXOoFfuSVBbcCviUuxitTSokKuUHXYKGZzPpjHhbXECbBVvcDyVlIqnCcEeyfIoOiHYzSWwqSWwsMztHWwbQcCnbBoKuDlyYPpgRVUayYAFWwfbKnNkrRUukIruuYyyYsSoOUbaABCJjZbDdBbnuzzZgmzAaWfrFLiISVvsCNQNjaAUEKkegGuDyYdgGWwJWnxWJtlBLqQlJCOodNnQCVsTNyYpPJjntetlMmBbkvVcCDdQyjJqQHknTtNsxXWKkoIiOfTXyYvoOVprXWifFIwWwWwLrKEeksZztTOHHhZMKbBZmMJjuTqNwRrWohHOzrBbXxHjZzJhMFpwpAaAahLluUlLHRTtDrcCRbZzmeELrRiIldDEmeEIuUjYjJtTtTIrOoRisSIqQpclLOdDoOoftTrxWlMLtzszUuZPpMIiQqrRmgGgWXnNVvFAUNKhHkWCcAFAtTucCRCrRZPOoYOTOhDJjVvhrRkTtKHzjEQfMKScLlYyWsSwfQFZzfspPVgGbTZKUunNIlRoMmDZbBiManLlIHhibrCsHKeElqKkXrmMCJFUrRcCgNMaTDRNnNVCTjcGgCHeytNnSPlPKkpwshXTbFhZzJKAjMmJgwTfpPkkKKxXRrZzRfzZzZvVflLqQLFfBoObgSsUumMUZzdDormXRrpPiaOFUunZoxsSWwXOQTthHkVBxhHttTCchBmgLlGTpPsbhKDgWRrwGnsGgQqnIixjQqOoJlLlmtTkKmGfFlLtHtTZzhHMmiSeERfGpchHhHYyXrnJAnaALeEEeyTgGdbxXGPpmMCMgPqsSVvphfSNnsFAfCckKDvVDddtTkKZTwhmLBbhHNnlWgVrpSEeNjHhChzZmxPpUuubBUPpEeZzoclVvuApPaCMmQQGgYyVvQSoObrbVvTSCcOoHtTgaMQWnNPcFfteGCOCcgGocSBABbSswWtqwLLloEeDdQoOkDdKpPxFfFzZIiDTtfLlQZzvqQViWthVaFYyDzcsSUuNAaqQeKXoAAYVIiBmfFZSubBUgXyWdYyweEeGgevsgEeGMgKiIMMmIimVirRxXUuaQleRrpWwmCMPFBbvNpZzjnNJVvTADyylErReLZzfrcxNnXebCcEeiIRrxroORPcHdDQexXwRVvrzZrRqQTtAWwaZzMmWmCcFIsSAzQFfyEkkKeYicCPpWwIfFkKSXzvbNBbwWvVOonPpBNnLlRIYQqWAwvWwVWZzatkKxmJPpsZqQLXvKkViQqzZApPCcMCcRroOxXXiIUTtuxOEeoEwWYRbBTtwjINvlLcyYCVXHuUhvJkLIilzGllWgbBWgBmMpHCcVpwWPsKLlUuOiIFcCfowoepsetTaXxmMFfNnNuvEXrRlLHpCjSCnoOJjLcClXvdLnXxHWTtKGrxXbBlvpPVriIxmMcGgrQoONnnIYxGbBVRrOooOvyzWwdyGgPpMHfiIRrFtaASrRsYYsSJHhjUulGsFSgGaAdDsQqiIfSDxvVXdXxXxgTIPyYeNAwjvVhbBHNSsAanzMmZFfcCnXxJzZjCUUuJxISeTyYaAthUuOkquTtrHFfcXjxYygtTWzNnZuGgAZVUYNXxnAaFfBbxKkgwWuUqQGWwzIiBrRqQMmEjgUZRryvKkVFkltTLJjlOEeFfXNwWnLYytJjTXxkpPrBttiIYyIYsSdDmMtTKrfofFOyUuLllhUuHqIQiHhImXxaAHzZJlcQxXqxGQnFOofzZNxXdtTFfwKZBbVNAnXxNEekeqQPcjxkhHgTtXxQmGgmGrPCKjJUuxDLlNuspIUVWJJjLgfYsPokKOIWwcCbWKkqgFsSBcCKavVooFpLlPxXpgkPEStTsFxLlHhXnBbErSsqQRHpMvVmbDprsgtTGSZzRIihPZhHzZdbwpPDDddEkeELlKsNnudTTQqnrqUumFZNUIiDsKdikKIFLWnapPGmUHBbWKkjJHOohhHCnNcdDdQqIJjigRVifPtyYnfLlqQFNLlDFMJJjjVtOQtTUuGgqoqXxQWzkmscIwbBNnocZYyYWmMqQZTNCcnSsfwZzaImMhTOocGgCtvcwWXBuQquFCbZeEJjqQVdDsSerLhZzRJjyOoYDdWKkVvBgQqGhGgbBcCZAUupxOSuAPcCypPYpgGavYEfFlDHeXugrrBTrnOoNqQBNFiRrHhmHgQyrRhHDdYrlsSKNnnHhNxWwumgRTwWtMmgqQjiqQBIQqVvirKUgryMmYCLloiarLOxJTSuSsTgjJGfAdyCcwCFzLcMfFCcxTtIXhyYQqHxauCeEcUWFikIiOLDdlGdQNnqDoOywWdDYYyVvThHJjHhLhlLBbsRrPxhTYpPmMmMyMmlWfWoWWsAkmMNnkNyYoWSCYAWwEJdHOoGsVRfFOoqJEejQiIVvrlzzZhwgGWTPxUuEyYOoIRAariPpXTMIFlLiiIWJjEkcCKejZzJZYwUuwFfWhEQHuWwGHhKgyoOkFYybyYBfjJGBbgTcjOGZRrzgoBMeWNlIFNGbPptvVTruvJJoOQEeIiAzLhHyYmGgMIiCctTODtTdaLZdDZsIiSSsaEzNjmjouTVDVUuvmiWwkYyuUPIEeHTtrOJjYtTutfTtiITBEupPSsUNnZzkOUTtZzeUuvVVvExZRHhahKkgGcCcCtCNnTZzzQdUkjJRfFiIrKVVvvHVvfFcngiVKkiSsSTmRQfFwPpRrgIpgOoGGLdOoDlwWLlLEGbSsqykKzYyRLlIintpPcCYaAkPHwWhpvzKdBKOTzZDdyrRpPVvWwbcdhuKqFKGgkKkHpPGSsgsMmgiIIaACcERAaBbkoyWwnLvchHfeoUNeRrMeScCFhBLFZzcCfcwwWXmMDwYztHdDUuWwYzuUHmYzrXMurRYBarRFdDvvUVSdyYBkgGdDkemMgGJPilLlGoqRrRrLWwOowLOAJhROozHhZNitTtTkKITsQXtnXxRMmooFIWlAiTtkwzkNngRGxXvVXwWABGgnAaNBbqQJgbGSsbEGVvgSsfFvVBXeEIGtRlLrGIiKvvoOtklaAfjdDxogMmxXTNTvxAauiIUzsSqQOEejNvVnjJkcCSjtTBeZdDfFKicYukKqQJjUyWgXXxZSOThHtdDuQtezXxTGfiIFfEcmiIHhMfVkXeEgGgAaGgeUUuAyYzZaaYfFylETvVtHheLsFpPfGgSaOnNYHhNnyYsbAnNjWRCcrcGQnQqYuvHgGJgaABNTSNuUdyYMximDahuTdDwWQXxVxyYUIWMtApCczxIAlLOwKpPTtJXAavfFiZbBnrqnNhHqjJmUEHfFFYyJPySQEQVvwWhqQEmMewJNbnzQNlVvLPQHpwLwWlJWShFasowWdFtCDduiIaAizEJWwKpPHhFkKKoVvVDSsYytAeEtjUpJXmdkhHKceBbWXopxSJLaOomQWmMlZIizNEeEpPeGuhHoKcrleTZQquOoUmMqknNKkdDRfFfdDmMFtJbJjfSgGhHGBLeEJjlvlcCLVrhqVvBvVbzqPpyYxWwHJZwdDdXxOBtZtgGTzTgGaqJXsSVIimWFfmKNMOphpPHShlDBjsSsVouBBVFcGeEzRrRSsrZFBvVMpSRUYCjJjmGuUbOfuzyHhkbBGgkfFcdXZHmMWBbRgNmTbBnleEkdfFwAzzMkEguUuUXrtYgGNnyxbBylLYwbBEjDduUJEeSHYyXLxRIsSVMxXmtJqOozbVxgUEeAmMHhasmxXelNqQQqCuPygHtssoDdCcAsSTaBbqPYyEBbeqQnqQNYewzZpOJTaAtTvoXFaYytTAQYIdqQgbpdDDZFFUmevRKkQqraJjxZkKZjKWwlLQqAkKLliIeCxXcfFIizZEjhHGsiKtMpWiIwPQwbJWvVxmVGgvWwfFWeEaAEeDdDankdeEDJaAjSscChHrRLAsNBfMmFYLllovDNZJluUCcAmMMmTDdtvVvXxIiFavNnozzNOocChHnFpkAZCfAcdNgAMnIiNoGoGKqyYPpsQkeEEkYmMLlWZzkMmdOoKHyYYvVUCobYhcCwEeUuOoWVvTtqdDciKktTILHKGLQMmIHhCVwHhFCcjGocpbcCuqQUTtqQDsoBXxLJevKkCZHYcMqfFrMhHYynolQbBVFfvEeUuAbNEendwfFUrUHhiIKkAiIyYRrauRqtsGmMcPIGjEecpPODWVddWSswKZzNAINyYyYpCTrbRGEfhOtZXuUxlLMmzTsHhiImMqQopTtKkVPLEyWwNnAoOQJTPpgniVpJUumMNIntorHhnNacXxeezEqHTPpUrOfapExqBlFdGzNnkKVVXxKWInNLfHzZXSyHhvqDJzbTkKPQehLpxKlLJOooTtuaAUOjCcNcCPUuztDzYyZyHlsSYHnkykzZKlsBbrMSnieBbEXSbCUQtetBbTVlQqLtoJjQqTtHeEcsViIkpjYLnfFwWyYkKwvVkBGaHVedAWwXoCKPpIpBsxaAXSTEezZvputBSPpSQqzDdaYDiGKnNiaoqQayYQZzEQPVnNKpPSsXmbfwOsDPxUuuRgBmMDdsxbcCcCoOGZdhHffrRFFniXSCcFfsxrRAweMDEiIhHULXpxXMmfroaWwAWwUugGCfaYLqIidDdDKePpqgJItuQqUVSOoYdDPhVRDdrwWxWwAaPSzOoTmUaMKkBHGgdppmMpztLlLFUuRyfaAZAipMhHmJwqQYmkKMvaALnYyAIKMseESmdtyYFquUwWcCkxpuddOmBbwWMOnnKkAzLuUlHeyVdpJjPDdcZqmEUugsRrIcTTpRrzZPjJjJjtKVskDMmCcGgPpoSsBHeEjIYOoCcwLlcCDdBbWWBIefhHrRHFfOoeEhDdRBKbBWwkjFIiIlPnqfwFPjDdJgAztTsmhHGyaUuTtGYfAStcjWwkXGkLlKjxAJiMmGgmHbjJbyYyTyYttTYewWSKTtNnuUoYyKzZsqAFIiIXBRqSDbBdKkxBckKHTtYjocCOSGgsDqfyYiIJjFhHlLQKLGaAeWwsAHqvxPuXnNekKsWVaAVeIiLlccZtTzcCzCErPoHOohOdmMeElOYyNnvVpauWVvwfbBdTAUuCcLEyyWlLeucwFeLIRrffXxdDrRLRrpPSFfxgGOogGiIYGSqtKVQqpPkYitCHqIibBEbWwBDdEeoOLleAaCLlcjSvJOoDFODrRdsQVvqBEMmrmYqFLlXxKfMUbapScjPpbuvlLrAahXgGVvViKkepPosAxXLSsXcWyYSVxRXxreEXowZDzXxUJjLUOeyQMmzZAHhMAamNjyYXIixJUrRkKbeOnOGDAXfoOhQqzKfQqFjzPPJUWYNqWCBbckkuuHoSswxXWkOouMmUPNEXwxOxXJXwNbQqOoBkBbvzZMmuUUuBbqVulLCmytsgGaASkdFfDToQqOsLlMWwZCcHheiIuUkRWgpMvVmMgGYyLLkeBxOoaAEgcCqnNQYyQkkKTtySsYfFtxXbjlNsSoOpItBlBblgFfOoxrPdeyzOXsGgplLbBMfhtTeCcEMHhmMmAayYjJfFmMdIisRUGPpHDdhqoZzMjdDwVYNnDdGTtgyxyNnppPPkKJsUuYSTrRhfFHFfzxMTnnlLunKurRUVvwOoWCtTmfFwsLYUhHQquyaQTtFfrnFYWbckSqQsYklJKkjULBRzZrblEgrmMQdaCSxPwOzgmUhSmjJMcEZdlUpRgdLlCcXxewWlTtLEXIYoOyyYiddamchnGspRxtaANnPEpFfxoDmMoIiRymYkvVWwKyTtMVQRrgGRUDduyRGtTFuEYckVvaAsSmFfMxdDXvBedDdCHuMmRkiGHHMmhhhjlUuJtTEUuYQqUOnOMaasSdniILOorsSTQpPqugxICdpaCezBzJoOUujnNeQqwtlGPpHhKkgDAPfYyDDQvvVeEHjrOoRVOcCmuNnUGEeEeoZztjBbgKQqXxDAadTtIiJTtjhpUNaDeGsGbBsCChiIoOVqQLlzPOomMwFkKfrRYftmMTRnqQYsSyySjjWbzxqPsRrSNtqQaUtIiugGUTlLPMPLlqTqwpPWbGHrRTtAaGKkEeMDWRCBRrRrFaAfjGqCqQRrcQgoUuOJjOogTbKkGgdJvVaAjDyTtCIXZzxrIPQlMRrSeEBeEbhHsAaJRmWwMEeViiIXxYIRUuriGseDoldvcNoXfOSsslkTexBbniIcBpXmLWqbFqQCzNmMnZXuglWwvAUrWwffFUuFOUuIVhvbLxTYgzJjdkZnrRDClUpQqNZzYKkRjuLvVNwlkMKSIfjJejsFjuZWwIgTYHHhgqYyIbBuVbGszvyYVfCcIRtlLvVqQDdIgwjIGXxbyiKBbXkMzothtkKYyCcEuPEeLlmIiCcdOvHCPxXpjJzhHsJapSTauUJjfLSgsSrjhHhfjjJdDezAabmYyhHTkuOTkWhMmloSBaoYyYNEmtTHgUtpRrgCRxhcyYoOgGdzcBhiIiVekdYkUbqsXLiekmgnLODwPpwhwMmwfoWXxvvVAbCCciHdDHBbDerveysGHFvfFVhopPykoOjHIErKvrKCCDdLCizZIlLchLYnJKZsSxyYeEoPHhglLSQqQKkqsoOOokZzKVhtcCTUcLlCEaBQocjhEQwWqzZtWTtUpQqPjsSMfpjJAHfFhToOoOqtCBbJSdFdDlLfSsSsmemMaAXVIIiSLlqQOdMSXHhuUMbBIsgVvGcCzhHnNJjhZHgownefCXmMRrpEPTfWwOvLdDvUunNKpmFfiIMslEgPCcEjJeOoHTtYDZpPzAtTLeEJjlBVvpIXzpYyPuUajLXRmLWWLUFfrtQqFFUwlLNndcUNjhQkUZdnNgQlAaLyYkFFqoEdgwWDzZdbKsMYDlxXMpVEXuUFfsPpGgKARQFeEYzZnMEPOYyjJCcGPkKGfFjUOmMoHrWwwWqtTkKtTEePHNvMmVdTyYjJyJjsceuUNJEegFVrRvvLkvVxXEEstTwUuwgGwPdwsMYGoAcMqfTjqwUKbMxYyXFRNGgnrfmBkuWUuQJtwWFQmsJjSCaOgylLmSEMmgGeWDpWnGXxgNaAWtTWtTSeDCcdYyeKUulNniGgIVDpWwPdfGjNnKkqQnuUECSYtDPLkKlcCpnhpKkDdQRhuJgcCpgpPoTfFtpemeENykKMmfqrakVvLvVWVvwIilSyYxevPmLdymjCcJGXxgSqTtQkBGgGDeOQfIiwWfKTyfFYtqsSGDzuPpKqHJnAaudAaDCDdDWuCcCcfdDfTRulcCwvWwVwlqUuQMrxlJSsAVyYvJjZxiPnNbadyqQkVZzvKhphHGpPeLSPkVRcCrBblVoDdFRFfyYrtpePZzxcFECcNWOGhzEeHmMZSstTaASimxsWwmDoWwsAarRivxAaCcEMFfDsjylLYcTQDdtaPFmHheEKktToOJuUuIdDiwTeHJuUCOqbAbBvVeHhusSHxXvoOmMGpOXQqzkjqdDQNylHvVlvVcMmckOoRVpHhkKPkReihJKYDdbBOHfkKhgQBbqSYEVREdoOrRhhPpIcBjJacCmMsSVxXOowOFWWHWWdolcCNGMKEIlxSQBuKyDRrAaKSsEvIHbCZDCHXrcGPTuGwWhHhMenyOAbsbBOdDlLLvVHwKtoUKtMBTtZEuUgGRrJFHJRGslFAtnNsPAjSGgZXxchVgGoDZzMpUelLaATHTOcCZmKxkIYQqBgiJWGiTriFmMZSgBvUiQGhytIgaAFfGiGiBbzUJfjJSJdDMmEiIFiskmKzZLWnvVlUJrynPuGgLcdNzKDZIiGytXlBVXxHvjJinNxXoyYSEesRuaVLGUoOlLkKxzLlZDdcqQfBQiIwlMxbBPbCNLlXEtKLSHhoBNwWFfVvnuUbFyYxBbvVOnUuCVDSsLOdiIESgsSKkyIvkKkEeKrwWVvjRrmfFLqpikKRicDdCcYLlEeBaiIAdDuUtGJbeEEecrwdmKkgTSstNxXUunoOhgBQthtbBTHgGQpmpFftTuVvATnpJjQXTtnjJxvVXyYFiIfcRgGrCNZBwJsSJsYNrFjJYyyoOAaWSspZvHcvVcSgSgEdAnuPHkGJTDdMFfjJmOfFtWwTgMovPpAaJGghVNnqddFpUuadLqQhvKkVHTbMmBWEZbZEcAPDciXnNGoOUtRlNDbBVvGgAAKkmoNLlkKouyejZzLJHOogEeIhHYyKrUhcDOoEbVQqKCyeUIifgiJjIEerYrqkKBsSsSbvgGgGQqWwVvYrOdOXPepTXeErPSgNHCMANnDDxeUsfFSuZzEHhjJDGrPuLjJDzeCkKsHuMGZoWpOoXscADqRGeuLWwaAKyKCBwJjyjJfNRqAMmlSRrWMcMmkNUcCeENrRNGgtmXZsSzrRZJNsvVhOoaAHSnjtsySjYXYiIyvSsWuUJmOQgBburQqSIinNoODAUuayEqQWwCcRJjfBYyMpPmbFrlgGkvVaAKLeYHFmPSxoZYEDGgpCcRXGLLvvVVbTiDWwPyjJNnYsSnLJBTMmfFvVtIiTvVKqGevVrBwIFfiWbRXbEKlcClmPKSskEeGwDdrQqKEzmStKTYMciuUIUvQVKnWxjfFoXWxenpnNfFKWwNnOhUlLUKKwQnywUwWuujpPppZJkZHFjJUuxadgoNoYyEBunakKEeqpyYPYuUEYqQqQyouCcluZdnNzjJWOnNRrvswCdDxlaSOECcIZzvxRrHRAaaAVUsSBJlLCsPABuSRrsmFQqUugGkqZzQfQyMRDdFbHhBfebBbYySDPpdoRreEfdjVsEoOeJQhCcgGcTIIiyvVKpPvkTQPpsgyXsclLBgcCGbCrRlFFiIFfRrijQuUqJnNBbgGlcCEfFfWCRrUxXnswPhHpWSQqNEwIiYYelatDFUuUjJAKkPKkoPHhpCGgBbcLfFDpRecZkKCCbtTBEvvwSExUpXeEeEVCcOoQhaSEglkqUuQdJyhCbuyYUXsQrbLlxiJjfaQSkOksJjEyYXMmxjJBBhMXxIjzZaUGguXJgxoOKJCSZzsTsoOdDaFyOogAYgVvMqQSZaIiGpRrfWtTFQNpLiCcIkDdKifJKkbrCcAaHGTtGgsSfFghMKkjJmFfPiLlIpFfFEiaAbwRrycCiJhLlbOdKFfSvkyYTAacCVvJtcYyUuCZztCiSGGmMNngpPeMTtQzCDvYEhrRZPpaNNooDkKDQqUPXKEQqeQfTDkiaNlVNnyqQWjPIazFYXxrlLiIfvVlTZBbPPqHhuUQPZzDCcsTtSsShbRrmAuMfWWwDrRdRrwFtZspXvHpqcCQyIiDdFfsvTijGQEktTRrQlyAFcXqCcQBbxzZTcCtORFPeECcwWxluedmFfEWaINhHDzIigEeuUBXSbGrUUudDXpdSoiIWFqQBMxkvpUuqeqkKAqtTQOgGAIyYkgIdyXxAIPpifFZsmMsblLTUmMfFJjPVIitbPikcRrOxXxaDEvhAgbfFKWmMNQqeUuElyJPKvSTtChBbOeETNnvETzZqaAucBsxIaANuuUUsuUmRoIvRrDdiIViRDdrOSLiIkuUKYKNhyLhYkKLldmMGZzMbBmcfFCvXxJjVAaNngTZpRzZrZznJFffFjkXkBzZbKtTPlLbBlHEqptBZjdQVIiCcJjYsxhhHSsFlifFwkvvcCZggGZzDfLgGBbbQXePAFoRDduthQePpZdDEECnNAWwROTNinjaAPvINGXxdDYytjqFfaYTtelpvPKkOrRZzSoHwWFiIegmMrBRhHtcPniankXxDdPpDDvZlLzvVuUwsSdopPCJgipvVsSEeCdDgSTQfiSueEUsIFuWPpDunNUiIBafFbBkKbBqLONrXxRmRCcXxfFcCDdQmCyhzEeRrcxQqIiLlXWwVEjlbOPpSdZLlzVvTtBPCOgJCcfWqQvcPpQqihJjHPpMViIQqvrjXxJRmqxXlgLlkJjhlCQHOoyBLlOcuyQqjUuJhksGAaHhgSNnDyYKEewMmeEkKyKePpKqXxSySsYQLlrRLlKXkxXKkKKkxkkrRgOgOqQmaGnDCaFczvVaKPfZcCmFfYyMoeEwWOZNnlLDdqQnNyRPprJjXxYgGahHAOVAfVYyaLjzndVOLybnSoOmMalcCKNkKAdPpwMQqXwCcjBVvWcCqmTkKkIwWSgQqvMmVwWbBBGgbJazdDZBbqQkTtJzCcUuzXuUAVLlEMuffzHhdJjdDIZzivVPBGDiQqyqGgYyfxOVtjoPWEyCcpDdxXGghPpHQAtaOBPpbHhSSThGYpUcnLEYyMSuZzGXvBZzZQGgjTvvVsSirXlxhspPeqQWwsSWXOoTRxuycCYmVKkKkvMAaWDdwUfKkzZFGMmeKmZZaWDKLNtMnGKtTkrwmFmMfMGgOohzZzxDCKmMKYZUFoBgMJNncyursPZzmbAafgfFRrCfhYyyYHgfFGbBxXvbbWwUqdDlLQOvBbSJpuUPbdLHsFfPaAomEenkMwmMUuMZzqQvfUufFFEexjBGUugbQAboxXDWzjhXQCcZjJAuUaEelLQHRbOogvyYVsFBjTdDrKQztELVvRUuCkOvVTtUgnLwrRqMAljrcClLRHhsXPOcCxwECLlDPpMxjvVfFPpPuJHhTaTpPkKvVWwdjJvYyTHhgbBGtOkfRrkjeZIUDdcTfuUIiDOSAfGgHswjBbLlxXIiWPBoObhqpWwnRrqZNBnjWHqeqsMTtmTJjtYpjfwWheuMmSsZzMsSQEeuUQRNzIzZVxjkWoNnaiXZPJjaTmwiuoOIiuUXvqLKklBbtUHwWAdMIXUuJjmAaDUunstYynbGjhUuEeVUyNqgsSZzkquUQKCAawJaQgGqBSyoAdDZzgGAKMmkuEHhGtzZTxfFUYhHyoPeEpOlQqLuKvFCWweoiIOeEFgtZETqYUXxuyESsgGeUoszkKmZzMxGwSsCIkzEeEuUbJsKxuUfTtFBbJjXLlJoZmMaAXxXsjJSVtntMmGOXJDdFeELPpKtTTVNnmMVhkKnNHkFfsSgTgixdCcDWwbQWwsSqeBgPOoPppBGjKkbaFfxblLBgyqQYpqQPrGKZyYWeEUuKIaIiLwifOuwWUOrNTxkKqStnrHjaolWlQiIOgZdDzhHLIiIpjEsRrSXxMmWwKKbDsvOouVdDVflrRLAbyUmLloOMmsSxRZyMhZyBbhTZMmfHhFyWdBbxWClbHoOdfFyYzZIiDfeEsWpPqQKkwoOEmERdDrnyYLluOEFIsSiCVlpPNJjYSsOKreyYimMOoGyYShfQknNUHDCBlLsSNnYzZSskKUutyYoBbsSkbDkZVjJKwWyaATVvNrZYQBgelWyYiHNnhMmIwgPiGWiAgGaIqrMtsIvOoIpSsPGXMmxTtpuUfErzBbZyYReFPNChHhMrVvRLlmuDdpPDqZtTtVvcTcCHArzXMmuoKebtTtFTNnUyowWRhiprRXxKiITaAtIMdvtUOJkKHuUhMJnkKZeAzKkzlzZPpAofFTtlwWZaXxAaqjjVUuURSsFRrfBiIgqGgaAHhQHhnfiLoOnwEmqQbPpwWJCtZzWwKYGkQqgUAaWwhqAaeHWyIiOozWCcwwxXIHhfimtxrReKkFfSsXptFfFfGRrgHZLvSghzZDjkPpKepPaysScswOnYyKmMKaSwwOwFfFlLwLZzYmrRMyttTHXpSHEelyuUYzgGZtKkoOxXgDdoKIfHgGhwOoAkBJjbKRWcCEewoOriqQrRXmClZfcWYDaFsStUdDstjXoCclRgGAIOcRGukRbImMJBbGvyYVrbBGRrKoOPpkSsMwWUXkLRIiqnNOogGjJWwGhMIfnbRtbRRGwWJjVvUxEhdLeyVxXUsvVoXtTPazcCHWwbwKkrHleERKkEvzoOBcfWVvwUUboOvVxCVHzZdDibrRBALlQqIiWwWFtzwyFfeEzMmCONnWEeiCSMKqQZwIiTvmtDdQqTjJfHhjJZzdWwTpuUFmMIyYvAarGDOopPwhHhuMgANwljJfAazqQEeZDCckpPSdunzfMQZzRNttDtTUxXAmMauUQqNnpPSEqQFuGgUfeecCrReEbBWBDLlGBbguUzWwpHPdBCcPhUubBeNtTpPfbBiILlepKWwGUuPJjfOOAktTbyyTtYYfWtTwGdjJDQKkwiIBHdrRDhirRpSyFGljyYbHhBwvzuUZuiPSUndXgKeEPpmMrRkWwpPoORyYrzZGkcpRIigMMqGKXOoOoJCpfFEKanOovzdDkWDqdFfFfDMmgDdQqDSsBbdXCLjlLhAaGgMqiQeEhrRHLYFwWRkyZzXxiLldwWDTTbCcRKtKkcCMmmMjJmMFeEfTlxoYyVvLKfYxXkKRrzuGJebZtTsSXyBbuvzuUaUwtTGvVXJxCmMhRTtUQXxmMdXxPpDKorRzZxXHDdwqKAakQWVvEsiXxXjucNJWanEpkpVNnvDjKkJrcCRdLlKksSPKityWwYSsaAGgLyyaATqHhQhmYDZAaYRrSsgXkKpPGgyigpPGNNcJjCnkKqbQqBlLRCXRLnNRgkYyaAvVwbBwWwWhNluCFfJjcCcpPUDVVvxNchHsJhHcPhxeTCcaAQqtlLVRrLDdlmJjixXQqEeIMUneEAESPtTGgHhEOWHhkzbBZnHhNSvhDsSdPbBbuUGwFfGRvVrsSwLLcCgZKXxyYjZzVxUuniLlJWryeKIhHrnNRikTpPtvWeyYEEewVbBqQkKSsKkmaIRrvVxlzZzKkgGSsSjMmMXHhTdDlLwynNirFfOooOTtHhVZWwxsyEJjFkKfKeYqZaifMwBbDdWEqqQhCpXRLlrBEeECeERFXxYYdatQqPnVfpmzZcMPELqioOIAIvwKlLWwkvVWbYylBbLBSgGsFfksMsSYymCcSGmSmoOMqQVkKEjJKkEfFWDwwWYxJjGszJjMbvyMmayYeaOxnNkKWwTtkUuEAanCZuUdfAyYDdvuUHTwIYZzgnrRNGMmVvzZHhyqFFfdRrgGfXqQqOlWQTaxXbsbBnLlXxNgETGgCpwqmkwWKgGAGULlpBbPuPphtTsMmtBRlLBAasMmqtTIiVvqqJjYycfFULCOQqokKOSsaAWwgiIGXMgGBbNnkrgGRKHCccJnkKTtstTPRuUvGwMHPpLlWtzFfFaHSsPdDQpGmcVvgBDnNtYlNajNRxHhvVhHCiIPgFrsIozcCZOtTVvCchTRraARrCcgMMLXNKkSNdkHBmMStEeMWwGgbHSsTXbcCvKGgRrqzNXxwWfBboAIpPxMqYyfFXqQxQROaAuLjJiIlwWVgGvHhKSTiItnNsZSszkGBblFwWZsSzaAFrnVvNGhHgFTttLlWiIpPXxGgGaOouUVvkjHfBtSsxVvHSWAaLpCcjJfsSFsWwTHhYEhJtcvcCncCrdtAmnGcCBbuIifjJjcmMJjRxQLXxkzZhSAaczZRBzZNAmGgSSssIUuzHhdOcCrLmMaAikztBvpjJGgPwaAWSkKqFCsKkkLlZzmnUuNCcJjOoFqOoeJZTtdHotAaocCzZypzoOYycrUMmafaylQqLxXYwKkJnNjmjJRrMnuaKkfxwEeGSZYyTlmLwRrUuXhDdHRFCPiIiPpyJiBbMekKMGgBgUusSGsSdrcCPWPfmRZfFnJjzhHZQsStUiLlPpIzuQqUaAkmQqzhbBoeESqEeQxXDdgGfFGnNghPKkpHbBRuUlWIiwsSxTtRPxtFyYwSAapPKhaAXxZzYsSqKkKLuUdDTEWwCcSWwfkKtAaTXxFvcqDcHhjbxXLTjIiwXNwjJpRrBbPjJjOoJnJjqeEnIiuQqUcoOtTlfRRrFAawZkKMGZUNBzcURiKoOsSKkBdDuvrGLZAazdUkOvJjuUVNqhHBhTYyZSsmUuSsQoOrBbRsWwhHZyhWwIijJFYNyiIYQieELbkKBdDnaANvYJjdRrCcQqJjeEexBJQqnNgFiuHhUIfkKrRkCcyxhwWnNOiIxXZzsIXVkKvUuIlQlLmMqtTtTLsUxYystTpPGgtqpFjCiIcLaxKlcCZFfwAJjXUuMQOoaRrkKAqReLlySzZUXKJOFWwfjNnviIivyxXFfBcCyHhJSZynNeEZzYRidmBHhrMycCeEZzFVvegGPpHhkuUcCdDKpNnUunLwCcQAqHoxroCtLlsVYSsyipmHhCZSHhYSTtaAOJlLkmjvVJZzlLMbTtyYUuUnNZmSsLlBEmXxBbUupGgupCczYydKPovVsStAaTWIiHQkhvKlyDdOtTwhKkGHAkKaszZJjSPDTtDdAovKXFTnfGyYgZzOzoSuUgxsaAbjJcGgWwDwWojJMMmEbBHHhTfFHnTThuUrRHrClpNnPwWiKBHNGgnhbNvXJfldDWKuPpUtTfFNJFeidlLlRKAhHagGhaSsGDdgrReEzqBUuGVvOnNyYJAapZzPVEVwZWncCFyYfvVGdkrRITNnvmHVaAVLqQkKoOrAMuQqSsIShvigaAGlXgGuuUrHhRnNeEywISsoVpONhLDaAFkXnNxHhEeviRrtTIDdpGgKkRroYxXuURretCcvlLVTHhsYySbBYnKBVwpVvTtKkrRFfPWBbKkjCcuxqQBkxORBtyjIFlyySsAmMwWTtaUuGlYyNwurRiIAaAcCBKgKezoFfqfuUnNvVjJVvpPUuFQItpGceabBAszZQqIVJjvVvvVEAaxKtTtuUTMmPmMpPXIixCbUEFPpxXjPpEemRHVvMmmCaADdTdYoOJUubDuKQHhqVvdOoMbKkvaAmDdsSYyMfIlxGgXflLFfsCcSFZzjJuxXeEUdDFwWfyQPBbSsMmVPpvpJptfUSxIidBDZmChMmSyYDdinPpIwWLRrlzTWwsStrRuUcqQJjJZibEeIAavVGgFfOlsZzpPSLNRrNnoXxOvdXMbmiIEQqICcixXPVvFfqeEumFfWaaBxXiFfIbAOoXyYZzfwWboOBzZayYgJnNjqrSRrMmjJAxDdcOLyYNnuWeKkrREGKiIVvJWwoOsWwoOpHgkQntbBHdSIiyOgGRrNnGUhVvCcOnITdDQNnzfFvMmVImMpMmgdyYDmoCZkKzYykKDdYyWrcVvdDVnQpehHWRrbhHWZLlVELleKkBzZmoOiIciIKIOoiFfStTyunEXxeMUIiIfSFfztRtSkKgeEoxwWDRkgwiBbaJwMmTXxNHxUuLjmOoCgGdUuDcMMzWwZDezKflZzvVLvVGKkyxXujJoOrGgRUxdDKUVvukHqiaBbgGqQnTumRraABbkKMPluUsOonNKkeOoGgeEAanCcVIiRLLbstTetiITEeExrMTcvVhFjJhTtYutTUiRURKkriLCcBbQCcqZYBwbHVvRrHhhcWwCoOTuGgQqhHxXUpkKnWwgCiIcsCBybBcCiEeblBbKZujJURAxXrSDpDRrNnSZoYzhHbBZCwRrWwWzWSsQByzCcZjiIDdMmsqQVvKIiDrRrRdkmMmbhHBbdMmqKJjVviZqQplLzZVvoOPzliXqQxIlrRWwffAaQYFfnGZnaANHFfYdDylHoOrRhDdHrYIivSFfZzTtbbBcCVMFfmEdWwgANnaMQnOdDCcoLlhHCcuIBbIiEFdIimMXzuaAcJjSsCORKxXbwVjJMtQDdLlhHAaZLLZzCdKOlidAovYiImMVvcYyJfezZOFBvlADbUlLXxsSoODuUyXxuUrRaAUXfFxvtcILVeEvcClqQaRrnNyPcJjeBTCQuUqPfSsFpziUuewswCKUneqWgwYygGrRDdhHYKrrRRuiatlLTHhAHRrjidlmgvuYyJfnnNFsShORHUuRbqKGlLiISsFxAasSXapAvVBKsSbBYkKAjGgJjJdygbnNXNnZaAUuHhYwWLlLtTlEeTtLmEeMjJwPHWtOkKzZbpnXesJtTiUuUrXWkSfFkKGgttTmUujJNEeDpPmhEoOlLdDCcWweCYyPvVWwpzMtTiQFfqfzalpEeMmIiIuUeDvVQqqQdllLCCHIlrOlLoFffFIiPQqBWCcwbvthDdpywWYPEefDkacoOCDdzuUKkXdoOkKCAlqQXxuRYfFnNGPexXCcNgwWTDaAaNUwWqRrpmfFVUuGgOovrReEVAyYKcCmPsSsNtTacCANQqnvuYyUwDkKdFfWGQqlmMhDdHELloOhQqjPpoOJZGVDdbfFfLrjFfOHCahHrTtRAgrRRiIiNnEetZbsSNoOmrRMlFGsSLlCcoOlGGSsggLcGqQzZsdMmYybBGjJLzfZzZhHzFbBcCEefFaAlLSSvIiVsyCNnhhsTQRjwWJvAaVrqtTtaeEzZjWlBpKoOeVvEqmhHvVvVJLCVdpPmMDvcCSsmbvmfqQoOEnYDdSOPHpPALQqlahuqFMmfIZwaDCznzZeAaEuUvVuULlvVtaNnAtTXdcCVvDxVvRTtyiupvTtzavtTVhfLIvVFfpPilFUGqQfFbJOoVvwGgUuWBkKpZFDvVjJarbUuKVCCqoOHcChayJgGExRriIqPpxXQPpyiIcCpPDAxfPpxMmXSQUuPNnRriNnlLpOUSsZySszvVJGIMOhHoamMmMucuUDMReEwWYujJUeEymMrVvYbBypPmXsBbyfevVEbXAlbBhHhIihHnNxYyXHhNnHbKmMHdCDdDdlLDdcrtkzjVvbBacUvfFniwHhuUmtTMWKpkKrTtFfBbRPlFuUJjJjjJTthHenWuXGgQiHhAxXaVJxXPIimGLlNEnuTtVvNNnyYkKKbXdwqCcQzZcCkKoOWKTovrRIieVvEVVvInPQDdZzlgGutKwWkJpPpExgvCPuUEpWvvVfFsSUhHqptTPOyybBYYBbWyYAHHzqywMkKKRrkiCvtQYyqDDdYPpKkIdDlLdgIiGlgPLlHOocCzEvSkgGzxtJSsBbjNPSngGpPqiIgSuUMmXHgGhRSFfssSGvaNnYJmQqvVvVvVrYzZyYeEyooOYyORYnqQZbnNrCVWCwWMBbTNhIiqQTtHIiiIzZZzNfEcCooOOFfgGeFejWskeYyoyBAatiIOSsSsSNIfZVUuvZqQoOrhYnzFtNfFnTaAfZJLxXEdOoCcfNnFDdxXeDdKYIIiWPpwiSwWVvsMoKkmgFkKaAfCcJTpIWwiHhwQkWwKHhiBLlvMmPbBVTtvTtuUpeEhHVuHhpyvQqVRnNEaAeVHXUXDdxfFfyYnNmGgLliIIiMdiIDFdDKWwAaDCcdUvVvoqjJAaVQgmMjwWJfFDoOvVvXfFVvlEeBbRrBHZEsCUoOVvQICIiUpAajJHwbBiEeKOzGgKkbBUxXzZYyjJxXuZhuRrEvVqnNnNqQMCivIiEDdeVNnItcdDvxRrMmRnXVvKkOopttTSsRrPPpRrOlkZfFznuUniINPBbpNsYyuWRZzrlJhHzZenNJliIgGsrRCctTaAZzuEAkKPxXpXUfFuHhQqxOVUVvuvBbFrRqQjRYyrdeEeEZzcCXbBwWapPAQsSDMnNmahRUhFiIfbxrRXBivVIQqHhpzZRrjGgvRpFtTmXcCPprRATWwcCWEjqgtfQNDIFhHBbtTEebLlBSeRrwWXbkUurTkqfiIaOoVXxLzUyWwGHkDdSrHUuhRdKkDsCclLhHKgGOfhHmMXaLlpbtXxXxXuoDsSdsFflLSRGOogrRjYyfFrnEeDdNnNaoOPpHhARtTRrZfRrXxGnNgFITHxXhtXxjMmwyYJjJjWwMQGTYyOsQlagGAaYEHezZCPKkpsQgIiOfFPOqQEeUKsjJEVvMmuUjigiGgjJFfjJLAMmaQSsqbBFfEonNOBbcCxXoURruVvjJNnPpOqQoTgGtOebBelLiZzJdRKZqQVHhstGsSXxPtkKjJlRHhrTsSvVusSGiIzpeYKkcFhHcCfPpiICxXyYomysQWwqZnNpOyYogGPEezUuSmlLCZzFfVWwvCLlMsXxlLWLWwWcCLelLaAfsSYyRreEUuNnpQRjPARrdDTYiAnNfFZrBoOMHhozOoAardctcCTcCuUCcVVEeSGgswvVPbvdwxEJiIaYCUJjBusMmAijRJjBCcHhtjcCJfLePpzZXxEjJCcyYODdIHvVhITgWwEeEXiOiILlmsSnIiNCcZziFfcBbBbTtmrYdDXxrRxwUujJWwWOsZzfarRAFIiFJjIrDyYnIiNADmhHMaqRgGGUujUNJEAabBLlRrXKkmlQQqtRsCciIJjoeEHhjDPpeEaQqxXLxKldDiIiILpkXxKApTtcCmDEeTtdfLoQqOXoOZzOoYyLlEcFNnztTXxrpPRZTEetQOoqtxXCcKUusSJjMerwceEGFfHHKikKIaVvLlPpAIiloPpOuULZQLlIiOoGgGAqQRBUuMmAsSavVeEhKVSsPXydDGgZZpvUzVCMmcxrKmMzXYWEewWwxrRhHQBbTJKkpDdKkiIPcqQCdDNnrMpPXsSsSEexUCcjJRrDduLlpOFZzSscvVUuBbiOoIyYkKCcFfCoOjJaRYyxyMNnGHhAahHFZzdjJDfUUNCcnuBbuUfFuIiZVaTtAjiILRvVEsSEeAavCCccIrRHPplvGWqFkzJjAaMmZtoOwWTKkXLuUyzPIwWwWvBbVLlYwWyQlLjJeEnEfFWUcVOfFdDOoYyxXovShRwWrHzzZJjgWCcPpnNEymcXxPpCLliWsDdRRjbBWMmzLlVvkKZUGguwJcdDstTSCNliXxKAvmMGkdeilLZKkOoOazrwWRNnzRrIRcCzYyZufZDdUuaCcAHlyCBEnaAZzIimMWhHqQyYLtTbDCcdukuxXUjFzWwUuARraGXxXHrVvlAaLRGgGTtcKkAteEjBbKAaiQqhdeEJSsjgwzrRHhcDdCjLlMmWwpfvVrCJNwocEeCoOmnRrVMjJscjraAtJjlLTeAaoFfOCgGuUqHvVhVvQoOhHuUMmmMXrALpPKkyraZXvVxQmdDJObBFfeExXuUuIiVntTNyYvgGwCcWuUzxXLZVuUvfFvnNKkBbcCWGguUmMBbSsOuxTLlVSsvHsSBbsShNmMAagFfaAETtoCHoEemMOkZNZtTqQdDFfXdNcCnJjmOoqQBnNbGFfFfCcgiIGSsxXcvVwrcCRsSoOXUiIujUuibBSCekKwpWwpcCEeZXxKEsSGsSEedlLUrJjfCchoOHuUFAMmDdaGAakKTjJMyYkpPKXbjJesoOKkSZuBbsWwjMmeZzYMmazZFEMmCpfJwhvVHWjmMyYSKksdxSsNnSsOwrdDXEGebBoOXxXxEnNuUCJjcoOskVvmMBbKSoXBbxZCQBbFfXIYhHqOovVQiXxiIvaArtJjTdDMmRVqQiIKkpPXcCnNxhGgAcLyphHPiMmITsSHhAaLltyCcYKkvlLaAGGgiTtvVIIiBURrjXxNnqfkKFQXaCVvfBbqGuAVkttTujJrmMpPzZRcNfvlhfFMRBgFtEeTBJNnyYLEFTtftdETLTtlmqQWHhPmMfFFRrzZfDyiIYUujJwWLRNSEeWwrBbBbOhHMmoxeEJPfFnoAaWidDIwOkQdoOjUnUubEJjUuEeVveEtTrOJJjfCcmjphHGqQgxFgGfqPpQGAaQnNkKdUufUunNlLhyYhVzsSZYYyfbOuUpPoTSzZFBbkDCcdCcbYyYykKgxXGGiJxXBbxXjrREepbBzGgIzZIEeOoOUtTHIiZHBSabAyLlYHwHkKIiEeJjXoreERBUcCnNuLxXlvMDirRoyPpvxXRtTDtjJvVYCdDwlLJdxXfPpOVvoOPplfBbsSdBhHfAaYYMYyRrzZmdDyeiXxREeZzmrRFqQkKkIHhibBYyZbanNyYxgcfFALlNuUBWpQqPeESVvWvVdDFfwDdkKxrRXXKkEerRaAxVhAuUaHQglhEqQOWuUwLlSsblLpPfJjvfEeFHhycCYcCqQdDfyYFIiwUCFUAajJufQYlJPpbPpCcLvVlAauUWEebBAphHBbhHYFRgGNgrRzgGRrFYrUuAWNndDjtTpoOtyYTrxXzZBYypPmMBbhVQqpQGaAgAxXaYycCqvTizLlZfGcrePmMpkKEDMJjBeiIEuEedDUuDdAaUbzIiZEDdxzmLlLlMCjgGaHymsTgGGenNEjJyLlbIZaMmAAamZzzZMKaJHhjCcsSJaduUDKeuUUuWZehebossSaAjzZJsSRQqUMlzpEepPHhPLlCLRrlzZrQNnHhEpPkyYKegGFoOmzZMLgtnNGcCLkdelpPiIjomMoOOwWNEexXGgKpqQPNlLKzZkPXxskKJMmYyjyeEjCfFcxXEjJnFfNWjDdJOoweYAjiMAdCcDZYyzlLavVtTmjlLbCcuUbmMjvoOYDdIZziysyYuUkKeIRriEgQqGtaipmMQqOtTpPoEVmMXxxXvQNEeLZdDzlJjbBroOsdHhkKDSRVvdxXDSDdSKnfFkWNnwtkCcCQqKkJjJuULlWeEzpPYyaeEeNuUoKkuILliUkkYyOBEGWwLlVYyvgeZRrCmMdogGOxXDvgMmtmMFfjYlVvzZulLbBAaUPpsMbBPIwhHfFoKkrPpRzZaAYDHAhOJjUFfeEuUoOdqVvpPEeyjMmHQnKkMmQqyYmMtTkjWwJEexXVHhvfRTGjcCJksSKgpVDuwWUdlLOXxoBbKkLRZLlzrlfAeWuUxXPsSpqQWzZwpPnNaAZzZzSsFeXxEfwzjCcxXJMTpaftTaAXxGgLgGHDtTvVhHdmMhlLAHrOofQTtNmIlLHGZPiuUcDdGGRrCIicziLatTUuubBbBzZFfjJRGMwfqoOknLlkaOoUBbEakKlLAVabBkKexXOqQqqVhHgGQMmJjkOoCdDaNnAyiPpIHZzhhXxBchHCUpPpIMmkuUXjJxtThyoOYHTRBlLwoJjOtsqQQqOoiISTdDWvXUuGuUgrRxLlVbxrRFfJiCcIqQSsyLldlyoOIifFYaVWDjJgGYyUYfiIgPBUuHNxmJjCccCLlcCMdDmRKbBZzzvujJYiIvGgMmpPZkKzbBAaWwqkbBBmMuUqQbYyKfLmovTtWwtUuThkqMhFeCcEnNfbBHMygjJGYmbBTkiRlLxlZSJjshEzZQqkALlkKIiaoNnCcdDeWwDvVlkKLJdDjdcCcCscMiIoHRrhsEzZeSmMwNnomDdMEeCAWiToAapLrXxqllLBbuUGlJjplvDdobenhKdzZDpyUuYwmDdmqOySsYWwzEIfbBFbAaBpPmZnpPtyYTNzhOoHoLjbBKLqQanNRaArUrgGLlJjRNozWwiZvBbVUusSzHsSBbjJwWsSZfYBpbBSsvWhHbBoMmCcpfFPWwOWsjJnNOoSTtfFwmzTFHVNZznvXxSTtsmMGCOjgpgYyGeEPGuUtiITJTBbFftgSsTtatYjoOipUnmLlGgAqQjyYRrJIFfpTtaAPxXSsiqQjzpIiPsSZTyYtudDdDUmVvLlNnKUTtukXhHsSxGFIiGiIgfeEFnuUlLGxdZzTRldDWwcYSGRtTKkcCjJrBbJQCfWpPpPwZjJyMmdDmgGMReELlHhrZNLldDsCcdDoOJgyZNnVHhBDdbIBnHhZFZzfzeEDxXbBfFdpXZlLktZaZXxzvOkQZzqhHEeEecCKUuaAdKkcCDoVWwGNnKkKkNngpwiIWPjqQRFfryRjJAaHrRegGoxXOxkoOKczZJnNqQbsJjSBjvVXfdDfFJfnNQfFIkKipPOZziIrZeEevVeEPpQyiIYwiIzmpPMMmmiIMqQeTtZzWGgwlxXqIrRiHhVUPpKkEOoEMmewWDdplLPpPnpwWKjJkvVAtTaqQWwpmMOoPDnNGtioIinNPuVNNnoOaiIAyWDDdGgHhRrdZVvxFqQnNPpkWwKSSkNaAdDnKwKfMyYbBmnNUHUaTOoIgNnGyDdYpPitTcZlyQyeiIRrSsZzEeNniwWIgvZiIfxXzGasZzaASTEIipEeERrHbBlLbBhrRePvOWwVvLpVDDMBbmddvPUAGgxpxdJbUuBjSsRLlrqzZwXxsSWoSwBbzZWrRVvYBvFnMFpbBiIPfGgrRNnmMDNXxSsnOonwWZzKkJjDdLGgltcSsfzZvVDGMmgBiWwfLlLmJiCcVvVgpPGvYtOoTyWwXMuUmLliznNZPpgGTsSaAHkVWjJIcCiwrhHRmpKTtkQCVvQoGmMbBIiuUuUdDhHvMmVljDdMkKcCXUsIiSNqBbMoAYyabrRBOIiNuEeULtTlbBNGgnQqStDvFOofWwWiIyiHhiIRYebTzZhVvEHUuheULlOmMmMobBMvVZzEelLmucCVrRhXozaKklLXxtPXxYyvVLlDdbBTnNqQiIXoOxmStqbjQyYYIozGgyYmMCndDeSsENjJEaBYyaAbzZDlLpCcoOQqSsGKCcNnpNvVYblLBygGlLosQqSdDOKFfkOJjYFrtTaAqKVvEeiMZzmsFfFfMgzQNbBRrtfFCcfhHFTtgGetZiqQIkQLJNXCcxKpUuPPTtpkUutTsSXxfFZOodnSsNXIoVvjBbbBBbWjJzZxyYXwFaAkWlVvbBLhHSsiVaxXAQqJjNnXxfFQqrRrDUDAaIKICclYygGjlxXLvjJyYiJxEUuUmMgGnNsrrRkuUKwZqQzheEHyDqQSioOIimMvrRVPpnNFfeAaRtHhLtGgwWMmRrwWfrlLEIieYyIiRfRstUukKHhHZzhoOGWwgDuUrRdjJoLldmMyYDFfOUuiSdDyYIlgyYGQqQXxuPpHPpBbhUfFqvQqnHOohaoCGgKLvHTKEhHekPpZzLGgCcdFhHfDeqnbNRXxrnnNCcJjjJBDduUKkYybpCUmMWwYyddDGqQfFgWXDdxpPTtDWgqLlQGwdwlDrRHhEepPdOXxokZJcHhCjGEegzAJjzZmMSsPkiJsSSoOsSsYypHGuUgRrrPuibcCOoISsiWXxvdDWRINhHnYyuUQqVvnCcNTdDtuSsmLLrRlgjMmJgGGxRdgGQCcRrqlxMmXLNnDWpPwxXJyYBbUkhHCchGgbBHlBbLOowKkMmUgEeCiaAkcCDWwddPpPpFfDxXZzGaAjJQjgXvVXcCxqQGVvnNgqQnlLNjaAPppPkmBxYyzZuHdDhUXbkJjypPYQIiIiddDDBbSwWsegYyJjGYyFmMfBCcbXxNQqLlbbBBODBgGwWFfoOXlLxhPpHMmbyYbnXxNWgGwutTUVkeEKQHYrREukjMSJiJjIBbkiRrWxTtXKsDOlLGTRmMDXxdPqQpzjhWwJWwUutuUXxJjJBbjStTeyYgGQqFGguBbSBbsJjwDDUJMvDbBGjJxXgfGgqQFdzZPjxQqUmMzZQqpPnNOoOoOpPZzOooKkNnCcaARUCcuhHMLOPpollWwcCskKlQqNtTLlIwWEzXxJoOjZloRrxzRdfFUEePGgMmqZRrqeETtTJfFjmMBVvzZcCIiWwZhbBHFfzMPpLlcwWuUCcHKkhVvbgGBCNofVTwvVWtdlgGksSGgKKUuoVNkKtRrWwPmfFCcWwqwWiIzXxZifFKjQqiIfVvFiDdIcufFUiIZzlLEGgbBDbBTteEGFEzZCcboaAqQAajJoKkzZOOrReEBCheErIsSiZzdDSmiIVvVRkKEUuesSGbBgJyAtWwTjDnKkkKWwPpKJjofQqFvVqEwWyYeDvqQVyTZzcftJjqFeEfQbBphXxYfFZDdsStTziIydDHlLXKkxWwXxvVeMoOmEvVyYOzZyYoNnmMflVqQvUuSsywWBbFfbNnhHdDBhlLeEHzZvMmbBVYLKpPATQMscCKDjFfJAJPciIYyKkCcCJjlTGguMaAjoKNnVDkanDdMnNmGgiCcWwmMHyYsSLlnNHLlPSsTdDEMmSCMmcsCceetTEKkOqQAaoDdRoOHaAhrztTaUKYypPkuAvVZgGqQXEFmDyYdHhEeBUeElLSJjsTwPpwWmCOocpvSsVzdDZLlPLteEILlmFwWfHhMiXxTdFfcljpPJZaVvAXxzcCkKIdyYDNLlxXVWwiIzZCckKvdxXKkNQAaNnIFfiAYZYLlSQjJTtfyYFItKkTeEevMLlmkKVESsiMmZzdxXKkqQTMmlLoyNLlnYlQRhHvaAEsxjtnNUZwqdDffkoQqOKCcnNtThHHQYyhHBbeSsEJjuGBbTxzzZwWoOdDPKlLkTtuKlLkrRHhyYLlxaSUusDAadjJaAEHhVvkKYyCsSXrRJFdDfunNqQVxJjzZRXAtROoZzmMrGgCcgGTKhqQrtTSsMTtprOoRjJfNnFPmLkKyaWwAuEPpePSspOoyiWwIJeEfFjmOooOHhMNzZQLVvqTtRCckwWmOWwogGuUHbqaKkAxYaAyiIEWwPKHhWsKkmSeEZwjJkKDFfdKkAaWwYyAgGinNDdIxHWwrrTtRmMRDqQYydeEOoFfuUzVqaAQwWvpEeulLuTwWtUAEeKONnokWwyUuYtjJTauJYyjNnFfmMepPyYIJjUbBEPXxyYVvRkutTUVMmjYzZgGZzFOYyBbofJtTgNnGuUbrRGJWbqGgQBwDdDSsnuUNHhoxXjvVJQBbqOUuvstTShHzZSsvhHVFwWFgGfUljJtTLEVhHvEeGgLNFfexXEGIigTkKQvVIfFHhVvrRFlAaKwWkLvQuEeMGxXtTeEgmQCcaAqXnNxwWcCjJjGggGHjJsSkIisKkLHhowWQqOTgtnNxvVmxXMsSQxXFfMXxzZTtfEKgGMmkjDdJeWslLSlLGMzjrhHRgjJGPpBzZIiRaUoOuAItDJvVjVCcyYjJYyvlLvYyVnGgAakKSsbBAavTtFRzZrDdMIAqQlLWwKkapPimpPnkKRmbFfBiILlaLlDudDrRlLtMQFfVeEvquUulLfVvFPxXppPUUaAzPAabBLEtTewWlpcCcCilhHLPpfFfKkFMtQqEehFfEepPHTtvKkVWLlhNOyTtYahozTtjJZGSsgwyqWwocYDdyCOQYxlLXTsgGdDBbFUuUufUBbtBbTuUuYyDdRrgGZBbzZzJdDfYyJjYqQpOoPviIVhHAaArROoXxsuUSaicCIBxvVzZzOtgJjGBeEUuIyKkYbBixXJjWxXLlsSeEaAsOomMMmLlphHMsSwWUumDdPSrRwqFvVyYqgGQdhUmclLxXCMhHPpuNnaGgAvsShHVHSgGsQHhqegpbBfFPwNHqQhlLxDnNdGxrDdRDdGgowWOUSspPuvVXnNJjaoOYyAtTINXxJvaBbjJxXASJjJFMmfwRKXxQqakKAVvkEExOeEMvSsFfVmoBJSJjmAKIikWOoWIiwwWwKIiULfIiFzxRpPpqQPQUlLIiKjZzJudDyYIiaAiIWEezZLYSAasdDybBcCxYyRrZnNzpPcCgGwLlLlTtWGgvVYyXiIuUkfOoXxCZzcOuoOUoHWwvyRoOEeHhFfNnwWGCcQhHKkquAaVZzZDZzdYyCckKjJCcoOzIiqQSNhHnyaAlnNLYcqQBbMYynNqQkKmsSCnIiiIcCYFfyyYYyQqNPMmLaASsiIlGYoYyOdDnDdhHeENTtWjMmSsFWwMmfFMmfxJjfFFfWsiQqISDXxPpZzdMmFfMmlLvIiCUuceEYaEZPpzdBbgGDPpqzZQGIigGgoODMmMmdmJxXjMBbAayQqIjtTJJjiQqwMmyFfYOyuIhHiUuLgwWWiIwcMmqVvQCNnwWdDcsoOorRbuSsSsySCcsRZkVvwyYBPpHkmMKUuRriPpUuICLNnlcGgAFfaLlpfmMYyFJMfFuUZzEewrOYyoRhHLlYyxXGghHWxNnXnNcCwWRrZpPPpzLlyYbBDdDyeEtTYWhHwXNnxKkVvHhZzlfFFYyyeyYGtAKkaekEoOeKPgtwWTIqIwAaWmMKCckSbBqQSsoOVvsLJjlxuUHhVvhAaHLFmLAUqQuiLlolLOtTveVvdDQUucCpPLDdZzFGgrnNgxXGkKfFUuHhcCwjJWZzRHhKkxIKkulIiKNwuUvVWHhPpEekNhHndoODDdDderREtIiWbAafFniINSQqsBFfGgNPdDBbuWwvVqQUuUlLYJjypKkRrkrRQqLlpPTfFtAaKkrsSEzkKZowWOiIuUGglLQktTKqGgaANhHsSpPaAnenwzZWnNTyYxmnNMXNnBbFepPEFfCdDcdbdDKtTkYyzZrzZRTtGgGgJoMmOBbjXbBmZzMxgEePuZzNxOoXaAsSTXxtiFfOaAotykhHAiIOoPpaWrRmMwDdyYGgnNnRcChHblLxXBSsTthVLIaAilQqOoUuveuGgJjTtwWbBWolLsAaSOOoKPpwWqQkDLfFlzZdKknNfFPpSsPpkSsHhTvVtHhzZKXCcnNMmcCxxXHdDkTtxXiIwFXxqOorRsSzZgCeEcGoOsNnMmmmMXCcyjZMKkmzIiJYlFfhzZAdDwWaZzHJjLfFSsEetTxdXRrxDQqdDsVvCdDcAaYtbBXxyfFBbYfFOoqRrQTUuSsjjJKbBVvBbAaztTnNIxsFfSXpuFfVuujXxRyYulLVvsdDSxABbuRrEeKzZhpvVPAaHydUupPDgGeEJjDdztTHfBbgGVvMCyYvKkuFfUVfFcQQzZeEjiIUWdhDOjMmJzZbaAUuaAEeVSaAsvteEwKkDdKUpPHhaWzZcTDNndtCrCZzmgGMcfSsPpFWwlSsLfjqQQHhoOsSYrRfTteEFyYcCykKsbBgGSLUulqiNnIdDqgyYGHluULYyhIiZXAlXKkLyYkKlJjmMVvXrRxSwWsxTYWciICwytfFLMkKZMmyjfFJhHRrWwYdDfzZFSjnRTXxtnNeOhHoYybBEHhTtnNZzunNRZzVvrFoOfRziIbBYyZrRuevVAZzqQeEBbQNnqawWHoOhFftTaADyYFBbfaAdZxwGMmSsdDZzGCclDdLxXOokuTtuUBqTtHhOoUunYqQlYYVvUuKkyBbQgLhHgGlAWwsSGNngaBFfbtFfkSsKISsiNnTtjQqJaTdwvVWjJCcErREeUucuZvNnEGgeIigGqQsIsqOqQoQoTtbBBbObBuUNwWkKrReEegGEhHuSsyYtUuAjJakKfRrCcFdvVHtThDPpkLMmlKTRcVtTvxxJjoGgQuhHUUuglLGnLlORrcaACaAoNnNbBHhWkKZrRzAawxXsSyYhHqxvtTVPpIcEeCBbBbkTFftashHACcPpKklLuUabmMBhMmBbBcCHcCFeIiLlEVvqfFeEkKeEQRrEeIiUkKOQqoAyYYydDMRUuXOvVoxmNhHniIBDJjPMmppPFWwVmQeEqMqQBboOnEaAoaAOiWWEzZekYhHyoOdbBDqlLbGgXPpxDWwsIiRrEeTtbBiISyYGAXxBbdDacqQFbBfiIGjJdDDdgZzxXUcCaJzZLljAuewAaWwyVvzGNMtDdRcCrfiOoOyIiYoDdyIiYIovyaMmfVfFQAaVSsvpFluULKklLyqQJjuUvVqdDopJjEePOcFfzYyYysSZLlqQfFoHqjJQkYLlyuUWlfFLVMdDmtTLlHVuUAdTtfujJUFcIiCwPpWrRdDvVeYyexXEgGyMmwcsxXTtDdQQqsSqnNzZSsSMIimFfYZiIUuHhHEDYydEaAqQitYyTHhrRLcIiWbBwChHQMmqyXxnqQNEekyYCiIcdDeBbaYyAEcCncCoUuvVOeEoObBxnNsIiPAaplLXEJjiIehHxddcCdaAJjhHgSsFfjJjHWwTvVtAagGJjhiIIiSswHhYyrbBRPOosSvVhHOEeGEeDdvnNfycCYFvAabBqQyMWwPDdtBbgpQLTtvVTwWtlLlLUVOHhoOoOonNSxXGgwWVvEeWwNnGgFfNnCcQqnQqwgyYGWGwWgDduUKkhuUMmNnHNXZzOoRrXxrvVqQaAuUNdVviIDcCIfFiZImMizkKnBbBOobRFfyNbSsaABbAaGgBJkOhAavVFfHoybBcCGiIpoOxXVvXxWuUoOwRjAJwWlRrLsyTtEeYCcBbQpPqjJMmQgbOsLYylSoCcqQBgGUBLlDdiwWfFZWwzfFIqwWQbTHhtBwWlmMFfLgBbGLlDdKkhHBWwWwHhHCcBbFwWPhHMmJOorRTtjpbUBbujJWwBymMSsFfKkjJgGTzZWMmppPLUulGNnhzZYdDEeLlGCOocgnTyWwDdYLlNnFEONxXJgGjnHhRroeyyYPpsSlLBbFyYLlzZfKmMhNPaZzpPARrpRrRyYkKMmUwWurAaaALlyYVvfFOXxoUuDdmMQsSvaAYyFVGgsSvumMrIiRzBbZUfiWoOwIoOpfFCcPTGghHXxotTOtBYybMmfFwWQqdDSLlzZsXAPpqLldgGrRHrosBbSOtTRhwWDkKDnNhgGWjJVvwFfDdFfVPpvTtoOgFQqYQqzZOoCcyJjJxlLXLlqRvDdVRrrtTbBCcfFYyPpXxWwtTxXvVUuAabBNKtTMmkvVxXEHhzZTtRregWwYyGjKXxhHkJjwfFKkQBbsxXryYHhfFRyYSFfmMxvVHhKktTjJCcYyZcpPNKfFUugGMmvpPMmVvEvVewWpxeEBbbhHdDDdDdBXtjJTeEZzPNCctTadDFfAnjAaJUurzZRHhphHtThjtHhhHtTTNvcCVlmMLnNbBSkZaAHhzwlLGgFfnNJYyyYjJjJjgKkGzZPQVvwLlVvXxjJZteETgAaGDdWwzGKUuYyUneEehHMVMmvmQqMOoNmMIiUDCcjJoOdhHunwSFfaLlSsVzZvACcuUMiIPoWEewHhWIiwVvOgGyYYXxOnNoyTtpnNZOaAxKkTtMzZmIvVmMstTSWwPpBbgGiXLoOlBbosSzWbtTBwyncCNJhHcCjjEeSsHfjJbBFhJZzIiTtvgNnGeEVpZzthYyhBbHkKxXHKkrRTmnNxEeOokKbmmMTtMgGBXMTtpPWwKwWkJjLlPBOoiIbYGgXrRxrRmewWEMCcTRrpPPptMPpmXxYFaTtAfQJOsSoZzjqSsmhQqHMSschHeECylLxXYdLAadDvVlqQqQqQDMsSmRrEKkekOomMhHsZzpPUuUuonNXxjJOSAPpasdDSKJtTRrjhHKkCdPpsSPlKkLpDTLMmYyCcIAaicCeplLsSnpPNPEtFfTLlJjYkIiKyjPphPpXxuUyYYNEeMmmWwhHZzMvYydBbDVkKZzAHpPhnNPpXJjHvVHhKqQOcCotTMmhHkhkmMjJCNnczNnpaADdUuPZIiKaAXZBVjJvbpPvVRryYSsNdGrfNnezTtZEFRwjJduuxXUjJUXZLlzWwxKXxWpPbkKsSBwkiIlLDSsgleEWwuULEMEemsmyYMfkTtKFroTtORkKsSSrRfFeGoOxbBXSsYazbBeEZASnNsXotTOYyxnNSsJOBYybZztTNnyYYykXxXVvxNnmMOBbTASyYINnisauHhUtoxpPXNnxTtnNzZcHhCcCLlXIATtabBAaYyYyqQilkKWCcEFfewsXxSdnUlLuRrNZzqQDOpPoMEexXEesScCWwBiiidDIdDIHhpPHhIyqNnsSQFEeHnNhBbfYbmDdnNuUaAvrRsSVvVaDdRsSrcDdIiCAtTdmMOombBLlMwgGWqQTnoOwWsSaAWFSsfwNyYijQqSsJvVrROokKIlajJAyYkjJOoKbFmMfDdqQJRrztTLBblPpqQZTaQqZCczAXxclLOMmoHHXxhjJoOhnNMmLcCcfyYFCgGlNfFnCHsxXczZCShpPVKkvtdXxYySspPYyEEejJSsNzZkMmKwWnVUukiIKvEeVGSsZzdDwGWwgWgpPXSsZzxRPprQlNnLiIMmPqWCcwTtnNQNvRrVGkKgcCQgBbGysSYqCcpvVPDbBWwuUeAgGDdanhHgGRrNEHbEZSAaszeCcBhcCdlOoadDAWSswLZWwzFSsjJcXvVYmQqGgfFsSxiIXJjoOMlSsLwEeRrJjkKrIiuURWWQqPjTtCcBbodDJrRjIQrRqXxtTxcCXcCjRrpgGPJJlLjNiIgGaAuUqgGQfFcumMPhHpUCZzpPlLYyvVaAAarRgGWwukKBbUwWiItcCNnTvVmeEMMmuzDdpPZWwaAsUuSUngKktbXxBKkqQkKXQqGEegAyYAakKwWanVxXvTQqtHhwWRFoOlLLlgGXxoOfZvBbsxXovsSVJoOLljOoOlLRrSJNypYyPHhyzZYYWBbdDoOraAqQRwqKkQVvnjeEOoSPtQqTNnpIisbOoBJjTLlwWJjYSXxsGgyOosRNnNnndDNsSIqQkeEKiHhIiPphPpHrRkQqKTtuUcCVvkGSUupPsSXGgmMZzYyxIGdDgiEesHhgKxXFpPfhaARrPpEKkQqeHQWwqTgGdDtHjvVJKTtsqoJjOnNbBQiIuUSHhzZkDdSGgJjwOoWqQCsScMmVJjrRaASBbZzdDsvrEqQtLlTeGLlQqDiAloOnNLaoiIOfFYyIfFdgUfjWwTzMmZtJMmFJKkHhdDNzZnjJjbwJmMYyjTrRtWlLOoXXxnMmDSeEHhsdNmMVvDdxBvVyYPVUuvBbLleEOofFNnrRgGMmlLgGpgGjNgGvVwWnzZtTeJjXFWJjHhwfgGXxxzZVTtzvVZwWLlWwvVsSvWwgGrRpPtrRoOTEZzpFwWfPvVISwWsiTaAtYGgoDdLlOyQPHhdDCcpBjXxJbPZgGzpZzqtTOokKOoSsJiBbAaIgGssmMmMSSYyaNNnwWnEQVFfeWwEvpPAavVHhmXxbyYiIfrRFYANnGZzKkgLOolsSaVAIiaYysOouUPpxXQQqqwWQqrcCRMmPVvxXpSbWwOoAaBvPpsjJdDSgKkRrSGjpPJgJjSssGgSsUhHwWuMmAazZzZQzZlSsAaNnuFfUaALqbpPmMYyWwMmBvhHzZVXxXqyYQyYdDqQPpdDxZzhHRLxXlxXEemqQMIirRAaHhTGVFfvgvBbAaFflLvVVHhrRHhRQqsSrRrEYyUXxueVNxXnGgKpPkPpvCcttTPpryYoOGNTtUuQqIiTtEVvIieXxYyxXEiIvCcKkTbBtlaALniIzZNVvVeDdWNnziIZgzZGjGgTtJwHpfyYPpFPGghdhHSsJAajPrvVSsRpDKbzZBknwWyYiLlqQwUcCuWWKkwzZiIITtDdApPacAPRruUyqfFVvQYpcCZiUuAaIpPEqQoySsNnmMYfjJwWFZdDNnLlAalLOnNozoIOovVwWiUjhHJuVvXxlLCcJaAjCcOoVvCciGgIpqlbBLZDdzzZQgpPGwqaXxKkAjBbJmMQUukYJjaZznpPlLNrRALHhaAlBbbBPpywWiIQqsSKIioTtoOOzbdDvDdVBiFfSsjeEGUugzZJEeHhuUmMlfFSsBbRrvVyyYoOYdavVCUucWwADvVtTeEuUJjJHlLhjJrRjVEeYyRKkrFfWwDdRriIAQsSqHhaLMgGmYySszZsgcCGKoOkSBbljJFUufbBbBbBJjHhXxyYEeERKkBbIivVoOeErAaUuJjGgQqFfxXtTRwWwWrxXOoLVwHhWvGgYynNvJjSsmMhHjabBAJYyQqdxXpPDmrGgJlLjRMRwWrVxUEeuXDdDdRYyxXcCTthZzHUukoBbOiIVyFfYvgUuHhsSGvVjuUJVFfvzpPqgGQjJUuxEejJJsSFfUtTujqQkSsKhBrRbNyYZznjiIEcRrQnNqZzNnCeBbJHPpaSiIsATtaPZPpgGzyYlLyyrRvgGVLhHXxzZlYKVvhPpHpPIikMfFFLlfJLRrHWwGjJgegGCrRcEPLlNaAnpPpCsSdbBDIvVluUSsLiJuUSDdsjcGgMmuUvasSbBaAAIiUuTfFnNtHnNhNxXnFfRroOVniINhRqQrwWWwvqQvmMDdLlCcuFfUzZVVBboXxRrOlIimdDYyMtTUuJKktNNnnbBsmMEeSTwelLEWjVvWzZLlwobBpPIijJdDYyKkOWUuwJjyYAaxXxXIfFizZnNEVnNpPvQRrqeQnNMmqghHcXxXxCWwlLGTIAaUuTttTitltiIvVWwIiTAarRZzQNnoOqxXlLsSmMiOosSEegGQqdeEjJKkuUKkCaAKkCcbBcHfFeEhSseEPVvKklLYyGgpDdcCtSsglLrTtRGPphHNnuUfFeAaEnNWwNnPPpOokKcCCcmtTsSGPpgMa diff --git a/2018/inputs/6.txt b/2018/inputs/6.txt new file mode 100644 index 0000000..e544bbd --- /dev/null +++ b/2018/inputs/6.txt @@ -0,0 +1,50 @@ +195, 221 +132, 132 +333, 192 +75, 354 +162, 227 +150, 108 +46, 40 +209, 92 +153, 341 +83, 128 +256, 295 +311, 114 +310, 237 +99, 240 +180, 337 +332, 176 +212, 183 +84, 61 +275, 341 +155, 89 +169, 208 +105, 78 +151, 318 +92, 74 +146, 303 +184, 224 +285, 348 +138, 163 +216, 61 +277, 270 +130, 155 +297, 102 +197, 217 +72, 276 +299, 89 +357, 234 +136, 342 +346, 221 +110, 188 +82, 183 +271, 210 +46, 198 +240, 286 +128, 95 +111, 309 +108, 54 +258, 305 +241, 157 +117, 162 +96, 301 diff --git a/2018/inputs/7.txt b/2018/inputs/7.txt new file mode 100644 index 0000000..3fe80cb --- /dev/null +++ b/2018/inputs/7.txt @@ -0,0 +1,101 @@ +Step E must be finished before step Y can begin. +Step Y must be finished before step T can begin. +Step I must be finished before step C can begin. +Step G must be finished before step F can begin. +Step C must be finished before step P can begin. +Step B must be finished before step Q can begin. +Step Z must be finished before step N can begin. +Step J must be finished before step W can begin. +Step W must be finished before step P can begin. +Step K must be finished before step D can begin. +Step Q must be finished before step L can begin. +Step V must be finished before step D can begin. +Step O must be finished before step M can begin. +Step A must be finished before step P can begin. +Step M must be finished before step L can begin. +Step R must be finished before step S can begin. +Step D must be finished before step X can begin. +Step X must be finished before step N can begin. +Step P must be finished before step T can begin. +Step F must be finished before step N can begin. +Step S must be finished before step L can begin. +Step U must be finished before step N can begin. +Step T must be finished before step L can begin. +Step N must be finished before step H can begin. +Step L must be finished before step H can begin. +Step N must be finished before step L can begin. +Step X must be finished before step F can begin. +Step P must be finished before step F can begin. +Step P must be finished before step H can begin. +Step B must be finished before step D can begin. +Step V must be finished before step H can begin. +Step X must be finished before step S can begin. +Step Q must be finished before step O can begin. +Step Z must be finished before step T can begin. +Step K must be finished before step N can begin. +Step S must be finished before step H can begin. +Step M must be finished before step P can begin. +Step Q must be finished before step D can begin. +Step R must be finished before step U can begin. +Step J must be finished before step P can begin. +Step P must be finished before step S can begin. +Step V must be finished before step U can begin. +Step R must be finished before step T can begin. +Step F must be finished before step S can begin. +Step D must be finished before step T can begin. +Step E must be finished before step N can begin. +Step J must be finished before step N can begin. +Step J must be finished before step A can begin. +Step K must be finished before step U can begin. +Step V must be finished before step N can begin. +Step V must be finished before step S can begin. +Step U must be finished before step L can begin. +Step F must be finished before step U can begin. +Step I must be finished before step T can begin. +Step J must be finished before step L can begin. +Step E must be finished before step T can begin. +Step T must be finished before step N can begin. +Step I must be finished before step G can begin. +Step R must be finished before step D can begin. +Step E must be finished before step B can begin. +Step X must be finished before step H can begin. +Step P must be finished before step L can begin. +Step Z must be finished before step J can begin. +Step O must be finished before step L can begin. +Step E must be finished before step H can begin. +Step F must be finished before step T can begin. +Step A must be finished before step F can begin. +Step U must be finished before step H can begin. +Step F must be finished before step H can begin. +Step C must be finished before step W can begin. +Step A must be finished before step L can begin. +Step V must be finished before step M can begin. +Step U must be finished before step T can begin. +Step E must be finished before step P can begin. +Step Y must be finished before step U can begin. +Step W must be finished before step R can begin. +Step E must be finished before step X can begin. +Step Q must be finished before step U can begin. +Step I must be finished before step F can begin. +Step V must be finished before step F can begin. +Step V must be finished before step T can begin. +Step R must be finished before step P can begin. +Step B must be finished before step A can begin. +Step S must be finished before step T can begin. +Step M must be finished before step F can begin. +Step Y must be finished before step F can begin. +Step C must be finished before step K can begin. +Step D must be finished before step S can begin. +Step O must be finished before step S can begin. +Step M must be finished before step U can begin. +Step Z must be finished before step S can begin. +Step R must be finished before step H can begin. +Step C must be finished before step O can begin. +Step G must be finished before step Q can begin. +Step Z must be finished before step D can begin. +Step B must be finished before step N can begin. +Step I must be finished before step H can begin. +Step I must be finished before step P can begin. +Step E must be finished before step J can begin. +Step V must be finished before step L can begin. +Step B must be finished before step U can begin. diff --git a/2018/inputs/8.txt b/2018/inputs/8.txt new file mode 100644 index 0000000..ecb2263 --- /dev/null +++ b/2018/inputs/8.txt @@ -0,0 +1 @@ +8 11 7 2 4 4 3 6 1 5 0 8 1 6 1 1 5 4 7 3 1 2 3 1 1 1 5 0 9 9 5 2 8 7 5 7 1 4 2 2 1 1 3 1 6 0 8 6 1 8 1 1 5 4 1 3 3 3 1 3 3 1 4 1 2 2 3 3 4 1 9 0 10 1 9 5 2 6 5 6 5 7 1 2 3 1 3 3 2 3 1 1 1 7 0 11 2 5 1 1 8 4 9 1 5 4 7 3 1 3 3 1 1 3 1 7 0 8 5 2 7 8 5 4 1 1 1 1 3 2 1 3 2 3 3 3 2 3 7 1 8 0 9 2 5 4 6 7 2 9 2 1 3 1 3 3 2 1 2 2 1 5 0 9 1 1 6 1 4 2 9 4 3 1 1 2 1 3 1 6 0 9 7 2 9 4 4 5 1 8 6 1 3 1 3 1 1 5 3 3 4 4 3 4 3 7 1 6 0 11 1 3 1 1 1 7 3 8 2 1 6 1 2 1 3 1 1 1 9 0 7 7 2 1 8 1 9 8 2 1 1 3 1 1 3 1 2 1 7 0 8 5 7 1 9 7 6 5 3 1 1 1 2 2 2 2 2 2 1 2 3 2 4 1 4 1 2 5 5 3 4 1 8 0 9 1 3 7 1 2 1 3 9 8 3 1 1 3 3 2 3 1 1 6 0 7 2 4 2 6 8 1 6 2 1 1 3 3 2 1 5 0 10 1 6 6 9 7 8 4 4 9 7 1 2 1 2 3 1 1 4 4 3 6 1 6 0 10 1 7 2 8 1 6 9 3 6 7 2 2 1 3 1 3 1 8 0 8 1 8 9 7 6 1 3 4 1 1 3 2 2 3 2 2 1 6 0 8 1 8 2 3 9 5 1 6 2 1 2 1 2 1 4 2 3 5 5 5 3 4 1 6 0 10 5 7 6 5 7 1 7 4 1 5 1 1 3 2 2 3 1 8 0 7 7 1 8 1 6 4 3 3 3 2 1 3 2 1 1 1 7 0 10 6 1 1 5 9 3 2 3 3 9 3 3 3 1 1 1 1 1 2 1 1 3 5 1 8 0 11 1 3 1 6 6 6 5 1 5 1 6 2 1 3 1 3 2 1 2 1 8 0 6 1 1 2 1 9 9 1 3 1 2 2 3 1 2 1 6 0 9 8 4 2 8 8 7 1 8 1 1 2 2 1 1 2 5 1 1 4 2 3 6 1 8 0 8 4 1 8 1 3 6 9 8 3 1 2 1 3 2 3 1 1 6 0 7 9 1 6 4 9 4 6 1 3 1 1 1 3 1 8 0 7 5 4 1 5 7 1 8 2 1 1 2 2 2 1 2 1 2 1 1 4 4 2 2 3 3 2 4 4 3 7 1 9 0 8 3 3 7 1 1 5 3 3 2 2 1 1 2 1 2 3 1 1 9 0 8 5 9 8 9 4 4 8 1 1 3 2 3 2 1 1 1 1 1 9 0 8 3 6 5 1 8 4 5 2 1 1 3 2 2 1 1 1 3 1 1 5 5 5 5 1 3 4 1 8 0 8 8 5 8 6 7 1 3 5 1 2 3 1 2 3 2 1 1 8 0 9 4 2 8 6 6 2 2 1 2 3 1 1 1 1 3 1 3 1 6 0 7 5 4 4 2 2 2 1 1 1 2 3 1 1 5 5 2 3 3 6 1 8 0 6 1 5 6 4 3 8 1 3 2 1 2 3 2 1 1 6 0 11 7 1 3 7 3 5 3 9 1 5 6 3 2 1 1 1 1 1 7 0 8 7 6 2 8 5 1 3 4 3 2 1 3 2 2 2 1 4 5 4 2 1 3 4 1 6 0 11 7 4 1 1 8 4 6 3 9 2 8 1 1 3 3 3 1 1 8 0 7 1 4 9 2 1 4 6 1 2 2 3 1 3 3 3 1 6 0 8 7 6 2 1 8 4 8 7 2 1 3 1 3 2 2 1 5 3 4 4 4 4 5 4 3 4 1 7 0 10 1 3 1 7 1 1 7 9 5 7 1 2 1 1 3 3 1 1 6 0 11 4 1 7 7 2 4 6 1 7 8 3 1 1 2 1 3 2 1 9 0 9 6 2 9 1 9 9 5 6 1 2 2 1 2 3 3 3 1 3 2 2 2 1 3 5 1 8 0 11 4 8 7 1 3 2 3 6 1 3 9 2 1 2 3 3 2 1 3 1 8 0 6 4 4 3 6 1 2 1 3 3 1 3 2 2 1 1 9 0 10 7 5 1 7 6 1 3 6 6 6 3 3 2 1 1 2 1 1 2 3 1 2 5 5 3 6 1 9 0 10 9 9 2 1 6 4 4 4 1 2 1 2 1 1 3 3 1 1 1 1 6 0 8 1 4 6 1 4 5 8 6 2 1 2 1 1 1 1 7 0 7 3 9 1 1 1 1 1 1 3 1 3 1 3 3 3 3 5 4 2 2 3 5 1 5 0 8 7 6 5 7 1 9 4 5 1 2 1 2 1 1 8 0 10 5 3 2 8 3 6 1 7 9 1 1 3 1 1 2 1 3 2 1 6 0 10 2 6 1 6 9 9 7 6 1 4 2 1 2 3 2 1 5 4 3 1 2 3 4 1 5 0 10 6 2 1 7 1 1 7 5 1 8 1 1 1 1 1 1 7 0 6 1 3 7 4 7 1 3 2 3 1 1 1 1 1 5 0 8 6 5 1 4 4 1 7 2 2 1 2 3 1 3 4 2 5 2 4 6 5 5 4 3 7 1 9 0 6 4 4 1 8 4 1 1 3 1 2 2 2 1 3 1 1 5 0 8 1 3 2 8 1 5 5 5 3 2 3 3 1 1 6 0 7 2 1 8 7 2 7 8 1 2 2 2 3 3 3 5 4 2 5 5 4 3 7 1 6 0 10 6 7 5 1 7 7 5 1 9 1 2 3 1 3 2 2 1 6 0 7 8 6 4 5 6 5 1 2 3 1 1 3 2 1 7 0 7 9 1 1 1 6 3 9 2 1 3 2 2 1 2 2 5 1 4 3 5 1 3 7 1 6 0 7 4 6 1 5 3 1 3 1 3 2 1 1 1 1 9 0 9 1 3 8 4 5 7 9 2 5 3 3 2 1 3 1 2 3 1 1 9 0 8 2 5 6 1 5 5 1 8 2 3 1 2 1 1 2 3 1 3 4 1 2 4 3 2 3 7 1 5 0 9 4 8 1 8 7 1 1 7 6 1 2 1 3 2 1 8 0 8 8 3 5 4 1 3 3 3 1 1 2 1 2 1 1 2 1 5 0 8 1 5 7 8 5 7 3 5 3 3 1 2 1 2 2 5 4 3 5 1 3 6 1 5 0 10 8 6 1 6 7 3 4 2 1 7 2 2 1 2 3 1 5 0 7 4 2 9 1 3 5 1 3 3 3 1 1 1 5 0 11 7 8 2 5 9 5 2 2 5 1 7 1 3 1 1 1 2 4 1 3 4 2 7 3 5 2 5 3 3 5 1 9 0 11 6 2 2 1 7 8 4 6 8 9 1 2 3 1 1 1 1 3 3 3 1 5 0 11 3 4 8 3 9 1 2 5 4 1 2 2 1 1 3 3 1 8 0 6 2 1 2 8 1 1 3 2 1 2 3 2 1 2 1 3 3 3 4 3 4 1 8 0 9 9 8 4 1 3 6 4 1 3 1 2 2 1 2 2 2 1 1 8 0 8 1 9 1 1 7 2 1 5 1 3 2 1 1 2 1 3 1 7 0 6 1 8 7 8 5 4 1 3 2 2 2 1 2 3 5 1 2 3 4 1 9 0 6 1 1 2 7 2 8 2 3 3 3 2 1 3 1 3 1 6 0 9 9 7 7 3 8 5 2 6 1 1 3 1 1 3 2 1 7 0 8 5 4 5 1 7 3 8 1 2 3 1 3 1 3 3 2 3 3 3 3 6 1 6 0 6 1 1 1 6 6 3 2 3 3 2 3 1 1 9 0 10 6 6 9 5 9 2 9 7 6 1 1 1 2 2 3 1 1 1 2 1 5 0 10 4 1 7 4 2 8 3 3 7 3 3 1 3 1 2 2 3 5 2 3 3 3 4 1 6 0 8 4 3 7 7 5 2 4 1 1 1 3 3 1 1 1 8 0 10 5 9 8 3 9 1 1 8 4 7 1 1 3 3 1 2 3 3 1 8 0 8 4 9 1 1 9 4 6 3 1 1 1 1 1 1 3 1 3 2 2 3 3 7 5 4 5 3 5 1 8 0 7 1 6 1 8 5 9 2 2 1 3 3 3 1 3 1 1 5 0 9 3 6 2 2 4 1 4 1 7 1 2 2 1 2 1 9 0 6 4 7 1 1 1 8 2 1 1 1 2 1 2 2 1 4 3 2 4 5 3 6 1 7 0 10 3 2 6 2 1 5 7 8 9 5 1 2 1 3 2 2 3 1 7 0 6 3 6 6 1 4 6 1 1 1 3 2 1 3 1 7 0 9 6 1 3 1 3 8 5 9 4 1 2 2 2 1 1 3 2 3 2 1 2 3 3 4 1 5 0 11 1 3 8 7 7 7 7 2 2 3 1 3 1 1 1 2 1 9 0 10 4 5 1 3 2 8 8 8 3 9 3 1 1 2 3 1 2 2 3 1 7 0 6 6 3 1 3 2 4 3 1 3 1 3 3 2 2 1 3 4 3 5 1 5 0 10 7 8 5 2 3 3 7 1 6 6 1 1 3 1 1 1 9 0 8 5 1 6 1 2 7 4 3 1 3 2 2 1 3 2 2 3 1 9 0 8 9 8 1 4 4 9 3 8 3 2 3 2 1 1 1 1 1 4 4 4 3 1 4 4 6 5 3 5 5 6 3 5 5 3 5 1 6 0 11 8 3 8 1 1 1 6 6 7 5 6 2 3 1 1 3 2 1 9 0 7 4 1 2 1 8 1 2 1 1 1 2 3 3 3 2 2 1 7 0 7 5 6 4 7 3 1 1 1 2 1 2 1 2 2 4 4 1 3 2 3 5 1 9 0 8 5 8 2 3 6 1 9 9 3 1 3 1 3 1 2 3 2 1 8 0 10 2 7 5 2 2 1 5 1 7 9 1 1 3 2 3 1 2 2 1 8 0 8 8 7 5 9 9 8 1 1 1 1 2 1 1 1 2 2 2 2 2 2 2 3 5 1 7 0 11 7 2 2 5 7 1 4 9 4 6 4 2 3 3 2 3 2 1 1 9 0 7 1 3 3 5 2 1 9 3 1 1 2 3 1 3 3 2 1 7 0 10 1 7 6 1 9 3 6 2 4 4 1 1 1 2 2 3 3 2 2 1 2 1 3 4 1 9 0 7 3 6 9 6 7 1 3 1 2 1 2 1 1 1 2 1 1 8 0 10 1 3 9 1 3 8 7 6 6 4 2 2 1 3 2 1 1 1 1 5 0 6 9 8 1 3 5 4 2 2 3 1 3 5 2 3 5 3 4 1 7 0 9 2 9 6 9 1 2 9 2 2 3 1 1 3 3 2 2 1 6 0 11 9 7 3 4 2 9 5 1 6 5 4 3 1 2 3 1 3 1 6 0 7 5 9 3 9 1 1 6 1 1 3 2 3 3 2 3 3 4 6 5 3 5 4 5 3 3 5 1 7 0 6 9 1 6 2 1 6 1 1 3 2 3 3 1 1 7 0 10 6 1 2 9 7 1 8 5 9 1 1 3 2 3 1 2 2 1 7 0 11 2 6 4 4 1 2 2 5 6 2 8 1 3 3 1 3 2 3 4 1 1 5 4 3 4 1 8 0 7 1 6 5 8 5 8 9 1 2 3 3 3 1 2 1 1 5 0 8 3 5 2 4 1 9 4 5 3 1 2 3 3 1 9 0 9 9 2 1 7 2 9 8 5 1 3 1 3 2 2 1 2 1 2 4 3 4 1 3 5 1 9 0 10 5 5 6 1 5 5 6 1 3 7 2 1 1 1 1 1 2 1 2 1 5 0 6 1 5 7 2 3 9 1 2 3 2 3 1 7 0 10 7 8 4 8 9 8 2 1 2 5 1 2 2 1 2 3 3 3 4 4 1 3 3 4 1 8 0 6 3 4 7 1 3 1 3 3 1 3 2 3 3 3 1 5 0 7 6 2 7 4 3 1 1 1 2 3 2 1 1 5 0 8 1 1 4 5 6 3 5 7 3 1 1 3 2 3 1 5 2 3 6 1 6 0 10 1 8 1 1 2 2 5 5 1 3 2 1 1 1 3 1 1 6 0 8 4 2 1 7 7 8 8 5 1 3 1 2 1 1 1 9 0 7 5 8 3 6 1 7 5 3 3 1 2 1 2 3 3 2 5 5 5 2 1 1 2 4 5 4 4 3 5 1 9 0 8 2 1 8 2 4 1 3 4 1 3 2 1 2 1 1 2 2 1 9 0 6 8 8 1 8 8 6 1 1 1 2 1 3 2 2 1 1 7 0 7 7 8 1 8 7 7 8 1 1 1 1 1 3 3 3 5 2 5 2 3 6 1 9 0 8 9 2 8 3 4 7 1 1 1 3 3 3 2 1 2 3 1 1 6 0 7 2 1 9 4 1 3 1 1 2 3 1 2 2 1 5 0 9 8 2 2 7 3 4 1 6 3 1 2 2 1 2 4 3 1 2 1 5 3 7 1 8 0 7 1 6 2 5 3 8 3 2 1 1 1 1 2 3 1 1 8 0 10 5 2 1 1 1 5 7 1 4 9 2 1 1 2 2 2 1 3 1 6 0 10 5 4 8 1 6 2 7 1 6 1 1 3 3 1 3 3 5 3 5 1 5 1 5 3 7 1 8 0 9 6 5 9 1 1 8 5 5 7 2 1 2 1 2 1 3 3 1 6 0 7 9 8 1 2 1 2 5 1 2 1 2 3 1 1 8 0 6 5 3 1 5 3 7 1 3 3 1 1 1 1 1 4 1 1 2 1 3 1 1 2 2 6 5 4 3 6 1 6 0 6 9 5 7 8 1 4 3 1 2 1 2 1 1 8 0 8 4 6 3 1 9 7 1 6 1 1 3 1 3 3 2 3 1 7 0 6 1 1 8 2 3 3 3 1 1 2 2 1 1 4 1 1 2 2 2 3 4 1 6 0 8 8 5 1 1 5 1 7 9 3 1 3 1 1 3 1 5 0 10 6 9 5 9 3 5 2 8 1 1 1 1 2 1 1 1 5 0 10 3 6 7 9 9 1 6 4 2 8 2 1 3 1 1 2 1 2 4 3 7 1 8 0 8 1 3 7 9 5 8 8 3 1 1 1 1 3 1 3 2 1 5 0 10 8 1 9 9 1 5 9 8 4 3 1 2 3 2 3 1 6 0 6 9 9 5 1 7 9 1 2 1 1 3 3 2 3 2 4 1 3 1 3 4 1 7 0 10 3 5 8 9 6 4 1 8 9 1 3 3 1 1 2 3 1 1 6 0 6 3 8 2 1 2 5 3 2 2 1 1 1 1 6 0 10 3 2 6 6 1 2 1 6 4 4 1 1 3 1 3 1 1 5 2 2 3 6 1 5 0 6 2 6 6 1 1 9 1 2 3 2 1 1 8 0 6 6 3 3 6 1 1 3 2 3 2 1 3 2 1 1 8 0 9 1 1 6 8 4 6 2 9 9 3 3 2 2 1 1 3 1 2 1 5 1 3 3 1 5 6 6 5 4 3 4 1 7 0 7 3 5 1 9 7 3 3 1 1 1 2 1 1 3 1 6 0 9 8 7 7 2 1 1 4 5 7 1 1 1 1 2 1 1 8 0 11 8 7 9 1 1 2 9 7 1 8 1 1 2 2 2 3 2 2 2 5 4 2 2 3 6 1 9 0 10 5 4 3 9 1 1 6 9 4 5 1 1 1 3 1 1 3 1 1 1 5 0 6 1 2 1 6 4 8 2 2 3 2 1 1 7 0 6 5 4 5 5 1 1 3 1 2 3 1 3 3 1 1 3 2 1 1 3 4 1 7 0 10 4 4 9 1 5 8 1 2 7 8 2 3 1 1 3 3 2 1 7 0 7 4 9 4 4 1 4 4 3 3 1 2 1 1 1 1 5 0 11 5 3 6 6 4 8 6 5 6 1 3 1 1 1 1 1 4 1 3 3 3 4 1 8 0 8 9 8 1 6 9 8 5 6 1 2 1 1 1 1 1 2 1 8 0 9 1 3 3 5 9 1 1 3 6 1 1 3 2 2 1 1 3 1 8 0 10 8 3 5 6 2 5 7 4 1 4 1 2 1 3 3 1 2 1 2 3 5 3 3 5 1 8 0 11 5 4 9 9 7 9 4 2 7 5 1 3 1 2 1 1 1 2 1 1 5 0 6 1 1 9 9 1 8 2 2 3 2 1 1 7 0 7 3 1 4 2 2 5 5 1 2 3 3 1 3 1 3 1 3 5 1 2 2 7 6 5 3 3 5 1 9 0 10 1 2 7 9 6 4 5 6 9 1 2 2 2 1 2 1 3 2 3 1 5 0 6 8 7 5 1 2 5 3 2 1 2 3 1 6 0 7 9 4 2 9 2 3 1 1 1 3 3 1 1 4 5 3 2 3 3 5 1 8 0 9 3 4 3 1 9 9 3 1 4 1 3 1 2 3 2 2 3 1 9 0 9 7 7 3 8 9 9 1 5 8 2 1 2 2 1 3 2 3 3 1 7 0 9 4 1 6 4 5 4 3 9 1 3 3 1 2 2 2 3 5 5 2 2 2 3 5 1 7 0 7 1 5 7 1 5 1 4 3 1 1 1 2 1 3 1 6 0 6 1 3 2 1 4 5 1 1 3 3 2 1 1 9 0 10 9 4 5 3 8 5 1 3 3 5 2 3 3 1 2 1 1 3 1 1 1 3 5 1 3 7 1 8 0 7 7 3 4 5 1 1 1 1 2 2 1 1 2 1 3 1 9 0 10 9 1 5 3 7 2 2 1 1 7 3 3 1 2 3 3 1 2 1 1 5 0 11 1 1 3 3 3 4 5 2 6 5 1 1 2 2 2 3 1 4 1 2 5 2 4 3 4 1 7 0 8 7 1 8 1 4 2 5 8 1 2 2 2 1 3 2 1 6 0 7 3 5 9 4 1 6 1 1 3 2 3 2 2 1 5 0 6 5 8 6 3 9 1 3 3 1 2 1 3 4 4 2 5 3 2 6 4 2 7 3 5 4 3 5 1 6 0 10 3 5 9 1 1 3 7 1 1 2 1 1 2 3 3 2 1 9 0 7 8 2 9 2 4 1 1 1 1 2 3 2 2 2 1 2 1 7 0 7 6 1 1 8 6 8 6 1 3 1 3 2 2 3 5 3 1 2 3 3 7 1 6 0 11 4 2 7 6 1 2 8 8 1 7 1 2 3 2 1 2 1 1 5 0 9 1 9 1 3 6 7 6 4 4 2 1 3 2 2 1 9 0 8 2 9 1 5 7 2 4 6 2 2 3 2 1 3 1 3 1 5 3 1 4 3 3 4 3 4 1 9 0 8 3 5 3 2 1 2 3 7 1 1 3 1 2 1 3 1 2 1 6 0 8 1 5 7 9 3 7 4 7 1 3 3 2 3 3 1 9 0 8 8 2 9 7 1 6 7 2 1 2 1 2 3 3 3 1 3 5 2 3 2 3 6 1 5 0 6 5 3 2 1 5 7 1 1 3 3 1 1 8 0 10 7 1 7 1 4 5 9 7 9 8 3 3 1 2 1 1 3 1 1 6 0 7 7 1 3 8 1 7 4 1 1 3 3 2 2 2 3 2 2 3 2 3 4 1 8 0 6 2 4 4 6 9 1 3 3 1 3 1 3 3 1 1 8 0 6 9 1 2 9 8 3 1 2 2 1 2 1 1 2 1 7 0 6 1 5 1 9 1 2 3 1 1 3 3 2 1 1 3 2 5 1 3 4 3 5 3 3 4 1 6 0 11 9 5 9 6 3 9 9 4 4 1 2 1 3 1 1 3 3 1 9 0 7 8 8 1 3 5 4 7 2 3 3 2 1 3 2 2 1 1 7 0 10 9 9 1 7 7 4 7 8 1 7 3 1 3 3 1 3 3 3 1 4 2 3 5 1 7 0 11 2 9 9 1 5 7 1 1 5 6 8 3 3 3 1 3 2 2 1 6 0 7 5 7 1 2 6 9 5 1 1 3 1 3 1 1 7 0 8 1 3 2 2 2 5 4 8 3 1 3 3 3 1 2 2 5 5 1 2 3 4 1 7 0 10 4 3 3 5 1 4 9 9 3 1 1 2 2 1 1 2 3 1 8 0 7 8 5 8 7 2 2 1 1 2 1 1 3 3 2 1 1 9 0 7 3 7 5 1 1 5 3 3 1 1 2 2 1 1 1 1 4 2 1 2 3 4 1 5 0 7 4 4 1 6 8 6 1 2 2 1 3 1 1 8 0 6 1 5 9 9 1 2 2 3 2 2 1 3 3 1 1 6 0 9 6 5 4 2 3 1 5 2 1 3 3 1 1 1 2 2 4 5 2 3 5 1 7 0 10 1 7 1 4 1 1 1 1 1 2 2 2 3 3 2 2 1 1 5 0 8 7 6 3 1 1 9 4 1 1 1 2 1 1 1 8 0 9 1 9 1 8 3 1 2 9 5 3 1 2 2 2 1 1 2 3 2 3 5 2 4 5 5 4 3 3 6 1 5 0 6 3 1 5 1 1 9 1 2 1 1 1 1 8 0 9 6 1 3 9 4 4 4 8 6 1 2 2 2 1 3 1 1 1 8 0 7 2 8 1 7 3 3 1 2 1 1 3 3 2 1 3 5 3 3 1 4 5 3 7 1 5 0 6 4 2 5 5 1 1 1 1 2 1 2 1 6 0 6 8 9 9 3 1 7 1 3 3 2 1 1 1 7 0 6 9 3 6 9 1 3 1 1 1 2 1 1 2 1 4 2 2 1 5 5 3 4 1 6 0 6 2 3 9 1 5 3 3 3 1 3 1 1 1 5 0 9 1 1 7 2 8 1 6 2 7 1 3 1 3 2 1 8 0 7 1 9 1 5 2 5 9 2 1 1 1 3 2 2 3 2 1 3 4 3 7 1 8 0 8 8 1 2 7 6 1 9 2 1 3 2 3 2 3 3 2 1 5 0 6 9 8 9 8 6 1 1 3 2 3 1 1 6 0 6 5 1 3 7 1 1 1 2 2 1 1 1 3 1 3 2 2 3 1 2 4 4 5 3 3 7 1 8 0 8 8 2 1 2 3 4 5 2 2 2 1 1 2 3 2 3 1 9 0 11 2 8 2 9 6 1 5 9 9 7 5 3 2 2 3 2 2 1 3 1 1 9 0 9 5 1 1 9 2 1 6 5 4 2 1 3 3 2 2 1 3 1 3 3 3 5 2 2 2 3 5 1 8 0 6 7 7 1 5 9 1 3 1 2 2 3 2 1 3 1 9 0 7 2 9 1 2 4 5 3 2 2 1 3 2 1 2 2 2 1 9 0 7 9 1 1 3 1 4 9 1 3 3 2 1 2 1 3 2 4 2 2 1 4 3 7 1 5 0 11 9 9 5 6 3 1 9 5 7 5 3 1 2 3 1 2 1 7 0 7 5 9 1 3 7 2 1 1 3 3 1 1 1 3 1 5 0 9 3 3 1 5 4 4 2 8 1 1 1 1 2 1 4 4 2 2 5 2 2 3 5 1 9 0 10 2 4 2 1 5 6 2 3 9 6 1 1 1 3 2 1 2 3 3 1 8 0 8 1 7 7 5 7 5 5 9 2 2 1 1 2 1 1 3 1 7 0 9 9 4 4 6 1 5 1 4 1 3 2 1 3 1 2 2 5 2 2 3 3 3 7 1 9 0 10 3 1 9 6 4 7 1 8 8 2 1 2 3 2 2 3 1 2 3 1 6 0 11 9 6 5 3 8 1 8 1 7 5 7 1 2 3 2 1 1 1 8 0 9 3 5 2 1 6 8 9 5 3 3 3 1 2 1 1 3 3 3 3 5 4 3 2 3 2 5 5 5 3 3 6 1 7 0 6 1 8 1 1 8 1 1 2 3 1 1 2 2 1 9 0 10 2 3 6 9 9 7 3 5 1 3 2 2 3 2 2 3 1 2 1 1 8 0 6 9 1 7 1 4 8 1 3 3 2 2 2 1 2 2 2 5 4 1 1 3 4 1 9 0 9 2 2 2 4 9 1 2 8 7 2 3 1 1 3 1 2 1 1 1 8 0 7 4 7 5 4 1 1 7 2 2 1 2 1 1 3 3 1 9 0 10 8 5 1 9 4 5 8 7 2 1 2 2 3 2 2 1 1 3 2 5 3 1 1 3 7 1 6 0 10 8 1 6 8 3 4 6 6 3 7 1 1 3 3 3 1 1 8 0 8 3 1 7 5 1 4 2 2 1 3 1 3 3 3 1 3 1 7 0 9 1 9 8 7 3 3 6 3 6 1 1 1 3 2 3 1 1 3 5 3 2 4 4 3 4 1 8 0 6 8 7 8 4 9 1 1 3 2 1 1 3 3 1 1 8 0 9 8 4 1 9 2 2 7 4 1 3 1 2 3 2 1 2 3 1 8 0 11 2 7 8 5 1 3 1 8 3 7 5 2 3 3 2 3 1 1 3 4 5 5 1 3 7 1 5 0 10 7 8 9 5 9 6 4 3 2 1 3 1 1 3 1 1 7 0 8 4 4 3 5 3 7 9 1 3 1 1 1 1 1 2 1 5 0 8 2 3 5 8 4 8 1 2 2 3 1 3 3 3 3 5 3 2 4 4 6 5 1 5 3 3 5 1 8 0 8 6 1 6 6 6 1 9 7 3 1 3 3 2 2 1 3 1 9 0 9 3 6 3 1 1 1 2 9 2 1 3 2 3 3 1 3 3 3 1 7 0 9 1 2 5 2 1 7 9 9 6 2 3 1 2 2 3 2 4 1 1 1 1 3 4 1 6 0 6 1 6 9 9 2 4 1 2 3 1 1 2 1 5 0 7 1 1 5 2 9 8 9 1 1 1 3 2 1 8 0 9 9 5 1 1 6 9 6 6 9 1 1 2 1 1 3 3 1 2 3 2 2 3 6 1 8 0 6 1 8 4 4 6 9 3 1 3 2 2 1 2 1 1 7 0 7 1 3 5 3 1 7 1 2 3 3 2 2 2 1 1 7 0 8 2 6 8 6 1 1 5 6 2 1 2 1 3 1 2 4 4 3 2 2 3 3 6 1 8 0 10 5 8 3 9 1 9 8 3 5 6 1 1 2 1 1 2 2 2 1 8 0 8 4 1 2 7 1 7 5 9 2 1 1 2 3 2 2 3 1 7 0 8 4 1 8 2 5 6 4 8 3 1 1 1 2 1 3 3 2 3 3 4 5 3 6 1 9 0 6 2 4 1 9 1 2 3 2 2 1 1 3 2 1 1 1 8 0 10 4 2 8 8 5 5 9 5 1 5 2 3 2 3 1 3 2 1 1 6 0 10 7 6 1 2 1 6 1 2 5 3 3 3 3 1 3 1 4 2 1 1 3 3 7 4 1 5 4 3 4 1 5 0 9 8 8 7 5 3 3 4 1 5 2 3 1 3 2 1 8 0 7 8 9 6 6 1 1 1 3 2 3 1 1 1 2 3 1 8 0 8 8 4 1 2 7 1 5 8 3 3 3 1 2 2 2 2 1 5 2 4 3 7 1 6 0 11 3 6 9 1 6 9 5 1 6 4 2 1 2 1 3 3 1 1 8 0 7 1 1 6 4 7 9 7 3 2 1 1 3 1 1 2 1 8 0 6 1 1 3 9 1 9 3 1 3 1 3 2 2 2 3 3 3 1 3 5 1 3 5 1 8 0 8 7 2 6 8 1 1 2 9 1 3 3 3 1 2 3 1 1 7 0 11 9 5 3 3 4 9 8 7 9 4 1 1 1 3 3 2 3 2 1 9 0 9 9 3 1 6 1 6 8 4 1 3 3 3 3 1 2 1 1 2 4 5 1 5 4 3 4 1 7 0 8 1 2 2 4 9 6 1 1 3 1 3 1 2 1 3 1 6 0 7 3 4 5 9 7 1 5 3 2 2 1 1 2 1 9 0 6 5 3 1 4 5 1 1 1 3 1 3 1 1 3 1 1 4 1 2 3 6 1 5 0 6 7 1 6 8 3 1 1 1 3 1 3 1 7 0 9 1 2 2 9 8 7 7 1 9 1 2 3 1 2 3 1 1 8 0 11 7 5 6 5 1 4 4 4 7 1 4 2 3 3 3 1 1 3 2 5 5 3 5 2 3 5 1 7 5 8 8 1 6 2 4 5 3 4 1 9 0 8 3 8 1 3 6 9 4 1 1 2 3 3 1 3 2 3 1 1 7 0 10 8 5 2 1 3 4 7 2 3 5 3 1 3 1 3 1 3 1 8 0 7 2 1 4 3 9 1 6 1 1 3 2 3 2 3 2 3 4 5 4 3 7 1 6 0 6 1 1 7 9 9 5 1 1 1 2 3 3 1 7 0 10 8 7 4 5 6 4 1 1 3 7 1 2 2 3 3 3 3 1 6 0 7 4 3 7 1 3 8 2 3 2 1 1 1 1 2 3 1 4 4 2 1 3 7 1 7 0 6 7 3 6 3 7 1 3 1 1 3 2 2 1 1 8 0 6 4 5 6 9 1 5 3 1 1 1 3 2 1 2 1 6 0 10 7 6 5 6 4 2 3 3 1 6 3 1 2 3 1 3 3 3 4 5 2 2 4 3 5 1 9 0 9 8 1 3 7 4 9 9 1 1 2 1 1 1 1 2 2 1 3 1 6 0 9 3 7 4 2 1 6 8 4 9 1 3 3 3 1 1 1 7 0 6 4 6 8 7 3 1 2 2 3 2 2 1 2 1 4 2 5 4 6 6 2 5 1 5 4 3 4 1 6 0 9 1 2 7 3 3 9 1 6 9 1 2 3 2 1 3 1 5 0 8 3 8 8 9 9 2 5 1 3 1 1 3 1 1 9 0 6 7 4 1 4 1 9 1 3 1 2 1 1 2 1 1 3 1 3 1 3 4 1 9 0 9 4 1 1 4 3 7 6 4 6 3 1 2 1 3 2 1 1 1 1 6 0 7 8 1 6 5 8 3 1 3 2 3 3 2 1 1 6 0 11 2 3 3 6 1 3 7 1 7 7 1 2 3 2 1 1 3 4 3 4 1 3 4 1 5 0 9 1 5 4 7 6 1 1 5 3 3 2 1 1 2 1 6 0 10 6 9 1 5 5 5 9 8 6 3 1 1 3 3 1 1 1 6 0 11 1 9 3 2 3 1 4 9 2 4 4 2 2 1 1 3 3 2 3 3 4 3 6 1 9 0 6 1 9 9 6 6 2 1 3 3 1 3 2 3 3 1 1 6 0 9 7 5 1 1 4 4 9 4 1 3 3 2 1 1 1 1 6 0 7 5 7 1 8 7 3 9 3 1 2 2 2 1 3 1 4 3 3 2 3 5 1 7 0 10 6 1 1 6 1 9 4 9 2 3 1 2 3 3 2 3 3 1 7 0 8 1 6 1 2 4 1 2 8 1 1 1 2 3 1 2 1 7 0 6 2 3 1 4 2 6 3 1 1 1 1 3 1 3 2 3 3 1 7 3 4 3 5 3 3 4 1 9 0 8 1 4 6 6 4 9 1 2 2 2 2 2 2 1 3 3 2 1 6 0 7 6 1 1 5 9 5 7 1 3 3 3 1 1 1 8 0 10 6 1 3 3 1 7 2 8 9 9 1 1 2 3 2 2 3 1 1 3 3 2 3 6 1 7 0 6 8 2 2 7 1 6 2 1 3 2 1 2 3 1 6 0 8 2 5 1 8 1 7 6 6 2 3 1 2 1 2 1 7 0 9 6 3 9 1 7 3 5 2 8 1 3 1 1 1 1 2 4 1 5 3 5 3 3 4 1 6 0 8 3 1 1 9 2 8 2 1 2 3 3 1 2 1 1 7 0 6 1 9 4 4 8 1 3 1 2 1 3 1 1 1 9 0 10 5 2 5 9 4 2 1 8 1 5 3 3 1 3 1 1 3 3 2 2 3 4 5 3 7 1 8 0 11 7 6 3 6 2 1 6 3 5 3 1 3 1 3 3 1 3 3 2 1 9 0 8 5 4 3 4 7 1 4 2 3 3 2 1 3 1 3 1 3 1 8 0 6 1 9 1 5 2 4 1 1 3 1 3 2 2 2 5 5 4 4 4 3 1 3 4 1 8 0 9 3 2 1 6 5 9 6 5 7 2 3 1 2 3 2 3 2 1 5 0 11 7 6 8 6 4 3 1 8 2 1 6 1 1 3 1 1 1 5 0 9 3 1 8 3 9 4 8 8 9 2 3 2 2 1 5 1 4 1 3 5 2 5 3 3 5 1 5 0 9 7 8 2 2 2 2 5 1 5 1 3 1 2 1 1 5 0 7 1 4 2 8 1 6 1 1 3 1 3 2 1 5 0 8 2 7 2 9 1 6 1 8 3 3 1 2 2 3 5 1 3 4 3 5 1 6 0 6 9 7 1 2 3 8 2 2 2 3 1 1 1 6 0 8 1 4 8 8 9 8 6 2 1 3 1 1 2 1 1 9 0 11 7 2 1 1 7 6 3 2 6 7 2 1 1 1 1 3 2 3 3 2 1 4 3 4 4 3 6 1 5 0 10 2 9 1 1 7 1 3 9 2 6 1 3 1 3 2 1 7 0 6 1 7 8 2 8 2 2 1 1 3 3 2 1 1 9 0 10 8 5 7 3 1 2 7 1 6 1 1 2 2 3 1 2 1 1 3 4 2 5 3 4 4 3 7 1 5 0 11 1 8 2 3 7 8 2 1 3 7 4 1 2 2 1 1 1 9 0 9 6 2 7 6 9 3 6 2 1 2 1 2 2 2 1 1 1 1 1 7 0 7 3 9 8 1 4 1 6 3 1 2 2 2 1 3 2 1 2 5 4 1 3 3 6 1 8 0 11 4 6 2 5 2 5 5 5 1 3 1 3 1 1 3 1 1 2 1 1 9 0 8 2 5 7 9 1 3 5 1 1 2 1 2 1 1 1 2 3 1 6 0 11 7 1 3 2 8 9 7 8 5 1 1 2 3 3 1 2 2 3 5 3 1 3 2 1 4 4 5 4 3 4 1 9 0 7 4 9 7 2 7 1 8 3 3 3 1 2 1 1 1 3 1 5 0 7 8 1 2 8 5 3 7 1 2 3 1 2 1 5 0 6 1 5 7 6 1 8 2 3 3 2 1 3 2 4 2 3 4 1 9 0 7 1 5 4 7 8 1 3 3 1 1 3 1 3 2 1 1 1 7 0 11 6 6 3 2 2 3 1 3 9 6 3 1 1 1 2 3 2 2 1 9 0 6 1 1 3 3 4 3 2 3 1 1 1 1 1 1 3 3 3 3 3 3 7 1 5 0 9 9 1 5 5 4 8 2 5 4 1 1 2 2 2 1 7 0 9 5 1 6 8 5 3 7 4 1 1 2 1 3 2 1 2 1 9 0 8 7 8 3 7 5 4 1 5 2 3 2 1 1 1 1 1 3 5 3 1 2 1 3 1 3 4 1 9 0 6 1 6 5 6 8 4 3 3 1 1 3 2 2 1 1 1 9 0 7 9 5 3 1 5 2 1 3 2 3 2 1 1 3 1 3 1 5 0 9 3 1 8 1 4 4 5 9 6 1 2 1 1 2 1 2 1 1 3 7 1 5 0 11 7 4 4 6 1 7 6 1 1 6 2 2 1 1 3 2 1 9 0 6 1 9 9 1 3 6 3 1 1 2 1 1 1 2 1 1 8 0 7 8 7 2 2 1 6 3 2 3 1 1 2 2 3 1 4 5 5 1 4 5 2 3 4 1 5 4 5 3 4 1 6 0 10 6 9 8 8 5 5 8 1 4 7 2 1 1 1 2 3 1 8 0 7 6 3 2 4 7 4 1 1 3 2 1 3 3 2 3 1 9 0 11 6 9 3 7 8 6 5 6 4 1 7 2 2 2 1 1 1 2 1 3 3 3 3 3 3 6 1 5 0 7 3 8 6 2 7 1 9 1 1 1 2 1 1 6 0 8 8 9 7 1 1 7 2 6 1 1 2 3 1 3 1 8 0 8 1 6 9 2 6 6 3 6 3 1 3 2 1 3 2 1 3 4 1 4 2 1 3 5 1 9 0 6 2 6 7 3 1 2 2 2 1 2 3 2 1 2 3 1 9 0 7 7 5 7 6 1 8 1 1 1 2 1 1 3 3 3 2 1 9 0 7 6 8 4 1 2 1 3 3 3 3 3 1 2 3 1 2 2 1 5 2 3 3 6 1 8 0 7 1 1 5 7 9 1 3 3 1 3 3 1 1 2 1 1 7 0 11 5 9 1 3 5 8 5 8 2 2 8 3 2 3 1 2 1 3 1 5 0 9 6 9 4 2 1 1 3 6 2 1 3 3 1 1 3 3 4 3 5 5 2 3 6 1 1 2 8 7 3 5 3 3 6 1 6 0 6 1 1 1 8 7 6 1 2 3 3 1 3 1 8 0 9 1 3 7 5 6 7 5 1 6 3 3 1 1 1 1 3 2 1 7 0 7 2 1 8 9 3 8 1 3 2 1 3 2 2 1 2 2 2 1 3 4 3 7 1 5 0 9 2 2 9 6 7 9 7 1 7 3 2 1 1 1 1 8 0 7 7 6 8 1 2 6 8 3 3 1 1 3 2 2 1 1 9 0 9 1 1 7 1 3 2 5 5 5 3 1 1 2 1 3 2 1 3 5 4 1 5 3 1 1 3 7 1 9 0 7 2 1 1 7 5 5 3 1 3 1 3 1 2 1 3 3 1 7 0 10 2 3 7 7 3 6 2 3 1 7 3 2 3 1 2 2 3 1 9 0 8 9 7 7 3 9 3 1 4 3 1 1 1 1 3 3 1 1 3 4 1 1 3 4 3 3 5 1 9 0 9 1 2 3 9 6 3 7 6 1 1 1 2 1 1 3 2 3 1 1 9 0 6 1 9 1 4 3 3 2 1 1 3 3 1 3 1 3 1 8 0 11 3 3 1 3 6 7 1 8 6 4 3 3 3 1 2 1 1 1 1 1 5 4 1 1 3 5 1 8 0 8 4 8 1 6 3 1 6 3 3 2 2 3 1 3 3 3 1 5 0 10 1 1 8 1 1 7 1 5 4 6 3 3 1 1 3 1 6 0 7 1 9 5 1 3 2 6 1 3 3 2 2 1 3 4 1 2 4 2 3 2 5 3 3 6 1 6 0 10 3 7 9 5 6 1 7 2 3 1 2 2 3 1 1 2 1 7 0 7 1 7 5 6 2 6 7 1 1 1 2 1 1 2 1 9 0 11 3 6 7 9 8 8 8 7 3 1 3 3 1 2 1 1 1 3 2 3 3 3 3 1 4 3 3 7 1 5 0 7 8 3 6 1 3 6 4 2 1 2 1 3 1 6 0 10 7 4 6 9 1 6 5 5 2 8 1 1 1 1 2 2 1 8 0 6 2 6 8 7 1 2 3 2 2 1 3 1 1 2 2 2 2 5 3 1 4 3 4 1 5 0 6 2 1 7 4 4 5 3 2 1 3 1 1 8 0 10 4 4 5 1 1 7 2 2 8 6 2 1 3 3 1 2 1 1 1 6 0 6 6 6 1 3 6 3 2 1 2 1 1 1 1 4 1 2 3 6 1 5 0 7 1 8 5 2 7 3 4 1 1 2 2 2 1 6 0 8 7 8 1 7 7 4 1 1 2 3 3 2 3 1 1 6 0 8 8 1 1 4 8 4 4 4 1 3 2 3 1 1 4 3 5 2 1 2 3 5 1 8 0 6 1 3 8 5 2 1 2 1 1 2 2 1 2 1 1 7 0 10 9 6 9 8 4 8 1 2 2 4 1 1 1 1 2 2 1 1 5 0 7 1 7 3 9 6 1 3 2 1 2 2 2 5 3 5 1 1 3 7 4 5 4 3 5 1 5 0 6 5 1 5 2 4 6 1 3 1 2 3 1 7 0 7 1 8 4 1 5 1 3 3 1 2 1 1 1 1 1 5 0 9 5 1 1 4 8 1 4 6 8 2 2 2 3 1 4 2 2 2 4 3 4 1 6 0 10 8 2 9 4 6 2 1 7 9 3 2 2 1 2 2 2 1 5 0 7 1 4 9 4 7 9 6 1 1 2 2 3 1 6 0 10 1 1 3 5 6 2 4 5 4 3 3 1 3 1 1 1 5 3 5 3 3 4 1 5 0 7 1 1 5 3 4 7 9 1 2 1 3 1 1 6 0 10 7 6 7 8 2 2 5 8 3 1 2 2 1 1 3 3 1 8 0 11 2 1 3 8 9 1 5 4 7 3 4 1 1 3 1 2 2 3 2 1 1 4 2 3 6 1 9 0 8 2 9 1 1 7 4 8 7 1 3 2 1 2 3 2 1 2 1 8 0 10 1 7 3 6 1 6 1 9 3 3 2 3 1 1 2 2 1 2 1 6 0 9 2 4 2 1 6 6 8 4 1 2 1 3 1 1 1 2 1 3 2 4 2 3 7 1 7 0 11 7 7 9 6 3 3 4 5 5 1 5 1 2 1 3 3 1 1 1 6 0 8 6 6 7 2 9 1 6 5 2 3 2 2 2 1 1 5 0 6 3 1 1 2 4 2 1 2 2 1 2 3 3 4 2 5 5 2 4 2 4 3 5 5 3 7 1 7 0 6 1 9 3 8 7 1 3 3 3 2 3 1 2 1 5 0 9 3 7 1 6 1 2 7 4 3 3 1 1 1 3 1 5 0 11 1 8 9 9 9 6 1 8 6 8 3 3 1 1 1 1 2 3 5 2 2 1 4 3 5 1 5 0 8 8 3 5 4 1 1 9 5 1 3 1 3 1 1 8 0 7 1 7 5 1 6 4 8 2 1 3 2 1 1 3 2 1 9 0 11 9 3 1 4 9 8 6 9 3 8 8 3 3 3 3 2 1 1 1 2 3 2 3 2 1 3 4 1 5 0 8 1 7 5 3 9 3 3 9 2 1 2 2 1 1 5 0 7 3 1 9 3 9 3 6 3 3 3 2 1 1 5 0 9 5 6 4 8 3 1 1 7 6 3 1 3 3 1 3 5 5 3 3 4 1 8 0 8 1 3 1 6 1 5 9 8 3 3 1 1 2 3 1 1 1 8 0 8 1 7 8 1 9 6 9 6 1 1 2 1 1 2 2 3 1 6 0 7 4 8 2 4 7 7 1 1 2 1 1 2 1 2 3 3 5 3 7 1 5 0 10 9 2 9 7 1 2 1 1 4 2 3 1 2 1 1 1 8 0 10 4 1 1 2 1 5 7 3 7 5 2 1 1 2 1 2 2 1 1 7 0 7 4 4 5 1 4 2 1 1 2 1 3 3 3 3 1 1 1 2 2 1 4 1 3 6 1 6 5 4 3 7 1 7 0 6 7 3 3 5 8 1 1 1 2 2 3 3 1 1 5 0 8 8 1 8 8 4 9 1 1 2 3 1 3 3 1 5 0 7 8 8 8 1 5 5 1 3 1 2 1 1 1 4 3 1 5 5 3 3 5 1 5 0 10 3 9 5 9 5 9 8 3 1 2 1 1 1 1 1 1 9 0 7 6 2 1 3 3 7 2 2 2 2 3 1 2 3 1 2 1 5 0 9 3 7 3 7 1 9 7 3 7 3 2 2 1 2 2 1 4 1 5 3 7 1 5 0 7 1 8 6 6 9 5 5 2 3 2 1 1 1 8 0 9 5 3 2 1 5 3 7 3 9 3 2 3 3 1 2 1 3 1 6 0 10 1 6 5 8 9 5 3 1 2 6 1 2 3 2 1 1 4 5 3 4 3 2 3 3 5 1 5 0 11 7 5 2 1 4 7 4 9 4 3 6 1 1 2 1 2 1 7 0 8 6 8 6 6 1 3 3 1 1 1 1 2 3 1 3 1 8 0 7 3 1 9 4 8 7 4 1 1 3 1 3 3 2 1 2 4 3 4 1 3 6 1 6 0 8 9 1 3 7 2 1 1 1 2 3 1 2 2 1 1 6 0 8 3 5 4 6 6 3 7 1 1 1 1 2 2 1 1 7 0 10 3 6 4 1 1 7 1 6 1 8 1 2 2 2 1 1 1 2 2 3 3 3 3 1 7 2 5 5 5 3 4 1 6 0 9 1 7 1 1 8 6 2 5 1 1 1 2 1 1 1 1 5 0 11 9 2 1 2 7 5 5 8 6 1 7 1 3 1 1 2 1 7 0 7 4 7 8 4 7 1 8 3 3 3 2 2 1 1 1 3 1 2 3 6 1 7 0 9 7 5 1 2 7 9 8 3 7 3 3 1 3 1 1 1 1 6 0 9 6 6 1 3 9 3 8 4 7 1 1 1 1 3 2 1 6 0 7 8 5 6 6 1 5 5 1 2 3 1 3 1 1 2 3 3 5 5 3 6 1 5 0 6 3 4 1 1 7 9 3 2 2 2 1 1 9 0 11 7 1 2 6 7 2 8 5 4 5 7 2 2 3 1 1 2 2 3 1 1 6 0 9 6 6 2 9 5 7 2 1 6 1 1 2 3 3 3 4 2 3 1 2 2 3 7 1 7 0 11 2 9 8 1 1 7 7 4 6 7 5 3 1 2 1 2 3 3 1 6 0 7 9 2 1 3 2 7 8 3 3 2 2 1 1 1 5 0 10 5 5 3 1 8 5 2 2 3 6 1 2 1 2 2 1 4 2 3 2 2 2 3 4 1 5 0 7 1 3 7 2 9 2 9 1 3 3 2 1 1 9 0 7 5 1 4 4 3 3 1 1 1 1 2 1 2 3 1 2 1 8 0 11 3 6 1 3 3 2 8 6 2 6 7 3 1 1 1 2 1 1 3 5 3 5 3 3 3 4 7 4 5 5 3 5 1 6 0 8 3 2 8 1 9 6 1 9 3 1 1 2 2 1 1 9 0 8 1 9 4 6 1 9 9 8 1 3 2 3 1 2 2 3 3 1 8 0 9 5 3 1 9 6 6 7 7 4 1 1 1 1 2 3 1 1 1 1 1 5 4 3 6 1 9 0 11 1 7 4 2 7 4 8 9 3 5 4 1 1 3 3 1 1 2 1 3 1 7 0 9 1 2 2 7 5 5 9 5 3 2 2 3 1 3 3 3 1 8 0 6 1 6 1 2 4 1 3 1 1 2 1 3 1 1 2 2 3 2 3 4 3 7 1 7 0 8 5 9 7 1 5 1 7 7 2 1 1 1 2 1 1 1 9 0 8 3 4 9 3 6 1 2 3 3 2 2 1 2 3 2 1 1 1 8 0 6 2 4 5 5 7 1 3 2 3 1 2 2 2 2 1 1 5 5 3 4 1 3 7 1 8 0 9 1 6 3 9 4 1 9 4 8 2 3 2 3 2 1 1 1 1 9 0 10 4 1 4 5 2 6 1 6 2 2 1 3 3 1 3 2 3 2 2 1 5 0 6 1 9 9 6 5 1 3 1 2 1 1 1 1 2 4 3 3 4 3 7 1 9 0 7 5 5 5 5 1 3 3 3 2 1 3 2 1 2 3 1 1 7 0 6 6 9 7 9 1 5 1 2 3 1 1 3 1 1 9 0 11 5 3 7 6 7 4 8 1 1 8 3 2 1 2 3 2 1 3 1 1 2 3 3 1 4 4 2 4 1 7 5 3 9 7 8 7 2 5 4 3 7 1 6 0 8 9 1 1 7 4 1 1 2 3 2 1 3 2 2 1 8 0 7 8 4 5 4 4 1 2 1 2 2 1 3 3 2 1 1 6 0 10 7 8 4 1 1 7 5 9 5 2 1 1 1 3 1 1 1 2 2 1 5 4 4 3 5 1 8 0 10 3 1 2 1 8 1 5 4 2 7 2 1 3 2 3 2 1 3 1 8 0 10 4 1 8 6 8 6 4 2 5 1 1 2 2 3 2 2 1 1 1 5 0 9 1 5 8 4 1 7 6 7 1 1 1 2 2 2 4 1 3 3 1 3 7 1 8 0 8 1 6 3 2 6 7 2 7 2 2 3 3 1 1 2 1 1 7 0 9 7 1 3 4 5 8 9 1 6 3 1 2 2 2 1 2 1 5 0 7 8 1 8 4 2 5 6 3 1 3 2 2 2 5 3 1 4 2 1 3 5 1 8 0 10 1 1 5 7 3 7 5 1 3 7 1 2 3 1 3 1 2 1 1 8 0 9 3 1 2 1 1 7 8 1 6 3 3 2 1 2 1 1 1 1 5 0 11 5 4 1 5 2 1 6 2 2 6 9 3 3 3 2 1 4 1 1 3 2 3 4 1 7 0 7 5 9 1 2 7 3 9 1 2 3 2 3 2 3 1 5 0 7 4 7 5 8 1 5 3 2 3 3 1 1 1 6 0 9 2 2 8 5 3 1 2 1 6 3 2 2 1 1 3 4 1 3 5 5 1 4 3 4 4 3 5 1 8 0 10 9 5 8 8 3 3 3 1 8 1 2 3 2 1 2 1 3 2 1 6 0 11 4 9 1 2 8 6 7 7 9 6 4 2 1 1 1 3 2 1 6 0 8 2 3 1 3 6 4 8 8 2 1 3 2 3 1 1 2 4 3 2 3 4 1 9 0 10 5 6 5 8 4 1 5 8 1 5 1 3 1 2 1 1 1 2 1 1 8 0 7 6 2 8 3 9 6 1 2 1 1 3 2 3 2 2 1 7 0 6 9 9 2 5 6 1 1 2 3 1 2 3 2 1 5 4 2 3 5 1 6 0 6 1 4 4 1 9 1 1 1 2 1 3 2 1 5 0 10 9 9 4 1 6 5 3 8 3 9 3 1 3 3 1 1 8 0 9 6 8 1 3 8 6 1 4 5 3 1 2 3 3 1 3 2 3 5 2 4 3 3 6 1 7 0 6 8 1 2 4 5 9 1 3 2 3 3 2 1 1 6 0 6 6 1 8 7 5 1 2 3 1 2 1 1 1 5 0 8 9 1 7 5 3 9 5 5 2 1 2 2 1 1 2 2 2 4 1 4 1 6 5 4 3 3 5 1 9 0 10 3 6 1 2 9 6 8 2 9 5 1 2 1 1 3 3 2 1 3 1 9 0 9 6 3 4 7 5 1 6 4 9 1 2 2 1 3 1 1 2 1 1 8 0 8 7 2 6 6 1 3 8 1 1 3 3 1 1 1 1 1 2 3 1 2 5 3 5 1 7 0 10 8 8 8 1 8 5 4 6 1 3 2 2 2 3 1 3 1 1 8 0 10 1 2 1 8 7 3 2 2 6 3 1 3 2 2 3 3 1 1 1 5 0 11 1 9 6 7 1 8 8 8 2 6 6 2 2 2 1 2 4 3 2 1 4 3 6 1 7 0 10 3 6 1 7 9 3 3 1 8 9 3 3 2 3 2 1 3 1 9 0 7 2 2 2 4 5 9 1 2 2 2 2 2 1 1 3 2 1 7 0 7 1 1 3 9 5 3 4 1 1 1 2 1 3 1 3 2 3 1 4 3 3 7 1 6 0 10 6 7 4 3 1 1 8 4 3 6 2 1 1 3 1 3 1 7 0 6 1 1 4 2 8 3 1 2 1 1 1 2 2 1 9 0 10 6 9 1 8 5 5 4 8 5 1 2 3 3 2 1 2 1 3 3 4 2 2 5 3 3 1 4 2 3 5 5 3 6 1 7 0 9 9 9 8 1 7 5 1 3 3 2 3 2 1 3 1 1 1 7 0 7 4 1 9 9 3 1 8 1 1 3 1 2 1 1 1 9 0 9 9 9 8 5 2 7 2 5 1 2 1 1 1 2 2 3 1 3 1 4 1 2 3 5 3 4 1 7 0 6 7 4 4 3 6 1 1 3 2 1 1 2 3 1 6 0 6 3 1 9 5 5 5 3 3 1 1 2 1 1 9 0 8 8 8 4 5 4 1 5 7 1 3 2 3 1 3 2 2 2 1 4 3 5 3 6 1 9 0 10 7 7 2 9 5 1 4 2 1 4 3 2 3 3 2 1 2 3 1 1 9 0 8 1 6 4 7 1 4 9 1 1 3 2 3 3 2 2 2 3 1 6 0 9 9 8 6 6 6 1 6 4 9 3 2 1 3 3 1 1 2 4 1 3 4 3 5 1 6 0 10 3 1 7 3 9 7 5 6 7 8 2 1 1 1 2 2 1 5 0 8 1 9 1 4 8 1 2 5 1 2 1 3 2 1 7 0 9 4 6 9 6 1 6 8 5 6 1 3 1 1 1 1 2 3 2 1 3 1 3 5 1 7 0 6 9 8 8 1 3 5 1 2 1 1 3 2 3 1 9 0 8 4 8 7 9 3 7 1 7 2 2 1 3 1 1 2 3 2 1 9 0 7 3 2 8 1 8 3 2 3 3 1 1 3 1 1 1 1 1 2 3 3 4 5 5 5 2 2 5 3 3 5 1 7 0 8 1 1 1 5 1 8 5 3 3 2 1 2 1 2 2 1 7 0 9 5 1 8 1 5 4 8 6 5 1 1 2 3 1 2 3 1 6 0 10 1 9 8 4 5 7 1 7 5 1 3 1 2 2 1 1 2 2 1 2 5 3 5 1 6 0 9 8 3 3 1 2 5 1 3 6 1 2 2 3 1 2 1 6 0 8 5 2 5 1 4 4 4 1 3 1 2 2 1 1 1 5 0 10 6 3 3 1 3 7 5 3 8 8 1 3 2 2 1 1 3 4 2 5 3 6 1 9 0 8 6 8 1 4 8 1 6 8 1 3 2 3 1 3 3 1 3 1 7 0 7 7 1 1 1 3 4 9 2 1 3 2 2 1 2 1 8 0 8 3 6 2 8 5 1 6 1 2 2 2 3 1 1 2 1 4 1 1 3 1 3 3 6 1 8 0 10 3 2 9 1 3 1 6 8 4 3 1 1 2 1 2 2 2 2 1 8 0 10 4 1 3 7 4 4 2 3 6 1 1 1 3 1 2 1 3 1 1 5 0 8 8 9 1 3 1 6 5 2 2 1 1 2 3 2 5 2 2 3 1 3 6 1 7 0 6 6 6 1 1 2 3 2 1 3 1 2 2 3 1 5 0 11 9 3 2 7 4 7 6 3 1 6 6 3 3 1 2 1 1 8 0 11 9 1 5 8 7 1 2 1 1 9 2 1 2 1 2 2 1 1 1 2 4 3 5 2 3 3 2 1 5 3 3 4 1 9 0 6 8 8 5 6 1 2 2 3 3 1 2 2 2 2 1 1 7 0 6 9 7 9 1 3 9 3 3 1 1 2 1 2 1 5 0 6 2 5 1 5 9 5 1 2 1 2 1 3 5 5 2 3 7 1 7 0 7 2 2 2 1 3 5 1 1 3 1 2 2 3 3 1 9 0 10 4 1 3 9 5 4 4 1 5 1 3 2 2 3 2 1 1 2 3 1 8 0 11 2 9 6 8 3 6 1 1 1 4 4 3 1 3 1 3 1 2 3 2 1 4 5 4 4 1 3 6 1 7 0 8 1 3 6 4 1 5 7 7 1 2 1 3 3 1 2 1 5 0 10 9 1 4 1 3 3 8 4 5 6 3 2 1 1 2 1 9 0 9 2 6 9 1 5 9 6 4 4 3 1 1 1 2 2 2 2 3 2 2 1 2 5 1 3 7 1 6 0 8 9 1 4 4 1 2 6 8 1 1 1 3 3 3 1 5 0 8 1 6 7 1 4 4 8 3 2 2 3 3 1 1 6 0 10 1 4 8 7 1 2 9 8 9 7 1 2 2 3 1 3 5 5 2 4 2 2 3 3 4 1 5 0 8 1 5 8 2 7 9 8 1 3 3 3 1 1 1 5 0 9 5 1 2 4 6 8 2 4 1 3 3 3 1 1 1 7 0 7 7 4 9 4 1 7 1 3 1 3 3 3 3 1 5 5 2 1 3 1 4 5 5 3 4 1 8 0 10 7 1 9 2 7 1 6 9 6 8 1 1 2 3 3 2 3 1 1 7 0 7 3 1 9 8 1 4 2 1 3 3 2 2 3 2 1 7 0 10 5 6 5 7 8 1 6 6 8 4 2 1 1 3 2 3 3 2 2 5 3 3 6 1 9 0 9 7 9 4 5 1 1 5 7 2 1 1 1 2 3 3 1 1 1 1 6 0 9 9 2 5 3 7 1 1 8 3 1 1 3 3 3 1 1 6 0 9 5 2 7 2 1 8 1 8 1 1 1 1 2 1 3 3 5 1 1 2 4 3 4 1 8 0 10 3 6 3 8 4 5 1 6 8 2 1 1 1 2 1 2 1 2 1 7 0 7 1 5 6 1 4 5 9 1 3 2 2 1 3 1 1 8 0 8 9 2 9 9 6 8 1 1 3 3 3 2 1 1 1 3 1 4 3 4 3 4 1 6 0 10 3 9 2 3 9 1 1 4 2 1 2 2 1 1 3 3 1 7 0 10 1 5 1 7 2 1 2 2 8 3 1 1 1 1 2 1 3 1 8 0 6 9 8 1 3 4 6 1 1 3 2 3 2 2 3 3 5 5 4 3 6 1 5 0 11 1 8 8 4 9 1 3 4 3 7 5 2 1 1 2 3 1 8 0 7 1 3 5 6 7 6 4 1 1 1 3 2 1 1 1 1 7 0 11 3 3 7 3 7 7 8 3 3 5 1 3 3 1 3 3 2 2 2 5 5 4 2 5 6 1 6 5 3 4 5 6 3 5 3 3 6 1 6 0 8 1 1 3 4 2 1 1 7 3 1 1 3 1 1 1 8 0 8 4 1 1 9 2 9 9 4 1 1 3 1 1 3 3 1 1 5 0 10 1 2 9 3 8 5 9 3 4 8 3 2 3 1 2 3 5 2 5 3 4 3 5 1 9 0 6 2 3 7 1 6 7 2 1 2 3 2 2 2 3 1 1 6 0 9 8 1 8 9 5 7 4 1 4 2 1 1 3 1 2 1 6 0 9 6 8 6 1 5 2 1 3 6 1 3 1 2 1 1 3 3 3 2 5 3 5 1 9 0 7 6 3 3 3 1 3 3 1 3 1 1 2 1 2 2 2 1 9 0 10 3 6 8 7 4 4 9 1 1 3 3 2 2 3 2 1 2 1 1 1 6 0 6 1 8 4 3 8 8 1 2 1 3 3 3 3 3 2 4 1 3 6 1 8 0 11 8 9 6 2 1 1 1 9 8 2 5 2 1 3 2 1 1 1 1 1 9 0 10 9 5 8 1 1 4 4 1 7 7 2 3 1 1 2 2 3 2 3 1 6 0 11 1 5 8 9 5 7 6 8 6 1 6 1 1 1 1 2 3 4 1 1 4 2 3 3 4 1 9 0 9 4 1 9 6 6 9 8 1 2 2 3 1 2 1 3 2 2 1 1 6 0 9 3 7 1 2 2 5 4 2 2 1 2 2 1 3 2 1 7 0 9 5 5 1 6 1 5 1 6 6 2 3 1 1 1 1 1 1 5 4 5 3 4 5 4 4 3 5 1 7 0 7 5 6 5 7 1 4 9 3 3 1 3 1 1 3 1 5 0 9 1 1 9 9 2 9 9 5 9 2 1 3 1 1 1 8 0 8 8 1 4 6 4 7 8 4 1 3 3 1 3 2 3 3 3 3 5 1 4 3 7 1 9 0 7 6 8 2 1 8 3 9 3 1 3 3 2 3 1 1 3 1 7 0 8 1 5 9 4 2 7 2 9 1 1 1 1 2 1 1 1 5 0 11 8 5 1 4 2 6 1 1 4 9 4 1 1 1 2 1 3 2 5 3 1 4 4 3 4 1 7 0 11 9 5 7 1 8 1 2 7 9 7 5 1 1 2 3 2 3 1 1 6 0 10 2 1 9 3 8 3 1 5 4 5 3 2 1 3 1 1 1 9 0 10 3 5 8 9 4 3 1 6 3 3 3 3 2 3 1 2 3 3 2 3 1 1 4 3 7 1 9 0 8 1 1 8 5 2 6 8 7 2 3 3 2 1 1 1 1 3 1 6 0 7 7 5 8 3 1 1 1 1 2 1 3 1 1 1 6 0 7 1 8 3 8 2 5 5 3 2 2 2 3 1 3 2 5 3 3 5 2 2 6 4 5 5 5 3 6 1 9 0 10 8 9 6 9 9 6 1 1 7 3 3 2 2 1 1 3 1 2 1 1 6 0 11 1 4 7 8 9 5 4 2 1 6 1 1 2 1 1 3 3 1 8 0 8 8 1 7 6 7 5 7 9 2 2 3 2 1 3 3 3 1 3 5 2 1 3 3 5 1 5 0 9 3 7 2 1 2 7 5 1 1 3 2 2 1 1 1 8 0 6 7 1 6 9 1 8 3 2 3 2 2 1 1 1 1 7 0 9 7 2 9 4 1 8 1 1 1 2 1 2 3 1 1 3 2 1 4 4 3 3 4 1 7 0 7 9 7 1 6 2 6 1 2 3 1 1 2 1 2 1 9 0 8 9 9 3 3 5 3 1 1 2 1 1 1 2 1 3 1 3 1 5 0 6 1 1 6 6 2 5 1 2 3 3 1 4 2 3 5 3 4 1 5 0 10 2 6 1 4 1 7 4 2 3 2 1 2 2 3 2 1 7 0 11 1 3 5 1 3 3 7 1 5 1 5 2 1 3 2 1 2 1 1 8 0 8 4 1 8 2 8 4 3 1 2 3 1 2 2 1 2 2 2 2 1 3 3 4 1 8 0 8 5 6 9 5 7 4 1 4 1 3 3 2 2 3 2 1 1 5 0 10 4 5 5 2 7 6 3 1 9 5 1 2 2 2 1 1 8 0 7 2 9 5 1 2 5 6 3 1 1 3 1 1 1 3 2 3 1 4 2 2 4 2 3 5 3 3 4 1 6 0 11 1 8 7 7 1 6 6 5 3 1 2 1 2 3 3 1 1 1 5 0 9 5 1 1 8 1 9 3 3 6 3 1 1 2 3 1 5 0 11 9 5 6 8 6 2 1 8 7 4 1 1 3 2 1 1 2 4 1 1 3 6 1 9 0 6 9 3 3 4 1 7 1 3 2 1 1 1 2 3 1 1 6 0 10 1 3 8 2 8 5 4 8 2 8 1 2 3 2 3 2 1 5 0 7 7 4 4 7 1 7 8 1 3 3 1 3 2 4 1 3 2 3 3 6 1 5 0 9 4 5 7 7 3 2 2 1 5 1 3 3 3 1 1 6 0 11 3 5 1 5 4 9 9 4 2 9 7 3 3 1 1 3 2 1 7 0 10 9 7 8 1 9 3 2 2 9 6 2 3 1 2 2 1 3 3 3 3 1 2 1 3 7 1 6 0 7 7 6 4 7 8 5 1 2 3 1 2 3 1 1 9 0 7 7 4 1 5 5 7 8 3 1 1 1 3 3 1 2 2 1 8 0 6 3 1 8 2 4 3 1 2 3 1 1 2 2 2 5 4 1 2 4 1 1 3 6 1 5 0 6 3 7 1 6 4 6 2 3 1 1 1 1 8 0 10 1 8 3 1 5 1 4 1 3 6 1 2 1 2 2 1 2 1 1 5 0 11 8 5 2 3 4 4 4 5 1 1 8 3 1 3 3 2 3 1 2 1 2 1 4 2 1 5 3 3 4 1 7 0 9 1 1 9 6 3 9 2 5 5 3 3 1 2 2 1 3 1 8 0 9 6 9 8 4 8 1 6 2 4 1 1 1 2 1 1 2 3 1 7 0 9 6 8 4 4 1 1 3 1 2 1 3 2 2 3 1 3 3 5 1 2 3 6 1 9 0 7 7 5 1 9 9 3 6 3 1 3 2 1 2 3 1 1 1 6 0 6 7 1 6 9 2 3 2 3 2 3 3 1 1 6 0 8 3 6 5 9 1 7 9 7 2 1 3 2 1 1 3 5 1 3 1 3 3 4 1 5 0 8 1 2 9 1 9 7 7 5 3 3 2 1 1 1 5 0 11 5 5 8 3 1 7 5 8 4 1 1 1 1 3 3 2 1 7 0 10 8 3 2 1 7 2 8 7 9 7 1 2 1 3 3 1 3 1 2 2 1 3 6 1 6 0 10 2 8 7 5 1 7 1 8 4 1 3 1 1 2 2 2 1 6 0 9 8 9 8 1 9 1 1 1 3 2 1 2 2 1 1 1 5 0 8 1 5 1 5 8 6 4 6 3 3 2 1 2 4 2 3 2 2 2 3 4 1 8 0 6 4 4 6 5 1 9 2 1 2 1 3 1 2 1 1 8 0 10 2 1 1 8 1 3 2 1 2 1 2 1 3 3 3 1 2 2 1 6 0 8 2 4 1 1 3 4 7 1 2 1 3 1 1 1 1 1 3 3 3 5 2 4 3 3 7 1 6 0 10 1 2 4 5 3 5 9 7 8 1 1 1 3 1 3 2 1 5 0 8 7 1 4 1 2 7 4 1 3 1 3 3 2 1 9 0 11 9 9 7 4 3 4 4 9 1 2 3 1 2 1 3 1 2 1 3 1 2 3 4 3 2 2 1 3 6 1 9 0 10 3 4 6 5 8 1 1 9 2 2 3 3 2 2 2 2 1 2 3 1 5 0 9 4 1 3 9 9 5 5 1 1 1 3 2 1 3 1 9 0 9 1 6 2 6 9 2 1 9 9 1 1 1 3 3 1 1 2 1 3 3 1 1 1 3 3 6 1 5 0 11 2 7 7 3 1 1 3 8 1 9 6 1 1 1 1 3 1 9 0 8 7 3 1 7 9 5 1 8 2 1 1 1 1 2 2 3 3 1 9 0 11 9 1 7 1 8 1 1 3 4 6 3 2 1 2 2 3 2 3 1 1 3 5 4 4 5 5 3 4 1 7 0 6 9 2 6 1 1 1 3 3 3 1 3 1 1 1 6 0 11 9 2 2 1 2 5 7 7 4 5 7 1 3 3 1 1 2 1 6 0 7 6 1 9 9 1 3 5 2 1 1 1 3 2 4 4 3 1 1 2 1 8 7 5 7 2 4 5 3 6 1 7 0 8 1 6 7 2 5 2 1 1 2 2 2 1 2 1 2 1 9 0 9 9 4 3 4 5 9 1 2 8 3 1 1 2 2 1 3 1 1 1 7 0 7 6 4 8 2 1 4 8 3 3 1 1 2 2 2 5 2 5 4 1 3 3 7 1 8 0 9 8 7 3 3 6 1 5 1 9 3 3 3 1 3 2 1 3 1 6 0 11 4 7 4 3 8 7 1 7 1 2 8 1 1 3 2 1 3 1 5 0 8 9 1 1 8 7 2 2 1 1 1 1 1 2 4 5 1 5 3 5 3 3 4 1 5 0 6 8 7 2 1 1 1 3 1 2 3 2 1 5 0 6 9 5 1 5 7 3 2 2 1 1 3 1 5 0 6 9 4 1 3 1 5 1 2 1 3 1 3 4 2 3 3 7 1 6 0 9 9 8 3 1 7 6 8 7 8 3 3 2 1 1 1 1 7 0 10 2 7 5 2 8 7 6 1 3 2 2 1 3 1 1 1 2 1 6 0 7 1 1 8 9 2 7 2 2 3 1 1 3 2 5 5 5 3 4 2 4 4 2 2 3 1 5 4 3 6 1 9 0 8 7 5 1 9 3 4 7 6 3 2 1 2 1 1 3 2 2 1 5 0 6 9 8 7 3 8 1 1 1 3 1 2 1 9 0 10 8 5 5 3 1 3 5 4 1 7 2 1 2 3 1 1 1 2 1 4 1 1 1 5 2 3 6 1 6 0 6 9 9 1 2 4 1 1 1 1 2 2 3 1 5 0 6 8 2 4 5 6 1 2 1 1 1 2 1 9 0 7 4 1 2 2 2 4 5 2 2 1 3 3 2 2 2 1 2 1 2 5 1 1 3 5 1 7 0 11 5 3 1 7 1 8 8 8 4 9 9 3 3 1 1 3 1 3 1 5 0 10 6 5 1 3 8 8 7 2 1 5 3 2 3 1 1 1 8 0 11 1 1 3 7 8 3 5 9 5 2 3 1 1 3 3 2 1 1 3 3 5 3 3 1 3 5 1 5 0 8 9 1 6 5 1 4 8 1 3 1 3 1 2 1 5 0 6 1 6 2 9 9 4 3 2 3 1 1 1 5 0 11 3 5 4 2 4 1 1 1 3 4 6 2 1 3 2 2 3 4 4 1 5 3 7 1 9 0 8 1 5 9 2 6 8 4 1 3 3 1 1 3 3 3 3 3 1 7 0 8 4 1 1 1 7 2 5 5 1 2 1 3 1 1 1 1 8 0 8 8 5 9 2 5 7 4 1 2 1 1 1 1 1 2 2 1 4 2 2 5 3 5 4 2 1 7 5 3 3 6 1 9 0 9 5 1 7 6 2 1 9 3 1 1 2 1 3 2 3 1 1 1 1 7 0 9 6 1 5 4 4 1 3 5 4 1 1 3 3 1 2 3 1 6 0 7 5 3 8 3 7 7 1 2 3 2 3 2 1 4 1 5 2 5 2 3 7 1 8 0 8 2 3 6 6 4 1 1 4 3 2 3 3 2 2 1 2 1 9 0 10 4 2 5 3 6 3 9 2 1 1 1 2 3 2 2 1 3 1 3 1 6 0 9 5 4 8 8 3 1 1 3 6 3 2 3 3 1 1 4 3 2 5 3 5 3 3 5 1 5 0 11 1 6 8 1 2 3 5 7 7 3 8 1 3 2 1 3 1 6 0 10 6 9 3 7 5 5 1 1 5 6 1 3 2 1 1 2 1 5 0 10 3 7 3 1 5 1 7 6 2 9 2 2 1 2 1 5 2 2 1 2 3 7 1 8 0 6 6 5 1 1 3 7 2 1 3 2 1 2 1 2 1 7 0 7 7 5 4 3 8 1 3 1 2 3 1 1 1 3 1 7 0 11 4 4 6 7 6 1 5 7 2 8 1 2 3 3 1 2 3 1 1 4 1 1 5 5 1 3 6 1 5 0 9 6 2 4 3 5 1 5 1 7 3 3 2 1 2 1 9 0 10 6 1 3 1 8 9 3 8 5 4 1 1 2 3 1 3 3 1 2 1 7 0 9 5 3 7 5 4 1 1 1 6 1 2 1 3 2 2 1 2 1 2 3 1 5 6 1 6 5 3 3 7 1 6 0 9 8 1 9 8 7 1 5 3 2 1 3 1 3 3 1 1 5 0 8 8 3 8 5 1 1 5 4 1 3 1 2 3 1 6 0 9 6 7 2 3 1 5 5 7 5 1 1 2 1 3 3 5 3 1 1 5 4 5 3 4 1 8 0 6 8 6 7 1 5 8 1 1 1 1 2 1 1 2 1 7 0 9 1 5 7 9 1 9 9 1 4 1 3 2 2 1 2 1 1 5 0 11 6 7 1 2 8 3 2 7 4 6 5 1 1 1 3 3 3 3 1 4 3 6 1 8 0 9 8 2 2 1 6 6 9 2 1 3 2 3 3 2 2 1 2 1 7 0 7 4 7 1 1 2 8 3 2 1 1 3 2 3 3 1 9 0 6 8 1 1 1 7 2 1 1 2 3 2 1 1 3 2 1 5 3 5 3 1 3 5 1 5 0 7 8 3 3 1 7 7 1 2 3 3 3 1 1 8 0 11 3 1 6 8 7 1 5 2 9 5 6 1 1 2 1 2 2 3 1 1 6 0 7 1 6 2 6 9 1 1 2 1 1 1 1 2 2 4 2 5 4 3 5 1 7 0 9 3 9 3 8 8 1 2 2 8 3 1 2 1 3 2 3 1 5 0 7 1 8 4 7 7 2 6 2 3 1 3 1 1 7 0 9 9 1 4 8 7 8 9 9 1 3 2 3 2 3 2 1 2 5 4 2 5 5 5 6 5 4 3 4 1 8 0 11 2 5 5 4 1 6 4 1 4 1 4 2 2 3 1 2 2 2 1 1 6 0 9 1 8 3 5 6 1 2 3 2 1 2 2 2 1 3 1 5 0 8 8 1 5 8 1 5 2 7 2 2 1 3 1 4 3 2 3 3 7 1 5 0 7 7 6 9 1 6 1 7 3 1 3 1 1 1 5 0 6 7 8 3 1 2 8 1 3 3 2 3 1 9 0 9 7 9 3 1 7 1 9 9 4 1 1 1 2 1 1 3 3 2 2 1 3 3 3 1 5 3 6 1 7 0 11 7 1 3 2 1 1 6 5 4 5 5 1 2 1 3 1 3 3 1 6 0 6 1 2 9 7 7 1 2 1 2 3 1 3 1 8 0 10 6 9 1 9 8 9 3 4 1 5 1 1 1 1 2 1 1 1 3 3 3 5 1 4 3 7 1 5 0 8 8 3 4 8 7 1 7 9 1 3 1 2 1 1 6 0 11 9 1 7 1 6 8 8 9 3 5 5 3 2 1 2 1 1 1 5 0 9 9 9 7 1 7 1 2 1 4 2 2 2 1 2 3 3 1 5 1 1 3 3 6 1 7 0 10 3 4 8 6 8 6 1 9 3 3 1 2 3 3 1 2 3 1 9 0 9 1 9 8 3 9 1 8 7 2 1 3 1 3 1 3 3 2 3 1 7 0 8 9 1 4 8 7 5 5 6 1 2 3 3 3 3 2 4 5 4 2 4 1 4 5 5 7 5 4 3 4 1 5 0 8 8 1 6 6 6 8 8 1 1 1 1 2 2 1 6 0 10 5 9 1 3 8 8 9 7 2 9 3 1 3 2 2 1 1 6 0 8 5 7 2 1 3 3 6 1 3 1 1 1 2 1 2 1 2 4 3 4 1 7 0 10 1 2 2 5 9 1 1 7 1 6 3 2 2 3 3 1 2 1 8 0 10 1 9 4 7 7 8 3 3 9 4 2 1 2 3 1 2 2 1 1 7 0 8 7 4 6 4 1 2 6 7 1 2 1 2 1 1 2 1 5 5 3 3 5 1 5 0 10 6 7 2 1 5 1 9 8 8 9 2 1 1 1 1 1 8 0 10 2 1 9 6 1 1 4 7 9 5 1 3 3 2 3 1 3 1 1 5 0 11 5 4 7 7 5 9 5 5 7 1 7 1 1 1 1 3 4 3 1 1 2 3 7 1 8 0 9 9 5 1 7 6 5 7 4 8 1 1 3 3 3 1 1 2 1 5 0 9 1 8 5 3 4 8 5 1 6 1 2 3 1 3 1 5 0 7 1 6 6 8 7 3 7 3 1 3 1 3 1 2 5 2 3 5 3 3 4 1 6 0 10 1 4 2 2 6 8 6 6 3 6 1 3 1 2 1 2 1 7 0 11 3 3 2 1 1 9 1 1 4 7 7 1 3 1 1 1 2 3 1 8 0 11 6 2 1 4 3 9 8 4 4 6 2 2 2 1 1 1 2 2 2 3 3 3 5 1 4 4 6 5 5 3 7 1 7 0 7 6 6 3 2 7 1 5 3 3 1 3 1 3 1 1 6 0 11 5 7 1 2 5 5 1 5 5 9 4 1 1 1 3 1 2 1 6 0 7 5 5 6 5 4 1 8 1 1 2 2 1 2 3 3 5 5 2 3 2 3 5 1 6 0 9 4 6 5 8 4 5 1 1 5 1 3 1 1 3 3 1 7 0 10 3 2 1 9 3 2 3 4 9 1 1 3 1 2 1 1 2 1 8 0 9 9 1 3 1 1 4 4 9 9 3 3 1 3 1 3 2 2 1 3 3 2 2 3 7 1 8 0 6 1 7 2 7 1 5 1 3 3 1 1 3 2 3 1 9 0 9 3 2 4 1 9 1 8 1 9 3 1 3 1 3 3 1 1 1 1 6 0 9 5 5 1 6 4 7 2 8 6 1 2 3 1 1 2 2 4 2 1 4 1 2 3 6 1 9 0 10 1 5 1 3 7 4 6 3 7 2 3 1 1 1 2 1 1 3 2 1 9 0 6 7 4 1 1 1 8 2 2 1 2 3 2 3 1 2 1 8 0 6 8 1 5 2 8 4 1 3 2 2 3 2 1 1 1 2 5 1 4 2 3 4 1 8 0 11 1 5 8 3 4 7 8 5 6 5 8 3 3 3 2 3 1 2 3 1 5 0 6 1 7 9 6 1 1 2 2 1 2 1 1 5 0 11 4 1 4 1 7 4 3 3 2 2 3 1 3 2 1 1 4 2 3 3 4 7 4 3 2 7 5 7 6 10 3 1 4 3 1 4 6 2 diff --git a/2018/inputs/9.txt b/2018/inputs/9.txt new file mode 100644 index 0000000..eaf3e92 --- /dev/null +++ b/2018/inputs/9.txt @@ -0,0 +1 @@ +438 players; last marble is worth 71626 points diff --git a/2018/license.org b/2018/license.org new file mode 100644 index 0000000..8d31e87 --- /dev/null +++ b/2018/license.org @@ -0,0 +1,21 @@ +* The MIT License + +Copyright (c) 2018 Justin Worthe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/2018/readme.org b/2018/readme.org new file mode 100644 index 0000000..7fe82e4 --- /dev/null +++ b/2018/readme.org @@ -0,0 +1,38 @@ +* Advent of Code 2018 + +** What is Advent of Code? + +Advent of Code is a programming advent calendar. On the 25 days of +December leading up to Christmas, each morning a new programming +challenge is unlocked. The race is then on to see who can solve the +challenge and get the answer to their particular input first. + +It's a lot of fun. I have my solutions posted here so that I can share +them with my friends, as well as the broader community if they're +interested. + +** A note on error handling and code quality + +The only important metric to consider in terms of taking the Advent of +Code challenges seriously from a competitive point of view is how +quickly you arrive at an answer for your particular input. + +These solutions should not in any way be seen as an example of good +coding standards in Rust. The error handling in particular is +appalling. The reason for this is that I can look at the input data +and be certain that some error cases won't come up, like empty +lists. I can also assume that things like file system access will +always work because I'm only running it on my machine under my +supervision. + +When my assumptions are wrong, the program panics and dies, but I'm +currently there programming it when it's running so that isn't really +a big deal. + +The short version of what I'm trying to say is that even though I use +~unwrap~ all over the place in this particular repo, I still think +it's a really bad idea to use it in a real project. + +** License + +See [[./license.org]]. diff --git a/2018/src/bin/day_1.rs b/2018/src/bin/day_1.rs new file mode 100644 index 0000000..4693579 --- /dev/null +++ b/2018/src/bin/day_1.rs @@ -0,0 +1,32 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +extern crate im_rc; + +use std::error::Error; +use std::path::PathBuf; + +use im_rc::HashSet; + +// cargo watch -cs "cargo run --release --bin day_1" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/1.txt"))?; + let input_ints: Vec<i32> = input.iter().map(|str| str.parse::<i32>().unwrap()).collect(); + + println!("Input: {:?}", input_ints); + + let sum: i32 = input_ints.iter().sum(); + println!("Sum: {}", sum); + + let first_repeat = input_ints.iter().cycle().try_fold((0, HashSet::new()), |(acc, seen), &i| { + if seen.contains(&acc) { + Err(acc) + } else { + Ok((acc + i, seen.update(acc))) + } + }).err().unwrap(); + println!("First repeat: {}", first_repeat); + + Ok(()) +} diff --git a/2018/src/bin/day_10.rs b/2018/src/bin/day_10.rs new file mode 100644 index 0000000..082be7c --- /dev/null +++ b/2018/src/bin/day_10.rs @@ -0,0 +1,82 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::str::FromStr; + +use std::error::Error; +use std::path::PathBuf; + +use std::i32; + +// cargo watch -cs "cargo run --release --bin day_10" + + + +#[derive(Debug, Clone)] +struct Star { + x: i32, + y: i32, + dx: i32, + dy: i32 +} + +impl FromStr for Star { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let split = s + .split(|c: char| c != '-' && !c.is_numeric()) + .filter(|s| !s.is_empty()) + .map(|s| s.parse()) + .collect::<Result<Vec<i32>, _>>()?; + + Ok(Star { + x: split[0], + y: split[1], + dx: split[2], + dy: split[3] + }) + } +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/10.txt"))?; + let mut stars = input.iter().map(|line| line.parse::<Star>().unwrap()).collect::<Vec<_>>(); + + //debug!(input); + //debug!(stars); + + let screen_width = 80; + let screen_height = 80; + + for seconds in 0..1000000 { + let min_x = stars.iter().map(|s| s.x).min().unwrap(); + let max_x = stars.iter().map(|s| s.x).max().unwrap(); + let min_y = stars.iter().map(|s| s.y).min().unwrap(); + let max_y = stars.iter().map(|s| s.y).max().unwrap(); + + if max_x - min_x < screen_width && max_y - min_y < screen_height { + debug!(seconds); + for y in min_y..max_y+1 { + for x in min_x..max_x+1 { + let star_at_point = stars.iter().any(|s| s.x == x && s.y == y); + if star_at_point { + print!("#"); + } else { + print!(" "); + } + } + println!(); + } + println!(); + println!(); + } + + for star in &mut stars { + star.x += star.dx; + star.y += star.dy; + } + } + + Ok(()) +} diff --git a/2018/src/bin/day_11.rs b/2018/src/bin/day_11.rs new file mode 100644 index 0000000..0e458a3 --- /dev/null +++ b/2018/src/bin/day_11.rs @@ -0,0 +1,66 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::i32; + +// cargo watch -cs "cargo run --release --bin day_11" + +fn main() -> Result<(), Box<Error>> { + let input = 1723; + + println!("Input: {:?}", input); + + let powers = precompute_powers(input); + + let power_per_size = (1..300).map(|size| { + (1..302-size).map(|left| { + (1..302-size).map(|top| { + (power_for_block(left, top, size, &powers), (left, top, size)) + }).max_by_key(|(p, _)| *p).unwrap() + }).max_by_key(|(p, _)| *p).unwrap() + }).collect::<Vec<_>>(); + + let (max_power_at_size_3, coordinate_at_size_3) = power_per_size[2]; // index from 0 vs 1 + debug!(max_power_at_size_3); + debug!(coordinate_at_size_3); + + let (max_power, coordinate) = power_per_size.iter().max_by_key(|(p, _)| p).unwrap(); + + debug!(max_power); + debug!(coordinate); + + Ok(()) +} + +fn power_for_block(left: i32, top: i32, size: i32, powers: &[[i32;300];300]) -> i32 { + (left..left+size).map(|x| { + (top..top+size).map(|y| { + powers[x as usize - 1][y as usize - 1] + }).sum::<i32>() + }).sum() +} + +fn precompute_powers(input: i32) -> [[i32;300];300] { + let mut powers: [[i32;300];300] = [[0;300];300]; + for x in 1..301 { + for y in 1..301 { + powers[x as usize - 1][y as usize - 1] = power_from_coordinates(x, y, input); + } + } + powers +} + +fn power_from_coordinates(x: i32, y: i32, input: i32) -> i32 { + let rack_id = x + 10; + ((((rack_id * y) + input) * rack_id / 100) % 10) - 5 +} + + +#[test] +fn power_from_coord_example() { + assert_eq!(power_from_coordinates(3, 5, 8), 4); + assert_eq!(power_from_coordinates(122, 79, 57), -5); + assert_eq!(power_from_coordinates(217,196, 39), 0); + assert_eq!(power_from_coordinates(101, 153, 71), 4); +} diff --git a/2018/src/bin/day_12.rs b/2018/src/bin/day_12.rs new file mode 100644 index 0000000..65a966d --- /dev/null +++ b/2018/src/bin/day_12.rs @@ -0,0 +1,102 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::str::FromStr; + +// cargo watch -cs "cargo run --release --bin day_12" + +use std::collections::HashSet; + +#[derive(Debug)] +struct Rule { + input: [bool; 5], + output: bool +} + +impl FromStr for Rule { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + //##..# => # + let mut input = [false; 5]; + let mut iter = s.chars().filter(|c| *c == '#' || *c == '.'); + for (i, c) in iter.by_ref().take(5).enumerate() { + if c == '#' { + input[i] = true; + } + } + Ok(Rule { + input, + output: iter.next() == Some('#') + }) + } +} + +impl Rule { + fn matches(&self, state: &HashSet<i64>, index: i64) -> bool { + self.input.iter().enumerate().all(|(i, expected)| { + let pot_index = index - 2 + i as i64; + *expected == state.contains(&pot_index) + }) + } +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/12.txt"))?; + + println!("Input: {:?}", input); + + let mut initial_state: HashSet<i64> = HashSet::new(); + for (i, c) in input[0].chars().filter(|c| *c == '#' || *c == '.').enumerate() { + if c == '#' { + initial_state.insert(i as i64); + } + } + let rules = input.iter().skip(1).map(|line| line.parse()).collect::<Result<Vec<Rule>, Box<Error>>>()?; + + debug!(initial_state); + debug!(rules); + + let part1_time = 20; + let part2_time = 50000000000; + + let part1_final_state = iterate_states(&initial_state, &rules, part1_time); + let sum_of_part1_pot_numbers: i64 = part1_final_state.iter().sum(); + debug!(sum_of_part1_pot_numbers); + + let part2_final_state = iterate_states(&initial_state, &rules, part2_time); + let sum_of_part2_pot_numbers: i64 = part2_final_state.iter().sum(); + debug!(sum_of_part2_pot_numbers); + + Ok(()) +} + +fn iterate_states(initial_state: &HashSet<i64>, rules: &[Rule], time: i64) -> HashSet<i64> { + let mut current_state = initial_state.clone(); + for current_time in 0..time { + let mut new_state = HashSet::new(); + let min = current_state.iter().min().cloned().unwrap_or(-1) - 2; + let max = current_state.iter().max().cloned().unwrap_or(-1) + 2; + + for i in min..max+1 { + if rules.iter().find(|r| r.matches(¤t_state, i)).expect("No matching rule").output { + new_state.insert(i as i64); + } + } + + if current_state.iter().map(|v| v + 1).collect::<HashSet<i64>>() == new_state { + // Iterations are just shifting 1 to the right at this + // point. Found by inspecting a debugging log of the + // generations. + + let remaining_iterations = time-current_time; + return current_state.iter().map(|v| v + remaining_iterations).collect::<HashSet<i64>>(); + } + + current_state = new_state; + } + current_state +} diff --git a/2018/src/bin/day_13.rs b/2018/src/bin/day_13.rs new file mode 100644 index 0000000..005f216 --- /dev/null +++ b/2018/src/bin/day_13.rs @@ -0,0 +1,249 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_13" + +#[derive(Debug)] +enum Road { + LeftRight, + UpDown, + LeftUpRightDown, + RightUpLeftDown, + Intersection, + None +} + +#[derive(Debug)] +struct Cart { + next_turn: TurnDirection, + facing: FacingDirection, + x: usize, + y: usize, + crashed: bool + +} + +#[derive(Debug, Clone, Copy)] +enum FacingDirection { + Up, + Down, + Left, + Right +} + +#[derive(Debug, Clone, Copy)] +enum TurnDirection { + Left, + Straight, + Right +} + +impl TurnDirection { + fn next(&self) -> TurnDirection { + use TurnDirection::*; + + match *self { + Left => Straight, + Straight => Right, + Right => Left + } + } + + fn rotate(&self, facing: &FacingDirection) -> FacingDirection { + match *self { + TurnDirection::Left => match *facing { + FacingDirection::Up => FacingDirection::Left, + FacingDirection::Left => FacingDirection::Down, + FacingDirection::Down => FacingDirection::Right, + FacingDirection::Right => FacingDirection::Up + }, + TurnDirection::Right => match *facing { + FacingDirection::Up => FacingDirection::Right, + FacingDirection::Left => FacingDirection::Up, + FacingDirection::Down => FacingDirection::Left, + FacingDirection::Right => FacingDirection::Down + }, + TurnDirection::Straight => facing.clone() + } + } +} + + + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/13.txt"))?; + +// for i in &input { +// println!("{}", i); +// } + + let mut map: Vec<Vec<Road>> = Vec::new(); + let mut carts: Vec<Cart> = Vec::new(); + + for (y, line) in input.iter().enumerate() { + let mut map_row = Vec::new(); + for (x, c) in line.chars().enumerate() { + let tile = match c { + ' ' => Road::None, + '-' => Road::LeftRight, + '|' => Road::UpDown, + '/' => Road::LeftUpRightDown, + '\\' => Road::RightUpLeftDown, + '+' => Road::Intersection, + '^' => { + carts.push(Cart { + next_turn: TurnDirection::Left, + facing: FacingDirection::Up, + x: x, + y: y, + crashed: false + }); + Road::UpDown + }, + '<' => { + carts.push(Cart { + next_turn: TurnDirection::Left, + facing: FacingDirection::Left, + x: x, + y: y, + crashed: false + }); + Road::LeftRight + }, + 'v' => { + carts.push(Cart { + next_turn: TurnDirection::Left, + facing: FacingDirection::Down, + x: x, + y: y, + crashed: false + }); + Road::UpDown + }, + '>' => { + carts.push(Cart { + next_turn: TurnDirection::Left, + facing: FacingDirection::Right, + x: x, + y: y, + crashed: false + }); + Road::LeftRight + }, + + _ => { + panic!("Unknown character {}", c); + } + }; + map_row.push(tile); + } + map.push(map_row); + } + + while carts.len() > 1 { + carts.sort_unstable_by(|a, b| a.y.cmp(&b.y).then(a.x.cmp(&b.x))); + + for i in 0..carts.len() { + { + let mut cart = &mut carts[i]; + let road = &map[cart.y][cart.x]; + + match (road, cart.facing, cart.next_turn) { + (Road::LeftRight, FacingDirection::Left, _) => { + cart.x -= 1; + }, + (Road::LeftRight, FacingDirection::Right, _) => { + cart.x += 1; + }, + (Road::LeftRight, _, _) => { + panic!("Sideways cart heading left-right"); + }, + + (Road::UpDown, FacingDirection::Up, _) => { + cart.y -= 1; + }, + (Road::UpDown, FacingDirection::Down, _) => { + cart.y += 1; + }, + (Road::UpDown, _, _) => { + panic!("Sideways cart heading up-down"); + }, + + // / + (Road::LeftUpRightDown, FacingDirection::Down, _) => { + cart.x -= 1; + cart.facing = FacingDirection::Left; + }, + (Road::LeftUpRightDown, FacingDirection::Right, _) => { + cart.y -= 1; + cart.facing = FacingDirection::Up; + }, + (Road::LeftUpRightDown, FacingDirection::Left, _) => { + cart.y += 1; + cart.facing = FacingDirection::Down; + }, + (Road::LeftUpRightDown, FacingDirection::Up, _) => { + cart.x += 1; + cart.facing = FacingDirection::Right; + }, + + // \ + (Road::RightUpLeftDown, FacingDirection::Up, _) => { + cart.x -= 1; + cart.facing = FacingDirection::Left; + }, + (Road::RightUpLeftDown, FacingDirection::Left, _) => { + cart.y -= 1; + cart.facing = FacingDirection::Up; + }, + (Road::RightUpLeftDown, FacingDirection::Right, _) => { + cart.y += 1; + cart.facing = FacingDirection::Down; + }, + (Road::RightUpLeftDown, FacingDirection::Down, _) => { + cart.x += 1; + cart.facing = FacingDirection::Right; + }, + + (Road::Intersection, f, d) => { + cart.facing = d.rotate(&f); + cart.next_turn = d.next(); + match cart.facing { + FacingDirection::Up => { cart.y -= 1 }, + FacingDirection::Down => { cart.y += 1 }, + FacingDirection::Left => { cart.x -= 1 }, + FacingDirection::Right => { cart.x += 1 }, + } + }, + + (Road::None, _, _) => { + panic!("Offroad cart!"); + } + + } + + } + + let collisions = carts.iter() + .enumerate() + .filter(|(other_i, other)| *other_i != i && other.x == carts[i].x && other.y == carts[i].y) + .map(|(other_i, _)| other_i) + .collect::<Vec<_>>(); + for other_i in collisions { + let crash_location = (carts[i].x, carts[i].y); + debug!(crash_location); + carts[i].crashed = true; + carts[other_i].crashed = true; + } + } + + carts.retain(|cart| !cart.crashed); + } + + debug!(carts); + + Ok(()) +} diff --git a/2018/src/bin/day_14.rs b/2018/src/bin/day_14.rs new file mode 100644 index 0000000..cb16623 --- /dev/null +++ b/2018/src/bin/day_14.rs @@ -0,0 +1,111 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_14" + +fn main() -> Result<(), Box<Error>> { + let input = 540561; + + let scoreboard = find_ten_scoreboard_after(input); + + println!("Result: "); + scoreboard.iter().for_each(|s| { + print!("{}", s); + }); + println!(); + + let first_occurence = find_first_occurence_of(input); + debug!(first_occurence); + + Ok(()) +} + +fn find_ten_scoreboard_after(input: usize) -> Vec<usize> { + let mut scoreboard = vec!(3,7); + let mut elf1_pos = 0; + let mut elf2_pos = 1; + + while scoreboard.len() < (input + 10) { + let next = scoreboard[elf1_pos] + scoreboard[elf2_pos]; + for digit in number_to_digits_vec(next) { + scoreboard.push(digit); + } + + elf1_pos = (elf1_pos + 1 + scoreboard[elf1_pos]) % scoreboard.len(); + elf2_pos = (elf2_pos + 1 + scoreboard[elf2_pos]) % scoreboard.len(); + } + + scoreboard.iter().skip(input).take(10).cloned().collect() +} + +fn find_first_occurence_of(input: usize) -> usize { + let target_sequence = number_to_digits_vec(input); + debug!(target_sequence); + + let mut scoreboard = vec!(3,7); + let mut elf1_pos = 0; + let mut elf2_pos = 1; + let mut target_index = None; + + while target_index.is_none() { + let next = scoreboard[elf1_pos] + scoreboard[elf2_pos]; + for digit in number_to_digits_vec(next) { + scoreboard.push(digit); + } + + elf1_pos = (elf1_pos + 1 + scoreboard[elf1_pos]) % scoreboard.len(); + elf2_pos = (elf2_pos + 1 + scoreboard[elf2_pos]) % scoreboard.len(); + + if scoreboard.len() >= target_sequence.len() + 2 { + for potential_target_index in scoreboard.len()-target_sequence.len()-2..scoreboard.len()-target_sequence.len()+1 { + let found = scoreboard.iter() + .skip(potential_target_index) + .take(target_sequence.len()) + .zip(target_sequence.iter()) + .all(|(a, b)| a == b); + if found { + target_index = Some(potential_target_index); + } + } + } + } + + target_index.unwrap() +} + +fn number_to_digits_vec(input: usize) -> Vec<usize> { + if input == 0 { + return vec!(0); + } + + let mut result = Vec::new(); + let mut acc = input; + while acc > 0 { + result.push(acc % 10); + acc /= 10; + } + result.reverse(); + result +} + +#[test] +fn vectorification() { + assert_eq!(number_to_digits_vec(10), vec!(1, 0)); + assert_eq!(number_to_digits_vec(1), vec!(1)); + assert_eq!(number_to_digits_vec(0), vec!(0)); +} + +#[test] +fn part1_examples() { + assert_eq!(find_ten_scoreboard_after(9), vec!(5,1,5,8,9,1,6,7,7,9)); + assert_eq!(find_ten_scoreboard_after(2018), vec!(5,9,4,1,4,2,9,8,8,2)); +} + +#[test] +fn part2_examples() { + assert_eq!(find_first_occurence_of(51589), 9); + assert_eq!(find_first_occurence_of(59414), 2018); +} diff --git a/2018/src/bin/day_15.rs b/2018/src/bin/day_15.rs new file mode 100644 index 0000000..c6f3cf2 --- /dev/null +++ b/2018/src/bin/day_15.rs @@ -0,0 +1,272 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_15" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/15.txt"))?; + + let (round_hp_product, _) = calculate_round_hp_product(&input, 3); + debug!(round_hp_product); + + for power in 3.. { + let (round_hp_product_without_losses, elf_losses) = calculate_round_hp_product(&input, power); + if (elf_losses == 0) { + debug!(round_hp_product_without_losses); + break; + } + } + + Ok(()) +} + +fn calculate_round_hp_product(input: &[String], elf_power: i32) -> (i32, usize) { + let goblin_power = 3; + let initial_hp = 200; + + let mut map = Vec::new(); + let mut units = Vec::new(); + + for (y, line) in input.iter().enumerate() { + let mut map_row = Vec::new(); + for (x, c) in line.chars().enumerate() { + map_row.push(c == '#'); + + let maybe_unit = match c { + 'G' => Some(Unit { + team: false, + x: x as i32, + y: y as i32, + hp: initial_hp + }), + 'E' => Some(Unit { + team: true, + x: x as i32, + y: y as i32, + hp: initial_hp + }), + _ => None + }; + if let Some(unit) = maybe_unit { + units.push(unit); + } + } + + map.push(map_row); + } + let start_elves = units.iter().filter(|u| u.team).count(); + + for round in 0.. { + // debug!(round); + // debug!(units); + // debug_print(&units, &map); + units.sort_unstable_by(|a, b| a.y.cmp(&b.y).then(a.x.cmp(&b.x))); + + for i in 0..units.len() { + if units[i].hp > 0 { + let battle_over = !units.iter().any(|other| other.hp > 0 && other.team != units[i].team); + if battle_over { + println!("Battle over"); + let hp_sum = units.iter().filter(|u| u.hp > 0).map(|u| u.hp).sum::<i32>(); + debug!(round); + debug!(hp_sum); + + let elf_losses = start_elves - units.iter().filter(|u| u.team).count(); + debug!(elf_losses); + return (round * hp_sum, elf_losses); + } + + let is_next_to_opponent = unit_at_point(!units[i].team, units[i].x-1, units[i].y, &units) + .or_else(|| unit_at_point(!units[i].team, units[i].x+1, units[i].y, &units)) + .or_else(|| unit_at_point(!units[i].team, units[i].x, units[i].y-1, &units)) + .or_else(|| unit_at_point(!units[i].team, units[i].x, units[i].y+1, &units)).is_some(); + if !is_next_to_opponent { + if let Some((next_x, next_y)) = find_next_step(i, &units, &map) { + units[i].x = next_x; + units[i].y = next_y; + } + } + + let mut attack_candidates = adjacent_units(!units[i].team, units[i].x, units[i].y, &units); + attack_candidates.sort_by(|&a, &b| units[a].hp.cmp(&units[b].hp)); + if let Some(&to_attack) = attack_candidates.first() { + let attack_power = if units[i].team { elf_power } else { goblin_power }; + units[to_attack].hp -= attack_power; + } + } + } + + units.retain(|u| u.hp > 0); + } + + panic!("Match ended unexpectedly"); +} + +fn find_next_step(i: usize, units: &[Unit], map: &Vec<Vec<bool>>) -> Option<(i32, i32)> { + let mut explored = vec!(Explored { + x: units[i].x, + y: units[i].y, + distance: 0, + parent: 0 + }); + + let mut explored_index = 0; + let mut distance_found = None; + while explored_index < explored.len() && distance_found.map_or(true, |distance| explored[explored_index].distance < distance) { + let distance = explored[explored_index].distance; + for (new_x, new_y) in adjacent_empty_spaces(explored[explored_index].x, explored[explored_index].y, &map, &units, &explored) { + explored.push(Explored { + x: new_x, + y: new_y, + distance: distance + 1, + parent: explored_index + }); + + if adjacent_units(!units[i].team, new_x, new_y, &units).len() > 0 { + distance_found = Some(distance + 1); + } + } + explored_index += 1; + } + + if let Some(distance) = distance_found { + let mut candidates = explored.iter().enumerate() + .filter(|(_,e)| e.distance == distance) + .filter(|(_,e)| adjacent_units(!units[i].team, e.x, e.y, &units).len() > 0) + .collect::<Vec<_>>(); + candidates.sort_by(|(_,a), (_,b)| a.y.cmp(&b.y).then(a.x.cmp(&b.x))); + let (best_index, _) = candidates[0]; + + let mut result_index = best_index; + let mut next_index = best_index; + while next_index != 0 { + result_index = next_index; + next_index = explored[result_index].parent; + } + return Some((explored[result_index].x, explored[result_index].y)); + } + None +} + +fn adjacent_empty_spaces(x: i32, y: i32, map: &Vec<Vec<bool>>, units: &[Unit], explored: &[Explored]) -> Vec<(i32, i32)> { + [(x, y-1), (x-1, y), (x+1, y), (x, y+1)].iter() + .filter(|(x, y)| *x >= 0 && *y >= 0) + .filter(|(x, y)| !explored.iter().any(|e| e.x == *x && e.y == *y)) + .filter(|(x, y)| !units.iter().any(|e| e.hp > 0 && e.x == *x && e.y == *y)) + .filter(|(x, y)| !map[*y as usize][*x as usize]) + .cloned() + .collect() +} + +fn adjacent_units(team: bool, x: i32, y: i32, units: &[Unit]) -> Vec<usize> { + [(x, y-1), (x-1, y), (x+1, y), (x, y+1)].iter() + .filter_map(|(x, y)| unit_at_point(team, *x, *y, units)) + .collect() +} + +fn unit_at_point(team: bool, x: i32, y: i32, units: &[Unit]) -> Option<usize> { + units.iter().enumerate() + .find(|(_, u)| u.hp > 0 && u.team == team && u.x == x && u.y == y) + .map(|(i, _)| i) +} + +#[derive(Debug, Clone)] +struct Unit { + team: bool, + x: i32, + y: i32, + hp: i32 +} + +#[derive(Debug)] +struct Explored { + x: i32, + y: i32, + distance: u32, + parent: usize +} + + +fn debug_print(units: &[Unit], map: &Vec<Vec<bool>>) { + for (y, line) in map.iter().enumerate() { + for (x, wall) in line.iter().enumerate() { + let unit = units.iter().find(|u| u.hp > 0 && u.x == x as i32 && u.y == y as i32); + print!("{}", match (wall, unit) { + (true, _) => '#', + (false, Some(unit)) if unit.team => 'E', + (false, Some(_)) => 'G', + (false, None) => '.' + }); + } + println!(); + } + println!(); + println!(); +} + +fn part_1_test(input: &[&str]) -> i32 { + let owned_input = input.iter() + .map(|&line| line.to_owned()) + .collect::<Vec<String>>(); + let (product, _) = calculate_round_hp_product(&owned_input, 3); + product +} + +#[test] +fn example_1() { + let input = vec!( + "#######", + "#.G...#", + "#...EG#", + "#.#.#G#", + "#..G#E#", + "#.....#", + "#######"); + assert_eq!(part_1_test(&input), 27730); +} + +#[test] +fn example_2() { + let input = vec!( + "#######", + "#G..#E#", + "#E#E.E#", + "#G.##.#", + "#...#E#", + "#...E.#", + "#######" + ); + assert_eq!(part_1_test(&input), 36334); +} + +#[test] +fn example_3() { + let input = vec!( + "#######", + "#E.G#.#", + "#.#G..#", + "#G.#.G#", + "#G..#.#", + "#...E.#", + "#######" + ); + assert_eq!(part_1_test(&input), 27755); +} + +#[test] +fn example_4() { + let input = vec!( + "#######", + "#.E...#", + "#.#..G#", + "#.###.#", + "#E#G#G#", + "#...#G#", + "#######" + ); + assert_eq!(part_1_test(&input), 28944); +} + diff --git a/2018/src/bin/day_16.rs b/2018/src/bin/day_16.rs new file mode 100644 index 0000000..275ec45 --- /dev/null +++ b/2018/src/bin/day_16.rs @@ -0,0 +1,205 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::{HashMap, HashSet}; + +// cargo watch -cs "cargo run --release --bin day_16" + +struct Instruction { + op: Op, + a: i32, + b: i32, + c: i32 +} + +impl Instruction { + fn execute(&self, registers: &[i32; 4]) -> [i32; 4] { + use Op::*; + + let mut result_registers = registers.clone(); + + result_registers[self.c as usize] = match self.op { + Addr => registers[self.a as usize] + registers[self.b as usize], + Addi => registers[self.a as usize] + self.b, + Mulr => registers[self.a as usize] * registers[self.b as usize], + Muli => registers[self.a as usize] * self.b, + Banr => registers[self.a as usize] & registers[self.b as usize], + Bani => registers[self.a as usize] & self.b, + Borr => registers[self.a as usize] | registers[self.b as usize], + Bori => registers[self.a as usize] | self.b, + Setr => registers[self.a as usize], + Seti => self.a, + Gtir => if self.a > registers[self.b as usize] { 1 } else { 0 }, + Gtri => if registers[self.a as usize] > self.b { 1 } else { 0 }, + Gtrr => if registers[self.a as usize] > registers[self.b as usize] { 1 } else { 0 }, + Eqir => if self.a == registers[self.b as usize] { 1 } else { 0 }, + Eqri => if registers[self.a as usize] == self.b { 1 } else { 0 }, + Eqrr => if registers[self.a as usize] == registers[self.b as usize] { 1 } else { 0 } + }; + + result_registers + } +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +enum Op { + Addr, + Addi, + Mulr, + Muli, + Banr, + Bani, + Borr, + Bori, + Setr, + Seti, + Gtir, + Gtri, + Gtrr, + Eqir, + Eqri, + Eqrr +} + +impl Op { + fn all() -> [Op; 16] { + use Op::*; + [ + Addr, + Addi, + Mulr, + Muli, + Banr, + Bani, + Borr, + Bori, + Setr, + Seti, + Gtir, + Gtri, + Gtrr, + Eqir, + Eqri, + Eqrr + ] + } +} + +struct UnknownInstruction { + before: [i32; 4], + after: [i32; 4], + opcode: i32, + a: i32, + b: i32, + c: i32 +} + +impl UnknownInstruction { + fn possible_matches(&self) -> HashSet<Op> { + Op::all() + .iter() + .filter(|&&op| { + let instruction = Instruction { + op: op, + a: self.a, + b: self.b, + c: self.c + }; + let result = instruction.execute(&self.before); + result == self.after + }) + .cloned() + .collect() + } +} + +fn main() -> Result<(), Box<Error>> { + let input_part_1 = read_file(&PathBuf::from("inputs/16_1.txt"))?; + + let unknown_instructions: Vec<UnknownInstruction> = input_part_1.chunks(3) + .map(|chunk| { + let mut before_iter = chunk[0].trim_matches(|c: char| !c.is_numeric()).split(", ").map(|c| c.parse::<i32>().unwrap()); + let before = [ + before_iter.next().unwrap(), + before_iter.next().unwrap(), + before_iter.next().unwrap(), + before_iter.next().unwrap(), + ]; + let mut after_iter = chunk[2].trim_matches(|c: char| !c.is_numeric()).split(", ").map(|c| c.parse::<i32>().unwrap()); + let after = [ + after_iter.next().unwrap(), + after_iter.next().unwrap(), + after_iter.next().unwrap(), + after_iter.next().unwrap(), + ]; + let mut instruction_iter = chunk[1].split_whitespace().map(|c| c.parse::<i32>().unwrap()); + UnknownInstruction { + before, after, + opcode: instruction_iter.next().unwrap(), + a: instruction_iter.next().unwrap(), + b: instruction_iter.next().unwrap(), + c: instruction_iter.next().unwrap(), + } + }) + .collect(); + + let matches_more_then_3 = unknown_instructions.iter() + .filter(|unknown| { + unknown.possible_matches().len() >= 3 + }) + .count(); + + debug!(matches_more_then_3); + + + let mut opcodes: HashMap<i32, HashSet<Op>> = HashMap::new(); + for unknown in unknown_instructions { + let matches = unknown.possible_matches(); + let to_insert = match opcodes.get(&unknown.opcode) { + None => matches, + Some(existing) => existing.intersection(&matches).cloned().collect() + }; + opcodes.insert(unknown.opcode, to_insert); + } + debug!(opcodes); + + let mut known_opcodes: HashMap<i32, Op> = HashMap::new(); + + while known_opcodes.len() < 16 { + let (opcode, op) = { + let (opcode, opset) = opcodes.iter().find(|(_,set)| set.len() == 1).unwrap(); + let op = opset.iter().next().unwrap().clone(); + (opcode.clone(), op) + }; + known_opcodes.insert(opcode, op); + opcodes.iter_mut().for_each(|(_, set)| { + set.remove(&op); + }); + } + debug!(known_opcodes); + + + let input_part_2 = read_file(&PathBuf::from("inputs/16_2.txt"))?; + let instructions: Vec<Instruction> = input_part_2.iter() + .map(|line| { + let mut instruction_iter = line.split_whitespace().map(|c| c.parse::<i32>().unwrap()); + Instruction { + op: known_opcodes.get(&instruction_iter.next().unwrap()).unwrap().clone(), + a: instruction_iter.next().unwrap(), + b: instruction_iter.next().unwrap(), + c: instruction_iter.next().unwrap(), + } + }) + .collect(); + + let mut registers = [0; 4]; + for instruction in instructions { + registers = instruction.execute(®isters); + } + debug!(registers); + + Ok(()) +} diff --git a/2018/src/bin/day_17.rs b/2018/src/bin/day_17.rs new file mode 100644 index 0000000..f479c3a --- /dev/null +++ b/2018/src/bin/day_17.rs @@ -0,0 +1,175 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_17" + +struct CoordBuilder { + xmin: Option<usize>, + xmax: Option<usize>, + ymin: Option<usize>, + ymax: Option<usize> +} + +#[derive(Debug)] +struct Coord { + xmin: usize, + xmax: usize, + ymin: usize, + ymax: usize +} + +impl CoordBuilder { + fn new() -> CoordBuilder { + CoordBuilder { + xmin: None, + xmax: None, + ymin: None, + ymax: None + } + } + + fn build(&self) -> Coord { + Coord { + xmin: self.xmin.unwrap(), + xmax: self.xmax.unwrap(), + ymin: self.ymin.unwrap(), + ymax: self.ymax.unwrap(), + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum Tile { + Clay, + RunningWater, + HalfSettledWater, + SettledWater, + Sand +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/17.txt"))?; + + let clay_coords = input.iter().map(|line| { + let mut builder = CoordBuilder::new(); + for split in line.split(", ") { + if split.starts_with("x=") { + let mut range_split = split + .trim_matches(|c: char| !c.is_numeric()) + .split("..") + .map(|s| s.parse().unwrap()); + if let Some(min) = range_split.next() { + builder.xmin = Some(min); + builder.xmax = Some(min+1); + } + if let Some(max) = range_split.next() { + builder.xmax = Some(max+1); + } + } else { + let mut range_split = split + .trim_matches(|c: char| !c.is_numeric()) + .split("..") + .map(|s| s.parse().unwrap()); + if let Some(min) = range_split.next() { + builder.ymin = Some(min); + builder.ymax = Some(min+1); + } + if let Some(max) = range_split.next() { + builder.ymax = Some(max+1); + } + } + } + builder.build() + }).collect::<Vec<_>>(); + + let range = CoordinateSystem { + xmin: clay_coords.iter().min_by_key(|coord| coord.xmin).unwrap().xmin-2, + xmax: clay_coords.iter().max_by_key(|coord| coord.xmax).unwrap().xmax+2, + ymin: clay_coords.iter().min_by_key(|coord| coord.ymin).unwrap().ymin, + ymax: clay_coords.iter().max_by_key(|coord| coord.ymax).unwrap().ymax + }; + + debug!(range); + + + let mut map = vec!(Tile::Sand; range.vector_size()); + for coord in clay_coords { + for y in coord.ymin..coord.ymax { + for x in coord.xmin..coord.xmax { + map[range.to_vec(x, y)] = Tile::Clay; + } + } + } + + debug!(map[range.to_vec(500, range.ymin)]); + map[range.to_vec(500, range.ymin)] = Tile::RunningWater; + + let mut last_iter = Vec::new(); + while last_iter != map { + last_iter = map.clone(); + for y in range.ymin..range.ymax-1 { + for x in range.xmin..range.xmax { + match map[range.to_vec(x, y)] { + Tile::RunningWater => { + if map[range.to_vec(x, y+1)] == Tile::Sand { + map[range.to_vec(x, y+1)] = Tile::RunningWater; + } + if map[range.to_vec(x-1, y)] == Tile::Sand && (map[range.to_vec(x, y+1)] == Tile::Clay || map[range.to_vec(x, y+1)] == Tile::SettledWater) { + map[range.to_vec(x-1, y)] = Tile::RunningWater; + } + if map[range.to_vec(x+1, y)] == Tile::Sand && (map[range.to_vec(x, y+1)] == Tile::Clay || map[range.to_vec(x, y+1)] == Tile::SettledWater) { + map[range.to_vec(x+1, y)] = Tile::RunningWater; + } + if (map[range.to_vec(x-1, y)] == Tile::Clay || map[range.to_vec(x-1, y)] == Tile::HalfSettledWater) && (map[range.to_vec(x, y+1)] == Tile::Clay || map[range.to_vec(x, y+1)] == Tile::SettledWater) { + map[range.to_vec(x, y)] = Tile::HalfSettledWater; + } + }, + Tile::HalfSettledWater => { + if map[range.to_vec(x+1, y)] == Tile::Clay { + for xleft in 0.. { + if map[range.to_vec(x-xleft, y)] == Tile::HalfSettledWater { + map[range.to_vec(x-xleft, y)] = Tile::SettledWater; + } else { + break; + } + } + } + }, + _ => {} + } + } + } + } + + let water_tiles = map.iter() + .filter(|&&t| t == Tile::RunningWater || t == Tile::SettledWater || t == Tile::HalfSettledWater) + .count(); + debug!(water_tiles); + + let settled_water_tiles = map.iter() + .filter(|&&t| t == Tile::SettledWater) + .count(); + debug!(settled_water_tiles); + + Ok(()) +} + +#[derive(Debug)] +struct CoordinateSystem { + xmin: usize, + xmax: usize, + ymin: usize, + ymax: usize +} + +impl CoordinateSystem { + fn vector_size(&self) -> usize { + (self.xmax - self.xmin) * (self.ymax - self.ymin) + } + fn to_vec(&self, x: usize, y: usize) -> usize { + ((y - self.ymin) * (self.xmax - self.xmin)) + (x - self.xmin) + } +} diff --git a/2018/src/bin/day_18.rs b/2018/src/bin/day_18.rs new file mode 100644 index 0000000..3908ea7 --- /dev/null +++ b/2018/src/bin/day_18.rs @@ -0,0 +1,123 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +extern crate arrayvec; +use arrayvec::ArrayVec; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::HashMap; + +// cargo watch -cs "cargo run --release --bin day_18" + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +enum State { + Open, + Trees, + Lumber +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/18.txt"))?; + +// println!("Input: {:?}", input); + + let map = input.iter().map(|line| { + line.chars().map(|c| match c { + '.' => State::Open, + '|' => State::Trees, + '#' => State::Lumber, + _ => panic!("Unknown character {}", c) + }).collect::<Vec<_>>() + }).collect::<Vec<_>>(); +// debug!(map); + + let after_10 = simulate(&map, 10); + let trees_count_10: usize = after_10.iter().map(|row| row.iter().filter(|&&x| x == State::Trees).count()).sum(); + let lumber_count_10: usize = after_10.iter().map(|row| row.iter().filter(|&&x| x == State::Lumber).count()).sum(); + debug!(trees_count_10); + debug!(lumber_count_10); + debug!(trees_count_10 * lumber_count_10); + + let after_many = simulate(&map, 1000000000); + let trees_count_many: usize = after_many.iter().map(|row| row.iter().filter(|&&x| x == State::Trees).count()).sum(); + let lumber_count_many: usize = after_many.iter().map(|row| row.iter().filter(|&&x| x == State::Lumber).count()).sum(); + debug!(trees_count_many); + debug!(lumber_count_many); + debug!(trees_count_many * lumber_count_many); + + + Ok(()) +} + + +fn simulate(start_map: &Vec<Vec<State>>, duration: u32) -> Vec<Vec<State>> { + let mut previous_maps = HashMap::new(); + + let mut map = start_map.clone(); + + let mut t = 0; + while t < duration { + let map0 = map.clone(); + for y in 0..map.len() { + for x in 0..map[y].len() { + let adjacent = [ + (x.wrapping_sub(1), y.wrapping_sub(1)), + (x, y.wrapping_sub(1)), + (x+1, y.wrapping_sub(1)), + (x.wrapping_sub(1), y), + (x+1, y), + (x.wrapping_sub(1), y+1), + (x, y+1), + (x+1, y+1) + ].iter().map(|&(other_x,other_y)| { + if other_y >= map0.len() || other_x >= map0[other_y].len() { + State::Open + } else { + map0[other_y][other_x] + } + }).collect::<ArrayVec<[State; 8]>>(); + + let adjacent_trees = adjacent.iter().filter(|&&x| x == State::Trees).count(); + let adjacent_lumber = adjacent.iter().filter(|&&x| x == State::Lumber).count(); + + map[y][x] = match (map0[y][x], adjacent_trees, adjacent_lumber) { + (State::Open, trees, _) if trees >= 3 => State::Trees, + (State::Open, _, _) => State::Open, + (State::Trees, _, lumber) if lumber >= 3 => State::Lumber, + (State::Trees, _, _) => State::Trees, + (State::Lumber, trees, lumber) if trees >= 1 && lumber >= 1 => State::Lumber, + (State::Lumber, _, _) => State::Open + } + } + } + + t += match previous_maps.get(&map) { + Some(previous_t) => { + let period = t + 1 - previous_t; + let whole_periods = (duration - t - 1) / period; + (period * whole_periods) + 1 + }, + None => 1 + }; + previous_maps.insert(map.clone(), t); + } + + map +} + +fn debug_print(map: &Vec<Vec<State>>) { + for row in map { + for c in row { + print!("{}", match c { + State::Open => '.', + State::Trees => '|', + State::Lumber => '#' + }); + } + println!(); + } + println!(); + println!(); +} diff --git a/2018/src/bin/day_19.rs b/2018/src/bin/day_19.rs new file mode 100644 index 0000000..37ffef1 --- /dev/null +++ b/2018/src/bin/day_19.rs @@ -0,0 +1,139 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_19" + +#[derive(Debug)] +struct Instruction { + op: Op, + a: i32, + b: i32, + c: i32 +} + +impl Instruction { + fn execute(&self, counter_register: usize, registers: &mut [i32; 6]) -> i32{ + use Op::*; + + registers[self.c as usize] = match self.op { + Addr => registers[self.a as usize] + registers[self.b as usize], + Addi => registers[self.a as usize] + self.b, + Mulr => registers[self.a as usize] * registers[self.b as usize], + Muli => registers[self.a as usize] * self.b, + Banr => registers[self.a as usize] & registers[self.b as usize], + Bani => registers[self.a as usize] & self.b, + Borr => registers[self.a as usize] | registers[self.b as usize], + Bori => registers[self.a as usize] | self.b, + Setr => registers[self.a as usize], + Seti => self.a, + Gtir => if self.a > registers[self.b as usize] { 1 } else { 0 }, + Gtri => if registers[self.a as usize] > self.b { 1 } else { 0 }, + Gtrr => if registers[self.a as usize] > registers[self.b as usize] { 1 } else { 0 }, + Eqir => if self.a == registers[self.b as usize] { 1 } else { 0 }, + Eqri => if registers[self.a as usize] == self.b { 1 } else { 0 }, + Eqrr => if registers[self.a as usize] == registers[self.b as usize] { 1 } else { 0 }, + }; + + registers[counter_register]+1 + } +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +enum Op { + Addr, + Addi, + Mulr, + Muli, + Banr, + Bani, + Borr, + Bori, + Setr, + Seti, + Gtir, + Gtri, + Gtrr, + Eqir, + Eqri, + Eqrr +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/19.txt"))?; + + println!("Input: {:?}", input); + + let mut input_iter = input.iter(); + let counter_register: usize = input_iter.next() + .map(|line| line.split_whitespace().nth(1).unwrap().parse().unwrap()) + .unwrap(); + + let instructions: Vec<Instruction> = input_iter + .map(|line| { + let mut instruction_iter = line.split_whitespace(); + Instruction { + op: match instruction_iter.next().unwrap() { + "addr" => Op::Addr, + "addi" => Op::Addi, + "mulr" => Op::Mulr, + "muli" => Op::Muli, + "banr" => Op::Banr, + "bani" => Op::Bani, + "borr" => Op::Borr, + "bori" => Op::Bori, + "setr" => Op::Setr, + "seti" => Op::Seti, + "gtir" => Op::Gtir, + "gtri" => Op::Gtri, + "gtrr" => Op::Gtrr, + "eqir" => Op::Eqir, + "eqri" => Op::Eqri, + "eqrr" => Op::Eqrr, + _ => panic!("unknown instruction") + }, + a: instruction_iter.next().unwrap().parse().unwrap(), + b: instruction_iter.next().unwrap().parse().unwrap(), + c: instruction_iter.next().unwrap().parse().unwrap(), + } + }) + .collect(); + + debug!(counter_register); + debug!(instructions); + + let part1_registers = execute_program(&instructions, counter_register, [0; 6]); + debug!(part1_registers); + + //let part2_registers = execute_program(&instructions, counter_register, [1, 0, 0, 0, 0, 0]); + //debug!(part2_registers); + part2(); + + Ok(()) +} + +fn execute_program(instructions: &Vec<Instruction>, counter_register: usize, registers: [i32; 6]) -> [i32; 6] { + let mut counter_val: i32 = 0; + let mut registers = registers.clone(); + while counter_val >= 0 && counter_val < instructions.len() as i32 { + registers[counter_register] = counter_val; + counter_val = instructions[counter_val as usize].execute(counter_register, &mut registers); + } + + registers +} + + + +fn part2() { + let r1 = ((27*28)+29)*30*14*32 + (11 * 19 * 2 * 2) + (3 * 22) + 9; + let mut r0 = 0; + for r5 in 1..r1+1 { + if r1 % r5 == 0 { + r0 += r1 / r5; + } + } + debug!(r0); +} diff --git a/2018/src/bin/day_2.rs b/2018/src/bin/day_2.rs new file mode 100644 index 0000000..7700871 --- /dev/null +++ b/2018/src/bin/day_2.rs @@ -0,0 +1,53 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +extern crate im_rc; +use im_rc::HashMap; + +// cargo watch -cs "cargo run --release --bin day_2" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/2.txt"))?; + + println!("Input: {:?}", input); + + let (twice, thrice) = input.iter().fold((0,0), |(twice, thrice), next| { + let occurances = next.chars().fold(HashMap::new(), |occurances, c| { + let counter = occurances.get(&c).cloned().unwrap_or(0); + occurances.update(c, counter + 1) + }); + let has_twice = occurances.values().any(|count| *count == 2); + let has_thrice = occurances.values().any(|count| *count == 3); + + ( + twice + if has_twice { 1 } else { 0 }, + thrice + if has_thrice { 1 } else { 0 }, + ) + }); + + println!("Twice: {}", twice); + println!("Thrice: {}", thrice); + + let checksum = twice * thrice; + println!("Checksum: {}", checksum); + + for i in &input { + for j in &input { + let diff = i.chars().zip(j.chars()).fold(0, |diff, (x, y)| { + if x != y { + diff + 1 + } else { + diff + } + }); + if diff == 1 { + println!("Diff of 1: {} + {}", i, j); + } + } + } + + Ok(()) +} diff --git a/2018/src/bin/day_20.rs b/2018/src/bin/day_20.rs new file mode 100644 index 0000000..6486d72 --- /dev/null +++ b/2018/src/bin/day_20.rs @@ -0,0 +1,137 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::{HashSet, HashMap}; + +// cargo watch -cs "cargo run --release --bin day_20" + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +enum Dir { + N, S, E, W +} + +#[derive(Debug)] +struct Room { + doors: HashSet<Dir> +} + +impl Room { + fn new() -> Room { + Room { + doors: HashSet::new() + } + } +} + +fn main() -> Result<(), Box<Error>> { + let input = &read_file(&PathBuf::from("inputs/20.txt"))?[0]; + + println!("Input: {:?}", input); + + let rooms = populate_rooms(input); + let distances = distance_map(&rooms); + + debug!(distance_to_furthest_room(&distances)); + debug!(distances_more_than_1000(&distances)); + + Ok(()) +} + +fn populate_rooms(input: &str) -> HashMap<(i32, i32), Room> { + let mut rooms: HashMap<(i32, i32), Room> = HashMap::new(); + rooms.insert((0,0), Room::new()); + + let mut coords = vec!((0, 0)); + + let mut coord_stack: Vec<(Vec<(i32, i32)>, Vec<(i32, i32)>)> = Vec::new(); + + for c in input.chars() { + match c { + '^' | '$' => {}, + 'E' => { + for coord in &mut coords { + rooms.get_mut(coord).unwrap().doors.insert(Dir::E); + coord.0 += 1; + rooms.entry(*coord).or_insert(Room::new()); + } + }, + 'W' => { + for coord in &mut coords { + rooms.get_mut(coord).unwrap().doors.insert(Dir::W); + coord.0 -= 1; + rooms.entry(*coord).or_insert(Room::new()); + } + }, + 'N' => { + for coord in &mut coords { + rooms.get_mut(coord).unwrap().doors.insert(Dir::N); + coord.1 -= 1; + rooms.entry(*coord).or_insert(Room::new()); + } + }, + 'S' => { + for coord in &mut coords { + rooms.get_mut(coord).unwrap().doors.insert(Dir::S); + coord.1 += 1; + rooms.entry(*coord).or_insert(Room::new()); + } + }, + '(' => { + coord_stack.push((coords.clone(), Vec::new())); + }, + '|' => { + coord_stack.last_mut().unwrap().1.append(&mut coords); + coords = coord_stack.last().unwrap().0.clone(); + }, + ')' => { + coord_stack.last_mut().unwrap().1.append(&mut coords); + coords = coord_stack.pop().unwrap().1; + coords.sort(); + coords.dedup(); + }, + c => { + panic!("Unknown character {}", c); + } + } + } + + debug!(rooms.len()); + + rooms +} + +fn distance_map(rooms: &HashMap<(i32, i32), Room>) -> HashMap<(i32, i32), u32> { + let mut distances: HashMap<(i32, i32), u32> = HashMap::new(); + distances.insert((0,0), 0); + + while distances.len() < rooms.len() { + let current_max = *distances.values().max().unwrap(); + let new_distances = distances.iter() + .filter(|(_, &d)| d == current_max) + .flat_map(|(&coord, _)| { + let room = rooms.get(&coord).unwrap(); + room.doors.iter().map(|dir| match dir { + Dir::N => (coord.0, coord.1-1), + Dir::S => (coord.0, coord.1+1), + Dir::W => (coord.0-1, coord.1), + Dir::E => (coord.0+1, coord.1) + }).collect::<Vec<_>>() + }) + .collect::<Vec<_>>(); + for coord in new_distances { + distances.entry(coord).or_insert(current_max + 1); + } + } + distances +} + +fn distance_to_furthest_room(distances: &HashMap<(i32, i32), u32>) -> u32 { + distances.values().max().unwrap().clone() +} + +fn distances_more_than_1000(distances: &HashMap<(i32, i32), u32>) -> u32 { + distances.values().filter(|&&x| x >= 1000).count() as u32 +} diff --git a/2018/src/bin/day_21.rs b/2018/src/bin/day_21.rs new file mode 100644 index 0000000..0d9a97c --- /dev/null +++ b/2018/src/bin/day_21.rs @@ -0,0 +1,137 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; +use std::u32; + +use std::collections::HashMap; +// cargo watch -cs "cargo run --release --bin day_21" + +use std::i32; + +#[derive(Debug)] +struct Instruction { + op: Op, + a: i32, + b: i32, + c: i32 +} + +impl Instruction { + fn execute(&self, counter_register: usize, registers: &mut [i32; 6]) -> i32{ + use Op::*; + + registers[self.c as usize] = match self.op { + Addr => registers[self.a as usize].wrapping_add(registers[self.b as usize]), + Addi => registers[self.a as usize].wrapping_add(self.b), + Mulr => registers[self.a as usize].wrapping_mul(registers[self.b as usize]), + Muli => registers[self.a as usize].wrapping_mul(self.b), + Banr => registers[self.a as usize] & registers[self.b as usize], + Bani => registers[self.a as usize] & self.b, + Borr => registers[self.a as usize] | registers[self.b as usize], + Bori => registers[self.a as usize] | self.b, + Setr => registers[self.a as usize], + Seti => self.a, + Gtir => if self.a > registers[self.b as usize] { 1 } else { 0 }, + Gtri => if registers[self.a as usize] > self.b { 1 } else { 0 }, + Gtrr => if registers[self.a as usize] > registers[self.b as usize] { 1 } else { 0 }, + Eqir => if self.a == registers[self.b as usize] { 1 } else { 0 }, + Eqri => if registers[self.a as usize] == self.b { 1 } else { 0 }, + Eqrr => if registers[self.a as usize] == registers[self.b as usize] { 1 } else { 0 }, + }; + + registers[counter_register]+1 + } +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +enum Op { + Addr, + Addi, + Mulr, + Muli, + Banr, + Bani, + Borr, + Bori, + Setr, + Seti, + Gtir, + Gtri, + Gtrr, + Eqir, + Eqri, + Eqrr +} + + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/21.txt"))?; + + let mut input_iter = input.iter(); + let counter_register: usize = input_iter.next() + .map(|line| line.split_whitespace().nth(1).unwrap().parse().unwrap()) + .unwrap(); + + let instructions: Vec<Instruction> = input_iter + .map(|line| { + let mut instruction_iter = line.split_whitespace(); + Instruction { + op: match instruction_iter.next().unwrap() { + "addr" => Op::Addr, + "addi" => Op::Addi, + "mulr" => Op::Mulr, + "muli" => Op::Muli, + "banr" => Op::Banr, + "bani" => Op::Bani, + "borr" => Op::Borr, + "bori" => Op::Bori, + "setr" => Op::Setr, + "seti" => Op::Seti, + "gtir" => Op::Gtir, + "gtri" => Op::Gtri, + "gtrr" => Op::Gtrr, + "eqir" => Op::Eqir, + "eqri" => Op::Eqri, + "eqrr" => Op::Eqrr, + _ => panic!("unknown instruction") + }, + a: instruction_iter.next().unwrap().parse().unwrap(), + b: instruction_iter.next().unwrap().parse().unwrap(), + c: instruction_iter.next().unwrap().parse().unwrap(), + } + }) + .collect(); + + execute_program(&instructions, counter_register, [0, 0, 0, 0, 0, 0]); + + Ok(()) +} + +fn execute_program(instructions: &Vec<Instruction>, counter_register: usize, registers: [i32; 6]) { + let mut instructions_executed: u64 = 0; + let mut counter_val: i32 = 0; + let mut registers = registers.clone(); + let mut halting_values = HashMap::new(); + + while counter_val >= 0 && counter_val < instructions.len() as i32 { + if counter_val == 28 { + if halting_values.contains_key(®isters[4]) { + break; + } + halting_values.entry(registers[4]).or_insert(instructions_executed+2); + } + registers[counter_register] = counter_val; + counter_val = instructions[counter_val as usize].execute(counter_register, &mut registers); + instructions_executed += 1; + } + + let (min_halting, min_halting_time) = halting_values.iter().min_by_key(|&(_, v)| v).unwrap(); + debug!(min_halting); + debug!(min_halting_time); + let (max_halting, max_halting_time) = halting_values.iter().max_by_key(|&(_, v)| v).unwrap(); + debug!(max_halting); + debug!(max_halting_time); + +} diff --git a/2018/src/bin/day_22.rs b/2018/src/bin/day_22.rs new file mode 100644 index 0000000..f9013cf --- /dev/null +++ b/2018/src/bin/day_22.rs @@ -0,0 +1,165 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::u32; +use std::collections::{HashMap, HashSet}; + +// cargo watch -cs "cargo run --release --bin day_22" + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +struct Position { + x: u32, + y: u32, + equipment: u32 // 0 = nothing, 1 = torch, 2 = climbing +} + +impl Position { + fn adjacent(&self, map: &Vec<Vec<u32>>) -> Vec<(Position, u32)> { + let all_adjacent = [ + (Position { + x: self.x.saturating_sub(1), + ..*self + }, 1), + (Position { + y: self.y.saturating_sub(1), + ..*self + }, 1), + (Position { + x: self.x+1, + ..*self + }, 1), + (Position { + y: self.y+1, + ..*self + }, 1), + (Position { + equipment: (self.equipment+1)%3, + ..*self + }, 7), + (Position { + equipment: (self.equipment+2)%3, + ..*self + }, 7) + ]; + all_adjacent.iter() + .filter(|(p, _)| { + let region = map[p.y as usize][p.x as usize]; + let out_of_bounds = self == p; + let invalid_equipment = (region == 0 && p.equipment == 0) || + (region == 1 && p.equipment == 1) || + (region == 2 && p.equipment == 2); + !out_of_bounds && !invalid_equipment + }) + .cloned() + .collect() + } +} + +fn main() -> Result<(), Box<Error>> { + let input = &read_file(&PathBuf::from("inputs/22.txt"))?; + + let depth: u32 = input[0].trim_matches(|c: char| !c.is_numeric()).parse().unwrap(); + debug!(depth); + let mut input_target_iter = input[1] + .split(|c: char| !c.is_numeric()) + .filter(|s| !s.is_empty()) + .map(|s| s.parse::<u32>().unwrap()); + + let target_x = input_target_iter.next().unwrap(); + let target_y = input_target_iter.next().unwrap(); + + debug!((target_x, target_y)); + + let mut map_width = target_x; + let mut map_height = target_y; + let mut map = build_map(map_width, map_height, depth, target_x, target_y); + + let risk: u32 = map.iter().take((target_y+1) as usize).map(|row| row.iter().take((target_x+1) as usize).sum::<u32>()).sum(); + debug!(risk); + + + let mut distances = HashMap::new(); + let mut unexplored = HashSet::new(); + let initial = Position { + x: 0, + y: 0, + equipment: 1 + }; + let target = Position { + x: target_x, + y: target_y, + equipment: 1 + }; + distances.insert(initial, 0); + unexplored.insert(initial); + + while !distances.contains_key(&target) || unexplored.contains(&target) { + let (current, current_distance) = unexplored.iter() + .map(|unexp| (unexp.clone(), distances.get(unexp).cloned().unwrap())) + .min_by_key(|(_, d)| *d) + .unwrap(); + + if current.y+1 >= map_height { + map_height *= 2; + map = build_map(map_width, map_height, depth, target_x, target_y); + debug!(map_height); + } + if current.x+1 >= map_width { + map_width *= 2; + map = build_map(map_width, map_height, depth, target_x, target_y); + debug!(map_width); + } + + for (adjacent, further) in current.adjacent(&map) { + let distance = current_distance + further; + let best_previous_distance = distances.get(&adjacent).cloned().unwrap_or(u32::MAX); + if best_previous_distance > distance { + distances.insert(adjacent, distance); + unexplored.insert(adjacent); + } + + } + unexplored.remove(¤t); + } + + debug!(distances.get(&target)); + + Ok(()) +} + + +fn build_map(max_x: u32, max_y: u32, depth: u32, target_x: u32, target_y: u32) -> Vec<Vec<u32>> { + let mut geologic_index: Vec<Vec<u32>> = Vec::new(); + let mut erosion_level: Vec<Vec<u32>> = Vec::new(); + let mut region_type: Vec<Vec<u32>> = Vec::new(); + + for y in 0..max_y { + let mut geologic_row = Vec::new(); + let mut erosion_row = Vec::new(); + let mut type_row = Vec::new(); + + for x in 0..max_x { + let index = match (x, y) { + (0, 0) => 0, + (x, y) if x == target_x && y == target_y => 0, + (x, 0) => x*16807, + (0, y) => y*48271, + (x, y) => erosion_row[(x-1) as usize] * erosion_level[(y-1) as usize][x as usize] + }; + let erosion = (index + depth) % 20183; + let block_type = erosion % 3; + + geologic_row.push(index); + erosion_row.push(erosion); + type_row.push(block_type); + } + + geologic_index.push(geologic_row); + erosion_level.push(erosion_row); + region_type.push(type_row); + } + region_type +} diff --git a/2018/src/bin/day_23.rs b/2018/src/bin/day_23.rs new file mode 100644 index 0000000..463f3d3 --- /dev/null +++ b/2018/src/bin/day_23.rs @@ -0,0 +1,114 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; +use std::cmp; + +// cargo watch -cs "cargo run --release --bin day_23" + +#[derive(Debug, Clone)] +struct Bot { + radius: i64, + position: Position +} + +#[derive(Debug, Clone)] +struct Position { + x: i64, + y: i64, + z: i64 +} + +impl Position { + fn distance(&self, other: &Position) -> i64 { + (other.z - self.z).abs() + + (other.y - self.y).abs() + + (other.x - self.x).abs() + } +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/23.txt"))?; + + let mut bots: Vec<Bot> = input.iter().map(|line| { + let mut line_iter = line.split(|c: char| c != '-' && !c.is_numeric()) + .filter(|s| !s.is_empty()) + .map(|s| s.parse::<i64>().unwrap()); + Bot { + position: Position { + x: line_iter.next().unwrap(), + y: line_iter.next().unwrap(), + z: line_iter.next().unwrap() + }, + radius: line_iter.next().unwrap() + } + }).collect(); + + let biggest_radius = bots.iter().max_by_key(|bot| bot.radius).unwrap(); + let biggest_radius_in_range_count = bots.iter() + .filter(|bot| biggest_radius.position.distance(&bot.position) <= biggest_radius.radius) + .count(); + debug!(biggest_radius); + debug!(biggest_radius_in_range_count); + + + let min_x = bots.iter().min_by_key(|bot| bot.position.x).unwrap().position.x; + let max_x = bots.iter().max_by_key(|bot| bot.position.x).unwrap().position.x; + debug!(min_x); + debug!(max_x); + let min_y = bots.iter().min_by_key(|bot| bot.position.y).unwrap().position.y; + let max_y = bots.iter().max_by_key(|bot| bot.position.y).unwrap().position.y; + debug!(min_y); + debug!(max_y); + let min_z = bots.iter().min_by_key(|bot| bot.position.z).unwrap().position.z; + let max_z = bots.iter().max_by_key(|bot| bot.position.z).unwrap().position.z; + debug!(min_z); + debug!(max_z); + + let origin = Position { x: 0, y: 0, z: 0 }; + + let mut radius = cmp::max(max_x - min_x, cmp::max(max_y-min_y, max_z-min_z)); + let mut center = origin.clone(); + + while radius > 0 { + let delta = 0.8; + let new_radius = if radius == 1 { 0 } else { (radius as f32 * delta) as i64 }; + let deltas = [-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0]; + let subs: Vec<Position> = deltas.iter().flat_map(|&dx| { + deltas.iter().flat_map(|&dy| { + deltas.iter().map(|&dz| { + Position { + x: center.x + (radius as f32 * dx) as i64, + y: center.y + (radius as f32 * dy) as i64, + z: center.z + (radius as f32 * dz) as i64 + } + }).collect::<Vec<_>>() + }).collect::<Vec<_>>() + }).collect(); + + center = subs.iter() + .map(|new_center| { + (new_center, bots.iter() + .filter(|bot| bot.position.distance(&new_center) <= bot.radius + new_radius) + .count()) + }) + .max_by(|(a_center, a_bots), (b_center, b_bots)| { + a_bots.cmp(&b_bots).then(b_center.distance(&origin).cmp(&a_center.distance(&origin))) + }) + .map(|(center, _)| center) + .unwrap().clone(); + + radius = new_radius; + } + + let connected_in_radius = bots.iter() + .filter(|bot| bot.position.distance(¢er) <= bot.radius) + .count(); + debug!(connected_in_radius); + debug!(center); + let distance_to_origin = center.distance(&origin); + debug!(distance_to_origin); + + Ok(()) +} diff --git a/2018/src/bin/day_24.rs b/2018/src/bin/day_24.rs new file mode 100644 index 0000000..d52f7d0 --- /dev/null +++ b/2018/src/bin/day_24.rs @@ -0,0 +1,217 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; +use std::str::FromStr; + +use std::collections::HashMap; + +// cargo watch -cs "cargo run --release --bin day_24" + +#[derive(Debug, Clone)] +struct Army { + units: u32, + hp: u32, + weaknesses: Vec<String>, + immunities: Vec<String>, + damage_type: String, + damage: u32, + initiative: u32 +} + +impl Army { + fn effective_power(&self) -> u32 { + self.units * self.damage + } + + fn actual_damage(&self, other: &Army) -> u32 { + let modifier = if other.weaknesses.contains(&self.damage_type) { + 2 + } else if other.immunities.contains(&self.damage_type) { + 0 + } else { + 1 + }; + self.effective_power() * modifier + } +} + +impl FromStr for Army { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + // 2991 units each with 8084 hit points (weak to fire) with an attack that does 19 radiation damage at initiative 11 + let mut words = s.split_whitespace(); + let units = words.next().unwrap().parse()?; + let hp = words.nth(3).unwrap().parse()?; + let _ = words.nth(1); + + let mut weaknesses = Vec::new(); + let mut immunities = Vec::new(); + + let mut bracket_handled = false; + while !bracket_handled { + let maybe_weak_or_immune = words.next().unwrap().trim_matches(|c: char| !c.is_alphabetic()); + if maybe_weak_or_immune == "weak" { + let mut weakness = words.nth(1).unwrap(); + weaknesses.push(weakness.trim_matches(|c: char| !c.is_alphabetic()).to_string()); + while weakness.ends_with(',') { + weakness = words.next().unwrap(); + weaknesses.push(weakness.trim_matches(|c: char| !c.is_alphabetic()).to_string()); + } + } + else if maybe_weak_or_immune == "immune" { + let mut immunity = words.nth(1).unwrap(); + immunities.push(immunity.trim_matches(|c: char| !c.is_alphabetic()).to_string()); + while immunity.ends_with(',') { + immunity = words.next().unwrap(); + immunities.push(immunity.trim_matches(|c: char| !c.is_alphabetic()).to_string()); + } + } + else { + bracket_handled = true; + } + } + let damage = words.nth(4).unwrap().parse()?; + let damage_type = words.next().unwrap().to_string(); + let initiative = words.nth(3).unwrap().parse()?; + + Ok(Army { + units, hp, weaknesses, immunities, damage_type, damage, initiative + }) + } +} + + + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/24.txt"))?; + + let mut input_iter = input.iter(); + let _ = input_iter.next(); + let immune_army: Vec<Army> = input_iter.by_ref() + .take_while(|&line| line != "Infection:") + .map(|line| line.parse().unwrap()) + .collect(); + let infection_army: Vec<Army> = input_iter + .map(|line| line.parse().unwrap()) + .collect(); + + let (unboosted_immune_army_size, unboosted_infection_army_size) = simulate(&immune_army, &infection_army, 0); + debug!(unboosted_immune_army_size); + debug!(unboosted_infection_army_size); + + for boost in 0.. { + debug!(boost); + let (immune_army_size, infection_army_size) = simulate(&immune_army, &infection_army, boost); + debug!(immune_army_size); + debug!(infection_army_size); + if immune_army_size > 0 { + break; + } + } + + Ok(()) +} + + +fn target_selection(targeting_army: &Vec<Army>, targeted_army: &Vec<Army>) -> HashMap<usize, usize> { + let mut targets = HashMap::new(); + for (i, army) in targeting_army.iter().enumerate() { + let best_target = (0..targeted_army.len()) + .filter(|potential_target| !targets.values().any(|targeted| targeted == potential_target)) + .fold(None, |best_target, next| { + let next_actual_damage = army.actual_damage(&targeted_army[next]); + let last_best_actual_damage = best_target.map(|best_target| army.actual_damage(&targeted_army[best_target])).unwrap_or(0); + let next_effective_power = targeted_army[next].effective_power(); + let last_best_effective_power = best_target.map(|best_target: usize| targeted_army[best_target].effective_power()).unwrap_or(0); + let next_initiative = targeted_army[next].initiative; + let last_best_initiative = best_target.map(|best_target| targeted_army[best_target].initiative).unwrap_or(0); + if next_actual_damage == 0 && last_best_actual_damage == 0 { + None + } else if next_actual_damage > last_best_actual_damage { + Some(next) + } else if next_actual_damage == last_best_actual_damage && next_effective_power > last_best_effective_power { + Some(next) + } else if next_actual_damage == last_best_actual_damage && next_effective_power == last_best_effective_power && next_initiative > last_best_initiative { + Some(next) + } else { + best_target + } + }); + + if let Some(best_target) = best_target { + targets.insert(i, best_target); + } + } + + targets +} + +fn attack(aggressor: &Army, target: &mut Army) { + let damage = aggressor.actual_damage(target); + let units_destroyed = damage / target.hp; + target.units = target.units.saturating_sub(units_destroyed); +} + + +fn simulate(immune_army: &[Army], infection_army: &[Army], boost: u32) -> (u32, u32) { + let mut infection_army = Vec::from(infection_army); + + let mut immune_army: Vec<Army> = immune_army.iter().map(|army| Army { + damage: army.damage + boost, + ..army.clone() + }).collect(); + + let mut watchdog_sum = immune_army.iter().map(|a| a.units).sum::<u32>() + infection_army.iter().map(|a| a.units).sum::<u32>(); + while immune_army.len() > 0 && infection_army.len() > 0 { + immune_army.sort_by(|a, b| b.effective_power().cmp(&a.effective_power()).then(b.initiative.cmp(&a.initiative))); + infection_army.sort_by(|a, b| b.effective_power().cmp(&a.effective_power()).then(b.initiative.cmp(&a.initiative))); + + let mut immune_targets = target_selection(&immune_army, &infection_army); + let mut infection_targets = target_selection(&infection_army, &immune_army); + + while immune_targets.len() > 0 || infection_targets.len() > 0 { + let next_immune = immune_targets.keys() + .map(|&k| (k, immune_army[k].initiative.clone())) + .max_by_key(|(_, initiative)| *initiative); + let next_infection = infection_targets.keys() + .map(|&k| (k, infection_army[k].initiative.clone())) + .max_by_key(|(_, initiative)| *initiative); + match (next_immune, next_infection) { + (None, None) => { + panic!("No targets left") + }, + (Some((immune_key, immune_init)), Some((_infect_key, infect_init))) if immune_init > infect_init => { + attack(&immune_army[immune_key], &mut infection_army[*immune_targets.get(&immune_key).unwrap()]); + immune_targets.remove(&immune_key); + }, + (Some((_immune_key, _immune_init)), Some((infect_key, _infect_init))) => { + attack(&infection_army[infect_key], &mut immune_army[*infection_targets.get(&infect_key).unwrap()]); + infection_targets.remove(&infect_key); + }, + (Some((immune_key, _immune_init)), None) => { + attack(&immune_army[immune_key], &mut infection_army[*immune_targets.get(&immune_key).unwrap()]); + immune_targets.remove(&immune_key); + }, + (None, Some((infect_key, _infect_init))) => { + attack(&infection_army[infect_key], &mut immune_army[*infection_targets.get(&infect_key).unwrap()]); + infection_targets.remove(&infect_key); + } + }; + } + + immune_army.retain(|a| a.units > 0); + infection_army.retain(|a| a.units > 0); + + let new_watchdog_sum = immune_army.iter().map(|a| a.units).sum::<u32>() + infection_army.iter().map(|a| a.units).sum::<u32>(); + if watchdog_sum == new_watchdog_sum { + // Stalemate! Everyone loses. + return (0, 0); + } + watchdog_sum = new_watchdog_sum; + } + + (immune_army.iter().map(|a| a.units).sum(), infection_army.iter().map(|a| a.units).sum()) +} diff --git a/2018/src/bin/day_25.rs b/2018/src/bin/day_25.rs new file mode 100644 index 0000000..9e74f49 --- /dev/null +++ b/2018/src/bin/day_25.rs @@ -0,0 +1,47 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_25" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/25.txt"))?; + + let mut constellations: Vec<Vec<Vec<i32>>> = input.iter() + .map(|line| line.split(',').map(|x| x.parse().unwrap()).collect::<Vec<_>>()) + .map(|points| vec!(points)) + .collect(); + + // debug!(constellations); + + while join_constellations(&mut constellations) { + } + + debug!(constellations.len()); + + Ok(()) +} + +fn distance(xs: &[i32], ys: &[i32]) -> i32 { + xs.iter().zip(ys.iter()).map(|(x,y)| (x - y).abs()).sum() +} + +fn join_constellations(constellations: &mut Vec<Vec<Vec<i32>>>) -> bool { + for i in 0..constellations.len()-1 { + for j in i+1..constellations.len() { + let connected = constellations[i].iter().any(|ci| { + constellations[j].iter().any(|cj| { + distance(&ci, &cj) <= 3 + }) + }); + if connected { + let mut to_join = constellations.remove(j); + constellations[i].append(&mut to_join); + return true; + } + } + } + false +} diff --git a/2018/src/bin/day_3.rs b/2018/src/bin/day_3.rs new file mode 100644 index 0000000..685e288 --- /dev/null +++ b/2018/src/bin/day_3.rs @@ -0,0 +1,76 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::str::FromStr; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::HashMap; + +// cargo watch -cs "cargo run --release --bin day_3" + +#[derive(Debug)] +struct Claim { + id: u32, + x: u32, + y: u32, + w: u32, + h: u32 +} + +impl FromStr for Claim { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + //#123 @ 3,2: 5x4 + let split = s + .split(|c: char| !c.is_numeric()) + .filter(|s| !s.is_empty()) + .map(|s| s.parse()) + .collect::<Result<Vec<u32>, _>>()?; + + Ok(Claim { + id: split[0], + x: split[1], + y: split[2], + w: split[3], + h: split[4] + }) + } +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/3.txt"))?; + let claims = input.iter().map(|line| line.parse::<Claim>()).collect::<Result<Vec<_>, _>>()?; + + let mut claimed = HashMap::new(); + for claim in &claims { + for x in claim.x..claim.x+claim.w { + for y in claim.y..claim.y+claim.h { + *claimed.entry((x,y)).or_insert(0) += 1; + } + } + } + + let conflicts = claimed.values().filter(|&x| *x > 1).count(); + println!("Conflicts: {}", conflicts); + + let conflict_free = claims.iter().filter(|c| check_for_conflicts(c, &claimed)).collect::<Vec<_>>(); + + println!("Conflict free: {:?}", conflict_free); + + Ok(()) +} + + +fn check_for_conflicts(claim: &Claim, claimed: &HashMap<(u32, u32), u32>) -> bool { + for x in claim.x..claim.x+claim.w { + for y in claim.y..claim.y+claim.h { + if claimed.get(&(x,y)).map_or(false, |c| *c > 1) { + return false; + } + } + } + true +} diff --git a/2018/src/bin/day_4.rs b/2018/src/bin/day_4.rs new file mode 100644 index 0000000..2010cf8 --- /dev/null +++ b/2018/src/bin/day_4.rs @@ -0,0 +1,116 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::str::FromStr; + +use std::error::Error; +use std::path::PathBuf; +use std::collections::HashMap; + +// cargo watch -cs "cargo run --release --bin day_4" + +#[derive(Debug, PartialOrd, Ord, PartialEq, Eq)] +struct Event { + date: String, + hour: u32, + minute: u32, + what: EventType +} + +#[derive(Debug, PartialOrd, Ord, PartialEq, Eq)] +enum EventType { + BeginShift(u32), + Asleep, + Awake +} + +impl FromStr for Event { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let date = s.split_whitespace().nth(0).unwrap().trim_matches('[').to_string(); + let time = s.split_whitespace().nth(1).unwrap().trim_matches(']'); + let hour = time.split(':').nth(0).unwrap().parse().unwrap(); + let minute = time.split(':').nth(1).unwrap().parse().unwrap(); + let guard = s.split_whitespace().nth(3).and_then(|x| x.trim_matches('#').parse().ok()); + + let what = match s.split_whitespace().nth(2).unwrap() { + "Guard" => EventType::BeginShift(guard.unwrap()), + "falls" => EventType::Asleep, + "wakes" => EventType::Awake, + _ => panic!("Unknown event") + }; + + Ok(Event { + date, + hour, + minute, + what + }) + } +} + +#[derive(Debug)] +struct GuardSleepStats { + per_minute: HashMap<u32, u32> +} + +impl GuardSleepStats { + fn new() -> GuardSleepStats { + GuardSleepStats { + per_minute: HashMap::new() + } + } + fn total(&self) -> u32 { + self.per_minute.values().sum() + } +} + + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/4.txt"))?; + + //println!("Input: {:?}", input); + + let mut events: Vec<Event> = input.iter().map(|line| line.parse().unwrap()).collect(); + events.sort(); + //println!("Events: {:?}", events); + + + let mut sleep = HashMap::new(); + let mut current_guard = 0; + let mut last_asleep = 0; + for event in events { + match event.what { + EventType::BeginShift(guard) => current_guard = guard, + EventType::Asleep => last_asleep = event.minute, + EventType::Awake => { + for i in last_asleep..event.minute { + *sleep + .entry(current_guard) + .or_insert(GuardSleepStats::new()) + .per_minute + .entry(i) + .or_insert(0) += 1 + } + } + } + } + + println!("Stats: {:?}", sleep); + + let (sleepiest_guard, sleepiest_stats) = sleep.iter().max_by_key(|(_,v)| v.total()).unwrap().clone(); + println!("Sleepiest guard: {:?}", sleepiest_guard); + let (sleepiest_minute, sleepiest_occurances) = sleepiest_stats.per_minute.iter().max_by_key(|(_,v)| *v).unwrap().clone(); + println!("Sleepiest minute: {:?}", sleepiest_minute); + println!("Part 1 answer: {}", sleepiest_guard * sleepiest_minute); + + + let (specific_minute_offender, specific_minute_stats) = sleep.iter().max_by_key(|(_,v)| v.per_minute.values().max().unwrap()).unwrap().clone(); + println!("Specific minute: {:?}", specific_minute_offender); + let (specific_minute_minute, specific_minute_occurances) = specific_minute_stats.per_minute.iter().max_by_key(|(_,v)| *v).unwrap().clone(); + println!("Specific Minute minute: {:?}", specific_minute_minute); + println!("Part 2 answer: {}", specific_minute_offender * specific_minute_minute); + + Ok(()) +} diff --git a/2018/src/bin/day_5.rs b/2018/src/bin/day_5.rs new file mode 100644 index 0000000..2b24d4c --- /dev/null +++ b/2018/src/bin/day_5.rs @@ -0,0 +1,53 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; +use std::cmp; + +// cargo watch -cs "cargo run --release --bin day_5" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/5.txt"))?; + + //println!("Input: {:?}", input); + let polymer = { + let mut polymer: Vec<char> = input[0].chars().collect(); + reduce(&mut polymer); + polymer + }; + + debug!(polymer.len()); + + + let mut min_length = polymer.len(); + for c in "abcdefghijklmnopqrstuvwxyz".chars() { + let mut polymer_without_char = polymer.clone(); + polymer_without_char.retain(|x| x.to_ascii_lowercase() != c); + reduce(&mut polymer_without_char); + min_length = cmp::min(min_length, polymer_without_char.len()); + } + + debug!(min_length); + + Ok(()) +} + + +fn reduce(polymer: &mut Vec<char>) { + let mut had_reductions = true; + while had_reductions { + had_reductions = false; + + for i in 0..polymer.len()-1 { + if polymer[i].to_ascii_lowercase() == polymer[i+1].to_ascii_lowercase() && polymer[i] != polymer[i+1] { + had_reductions = true; + polymer.remove(i+1); + polymer.remove(i); + + // break isn't efficient, but does prevent indexing issues after removing + break; + } + } + } +} diff --git a/2018/src/bin/day_6.rs b/2018/src/bin/day_6.rs new file mode 100644 index 0000000..16c8782 --- /dev/null +++ b/2018/src/bin/day_6.rs @@ -0,0 +1,103 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::{HashSet, HashMap}; + +// cargo watch -cs "cargo run --release --bin day_6" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/6.txt"))?; + let coordinates = input.iter().map(|line| { + let mut split = line.split(|c: char| !c.is_numeric()); + let x: i32 = split.next().unwrap().parse().unwrap(); + let _ = split.next(); + let y: i32 = split.next().unwrap().parse().unwrap(); + (x, y) + }).collect::<Vec<_>>(); + debug!(coordinates); + + let min_x = coordinates.iter().map(|(x, _)| x).min().unwrap().clone(); + let max_x = coordinates.iter().map(|(x, _)| x).max().unwrap().clone(); + let min_y = coordinates.iter().map(|(_, y)| y).min().unwrap().clone(); + let max_y = coordinates.iter().map(|(_, y)| y).max().unwrap().clone(); + + debug!(min_x); + debug!(max_x); + debug!(min_y); + debug!(max_y); + + let mut infinite = HashSet::new(); + for x in min_x..max_x+1 { + for y in &[0, max_y] { + if let Some(coord) = find_closest(&coordinates, x, *y) { + infinite.insert(coord); + } + } + } + for y in min_y..max_y+1 { + for x in &[0, max_x] { + if let Some(coord) = find_closest(&coordinates, *x, y) { + infinite.insert(coord); + } + } + } + + debug!(infinite); + + + let mut areas = HashMap::new(); + for x in min_x..max_x+1 { + for y in min_y..max_y+1 { + if let Some(coord) = find_closest(&coordinates, x, y) { + *areas.entry(coord).or_insert(0) += 1; + } + } + } + + debug!(areas); + + let biggest_non_infinite = areas.iter() + .filter(|(k,_)| !infinite.contains(&k)) + .max_by_key(|(_,v)| *v); + debug!(biggest_non_infinite); + + + + let safe_distance = 10000; + let mut safe_size = 0; + for x in min_x..max_x+1 { + for y in min_y..max_y+1 { + let distance_sum: i32 = coordinates.iter() + .map(|(x1, y1)| manhattan_distance(*x1, *y1, x, y)) + .sum(); + if distance_sum < safe_distance { + safe_size += 1; + } + } + } + debug!(safe_size); + + Ok(()) +} + +fn find_closest(coordinates: &Vec<(i32, i32)>, x: i32, y: i32) -> Option<usize> { + let mut distances = coordinates.iter() + .map(|(x1, y1)| manhattan_distance(*x1, *y1, x, y)) + .enumerate() + .collect::<Vec<_>>(); + distances.sort_by_key(|(_, d)| *d); + + if distances[0] == distances[1] { + None + } + else { + distances.first().map(|(i, _)| *i) + } +} + +fn manhattan_distance(x1: i32, y1: i32, x2: i32, y2: i32) -> i32 { + (x2-x1).abs() + (y2-y1).abs() +} diff --git a/2018/src/bin/day_7.rs b/2018/src/bin/day_7.rs new file mode 100644 index 0000000..ec9d0be --- /dev/null +++ b/2018/src/bin/day_7.rs @@ -0,0 +1,135 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::{HashMap, HashSet}; + +// cargo watch -cs "cargo run --release --bin day_7" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/7.txt"))?; + + //println!("Input: {:?}", input); + + let (all_steps, blockers) = parse(&input); + + + let mut serial_ordered = Vec::new(); + let mut remaining_steps = all_steps.clone(); + let mut remaining_blockers = blockers.clone(); + + while !remaining_steps.is_empty() { + let mut unblocked: Vec<char> = remaining_steps.iter() + .filter(|c| remaining_blockers.get(c).map(|blockers| blockers.is_empty()).unwrap_or(true)) + .cloned() + .collect(); + unblocked.sort(); + + let next_step = unblocked.first().unwrap().clone(); + + serial_ordered.push(next_step); + remaining_steps.remove(&next_step); + for (_k, mut v) in &mut remaining_blockers { + v.retain(|c| *c != next_step); + } + } + + debug!(serial_ordered); + for c in serial_ordered { + print!("{}", c); + } + println!(); + + + let workers = 5; + let mut worker_tasks: Vec<Task> = Vec::new(); + let mut parallel_ordered = Vec::new(); + let mut remaining_steps = all_steps.clone(); + let mut remaining_blockers = blockers.clone(); + let mut current_time = 0; + + while !remaining_steps.is_empty() { + let mut unblocked: Vec<char> = remaining_steps.iter() + .filter(|c| + remaining_blockers.get(c).map(|blockers| blockers.is_empty()).unwrap_or(true) + && !worker_tasks.iter().any(|w| w.t == **c) + ) + .cloned() + .collect(); + unblocked.sort(); + + let next_unblocked = if worker_tasks.len() < workers { + unblocked.first().cloned() + } else { + None + }; + + if let Some(next_task) = next_unblocked { + worker_tasks.push(Task { + t: next_task, + completion: current_time + time(next_task) + }); + } + else { + //Advance time + worker_tasks.sort_by_key(|w| w.completion); + let complete = worker_tasks.swap_remove(0); + current_time = complete.completion; + let next_step = complete.t; + + parallel_ordered.push(next_step); + remaining_steps.remove(&next_step); + for (_k, mut v) in &mut remaining_blockers { + v.retain(|c| *c != next_step); + } + } + + + } + + debug!(parallel_ordered); + for c in parallel_ordered { + print!("{}", c); + } + println!(); + debug!(current_time); + + + Ok(()) +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +struct Task { + t: char, + completion: u32 +} + + +fn parse(input: &Vec<String>) -> (HashSet<char>, HashMap<char, Vec<char>>) { + let mut blockers = HashMap::new(); + let mut all_steps = HashSet::new(); + + for line in input { + //Step I must be finished before step C can begin. + let mut split = line.split_whitespace(); + let blocker: char = split.nth(1).and_then(|x| x.chars().nth(0)).unwrap(); + let blocked: char = split.nth(5).and_then(|x| x.chars().nth(0)).unwrap(); + + blockers.entry(blocked).or_insert(Vec::new()).push(blocker); + all_steps.insert(blocker); + all_steps.insert(blocked); + } + + debug!(all_steps); + debug!(blockers); + + (all_steps, blockers) +} + +fn time(c: char) -> u32 { + let base_time = 60; + let char_time = c as u32 - 'A' as u32 + 1; + base_time + char_time +} diff --git a/2018/src/bin/day_8.rs b/2018/src/bin/day_8.rs new file mode 100644 index 0000000..59813b0 --- /dev/null +++ b/2018/src/bin/day_8.rs @@ -0,0 +1,66 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::slice::Iter; + +// cargo watch -cs "cargo run --release --bin day_8" + +fn main() -> Result<(), Box<Error>> { + let input: Vec<u32> = read_file(&PathBuf::from("inputs/8.txt")) + .map(|lines| lines[0] + .split_whitespace() + .map(|s| s.parse().unwrap()) + .collect() + )?; + + //println!("Input: {:?}", input); + + let metadata_sum = sum_metadata(&mut input.iter()); + debug!(metadata_sum); + + let value = node_value(&mut input.iter()); + debug!(value); + + Ok(()) +} + +fn sum_metadata(iter: &mut Iter<'_, u32>) -> u32 { + let num_children = iter.next().unwrap().clone(); + let num_metadata = iter.next().unwrap().clone(); + + let children_sum: u32 = (0..num_children) + .map(|_| sum_metadata(iter)) + .sum(); + + let metadata_sum: u32 = (0..num_metadata) + .map(|_| iter.next().unwrap()) + .sum(); + + children_sum + metadata_sum +} + + +fn node_value(iter: &mut Iter<'_, u32>) -> u32 { + let num_children = iter.next().unwrap().clone(); + let num_metadata = iter.next().unwrap().clone(); + + let node_values: Vec<u32> = (0..num_children) + .map(|_| node_value(iter)) + .collect(); + + let metadata: Vec<u32> = (0..num_metadata) + .map(|_| iter.next().unwrap().clone()) + .collect(); + + if num_children == 0 { + metadata.iter().sum() + } else { + metadata.iter() + .filter(|m| **m > 0 && **m-1 < num_children) + .map(|m| node_values[*m as usize - 1]) + .sum() + } +} diff --git a/2018/src/bin/day_9.rs b/2018/src/bin/day_9.rs new file mode 100644 index 0000000..3f85620 --- /dev/null +++ b/2018/src/bin/day_9.rs @@ -0,0 +1,91 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; + +use std::collections::LinkedList; + +// cargo watch -cs "cargo run --release --bin day_9" + +fn main() -> Result<(), Box<Error>> { + debug!(get_winning_player_score(438, 71626)); + debug!(get_winning_player_score(438, 71626*100)); + + Ok(()) +} + + +fn get_winning_player_score(players: usize, last_marble_score: u32) -> u32 { + let mut marbles_head = LinkedList::new(); + let mut marbles_tail = LinkedList::new(); + marbles_head.push_back(0); + + let mut current_player = 0; + let mut next_marble = 1; + let mut scores = vec!(0; players); + + while next_marble <= last_marble_score { + if next_marble % 23 == 0 { + move_backwards(&mut marbles_head, &mut marbles_tail, 7); + let removed = marbles_head.pop_back().expect("Going backwards should have ended with pushing to head"); + move_forward(&mut marbles_head, &mut marbles_tail, 1); + + let score = next_marble + removed; + scores[current_player] += score; + } else { + move_forward(&mut marbles_head, &mut marbles_tail, 1); + marbles_head.push_back(next_marble); + } + + next_marble += 1; + current_player = (current_player + 1) % players; + } + + scores.iter().max().unwrap().clone() +} + +// WARNING: These don't play well with empty lists +fn move_forward(marbles_head: &mut LinkedList<u32>, marbles_tail: &mut LinkedList<u32>, i: usize) { + if i != 0 { + match marbles_tail.pop_front() { + Some(marble) => { + marbles_head.push_back(marble); + move_forward(marbles_head, marbles_tail, i-1); + }, + None => { + marbles_tail.append(marbles_head); + move_forward(marbles_head, marbles_tail, i); + }, + } + } +} + +fn move_backwards(marbles_head: &mut LinkedList<u32>, marbles_tail: &mut LinkedList<u32>, i: usize) { + if i != 0 { + match marbles_head.pop_back() { + Some(marble) => { + marbles_tail.push_front(marble); + move_backwards(marbles_head, marbles_tail, i-1); + }, + None => { + marbles_head.append(marbles_tail); + move_backwards(marbles_head, marbles_tail, i); + }, + } + } +} + + +#[test] +fn trivial() { + assert_eq!(get_winning_player_score(9, 32), 32); +} + +#[test] +fn examples() { + assert_eq!(get_winning_player_score(10, 1618), 8317); + assert_eq!(get_winning_player_score(13, 7999), 146373); + assert_eq!(get_winning_player_score(17, 1104), 2764); + assert_eq!(get_winning_player_score(21, 6111), 54718); + assert_eq!(get_winning_player_score(30, 5807), 37305); +} diff --git a/2018/src/lib.rs b/2018/src/lib.rs new file mode 100644 index 0000000..72520fe --- /dev/null +++ b/2018/src/lib.rs @@ -0,0 +1,31 @@ +use std::path::PathBuf; +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +/// Reads a specified file into a vector of strings, one line of the +/// file per string. Fails if any part of reading the file fails. +pub fn read_file(file: &PathBuf) -> Result<Vec<String>, std::io::Error> { + let file = File::open(file)?; + let file_reader = BufReader::new(file); + file_reader.lines() + .collect::<Result<Vec<_>, _>>() + .map(preprocess_file_lines) +} + +/// Removes any empty lines and makes sure that lines don't have +/// problematic whitespace. +pub fn preprocess_file_lines(lines: Vec<String>) -> Vec<String> { + lines.iter() + .filter(|line| line.len() > 0) + .map(|line| line.trim_right().to_string()) + .collect() +} + + +#[macro_export] +macro_rules! debug { + ( $x:expr ) => { + println!("{} = {:?}", stringify!($x), $x); + }; +} diff --git a/2019/Cargo.lock b/2019/Cargo.lock new file mode 100644 index 0000000..52c69da --- /dev/null +++ b/2019/Cargo.lock @@ -0,0 +1,580 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "ansi_term" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aoc2019" +version = "0.1.0" +dependencies = [ + "archery 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "cached 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "derive_more 0.99.2 (registry+https://github.com/rust-lang/crates.io-index)", + "im 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rpds 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "archery" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "atty" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "autocfg" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "bitmaps" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cached" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "clap" +version = "2.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)", + "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-deque" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-queue" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "derivative" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "derive_more" +version = "0.99.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "either" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "heck" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "hermit-abi" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "im" +version = "14.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitmaps 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "rand_xoshiro 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "sized-chunks 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", + "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "libc" +version = "0.2.66" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memoffset" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", + "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", + "num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-bigint" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-complex" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-integer" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-iter" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-rational" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", + "num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", + "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num_cpus" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "once_cell" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "proc-macro-error" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "proc-macro2" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quote" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "quote" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "rand_xoshiro" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rayon" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rayon-core" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rpds" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "archery 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "scopeguard" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "sized-chunks" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "bitmaps 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "static_assertions" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "structopt" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)", + "structopt-derive 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "structopt-derive" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syn" +version = "0.15.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "syn" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "typenum" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-segmentation" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-width" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-xid" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "unicode-xid" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "vec_map" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "version_check" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +"checksum archery 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d308d8fa3f687f7a7588fccc4812ed6914be09518232f00454693a7417273ad2" +"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90" +"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" +"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +"checksum bitmaps 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "81e039a80914325b37fde728ef7693c212f0ac913d5599607d7b95a9484aae0b" +"checksum cached 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b052fd10f32987c3bd028d91ef86190b36fba5c8fccb5515d42083f061e6104" +"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" +"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" +"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" +"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700" +"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" +"checksum derivative 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "942ca430eef7a3806595a6737bc388bf51adb888d3fc0dd1b50f1c170167ee3a" +"checksum derive_more 0.99.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2159be042979966de68315bce7034bb000c775f22e3e834e1c52ff78f041cae8" +"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" +"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" +"checksum hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7" +"checksum im 14.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a1f9b6540e530defef7f2df4ed330d45b739b10450548c74a9913f63ea1acc6b" +"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" +"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" +"checksum num 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf4825417e1e1406b3782a8ce92f4d53f26ec055e3622e1881ca8e9f5f9e08db" +"checksum num-bigint 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f9c3f34cdd24f334cb265d9bf8bfa8a241920d026916785747a92f0e55541a1a" +"checksum num-complex 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "fcb0cf31fb3ff77e6d2a6ebd6800df7fdcd106f2ad89113c9130bcd07f93dffc" +"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" +"checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e" +"checksum num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454" +"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4" +"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" +"checksum once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "891f486f630e5c5a4916c7e16c4b24a53e78c860b646e9f8e005e4f16847bfed" +"checksum proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097" +"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" +"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27" +"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" +"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" +"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +"checksum rand_xoshiro 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9fcdd2e881d02f1d9390ae47ad8e5696a9e4be7b547a1da2afbc61973217004" +"checksum rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098" +"checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9" +"checksum rpds 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1196a0a2f52d343bd32179834273eaac7d8739f7e3f8b700227d2fa06b9a423b" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +"checksum sized-chunks 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62db64dd92b3b54314b1e216c274634ca2b3fe8da8b3873be670cb1ac4dad30f" +"checksum static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3" +"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +"checksum structopt 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "30b3a3e93f5ad553c38b3301c8a0a0cec829a36783f6a0c467fc4bf553a5f5bf" +"checksum structopt-derive 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ea692d40005b3ceba90a9fe7a78fa8d4b82b0ce627eebbffc329aab850f3410e" +"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" +"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238" +"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9" +"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" +"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20" +"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" +"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" +"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" +"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/2019/Cargo.toml b/2019/Cargo.toml new file mode 100644 index 0000000..c5937b0 --- /dev/null +++ b/2019/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "aoc2019" +version = "0.1.0" +authors = ["Justin Wernick <justin@worthe-it.co.za>"] +edition = "2018" + +[dependencies] +structopt = "0.3.5" +derive_more = "0.99.2" +derivative = "1.0.3" +im = "14.0.0" +rpds = "0.7.0" +archery = "0.3.0" +num = "0.2" +rayon = "1.3.0" +cached = "0.11.0" + +[profile.release] +debug = true diff --git a/2019/inputs/day_1.txt b/2019/inputs/day_1.txt new file mode 100644 index 0000000..5c720ed --- /dev/null +++ b/2019/inputs/day_1.txt @@ -0,0 +1,100 @@ +66690 +86239 +75191 +140364 +95979 +106923 +95229 +123571 +84764 +89444 +98107 +89062 +109369 +146067 +124760 +76900 +139198 +111441 +74046 +84920 +54397 +143807 +121654 +93863 +73909 +104121 +58485 +119084 +126227 +142078 +79820 +132617 +108430 +98032 +107434 +127307 +105619 +57741 +53468 +63301 +137970 +136780 +80897 +133205 +79159 +89124 +94477 +56714 +143704 +122097 +117335 +108246 +75507 +101459 +101162 +146197 +121884 +66217 +57074 +142903 +140951 +64883 +124556 +67382 +142407 +121778 +57933 +94599 +87426 +143758 +64043 +65678 +90137 +61090 +77315 +102383 +146607 +139290 +85394 +149787 +125611 +106405 +91561 +135739 +54845 +68782 +111175 +61011 +125658 +70751 +85607 +75458 +75419 +124311 +66022 +122784 +129018 +54901 +73788 +108240 diff --git a/2019/inputs/day_10.txt b/2019/inputs/day_10.txt new file mode 100644 index 0000000..51520ab --- /dev/null +++ b/2019/inputs/day_10.txt @@ -0,0 +1,24 @@ +.###.#...#.#.##.#.####.. +.#....#####...#.######.. +#.#.###.###.#.....#.#### +##.###..##..####.#.####. +###########.#######.##.# +##########.#########.##. +.#.##.########.##...###. +###.#.##.#####.#.###.### +##.#####.##..###.#.##.#. +.#.#.#####.####.#..##### +.###.#####.#..#..##.#.## +########.##.#...######## +.####..##..#.###.###.#.# +....######.##.#.######.# +###.####.######.#....### +############.#.#.##.#### +##...##..####.####.#..## +.###.#########.###..#.## +#.##.#.#...##...#####..# +##.#..###############.## +##.###.#####.##.######.. +##.#####.#.#.##..####### +...#######.######...#### +#....#.#.#.####.#.#.#.## diff --git a/2019/inputs/day_11.txt b/2019/inputs/day_11.txt new file mode 100644 index 0000000..d6581e1 --- /dev/null +++ b/2019/inputs/day_11.txt @@ -0,0 +1 @@ +3,8,1005,8,320,1106,0,11,0,0,0,104,1,104,0,3,8,1002,8,-1,10,101,1,10,10,4,10,1008,8,1,10,4,10,102,1,8,29,2,1005,1,10,1006,0,11,3,8,1002,8,-1,10,101,1,10,10,4,10,108,0,8,10,4,10,102,1,8,57,1,8,15,10,1006,0,79,1,6,3,10,3,8,102,-1,8,10,101,1,10,10,4,10,108,0,8,10,4,10,101,0,8,90,2,103,18,10,1006,0,3,2,105,14,10,3,8,102,-1,8,10,1001,10,1,10,4,10,108,0,8,10,4,10,101,0,8,123,2,9,2,10,3,8,102,-1,8,10,1001,10,1,10,4,10,1008,8,1,10,4,10,1001,8,0,150,1,2,2,10,2,1009,6,10,1,1006,12,10,1006,0,81,3,8,102,-1,8,10,1001,10,1,10,4,10,1008,8,1,10,4,10,102,1,8,187,3,8,102,-1,8,10,1001,10,1,10,4,10,1008,8,0,10,4,10,101,0,8,209,3,8,1002,8,-1,10,1001,10,1,10,4,10,1008,8,1,10,4,10,101,0,8,231,1,1008,11,10,1,1001,4,10,2,1104,18,10,3,8,102,-1,8,10,1001,10,1,10,4,10,108,1,8,10,4,10,1001,8,0,264,1,8,14,10,1006,0,36,3,8,1002,8,-1,10,1001,10,1,10,4,10,108,0,8,10,4,10,101,0,8,293,1006,0,80,1006,0,68,101,1,9,9,1007,9,960,10,1005,10,15,99,109,642,104,0,104,1,21102,1,846914232732,1,21102,1,337,0,1105,1,441,21102,1,387512115980,1,21101,348,0,0,1106,0,441,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,3,10,104,0,104,1,3,10,104,0,104,0,3,10,104,0,104,1,21102,209533824219,1,1,21102,1,395,0,1106,0,441,21101,0,21477985303,1,21102,406,1,0,1106,0,441,3,10,104,0,104,0,3,10,104,0,104,0,21101,868494234468,0,1,21101,429,0,0,1106,0,441,21102,838429471080,1,1,21102,1,440,0,1106,0,441,99,109,2,21201,-1,0,1,21101,0,40,2,21102,472,1,3,21101,0,462,0,1106,0,505,109,-2,2106,0,0,0,1,0,0,1,109,2,3,10,204,-1,1001,467,468,483,4,0,1001,467,1,467,108,4,467,10,1006,10,499,1102,1,0,467,109,-2,2106,0,0,0,109,4,2101,0,-1,504,1207,-3,0,10,1006,10,522,21101,0,0,-3,21202,-3,1,1,22101,0,-2,2,21102,1,1,3,21102,541,1,0,1106,0,546,109,-4,2105,1,0,109,5,1207,-3,1,10,1006,10,569,2207,-4,-2,10,1006,10,569,22102,1,-4,-4,1105,1,637,22102,1,-4,1,21201,-3,-1,2,21202,-2,2,3,21102,588,1,0,1105,1,546,22101,0,1,-4,21102,1,1,-1,2207,-4,-2,10,1006,10,607,21101,0,0,-1,22202,-2,-1,-2,2107,0,-3,10,1006,10,629,21201,-1,0,1,21102,629,1,0,105,1,504,21202,-2,-1,-2,22201,-4,-2,-4,109,-5,2105,1,0 diff --git a/2019/inputs/day_12.txt b/2019/inputs/day_12.txt new file mode 100644 index 0000000..7e72a58 --- /dev/null +++ b/2019/inputs/day_12.txt @@ -0,0 +1,4 @@ +<x=14, y=2, z=8> +<x=7, y=4, z=10> +<x=1, y=17, z=16> +<x=-4, y=-1, z=1> diff --git a/2019/inputs/day_13.txt b/2019/inputs/day_13.txt new file mode 100644 index 0000000..c600ec1 --- /dev/null +++ b/2019/inputs/day_13.txt @@ -0,0 +1 @@ +1,380,379,385,1008,2689,888873,381,1005,381,12,99,109,2690,1102,0,1,383,1101,0,0,382,21001,382,0,1,20102,1,383,2,21101,0,37,0,1105,1,578,4,382,4,383,204,1,1001,382,1,382,1007,382,41,381,1005,381,22,1001,383,1,383,1007,383,25,381,1005,381,18,1006,385,69,99,104,-1,104,0,4,386,3,384,1007,384,0,381,1005,381,94,107,0,384,381,1005,381,108,1105,1,161,107,1,392,381,1006,381,161,1101,-1,0,384,1106,0,119,1007,392,39,381,1006,381,161,1102,1,1,384,20101,0,392,1,21101,23,0,2,21102,0,1,3,21102,138,1,0,1105,1,549,1,392,384,392,21001,392,0,1,21101,23,0,2,21101,3,0,3,21102,1,161,0,1105,1,549,1101,0,0,384,20001,388,390,1,20101,0,389,2,21101,0,180,0,1106,0,578,1206,1,213,1208,1,2,381,1006,381,205,20001,388,390,1,20101,0,389,2,21101,205,0,0,1105,1,393,1002,390,-1,390,1102,1,1,384,21001,388,0,1,20001,389,391,2,21101,228,0,0,1105,1,578,1206,1,261,1208,1,2,381,1006,381,253,20101,0,388,1,20001,389,391,2,21101,253,0,0,1106,0,393,1002,391,-1,391,1101,0,1,384,1005,384,161,20001,388,390,1,20001,389,391,2,21101,279,0,0,1106,0,578,1206,1,316,1208,1,2,381,1006,381,304,20001,388,390,1,20001,389,391,2,21101,0,304,0,1106,0,393,1002,390,-1,390,1002,391,-1,391,1101,0,1,384,1005,384,161,20102,1,388,1,20101,0,389,2,21101,0,0,3,21101,0,338,0,1106,0,549,1,388,390,388,1,389,391,389,21001,388,0,1,21002,389,1,2,21102,4,1,3,21101,0,365,0,1105,1,549,1007,389,24,381,1005,381,75,104,-1,104,0,104,0,99,0,1,0,0,0,0,0,0,230,18,20,1,1,20,109,3,21201,-2,0,1,22101,0,-1,2,21101,0,0,3,21102,1,414,0,1106,0,549,22102,1,-2,1,22102,1,-1,2,21101,0,429,0,1105,1,601,2102,1,1,435,1,386,0,386,104,-1,104,0,4,386,1001,387,-1,387,1005,387,451,99,109,-3,2106,0,0,109,8,22202,-7,-6,-3,22201,-3,-5,-3,21202,-4,64,-2,2207,-3,-2,381,1005,381,492,21202,-2,-1,-1,22201,-3,-1,-3,2207,-3,-2,381,1006,381,481,21202,-4,8,-2,2207,-3,-2,381,1005,381,518,21202,-2,-1,-1,22201,-3,-1,-3,2207,-3,-2,381,1006,381,507,2207,-3,-4,381,1005,381,540,21202,-4,-1,-1,22201,-3,-1,-3,2207,-3,-4,381,1006,381,529,22102,1,-3,-7,109,-8,2106,0,0,109,4,1202,-2,41,566,201,-3,566,566,101,639,566,566,2101,0,-1,0,204,-3,204,-2,204,-1,109,-4,2105,1,0,109,3,1202,-1,41,594,201,-2,594,594,101,639,594,594,20102,1,0,-2,109,-3,2106,0,0,109,3,22102,25,-2,1,22201,1,-1,1,21101,0,521,2,21102,1,1011,3,21102,1,1025,4,21102,630,1,0,1106,0,456,21201,1,1664,-2,109,-3,2105,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,2,2,0,2,0,2,0,2,0,0,2,2,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,2,0,1,1,0,0,0,0,2,0,0,2,0,2,2,2,2,0,2,0,0,0,2,2,0,0,2,2,2,2,0,0,0,0,0,2,0,0,0,0,2,2,0,1,1,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,2,2,0,2,0,0,0,0,2,0,0,0,0,2,0,0,0,0,2,2,2,0,0,1,1,0,0,2,2,2,0,0,0,2,0,0,0,0,0,2,2,0,0,2,0,2,0,0,0,2,2,0,0,0,2,0,0,0,2,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,2,0,0,2,0,0,0,0,2,0,0,2,0,2,0,2,0,2,0,0,1,1,0,0,0,0,0,2,2,0,0,2,2,0,0,0,0,2,0,0,2,2,0,0,0,2,2,0,0,2,0,0,0,2,2,2,2,2,0,2,0,1,1,0,0,0,0,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,2,2,2,0,0,0,0,0,2,0,0,2,0,0,1,1,0,2,0,0,2,0,0,0,0,2,0,0,0,0,2,2,0,2,0,0,0,0,2,0,0,0,0,0,2,0,2,0,0,2,0,0,2,0,0,1,1,0,2,2,2,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,2,0,0,2,0,2,0,2,2,0,2,2,0,2,0,2,0,0,1,1,0,0,2,0,0,2,0,2,0,0,2,0,0,2,0,0,0,2,0,0,0,0,2,0,0,2,0,0,2,2,0,2,0,0,0,0,2,2,0,1,1,0,0,2,2,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,2,2,2,0,0,2,0,2,0,2,2,0,0,2,0,2,0,0,1,1,0,0,2,2,2,0,0,2,2,0,2,2,2,0,0,0,2,2,2,0,2,0,0,0,0,0,2,0,0,2,0,2,0,0,0,0,0,0,0,1,1,0,2,0,0,0,2,2,0,2,0,0,2,0,2,2,2,0,0,2,2,0,2,0,0,0,0,0,0,2,2,0,2,2,0,2,0,0,2,0,1,1,0,0,2,0,0,2,2,0,0,0,0,0,2,2,0,2,2,2,0,2,0,2,2,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,1,1,0,2,0,2,0,2,2,2,2,0,0,0,2,0,0,0,2,2,0,0,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,2,0,0,0,1,1,0,0,0,0,2,0,0,2,0,0,2,2,0,2,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,2,0,1,1,0,2,0,0,0,2,0,0,0,2,2,0,2,0,0,2,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,2,0,0,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,34,58,37,19,14,62,51,10,28,52,86,20,39,30,61,36,77,73,19,11,17,74,7,54,40,59,20,92,18,13,85,72,83,58,18,68,10,22,94,22,25,40,67,96,55,96,42,16,80,80,96,35,19,79,81,63,91,5,72,68,80,93,79,36,91,47,71,82,45,29,51,36,10,62,57,29,17,16,4,88,75,81,70,77,32,2,38,37,35,86,41,35,61,71,72,22,14,33,12,10,10,56,30,3,90,71,24,62,69,31,47,2,18,77,43,20,64,85,50,43,43,73,16,23,98,4,23,53,82,15,88,1,39,78,43,57,65,8,45,79,17,44,32,76,31,3,25,71,45,16,42,61,89,21,93,4,98,66,68,5,13,19,48,65,29,5,24,59,29,49,57,39,21,96,10,8,25,82,17,42,46,49,83,4,81,32,14,7,76,62,31,74,55,19,39,63,89,41,38,28,34,34,88,7,77,43,87,10,47,85,39,31,88,69,40,72,51,49,64,46,64,14,66,95,95,58,38,88,82,35,6,58,3,21,33,58,9,95,43,52,13,22,22,10,11,47,35,33,31,58,93,83,13,14,55,71,88,42,73,83,91,84,62,78,80,15,26,50,8,15,6,91,89,3,12,53,47,47,82,67,12,77,6,63,88,94,53,19,97,36,34,59,91,27,37,45,44,31,8,58,16,7,74,76,83,17,28,42,85,19,1,61,73,84,37,15,43,52,80,48,51,98,70,77,28,55,78,85,64,32,22,82,69,7,82,55,78,24,5,89,55,4,34,28,71,76,81,90,96,2,2,77,41,32,24,60,10,11,26,64,66,19,11,77,11,82,81,1,52,2,79,43,47,87,63,73,3,81,69,66,53,4,83,88,13,5,62,94,55,58,4,93,96,58,40,69,64,56,80,71,85,44,45,24,80,59,53,15,85,92,89,95,69,77,53,27,72,3,54,49,9,35,10,85,43,86,9,42,69,29,64,96,17,72,47,24,2,13,40,45,62,19,41,85,28,68,73,20,52,56,19,57,1,36,64,18,26,41,94,81,45,35,29,32,28,87,86,53,71,54,67,68,47,53,17,40,61,58,74,2,51,43,23,62,54,13,80,67,88,94,1,62,85,7,12,87,51,4,69,25,57,6,79,94,15,75,93,46,19,28,84,72,84,59,60,59,59,14,11,30,57,53,75,83,72,61,65,50,26,49,23,40,82,11,67,8,55,13,22,41,32,33,89,37,69,11,24,24,8,21,89,11,46,89,88,59,3,7,43,85,74,92,72,60,85,82,33,82,71,14,21,41,4,78,88,4,22,81,30,92,17,9,62,69,84,47,6,86,49,94,11,96,21,1,5,1,45,19,60,59,17,85,67,42,21,11,79,39,27,72,54,19,69,50,52,78,78,6,16,96,86,37,58,79,9,45,10,73,29,53,75,63,50,66,6,69,8,74,68,88,9,88,87,50,34,45,12,43,43,58,14,29,32,77,77,97,45,29,41,94,21,91,52,22,74,44,48,11,20,68,9,51,7,85,93,74,59,16,34,60,12,3,18,17,4,71,44,49,79,68,54,96,74,21,74,60,59,16,77,65,97,84,54,52,37,95,9,3,41,9,72,82,82,95,31,71,56,50,59,93,57,79,16,9,74,72,47,1,9,5,55,63,64,80,40,93,54,11,57,26,76,19,85,41,80,90,92,27,61,24,83,93,96,95,28,68,80,11,60,65,36,2,46,75,59,52,11,36,74,62,52,6,23,85,93,61,36,26,70,2,13,97,52,92,96,87,63,63,31,2,50,25,34,79,46,4,48,51,74,96,74,7,43,82,84,50,59,53,13,51,8,81,36,93,10,31,10,50,76,69,33,3,71,1,1,65,68,57,69,15,64,81,59,38,38,89,79,80,52,44,59,26,96,21,38,38,79,2,96,2,92,73,49,14,71,74,66,94,98,63,28,59,26,30,67,1,61,84,92,47,24,27,41,57,95,89,6,96,48,43,7,82,42,5,27,15,32,89,53,3,35,63,84,97,92,77,50,38,73,10,50,89,95,96,77,61,51,90,22,75,41,77,1,14,72,68,91,10,80,28,25,10,86,54,10,87,55,40,79,16,35,8,82,51,70,84,12,72,74,4,88,71,69,83,9,55,10,57,9,3,40,74,72,61,75,64,54,32,61,26,53,48,45,22,6,83,21,21,9,4,7,65,98,78,17,54,35,95,79,36,53,59,84,53,14,20,94,12,31,54,86,39,95,82,38,8,22,58,50,27,32,53,79,49,71,76,18,64,75,64,88,58,88,27,62,31,54,11,59,11,3,42,66,85,41,888873 diff --git a/2019/inputs/day_14.txt b/2019/inputs/day_14.txt new file mode 100644 index 0000000..dac9757 --- /dev/null +++ b/2019/inputs/day_14.txt @@ -0,0 +1,59 @@ +2 RWPCH => 9 PVTL +1 FHFH => 4 BLPJK +146 ORE => 5 VJNBT +8 KDFNZ, 1 ZJGH, 1 GSCG => 5 LKPQG +11 NWDZ, 2 WBQR, 1 VRQR => 2 BMJR +3 GSCG => 4 KQDVM +5 QVNKN, 6 RPWKC => 3 BCNV +10 QMBM, 4 RBXB, 2 VRQR => 1 JHXBM +15 RPWKC => 6 MGCQ +1 QWKRZ => 4 FHFH +10 RWPCH => 6 MZKG +11 JFKGV, 5 QVNKN, 1 CTVK => 4 VQDT +1 SXKT => 5 RPWKC +1 VQDT, 25 ZVMCB => 2 RBXB +6 LGLNV, 4 XSNKB => 3 WBQR +199 ORE => 2 SXKT +1 XSNKB, 6 CWBNX, 1 HPKB, 5 PVTL, 1 JNKH, 9 SXKT, 3 KQDVM => 3 ZKTX +7 FDSX => 6 WJDF +7 JLRM => 4 CWBNX +167 ORE => 5 PQZXH +13 JHXBM, 2 NWDZ, 4 RFLX, 12 VRQR, 10 FJRFG, 14 PVTL, 2 JLRM => 6 DGFG +12 HPKB, 3 WHVXC => 9 ZJGH +1 JLRM, 2 ZJGH, 2 QVNKN => 9 FJRFG +129 ORE => 7 KZFPJ +2 QMBM => 1 RWPCH +7 VJMWM => 4 JHDW +7 PQZXH, 7 SXKT => 9 BJVQM +1 VJMWM, 4 JHDW, 1 MQXF => 7 FDSX +1 RPWKC => 7 WHVXC +1 ZJGH => 1 ZVMCB +1 RWPCH => 3 MPKR +187 ORE => 8 VJMWM +15 CTVK => 5 GSCG +2 XSNKB, 15 ZVMCB, 3 KDFNZ => 2 RFLX +18 QVNKN => 8 XLFZJ +4 CWBNX => 8 ZSCX +2 ZJGH, 1 JLRM, 1 MGCQ => 9 NPRST +13 BJVQM, 2 BCNV => 2 QWKRZ +2 QWKRZ, 2 BLPJK, 5 XSNKB => 2 VRQR +13 HPKB, 3 VQDT => 9 JLRM +2 SXKT, 1 VJNBT, 5 VLWQB => 6 CTVK +2 MPKR, 2 LMNCH, 24 VRQR => 8 DZFNW +2 VQDT => 1 KDFNZ +1 CTVK, 6 FDSX => 6 QVNKN +3 CTVK, 1 QVNKN => 4 HPKB +3 NPRST, 1 KGSDJ, 1 CTVK => 2 QMBM +4 KZFPJ, 1 PQZXH => 5 VLWQB +2 VQDT => 7 KGSDJ +3 MPKR => 2 JNKH +1 KQDVM => 5 XQBS +3 ZKGMX, 1 XQBS, 11 MZKG, 11 NPRST, 1 DZFNW, 5 VQDT, 2 FHFH => 6 JQNF +2 FJRFG, 17 BMJR, 3 BJVQM, 55 JQNF, 8 DGFG, 13 ZJGH, 29 ZKTX => 1 FUEL +27 KZFPJ, 5 VJNBT => 5 MQXF +11 FDSX, 1 WHVXC, 1 WJDF => 4 ZKGMX +1 ZVMCB => 4 NWDZ +1 XLFZJ => 6 LGLNV +13 ZSCX, 4 XLFZJ => 8 LMNCH +1 RPWKC, 1 FDSX, 2 BJVQM => 8 JFKGV +1 WJDF, 1 LKPQG => 4 XSNKB diff --git a/2019/inputs/day_15.txt b/2019/inputs/day_15.txt new file mode 100644 index 0000000..ca5836c --- /dev/null +++ b/2019/inputs/day_15.txt @@ -0,0 +1 @@ +3,1033,1008,1033,1,1032,1005,1032,31,1008,1033,2,1032,1005,1032,58,1008,1033,3,1032,1005,1032,81,1008,1033,4,1032,1005,1032,104,99,1002,1034,1,1039,102,1,1036,1041,1001,1035,-1,1040,1008,1038,0,1043,102,-1,1043,1032,1,1037,1032,1042,1106,0,124,1002,1034,1,1039,1001,1036,0,1041,1001,1035,1,1040,1008,1038,0,1043,1,1037,1038,1042,1105,1,124,1001,1034,-1,1039,1008,1036,0,1041,1001,1035,0,1040,1002,1038,1,1043,101,0,1037,1042,1105,1,124,1001,1034,1,1039,1008,1036,0,1041,102,1,1035,1040,1001,1038,0,1043,101,0,1037,1042,1006,1039,217,1006,1040,217,1008,1039,40,1032,1005,1032,217,1008,1040,40,1032,1005,1032,217,1008,1039,1,1032,1006,1032,165,1008,1040,9,1032,1006,1032,165,1102,1,2,1044,1105,1,224,2,1041,1043,1032,1006,1032,179,1102,1,1,1044,1106,0,224,1,1041,1043,1032,1006,1032,217,1,1042,1043,1032,1001,1032,-1,1032,1002,1032,39,1032,1,1032,1039,1032,101,-1,1032,1032,101,252,1032,211,1007,0,35,1044,1106,0,224,1101,0,0,1044,1105,1,224,1006,1044,247,102,1,1039,1034,1002,1040,1,1035,1002,1041,1,1036,102,1,1043,1038,101,0,1042,1037,4,1044,1105,1,0,1,5,41,19,22,1,39,81,29,20,15,82,33,18,45,30,32,55,28,26,70,13,56,32,28,18,3,59,90,11,95,15,85,8,61,25,59,24,34,1,85,5,25,54,57,18,20,54,80,91,28,65,36,12,44,36,13,92,24,56,13,39,69,29,79,10,41,27,23,25,72,20,3,61,15,51,11,12,12,48,10,45,13,29,49,90,30,17,9,41,21,18,7,30,48,17,83,71,4,10,31,10,96,81,77,9,50,39,21,36,33,72,12,3,23,79,18,4,75,17,58,64,8,7,97,60,72,72,1,94,55,42,2,94,2,21,88,19,82,57,96,19,25,27,41,62,15,40,23,61,86,27,73,61,13,46,52,81,12,34,23,73,23,59,1,30,47,9,99,10,37,17,28,98,5,92,73,8,63,4,86,76,79,7,30,68,28,91,12,12,98,74,4,22,44,10,23,45,37,16,90,76,23,74,75,12,21,38,14,15,76,28,49,71,7,6,6,71,53,33,12,87,15,92,66,21,38,13,53,92,34,49,25,6,67,21,27,89,24,61,25,30,41,30,99,28,19,41,90,51,74,14,33,54,48,10,14,42,2,67,76,10,21,2,67,43,27,69,11,16,78,7,36,9,24,48,63,81,53,29,94,34,25,99,66,47,17,97,33,52,11,62,22,52,30,23,89,95,15,13,50,48,26,10,6,69,78,13,6,94,1,28,67,10,70,16,50,19,24,15,79,50,27,3,19,62,4,31,83,20,17,83,67,5,80,26,36,62,87,3,10,80,22,65,60,10,78,4,20,60,30,11,7,83,10,13,72,81,37,22,14,55,63,51,27,32,77,52,20,50,16,48,2,55,10,53,26,84,6,87,43,37,26,3,85,62,25,78,50,16,10,37,22,54,5,80,24,7,32,49,18,27,12,41,70,82,20,34,91,15,98,77,22,6,79,3,8,54,17,32,4,44,2,97,14,15,65,30,97,14,79,75,11,77,5,61,37,20,91,20,45,74,19,40,2,41,89,12,34,44,18,62,57,17,68,22,96,7,59,63,2,60,70,2,26,75,26,3,53,19,80,16,97,7,34,58,52,66,24,75,25,30,75,42,13,12,89,13,3,84,92,1,75,30,54,43,2,56,15,1,15,84,99,6,98,42,17,29,1,18,26,70,71,29,91,23,21,87,66,18,38,32,18,81,65,2,58,99,12,4,84,24,32,88,30,67,49,29,59,64,18,70,10,24,56,5,27,97,50,4,28,85,65,16,67,83,15,16,61,18,86,8,36,25,36,29,97,45,19,81,41,29,45,30,69,26,57,93,27,72,34,30,99,61,2,48,16,12,76,98,28,14,32,32,90,48,10,30,57,23,39,2,8,39,33,13,88,34,31,74,15,60,8,47,60,31,5,79,1,98,86,33,3,99,33,62,11,96,25,22,38,98,84,3,56,70,49,3,8,56,87,4,29,59,65,26,34,77,7,14,78,26,25,70,49,3,31,45,92,24,95,17,4,9,4,96,64,92,27,67,4,99,6,44,7,16,86,2,75,1,6,68,81,4,1,44,49,7,92,8,40,36,25,81,13,56,99,10,2,30,72,6,43,30,12,43,93,19,20,23,95,10,19,66,63,28,96,40,50,8,15,56,38,13,93,42,71,12,18,87,8,4,21,85,9,2,66,77,10,80,26,61,9,43,20,88,10,39,67,55,31,49,17,58,26,80,20,84,54,49,5,73,11,52,15,63,7,62,24,57,92,61,25,87,56,37,31,38,14,99,0,0,21,21,1,10,1,0,0,0,0,0,0 diff --git a/2019/inputs/day_16.txt b/2019/inputs/day_16.txt new file mode 100644 index 0000000..357965c --- /dev/null +++ b/2019/inputs/day_16.txt @@ -0,0 +1 @@ +59723517898690342336085619027921111260000667417052529433894092649779685557557996383085708903241535436786723718804155370155263736632861535632645335233170435646844328735934063129720822438983948765830873108060969395372667944081201020154126736565212455403582565814037568332106043336657972906297306993727714730061029321153984390658949013821918352341503629705587666779681013358053312990709423156110291835794179056432958537796855287734217125615700199928915524410743382078079059706420865085147514027374485354815106354367548002650415494525590292210440827027951624280115914909910917047084328588833201558964370296841789611989343040407348115608623432403085634084 diff --git a/2019/inputs/day_17.txt b/2019/inputs/day_17.txt new file mode 100644 index 0000000..49131d4 --- /dev/null +++ b/2019/inputs/day_17.txt @@ -0,0 +1 @@ +1,330,331,332,109,3974,1102,1182,1,15,1101,1475,0,24,1001,0,0,570,1006,570,36,101,0,571,0,1001,570,-1,570,1001,24,1,24,1106,0,18,1008,571,0,571,1001,15,1,15,1008,15,1475,570,1006,570,14,21102,1,58,0,1105,1,786,1006,332,62,99,21101,333,0,1,21102,73,1,0,1105,1,579,1102,0,1,572,1101,0,0,573,3,574,101,1,573,573,1007,574,65,570,1005,570,151,107,67,574,570,1005,570,151,1001,574,-64,574,1002,574,-1,574,1001,572,1,572,1007,572,11,570,1006,570,165,101,1182,572,127,1002,574,1,0,3,574,101,1,573,573,1008,574,10,570,1005,570,189,1008,574,44,570,1006,570,158,1105,1,81,21102,340,1,1,1105,1,177,21101,0,477,1,1106,0,177,21102,1,514,1,21101,0,176,0,1106,0,579,99,21102,184,1,0,1105,1,579,4,574,104,10,99,1007,573,22,570,1006,570,165,1002,572,1,1182,21101,0,375,1,21101,0,211,0,1105,1,579,21101,1182,11,1,21102,1,222,0,1106,0,979,21102,1,388,1,21102,1,233,0,1106,0,579,21101,1182,22,1,21101,0,244,0,1105,1,979,21101,0,401,1,21102,1,255,0,1106,0,579,21101,1182,33,1,21102,1,266,0,1106,0,979,21102,414,1,1,21102,277,1,0,1105,1,579,3,575,1008,575,89,570,1008,575,121,575,1,575,570,575,3,574,1008,574,10,570,1006,570,291,104,10,21102,1182,1,1,21102,1,313,0,1106,0,622,1005,575,327,1101,1,0,575,21101,327,0,0,1105,1,786,4,438,99,0,1,1,6,77,97,105,110,58,10,33,10,69,120,112,101,99,116,101,100,32,102,117,110,99,116,105,111,110,32,110,97,109,101,32,98,117,116,32,103,111,116,58,32,0,12,70,117,110,99,116,105,111,110,32,65,58,10,12,70,117,110,99,116,105,111,110,32,66,58,10,12,70,117,110,99,116,105,111,110,32,67,58,10,23,67,111,110,116,105,110,117,111,117,115,32,118,105,100,101,111,32,102,101,101,100,63,10,0,37,10,69,120,112,101,99,116,101,100,32,82,44,32,76,44,32,111,114,32,100,105,115,116,97,110,99,101,32,98,117,116,32,103,111,116,58,32,36,10,69,120,112,101,99,116,101,100,32,99,111,109,109,97,32,111,114,32,110,101,119,108,105,110,101,32,98,117,116,32,103,111,116,58,32,43,10,68,101,102,105,110,105,116,105,111,110,115,32,109,97,121,32,98,101,32,97,116,32,109,111,115,116,32,50,48,32,99,104,97,114,97,99,116,101,114,115,33,10,94,62,118,60,0,1,0,-1,-1,0,1,0,0,0,0,0,0,1,50,26,0,109,4,1201,-3,0,587,20102,1,0,-1,22101,1,-3,-3,21102,0,1,-2,2208,-2,-1,570,1005,570,617,2201,-3,-2,609,4,0,21201,-2,1,-2,1106,0,597,109,-4,2106,0,0,109,5,2101,0,-4,630,20101,0,0,-2,22101,1,-4,-4,21101,0,0,-3,2208,-3,-2,570,1005,570,781,2201,-4,-3,653,20101,0,0,-1,1208,-1,-4,570,1005,570,709,1208,-1,-5,570,1005,570,734,1207,-1,0,570,1005,570,759,1206,-1,774,1001,578,562,684,1,0,576,576,1001,578,566,692,1,0,577,577,21102,702,1,0,1106,0,786,21201,-1,-1,-1,1106,0,676,1001,578,1,578,1008,578,4,570,1006,570,724,1001,578,-4,578,21102,731,1,0,1105,1,786,1106,0,774,1001,578,-1,578,1008,578,-1,570,1006,570,749,1001,578,4,578,21101,756,0,0,1105,1,786,1106,0,774,21202,-1,-11,1,22101,1182,1,1,21102,774,1,0,1105,1,622,21201,-3,1,-3,1106,0,640,109,-5,2105,1,0,109,7,1005,575,802,20102,1,576,-6,20101,0,577,-5,1105,1,814,21101,0,0,-1,21101,0,0,-5,21101,0,0,-6,20208,-6,576,-2,208,-5,577,570,22002,570,-2,-2,21202,-5,51,-3,22201,-6,-3,-3,22101,1475,-3,-3,2102,1,-3,843,1005,0,863,21202,-2,42,-4,22101,46,-4,-4,1206,-2,924,21102,1,1,-1,1105,1,924,1205,-2,873,21102,1,35,-4,1106,0,924,1202,-3,1,878,1008,0,1,570,1006,570,916,1001,374,1,374,1201,-3,0,895,1101,0,2,0,2101,0,-3,902,1001,438,0,438,2202,-6,-5,570,1,570,374,570,1,570,438,438,1001,578,558,921,21002,0,1,-4,1006,575,959,204,-4,22101,1,-6,-6,1208,-6,51,570,1006,570,814,104,10,22101,1,-5,-5,1208,-5,49,570,1006,570,810,104,10,1206,-1,974,99,1206,-1,974,1102,1,1,575,21101,973,0,0,1105,1,786,99,109,-7,2105,1,0,109,6,21101,0,0,-4,21102,0,1,-3,203,-2,22101,1,-3,-3,21208,-2,82,-1,1205,-1,1030,21208,-2,76,-1,1205,-1,1037,21207,-2,48,-1,1205,-1,1124,22107,57,-2,-1,1205,-1,1124,21201,-2,-48,-2,1105,1,1041,21102,1,-4,-2,1106,0,1041,21101,0,-5,-2,21201,-4,1,-4,21207,-4,11,-1,1206,-1,1138,2201,-5,-4,1059,2102,1,-2,0,203,-2,22101,1,-3,-3,21207,-2,48,-1,1205,-1,1107,22107,57,-2,-1,1205,-1,1107,21201,-2,-48,-2,2201,-5,-4,1090,20102,10,0,-1,22201,-2,-1,-2,2201,-5,-4,1103,2102,1,-2,0,1106,0,1060,21208,-2,10,-1,1205,-1,1162,21208,-2,44,-1,1206,-1,1131,1106,0,989,21101,0,439,1,1105,1,1150,21101,477,0,1,1106,0,1150,21102,1,514,1,21102,1,1149,0,1105,1,579,99,21101,1157,0,0,1106,0,579,204,-2,104,10,99,21207,-3,22,-1,1206,-1,1138,2101,0,-5,1176,2102,1,-4,0,109,-6,2106,0,0,32,5,46,1,3,1,46,1,3,1,46,1,3,1,46,1,3,1,46,1,3,1,40,11,40,1,5,1,44,1,5,1,44,1,5,1,44,1,5,1,44,1,5,1,40,11,40,1,3,1,46,1,3,1,46,1,3,1,46,1,3,9,38,1,11,1,26,1,11,1,11,1,26,1,11,1,11,1,26,1,11,5,7,1,26,1,15,1,7,1,26,1,15,1,7,1,26,1,15,1,7,1,26,1,11,7,5,1,26,1,11,1,3,1,1,1,5,1,26,1,9,13,1,1,3,13,10,1,9,1,1,1,3,1,1,1,3,1,1,1,3,1,22,5,5,1,1,13,3,1,26,1,5,1,5,1,1,1,3,1,5,1,26,1,5,1,5,7,5,1,26,1,5,1,7,1,9,1,26,1,5,1,7,1,9,1,26,1,5,1,7,1,9,1,26,1,5,1,7,11,26,1,5,1,34,11,5,1,34,1,15,1,34,1,5,9,1,9,26,1,5,1,7,1,9,1,26,1,5,1,7,1,9,1,26,1,5,1,7,1,9,1,22,11,7,1,9,1,22,1,3,1,13,1,9,1,22,1,3,1,13,1,9,1,22,1,3,1,13,1,9,1,22,1,3,1,13,1,9,1,22,1,3,1,13,1,9,1,22,5,13,11,22 diff --git a/2019/inputs/day_18.txt b/2019/inputs/day_18.txt new file mode 100644 index 0000000..3cb4307 --- /dev/null +++ b/2019/inputs/day_18.txt @@ -0,0 +1,81 @@ +################################################################################# +#.............#.....#.................#.#.....#...#.......#...................#a# +#.#####.#######.#.###.#########.#####.#.#.###Y###.#.#####.#.#####.###########.#.# +#.#...#.#.....#.#..c#.........#...#.#...#...#.#...#.#.#...#.#.#...#...#...#.....# +#.#.###.#.###.#.###.#.###########.#.###.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.####### +#.#...#...#.#...#.#...#...........#.#...#.#.#...#.#.#.#.#.#.#.#...#.#.#.#.#.....# +#.#.#.#####.#####.#####.###.#######.#.###.#.#######.#.#.###.#.###.#.#.#.#.#.###.# +#.#.#.............#.#...#.#.#..e..#.....#.#...........#...#.#...#...#...#.....#.# +#.#########.#####.#.#.###.#.#.###.#####.#.###############.#T#.#.###############.# +#...#..k....#.....#.#.Z.#...#...#.....#.#.........#.#.....#.#.#.....#.L.....#...# +###.#.#.#######.###.###.#######.#####.#.#########.#.#.###.#.#.###.#.###.###.#.### +#...#.#.#.....#.#...#...#.....#.....#.#.#...#...#.#.#.#...#.#.#...#...#.#...#...# +#.###.#.#.###.#.#.###.###.###.#####.#.#.#.#.#.#.#.#.#.###.#.###.#####.#.#.#####.# +#.#...#.#.#...#.#...#.....#.#.....#.#.#.#.#...#...#.#...#.#.#...#.#...#.#.#.....# +#.###.#.#.#.###.###.#######.#.#####.#.#.#.#########.###.###.#.###.#.###.#.#.###.# +#...#.#.#.#...#...#.........#.#.....#.#.#.............#.......#...#.#...#.#...#.# +###.#.###.###.###.###.#.#####.#.#####.###############.#########.#.#.###.#.###.#.# +#.....#...#...#.J...#.#.#.....#.....#...#...........#.#...#...#.#.......#...#.#.# +#######.###.#######.#.###.#####.#######.#########.#.#.###.#.#.#########.#####.#.# +#.......#.#...#...#...#...#...#.#.......#.....O.#.#.#.#...#.#.......#...#.....#s# +#.#######.###.#.#.#####.###.#.#.#.#######.#####.#.#.#.#.###.#####.#.#.###.#####.# +#...#...#...#...#...#.#.#...#...#.......#.....#.#.#.#.#...#.#...#.#.#...#...#...# +###.#.#.#.#########.#.#.#.#######.#####.#.#####.#.###.###.#.###.###.#.#####.#.### +#.#...#.#.........#...#...#....d#.....#.#.#.....#.#...#...#.#.#...#.#.#.....#.#.# +#.#####.#######.#######.###.###.#####.#.#.#.#####.#.###.#.#.#.###.#.#.#.#####.#.# +#...#.#.......#.......#...#.#...#.....#.#.#.....#.......#.#.....#.#.#.#.#.......# +#.#.#.#######.#.#.#####.###.#.#####.###.#.#####.#############.###.#.#.#.#######.# +#.#...#.....#.#.#...#...#...#.....#...#.#.#...#.#...........#.#...#.#.#.#...#.#.# +#.###.###.#.#.#.###.#.###.#######.#####.#.###.#.#.#########.#.#.###.#.#.#.#.#.#.# +#...#.....#.#.#...#...#...#.......#.....#...#.#.#.....#...#...#...#.#.#...#.#...# +#.#.#######.#.###.#####.###.#######.#######.#.#.#####.###.#######.#.#####.#.#.### +#.#.#.....#.#.#.#.#.#...#.#.#...#...#...#...#.#.....#...#.....#...#.....#.#.#w#.# +#.#.#.###.#.#.#.#.#.#.###.#.#.#.###.#.#.#.###.#.###.###.#.###.#.###.###.###.#.#.# +#.#.#.#.#.#.#.#.#.#.#.#m..#...#...#...#.#.#...#...#...#.#...#.#.#.....#.#...#.#.# +###.#.#.#.###W#.#.#.#.#.#########.#####.#.#.#.###.#####.###.#.#.#######.#.###.#.# +#...#...#.#...#.....#.#.......#...#...#.#.#.#.#.#.....#.....#.#.........#.#.#...# +#.###.###.#.###.#####.#.###.###.###.#.#.#.#.#.#.#####.#######.###########.#.###.# +#.#...#...#.#...#.S...#...#.....#...#.#.#...#.....#.#.........#...#...#...#.....# +#.#.###.###.#####.#######.#######.###.#.#########.#.###########.#.#.#.#.###.##### +#.....#...........#.......F.......#..................f..........#...#...#.......# +#######################################.@.####################################### +#.....#.#...........#.....#.........................#...#.....#.M.......#.....#.# +###P#.#.#.#######.###.###.#.#######.###.#.#########.#.#.#.###.###.#####.###.#.#.# +#...#...#...#.#...#.....#.#.#.......#...#...#.........#...#.......#...#.....#.#.# +#.#.#######.#.#.###.#####.#.#.#######.#####.###############.#########.#######.#.# +#.#.#.....#.#.#.#...#...#.#.#.#.........#...#.......#...#.....#.....#.#.......#.# +#.###.###.#.#.#.#.###.#.#.#.#.###########.###.#####.#.#.#######.###.#.#.#######.# +#...#.#.#.#...#.#.#...#...#.#...........#...#...#.#...#.......#.#.#.#.#.........# +#.#.#.#.#.#.###.#.#.#####.#######.#####.###.###.#.###########.#.#.#.#.#.#######.# +#.#.#...#...#...#.#r#.....#.....#.....#.#...#.#.#.......#...#.....#.#...#.....#.# +#.#.###.#####.###.#.#######.###.#####.#.#.#.#.#.###.#####.#.#######.#.###.###.#.# +#.#...#.#...#...#.#.........#...#...#.#.#.#...#...#.#.....#.#......p#...#.#.#.#.# +###.#.#.#.#.###.#.###########.###.#.#.#.#.###.###.#.#.#####.#.###.#######.#.#.### +#...#.#.#.#...#.......#.....#.#...#...#.#...#.#...#.....#...#.#...#.K...#.#.#...# +#.#####.#.###.#######.#.###Q#.#.#######.###.#.#.#####.###.###.#.###.###.#.#.###.# +#.....#...#...#.#...#.#.#.#...#...#.....#...#.#.....#.#...#...#.#...#.#..j#.#...# +#.###.#####.###.#.#.###.#.#########.###.#.#########.###.#.#.###.#.###.#####.#.### +#...#.#.....#...#.#.B...#...#...#...#...#.#.......#.....#.#...#.#...........#.R.# +#.###.#.#######.#.#######.#.#.#.#.###.###.#.#.###.#######.###.###.#############.# +#.#...#.......#.#n....#...#.#.#...#...#.#...#...#.....#...#.#.....#..u..#.....#.# +###.#.#######.#.#####.#.###.#.#####.###.#.#####.###.###.###.###.###.###.#.###.#.# +#...#.#...#...#.....#.#.#...#...#.#...#.#...#...#...#...#...#.#.#...#...#.#...#.# +#.#####.#.#.###.#.#####.#.###.#.#.###.#.#####.#######.#####.#.###.###.###.###.#.# +#...#...#.#.#...#.......#.#...#.#...#...#.....#.......#.....#.U...#.#...#...#...# +#.#.#.###.#.#.#########.#.#####.###.###.#.#.###.#######.###########.###X#.#.###.# +#.#..l#...#.#...#.......#.....#...#...#.#.#o#...#.#.....#...#......x....#.#.#...# +#.#####C###.#.###.###########.###.#.###.#.###.###.#.###.#.#.#I#############.#.### +#.....#...#.#.#...#...#.....#.#...#.#...#.#...#.....#...#.#...#v......G.#...#..q# +###.#####.#.###.###.#.#.###.#.#.###.#.###.#.###.#####.#.#.#####.#######.#.#####.# +#.#y#...#.#...#.#...#.#...#.#...#...#...#.#.#...#.....#.#..i..#...#.....#...#...# +#.#.#.#.#.###.#.#.###.#.#.#.#####.#.###.#.#.###.#.###########H#.#.#.#####.#.#.### +#...#.#.#...#.#.....#.#.#.#.#...#.#.....#.#...#.#...........#.#.#.#g..#...#.#...# +#.###.#.###A#.#######.#.#.#.#.###.#######.###.#.#########.#.#.#.#.###.#####.###.# +#.#...#.....#.........#.#.#.#.#...#.....#...#.#.......#...#.#.#.#.#.#.#...#...#.# +###.#####################.#.#.#.#####.###.#.#.#########.###.#.###.#.#.#.#.###.#.# +#...#.......#.............#..t#.#...#...#.#.#.#.......#.#...#...#.#.#.N.#.....#.# +#.###.#####.#.#########.#######.#.#D#.#.#.#.#.#.#####.#.#.#####.#.#.###########.# +#.#...#...#..z#.#.......#.....#...#.#.#.#.#.#...#...#...#.#.#..h#.#.....#......b# +#.#.###.#.#####.#.#######.###.#####.###.#.#.#####.#.#####.#.#.###.#.###.#.####### +#.......#.......#...........#...........#.#.....E.#.........#...V.#...#.........# +################################################################################# diff --git a/2019/inputs/day_18_2.txt b/2019/inputs/day_18_2.txt new file mode 100644 index 0000000..8fda759 --- /dev/null +++ b/2019/inputs/day_18_2.txt @@ -0,0 +1,81 @@ +################################################################################# +#.............#.....#.................#.#.....#...#.......#...................#a# +#.#####.#######.#.###.#########.#####.#.#.###Y###.#.#####.#.#####.###########.#.# +#.#...#.#.....#.#..c#.........#...#.#...#...#.#...#.#.#...#.#.#...#...#...#.....# +#.#.###.#.###.#.###.#.###########.#.###.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.####### +#.#...#...#.#...#.#...#...........#.#...#.#.#...#.#.#.#.#.#.#.#...#.#.#.#.#.....# +#.#.#.#####.#####.#####.###.#######.#.###.#.#######.#.#.###.#.###.#.#.#.#.#.###.# +#.#.#.............#.#...#.#.#..e..#.....#.#...........#...#.#...#...#...#.....#.# +#.#########.#####.#.#.###.#.#.###.#####.#.###############.#T#.#.###############.# +#...#..k....#.....#.#.Z.#...#...#.....#.#.........#.#.....#.#.#.....#.L.....#...# +###.#.#.#######.###.###.#######.#####.#.#########.#.#.###.#.#.###.#.###.###.#.### +#...#.#.#.....#.#...#...#.....#.....#.#.#...#...#.#.#.#...#.#.#...#...#.#...#...# +#.###.#.#.###.#.#.###.###.###.#####.#.#.#.#.#.#.#.#.#.###.#.###.#####.#.#.#####.# +#.#...#.#.#...#.#...#.....#.#.....#.#.#.#.#...#...#.#...#.#.#...#.#...#.#.#.....# +#.###.#.#.#.###.###.#######.#.#####.#.#.#.#########.###.###.#.###.#.###.#.#.###.# +#...#.#.#.#...#...#.........#.#.....#.#.#.............#.......#...#.#...#.#...#.# +###.#.###.###.###.###.#.#####.#.#####.###############.#########.#.#.###.#.###.#.# +#.....#...#...#.J...#.#.#.....#.....#...#...........#.#...#...#.#.......#...#.#.# +#######.###.#######.#.###.#####.#######.#########.#.#.###.#.#.#########.#####.#.# +#.......#.#...#...#...#...#...#.#.......#.....O.#.#.#.#...#.#.......#...#.....#s# +#.#######.###.#.#.#####.###.#.#.#.#######.#####.#.#.#.#.###.#####.#.#.###.#####.# +#...#...#...#...#...#.#.#...#...#.......#.....#.#.#.#.#...#.#...#.#.#...#...#...# +###.#.#.#.#########.#.#.#.#######.#####.#.#####.#.###.###.#.###.###.#.#####.#.### +#.#...#.#.........#...#...#....d#.....#.#.#.....#.#...#...#.#.#...#.#.#.....#.#.# +#.#####.#######.#######.###.###.#####.#.#.#.#####.#.###.#.#.#.###.#.#.#.#####.#.# +#...#.#.......#.......#...#.#...#.....#.#.#.....#.......#.#.....#.#.#.#.#.......# +#.#.#.#######.#.#.#####.###.#.#####.###.#.#####.#############.###.#.#.#.#######.# +#.#...#.....#.#.#...#...#...#.....#...#.#.#...#.#...........#.#...#.#.#.#...#.#.# +#.###.###.#.#.#.###.#.###.#######.#####.#.###.#.#.#########.#.#.###.#.#.#.#.#.#.# +#...#.....#.#.#...#...#...#.......#.....#...#.#.#.....#...#...#...#.#.#...#.#...# +#.#.#######.#.###.#####.###.#######.#######.#.#.#####.###.#######.#.#####.#.#.### +#.#.#.....#.#.#.#.#.#...#.#.#...#...#...#...#.#.....#...#.....#...#.....#.#.#w#.# +#.#.#.###.#.#.#.#.#.#.###.#.#.#.###.#.#.#.###.#.###.###.#.###.#.###.###.###.#.#.# +#.#.#.#.#.#.#.#.#.#.#.#m..#...#...#...#.#.#...#...#...#.#...#.#.#.....#.#...#.#.# +###.#.#.#.###W#.#.#.#.#.#########.#####.#.#.#.###.#####.###.#.#.#######.#.###.#.# +#...#...#.#...#.....#.#.......#...#...#.#.#.#.#.#.....#.....#.#.........#.#.#...# +#.###.###.#.###.#####.#.###.###.###.#.#.#.#.#.#.#####.#######.###########.#.###.# +#.#...#...#.#...#.S...#...#.....#...#.#.#...#.....#.#.........#...#...#...#.....# +#.#.###.###.#####.#######.#######.###.#.#########.#.###########.#.#.#.#.###.##### +#.....#...........#.......F.......#....@#@...........f..........#...#...#.......# +################################################################################# +#.....#.#...........#.....#............@#@..........#...#.....#.M.......#.....#.# +###P#.#.#.#######.###.###.#.#######.###.#.#########.#.#.#.###.###.#####.###.#.#.# +#...#...#...#.#...#.....#.#.#.......#...#...#.........#...#.......#...#.....#.#.# +#.#.#######.#.#.###.#####.#.#.#######.#####.###############.#########.#######.#.# +#.#.#.....#.#.#.#...#...#.#.#.#.........#...#.......#...#.....#.....#.#.......#.# +#.###.###.#.#.#.#.###.#.#.#.#.###########.###.#####.#.#.#######.###.#.#.#######.# +#...#.#.#.#...#.#.#...#...#.#...........#...#...#.#...#.......#.#.#.#.#.........# +#.#.#.#.#.#.###.#.#.#####.#######.#####.###.###.#.###########.#.#.#.#.#.#######.# +#.#.#...#...#...#.#r#.....#.....#.....#.#...#.#.#.......#...#.....#.#...#.....#.# +#.#.###.#####.###.#.#######.###.#####.#.#.#.#.#.###.#####.#.#######.#.###.###.#.# +#.#...#.#...#...#.#.........#...#...#.#.#.#...#...#.#.....#.#......p#...#.#.#.#.# +###.#.#.#.#.###.#.###########.###.#.#.#.#.###.###.#.#.#####.#.###.#######.#.#.### +#...#.#.#.#...#.......#.....#.#...#...#.#...#.#...#.....#...#.#...#.K...#.#.#...# +#.#####.#.###.#######.#.###Q#.#.#######.###.#.#.#####.###.###.#.###.###.#.#.###.# +#.....#...#...#.#...#.#.#.#...#...#.....#...#.#.....#.#...#...#.#...#.#..j#.#...# +#.###.#####.###.#.#.###.#.#########.###.#.#########.###.#.#.###.#.###.#####.#.### +#...#.#.....#...#.#.B...#...#...#...#...#.#.......#.....#.#...#.#...........#.R.# +#.###.#.#######.#.#######.#.#.#.#.###.###.#.#.###.#######.###.###.#############.# +#.#...#.......#.#n....#...#.#.#...#...#.#...#...#.....#...#.#.....#..u..#.....#.# +###.#.#######.#.#####.#.###.#.#####.###.#.#####.###.###.###.###.###.###.#.###.#.# +#...#.#...#...#.....#.#.#...#...#.#...#.#...#...#...#...#...#.#.#...#...#.#...#.# +#.#####.#.#.###.#.#####.#.###.#.#.###.#.#####.#######.#####.#.###.###.###.###.#.# +#...#...#.#.#...#.......#.#...#.#...#...#.....#.......#.....#.U...#.#...#...#...# +#.#.#.###.#.#.#########.#.#####.###.###.#.#.###.#######.###########.###X#.#.###.# +#.#..l#...#.#...#.......#.....#...#...#.#.#o#...#.#.....#...#......x....#.#.#...# +#.#####C###.#.###.###########.###.#.###.#.###.###.#.###.#.#.#I#############.#.### +#.....#...#.#.#...#...#.....#.#...#.#...#.#...#.....#...#.#...#v......G.#...#..q# +###.#####.#.###.###.#.#.###.#.#.###.#.###.#.###.#####.#.#.#####.#######.#.#####.# +#.#y#...#.#...#.#...#.#...#.#...#...#...#.#.#...#.....#.#..i..#...#.....#...#...# +#.#.#.#.#.###.#.#.###.#.#.#.#####.#.###.#.#.###.#.###########H#.#.#.#####.#.#.### +#...#.#.#...#.#.....#.#.#.#.#...#.#.....#.#...#.#...........#.#.#.#g..#...#.#...# +#.###.#.###A#.#######.#.#.#.#.###.#######.###.#.#########.#.#.#.#.###.#####.###.# +#.#...#.....#.........#.#.#.#.#...#.....#...#.#.......#...#.#.#.#.#.#.#...#...#.# +###.#####################.#.#.#.#####.###.#.#.#########.###.#.###.#.#.#.#.###.#.# +#...#.......#.............#..t#.#...#...#.#.#.#.......#.#...#...#.#.#.N.#.....#.# +#.###.#####.#.#########.#######.#.#D#.#.#.#.#.#.#####.#.#.#####.#.#.###########.# +#.#...#...#..z#.#.......#.....#...#.#.#.#.#.#...#...#...#.#.#..h#.#.....#......b# +#.#.###.#.#####.#.#######.###.#####.###.#.#.#####.#.#####.#.#.###.#.###.#.####### +#.......#.......#...........#...........#.#.....E.#.........#...V.#...#.........# +################################################################################# diff --git a/2019/inputs/day_19.txt b/2019/inputs/day_19.txt new file mode 100644 index 0000000..e85881e --- /dev/null +++ b/2019/inputs/day_19.txt @@ -0,0 +1 @@ +109,424,203,1,21102,11,1,0,1106,0,282,21101,0,18,0,1106,0,259,1201,1,0,221,203,1,21102,1,31,0,1106,0,282,21101,0,38,0,1106,0,259,20102,1,23,2,21202,1,1,3,21101,1,0,1,21101,0,57,0,1105,1,303,2101,0,1,222,20101,0,221,3,21001,221,0,2,21102,1,259,1,21101,0,80,0,1105,1,225,21101,185,0,2,21102,91,1,0,1106,0,303,1202,1,1,223,21001,222,0,4,21102,259,1,3,21101,225,0,2,21102,1,225,1,21101,0,118,0,1106,0,225,20102,1,222,3,21102,1,131,2,21101,133,0,0,1106,0,303,21202,1,-1,1,22001,223,1,1,21101,148,0,0,1105,1,259,2101,0,1,223,21002,221,1,4,21002,222,1,3,21101,0,16,2,1001,132,-2,224,1002,224,2,224,1001,224,3,224,1002,132,-1,132,1,224,132,224,21001,224,1,1,21101,0,195,0,106,0,109,20207,1,223,2,20101,0,23,1,21102,1,-1,3,21101,0,214,0,1105,1,303,22101,1,1,1,204,1,99,0,0,0,0,109,5,1201,-4,0,249,22101,0,-3,1,22101,0,-2,2,21201,-1,0,3,21101,0,250,0,1106,0,225,21201,1,0,-4,109,-5,2106,0,0,109,3,22107,0,-2,-1,21202,-1,2,-1,21201,-1,-1,-1,22202,-1,-2,-2,109,-3,2106,0,0,109,3,21207,-2,0,-1,1206,-1,294,104,0,99,22102,1,-2,-2,109,-3,2105,1,0,109,5,22207,-3,-4,-1,1206,-1,346,22201,-4,-3,-4,21202,-3,-1,-1,22201,-4,-1,2,21202,2,-1,-1,22201,-4,-1,1,21201,-2,0,3,21101,343,0,0,1106,0,303,1105,1,415,22207,-2,-3,-1,1206,-1,387,22201,-3,-2,-3,21202,-2,-1,-1,22201,-3,-1,3,21202,3,-1,-1,22201,-3,-1,2,22101,0,-4,1,21102,384,1,0,1106,0,303,1105,1,415,21202,-4,-1,-4,22201,-4,-3,-4,22202,-3,-2,-2,22202,-2,-4,-4,22202,-3,-2,-3,21202,-4,-1,-2,22201,-3,-2,1,21201,1,0,-4,109,-5,2106,0,0 diff --git a/2019/inputs/day_2.txt b/2019/inputs/day_2.txt new file mode 100644 index 0000000..dd34cff --- /dev/null +++ b/2019/inputs/day_2.txt @@ -0,0 +1 @@ +1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,9,1,19,1,19,5,23,1,23,6,27,2,9,27,31,1,5,31,35,1,35,10,39,1,39,10,43,2,43,9,47,1,6,47,51,2,51,6,55,1,5,55,59,2,59,10,63,1,9,63,67,1,9,67,71,2,71,6,75,1,5,75,79,1,5,79,83,1,9,83,87,2,87,10,91,2,10,91,95,1,95,9,99,2,99,9,103,2,10,103,107,2,9,107,111,1,111,5,115,1,115,2,119,1,119,6,0,99,2,0,14,0 diff --git a/2019/inputs/day_20.txt b/2019/inputs/day_20.txt new file mode 100644 index 0000000..09d6330 --- /dev/null +++ b/2019/inputs/day_20.txt @@ -0,0 +1,113 @@ + K Z V U I F + Q T Y Y E E + ###################################.#####.###.###########.#####.#.##################################### + #.......#.#.............#.........#.#.......#.#.#.........#.....#...#...#...........#...#.....#.#.....# + ###.#####.###.###.###.###########.#.###.#####.#.###.#.#.#.###.###.###.#####.#######.###.#####.#.###.### + #.#...#.#.#.#.#.#.#.#.....#...........#.....#.#...#.#.#.#...#.#.#.#.....#.#.#...#.#.#...#.#.#.....#...# + #.#.###.#.#.###.###.#.#########.###.#######.#.#.#.#######.#.#.#.#.#.###.#.#.#.###.#####.#.#.#.#####.### + #.....#...#...............#.#.#.#.#.#.....#.#.#.#...#.....#.#.#.#.#...#.....#.#.#.........#...#.#...#.# + #.#######.###########.###.#.#.###.#.###.#.#.#.#.###.###.###.#.#.#.#.###.#.###.#.#.#.#######.###.###.#.# + #...#.......#...#.#...#...#...#.#.#.#...#...#.....#.#.#.#...#...#...#...#.........#.#.#.#...#.......#.# + #.#######.#.###.#.#######.###.#.#.#.#.#.###.###.#####.#####.###.#.#####.#####.#.#.###.#.###.#.#######.# + #.#.#...#.#...#.......#.......#.#...#.#...#.#.#...#.#.......#...#.#.........#.#.#...............#.....# + #.#.#.#######.#####.#####.###.#.###.#.#####.#.#.###.#####.###.#####.###.###########.###############.### + #.#...#...#.......#...#...#.#.......#.....#.#.....#.#.......#.#...#.#.#.#.......#.......#...#...#.#...# + #.###.###.#####.#.###.#####.#####.#.###.#######.#.#.#######.#.#.#####.#.#.###########.#####.###.#.#.### + #.#.#.#...#...#.#.#...#.#.#.#.#.#.#.#...#.......#.#.#.#.....#.....#...............#...#.#...#.........# + #.#.#.#.#####.#.#####.#.#.#.#.#.###.#.#####.###.###.#.#####.#.#######.#.#######.#######.#.#.###.#####.# + #.......#.#.#...#.#...............#.#...#.#.#.......#...#...#.......#.#.#.#.#...#.#.....#.#.#...#.#...# + #.#######.#.###.#.#.###.#.#.#.###.#.###.#.###.#.###.#.###.#.#.#.#######.#.#.#####.#.#######.#.###.###.# + #.#.#.#.#.#.......#.#.#.#.#.#.#.#.#.#...#...#.#.#.#.#.....#.#.#.#.#.#...#.......#.#.#.#...#.#.#...#.#.# + #.#.#.#.#.#####.#####.#.#####.#.#.#.#.###.#.#.###.#####.#####.#.#.#.#.#####.#.###.#.#.#.###.#.###.#.### + #.#.#.#.#.#.....#.#.....#.......#.#.#.#...#.#...#...#.......#.#.#.#.........#.#...#.......#.#.#.#.#.#.# + #.#.#.#.#.#.###.#.#.#####.###.#.#.#.#.#.###.#.###.#.###.#######.#.#.###.###.#####.#.#.#.###.#.#.#.#.#.# + #.......#.#.#.#.#.#.#...#.#.#.#.#...#...#...#...#.#.#.....#.#...#...#...#.......#...#.#...#.#.#.#...#.# + #####.###.#.#.###.#####.###.###.###.#####.#####.#.#.#.#####.#.#.#####.#######.#####.#######.#.#.#.###.# + #.#...#.........#...#.#.......#...#...#.....#...#.#.#.....#...#.#...........#.#.#.#...#.#.........#...# + #.###.#.#.#######.#.#.#.#########.#########.#.###.#.#.#.###.#.#########.###.###.#.#.###.###.#######.### + #.#.....#...#...#.#...#.....#.......#.......#.....#.#.#...#.#.....#.....#.....#...#.#...#.........#...# + #.###.#.#.#####.###.###.#######.#####.#############.#.#########.###.###########.###.#.#.#.###.#.###.#.# + #...#.#.#.#.#...#.#.#.....# U N Q W Z N #.......#.#...#...#...#.#.# + ###.###.###.###.#.#.###.### Y D P L W J #####.#########.#######.### + #.#.#.#.#...#...#.#...#.#.# #.....#...#...........#.#.# + #.#.#.#.###.###.#.#.###.#.# ###.#.###.###.###.#####.#.# + #...................#.#...# #.#.#.........#...#........CB + #.###.#######.#.###.#.#.#.# #.#.#.###.#####.###.#.#.#.# + #.#.........#.#...#.....#.# #...#.#.....#...#...#.#.#..AA + #######.#######.###.#####.# #.#######.#.###.#.#.###.### + #.....#.......#...#...#...# QJ..#.#...#.#.#.#...#...#.#.# + ###.#.#.###.###########.### ###.#.#######.###########.# +YG....#.....#.#.......#......TY #.........#...........#...# + #.#.#.###########.#.#.##### #.#####.###.#########.#.#.# + #.#.#.#...#...#...#.#.#...# CB..#.#.......#.#.#.#.....#..DN + #######.#####.#.#.#####.### ###.#########.#.#.######### + #.....#...#...#.#.#...#.#.# #...#.........#...#.......# + #.###.#.#.#.#.#.#.#.#.#.#.# ###.###.#####.#.#.#.#####.# +SP..#.....#...#...#...#......YG #.......#...#...#.#.#.....# + ########################### #.#.###.###.#.###.#.#.##### +NJ....#.................#.#.# KQ..#.#.......#.#...#.#.....# + #.#.#.#####.#.#.#####.#.#.# ###.###.###.###.#.#.###.#.# + #.#.#.....#.#.#.#.....#...# #.#...#.#.#.#.#.#.....#.#..IT + ###.#####.###.#####.#####.# #.#.#####.###.############# + #.#.....#...#.....#........WE IE..#.#.#.#...............#.# + #.#.#.#.#.#########.#.###.# #.#.#.#.#.###.###.###.###.# + #...#.#...#.#.#.#...#.#...# #.#.#...#.#.#...#.#...#.#.# + #.#######.#.#.#.#####.##### #.#####.#.#.#.#.#####.#.#.# + #.#.....#.#.........#.#...# #...........#.#.#.#...#....QJ + #######.###.#.#.###.#####.# #######.#.#######.#.#.###.# + #.#.....#...#.#.#.........# #.....#.#.#...#.#...#.....# + #.###.#.#.#######.#.#####.# ###.#########.#.########### +YV..#...#.#...#.#.#.#.#.....# #.......#.........#.#.....# + #.#.###.#.#.#.#.#.###.#.### #.#####.###.#####.#.#.#.#.# + #.....#...#.#...#.#.#.#....QX #.#...#.........#.#...#.#..QP + ###.###.#######.###.###.#.# #.###.#.###.#####.#.#####.# + #.#.#.....#.....#.....#.#.# #.#.#.#.#...#.....#...#...# + #.#####.#######.###.#.##### #.#.#.#####.#.###.###.#.#.# + #.#...#.#.....#.#.#.#...#..DM FE..#.#...#.#.#.#.......#.#.# + #.#.#####.#.###.#.#.###.#.# #.#.#.#.#.###############.# + #.#.......#...#.#.....#...# #.#...#.#.#.....#.......#.# + #.#.#.#.#.###.#.#####.###.# #######.#.#.#######.#.##### +QX....#.#.#.#.............#.# #.......#.#.......#.#.....# + #####.#.#.#.#.#.########### ###.###.#.#.#.###.#.#####.# + #.#.#.#.#.#.#.#.#.........# GX..#.#.......#.#.#.......#..DM + #.#.###############.###.#.# #.#.#####.#.###.###.###.#.# + #.#.#.........#...#...#.#..CS #.....#.#.#.#.#...#.#.#.#.# + #.#.#######.#####.###.#.### #######.#.###.#.#####.##### +WE........#.#.#.#.#.#...#...# MX........#.#.........#......CS + #####.###.#.#.#.#.#.#.##### #####.###.###.#####.###.### + #...#...............#.#.#.# #.#.....#.#.......#...#...# + ###.###################.#.# #.#.###########.#.###.#.#.# + #...............#.#........ME #.#.#.#...#...#.#.#...#.#.# + #.#.#####.#####.#.#.###.#.# #.#.#####.#######.#.#####.# +GX..#...#.#.#...........#.#.# #.................#.......# + #.#.###.#######.###.#####.# J D Z V S I Y #.###.###.#.###.###.#.#.#.# + #.#.......#.......#.....#.# I N T Y P T V #...#...#.#.#.#.#.#.#.#.#.# + #.#.#.#########.#.#.#############.#########.###.#.#.#############.###.###########.###.#.#.#.#.#.#####.# + #.#.#.....#.....#.#...#.......#.....#.......#.....#.#.#.#.#...#...#.........#.....#...#.#.....#...#...# + #.#############.###.#######.#.#####.#.###.###.#####.#.#.#.###.#.#####.#.#.#####.#.#.#.#.#####.###.##### + #...........#.....#.....#...#.......#...#.#.#.....#.#.....#.#.......#.#.#...#...#.#.#.#.#.....#.#.....# + ###.#######.#######.#####.###.#######.#.###.###.#.#.#.###.#.#.#######.#############.#.#######.#.#.###.# + #.#.....#.#.#.#.......#.#.#.#...#...#.#...#...#.#.#.....#...#.......#.....#.#...#...#...#.......#.#...# + #.#.#.###.#.#.#.#.###.#.###.###.#.#.###.#.###.#.#########.#####.#.###.#.###.#.#########.#####.#####.#.# + #...#...#.....#.#.#...#...#.#...#.#...#.#.#.....#.#.#.....#...#.#.#...#.............#.....#.....#...#.# + #####.###########.#####.###.#.###.#.###.#####.#.#.#.###.#.#.#.###.#.#######.###.#########.#.#.######### + #.........#.....#.#...........#...#.#...#.#...#.#...#...#.#.#.....#.......#...#.#.....#.#.#.#.....#.#.# + ###.###.#.###.#####.#.#.#.#.#.#.###.###.#.###.#####.#.#####.#.###.###.#####.#####.#####.#####.#####.#.# + #...#.#.#.#.........#.#.#.#.#...#...#.....#.....#.......#...#.#.#.#.......#.#.#...#.....#.#.#.........# + #.#.#.#.###.###.###########.###.#.###.#.#####.#.#.#.#.#.#.#.###.###.#.###.###.###.#.#.#.#.#.#.###.#.#.# + #.#.#...#...#.....#.........#.#.#...#.#.#.#...#.#.#.#.#.#.#.......#.#...#.#.....#...#.#.#.......#.#.#.# + #.#.###.#.#.#.#.#.#####.#####.#.###.#.###.###.#####.#######.###.###.#########.###.#######.#.#.#####.#.# + #.#.#...#.#.#.#.#.#.#.#.#.......#...#...#...#...#.....#.#.....#.#.#.......#...#.....#.#.#.#.#.#.#...#.# + #.#####.#.#####.###.#.#######.#.#.#.###.###.#.#.###.###.###.#####.#.#.#####.#####.#.#.#.###.#.#.#####.# + #...#...#.#.....#.#.....#.#...#.#.#.#...#.#...#.#.......#.#.#.#.#...#...........#.#.#...#.#.#.....#.#.# + ###.###.#########.#####.#.###.#####.#.###.###.#####.#####.#.#.#.#.#######.#######.###.###.#####.#.#.### + #.....#.#.....................#...#.#.......#.#.....#.....#.....#.#...........#.....#.#.#.#.#...#.#...# + #.###.#####.#.#.#.###.#.#.#.###.###.###.#.###.#####.###.#.#.#########.###########.###.#.#.#.###.###.### + #...#...#...#.#.#.#...#.#.#.#.......#.#.#...#.....#.#...#.#.......#.#.........#.............#.........# + ###.#.#####.#############.#####.#.###.#.###.#####.#.#.###.###.#.#.#.#####.#.###.###.###.###.#.#####.### + #...#.#.#.#...#.#...#.......#...#.....#.#...#.....#...#.#.#.#.#.#...#.....#.....#.....#...#.#...#.....# + #.###.#.#.###.#.###.###.#####.#####.#####.###.#########.#.#.#####.#######.#####.###.#####.#.#.###.###.# + #.#.........#.#.........#.....#.....#.....#.........#.....#.......#...........#...#...#...#.#...#.#...# + ###################################.###.#######.#.###.###.###.#######.################################# + N J W Z Z M M T + D I L W Z X E Y diff --git a/2019/inputs/day_21.txt b/2019/inputs/day_21.txt new file mode 100644 index 0000000..cafb613 --- /dev/null +++ b/2019/inputs/day_21.txt @@ -0,0 +1 @@ +109,2050,21102,1,966,1,21101,0,13,0,1106,0,1378,21101,20,0,0,1105,1,1337,21101,27,0,0,1105,1,1279,1208,1,65,748,1005,748,73,1208,1,79,748,1005,748,110,1208,1,78,748,1005,748,132,1208,1,87,748,1005,748,169,1208,1,82,748,1005,748,239,21101,0,1041,1,21102,73,1,0,1106,0,1421,21101,0,78,1,21101,0,1041,2,21101,88,0,0,1106,0,1301,21101,68,0,1,21102,1041,1,2,21102,103,1,0,1106,0,1301,1101,0,1,750,1105,1,298,21101,0,82,1,21101,0,1041,2,21102,1,125,0,1105,1,1301,1102,1,2,750,1105,1,298,21102,79,1,1,21102,1,1041,2,21101,147,0,0,1106,0,1301,21102,1,84,1,21102,1,1041,2,21101,0,162,0,1106,0,1301,1101,0,3,750,1106,0,298,21101,0,65,1,21101,1041,0,2,21101,0,184,0,1106,0,1301,21101,76,0,1,21102,1,1041,2,21101,199,0,0,1106,0,1301,21102,75,1,1,21102,1,1041,2,21101,214,0,0,1105,1,1301,21101,221,0,0,1106,0,1337,21101,10,0,1,21102,1041,1,2,21102,236,1,0,1105,1,1301,1106,0,553,21102,1,85,1,21102,1,1041,2,21101,254,0,0,1105,1,1301,21101,78,0,1,21101,0,1041,2,21102,1,269,0,1106,0,1301,21102,276,1,0,1105,1,1337,21101,10,0,1,21102,1,1041,2,21101,0,291,0,1105,1,1301,1101,1,0,755,1105,1,553,21101,32,0,1,21102,1,1041,2,21102,313,1,0,1106,0,1301,21102,1,320,0,1106,0,1337,21102,327,1,0,1105,1,1279,1202,1,1,749,21102,65,1,2,21101,0,73,3,21102,1,346,0,1106,0,1889,1206,1,367,1007,749,69,748,1005,748,360,1101,0,1,756,1001,749,-64,751,1106,0,406,1008,749,74,748,1006,748,381,1102,1,-1,751,1105,1,406,1008,749,84,748,1006,748,395,1102,1,-2,751,1105,1,406,21102,1100,1,1,21101,0,406,0,1105,1,1421,21101,32,0,1,21102,1,1100,2,21101,421,0,0,1105,1,1301,21102,1,428,0,1106,0,1337,21102,435,1,0,1105,1,1279,2102,1,1,749,1008,749,74,748,1006,748,453,1102,1,-1,752,1106,0,478,1008,749,84,748,1006,748,467,1101,0,-2,752,1105,1,478,21101,1168,0,1,21101,0,478,0,1106,0,1421,21102,485,1,0,1105,1,1337,21102,1,10,1,21101,1168,0,2,21101,0,500,0,1105,1,1301,1007,920,15,748,1005,748,518,21101,0,1209,1,21102,1,518,0,1106,0,1421,1002,920,3,529,1001,529,921,529,101,0,750,0,1001,529,1,537,101,0,751,0,1001,537,1,545,1001,752,0,0,1001,920,1,920,1105,1,13,1005,755,577,1006,756,570,21102,1100,1,1,21101,570,0,0,1105,1,1421,21102,1,987,1,1105,1,581,21101,1001,0,1,21102,1,588,0,1106,0,1378,1101,0,758,593,1001,0,0,753,1006,753,654,21001,753,0,1,21101,610,0,0,1106,0,667,21101,0,0,1,21101,621,0,0,1106,0,1463,1205,1,647,21101,1015,0,1,21101,635,0,0,1106,0,1378,21101,1,0,1,21101,646,0,0,1105,1,1463,99,1001,593,1,593,1106,0,592,1006,755,664,1101,0,0,755,1105,1,647,4,754,99,109,2,1102,1,726,757,21202,-1,1,1,21101,9,0,2,21102,1,697,3,21102,692,1,0,1105,1,1913,109,-2,2105,1,0,109,2,101,0,757,706,1201,-1,0,0,1001,757,1,757,109,-2,2106,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,255,63,95,191,159,223,127,0,155,123,163,249,179,110,200,117,68,60,61,190,197,250,196,186,111,187,99,158,244,217,222,246,94,205,35,54,115,239,218,243,62,241,229,168,79,199,215,178,182,118,43,228,125,203,214,113,231,120,77,153,141,157,253,143,87,102,86,207,213,177,57,181,156,85,78,204,247,174,109,172,248,92,98,53,93,232,69,242,212,237,152,70,216,183,47,49,124,121,116,122,230,114,100,103,201,51,55,84,171,234,254,238,233,76,185,34,50,175,219,140,42,189,136,38,226,169,39,184,198,166,137,220,251,245,202,142,56,139,167,206,126,252,106,107,71,162,235,236,101,108,119,58,173,170,46,221,227,59,154,188,138,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,73,110,112,117,116,32,105,110,115,116,114,117,99,116,105,111,110,115,58,10,13,10,87,97,108,107,105,110,103,46,46,46,10,10,13,10,82,117,110,110,105,110,103,46,46,46,10,10,25,10,68,105,100,110,39,116,32,109,97,107,101,32,105,116,32,97,99,114,111,115,115,58,10,10,58,73,110,118,97,108,105,100,32,111,112,101,114,97,116,105,111,110,59,32,101,120,112,101,99,116,101,100,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,32,65,78,68,44,32,79,82,44,32,111,114,32,78,79,84,67,73,110,118,97,108,105,100,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116,59,32,101,120,112,101,99,116,101,100,32,115,111,109,101,116,104,105,110,103,32,108,105,107,101,32,65,44,32,66,44,32,67,44,32,68,44,32,74,44,32,111,114,32,84,40,73,110,118,97,108,105,100,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110,116,59,32,101,120,112,101,99,116,101,100,32,74,32,111,114,32,84,52,79,117,116,32,111,102,32,109,101,109,111,114,121,59,32,97,116,32,109,111,115,116,32,49,53,32,105,110,115,116,114,117,99,116,105,111,110,115,32,99,97,110,32,98,101,32,115,116,111,114,101,100,0,109,1,1005,1262,1270,3,1262,20101,0,1262,0,109,-1,2106,0,0,109,1,21102,1,1288,0,1106,0,1263,21001,1262,0,0,1102,0,1,1262,109,-1,2106,0,0,109,5,21102,1310,1,0,1105,1,1279,22102,1,1,-2,22208,-2,-4,-1,1205,-1,1332,22101,0,-3,1,21101,1332,0,0,1106,0,1421,109,-5,2106,0,0,109,2,21101,1346,0,0,1105,1,1263,21208,1,32,-1,1205,-1,1363,21208,1,9,-1,1205,-1,1363,1105,1,1373,21102,1,1370,0,1106,0,1279,1106,0,1339,109,-2,2105,1,0,109,5,1202,-4,1,1386,20101,0,0,-2,22101,1,-4,-4,21102,0,1,-3,22208,-3,-2,-1,1205,-1,1416,2201,-4,-3,1408,4,0,21201,-3,1,-3,1106,0,1396,109,-5,2106,0,0,109,2,104,10,22102,1,-1,1,21101,0,1436,0,1106,0,1378,104,10,99,109,-2,2105,1,0,109,3,20002,593,753,-1,22202,-1,-2,-1,201,-1,754,754,109,-3,2105,1,0,109,10,21102,5,1,-5,21102,1,1,-4,21102,1,0,-3,1206,-9,1555,21101,3,0,-6,21101,5,0,-7,22208,-7,-5,-8,1206,-8,1507,22208,-6,-4,-8,1206,-8,1507,104,64,1105,1,1529,1205,-6,1527,1201,-7,716,1515,21002,0,-11,-8,21201,-8,46,-8,204,-8,1105,1,1529,104,46,21201,-7,1,-7,21207,-7,22,-8,1205,-8,1488,104,10,21201,-6,-1,-6,21207,-6,0,-8,1206,-8,1484,104,10,21207,-4,1,-8,1206,-8,1569,21102,1,0,-9,1105,1,1689,21208,-5,21,-8,1206,-8,1583,21102,1,1,-9,1106,0,1689,1201,-5,716,1588,21002,0,1,-2,21208,-4,1,-1,22202,-2,-1,-1,1205,-2,1613,21201,-5,0,1,21102,1613,1,0,1105,1,1444,1206,-1,1634,22101,0,-5,1,21101,0,1627,0,1106,0,1694,1206,1,1634,21101,2,0,-3,22107,1,-4,-8,22201,-1,-8,-8,1206,-8,1649,21201,-5,1,-5,1206,-3,1663,21201,-3,-1,-3,21201,-4,1,-4,1106,0,1667,21201,-4,-1,-4,21208,-4,0,-1,1201,-5,716,1676,22002,0,-1,-1,1206,-1,1686,21101,1,0,-4,1105,1,1477,109,-10,2106,0,0,109,11,21102,0,1,-6,21101,0,0,-8,21101,0,0,-7,20208,-6,920,-9,1205,-9,1880,21202,-6,3,-9,1201,-9,921,1724,21002,0,1,-5,1001,1724,1,1733,20101,0,0,-4,21202,-4,1,1,21101,1,0,2,21101,9,0,3,21101,1754,0,0,1105,1,1889,1206,1,1772,2201,-10,-4,1767,1001,1767,716,1767,20102,1,0,-3,1105,1,1790,21208,-4,-1,-9,1206,-9,1786,22101,0,-8,-3,1105,1,1790,22101,0,-7,-3,1001,1733,1,1795,21001,0,0,-2,21208,-2,-1,-9,1206,-9,1812,21201,-8,0,-1,1105,1,1816,22101,0,-7,-1,21208,-5,1,-9,1205,-9,1837,21208,-5,2,-9,1205,-9,1844,21208,-3,0,-1,1106,0,1855,22202,-3,-1,-1,1106,0,1855,22201,-3,-1,-1,22107,0,-1,-1,1106,0,1855,21208,-2,-1,-9,1206,-9,1869,21201,-1,0,-8,1105,1,1873,22101,0,-1,-7,21201,-6,1,-6,1105,1,1708,22102,1,-8,-10,109,-11,2106,0,0,109,7,22207,-6,-5,-3,22207,-4,-6,-2,22201,-3,-2,-1,21208,-1,0,-6,109,-7,2105,1,0,0,109,5,2102,1,-2,1912,21207,-4,0,-1,1206,-1,1930,21102,1,0,-4,22101,0,-4,1,21202,-3,1,2,21102,1,1,3,21102,1949,1,0,1105,1,1954,109,-5,2105,1,0,109,6,21207,-4,1,-1,1206,-1,1977,22207,-5,-3,-1,1206,-1,1977,21202,-5,1,-5,1105,1,2045,22102,1,-5,1,21201,-4,-1,2,21202,-3,2,3,21102,1,1996,0,1105,1,1954,22102,1,1,-5,21102,1,1,-2,22207,-5,-3,-1,1206,-1,2015,21101,0,0,-2,22202,-3,-2,-3,22107,0,-4,-1,1206,-1,2037,21202,-2,1,1,21101,2037,0,0,106,0,1912,21202,-3,-1,-3,22201,-5,-3,-5,109,-6,2106,0,0 diff --git a/2019/inputs/day_22.txt b/2019/inputs/day_22.txt new file mode 100644 index 0000000..b61e760 --- /dev/null +++ b/2019/inputs/day_22.txt @@ -0,0 +1,100 @@ +deal with increment 34 +deal into new stack +cut 1712 +deal into new stack +cut 1984 +deal with increment 62 +deal into new stack +deal with increment 13 +deal into new stack +deal with increment 67 +cut -5590 +deal with increment 63 +cut -1086 +deal with increment 52 +cut 7894 +deal with increment 71 +cut -864 +deal into new stack +cut 239 +deal with increment 17 +cut -7187 +deal with increment 62 +deal into new stack +cut -7380 +deal with increment 14 +cut 3842 +deal into new stack +cut -5258 +deal with increment 40 +deal into new stack +deal with increment 45 +cut -6026 +deal with increment 21 +cut 3600 +deal with increment 56 +cut 2329 +deal into new stack +deal with increment 13 +cut -2409 +deal with increment 49 +cut 294 +deal into new stack +cut 4776 +deal with increment 17 +cut 5801 +deal with increment 43 +cut 8999 +deal with increment 46 +cut -8527 +deal with increment 4 +deal into new stack +cut -6767 +deal into new stack +deal with increment 33 +cut -532 +deal with increment 29 +deal into new stack +deal with increment 56 +cut 6867 +deal with increment 70 +cut 4276 +deal into new stack +cut -5621 +deal with increment 56 +cut -2966 +deal with increment 70 +deal into new stack +deal with increment 51 +cut -4097 +deal with increment 42 +deal into new stack +cut -5180 +deal with increment 61 +deal into new stack +cut 5367 +deal with increment 50 +cut 3191 +deal with increment 75 +cut 915 +deal with increment 72 +cut -3893 +deal with increment 22 +cut -3405 +deal with increment 30 +cut -6509 +deal with increment 31 +cut -7220 +deal with increment 45 +cut 6489 +deal with increment 70 +cut -4047 +deal into new stack +deal with increment 75 +cut 3980 +deal with increment 10 +cut 9677 +deal into new stack +deal with increment 45 +cut -6969 +deal into new stack diff --git a/2019/inputs/day_23.txt b/2019/inputs/day_23.txt new file mode 100644 index 0000000..e4f8887 --- /dev/null +++ b/2019/inputs/day_23.txt @@ -0,0 +1 @@ +3,62,1001,62,11,10,109,2215,105,1,0,1846,1780,1120,1959,571,2182,1083,631,1485,1306,1157,2153,1654,1592,1454,664,1815,951,2124,794,695,2023,1378,1248,1518,984,1887,2058,823,1019,891,1277,1685,2089,1341,1922,1186,765,1751,1413,602,922,858,1623,1217,1559,1050,1990,734,1720,0,0,0,0,0,0,0,0,0,0,0,0,3,64,1008,64,-1,62,1006,62,88,1006,61,170,1106,0,73,3,65,20101,0,64,1,21001,66,0,2,21101,105,0,0,1105,1,436,1201,1,-1,64,1007,64,0,62,1005,62,73,7,64,67,62,1006,62,73,1002,64,2,133,1,133,68,133,101,0,0,62,1001,133,1,140,8,0,65,63,2,63,62,62,1005,62,73,1002,64,2,161,1,161,68,161,1101,1,0,0,1001,161,1,169,101,0,65,0,1101,0,1,61,1101,0,0,63,7,63,67,62,1006,62,203,1002,63,2,194,1,68,194,194,1006,0,73,1001,63,1,63,1105,1,178,21102,1,210,0,105,1,69,2101,0,1,70,1102,0,1,63,7,63,71,62,1006,62,250,1002,63,2,234,1,72,234,234,4,0,101,1,234,240,4,0,4,70,1001,63,1,63,1105,1,218,1105,1,73,109,4,21101,0,0,-3,21102,0,1,-2,20207,-2,67,-1,1206,-1,293,1202,-2,2,283,101,1,283,283,1,68,283,283,22001,0,-3,-3,21201,-2,1,-2,1106,0,263,22102,1,-3,-3,109,-4,2106,0,0,109,4,21101,0,1,-3,21101,0,0,-2,20207,-2,67,-1,1206,-1,342,1202,-2,2,332,101,1,332,332,1,68,332,332,22002,0,-3,-3,21201,-2,1,-2,1106,0,312,21202,-3,1,-3,109,-4,2106,0,0,109,1,101,1,68,358,21001,0,0,1,101,3,68,366,21001,0,0,2,21102,1,376,0,1106,0,436,22101,0,1,0,109,-1,2106,0,0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,137438953472,274877906944,549755813888,1099511627776,2199023255552,4398046511104,8796093022208,17592186044416,35184372088832,70368744177664,140737488355328,281474976710656,562949953421312,1125899906842624,109,8,21202,-6,10,-5,22207,-7,-5,-5,1205,-5,521,21102,1,0,-4,21102,1,0,-3,21101,0,51,-2,21201,-2,-1,-2,1201,-2,385,471,20102,1,0,-1,21202,-3,2,-3,22207,-7,-1,-5,1205,-5,496,21201,-3,1,-3,22102,-1,-1,-5,22201,-7,-5,-7,22207,-3,-6,-5,1205,-5,515,22102,-1,-6,-5,22201,-3,-5,-3,22201,-1,-4,-4,1205,-2,461,1106,0,547,21102,-1,1,-4,21202,-6,-1,-6,21207,-7,0,-5,1205,-5,547,22201,-7,-6,-7,21201,-4,1,-4,1106,0,529,21201,-4,0,-7,109,-8,2106,0,0,109,1,101,1,68,564,20102,1,0,0,109,-1,2106,0,0,1102,97571,1,66,1101,1,0,67,1101,598,0,68,1101,556,0,69,1101,0,1,71,1101,0,600,72,1105,1,73,1,-1605712,28,112719,1102,1,48679,66,1102,1,1,67,1102,1,629,68,1102,556,1,69,1101,0,0,71,1102,631,1,72,1106,0,73,1,1782,1102,1,7877,66,1102,1,2,67,1101,658,0,68,1101,302,0,69,1102,1,1,71,1102,1,662,72,1105,1,73,0,0,0,0,26,81559,1101,0,22453,66,1101,1,0,67,1102,1,691,68,1101,0,556,69,1102,1,1,71,1102,1,693,72,1105,1,73,1,125,35,19959,1101,0,21493,66,1101,0,5,67,1102,1,722,68,1101,0,302,69,1102,1,1,71,1101,0,732,72,1106,0,73,0,0,0,0,0,0,0,0,0,0,2,56893,1102,77191,1,66,1101,1,0,67,1102,1,761,68,1101,556,0,69,1101,1,0,71,1101,763,0,72,1105,1,73,1,1037327,8,179734,1101,57977,0,66,1101,0,1,67,1101,792,0,68,1102,556,1,69,1101,0,0,71,1101,0,794,72,1105,1,73,1,1430,1102,57173,1,66,1101,0,1,67,1101,0,821,68,1102,1,556,69,1101,0,0,71,1101,0,823,72,1106,0,73,1,1128,1101,0,37573,66,1102,1,3,67,1102,1,850,68,1102,253,1,69,1102,1,1,71,1101,856,0,72,1105,1,73,0,0,0,0,0,0,17,209158,1101,0,17569,66,1102,1,1,67,1101,0,885,68,1102,556,1,69,1101,2,0,71,1101,887,0,72,1106,0,73,1,8329,20,85972,34,54146,1101,84653,0,66,1101,1,0,67,1101,0,918,68,1102,1,556,69,1102,1,1,71,1101,0,920,72,1105,1,73,1,3167,20,64479,1101,0,88657,66,1102,1,1,67,1101,0,949,68,1101,556,0,69,1102,0,1,71,1102,1,951,72,1105,1,73,1,1419,1101,0,104579,66,1101,2,0,67,1101,0,978,68,1101,0,302,69,1101,0,1,71,1102,982,1,72,1105,1,73,0,0,0,0,6,76316,1102,33797,1,66,1101,0,1,67,1102,1011,1,68,1101,556,0,69,1102,1,3,71,1101,0,1013,72,1105,1,73,1,5,35,13306,35,26612,39,113194,1102,75781,1,66,1101,0,1,67,1102,1,1046,68,1102,1,556,69,1101,0,1,71,1101,1048,0,72,1106,0,73,1,1777,20,42986,1101,32183,0,66,1102,1,1,67,1102,1,1077,68,1102,556,1,69,1102,1,2,71,1102,1,1079,72,1105,1,73,1,10,35,6653,39,169791,1101,19079,0,66,1101,0,4,67,1102,1,1110,68,1102,253,1,69,1101,0,1,71,1102,1118,1,72,1105,1,73,0,0,0,0,0,0,0,0,7,7877,1102,1,56893,66,1101,0,4,67,1102,1147,1,68,1101,253,0,69,1102,1,1,71,1101,0,1155,72,1105,1,73,0,0,0,0,0,0,0,0,45,73189,1102,104651,1,66,1101,1,0,67,1102,1,1184,68,1101,556,0,69,1101,0,0,71,1101,0,1186,72,1105,1,73,1,1351,1101,0,43661,66,1101,1,0,67,1102,1213,1,68,1101,0,556,69,1102,1,1,71,1101,1215,0,72,1105,1,73,1,763676,28,75146,1101,16963,0,66,1102,1,1,67,1102,1,1244,68,1102,1,556,69,1102,1,1,71,1102,1246,1,72,1106,0,73,1,11,26,163118,1101,461,0,66,1101,1,0,67,1102,1275,1,68,1101,556,0,69,1101,0,0,71,1102,1,1277,72,1106,0,73,1,1263,1102,101483,1,66,1101,1,0,67,1102,1304,1,68,1102,556,1,69,1102,0,1,71,1102,1306,1,72,1106,0,73,1,1607,1101,0,14251,66,1101,0,3,67,1102,1333,1,68,1101,302,0,69,1102,1,1,71,1102,1,1339,72,1105,1,73,0,0,0,0,0,0,2,170679,1101,0,27073,66,1101,0,4,67,1102,1,1368,68,1102,1,302,69,1101,1,0,71,1101,0,1376,72,1106,0,73,0,0,0,0,0,0,0,0,1,154743,1101,0,15583,66,1101,0,1,67,1102,1,1405,68,1102,556,1,69,1101,0,3,71,1101,0,1407,72,1106,0,73,1,1,33,14998,21,302361,34,81219,1101,0,56597,66,1101,0,6,67,1102,1440,1,68,1102,1,302,69,1102,1,1,71,1101,1452,0,72,1106,0,73,0,0,0,0,0,0,0,0,0,0,0,0,45,146378,1102,6991,1,66,1101,0,1,67,1102,1,1481,68,1102,1,556,69,1101,0,1,71,1102,1,1483,72,1106,0,73,1,902,21,201574,1102,1,89867,66,1101,2,0,67,1101,1512,0,68,1101,0,302,69,1101,1,0,71,1102,1516,1,72,1106,0,73,0,0,0,0,5,10798,1102,1,61553,66,1102,1,1,67,1102,1,1545,68,1102,556,1,69,1101,0,6,71,1101,0,1547,72,1106,0,73,1,2,20,21493,17,104579,7,15754,26,244677,39,282985,39,339582,1101,73189,0,66,1102,2,1,67,1101,0,1586,68,1101,0,351,69,1102,1,1,71,1101,0,1590,72,1105,1,73,0,0,0,0,255,60251,1101,0,91463,66,1102,1,1,67,1101,1619,0,68,1101,556,0,69,1102,1,1,71,1101,0,1621,72,1105,1,73,1,6467743,28,37573,1102,1,34369,66,1101,0,1,67,1101,1650,0,68,1102,556,1,69,1102,1,1,71,1101,1652,0,72,1105,1,73,1,8933,21,100787,1102,1,77081,66,1101,0,1,67,1101,1681,0,68,1102,1,556,69,1102,1,1,71,1101,1683,0,72,1105,1,73,1,2310,33,7499,1101,0,44699,66,1101,0,1,67,1102,1712,1,68,1101,556,0,69,1101,3,0,71,1101,1714,0,72,1105,1,73,1,3,8,89867,5,5399,34,108292,1101,97387,0,66,1102,1,1,67,1102,1747,1,68,1102,556,1,69,1102,1,1,71,1102,1749,1,72,1105,1,73,1,4,20,107465,1101,0,13463,66,1101,1,0,67,1101,1778,0,68,1101,0,556,69,1102,0,1,71,1102,1,1780,72,1106,0,73,1,1250,1102,51581,1,66,1102,1,3,67,1102,1807,1,68,1101,302,0,69,1101,0,1,71,1102,1,1813,72,1105,1,73,0,0,0,0,0,0,2,113786,1102,1,73679,66,1102,1,1,67,1102,1842,1,68,1102,556,1,69,1101,1,0,71,1102,1,1844,72,1105,1,73,1,160,39,56597,1101,0,60251,66,1101,0,1,67,1101,1873,0,68,1102,556,1,69,1102,6,1,71,1101,1875,0,72,1106,0,73,1,22677,47,94099,1,51581,1,103162,9,14251,9,28502,9,42753,1101,0,81559,66,1101,0,3,67,1102,1914,1,68,1101,0,302,69,1101,1,0,71,1102,1920,1,72,1105,1,73,0,0,0,0,0,0,47,188198,1101,0,6653,66,1101,4,0,67,1102,1949,1,68,1101,302,0,69,1101,0,1,71,1101,0,1957,72,1106,0,73,0,0,0,0,0,0,0,0,39,226388,1101,63659,0,66,1101,0,1,67,1101,0,1986,68,1102,556,1,69,1102,1,1,71,1102,1,1988,72,1105,1,73,1,-2,34,27073,1101,94099,0,66,1101,2,0,67,1101,0,2017,68,1101,0,302,69,1102,1,1,71,1102,2021,1,72,1106,0,73,0,0,0,0,2,227572,1101,100787,0,66,1101,0,3,67,1101,2050,0,68,1102,1,302,69,1101,1,0,71,1101,0,2056,72,1105,1,73,0,0,0,0,0,0,6,19079,1101,0,47599,66,1102,1,1,67,1101,0,2085,68,1102,556,1,69,1102,1,1,71,1101,2087,0,72,1105,1,73,1,2677,33,22497,1102,1,7499,66,1101,0,3,67,1101,2116,0,68,1102,1,302,69,1101,0,1,71,1101,0,2122,72,1105,1,73,0,0,0,0,0,0,6,38158,1101,0,101359,66,1102,1,1,67,1101,2151,0,68,1102,1,556,69,1102,1,0,71,1102,1,2153,72,1105,1,73,1,1752,1101,48091,0,66,1101,1,0,67,1102,1,2180,68,1101,0,556,69,1101,0,0,71,1101,0,2182,72,1106,0,73,1,1463,1102,5399,1,66,1101,0,2,67,1102,1,2209,68,1101,0,302,69,1102,1,1,71,1101,0,2213,72,1106,0,73,0,0,0,0,6,57237 diff --git a/2019/inputs/day_24.txt b/2019/inputs/day_24.txt new file mode 100644 index 0000000..ba900ad --- /dev/null +++ b/2019/inputs/day_24.txt @@ -0,0 +1,5 @@ +##.#. +.##.. +##.#. +.#### +###.. diff --git a/2019/inputs/day_25.txt b/2019/inputs/day_25.txt new file mode 100644 index 0000000..5351575 --- /dev/null +++ b/2019/inputs/day_25.txt @@ -0,0 +1 @@ +109,4795,21102,1,3124,1,21102,1,13,0,1106,0,1424,21102,1,166,1,21101,24,0,0,1105,1,1234,21102,31,1,0,1106,0,1984,1106,0,13,6,4,3,2,52,51,21,4,28,56,55,3,19,-9,-10,47,89,88,90,90,6,77,73,85,71,1,76,68,63,65,22,-27,70,76,81,87,5,105,105,107,108,95,4,97,92,109,109,5,110,105,110,108,95,4,115,96,109,109,13,-3,59,101,85,92,97,13,84,80,92,78,34,-15,26,-16,46,88,72,79,84,0,72,76,-3,85,74,79,75,-8,64,68,75,57,65,70,64,66,72,8,-41,32,-22,56,77,82,-4,60,76,62,70,-2,74,-11,55,52,68,67,73,56,60,52,-20,44,56,66,-24,48,58,42,49,54,-16,-53,10,0,56,99,96,95,82,94,83,45,-9,23,-13,61,85,88,74,71,82,73,79,73,89,67,65,-4,62,73,70,69,56,68,57,2,-35,24,-14,64,85,90,4,70,67,79,7,83,-2,68,75,-5,78,65,57,75,-10,76,53,76,0,-37,31,-21,57,78,83,-3,64,74,72,0,76,-9,73,58,57,-13,70,57,49,67,-18,54,64,48,55,-23,48,44,56,42,-14,-51,14,-4,74,95,100,14,97,77,86,79,9,92,79,75,5,27,-17,61,82,87,1,68,78,76,4,80,-5,66,58,78,60,-10,73,60,52,70,-15,57,67,51,58,-6,-43,14,-4,74,95,100,14,81,94,90,90,9,92,79,75,5,60,-50,23,42,38,-32,38,39,30,42,47,-38,30,36,28,25,41,38,34,31,18,23,29,19,33,-52,20,29,-55,27,27,27,8,15,-61,22,16,-64,24,13,18,-54,-69,-70,-14,7,12,-74,-8,-11,1,-71,5,-80,-4,-3,3,-15,-84,-85,-109,29,-19,59,80,85,-1,82,62,71,64,-6,77,64,60,-10,62,66,57,59,63,57,67,51,-19,56,58,57,57,-10,-47,44,-34,39,58,54,-16,60,61,57,64,48,56,-23,52,40,60,38,-28,44,53,-31,55,32,55,-35,48,42,41,-39,32,38,42,-42,-44,12,33,38,-48,28,19,25,32,-52,-76,-77,59,-49,13,55,-30,42,51,-33,49,50,32,31,31,39,36,48,-42,24,35,32,34,29,21,35,19,25,37,-53,14,10,26,18,-57,-59,-3,18,23,-63,1,17,3,-67,1,-4,14,-2,6,-73,-8,14,-76,-12,-78,-40,2,4,-13,-82,-106,-107,35,-25,53,74,79,0,74,60,-10,65,53,72,64,52,56,52,50,-19,53,57,62,56,-24,58,54,38,39,40,-29,-31,2,56,35,-34,-58,-59,138,-128,-74,-108,-33,-31,-26,-44,-101,-114,-33,-37,-51,-39,-35,-47,-54,-122,-37,-45,-52,-59,-58,-128,-46,-65,-42,-49,-133,-132,-102,-60,-68,-56,-55,-139,-141,-106,-61,-65,-72,-78,-64,-148,-70,-72,-151,-68,-81,-81,-72,-156,-74,-86,-86,-80,-161,-97,-81,-95,-165,-94,-98,-103,-83,-97,-102,-90,-173,-90,-103,-111,-99,-178,-95,-108,-112,-182,-115,-115,-101,-117,-120,-104,-120,-122,-191,-106,-128,-118,-110,-127,-196,-196,-199,-135,-123,-134,-203,-115,-126,-121,-207,-143,-127,-141,-211,-143,-139,-145,-148,-132,-148,-150,-219,-154,-156,-155,-148,-224,-141,-147,-227,-144,-157,-161,-231,-165,-161,-165,-168,-161,-157,-159,-166,-162,-157,-228,-265,138,-128,-74,-108,-33,-31,-26,-44,-101,-114,-33,-37,-51,-39,-35,-47,-54,-122,-37,-45,-52,-59,-58,-128,-46,-65,-42,-49,-133,-132,-102,-60,-68,-56,-55,-139,-141,-106,-61,-65,-72,-78,-64,-148,-70,-72,-151,-68,-81,-81,-72,-156,-74,-86,-86,-80,-161,-97,-81,-95,-165,-90,-94,-97,-97,-86,-102,-90,-173,-90,-103,-111,-99,-178,-95,-108,-112,-182,-115,-115,-101,-117,-120,-104,-120,-122,-191,-106,-128,-118,-110,-127,-196,-196,-199,-135,-123,-134,-203,-115,-126,-121,-207,-143,-127,-141,-211,-143,-139,-145,-148,-132,-148,-150,-219,-154,-156,-155,-148,-224,-141,-147,-227,-144,-157,-161,-231,-165,-161,-165,-168,-161,-157,-159,-166,-162,-157,-228,-265,263,-253,-199,-233,-158,-156,-151,-169,-226,-239,-158,-162,-176,-164,-160,-172,-179,-247,-162,-170,-177,-184,-183,-253,-171,-190,-167,-174,-258,-257,-227,-183,-197,-187,-175,-182,-193,-184,-268,-202,-191,-194,-192,-197,-205,-191,-207,-276,-278,-222,-201,-196,-282,-206,-219,-196,-286,-207,-206,-210,-223,-222,-223,-225,-280,-293,-296,-232,-220,-231,-300,-212,-223,-218,-304,-236,-228,-223,-239,-227,-310,-227,-240,-244,-314,-248,-237,-250,-243,-239,-247,-237,-308,-345,-273,-260,-248,-243,-263,-329,-252,-252,-248,-260,-267,-266,-253,-337,-249,-260,-255,-259,-342,-260,-267,-280,-270,-271,-348,-281,-268,-272,-279,-285,-342,-355,-280,-278,-279,-284,-277,-361,-282,-278,-274,-275,-290,-298,-300,-369,-300,-292,-290,-373,-309,-375,-299,-298,-301,-310,-302,-297,-370,-383,-302,-316,-321,-311,-315,-299,-321,-308,-392,-306,-322,-330,-312,-397,-326,-334,-317,-401,-330,-338,-324,-325,-337,-329,-339,-341,-398,-411,-347,-335,-346,-415,-334,-352,-350,-346,-341,-338,-422,-334,-345,-340,-344,-427,-345,-357,-357,-351,-432,-365,-361,-353,-367,-370,-354,-363,-351,-427,-464,-441,-397,-373,-434,-447,-376,-380,-374,-375,-373,-452,-454,-398,-377,-372,-458,-376,-388,-382,-377,-387,-396,-465,-400,-398,-468,-404,-404,-395,-403,-473,-390,-396,-476,-406,-409,-395,-480,-408,-404,-483,-418,-396,-486,-403,-399,-409,-417,-413,-421,-493,37,-5,73,71,-8,75,62,58,-12,62,55,74,64,48,50,-19,45,63,-22,61,48,44,-26,50,37,44,48,-31,33,40,48,41,43,30,37,-25,-38,-63,0,0,109,7,21101,0,0,-2,22208,-2,-5,-1,1205,-1,1169,22202,-2,-4,1,22201,1,-6,1,21202,-2,1,2,21102,1162,1,0,2105,1,-3,21201,-2,1,-2,1106,0,1136,109,-7,2106,0,0,109,6,2101,0,-5,1182,20101,0,0,-2,21102,0,1,-3,21201,-5,1,-5,22208,-3,-2,-1,1205,-1,1229,2201,-5,-3,1205,20101,0,0,1,22102,1,-3,2,21202,-2,1,3,21102,1,1222,0,2105,1,-4,21201,-3,1,-3,1105,1,1192,109,-6,2106,0,0,109,2,21202,-1,1,1,21101,1256,0,2,21102,1251,1,0,1106,0,1174,109,-2,2105,1,0,109,5,22201,-4,-3,-1,22201,-2,-1,-1,204,-1,109,-5,2106,0,0,109,3,1202,-2,1,1280,1006,0,1303,104,45,104,32,1201,-1,66,1291,21002,0,1,1,21101,1301,0,0,1105,1,1234,104,10,109,-3,2105,1,0,0,0,109,2,2101,0,-1,1309,1102,1,0,1308,21102,1,4601,1,21102,13,1,2,21101,4,0,3,21102,1,1353,4,21101,1343,0,0,1105,1,1130,20102,1,1308,-1,109,-2,2106,0,0,63,109,3,1201,-2,0,1360,20008,0,1309,-1,1206,-1,1419,1005,1308,1398,1102,1,1,1308,21008,1309,-1,-1,1206,-1,1387,21102,106,1,1,1106,0,1391,21101,0,92,1,21102,1,1398,0,1106,0,1234,104,45,104,32,1201,-2,1,1407,21002,0,1,1,21102,1417,1,0,1105,1,1234,104,10,109,-3,2105,1,0,109,3,1202,-2,1,1128,21102,1,34,1,21101,0,1441,0,1106,0,1234,1001,1128,0,1447,20101,0,0,1,21102,1,1456,0,1105,1,1234,21102,1,41,1,21101,1467,0,0,1105,1,1234,1001,1128,1,1472,21002,0,1,1,21101,1482,0,0,1105,1,1234,21102,46,1,1,21102,1493,1,0,1105,1,1234,21001,1128,3,1,21102,4,1,2,21102,1,1,3,21102,1,1273,4,21101,1516,0,0,1106,0,1130,21001,1128,0,1,21102,1,1527,0,1105,1,1310,1001,1128,2,1532,21002,0,1,-1,1206,-1,1545,21101,0,1545,0,2105,1,-1,109,-3,2106,0,0,109,0,99,109,2,1102,1,0,1550,21101,0,4601,1,21102,13,1,2,21101,4,0,3,21101,1664,0,4,21102,1,1582,0,1105,1,1130,2,2486,1352,1551,1102,0,1,1552,21001,1550,0,1,21102,1,33,2,21101,0,1702,3,21102,1,1609,0,1106,0,2722,21007,1552,0,-1,1205,-1,1630,20107,0,1552,-1,1205,-1,1637,21102,1,1630,0,1106,0,1752,21101,0,548,1,1106,0,1641,21101,687,0,1,21101,0,1648,0,1105,1,1234,21101,0,4457,1,21101,1659,0,0,1106,0,1424,109,-2,2105,1,0,109,4,21202,-2,-1,-2,2102,1,-3,1675,21008,0,-1,-1,1206,-1,1697,1201,-3,2,1687,20101,-27,0,-3,22201,-3,-2,-3,2001,1550,-3,1550,109,-4,2105,1,0,109,5,21008,1552,0,-1,1206,-1,1747,1201,-3,1901,1717,20101,0,0,-2,1205,-4,1736,20207,-2,1551,-1,1205,-1,1747,1102,-1,1,1552,1105,1,1747,22007,1551,-2,-1,1205,-1,1747,1102,1,1,1552,109,-5,2105,1,0,109,1,21101,826,0,1,21102,1765,1,0,1105,1,1234,21002,1550,1,1,21102,1776,1,0,1105,1,2863,21102,1090,1,1,21102,1787,1,0,1106,0,1234,99,1106,0,1787,109,-1,2106,0,0,109,1,21101,512,0,1,21101,0,1809,0,1106,0,1234,99,1105,1,1809,109,-1,2105,1,0,109,1,1102,1,1,1129,109,-1,2106,0,0,109,1,21102,1,377,1,21101,0,1842,0,1105,1,1234,1106,0,1831,109,-1,2106,0,0,109,1,21101,407,0,1,21101,1863,0,0,1105,1,1234,99,1106,0,1863,109,-1,2106,0,0,109,1,21102,1,452,1,21101,1885,0,0,1106,0,1234,99,1106,0,1885,109,-1,2105,1,0,1941,1947,1953,1958,1965,1972,1978,4083,3936,4362,4458,4463,4254,3769,4145,4116,3848,4384,3957,4371,4258,3951,4063,3935,4053,4163,4259,3817,4062,4500,3970,4331,4022,3969,4163,4483,4089,3810,4092,4196,2281,2468,2418,2450,2487,2125,2505,5,95,108,104,104,23,5,96,91,108,108,1,4,101,105,112,3,6,104,104,106,107,94,-1,6,109,104,109,107,94,-1,5,111,91,100,93,23,5,114,95,108,108,1,109,3,21102,1993,1,0,1106,0,2634,1006,1129,2010,21101,0,316,1,21101,0,2007,0,1106,0,1234,1106,0,2076,21101,0,0,-1,1201,-1,1894,2019,21001,0,0,1,21102,0,1,2,21102,1,0,3,21101,0,2037,0,1106,0,2525,1206,1,2054,1201,-1,1934,2050,21102,2051,1,0,106,0,0,1105,1,2076,21201,-1,1,-1,21207,-1,7,-2,1205,-2,2014,21101,0,177,1,21102,1,2076,0,1105,1,1234,109,-3,2105,1,0,109,3,2001,1128,-2,2088,21002,0,1,-1,1205,-1,2108,21101,201,0,1,21101,2105,0,0,1105,1,1234,1106,0,2119,22101,0,-1,1,21101,2119,0,0,1106,0,1424,109,-3,2105,1,0,0,109,1,1101,0,0,2124,21101,0,4601,1,21101,0,13,2,21101,0,4,3,21102,2173,1,4,21102,2154,1,0,1106,0,1130,1005,2124,2168,21102,226,1,1,21102,2168,1,0,1106,0,1234,109,-1,2106,0,0,109,3,1005,2124,2275,1201,-2,0,2183,20008,0,1128,-1,1206,-1,2275,1201,-2,1,2195,20102,1,0,-1,21202,-1,1,1,21102,5,1,2,21102,1,1,3,21102,2216,1,0,1106,0,2525,1206,1,2275,21102,1,258,1,21101,2230,0,0,1105,1,1234,21202,-1,1,1,21101,0,2241,0,1106,0,1234,104,46,104,10,1101,1,0,2124,1201,-2,0,2256,1101,0,-1,0,1201,-2,3,2262,21002,0,1,-1,1206,-1,2275,21101,2275,0,0,2105,1,-1,109,-3,2106,0,0,0,109,1,1101,0,0,2280,21101,4601,0,1,21101,0,13,2,21102,1,4,3,21102,1,2329,4,21102,1,2310,0,1106,0,1130,1005,2280,2324,21102,1,273,1,21102,1,2324,0,1105,1,1234,109,-1,2105,1,0,109,3,1005,2280,2413,1201,-2,0,2339,21008,0,-1,-1,1206,-1,2413,1201,-2,1,2351,20102,1,0,-1,22101,0,-1,1,21102,5,1,2,21101,1,0,3,21102,2372,1,0,1105,1,2525,1206,1,2413,21102,301,1,1,21102,2386,1,0,1106,0,1234,22102,1,-1,1,21102,2397,1,0,1106,0,1234,104,46,104,10,1102,1,1,2280,1201,-2,0,2412,101,0,1128,0,109,-3,2106,0,0,109,1,21101,0,-1,1,21102,1,2431,0,1105,1,1310,1205,1,2445,21102,1,133,1,21101,0,2445,0,1106,0,1234,109,-1,2106,0,0,109,1,21102,3,1,1,21101,2463,0,0,1106,0,2081,109,-1,2106,0,0,109,1,21101,4,0,1,21102,1,2481,0,1105,1,2081,109,-1,2106,0,0,70,109,1,21102,5,1,1,21102,2500,1,0,1105,1,2081,109,-1,2105,1,0,109,1,21102,6,1,1,21102,2518,1,0,1105,1,2081,109,-1,2106,0,0,0,0,109,5,2102,1,-3,2523,1101,0,1,2524,21202,-4,1,1,21101,0,2585,2,21101,2550,0,0,1105,1,1174,1206,-2,2576,2101,0,-4,2558,2001,0,-3,2566,101,3094,2566,2566,21008,0,-1,-1,1205,-1,2576,1102,0,1,2524,21001,2524,0,-4,109,-5,2105,1,0,109,5,22201,-4,-3,-4,22201,-4,-2,-4,21208,-4,10,-1,1206,-1,2606,21102,-1,1,-4,201,-3,2523,2615,1001,2615,3094,2615,21002,0,1,-1,22208,-4,-1,-1,1205,-1,2629,1101,0,0,2524,109,-5,2106,0,0,109,4,21101,0,3094,1,21102,30,1,2,21101,1,0,3,21102,1,2706,4,21102,1,2659,0,1105,1,1130,21101,0,0,-3,203,-2,21208,-2,10,-1,1205,-1,2701,21207,-2,0,-1,1205,-1,2663,21207,-3,29,-1,1206,-1,2663,2101,3094,-3,2693,2102,1,-2,0,21201,-3,1,-3,1106,0,2663,109,-4,2105,1,0,109,2,1201,-1,0,2715,1102,-1,1,0,109,-2,2105,1,0,0,109,5,2102,1,-2,2721,21207,-4,0,-1,1206,-1,2739,21102,1,0,-4,21202,-4,1,1,21202,-3,1,2,21102,1,1,3,21101,0,2758,0,1105,1,2763,109,-5,2106,0,0,109,6,21207,-4,1,-1,1206,-1,2786,22207,-5,-3,-1,1206,-1,2786,21201,-5,0,-5,1105,1,2858,22101,0,-5,1,21201,-4,-1,2,21202,-3,2,3,21101,0,2805,0,1105,1,2763,21202,1,1,-5,21101,0,1,-2,22207,-5,-3,-1,1206,-1,2824,21102,0,1,-2,22202,-3,-2,-3,22107,0,-4,-1,1206,-1,2850,22102,1,-2,1,21201,-4,-1,2,21101,0,2850,0,105,1,2721,21202,-3,-1,-3,22201,-5,-3,-5,109,-6,2105,1,0,109,3,21208,-2,0,-1,1205,-1,2902,21207,-2,0,-1,1205,-1,2882,1105,1,2888,104,45,21202,-2,-1,-2,21201,-2,0,1,21102,2899,1,0,1106,0,2909,1106,0,2904,104,48,109,-3,2106,0,0,109,4,22102,1,-3,1,21101,10,0,2,21101,0,2926,0,1105,1,3010,21201,1,0,-2,21201,2,0,-1,1206,-2,2948,22101,0,-2,1,21101,0,2948,0,1106,0,2909,22101,48,-1,-1,204,-1,109,-4,2105,1,0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,137438953472,274877906944,549755813888,1099511627776,2199023255552,4398046511104,8796093022208,17592186044416,35184372088832,70368744177664,140737488355328,281474976710656,562949953421312,1125899906842624,109,8,21101,0,0,-4,21101,0,0,-3,21102,1,51,-2,21201,-2,-1,-2,1201,-2,2959,3034,20101,0,0,-1,21202,-3,2,-3,22207,-7,-1,-5,1205,-5,3059,21201,-3,1,-3,22102,-1,-1,-5,22201,-7,-5,-7,22207,-3,-6,-5,1205,-5,3078,22102,-1,-6,-5,22201,-3,-5,-3,22201,-1,-4,-4,1205,-2,3024,21202,-4,1,-7,21202,-3,1,-6,109,-8,2106,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3131,3143,0,3252,3527,0,0,11,61,105,95,94,17,50,97,83,78,79,83,108,-19,2,7,-79,-9,-2,2,-83,-11,-7,-86,-3,-16,-7,-11,-6,-21,-21,-94,-30,-96,-25,-19,-23,-31,-101,-29,-25,-104,-21,-34,-38,-108,-39,-34,-32,-33,-31,-114,-43,-47,-35,-49,-105,-120,-69,-43,-123,-49,-56,-57,-47,-128,-40,-51,-46,-50,-133,-51,-63,-63,-57,-138,-69,-58,-62,-65,-143,-79,-69,-63,-68,-148,-79,-68,-82,-83,-63,-81,-77,-85,-145,-158,-75,-88,-92,-162,-91,-85,-89,-97,-167,-96,-104,-87,-171,-106,-104,-105,-97,-176,-94,-109,-114,-104,-112,-114,-169,3259,3267,0,3344,0,3124,0,7,65,89,99,98,108,85,108,76,8,27,27,36,-48,16,32,18,13,-53,18,10,27,-57,8,10,9,17,-62,16,16,19,7,10,5,21,-1,-3,-72,-3,5,7,-76,6,1,-2,-11,3,-10,-10,-6,-14,-59,-87,1,-10,-5,-84,-10,-24,-94,-21,-11,-14,-14,-99,-22,-22,-18,-103,-23,-20,-33,-23,-39,-109,-27,-26,-30,-44,-114,-28,-44,-52,-34,-105,3351,3359,0,0,3408,3252,0,7,76,108,102,104,86,91,88,48,36,55,51,-19,46,58,66,46,59,-25,48,58,55,55,-30,36,47,45,50,30,37,41,-38,38,39,41,27,-43,22,34,42,22,35,-35,-50,-51,-2,16,13,30,26,26,15,27,9,15,27,-49,3415,3423,0,0,3458,4392,3344,7,76,108,88,88,97,89,102,34,48,66,69,73,62,62,61,73,3,72,61,77,55,53,-2,-17,34,53,49,68,-15,59,45,-25,39,49,48,-29,39,46,48,51,55,-21,3465,3486,0,3584,0,4053,3408,20,51,84,80,93,8,62,88,70,84,83,75,79,71,-1,33,66,74,79,63,75,40,32,70,77,-11,57,63,69,54,-16,51,61,-19,69,58,63,-23,63,57,39,53,-28,51,52,38,51,36,44,49,47,-37,41,39,-40,43,30,26,-44,26,33,-16,3534,3548,0,0,0,0,3124,13,54,100,86,103,15,63,98,77,93,94,78,90,90,35,49,68,64,-6,59,61,59,73,-11,53,69,55,-15,49,59,58,-19,64,58,57,-23,59,52,39,49,48,-29,40,48,50,-33,55,44,49,-23,3591,3600,0,0,3732,3458,3673,8,75,96,89,96,20,53,83,106,72,11,44,38,37,35,37,38,36,-48,17,29,33,20,-53,-4,14,12,-44,-12,20,23,8,6,-63,-14,4,7,11,0,0,-1,11,-72,4,-5,-7,-3,-10,-5,-1,-11,-81,-17,-5,-16,-85,-4,-18,-17,-4,-14,-26,-10,-93,-12,-26,-23,-19,-30,-30,-31,-19,-102,-26,-35,-37,-33,-40,-35,-31,-41,-97,3680,3703,0,3901,3584,0,4241,22,50,88,92,7,41,77,83,70,81,77,65,83,67,-3,34,74,79,71,76,56,63,67,28,55,82,79,70,72,78,85,9,-4,68,78,0,75,-9,73,73,61,63,62,-15,71,62,64,56,53,57,49,-9,3739,3748,0,3828,0,3981,3584,8,59,102,104,103,93,87,97,99,79,5,24,20,-50,26,17,31,11,21,-56,30,7,17,16,22,-62,2,14,3,-66,17,4,0,-70,6,-3,11,-9,1,-76,-7,-2,0,-1,1,-82,-18,-2,-16,-86,-4,-12,-16,-19,-19,-8,-17,-5,-95,-28,-24,-28,-29,-31,-19,-33,-25,-20,-105,-39,-28,-32,-30,-28,-28,-98,-113,-67,-33,-116,-52,-36,-50,-120,-37,-50,-54,-35,-94,3835,3844,0,4166,0,3732,0,8,64,102,98,100,88,88,85,92,56,27,54,51,42,51,49,39,-31,51,36,35,42,47,-37,46,40,-40,31,23,43,25,-45,30,22,22,35,-50,22,32,-53,25,23,-56,27,14,10,-60,-22,11,2,14,19,-66,-28,14,4,-2,-71,11,-4,10,9,-3,1,-7,-65,3908,3920,0,0,0,3673,0,11,68,86,102,87,99,102,80,98,92,94,100,60,24,43,39,51,37,-33,31,47,33,-37,27,-39,30,28,45,-43,40,24,30,22,35,18,29,29,17,30,-27,-55,28,15,11,30,-53,21,7,-63,1,11,10,-67,-2,10,6,13,-3,-5,-74,-7,3,10,0,-67,-80,3,-10,-4,1,-14,-14,-73,3988,3997,0,3732,4095,0,0,8,72,88,105,104,85,90,87,100,55,29,48,44,63,-20,54,40,-30,34,-32,43,39,49,48,39,31,-39,44,46,31,40,40,44,-46,18,30,19,-50,32,32,12,28,29,17,21,13,-59,24,18,-62,13,15,14,9,-67,-3,7,6,-71,-7,3,-1,0,-7,-63,4060,4068,0,3458,0,0,0,7,68,97,107,89,93,89,97,26,43,91,73,85,91,85,72,72,76,68,3,78,-6,63,74,60,59,79,57,0,54,67,57,52,50,-5,4102,4114,0,0,0,4337,3981,11,58,98,90,91,95,85,84,96,86,90,82,51,38,59,64,-22,60,45,44,-26,38,-28,58,42,42,52,36,32,44,29,45,30,-39,47,32,42,29,-44,35,30,18,30,34,-50,19,27,29,-54,-4,24,25,15,19,11,7,20,16,9,3,-66,19,-50,-55,4173,4185,0,0,0,3828,0,11,72,87,92,87,95,83,84,14,57,77,77,55,34,55,60,-26,56,41,40,-30,38,54,40,34,34,42,30,31,-39,32,28,40,26,-44,34,24,-47,32,33,29,33,27,31,35,25,13,-57,22,20,16,28,15,6,18,-65,2,2,15,4,1,7,-72,14,5,7,-1,-63,4248,4259,0,0,3673,0,0,10,68,86,106,92,89,82,100,88,93,91,77,6,38,18,36,36,33,-25,-52,-2,30,27,9,21,10,10,8,-47,-62,-15,12,4,-1,16,1,-69,13,14,8,7,2,14,-76,0,-9,-14,3,4,0,-14,-7,-16,-8,-3,-5,-89,-20,-9,-13,-16,-94,-25,-23,-27,-14,-10,-100,-18,-18,-38,-22,-22,-106,-23,-29,-109,-28,-42,-45,-48,-38,-42,-50,-35,-53,-35,-51,-107,4344,4351,0,4095,0,0,0,6,59,107,91,88,90,90,40,38,70,68,58,-12,66,56,-15,68,55,51,-19,47,44,44,50,54,44,58,56,-28,54,39,38,45,-33,50,44,-36,35,27,47,29,-41,38,36,43,24,36,-33,4399,4422,0,3408,0,4457,0,22,65,74,90,87,6,41,86,76,88,70,0,44,63,70,74,79,63,71,57,69,57,58,34,39,81,-4,60,74,73,61,56,72,72,-12,71,65,-15,50,52,-18,68,59,61,53,50,54,46,-26,51,51,53,47,34,44,43,55,-21,4464,4484,0,4392,4556,0,0,19,64,81,78,95,91,81,91,95,5,39,75,71,68,75,79,77,70,74,79,71,2,38,-41,42,29,25,-45,32,22,40,35,-50,31,27,26,23,-43,-56,8,-58,21,22,8,21,20,21,17,3,-54,15,0,8,12,1,11,-1,11,-7,-77,-8,-3,-1,-2,0,-83,3,-12,-10,-11,-88,-3,-21,-9,-19,-23,-5,-95,-7,-18,-13,-17,-100,-28,-34,-34,-26,-21,-33,-23,-19,-95,4563,4588,1553,0,0,0,4457,24,56,89,75,88,87,88,84,70,13,50,67,75,79,68,78,66,78,60,-10,27,64,66,65,67,12,53,97,83,93,105,105,87,91,83,25,24,23,3981,4653,16777243,0,3344,4659,32796,0,4166,4672,67108893,0,3252,4683,46,0,3673,4699,31,1818,3527,4719,536870944,0,3408,4727,268435489,0,3584,4741,34,1829,3828,4755,35,1850,4241,4767,36,1796,4053,4778,1061,0,4337,4782,38,1872,3901,4790,41,0,5,110,98,94,100,99,12,95,95,87,90,94,15,80,92,96,95,86,78,10,106,86,97,85,97,102,98,88,92,82,15,104,85,80,98,85,81,93,10,86,73,74,78,78,82,72,19,84,85,76,88,93,8,76,82,74,71,87,84,80,77,64,69,75,65,79,7,90,102,107,91,99,98,84,13,102,98,96,95,91,14,92,82,11,77,74,92,29,13,92,96,87,89,93,87,97,81,11,86,88,87,87,11,98,99,95,102,86,94,15,90,78,98,76,10,91,104,87,84,98,86,16,95,93,81,3,106,113,98,7,105,96,102,106,100,98,102,4,95,92,101,94 diff --git a/2019/inputs/day_3.txt b/2019/inputs/day_3.txt new file mode 100644 index 0000000..504e9fe --- /dev/null +++ b/2019/inputs/day_3.txt @@ -0,0 +1,2 @@ +R995,D882,R144,U180,L638,U282,L907,D326,R731,D117,R323,U529,R330,U252,R73,U173,R345,U552,R230,U682,R861,U640,L930,U590,L851,D249,R669,D878,R951,D545,L690,U392,R609,D841,R273,D465,R546,U858,L518,U567,L474,D249,L463,D390,L443,U392,L196,U418,R433,U651,R520,D450,R763,U714,R495,D716,L219,D289,L451,D594,R874,U451,R406,U662,R261,D242,R821,D951,R808,D862,L871,U133,R841,D465,R710,U300,R879,D497,R85,U173,R941,U953,R705,U972,R260,D315,L632,U182,L26,D586,R438,U275,L588,U956,L550,D576,R738,U974,R648,D880,R595,D510,L789,U455,R627,U709,R7,D486,L184,U999,L404,U329,L852,D154,L232,U398,L587,U881,R938,D40,L657,D164,R45,D917,R106,U698,L824,D426,R879,U700,R847,D891,L948,U625,R663,D814,R217,U30,R610,D781,L415,D435,L904,U815,R152,U587,R287,U141,R866,D636,L290,D114,L751,D660,R6,U383,L263,U799,R330,U96,L6,U542,L449,D361,R486,U278,L990,U329,L519,U605,R501,D559,R916,U198,L499,D174,R513,U396,L473,D565,R337,D770,R211,D10,L591,D920,R367,D748,L330,U249,L307,D645,R661,U266,R234,D403,L513,U443,L989,D1,L674,D210,L537,D872,L607,D961,R894,U632,L195,U744,L426,U531,R337,D821,R113,U436,L700,U779,R555,U891,R268,D30,R958,U411,R904,U24,R760,D958,R231,U229,L561,D134,L382,D961,L237,U676,L223,U324,R663,D186,R833,U188,R419,D349,L721,U152,L912,U490,R10,D995,L98,U47,R140,D815,R826,U730,R808,U256,R479,D322,L504,D891,L413,D848,L732,U375,L307,U7,R682,U270,L495,D248,R691,D945,L70,U220,R635,D159,R269,D15,L161,U214,R814,D3,R354,D632,R469,D36,R85,U215,L243,D183,R140,U179,R812,U180,L905,U136,L34,D937,L875 +L999,D22,L292,U843,R390,U678,R688,D492,L489,U488,R305,U951,L636,U725,R402,U84,L676,U171,L874,D201,R64,D743,R372,U519,R221,U986,L393,D793,R72,D184,L553,D137,L187,U487,L757,U880,L535,U887,R481,U236,L382,D195,L388,D90,R125,U414,R512,D382,R972,U935,L172,D1,R957,U593,L151,D158,R396,D42,L30,D178,R947,U977,R67,D406,R744,D64,L677,U23,R792,U864,R259,U315,R314,U17,L37,D658,L642,U135,R624,U601,L417,D949,R203,D122,R76,D493,L569,U274,L330,U933,R815,D30,L630,D43,R86,U926,L661,D491,L541,D96,R868,D565,R664,D935,L336,D152,R63,U110,L782,U14,R172,D945,L732,D870,R404,U767,L907,D558,R748,U591,R461,D153,L635,D457,R241,U478,L237,U218,R393,U468,L182,D745,L388,D360,L222,D642,L151,U560,R437,D326,R852,U525,R717,U929,L470,U621,R421,U408,L540,D176,L69,U753,L200,U251,R742,U628,R534,U542,R85,D71,R283,U905,L418,D755,L593,U335,L114,D684,L576,D645,R652,D49,R86,D991,L838,D309,L73,U847,L418,U675,R991,U463,R314,D618,L433,U173,R869,D115,L18,U233,R541,U516,L570,U340,R264,D442,L259,U276,R433,D348,R524,D353,R336,D883,R580,U157,R79,D27,L134,D161,L748,D278,R322,D581,R654,D156,L930,D293,L156,U311,R807,D618,R408,U719,R366,D632,R307,D565,R478,D620,R988,D821,R365,D581,L946,D138,L943,U69,R620,U208,L407,U188,L122,U353,L751,U565,R849,D874,R668,D794,L140,D474,R289,D773,R344,D220,L55,D385,L394,U208,R305,U736,L896,D376,R331,D855,L466,U516,L741,U124,L825,U467,L525,D911,R76,U220,L610,U102,L261,D891,L585,U397,L152,U753,R822,D252,R106,U145,L7,U524,R343,U352,L357,D399,L446,D140,L723,U46,R687,D409,R884 diff --git a/2019/inputs/day_4.txt b/2019/inputs/day_4.txt new file mode 100644 index 0000000..f62320b --- /dev/null +++ b/2019/inputs/day_4.txt @@ -0,0 +1,2 @@ +138241 +674034 diff --git a/2019/inputs/day_5.txt b/2019/inputs/day_5.txt new file mode 100644 index 0000000..f8c2724 --- /dev/null +++ b/2019/inputs/day_5.txt @@ -0,0 +1 @@ +3,225,1,225,6,6,1100,1,238,225,104,0,1102,57,23,224,101,-1311,224,224,4,224,1002,223,8,223,101,6,224,224,1,223,224,223,1102,57,67,225,102,67,150,224,1001,224,-2613,224,4,224,1002,223,8,223,101,5,224,224,1,224,223,223,2,179,213,224,1001,224,-469,224,4,224,102,8,223,223,101,7,224,224,1,223,224,223,1001,188,27,224,101,-119,224,224,4,224,1002,223,8,223,1001,224,7,224,1,223,224,223,1,184,218,224,1001,224,-155,224,4,224,1002,223,8,223,1001,224,7,224,1,224,223,223,1101,21,80,224,1001,224,-101,224,4,224,102,8,223,223,1001,224,1,224,1,224,223,223,1101,67,39,225,1101,89,68,225,101,69,35,224,1001,224,-126,224,4,224,1002,223,8,223,1001,224,1,224,1,224,223,223,1102,7,52,225,1102,18,90,225,1101,65,92,225,1002,153,78,224,101,-6942,224,224,4,224,102,8,223,223,101,6,224,224,1,223,224,223,1101,67,83,225,1102,31,65,225,4,223,99,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,1105,0,99999,1105,227,247,1105,1,99999,1005,227,99999,1005,0,256,1105,1,99999,1106,227,99999,1106,0,265,1105,1,99999,1006,0,99999,1006,227,274,1105,1,99999,1105,1,280,1105,1,99999,1,225,225,225,1101,294,0,0,105,1,0,1105,1,99999,1106,0,300,1105,1,99999,1,225,225,225,1101,314,0,0,106,0,0,1105,1,99999,1007,226,226,224,102,2,223,223,1005,224,329,1001,223,1,223,108,677,226,224,1002,223,2,223,1005,224,344,1001,223,1,223,1007,677,677,224,1002,223,2,223,1005,224,359,1001,223,1,223,1107,677,226,224,102,2,223,223,1006,224,374,1001,223,1,223,8,226,677,224,1002,223,2,223,1006,224,389,101,1,223,223,8,677,677,224,102,2,223,223,1006,224,404,1001,223,1,223,1008,226,226,224,102,2,223,223,1006,224,419,1001,223,1,223,107,677,226,224,102,2,223,223,1006,224,434,101,1,223,223,7,226,226,224,1002,223,2,223,1005,224,449,1001,223,1,223,1107,226,226,224,1002,223,2,223,1006,224,464,1001,223,1,223,1107,226,677,224,1002,223,2,223,1005,224,479,1001,223,1,223,8,677,226,224,1002,223,2,223,1006,224,494,1001,223,1,223,1108,226,677,224,1002,223,2,223,1006,224,509,101,1,223,223,1008,677,677,224,1002,223,2,223,1006,224,524,1001,223,1,223,1008,677,226,224,102,2,223,223,1006,224,539,1001,223,1,223,1108,677,677,224,102,2,223,223,1005,224,554,101,1,223,223,108,677,677,224,102,2,223,223,1006,224,569,101,1,223,223,1108,677,226,224,102,2,223,223,1005,224,584,1001,223,1,223,108,226,226,224,1002,223,2,223,1005,224,599,1001,223,1,223,1007,226,677,224,102,2,223,223,1005,224,614,1001,223,1,223,7,226,677,224,102,2,223,223,1006,224,629,1001,223,1,223,107,226,226,224,102,2,223,223,1005,224,644,101,1,223,223,7,677,226,224,102,2,223,223,1005,224,659,101,1,223,223,107,677,677,224,1002,223,2,223,1005,224,674,1001,223,1,223,4,223,99,226 diff --git a/2019/inputs/day_6.txt b/2019/inputs/day_6.txt new file mode 100644 index 0000000..49d849c --- /dev/null +++ b/2019/inputs/day_6.txt @@ -0,0 +1,2306 @@ +21X)BWV +YZJ)YLQ +FQS)PZW +R64)71F +ZH4)QVZ +LWB)H4Q +4HQ)PVJ +TZ5)VBV +LF1)FKZ +GKS)BGN +45B)2NS +14W)2JY +1XY)FJ8 +ZRC)WR9 +GCL)6PB +LP4)GQ8 +26V)HTK +3M8)1GJ +47Q)JYK +WDB)N2R +KH8)TGY +LFX)N2X +VSZ)7PC +M6W)4WL +HH9)8PC +L59)8Y8 +Q49)LWH +CJ5)XDG +K51)FGH +H31)2RJ +39M)Y4M +12C)VLF +PZW)7DW +MP2)19Q +R76)CHH +N6J)KBW +WR9)W25 +T99)ZF1 +1TS)8SM +8WW)YX7 +PW6)B2J +7KX)YM5 +HM6)GVX +DNB)2YP +6WC)2LW +BG5)SB6 +KK1)JTF +YDT)244 +GGQ)2DJ +GCP)Q8H +S1Y)J69 +LBV)DYG +ZKN)JBS +8XY)Y8Z +XMH)NHD +XVM)2LX +SYP)BC8 +PXH)YYG +F29)G9Y +BYX)4QS +8MY)S1D +N2Y)BZK +FRC)72W +S2K)YH5 +7JF)K65 +DJ9)K4L +P26)WXT +DW9)1DJ +NP4)3SB +XS7)CDL +6XH)4ZT +2DJ)GCP +2K4)VV1 +Q6P)NNN +HQW)ZR9 +9G2)FNB +H9N)5ZJ +13Z)GKD +9MW)37Y +VDY)BG9 +BL3)12C +LNN)JST +Z3V)T39 +XS3)WYG +8J5)QFQ +7DW)DXY +JMV)DM4 +VL3)V7Q +GZC)ZHV +3N6)R2H +FQ6)7LG +SR9)D66 +1M8)K2L +24N)M94 +JST)WM9 +7SB)99Q +58J)YN7 +WWH)5KS +C39)X9J +58S)KBP +TVF)VNG +TKC)Y34 +KKP)4S6 +XSP)939 +N6J)DZP +JXP)N6R +KNJ)7FS +N3V)LMJ +JVF)R94 +21C)R4Z +NYK)5GN +GVJ)Q6C +R69)NRS +GLS)C7D +T4J)46R +5GB)51S +9WD)7PN +HHX)KK2 +H2P)ZML +DWD)Q9F +FKZ)LC3 +Q9F)M8N +CRZ)LM1 +6DP)YML +NSR)L2X +PMX)Q7K +37R)1GF +L4G)P4W +17N)X6D +JTF)89B +JGJ)DVJ +VF9)GMW +NHD)DJ3 +TRY)F6S +J11)BVW +95X)XB5 +3XD)HPM +7BB)1LW +FJ8)TV4 +JV3)M9W +T7L)6SS +R48)LSB +F2P)9D2 +PTY)QBY +KXM)6G1 +N1H)Q2R +P27)SR9 +1S2)N3G +V7Q)642 +891)TW7 +B9Y)BRL +GW4)3XZ +QWM)G46 +WVK)S6N +N82)317 +8PG)S21 +NT3)1VX +QB5)Y3H +PTT)639 +G8M)WM8 +B36)LX9 +M9M)4P3 +3F9)Q3R +DND)TJL +VQB)6N3 +PJT)JTK +BBN)T4L +LYP)M3V +T9R)HH9 +XBR)3X5 +MX3)SWF +SF1)MXT +X67)6DQ +82Z)FQ4 +L64)FNG +CDG)5D9 +JKZ)XZ5 +MH1)1KD +5NW)ZH4 +P3T)76Z +2M4)CKW +54L)8P7 +JSH)5H5 +LGR)P2V +QNV)SJ7 +KPS)XMQ +F2H)49M +8NJ)KKP +XZ1)LRZ +RVK)J5Z +QT9)NGQ +1TK)P7X +39M)595 +DN9)HKY +HK1)ZRH +SH1)JV5 +B25)GQ6 +QZC)WYC +6CJ)F5D +5R1)HQ7 +FNT)P4J +4R6)P49 +LG4)QT9 +GWH)RY1 +1FX)ZK8 +HK4)G2N +4WL)GPR +SQT)KK1 +RT4)FCN +NRF)P84 +DQW)4L4 +52N)T4J +69D)2FV +RMV)J7N +S9J)1WM +B88)9GT +5M7)GXN +3XF)6FX +FL9)8VZ +X88)JZR +ZVZ)8J2 +Q83)94V +82Y)HT7 +7Y7)7X3 +KNK)R1W +469)PMG +D9Z)GD1 +Z62)WR1 +YDF)6B6 +5KS)6GW +57T)ML7 +GXC)R89 +S2N)99C +JFH)RP9 +KPH)R26 +DZX)93P +CWT)C2H +VKN)5M7 +VNG)SH1 +G2N)F6Q +NFV)FK3 +R65)TQL +Z6T)4NG +RQN)KPR +972)9TB +KZ1)6TY +8K2)HKL +KHJ)H1W +6N3)XTR +25Q)T49 +8HF)K9M +GQX)PHP +5ZJ)9S7 +C7D)VMJ +JXV)SJD +J17)64C +5XN)WN7 +PH9)WQH +43T)Q9V +Z5F)NZ8 +VHQ)D95 +244)7KX +6N7)JPH +HC8)HND +ZF1)39F +24X)ZPF +BWV)HQW +R3N)5R1 +QB9)6XY +KHW)KFZ +S2V)DRQ +S21)1RQ +C9V)TSD +Q1Y)LC2 +93Y)W5C +8ST)T4P +R5Z)CL4 +424)WNZ +R7M)5JS +4R6)H97 +ZXZ)S62 +FRH)SBJ +ZK8)N82 +6FX)MTK +Z5M)BRQ +YYP)FX8 +RZJ)DRK +V8G)TKQ +5L9)J1G +RZG)69H +R9G)X79 +WFS)ZJQ +4P8)GXC +TYW)S54 +R2H)QH7 +6HX)F2H +BBD)DC5 +DDB)6WC +2G3)4JN +FKC)K7V +XTK)8BD +Z7X)QGY +8CG)3F9 +F39)MM9 +F1L)1R7 +ZVH)JDC +BVW)PXM +PRV)BF7 +FX8)1XR +FB2)XN6 +R9L)Z1V +YDT)H52 +6Z5)XZ1 +QD2)Z7Y +TLS)6T3 +54C)DL7 +KPR)4TY +19N)415 +1QG)GNN +S6N)4MK +4L8)LD2 +5Z7)PRY +5C4)2MC +94B)DY3 +CVK)GTS +7N7)P27 +5MW)GGH +2HQ)JYL +L9J)HLP +5Y4)NGN +2BZ)GWN +HD8)CZS +HQ7)M9D +DC5)RK6 +66W)2VT +3D4)GHZ +T49)VTP +PL4)ZS9 +SJ7)TRC +NKT)G5Y +K1G)3GN +37V)4LG +KWL)VDZ +7XF)1P8 +64C)FX4 +DY4)J3F +RV8)8KF +DRQ)KQ7 +HND)2N7 +HQS)HMW +J24)9VX +7DK)3PM +467)VBK +Q6C)TZC +SZY)9TC +BMM)4S4 +HFH)2S6 +K5K)4QP +N6W)RZG +TKQ)489 +4R1)F22 +J1G)YDF +FVW)9WD +CV7)TMC +R6K)H31 +GDL)X14 +H1B)NKT +XTR)PL6 +BSC)SM7 +MLT)S7B +22S)R7T +X8Y)4WX +NR9)NK9 +FSM)J3S +WHF)VSG +ZBG)Q3D +RMY)7KM +XBX)1M8 +MHY)1C2 +GSS)X9G +86F)Y4W +VL6)6H9 +1VH)L3B +SF8)CDG +GTK)45F +49M)NLL +FN6)PN3 +KSC)R3Z +6TN)3QN +FNG)742 +X45)WWH +SF5)2WH +JSJ)B1H +95L)M8F +L59)C4Y +93P)M89 +K1C)6ZZ +21T)8M6 +X9M)7NX +WPK)LNG +393)F6N +M4L)JXP +VKN)X88 +NFK)ZVZ +LKV)C2V +SWX)TM8 +V7F)8ZN +3RW)FD8 +9SM)H27 +TP3)1YB +6MG)D8X +8S7)345 +9SV)X67 +25P)JDD +BFX)TNG +36J)VBH +HN7)WVK +ZR3)3NR +M3V)GPY +52M)MFV +MZB)CJ5 +MX3)XLQ +LCG)PHS +HZD)RNC +GWN)DWD +XBM)WP4 +2FV)YXW +ZTP)QD2 +R1G)JY6 +KY4)8CG +H54)RVK +5HG)WYQ +BVC)SK1 +948)P3T +SV8)5MW +V4D)YLT +69X)LNZ +BL3)Y97 +DXG)WLZ +VV1)SS3 +ZCD)VXB +X6D)XL2 +B9H)2NB +KHK)WPK +YLT)KFT +P49)CC5 +KBW)CRH +8KQ)LJ4 +8JJ)VTJ +TKM)428 +3SB)273 +GPY)R2Z +WTX)P6W +LB1)3PR +Y1R)DJM +25P)CY5 +SVB)PJM +56N)S2V +H82)8D5 +CYB)GP4 +HJ2)BSH +2J1)F1T +C4Y)PRM +TZC)PM5 +K55)NBJ +X43)LPP +WYG)3FW +WFG)N2Y +Q37)5L9 +WSF)KSH +V2H)S9J +HN2)DW9 +3LL)PFH +6X3)XVM +8XZ)991 +26L)WTX +Y97)5C5 +XXL)79Y +NK9)RR8 +L7W)83Q +8TX)45B +GMJ)1H4 +ZRW)58J +36X)PRS +8B2)HTL +8JZ)L94 +PRY)QTW +PL4)X8Y +89N)1RJ +DFJ)62K +5QZ)CN3 +RYQ)SL6 +1H4)PGZ +B1H)J88 +JCC)111 +V6W)GG7 +BZK)97X +49J)WVY +1WM)21X +TCN)KSC +RRD)26V +VC6)WPS +Y5S)YJS +DVR)2J8 +LJF)839 +64D)GZC +79Y)SZY +JHT)D6J +K4K)L59 +YHB)QWM +6H9)MRR +X79)M62 +LW7)GGB +469)TRQ +14K)951 +L9Y)K51 +W7C)Y73 +XD1)CYL +1XQ)HYK +Q19)PWG +F4M)KHW +SM1)J3Q +MV1)1X9 +NMV)3SM +8ZD)L61 +VWX)6R6 +S4Z)JK4 +9GT)R13 +F66)89X +DLT)K6R +H4C)NW9 +R3D)6Z5 +MKN)M5V +H4C)22S +BFM)J2V +KQW)G8D +V61)6HG +JX4)LH3 +PHS)P68 +V9M)56X +1Q6)Y8V +319)KX2 +M8F)881 +974)KSL +LRP)XXL +M3Y)Q39 +LC3)B9H +4T8)ZRW +KYB)T7L +DXJ)72V +SRP)D3M +BRN)NGD +43S)NJ1 +KWJ)VGZ +DNY)F2J +DKW)YT1 +6B4)6N5 +GRQ)RYT +4KV)WFG +6PG)T9R +Q3T)V2P +4M5)HLG +WKZ)9ZP +XTP)JMC +PVZ)JN1 +5F2)26L +76Z)R5P +FVW)NS1 +MWS)PXD +Z7Z)8S7 +CTH)7C2 +837)48K +3SM)HYY +J2B)1TS +Y8V)BS6 +YYD)3XH +4F7)BFM +6S1)95D +4KN)JV3 +GSZ)HVF +9CP)GPZ +BFN)LB1 +N72)741 +K6R)3WF +P4J)QQW +54G)469 +36T)GJ4 +HXM)X6W +MR9)M29 +XMQ)SP9 +71F)TJR +95X)DLT +1ZX)QVK +F1L)1SY +B7X)XDB +FJW)ZCR +43X)1XH +D5H)93V +FQH)5RJ +CLW)1RG +X4Y)X9M +CRH)DWH +XWX)GWZ +36J)TKC +YFN)YJ6 +15X)MBT +6T3)NDG +8SY)4R7 +XMG)HR5 +KSZ)WKZ +PM5)3K8 +BR4)J1T +F72)GV7 +317)P1W +CV7)SPK +H53)PMX +NDG)56N +N68)ZXZ +X3W)XGJ +JRJ)S7X +MKN)DBW +8CM)953 +M2K)3XL +95K)95X +58S)4HL +D95)L9Y +FRH)KQW +NLL)C3D +X1H)FM1 +R1M)GGQ +Y8Z)W1B +KLD)G1V +6CJ)R5X +5C5)HN7 +T7M)ZXT +SZF)B5W +RPW)6TG +3VP)2W9 +X2J)RXH +DWG)C9V +9FB)524 +1PZ)8ZD +ZKZ)6S1 +L36)ZKN +F1J)2D4 +LWC)6SW +SWF)Y4V +51L)MWS +KFZ)52N +GD1)HFH +LFK)L36 +KPZ)ZQ6 +3NT)W48 +2CD)G3D +345)JXV +2LW)SWX +9ZY)XTJ +VWR)576 +STH)NHY +L4X)M4L +ZML)RN7 +RDF)7PB +7FK)3KR +GVX)DCF +1WX)DD2 +971)H6W +H6H)BPX +BWQ)Z4J +JPL)3SV +QWJ)TR8 +376)H9P +Q3D)1YS +1N2)FQ6 +2LM)53K +VSG)6DP +KNM)8B7 +S7B)YXF +YHB)JHP +Y7N)CPB +M29)3FB +J37)C8B +MK3)WHL +MRG)TQ8 +BFM)DLH +H4Q)9HF +D81)R7M +LRQ)ZKZ +C1B)413 +BKC)PW6 +GP4)6MX +C39)JSH +BW8)TL2 +71Q)3YP +415)H2V +DBH)BR4 +JJ7)J2H +G52)87N +YV2)JN3 +7PR)Z3V +999)G8M +S7Y)JRJ +G3D)88H +SR3)NTR +JY5)FC8 +MYL)B7X +K7V)HM6 +FXY)L47 +NNN)GYH +8JJ)Y5S +3G5)37V +FLP)4B2 +839)83S +H27)CV7 +X4F)RXV +S3P)WMZ +LD2)SF8 +DYG)77S +LGR)2LM +7BX)G2K +KNF)9S5 +JBS)R45 +T6C)CGH +CNV)2BZ +356)1KP +P93)54J +VGZ)31Y +GNG)HDL +RHW)222 +4T4)4T8 +WVY)M5Z +KQ7)XMG +K7F)S2N +X6Z)Z9S +XYH)WFC +7BM)J2B +H9F)LKV +WDJ)HWH +MWM)83M +YM5)7J5 +Z62)8NR +99Q)TVF +VDP)C2N +9VX)B5T +YS6)KNF +35R)ZH5 +JN5)Y4H +MSN)XSP +776)CJ4 +3FB)HXT +HZV)6HY +Q6N)HXS +MBT)FTN +3JP)YJ2 +4DC)KSD +8PG)5QZ +YSP)CNV +THM)CST +3X5)BPC +ZG9)4KY +8M6)MZ5 +FDF)XNB +H4X)N72 +ZH5)J79 +KN7)ZXV +1GP)R76 +K5R)CLZ +W8G)XVF +YJQ)HB8 +BWC)TB6 +WFH)T6C +DPB)VYF +K8N)KWJ +C2V)HMF +H93)HF3 +TR8)MFW +RJ4)F66 +BS6)FVW +QFW)5B2 +ML7)FB2 +TGY)X9Z +PRM)ZV3 +4YX)4YV +36D)N6X +XLQ)TLS +WMZ)NRF +BCM)2CV +M74)CHT +JYL)LQ4 +RSN)KXR +KNK)3Y2 +89X)BJK +C2H)4YQ +YYQ)VMB +164)11H +WYQ)WSF +1RG)DRH +GKD)LLT +H53)T2F +X2Q)F82 +B5D)5F8 +JK1)4F7 +1YB)P26 +B6F)552 +RTD)883 +ZPF)DWG +JRV)DL1 +MLQ)S1Y +TX8)5QV +NDT)2MF +HFS)61F +HD8)TCN +8BL)F2X +4MK)R6Z +WVN)RMY +GGX)JCC +GQ8)J11 +H4V)5FJ +3JD)VNC +7KS)9SM +NTR)YV2 +4LG)JK1 +3XZ)GGX +SVZ)P96 +4WG)N3V +QY7)8N9 +XMP)LKL +T4P)RLM +J7C)JJZ +7PC)Y23 +LPP)M6T +F82)9KL +9XR)VT4 +SF1)4T3 +FW6)N66 +QBY)D49 +BCM)17Y +H1W)R6K +ZVN)7QK +BRH)7JF +LKL)39C +LV1)BJS +8PC)FN6 +CHB)TBS +ZLR)3XD +8BD)BSC +NVC)9FB +Z9L)HK1 +FT3)BWL +446)S8V +LM1)D8G +KH3)Q6P +J8C)WFH +YT1)SDH +CGZ)X3V +77B)V9M +2RJ)H4V +NHY)H47 +89B)HM7 +Z1V)58S +17Y)1Q7 +J3F)891 +WDG)VSZ +PJM)21T +3YL)74D +8XJ)15N +Z2X)VHH +N6R)R93 +5QV)8XY +KSD)RYF +6DQ)X8F +Z2Q)MZB +ZFG)972 +5LK)FT3 +D25)1CF +RMQ)2HQ +85N)HDY +952)WFS +T4J)B88 +2MC)JFH +BRL)D64 +GJ4)65N +ZC2)QLQ +69T)3WV +W4F)WMG +74D)NCN +3YY)19K +JKG)6CJ +S68)GGZ +6N6)H2P +3XL)ZVG +S1D)14K +GMK)DW3 +HJF)1D5 +9DP)P9D +18K)Z2Q +248)YD2 +DTK)MR3 +LH8)1GZ +7ZC)RZJ +YJ2)ZVN +JN1)1FX +3WV)289 +53D)GJX +883)FXW +79K)ZXD +DLH)9X5 +BRQ)KHK +2XW)R65 +RGD)GCY +RNC)TR9 +HYV)54C +SJF)BBD +T81)F2T +GZ2)KBQ +G2K)48L +PL6)B5D +R76)Z4Z +QVK)TDX +F6N)M6X +8XQ)3JP +HXD)WNB +CLZ)37R +K6R)SY1 +X9G)8CM +2W9)W4X +ZXV)JC5 +HKY)1Q4 +KV1)QZC +LMT)CLW +Y4M)P57 +1YS)SJF +NGV)N1R +VLF)RGD +FJ5)8WN +PWG)V4K +XDC)KY2 +3DJ)RV8 +1RJ)2GN +WXT)MP2 +R89)JLR +GGB)RDG +Z6L)GQX +ZJQ)TLG +3WF)FQH +5YP)5Z3 +C1B)CCD +SBW)BQB +41C)W4H +1P5)YYP +R5X)36J +DZL)KNW +P57)CN4 +C85)78L +6YB)S7R +CYB)LNN +881)Z5X +642)B5K +X9J)SQT +BJK)M39 +BMW)SHT +2NS)VKN +1C2)JHT +H46)ZGD +JY6)RF8 +V1D)82Y +Z4Z)FW6 +CRP)JRG +1VX)77V +M2F)MHH +B7X)JJV +H29)7JR +Z4C)N13 +HN2)PRV +FTN)5FY +8HS)Z4M +JTP)GLS +JST)8XZ +4GX)T2P +1GZ)V8W +5MW)RT4 +9G2)QPQ +X6C)NGV +GP8)8SY +J67)ZBL +R45)BWC +DDF)S37 +31R)PHR +V4K)2L6 +J69)SYP +DVF)R29 +DLS)1BQ +72W)JKH +JPV)FL9 +TSK)69T +93V)T9M +CST)WPW +37Y)BJ8 +JR2)V4Z +B7C)X1V +WN7)GCD +K65)TM5 +HFS)KYB +1XR)TX8 +7L2)NXY +57Z)M6W +WMG)5HG +F6S)3YF +FMB)N6Q +HS4)QNV +XN6)X2C +56X)Z5F +NJ1)3M8 +65K)S2S +MSJ)Z3P +3RW)YJQ +YRB)L4G +5DZ)5YP +TB6)TGV +PDM)H9F +MTR)B36 +GGH)2LS +4S6)4KV +SVB)MV1 +JQN)18K +SRN)ZFK +ZFX)HXD +YNR)GCL +8QM)GDK +17G)B9Y +JKZ)19N +MJD)5BH +NSR)24N +T48)CF2 +Q3R)3TZ +741)T7M +P2C)G9Q +V8G)17G +GCC)54L +53K)TC8 +ZGD)F7V +J5Z)Z7X +4YV)HZV +GPZ)69X +RYT)RTK +Z6T)7ZC +FMT)ZVJ +56X)7KS +M89)YDR +F6Q)V8G +Y4V)MY7 +1Q7)17N +YV7)HQS +YLQ)GJ2 +5WT)VQB +YN7)DR2 +MPX)JBC +LFL)DPB +TNG)5Q1 +LW7)HC8 +HBR)Q6N +9K2)DNB +GXN)MHW +SGZ)1HF +WFS)N4R +3GN)2K4 +5Y4)1MH +M9W)7PR +WCK)DMQ +COM)TKH +6XY)LTM +WQF)1S2 +Z6N)3BD +CF2)LFL +GDX)ZQ4 +PGZ)1VH +X5D)6CP +TDX)MKV +3XX)BHR +SPL)DXS +GM5)TZR +M8W)DBH +PFH)KGJ +W4H)MKN +SPK)LRQ +V4P)63V +5LQ)WDG +L2G)49J +HB2)6Q9 +YV4)NTM +H47)9MW +ZB8)Y8J +C3D)HTQ +9HF)9K2 +XDG)GDX +FMS)239 +JJP)PKV +6C1)BL3 +FNX)JX4 +SN2)237 +TSD)PNN +RY1)JL3 +TX5)B2R +BS5)HJK +TBS)JNC +1BQ)PR5 +NRS)FX1 +5GX)BKC +8Y8)FRH +GP1)KFR +H1W)ZLJ +FX1)WT6 +HJK)WFT +7Z4)GT9 +FD8)RGG +8VZ)5PJ +1LW)PTY +PTT)15X +QVZ)6LR +Q9V)WMP +BLW)4DX +554)35D +YML)DND +997)CTW +L2L)6WB +PR9)K5K +6TY)5Y4 +2RQ)DVF +5PL)NK7 +3WB)KJ7 +PXM)HN2 +NBJ)FMB +BGN)BRP +BTH)C2B +9X5)MLT +XGJ)KGD +TDC)SBW +56Q)K7F +HF3)Z2X +RP9)952 +PKV)K4K +222)95K +LX9)4WG +RYF)HB2 +5CL)C4P +J2H)6PG +CXP)5GB +38R)L7N +NJ1)YDZ +LBC)42B +6WB)NCK +524)YOU +D8X)YNZ +KY2)BRH +W5X)DZX +SP9)G1J +JKT)LGJ +J2V)PJT +6SS)R9G +8MF)2L8 +X4J)8JJ +T1P)DLS +NWC)76R +YXW)RMQ +Y64)9NF +XB5)52M +JKP)YC1 +FZ2)ZCD +Q3S)CWT +YCS)QDR +S3M)792 +Q7K)N5M +952)MYL +GPR)F37 +Y7G)TFK +V7H)2G3 +CHW)BVC +FSM)TRY +RS7)BFX +KF6)3RW +TGV)6BJ +3TP)CXP +DXS)BW8 +8QM)NT3 +R4Z)X43 +7X3)7N7 +JJZ)3WB +GWZ)K7Z +XQF)R1M +2L8)4YX +891)F1D +S73)KS9 +289)3TB +XJF)PDZ +C29)K7N +YH5)8F3 +9NF)8LD +YX7)1NW +ZLJ)ZGS +DWS)CY2 +Z4P)XBM +HKY)K55 +P6W)BWQ +P1H)L64 +54T)25P +W38)6KP +CNV)9S2 +7FS)75T +9SV)PQQ +H46)VL3 +3FW)W91 +JBW)T99 +J89)MLR +CJC)4B6 +NYK)189 +R2K)3CT +S54)BHJ +98D)HRL +F1T)GRQ +T9M)NZJ +5B2)FNX +PQJ)D89 +WG3)2W2 +ZS9)WW8 +FSG)5SS +DW4)ZFG +78L)49Z +NGQ)2TJ +M6X)GDP +KXR)95L +1WQ)FNT +BRP)L4X +J3F)5C4 +2NB)JJD +SZL)5PT +FNB)DN9 +LNZ)ZBG +Z4J)NQV +D6J)H54 +1CF)SZF +QQF)1N2 +FFS)VF9 +NK7)KRM +6HY)TDQ +C2Q)16T +JTK)ZLR +1KD)N3R +2XH)JKP +BJ8)QHR +G9Y)5F2 +4R7)HGM +JGH)XS7 +72G)LLM +QLQ)Q1Y +TJL)8JW +N8F)8SX +JY8)HZD +3W9)JPV +WK4)HBD +8X9)6XH +YYG)WJQ +HZL)NQZ +BLY)JJG +6CH)CR4 +GQ6)248 +DWH)5LK +LQM)Z7Q +SN2)4DC +BF7)BTH +Z9S)NG8 +F5D)HK4 +2S6)5NW +LTM)757 +FC8)89N +SBJ)4T4 +XLM)XQR +S29)TDC +1YK)RL3 +6J2)7NB +SK1)7CS +GBD)H77 +9KL)HJF +LJ4)VST +S9W)4KN +99C)Z6N +L58)M2K +5JS)LR8 +WR5)9XR +V6W)WK4 +9S7)FRC +TM8)C39 +F4Q)Y86 +BN1)MTR +BGG)GP8 +GJN)MV8 +TLG)XYH +83S)CHW +Z1H)GX4 +3TB)HHX +J3Q)JQL +5Q1)75N +W91)57T +DVJ)HBR +B6F)M9M +WMP)5XN +WXQ)B17 +83M)XMH +8N9)SAN +LVG)8ZV +L2J)7SB +FNT)KM7 +BPC)B9T +1TQ)K27 +JZR)RJ4 +L9S)H93 +189)36D +TZG)2Z4 +5LZ)HXM +SJD)Q3S +WJQ)D81 +GP8)GZ2 +1TP)ZNV +X2J)837 +DJM)KDJ +7GP)NYK +TQ8)446 +HZL)4L8 +29G)3VP +4LZ)XTK +KFX)6N6 +HPM)WWQ +X1V)KVV +Y64)V4C +5GN)54T +SJ1)QS3 +DM4)83W +KDT)ZB8 +DL7)DKC +TML)SPL +LC2)K1W +MHW)5Z7 +MXT)RQN +9KL)K9L +M3T)YRM +KFR)Q49 +1DJ)SN2 +F82)2J1 +PWN)5PX +YT1)V7F +T6S)T1F +B8L)WB2 +Q79)LKF +853)RTD +KBQ)356 +HTL)54G +43T)53D +B5W)PH9 +7KQ)8TX +T2Z)1WQ +8HY)29M +552)M74 +STR)6HX +FRV)HMM +45F)J7C +4Y9)HFS +GNN)WJ6 +HXT)JQ8 +PNN)51L +PHR)RK5 +MM8)H1B +N66)G85 +C4P)W7Z +991)FSM +7QK)SLP +GDP)71Q +5MC)MRG +F2X)HY1 +B9B)CWM +SVZ)HN8 +XDB)4P8 +BS3)VFP +VXM)KCL +9G6)831 +9Z8)FNJ +GX4)C2Q +WFB)MZ9 +63V)MX3 +V8W)82Z +RTK)319 +427)WY1 +4T3)VVN +T2P)4LC +CR4)FQS +K4L)DTK +HLP)WCK +4YQ)H9N +RK5)QFW +GT9)SRN +YXF)FXY +V74)L3W +MY7)2RQ +JLR)JNS +9S5)LPH +H54)J37 +8XR)BLY +QMC)T48 +4TY)1QG +Z4J)H82 +BZC)LKD +4CP)86F +Z24)L58 +1FN)X15 +5FJ)QWJ +K27)2CD +3Z9)3W9 +L6V)J1J +51V)HJ2 +WD5)Q99 +49Z)G6N +Y4V)DDF +MFV)3GH +B1T)9CM +X9Z)BG5 +2M6)1XQ +2J8)3G5 +VMB)13Z +51S)BMW +1MH)LFK +VBK)3D4 +SDM)8XR +7NX)S2K +52L)4NL +LRS)664 +JDD)43S +JJV)H6X +62K)7L2 +WR1)L3D +LN4)WXQ +S52)C85 +F22)9SV +LH3)8B2 +YBD)8MY +TGM)N6H +ZVJ)MSN +S2S)5HV +2MF)GP1 +9ZP)3ZK +1LW)H44 +QTW)T9P +GHZ)YV7 +W7Z)M3Y +5FK)NWC +97X)36T +G7X)K5R +GLP)XQF +WQH)ZM7 +8YP)KF6 +WNB)WG1 +W21)1TQ +VBH)XM4 +CY5)3N6 +G1V)K1G +L2X)L9S +2CV)3LL +BKC)LC8 +R5P)JDL +JL3)T5B +HDY)FRM +XL2)F29 +8Y8)N86 +C8B)FDF +L3W)Z9L +WJ6)6FW +5HV)157 +DW9)1WX +C2B)JR2 +6HK)7GP +N86)971 +GZ6)KHJ +V4Z)376 +WT6)F4Q +H97)FP5 +M4L)MCT +D8G)BCQ +XPG)NP5 +8CG)GBD +6SD)6X3 +54L)1TP +N1W)MJD +ZXT)VXM +QH7)JN5 +S7H)4M5 +QSC)44B +19K)QLJ +951)25C +PJZ)W21 +X8F)X4F +CZW)SV8 +ZYJ)F5C +XNR)KPH +658)47Q +D66)3GD +ZGK)D65 +4ZT)YBT +3NR)K3P +WMD)HRP +VGN)554 +2GN)WH3 +8SX)DXJ +Z4M)MR9 +R1V)VDY +1D1)CRZ +CC5)MH1 +2NS)PXH +SLP)1FN +PTB)LYC +V4D)Z5M +Z2N)X77 +DR4)7KQ +646)98D +9PN)F21 +PB8)728 +WXT)4S9 +3YP)TGM +6PG)776 +9KY)T7C +5SS)LV1 +8HR)53Z +972)FZ2 +XJ8)9PN +6PB)Q35 +ZCR)42N +NNP)YPG +SL6)XL4 +1CG)YZJ +QKG)5GX +L94)HD8 +ZVH)GVJ +R93)3YL +4GC)2XH +FNJ)ZL5 +2LR)YBD +YDW)HMN +S8V)YRB +YV2)HS4 +6B6)6WZ +SVG)LB5 +DMQ)VWX +72Y)997 +MHY)3YY +JX9)XHT +MTV)DSB +413)6SD +DSB)25Q +9HF)BRG +B5W)P93 +9TB)XTP +JN3)6W2 +TFK)MKW +T49)4NY +742)MSJ +8F6)ZKW +TRQ)3JD +F2T)R8H +LQ4)GMJ +B9T)H46 +T2F)ZC2 +VC6)TJF +YDZ)R48 +RGG)974 +DTK)H4C +DTF)QCP +7KM)Z4C +GTS)MLJ +296)424 +664)H86 +2YP)ZYJ +V18)VC6 +7CS)SQH +DZS)3X8 +QYT)8HS +62Y)SQW +D8X)YXX +N2X)D3B +P84)6J2 +JPH)DZL +WM9)KWM +TM5)GM5 +W4X)YYR +TNG)LRP +1KP)ZQX +MZ9)72Y +WJZ)MPF +NP5)SQ3 +D66)5QS +H7H)ZCB +16T)V74 +X15)1WS +8NR)Y7N +237)DYP +N4Y)CGZ +Z8K)BYX +8KF)N6W +RF8)NMV +WFC)7XF +449)DDB +D49)X1H +TM8)78Q +G6N)73R +HGM)GD7 +F21)Y1R +TRC)5HH +N14)S73 +ZXT)BS5 +NG8)4L5 +8ZN)Q79 +4HJ)Q3T +837)NDT +1R7)R2K +77S)6YB +S7R)1XY +2VT)KNJ +WQ4)64D +M5Z)PVZ +RQN)8V9 +VVN)K2K +V2B)N3K +B17)7BX +1W5)LMT +1YW)X2J +XJC)XJF +P4W)4J1 +PRS)Q4P +BMM)QB5 +L7N)H29 +4W5)GKS +8WN)KH8 +N4R)39M +4NY)14W +19Q)ZG9 +W6W)J8C +PWZ)4RW +8F3)JBW +BC8)F4N +QG8)VDP +YG1)GBY +KRM)WJZ +4HL)2TH +W1V)FMT +1BL)NC2 +RTN)R6C +QLJ)PLT +SQH)93Y +KM7)9G2 +5Z3)JY8 +WB2)YSP +3S1)4W5 +5BH)SXV +28Q)5Q7 +PDZ)XD1 +D79)WHF +6BJ)DQT +5F8)C29 +46R)XNR +NC2)2Y8 +T5B)863 +TJF)PDM +L47)5QW +F59)JX9 +RK6)QG8 +GD7)RWP +863)7DK +97R)LJF +6N7)X32 +WLZ)XDM +RXH)79K +WG1)NQW +BNR)1P5 +ZXV)QQF +ZJX)GSZ +X2C)L5L +NVC)L2G +T1F)FK2 +GGZ)KH3 +TZC)R9K +157)FRV +3CX)Z1J +NS1)BGG +MFW)36X +DW3)C53 +88H)LP4 +FX4)F4M +676)7BB +9TR)Q3H +P5H)Z1H +LB1)XBR +SWS)FLP +4S4)QMC +KNW)5LZ +3PR)TVL +JYK)46F +ZM7)Z6T +Q99)427 +5R1)MYP +3TZ)YHB +QPD)L6V +HB8)K7P +2W2)ZFX +BS3)GWH +953)S2C +1BC)WKC +S7X)9PL +1RQ)KLD +1XY)JRV +D37)SF5 +PXD)P2C +4L4)CVV +MYP)2VZ +WPW)SFQ +N6H)8D7 +8B7)9RM +297)Q93 +LNG)R64 +BXB)NSR +DKC)MTV +6C1)81V +75N)21C +XY7)THS +BRG)YY2 +F37)RMV +831)LYP +M1P)GZ6 +ZXD)NR9 +6G1)35R +H2V)51V +Q9F)RRD +FXW)3XX +ZV3)CDP +JC5)JGH +Y73)KFX +V6G)1W5 +7BB)DR7 +RN7)56M +3GV)8X9 +HMM)41C +JK4)V1D +MFV)2J4 +QQW)H62 +N1R)CCC +B5T)3GV +G8D)8QM +JNB)Z75 +8D7)ST5 +JXX)C1B +G5Y)Y92 +G46)DW4 +3CQ)R9L +FR9)Q83 +N6Q)JR4 +ZG2)S4Z +JDC)NCF +ZLX)2XW +JJD)QLN +YY2)FJ5 +Z3P)W7C +LSB)N68 +64D)8BL +PR9)J67 +N6X)M2F +SQ3)XZ7 +MKW)KVM +L61)PL4 +R2Z)2BF +HGM)KQK +222)RJQ +4LC)PY4 +54C)N14 +MLR)Z7Z +BBD)W1V +JK1)32M +SY1)3S1 +65N)3TK +1X9)4HQ +6F3)H6H +489)GFB +Y86)52L +HN7)R1G +48K)5MC +4P3)Z6L +CHT)8R9 +3M8)HKP +RK6)PP4 +X77)V4D +YDR)LCG +DZP)3CY +75T)TKM +ZFK)5LQ +6R6)8NV +TVL)RHW +HMN)BNR +PG2)VN1 +FVQ)SQ5 +1HF)W5X +WVY)TGX +VYF)2N1 +BJS)LTJ +72V)GCC +8NV)BS3 +ZL5)P1H +3KR)69D +CZS)8WW +4N2)72G +KK2)JXX +5Q7)KPZ +4QP)HYV +1SY)V7H +CN4)JTP +9TC)SVG +K7P)T6S +QFQ)999 +NGN)QKG +BHR)DR4 +TGX)XPG +DY3)YG1 +M5Z)PHZ +KBQ)HVY +9D2)N5J +GMF)4LZ +1P8)BFN +GBY)KY4 +49M)LWB +FNZ)FFS +JL3)V2H +LB5)7FK +PM5)1BL +PHZ)LH8 +NCF)YNR +HSK)W6W +5RJ)C95 +RPK)ZRK +Y34)54N +5QW)TZ5 +KGJ)43X +P2V)Q9T +NQZ)L7W +WP4)S29 +J3S)C9G +5C2)TX5 +3PM)PK2 +3GD)393 +CCD)3Z9 +QKQ)PB8 +FCN)LRS +FQ4)M3T +45B)B1T +NPJ)MK3 +KGD)JJP +F5Y)JKZ +C6D)HSK +TR9)7SS +2TX)H73 +NFV)X5D +C2V)43T +M6T)KPS +PK2)1CG +TP1)N4Y +1D5)D9Z +MTR)97R +3TK)X3W +R7T)3VC +PHP)1LV +5GB)2H5 +YC1)24X +S5H)W79 +FQS)JVF +DML)6F3 +Z75)LXP +DMJ)29G +54N)GSS +RWP)D79 +VBV)XWX +VST)CMS +GZ2)676 +N72)FP3 +792)ZJX +H73)J17 +M8N)WQ4 +H6X)L5G +3VC)LBC +YBT)YR2 +LYC)4GX +3VP)17F +F5Y)9ZY +8LD)BCM +7JR)X45 +MV8)FY7 +JN6)31R +MZ5)CVK +239)S7Y +DJ3)S7H +RVK)6HK +G85)WR5 +LKF)TZG +SQ5)NP4 +HN8)H53 +CTW)MCJ +8ZV)6YF +2RQ)SR3 +MRR)Z4P +WQ3)TYW +6SW)L2J +HFC)CTH +N5M)1TK +757)RDF +R5Z)MHY +NW9)V3P +K3P)PWN +GD7)GDL +B2J)FN2 +BRJ)GK8 +S62)3NT +9BH)38R +KQK)WXW +2LS)T8V +4J1)5WT +7J5)H3D +W1B)F72 +F4N)NFK +QCP)4HJ +DWH)V5B +87N)XY7 +F13)LWC +7VH)67W +PMG)DY4 +JMC)WQ3 +6HY)PTT +YJ8)DML +9CM)DM1 +54J)DNJ +1Q6)8ST +CKW)XS3 +ZKW)JPL +111)YFN +H6W)R5Z +THS)X4J +DTM)PWZ +ZH5)8PG +JR4)Z24 +NCN)8HF +3BD)B8L +76R)LN4 +N3K)97M +JJG)N1H +5JW)P48 +YJS)XMP +4RW)T2Z +D65)DNY +KWM)ZGK +5FY)9BK +Y8J)7DR +5PJ)1YW +24L)PTB +XTR)PJZ +LLM)QSC +R6Z)V6W +H62)PQJ +HT7)V18 +6CP)S3M +WXW)N6J +GJX)F5Y +Q35)QY7 +3K8)F59 +8SX)SWS +B2R)6N7 +R8H)CRP +CGH)HFC +NWC)QKQ +P9D)BLW +NK3)YLD +CDP)2M4 +Q39)QB9 +F2J)X7D +J79)QHD +VXM)948 +X7D)GLP +NP4)Q37 +69H)K1C +FF1)65K +P7X)YDW +HTK)B6F +273)CTT +D25)164 +QGY)DXG +G46)BMM +QPQ)SZL +HM7)G7X +VMJ)J24 +5QS)RD6 +KVV)4CP +6W2)8KQ +1JP)PR9 +4B2)SF1 +FX4)NNP +2N7)ZRC +JQ8)N1W +LKD)83V +345)CJC +HVF)QYT +Y4H)7VH +5LR)4MJ +S2C)FSG +V5B)BBN +5X5)SJ1 +MKC)NPJ +BWL)F39 +VDZ)Z27 +7GP)YB3 +8R9)R3N +SQW)GNG +3X8)V2B +D89)SM1 +Z4P)RSN +YB3)5LR +V4C)1JP +FGH)FF1 +GKS)R69 +M5V)H4X +3CY)KXM +G4S)D5H +12P)1YK +3Y2)R1V +KTZ)DQW +KD3)L2L +KSL)F13 +R3Z)JKT +G9Q)1D1 +2J4)5DZ +X3V)MM8 +Z7Y)1BC +G1J)G4S +W4X)LFX +YJ6)JMV +FP5)KN7 +PCQ)8HR +FN2)W8G +31P)WFB +YXX)CYB +NXY)77B +NCK)Z8K +VPX)3TG +CN3)JY5 +HXS)WQF +FK3)DZS +WFT)9DP +XZ5)F1L +639)T81 +R26)PCQ +2VZ)YYD +4S9)1PZ +HVY)V4P +K55)K8N +2Y8)WMD +69T)24L +MHH)SRP +WPS)YWV +9PL)NHB +D3B)KDT +SHT)GJN +42N)6MG +K9F)YDT +N2R)FVQ +F3Q)296 +YML)8XQ +6YF)B9B +R13)Y64 +DNJ)DKW +H44)ZTP +1Q4)5JW +RLM)BRJ +LMJ)8HY +CL4)LF1 +6GW)TMM +VTP)JWQ +TQL)G52 +3QN)VWR +BFN)VPX +T39)TSK +Z1J)S3R +F7V)XBX +VNC)LW7 +WM8)788 +HBD)K9F +JQL)JGJ +3SV)WVN +DM1)297 +VHQ)467 +PVJ)12P +3GH)2M6 +6MG)KD3 +1NW)4GC +VTJ)FKC +Q8H)P86 +5QW)BXB +ML7)V61 +94V)NK3 +XM4)TML +V2P)5Y3 +CR6)JKG +7LG)S9W +8TX)V6G +2JY)ZG2 +DVR)57Z +VN1)Z2R +ZC3)N2C +SB6)RPW +58W)1ZX +VFP)X6C +JQN)ZC3 +53Z)LQM +KWL)TP1 +HKP)4BW +S9T)Q19 +K2K)WD5 +WLM)YV4 +SFQ)4R1 +6KP)CTQ +V3P)XDC +CXM)MKC +31Y)Z62 +XHT)L7R +FK2)S52 +LVY)HFP +RJQ)KV1 +9S2)2LR +NZ8)DVR +JKH)PG2 +ZQX)3TP +81V)9CP +42B)WDJ +7PB)S68 +39C)6C1 +RR8)KSZ +XL4)RTN +3XH)RYQ +78Q)TP3 +GCD)5YQ +R29)LVG +Q3H)646 +TMM)ZLX +4B2)WDB +6N5)449 +3XL)NFV +CDL)6JS +TMC)B7C +R1W)ZWC +LH3)XJC +CHH)DFJ +1FN)MLQ +LMT)658 +HK8)BN1 +73R)1GP +ZQ6)6B4 +Z5X)D37 +YPG)GTK +8SM)VL6 +W5C)C6D +4BW)YS6 +DYP)2TX +R9K)BRN +KS9)L9J +XTJ)B25 +Y23)CHB +NHB)LG4 +L5L)7Z4 +DRK)9SL +ST5)NVC +2WH)DTM +1LV)SDM +788)256 +TW7)6TN +6FW)3CX +BG9)4Y9 +67W)JJ7 +2D4)FR9 +Z8K)F1J +LTJ)31P +R94)YJ8 +5PT)MPX +9SL)LGR +FKZ)9G6 +DR7)SGZ +SM7)9KY +TKH)8MF +VXB)4N2 +XQR)W38 +21F)HK8 +Y3H)XLM +DBW)M8W +11H)853 +1WS)66W +DW4)KNK +NQV)SVB +6ZZ)8YP +ZWC)5PL +PP4)3CQ +T8V)THM +J1J)HMK +CPB)Y7G +GYH)9BH +WPK)FMS +95D)FJW +HM7)CJJ +ZGS)LBV +HMK)BZC +2BF)DWS +LWC)85N +L3B)M1P +7C2)WG3 +3ZK)7BM +GDK)8XJ +LGJ)4R6 +DL1)JSJ +44B)6T9 +KFT)CXM +Q4P)STR +LBC)6ZD +GDK)STH +6MX)F2P +Y92)21F +6ZD)YYQ +HYK)58W +3YF)KNM +X9G)8K2 +QWN)JQN +17F)KTZ +CJ4)62Y +KQW)GMF +15N)S9T +G1V)GMK +M62)X6J +8V9)SVZ +WW8)DJ9 +FP3)28Q +PMX)F3Q +N3G)56Q +46F)ZN3 +D3M)S3P +D64)LVY +72Y)ZHM +LPH)WLM +HY1)HZL +L3D)QPD +Q9T)X6Z +6HG)3DJ +KBP)9TR +25C)9Z8 +ZR9)RYK +TJR)5C2 +56M)X4Y +TL2)5CL +939)ZVH +595)DTF +Z27)D25 +54T)MWM +ZBL)W4F +6JS)H7H +YWV)QWN +5D9)S5H +P96)KZ1 +TDQ)8JZ +NQW)VHQ +K9L)DMJ +H6W)8F6 +2TJ)8NJ +MCJ)T1P +M94)JNB +5ZJ)9BG +KCL)RS7 +X6J)ZGQ +PQQ)JN6 +S2K)5FK +K7N)X2Q +HTQ)GW4 +LTJ)RPK +DD2)8J5 +7NX)Z2N +6LR)R3D +YR2)7Y7 +JBS)CZW +ZRK)XJ8 +4L5)3XF +GJ2)FNZ +XTP)YCS +HRP)P5H +BRJ)J89 +RD6)ZR3 +YNZ)N8F +2N1)XGH +JDL)DLD +YLD)94B +ZNV)1Q6 +6TG)CR6 +GMW)KWL +TZR)698 +RDG)VGN +F1D)5X5 +3CT)6CH diff --git a/2019/inputs/day_7.txt b/2019/inputs/day_7.txt new file mode 100644 index 0000000..b21d6af --- /dev/null +++ b/2019/inputs/day_7.txt @@ -0,0 +1 @@ +3,8,1001,8,10,8,105,1,0,0,21,46,59,84,93,110,191,272,353,434,99999,3,9,101,2,9,9,102,3,9,9,1001,9,5,9,102,4,9,9,1001,9,4,9,4,9,99,3,9,101,3,9,9,102,5,9,9,4,9,99,3,9,1001,9,4,9,1002,9,2,9,101,2,9,9,102,2,9,9,1001,9,3,9,4,9,99,3,9,1002,9,2,9,4,9,99,3,9,102,2,9,9,1001,9,5,9,1002,9,3,9,4,9,99,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,101,1,9,9,4,9,3,9,102,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,2,9,9,4,9,99,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,1001,9,2,9,4,9,99,3,9,101,1,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,1,9,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,3,9,101,1,9,9,4,9,99,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,99,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,1,9,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,2,9,4,9,99 diff --git a/2019/inputs/day_8.txt b/2019/inputs/day_8.txt new file mode 100644 index 0000000..21110e8 --- /dev/null +++ b/2019/inputs/day_8.txt @@ -0,0 +1 @@ +211202121222222222221222212222202022222222222122221220222222222222222222222202222222222222122121022222212222222222212212222222210222202212222222012222200222021222222222220222222222202222222222222022220221222222222222222222222222222222222222022022022222222222222222222212222222221222222202220222202222220202021222222222221222202222212222222222222122222220222222222222222222222222222222222222122220022222212222222222202222222222220222202212221222102222211202020222222222221222222222212222222222222022220221222222222222222222222212222222222222122022122222202222222222212202222222212222202212222222202222220222022222222222221222212222202022222222222222221220222222222222222222222212222222222222022122222222222222222222202202222222220222222202222222212222210002122222222222221222212222222022222222222122221221222222222222222212222202222222222222022220222222202222222222212222222222221222222222220222112222211012121222222222222222222222222221222222222122220222222222222222222212222212222222222222022120222222222222222222212202222222221222212202221222122222212122121222222222222222212222122022222222222222221220222222222222222212222212222220222222122021022222222222222222212202222222221222222202220222102222200212020222022222222222212222012221222222222122221221222222222222222212222202222222222222222121122222212222222222212212222222221222212222222222111222212022021222122222220222202222022022222222222122220221222222222222222202222222222222222222122120222222222222222222202212222222210222212212221222020222201222222222022222222222222222122222222222222022221220222222222222222202222212222222222222222222022222222222222222202222222222221222212202221222002222220202020222122222220222202222112221222222222022220222222222222222222222222212222220222222022120022222212222022222202202222222200222202202221222210222220022122222222222222222212222022021222222222222220221222222222222222202222202222221222222222020122222212220122222202212222222201222202212221222112222220002222222022222220222222222122121222222222022222221222222222222222212222202222201222222222120222222222221222222222202222222212222202222220222101222200212021222022222221222202222122222222222222222221220222222222222222222222212222210222222022022122222222220022222202202222222222222222222222222220222221022022222122222220222222222012020222220222122220221222222222222222212222212222212222222222220022222212222022222212222222222212222212212221222011222222012022222122222220222202222220122222222222122220221222222222222222222222212222221222222122020022222222222222222222222222202220222202212220222022222212102221222122222222222202222112021222222222022222220222222222222222222222222222202222222022120020222212221022222202202222212210222212202220222211222210102220222222222220222222222120122222222222022220220222222222222222222222222222202222222222222120222222220122222222202222202200222202222222222220222200012022222122222220222202222220122222222222122220222222222222222222202222212222220220222122122022222212222022222222222222202201222212212221222221222212122221222022222220222200222112022222222222222220020222222222222222202222202222220221222222020222222202221122222212212222212212222222212221222212222211012221222022222222222220222201121222220222022222021222222222222222212222222222200221222122220221222202220122222222202222222211222222202220222022222212002120222222222220222220222100222222221222022222122222222202222222212222212222221222222022121122222202222022222202202222212200222222202220222010222212102222222002222221222221222011022222222222022222120222222202222222222222212222210221222022221021222212220222222202212222212202222222202220222001222220012020222112222222222221222121122222220222122220020222222212222222212222212222220222222122022221222202220022222222202222222210222202202220222010222211022120222212222221222220222202120222221222122221122222222220222222202222202222210221222222221122222222220022222202212222202201222202212220222012222200212022222122222222222222222212222222222222122220121222222210222222202222212222201220222122121122222222222022222222222222212210222212212220222200222200012122222112222221222202222201220222222222222221221222222201222222212222222222210220222222122121222222221022222222222222212220222202212220222202222202012220222212222220222201222010121222220222222220020222222201222222212222212222220220222222122221222222221022222202202222202202222212222220222211222201112021222012222220222221222101121222220222222221121222222201222222212222202222022220222022221122222222222122222212222222222201222222222222222220222201202122222102222222222201222102220222222222122220222222222220222222222222202222211222222122120221222212221122222212202222202200222222222222222020222222222121222222222222222212222012021202222222022220021222222222222222202222222222200220222022221020222212220122222202222222222221222222212220212220222210122220222222222222222212222110222212220222222220021222222212222222222222212222001221222122020021222212222022222202202222212212222222202222212102222210022121222102222121222210222021121202221222122221022222222210222222222222202222001221222222121120212222220022222202212222202220222222212222212012222200022221222022222020222200222222122222221222022222122222222201222222202222202222110222222122221121222202221222222222202222222222222222202222212220222220202121222222222121222201222111221212221222022220120222222210222222202222212222202222222020021020202212222122222202212222202211222222202221212002222212122222222022222121222202222102121212221222022220022222202200222222212220222222211222222121221021222222221022222202222222222212222222202222212010222202102121222022222120222220222201021202222222022222222222222220222222212221212222200221222122221120222212221122222222222222202201222222212222212222222221222120222002222121222201222100021222221222222222120222212211222222222222202222001221222022020122210222221022222222212222222212222202222222212120222202022221222122202122222221222002221212222222022222222222202200222222212220222222111221222122221220210212221022222222202222212202222212212221222010222222102222222002220020222210222212120222222222022220022222202212222222222222212222002222222220121221210202221122222212212222222222222202202222202122222200222111222122220122222210222000020202221222022222221222222222222222202222212222211220222022220020212222220222222212212222222211222212212220202200222222102112222222222222222221222112021222221222222221222222222200222222202221222222212221022020220022220202222122222222202222210222222212202222202122222220112100222002200020222212222010120202220222022221020222212210222222202220202222011220220121121022022222221222222202212222222222222202222220222221222211012110222102221021222222222200220002222222022220121222212201222222202222212222212222221120220020121202222222222222202222222220222222212222202210222200022210222212220122222221222012220102220222222022221222212222222222202221212222021222022122222121012212222022222222222222200222222212212222212202222221102110222012212122222220222001222202221222222120021222212201222222212222222222011221120020221220111202220022222222202222201221222222222220202110222202012021222122220020222202222121220002222222122122122222222222222222212221212222220221122120020221110202222122222222212222212210222212112222222010222200112110222022222121222221222212020002220222222222121222202211222222212220202222222222220122120121011222221222222202202222222220222212102221222101222210222002222110221222202211222001021022222222022121220222212221222222222220222222012221121121021020121202220221222202212222001220222212112222202210222220212101222110211020222202222000220022222222122020222222222221222222222220222222022221122121121222002222221221222222202222210210222212212222202101222211102022222100220120212220222010020102220222222020222222222211222222202220222222221220121001022021110222221221222222222222011222222222022221202000222221022201222200221221010200222011220202220222022220220222212202222222222221222222212221220221220021210202221120222202012222112221222222022220202111222222102112222200220121110202222011020112221222222122101222212220222222202222202222101222222121122220001212221121222222202222220222222202112221222200212212112110222201201020101220222000220002221222022220011222212211222222202222202222012222122001122022210222220222222222022222222220222212102221222120202221202010222011201220010212222001221212220222122121100222222222222222212220212221001220221001120220221212221120222212002222010212222212222220202200212212112022222020220022001201222000020222222222122121002222202220222222212222202221200222220112120122211222222122222222212222012210222202212221212121212201202110222002200220211201222210022222220222122222010222222222222222222220212222122220222222122122200222221122222222012222221201222222112221212002212211022212222122211121222210222212222112222222022222211222220210222222222221222222102221221211022121110222222020222222012222201212222212202221212110222202102021222210211222210221222010020212021222022221021222200212222222222221202200111221121110122021020202221222222222202222022121222212012220212212212202212122222021220020120222222202122102220222122021211222201111222222222221212220101222022200022120002222222220222222002222022110222202202221222202222212202221222120220021210202222020122102020222022020102222220112022222202220202210100222122221122022202202222221222212012222110001222212202221212202212222212100222220211121101220222210021002122222022222222222212102222222202221222200002221020021022022002212222121222212112222100100212212112222202212222212002220220100211220102211222020021012120222022221222222211222022222202220212220102221021111020021201202220120222202222222012200212202102221212212202211022221222121212020221210222210100202222222122220212222201102022222222220212202000221222202222120212212221122222212102222111010222212122222202210212212002120221202221222002200222212020022221222022120000222210211122222202221212220012222022212020121120212222222222202112222111011202202022220202220212212002201220002212021002200222122222112221222122121222222210211222222222220222200111221020122122022121202220121222222022222220210212222022222222020222202022102221222202120112212222200112212020222122122111222212020222222202220212211101221222211221220120202220120222212102222120222222202102222222021202221122212222010210021122210222102120022220222122222210222202220122222202220222220001222020211220220020212220221022212222122010102212212222221202112222220002220221101212221021211222221200202021222222222012222221011222222222220222220222221120112221221012212220122222212022122122101222202022221212020212210022112221000220221102221222100120022221222022022001222210212022222222220222202220222222120121022002202221220222212012122200201202222202222222210212201012011221020221222212222222200220202122222022220102222222011222222212222222202012221221100221121212212222222122212112122222002202202112222222002212202212212221112220221111211222201000122121222122022020222201010222222202222212202221220122120120120120212221021222202012122021021212222112222212112210200122222220002212220112210222110021012022222222021021222212011122222222220202220110221020202121022212202221022022212212222101020222202202222222000222201202110221200222222010201212200221222022222222020000222201112222222220221212222012221120111220022102212221122122222112222012122222222122221202200222212122101221210210022001221222112122222122222122221111222212002222222210221212201120211021110120021201222222021022202022022101000222200022222212120220201212210221210222220222220212011221202220222222122000222210120022222220221202222021210020120120020221222221221122222122222202222222201022221210112212222122122220110202121112202222210022112022222122020122021210212222222011221222210010221222221022222121222221120122222122022012022202202012222222210200201002012221012221020200220202120211102222222222022110022202001122222112220212211120221222200221021020212220222122222112122201111202212102221220010200211002101221111211120121222212120102222022222222022000222212220022222021222212221012212122120021021100202222022222212012222002221222000002221212121201220222010222012210122002211202202201202020222222121101212202112122222212221102211011222120012221221210222221222122202122122212122202022102222202010221201002010221121210020102211222210220112021222122020221200210202222222200222122221200201222121122221112202222121022202022122001102222022112221220120222201212200221011200221212220202200211102020222022122212101221022022221122220112210220212220112222121012222222222222212012022201202212122212200200122210211122100222002210021201200222212202012021222222120112001220220122221102220012221201220221120002022011202221220022202212122210002202001202220212110222222002201221111222221220200212122022222220222222020120010211200022222212221212202110210222110000221120222220220222222102022122211222010222211221202202220112001222010211201201211222112002222220212222220112202221122222220101020022002211202221112210022212022220021120212202122122220222122001202222012201202102100221112210110120210212222111222222212022020111000222122022221202220002111220212121222222221020102222222222212222222222001222020022211221221200221012212220222202212101211222120010222121200022020200002210210222222102221022200220222020210212201101202221121021202122122220110212101100220220101202210202201220121200102211210212201122022020201022020000221202200122221011222012001022221022002211101122122221222120202202222222101212212201210220202211212102222222200200012220011212121100022222201122021212200201001122222022020012120011002222021201010021122221121022202122122110122222211021220200212202222222220221020200001011010202122210002020202022021012002202201222220011022110210112121221222112102000122221220220220012222102002202101112221211222210222222020022210210120112200222211111122021220122022002000211020022222010020022201021221121000100000202212221022021212112222202112212222222200221021200222102100121121221221010212202102200012220212120022212102222011022220220220211200121211220211001122222102221221020202202222010121212200100221202012222212112011222020210010010221212122200102022220221020002000212022122221202021122000112210021200010000210222220120121201122222021102212102111222201121202201202002020120200201212110202101010102022200121222211012221121122221000122021100210212222122211220212102221020122210202222110002212200011201200021201220022012110200222202010110002212220010120010022120110012200120022222122021212000212022122022010021101012221222020212102122120000212202002202202222222210012200102200200111220022112012202102021122021120011121200020122220001221102112201201020102122212202112220122122212222022110111222010201211210002212202112020020222212100211112122120200002020201020021202021200200022222010120111011000012120121101212002212222122121200022022212122202211001220201122201201012022011111200001112022002112002200220221121202120002212010122222010222121211010100220111112122101222222021021211212122121120212202000200210112220002211221002010102121110201000000011200112100002201220112102201101001200002222202202212002201221110202000102001202000200100102121000220100101111222110 diff --git a/2019/inputs/day_9.txt b/2019/inputs/day_9.txt new file mode 100644 index 0000000..6ec0b92 --- /dev/null +++ b/2019/inputs/day_9.txt @@ -0,0 +1 @@ +1102,34463338,34463338,63,1007,63,34463338,63,1005,63,53,1101,0,3,1000,109,988,209,12,9,1000,209,6,209,3,203,0,1008,1000,1,63,1005,63,65,1008,1000,2,63,1005,63,904,1008,1000,0,63,1005,63,58,4,25,104,0,99,4,0,104,0,99,4,17,104,0,99,0,0,1102,23,1,1004,1102,1,26,1000,1102,897,1,1028,1101,27,0,1012,1102,33,1,1001,1102,32,1,1007,1101,39,0,1005,1101,0,29,1018,1101,0,0,1020,1101,1,0,1021,1101,0,21,1002,1102,1,35,1014,1101,0,36,1009,1102,1,38,1006,1102,1,251,1024,1102,28,1,1017,1102,37,1,1008,1102,1,329,1026,1102,25,1,1011,1102,31,1,1013,1102,892,1,1029,1102,242,1,1025,1102,1,881,1022,1102,22,1,1003,1102,874,1,1023,1101,20,0,1016,1101,24,0,1019,1101,0,326,1027,1101,0,34,1015,1102,1,30,1010,109,-2,2102,1,7,63,1008,63,36,63,1005,63,205,1001,64,1,64,1105,1,207,4,187,1002,64,2,64,109,9,21101,40,0,6,1008,1013,43,63,1005,63,227,1105,1,233,4,213,1001,64,1,64,1002,64,2,64,109,26,2105,1,-9,4,239,1001,64,1,64,1106,0,251,1002,64,2,64,109,-15,1205,2,263,1105,1,269,4,257,1001,64,1,64,1002,64,2,64,109,-9,2102,1,0,63,1008,63,36,63,1005,63,295,4,275,1001,64,1,64,1106,0,295,1002,64,2,64,109,-14,1207,10,38,63,1005,63,311,1105,1,317,4,301,1001,64,1,64,1002,64,2,64,109,28,2106,0,4,1106,0,335,4,323,1001,64,1,64,1002,64,2,64,109,-8,1206,6,351,1001,64,1,64,1106,0,353,4,341,1002,64,2,64,109,-1,2107,33,-7,63,1005,63,369,1106,0,375,4,359,1001,64,1,64,1002,64,2,64,109,-9,2108,26,-1,63,1005,63,395,1001,64,1,64,1106,0,397,4,381,1002,64,2,64,109,3,1201,-2,0,63,1008,63,38,63,1005,63,419,4,403,1105,1,423,1001,64,1,64,1002,64,2,64,109,-13,2101,0,9,63,1008,63,23,63,1005,63,445,4,429,1105,1,449,1001,64,1,64,1002,64,2,64,109,11,1208,1,32,63,1005,63,471,4,455,1001,64,1,64,1106,0,471,1002,64,2,64,109,17,21108,41,38,-4,1005,1019,487,1105,1,493,4,477,1001,64,1,64,1002,64,2,64,109,6,1206,-9,511,4,499,1001,64,1,64,1106,0,511,1002,64,2,64,109,-23,21102,42,1,8,1008,1014,42,63,1005,63,533,4,517,1106,0,537,1001,64,1,64,1002,64,2,64,109,-3,2107,36,5,63,1005,63,555,4,543,1106,0,559,1001,64,1,64,1002,64,2,64,109,-6,1202,5,1,63,1008,63,21,63,1005,63,581,4,565,1106,0,585,1001,64,1,64,1002,64,2,64,109,1,1208,10,40,63,1005,63,605,1001,64,1,64,1106,0,607,4,591,1002,64,2,64,109,7,1201,0,0,63,1008,63,42,63,1005,63,631,1001,64,1,64,1106,0,633,4,613,1002,64,2,64,109,1,21107,43,42,7,1005,1013,649,1105,1,655,4,639,1001,64,1,64,1002,64,2,64,109,7,21108,44,44,3,1005,1016,677,4,661,1001,64,1,64,1106,0,677,1002,64,2,64,109,-7,21102,45,1,9,1008,1015,44,63,1005,63,701,1001,64,1,64,1106,0,703,4,683,1002,64,2,64,109,13,21101,46,0,-7,1008,1012,46,63,1005,63,729,4,709,1001,64,1,64,1105,1,729,1002,64,2,64,109,-13,2101,0,3,63,1008,63,33,63,1005,63,753,1001,64,1,64,1106,0,755,4,735,1002,64,2,64,109,14,1205,1,773,4,761,1001,64,1,64,1105,1,773,1002,64,2,64,109,-23,1202,10,1,63,1008,63,30,63,1005,63,797,1001,64,1,64,1105,1,799,4,779,1002,64,2,64,109,13,2108,22,-7,63,1005,63,817,4,805,1106,0,821,1001,64,1,64,1002,64,2,64,109,-11,1207,5,24,63,1005,63,843,4,827,1001,64,1,64,1105,1,843,1002,64,2,64,109,11,21107,47,48,7,1005,1017,861,4,849,1106,0,865,1001,64,1,64,1002,64,2,64,109,15,2105,1,-2,1001,64,1,64,1106,0,883,4,871,1002,64,2,64,109,10,2106,0,-7,4,889,1106,0,901,1001,64,1,64,4,64,99,21102,1,27,1,21102,1,915,0,1105,1,922,21201,1,28510,1,204,1,99,109,3,1207,-2,3,63,1005,63,964,21201,-2,-1,1,21102,1,942,0,1106,0,922,22102,1,1,-1,21201,-2,-3,1,21101,957,0,0,1106,0,922,22201,1,-1,-2,1105,1,968,21202,-2,1,-2,109,-3,2106,0,0 diff --git a/2019/readme.org b/2019/readme.org new file mode 100644 index 0000000..c674de4 --- /dev/null +++ b/2019/readme.org @@ -0,0 +1,26 @@ +* Advent of Code 2019 + +** Personal challenge + +Try to keep the solution pure. Only main can do IO things, like return +different results when it's called differently. The rest of the +program should only be pure expressions. + +** Optimizations + +- Limit the use of statements. Try to use expressions instead, or move + the statement out to a function. + +** Findings + +- Having iterators that you can't clone (like stdin) makes certain + things difficult. Eg, doing part 1 and 2 together. +- Using "new type" structs can be a pain. derive_more crate made most + of that pain go away. +- With immutable types, 'reset the machine to try again' type + constraints were handled for free. This made many later puzzles easier. +- The 'no statement' constraint meant that some functions ended up + nested in a way that makes it harder to name and read. +- The persistent data structures don't integrate with Rayon iterators. +- Easier to test subsets, but harder to inspect and audit runtime behaviour. +- Although it isn't frequently used, Rust supports functions inside functions. diff --git a/2019/src/bin/day_1.rs b/2019/src/bin/day_1.rs new file mode 100644 index 0000000..572d287 --- /dev/null +++ b/2019/src/bin/day_1.rs @@ -0,0 +1,93 @@ +use derive_more; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::process; + +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 1: The Tyranny of the Rocket Equation")] +/// Calculates the fuel needed for your rocket to save Santa. +/// +/// The weight of each module is read from stdin, one module weight +/// per line. See https://adventofcode.com/2019/day/1 for details. +struct Opt { + /// Includes the weight of fuel + #[structopt(short = "i", long = "include-fuel-weight")] + include_fuel_weight: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let input = stdin.lock().lines().map(|l| match l { + Ok(s) => match s.parse::<Module>() { + Ok(module) => module, + Err(e) => { + eprintln!("Invalid input \"{}\": {}", s, e); + process::exit(1); + } + }, + Err(e) => { + eprintln!("Error reading input: {}", e); + process::exit(1); + } + }); + + println!("{}", fuel_required(input, opt.include_fuel_weight)) +} + +fn fuel_required(it: impl Iterator<Item = Module>, include_fuel_weight: bool) -> Fuel { + it.map(if include_fuel_weight { + Module::fuel_including_fuel_weight + } else { + Module::fuel_excluding_fuel_weight + }) + .sum() +} + +#[derive(Debug, derive_more::FromStr, Clone, Copy)] +struct Module { + weight: Weight, +} + +impl Module { + fn fuel_excluding_fuel_weight(self) -> Fuel { + self.weight.required_fuel() + } + + fn fuel_including_fuel_weight(self) -> Fuel { + iter::successors(Some(self.weight.required_fuel()), |fuel| { + if fuel.is_zero() { + None + } else { + Some(fuel.weight().required_fuel()) + } + }) + .sum() + } +} + +#[derive(Debug, derive_more::FromStr, Clone, Copy)] +struct Weight(u32); + +impl Weight { + fn required_fuel(self) -> Fuel { + Fuel((self.0 / 3).saturating_sub(2)) + } +} + +#[derive(Debug, derive_more::Add, derive_more::Sum, Clone, Copy, derive_more::Display)] +struct Fuel(u32); + +impl Fuel { + fn weight(self) -> Weight { + Weight(self.0) + } + + fn is_zero(self) -> bool { + self.0 == 0 + } +} diff --git a/2019/src/bin/day_10.rs b/2019/src/bin/day_10.rs new file mode 100644 index 0000000..f25c3d2 --- /dev/null +++ b/2019/src/bin/day_10.rs @@ -0,0 +1,158 @@ +use aoc2019::*; +use std::io; +use std::io::prelude::*; +use std::iter::FromIterator; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 10: Monitoring Station")] +/// Finds the asteroid with the best view of the other asteroids. If +/// an n is provided, then it will print the nth asteroid destroyed by +/// a laser from the asteroid with the best view. Otherwise, it will +/// print the number of asteroids visible. +/// +/// Takes a map of asteroids in on stdin. +/// +/// See https://adventofcode.com/2019/day/10 for details. +struct Opt { + /// indexed from 0 + #[structopt(short = "n")] + n: Option<usize>, +} + +fn main() { + let opt = Opt::from_args(); + let stdin = io::stdin(); + let map: AsteroidMap = stdin + .lock() + .lines() + .map(|l| exit_on_failed_assertion(l, "Error reading input")) + .collect(); + + match opt.n { + Some(n) => println!("{:?}", map.nth_destroyed_asteroid(n)), + None => println!("{}", map.best_asteroid_line_of_sight_count()), + }; +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +#[derive(Debug)] +struct AsteroidMap { + asteroids: Vec<Asteroid>, +} + +impl FromIterator<String> for AsteroidMap { + fn from_iter<T: IntoIterator<Item = String>>(iter: T) -> Self { + AsteroidMap { + asteroids: iter + .into_iter() + .enumerate() + .flat_map(move |(y, line)| { + line.chars() + .enumerate() + .map(move |(x, c)| (x, y, c)) + .collect::<Vec<_>>() + }) + .filter(|(_x, _y, c)| *c == '#') + .map(|(x, y, _x)| Asteroid { + x: x as i32, + y: y as i32, + }) + .collect(), + } + } +} + +impl AsteroidMap { + fn best_asteroid_line_of_sight_count(&self) -> usize { + self.optimal_view_asteroid() + .map(|a| self.count_visible_from(&a)) + .unwrap_or(0) + } + + fn nth_destroyed_asteroid(&self, n: usize) -> Option<Asteroid> { + self.optimal_view_asteroid() + .and_then(|source| self.nth_destroyed_asteroid_from(&source, n)) + } + + fn nth_destroyed_asteroid_from(&self, source: &Asteroid, n: usize) -> Option<Asteroid> { + if self.asteroids.len() - 1 < n { + None + } else if self.count_visible_from(source) >= n { + sort_by_key( + self.asteroids + .iter() + .filter(|b| self.has_line_of_sight(source, b)), + |b| (source.angle_to(b) * 100000.) as i32, + ) + .nth(n) + .cloned() + } else { + self.remove_visible_to(source) + .nth_destroyed_asteroid_from(source, n - self.count_visible_from(source)) + } + } + + fn optimal_view_asteroid(&self) -> Option<Asteroid> { + self.asteroids + .iter() + .max_by_key(|a| self.count_visible_from(a)) + .cloned() + } + + fn count_visible_from(&self, a: &Asteroid) -> usize { + self.asteroids + .iter() + .filter(|b| a != *b && self.has_line_of_sight(a, b)) + .count() + } + + fn remove_visible_to(&self, source: &Asteroid) -> AsteroidMap { + AsteroidMap { + asteroids: self + .asteroids + .iter() + .filter(|b| self.has_line_of_sight(source, b)) + .cloned() + .collect(), + } + } + + fn has_line_of_sight(&self, a: &Asteroid, b: &Asteroid) -> bool { + a != b + && !self.asteroids.iter().any(|c| { + a != c + && b != c + && a.angle_to(b) == a.angle_to(c) + && a.distance_squared(b) > a.distance_squared(c) + }) + } +} + +#[derive(Debug, Clone, PartialEq, Eq)] +struct Asteroid { + x: i32, + y: i32, +} + +impl Asteroid { + fn angle_to(&self, other: &Asteroid) -> f32 { + ((self.x as f32 - other.x as f32).atan2(other.y as f32 - self.y as f32) + + std::f32::consts::PI) + % (2. * std::f32::consts::PI) + } + + fn distance_squared(&self, other: &Asteroid) -> i32 { + (self.x - other.x).pow(2) + (self.y - other.y).pow(2) + } +} diff --git a/2019/src/bin/day_11.rs b/2019/src/bin/day_11.rs new file mode 100644 index 0000000..da3e1fd --- /dev/null +++ b/2019/src/bin/day_11.rs @@ -0,0 +1,205 @@ +use aoc2019::*; +use rpds::list; +use rpds::list::List; +use rpds::RedBlackTreeMap; +use std::fmt; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 11: Space Police")] +/// Calculates how many blocks a painting robot would paint. +/// +/// Takes the program to run on the robot in on stdin. +/// +/// See https://adventofcode.com/2019/day/11 for details. +struct Opt { + /// debug mode prints the size of the painted area on a black background + #[structopt(short = "d", long = "debug")] + debug: bool, +} + +fn main() { + let opt = Opt::from_args(); + let stdin = io::stdin(); + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>(); + + let finished_robot = exit_on_failed_assertion( + Robot::new(program, !opt.debug).execute(), + "Robot encountered an error", + ); + if opt.debug { + println!("{}", finished_robot.canvas.size()); + } else { + println!("{}", finished_robot); + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +#[derive(Debug, Clone)] +struct Robot { + program: IntcodeProgram, + position: (i32, i32), + facing: Direction, + canvas: RedBlackTreeMap<(i32, i32), bool>, + background: bool, +} + +impl fmt::Display for Robot { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + (self.min_white_y()..=self.max_white_y()) + .map(move |y| { + (self.min_white_x()..=self.max_white_x()) + .map(move |x| (x, y)) + .map(|coord| self.canvas.get(&coord).cloned().unwrap_or(self.background)) + .map(|c| write!(f, "{}", if c { '#' } else { ' ' })) + .collect::<fmt::Result>() + .and_then(|_| writeln!(f, "")) + }) + .collect() + } +} + +#[derive(Debug, Clone)] +enum Direction { + Up, + Down, + Left, + Right, +} + +impl Robot { + fn new(program: IntcodeProgram, background: bool) -> Robot { + Robot { + program: program.run_to_termination_or_input(), + position: (0, 0), + facing: Direction::Up, + canvas: RedBlackTreeMap::new(), + background, + } + } + + fn execute(&self) -> Result<Robot, IntcodeProgramError> { + iter::successors(Some(self.clone()), |robot| Some(robot.next())) + .find(|robot| { + robot.program.error.is_some() + || (robot.program.halted && robot.program.output.is_empty()) + }) + .unwrap() // infinite iterator won't terminate unless this is Some + .as_result() + } + + fn as_result(&self) -> Result<Robot, IntcodeProgramError> { + match self.program.error { + Some(ref error) => Err(error.clone()), + None => Ok(self.clone()), + } + } + + fn next(&self) -> Robot { + match ( + self.program.output.get(0).map(intcode_to_bool), + self.program.output.get(1).map(intcode_to_bool), + ) { + (Some(paint), Some(rot)) => Robot { + program: self + .program + .with_cleared_output() + .with_input(list![bool_to_intcode( + self.canvas + .get(&self.facing.rotate(rot).move_position(self.position)) + .cloned() + .unwrap_or(self.background), + )]) + .run_to_termination_or_input(), + position: self.facing.rotate(rot).move_position(self.position), + facing: self.facing.rotate(rot), + canvas: self.canvas.insert(self.position, paint), + background: self.background, + }, + _ => Robot { + program: self + .program + .with_input(list![bool_to_intcode( + self.canvas + .get(&self.position) + .cloned() + .unwrap_or(self.background), + )]) + .run_to_termination_or_input(), + ..self.clone() + }, + } + } + + fn min_white_x(&self) -> i32 { + self.white_blocks().map(|(x, _y)| x).min().unwrap_or(0) + } + fn min_white_y(&self) -> i32 { + self.white_blocks().map(|(_x, y)| y).min().unwrap_or(0) + } + fn max_white_x(&self) -> i32 { + self.white_blocks().map(|(x, _y)| x).max().unwrap_or(0) + } + fn max_white_y(&self) -> i32 { + self.white_blocks().map(|(_x, y)| y).max().unwrap_or(0) + } + + fn white_blocks<'a>(&'a self) -> impl 'a + Iterator<Item = (i32, i32)> { + self.canvas + .iter() + .filter(|(_, val)| **val) + .map(|(coord, _)| coord) + .cloned() + } +} + +impl Direction { + fn rotate(&self, clockwise: bool) -> Direction { + use Direction::*; + + if clockwise { + match self { + Up => Right, + Right => Down, + Down => Left, + Left => Up, + } + } else { + match self { + Up => Left, + Left => Down, + Down => Right, + Right => Up, + } + } + } + + fn move_position(&self, position: (i32, i32)) -> (i32, i32) { + use Direction::*; + match self { + Up => (position.0, position.1 + 1), + Down => (position.0, position.1 - 1), + Left => (position.0 - 1, position.1), + Right => (position.0 + 1, position.1), + } + } +} diff --git a/2019/src/bin/day_12.rs b/2019/src/bin/day_12.rs new file mode 100644 index 0000000..7e42f4c --- /dev/null +++ b/2019/src/bin/day_12.rs @@ -0,0 +1,205 @@ +use std::io; +use std::io::prelude::*; +use std::iter; +use std::num::ParseIntError; +use std::ops; +use std::process; +use std::str::FromStr; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 12: The N-Body Problem")] +/// Simulates N bodies, physically interacting +/// +/// See https://adventofcode.com/2019/day/12 for details. +struct Opt { + #[structopt(short = "n")] + n: Option<u64>, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let planets: Vec<Planet> = stdin + .lock() + .lines() + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(x.parse::<Planet>(), "Input was not a valid planet")) + .collect(); + + match opt.n { + Some(n) => println!("{}", energy(simulate_planets_n_iterations(planets, n))), + None => println!("{}", simulate_planets_to_duplicate(planets)), + }; +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +fn energy(planets: Vec<Planet>) -> i32 { + planets.into_iter().map(|p| p.energy()).sum() +} + +fn simulate_planets_n_iterations(planets: Vec<Planet>, n: u64) -> Vec<Planet> { + simulate_planets_iter(planets) + .find(|(i, _)| *i == n) + .unwrap() + .1 +} + +fn simulate_planets_to_duplicate(planets: Vec<Planet>) -> u64 { + lowest_common_multiple( + simulate_planets_to_duplicate_1d(planets.clone(), |(p, o)| p.equal_x(o)), + simulate_planets_to_duplicate_1d(planets.clone(), |(p, o)| p.equal_y(o)), + simulate_planets_to_duplicate_1d(planets.clone(), |(p, o)| p.equal_z(o)), + ) +} + +fn simulate_planets_to_duplicate_1d( + planets: Vec<Planet>, + eq: impl FnMut((&Planet, &Planet)) -> bool + Copy, +) -> u64 { + simulate_planets_iter(planets.clone()) + .skip(1) + .find(|(_i, ps)| ps.iter().zip(planets.iter()).all(eq)) + .unwrap() + .0 +} + +fn lowest_common_multiple(x: u64, y: u64, z: u64) -> u64 { + (1..) + .map(|i| x * i) + .find(|mx| multiples(y, *mx) && multiples(z, *mx)) + .unwrap() +} + +fn multiples(x: u64, target: u64) -> bool { + target % x == 0 +} + +fn simulate_planets_iter(planets: Vec<Planet>) -> impl Iterator<Item = (u64, Vec<Planet>)> { + iter::successors(Some((0, planets.clone())), |(i, planets)| { + Some((i + 1, simulate_planets(planets.clone()))) + }) +} + +fn simulate_planets(planets: Vec<Planet>) -> Vec<Planet> { + simulate_velocity(simulate_gravity(planets)) +} + +fn simulate_gravity(planets: Vec<Planet>) -> Vec<Planet> { + planets + .iter() + .map(|p| Planet { + pos: p.pos.clone(), + vel: planets + .iter() + .filter(|o| p != *o) + .map(|o| p.acc(o)) + .fold(p.vel, |acc, next| acc + next), + }) + .collect() +} + +fn simulate_velocity(planets: Vec<Planet>) -> Vec<Planet> { + planets + .into_iter() + .map(|p| Planet { + pos: p.pos + p.vel, + vel: p.vel, + }) + .collect() +} + +#[derive(Debug, Default, Clone, PartialEq)] +struct Planet { + pos: Vec3d, + vel: Vec3d, +} + +#[derive(Debug, Default, Clone, Copy, PartialEq)] +struct Vec3d { + x: i32, + y: i32, + z: i32, +} + +impl FromStr for Planet { + type Err = ParseIntError; + + fn from_str(s: &str) -> Result<Self, ParseIntError> { + s.replace(|c| "<>xyz= ".contains(c), "") + .split(',') + .map(|i| i.parse::<i32>()) + .collect::<Result<Vec<_>, _>>() + .and_then(|v| match &v[..] { + [x, y, z] => Ok(Planet { + pos: Vec3d { + x: *x, + y: *y, + z: *z, + }, + vel: Vec3d::default(), + }), + _ => "wrong number of fields" + .parse::<i32>() + .map(|_x| Planet::default()), + }) + } +} + +impl Planet { + fn acc(&self, other: &Planet) -> Vec3d { + Vec3d { + x: gravity(self.pos.x, other.pos.x), + y: gravity(self.pos.y, other.pos.y), + z: gravity(self.pos.z, other.pos.z), + } + } + + fn energy(&self) -> i32 { + (self.pos.x.abs() + self.pos.y.abs() + self.pos.z.abs()) + * (self.vel.x.abs() + self.vel.y.abs() + self.vel.z.abs()) + } + + fn equal_x(&self, other: &Planet) -> bool { + self.pos.x == other.pos.x && self.vel.x == other.vel.x + } + + fn equal_y(&self, other: &Planet) -> bool { + self.pos.y == other.pos.y && self.vel.y == other.vel.y + } + + fn equal_z(&self, other: &Planet) -> bool { + self.pos.z == other.pos.z && self.vel.z == other.vel.z + } +} + +fn gravity(this: i32, that: i32) -> i32 { + if that > this { + 1 + } else if this > that { + -1 + } else { + 0 + } +} + +impl ops::Add<Vec3d> for Vec3d { + type Output = Vec3d; + fn add(self, rhs: Vec3d) -> Self::Output { + Vec3d { + x: self.x + rhs.x, + y: self.y + rhs.y, + z: self.z + rhs.z, + } + } +} diff --git a/2019/src/bin/day_13.rs b/2019/src/bin/day_13.rs new file mode 100644 index 0000000..ac1c478 --- /dev/null +++ b/2019/src/bin/day_13.rs @@ -0,0 +1,149 @@ +use aoc2019::*; +use rpds::list; +use rpds::list::List; +use rpds::vector::Vector; +use rpds::RedBlackTreeMap; +use std::cmp::Ordering; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 13: Care Package")] +/// Executes an Intcode game +/// +/// The program is read from stdin as a series of comma-separated +/// values. Newlines are ignored. +/// +/// See https://adventofcode.com/2019/day/13 for details. +struct Opt { + #[structopt(short = "q", long = "quarters")] + quarters: Option<Intcode>, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>(); + + match opt.quarters { + Some(quarters) => { + let result = score_on_won_game(program.with_mem_0(quarters)); + println!("{}", result); + } + None => { + let result = exit_on_failed_assertion(program.execute(), "Program errored"); + println!("{}", count_blocks(&result)); + } + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +#[derive(Default, Clone)] +struct Screen { + screen: RedBlackTreeMap<(Intcode, Intcode), Intcode>, + previous_ball: (Intcode, Intcode), + ball: (Intcode, Intcode), + paddle: (Intcode, Intcode), + score: Intcode, +} + +impl Screen { + fn render(output: &Vector<Intcode>) -> Screen { + (0..output.len() / 3) + .map(|i| i * 3) + .map(|i| { + ( + output[i].clone(), + output[i + 1].clone(), + output[i + 2].clone(), + ) + }) + .fold(Screen::default(), |acc, (x, y, tile)| { + if x == Intcode::from(-1) && y == Intcode::from(0) { + Screen { score: tile, ..acc } + } else if tile == Intcode::from(4) { + Screen { + ball: (x, y), + previous_ball: acc.ball, + ..acc + } + } else if tile == Intcode::from(3) { + Screen { + paddle: (x.clone(), y.clone()), + screen: acc.screen.insert((x, y), tile), + ..acc + } + } else if tile == Intcode::from(0) { + Screen { + screen: acc.screen.remove(&(x, y)), + ..acc + } + } else { + Screen { + screen: acc.screen.insert((x, y), tile), + ..acc + } + } + }) + } + + fn paddle_required_direction(&self) -> Intcode { + match self.paddle.0.cmp(&self.ball.0) { + Ordering::Less => Intcode::from(1), + Ordering::Equal => Intcode::from(0), + Ordering::Greater => Intcode::from(-1), + } + } +} + +fn count_blocks(output: &Vector<Intcode>) -> usize { + Screen::render(output) + .screen + .values() + .filter(|val| **val == Intcode::from(2)) + .count() +} + +fn score_on_won_game(program: IntcodeProgram) -> Intcode { + Screen::render( + &iter::successors(Some(program.run_to_termination_or_input()), |program| { + Some(next_game_state(program.clone())) + }) + .take_while(|program| !program.halted) + .find(|program| count_blocks(&program.output) == 0) + .unwrap() + .output, + ) + .score +} + +fn next_game_state(program: IntcodeProgram) -> IntcodeProgram { + program_with_next_input(program.run_to_termination_or_input()) +} + +fn program_with_next_input(program: IntcodeProgram) -> IntcodeProgram { + program.with_input(list![next_input(&program.output)]) +} + +fn next_input(output: &Vector<Intcode>) -> Intcode { + Screen::render(output).paddle_required_direction() +} diff --git a/2019/src/bin/day_14.rs b/2019/src/bin/day_14.rs new file mode 100644 index 0000000..0532f5f --- /dev/null +++ b/2019/src/bin/day_14.rs @@ -0,0 +1,221 @@ +use rpds::map::red_black_tree_map::RedBlackTreeMap; +use rpds::rbt_map; +use rpds::vector::Vector; +use std::fmt; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::process; +use std::str::FromStr; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 14: Space Stoichiometry")] +/// Finds how much ore you need to produce one fuel. +/// +/// Recipes are passed in on stdin, one per line. +/// +/// See https://adventofcode.com/2019/day/14 for details. +struct Opt { + #[structopt(long = "available-ore")] + available_ore: Option<i64>, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let recipes = stdin + .lock() + .lines() + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(x.parse::<Recipe>(), "Input was not a valid recipe")) + .collect::<Vec<_>>(); + + match opt.available_ore { + Some(ore) => println!("{}", max_fuel_production(ore, &recipes)), + None => println!("{}", Desires::new(1).min_ore_required(&recipes)), + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +fn max_fuel_production(ore_max: i64, recipes: &[Recipe]) -> i64 { + binary_search_max_fuel_production( + ore_max / Desires::new(1).min_ore_required(&recipes), + 2 * ore_max / Desires::new(1).min_ore_required(&recipes), + ore_max, + recipes, + ) +} + +fn binary_search_max_fuel_production( + fuel_min: i64, + fuel_max: i64, + ore_max: i64, + recipes: &[Recipe], +) -> i64 { + if fuel_max - fuel_min <= 1 { + fuel_min + } else if Desires::new((fuel_min + fuel_max) / 2).min_ore_required(recipes) <= ore_max { + binary_search_max_fuel_production((fuel_min + fuel_max) / 2, fuel_max, ore_max, recipes) + } else { + binary_search_max_fuel_production(fuel_min, (fuel_min + fuel_max) / 2, ore_max, recipes) + } +} + +#[derive(Debug, Clone)] +struct Recipe { + ingredients: Vector<Chemical>, + output: Chemical, +} + +#[derive(Default, Debug, Clone)] +struct Chemical { + name: String, + quantity: i64, +} + +impl FromStr for Recipe { + type Err = ParseErr; + fn from_str(s: &str) -> Result<Self, Self::Err> { + // 2 XSNKB, 15 ZVMCB, 3 KDFNZ => 2 RFLX + s.replace(" => ", "=") + .replace(", ", ",") + .split(|c| c == ',' || c == '=') + .map(|chem| chem.parse::<Chemical>()) + .collect::<Result<Vector<Chemical>, ParseErr>>() + .map(|chemicals| Recipe { + ingredients: chemicals + .drop_last() + .expect("Assertion failed: line did not have any chemicals"), + output: chemicals + .last() + .cloned() + .expect("Assertion failed: line did not have any chemicals"), + }) + } +} + +impl Recipe { + fn required_scale(&self, desired_quantity: i64) -> i64 { + (desired_quantity + self.output.quantity - 1) / self.output.quantity + } +} + +impl FromStr for Chemical { + type Err = ParseErr; + fn from_str(s: &str) -> Result<Self, Self::Err> { + // 1 FUEL + match s.split(' ').collect::<Vec<_>>()[..] { + [quantity, name] => quantity + .parse::<i64>() + .map_err(|_| ParseErr) + .map(|q| Chemical { + name: name.to_string(), + quantity: q, + }), + _ => Err(ParseErr), + } + } +} + +impl Chemical { + fn scale(&self, scale: i64) -> Chemical { + Chemical { + name: self.name.clone(), + quantity: self.quantity * scale, + } + } +} + +#[derive(Debug, Clone, Copy)] +struct ParseErr; + +impl fmt::Display for ParseErr { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "Error parsing input") + } +} + +impl std::error::Error for ParseErr {} + +#[derive(Debug, Clone)] +struct Desires { + chemicals: RedBlackTreeMap<String, i64>, +} + +impl Desires { + fn new(fuel: i64) -> Desires { + Desires { + chemicals: rbt_map!["FUEL".to_string() => fuel, "ORE".to_string() => 0], + } + } + + fn min_ore_required(&self, recipes: &[Recipe]) -> i64 { + iter::successors(Some(self.clone()), |prev| Some(prev.next(recipes))) + .find(|desires| desires.is_only_ore()) + .unwrap() + .chemicals + .get("ORE") + .cloned() + .unwrap() + } + + fn is_only_ore(&self) -> bool { + !self + .chemicals + .iter() + .any(|(name, quantity)| *quantity > 0 && name != "ORE") + } + + fn next(&self, recipes: &[Recipe]) -> Desires { + self.chemicals + .iter() + .find(|(name, quantity)| **quantity > 0 && *name != "ORE") + .map(|(mixing, quantity)| { + self.with_mixed_recipe( + recipes + .iter() + .find(|recipe| recipe.output.name == *mixing) + .expect("Required chemical without a recipe"), + *quantity, + ) + }) + .unwrap_or(self.clone()) + } + + fn with_mixed_recipe(&self, recipe: &Recipe, desired_quantity: i64) -> Desires { + recipe.ingredients.iter().fold( + self.with_chemical( + recipe + .output + .scale(-1 * recipe.required_scale(desired_quantity)), + ), + |acc, next_ingredient| { + acc.with_chemical(next_ingredient.scale(recipe.required_scale(desired_quantity))) + }, + ) + } + + fn with_chemical(&self, chemical: Chemical) -> Desires { + Desires { + chemicals: match self.chemicals.get(&chemical.name) { + Some(existing_quantity) => self + .chemicals + .insert(chemical.name.clone(), existing_quantity + chemical.quantity), + None => self + .chemicals + .insert(chemical.name.clone(), chemical.quantity), + }, + } + } +} diff --git a/2019/src/bin/day_15.rs b/2019/src/bin/day_15.rs new file mode 100644 index 0000000..b2205bb --- /dev/null +++ b/2019/src/bin/day_15.rs @@ -0,0 +1,183 @@ +use aoc2019::*; +use rpds::list; +use rpds::list::List; +use rpds::rbt_set; +use rpds::set::red_black_tree_set::RedBlackTreeSet; +use rpds::vector; +use rpds::vector::Vector; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 15: Oxygen System")] +/// Executes an Intcode robot that's searching a map. Prints the +/// time taken for oxygen to propagate to the whole area. +/// +/// See https://adventofcode.com/2019/day/15 for details. +struct Opt { + /// Run in 'find' mode, find the oxygen tank but don't see how long it takes the oxygen to propagate + #[structopt(short = "f")] + find: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>(); + + if opt.find { + println!("{}", shortest_distance(program)); + } else { + println!("{}", max_depth_from_oxygen(program)); + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +fn shortest_distance(program: IntcodeProgram) -> usize { + iter::successors( + Some(( + rbt_set![(0, 0)], + vector![((0, 0), program.run_to_termination_or_input())], + )), + |(visited, programs)| { + Some(next_depth_states( + visited.clone(), + next_program_states(programs, visited), + )) + }, + ) + .enumerate() + .find(|(_i, (_visited, programs))| { + programs + .iter() + .any(|(_location, program)| program.output == vector![2.into()]) + }) + .unwrap() + .0 +} + +fn max_depth_from_oxygen(program: IntcodeProgram) -> usize { + max_depth( + iter::successors( + Some(( + rbt_set![(0, 0)], + vector![((0, 0), program.run_to_termination_or_input())], + )), + |(visited, programs)| { + Some(next_depth_states( + visited.clone(), + next_program_states(programs, visited), + )) + }, + ) + .find(|(_visited, programs)| { + programs + .iter() + .any(|(_location, program)| program.output == vector![2.into()]) + }) + .unwrap() + .1 + .iter() + .find(|(_location, program)| program.output == vector![2.into()]) + .cloned() + .unwrap() + .1, + ) +} + +fn max_depth(program: IntcodeProgram) -> usize { + iter::successors( + Some(( + rbt_set![(0, 0)], + vector![((0, 0), program.run_to_termination_or_input())], + )), + |(visited, programs)| { + Some(next_depth_states( + visited.clone(), + next_program_states(programs, visited), + )) + }, + ) + .take_while(|(_visited, programs)| programs.len() > 0) + .count() + - 1 +} + +fn inputs() -> [((i32, i32), Intcode); 4] { + [ + ((0, 1), Intcode::from(1)), + ((0, -1), Intcode::from(2)), + ((1, 0), Intcode::from(3)), + ((-1, 0), Intcode::from(4)), + ] +} + +fn next_program_states( + programs: &Vector<((i32, i32), IntcodeProgram)>, + visited: &RedBlackTreeSet<(i32, i32)>, +) -> Vector<((i32, i32), IntcodeProgram)> { + let inputs = inputs(); + programs + .iter() + .flat_map(|(location, program)| { + inputs.iter().map(move |(vec, input)| { + ( + (location.0 + vec.0, location.1 + vec.1), + program + .with_cleared_output() + .with_input(list![input.clone()]) + .run_to_termination_or_input(), + ) + }) + }) + .filter(|(location, program)| { + !visited.contains(location) && program.output != vector![0.into()] + }) + .collect() +} + +fn next_depth_states( + previous_visited: RedBlackTreeSet<(i32, i32)>, + programs: Vector<((i32, i32), IntcodeProgram)>, +) -> ( + RedBlackTreeSet<(i32, i32)>, + Vector<((i32, i32), IntcodeProgram)>, +) { + ( + programs + .iter() + .fold(previous_visited, |acc, (next, _)| acc.insert(*next)), + dedup_locations(programs), + ) +} + +fn dedup_locations( + programs: Vector<((i32, i32), IntcodeProgram)>, +) -> Vector<((i32, i32), IntcodeProgram)> { + programs.iter().fold(Vector::new(), |acc, next| { + if acc.iter().any(|(loc, _)| *loc == next.0) { + acc + } else { + acc.push_back(next.clone()) + } + }) +} diff --git a/2019/src/bin/day_16.rs b/2019/src/bin/day_16.rs new file mode 100644 index 0000000..aa53127 --- /dev/null +++ b/2019/src/bin/day_16.rs @@ -0,0 +1,112 @@ +use rayon::prelude::*; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::num::ParseIntError; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 16: Flawed Frequency Transmission")] +/// Performs the flawed frequency transform of a number. +/// +/// See https://adventofcode.com/2019/day/16 for details. +struct Opt { + /// the offset after which you start reading output + #[structopt(short = "o", long = "offset", default_value = "0")] + offset: usize, + input_repeats: usize, + fft_repeats: usize, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + stdin + .lock() + .lines() + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(parse(&x), "Input was not a valid recipe")) + .for_each(|input| { + println!( + "{}", + transform(input, opt.input_repeats, opt.fft_repeats, opt.offset) + .into_iter() + .map(|c| c.to_string()) + .collect::<String>() + ); + }); +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +fn parse(s: &str) -> Result<Vec<i32>, ParseIntError> { + s.chars().map(|c| c.to_string().parse::<i32>()).collect() +} + +fn transform(input: Vec<i32>, input_repeats: usize, fft_repeats: usize, offset: usize) -> Vec<i32> { + iter::successors( + Some( + input + .iter() + .cycle() + .take(input.len() * input_repeats) + .cloned() + .collect::<Vec<i32>>(), + ), + |input| Some(next_phase(input, offset)), + ) + .nth(fft_repeats) + .unwrap() + .into_iter() + .skip(offset) + .take(8) + .collect() +} + +fn next_phase(input: &Vec<i32>, offset: usize) -> Vec<i32> { + if offset > input.len() / 2 { + (0..input.len()) + .into_par_iter() + .map(|digit| { + if digit < offset { + 0 + } else { + input.iter().skip(digit).sum::<i32>().abs() % 10 + } + }) + .collect() + } else { + (0..input.len()) + .into_par_iter() + .map(|digit| { + input + .iter() + .zip(pattern(digit)) + .map(|(x, y)| x * y) + .sum::<i32>() + .abs() + % 10 + }) + .collect() + } +} + +fn pattern(digit: usize) -> impl Iterator<Item = i32> { + iter::repeat(0) + .take(digit + 1) + .chain(iter::repeat(1).take(digit + 1)) + .chain(iter::repeat(0).take(digit + 1)) + .chain(iter::repeat(-1).take(digit + 1)) + .cycle() + .skip(1) +} diff --git a/2019/src/bin/day_17.rs b/2019/src/bin/day_17.rs new file mode 100644 index 0000000..e85373c --- /dev/null +++ b/2019/src/bin/day_17.rs @@ -0,0 +1,78 @@ +use aoc2019::*; +use std::io; +use std::io::prelude::*; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 17: Set and Forget")] +/// Pilots a vacuum robot around on a scaffold. What could go wrong? +/// +/// See https://adventofcode.com/2019/day/17 for details. +struct Opt { + /// Draw the map and exit + #[structopt(short = "d")] + draw_map: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>(); + + let result = exit_on_failed_assertion( + if opt.draw_map { + program.execute() + } else { + // L,12,L,8,R,10,R,10,L,6,L,4,L,12,L,12,L,8,R,10,R,10,L,6,L,4,L,12,R,10,L,8,L,4,R,10,L,6,L,4,L,12,L,12,L,8,R,10,R,10,R,10,L,8,L,4,R,10,L,6,L,4,L,12,R,10,L,8,L,4,R,10 + // | | || + + let input = vec![ + "A,B,A,B,C,B,A,C,B,C\n", + "L,12,L,8,R,10,R,10\n", + "L,6,L,4,L,12\n", + "R,10,L,8,L,4,R,10\n", + "y\n", + ]; + program + .with_mem_0(Intcode::from(2)) + .with_input( + input + .iter() + .flat_map(|line| line.chars().map(|c| Intcode::from(c as u8))) + .collect(), + ) + .execute() + }, + "Program failed", + ); + + println!( + "{}", + result + .drop_last() + .unwrap() + .iter() + .flat_map(|c| c.to_signed_bytes_be()) + .map(|c| c as char) + .collect::<String>() + ); + println!("{}", result.last().unwrap()); +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} diff --git a/2019/src/bin/day_18.rs b/2019/src/bin/day_18.rs new file mode 100644 index 0000000..255baa0 --- /dev/null +++ b/2019/src/bin/day_18.rs @@ -0,0 +1,365 @@ +use rpds::rbt_set; +use rpds::vector::Vector; +use rpds::RedBlackTreeMap; +use rpds::RedBlackTreeSet; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::iter::FromIterator; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 18: Many-Worlds Interpretation")] +/// Finds the shortest path through a maze with keys +/// +/// See https://adventofcode.com/2019/day/18 for details. +struct Opt {} + +fn main() { + let stdin = io::stdin(); + let _opt = Opt::from_args(); + + let maze: Maze = stdin + .lock() + .lines() + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .collect(); + + println!("{}", maze.shortest_route()); +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +struct Maze { + blocks: Vec<Vec<char>>, + start: BoardState, + keys: KeySet, +} + +impl FromIterator<String> for Maze { + fn from_iter<T: IntoIterator<Item = String>>(iter: T) -> Self { + Maze::from_blocks( + iter.into_iter() + .map(|line| line.chars().collect()) + .collect(), + ) + } +} + +impl Maze { + fn from_blocks(blocks: Vec<Vec<char>>) -> Maze { + Maze { + start: BoardState { + robots: blocks + .iter() + .enumerate() + .flat_map(|(y, line)| { + line.iter() + .enumerate() + .filter(|(_x, ch)| **ch == '@') + .map(move |(x, _ch)| Location { x, y }) + }) + .collect(), + keys: KeySet::default(), + }, + keys: blocks + .iter() + .flat_map(|line| line.iter()) + .fold(KeySet::default(), |acc, next| acc.add_key(*next)), + blocks, + } + } + + fn block_at(&self, location: &Location) -> Option<char> { + self.blocks + .get(location.y) + .and_then(|line| line.get(location.x)) + .cloned() + } + + fn shortest_route(&self) -> usize { + iter::successors( + Some(( + ExploredStates::default().insert(&self.start), + rbt_set![self.start.clone()], + )), + |(explored, locations)| { + Some(Maze::next_depth_states( + explored.clone(), + self.next_locations(locations, explored), + )) + }, + ) + // .inspect(|(explored, states)| eprintln!("{:?}", states)) + .take_while(|(_explored, states)| states.size() > 0) + .enumerate() + .find(|(_i, (_explored, states))| states.iter().any(|state| state.keys == self.keys)) + .unwrap() + .0 + } + + fn next_depth_states( + explored: ExploredStates, + locations: RedBlackTreeSet<BoardState>, + ) -> (ExploredStates, RedBlackTreeSet<BoardState>) { + ( + locations + .iter() + .fold(explored, |acc, next| acc.insert(next)), + locations, + ) + } + + fn next_locations( + &self, + locations: &RedBlackTreeSet<BoardState>, + explored: &ExploredStates, + ) -> RedBlackTreeSet<BoardState> { + locations + .iter() + .flat_map(|current| { + (0..current.robots.len()).flat_map(move |i_robot| { + [(-1, 0), (1, 0), (0, -1), (0, 1)] + .iter() + .map(move |(dx, dy)| current.next(i_robot, *dx, *dy)) + .map(move |(state, new_location)| { + self.block_at(&new_location) + .map(|c| state.with_key(c)) + .unwrap_or(state) + }) + }) + }) + .filter(|state| self.is_open(state)) + .filter(|state| !explored.contains(state)) + .collect() + } + + fn is_open(&self, state: &BoardState) -> bool { + state.robots.iter().all(|location| { + self.block_at(location) + .map(|c| Maze::char_is_open(c, state.keys)) + .unwrap_or(false) + }) + } + + fn char_is_open(c: char, keys: KeySet) -> bool { + c != '#' && !keys.door_is_locked(c) + } +} + +#[derive(Default, Debug, Clone)] +struct ExploredStates { + for_key: RedBlackTreeMap<KeySet, ExploredStatesForKey>, +} + +#[derive(Default, Debug, Clone)] +struct ExploredStatesForKey { + robots: Vector<RedBlackTreeSet<Location>>, +} + +impl ExploredStates { + fn insert(&self, new: &BoardState) -> ExploredStates { + ExploredStates { + for_key: self.for_key.insert( + new.keys.clone(), + self.for_key + .get(&new.keys) + .map(|current| ExploredStatesForKey { + robots: current + .robots + .iter() + .zip(new.robots.iter()) + .map(|(current_explored, robot)| current_explored.insert(robot.clone())) + .collect(), + }) + .unwrap_or_else(|| ExploredStatesForKey { + robots: new + .robots + .iter() + .map(|robot| RedBlackTreeSet::new().insert(robot.clone())) + .collect(), + }), + ), + } + } + + fn contains(&self, state: &BoardState) -> bool { + self.for_key + .get(&state.keys) + .filter(|for_key| { + state + .robots + .iter() + .zip(for_key.robots.iter()) + .all(|(r_state, r_explored)| r_explored.contains(r_state)) + }) + .is_some() + } +} + +#[derive(Default, Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +struct BoardState { + robots: Vector<Location>, + keys: KeySet, +} + +impl BoardState { + fn next(&self, i_robot: usize, dx: isize, dy: isize) -> (BoardState, Location) { + ( + BoardState { + robots: self + .robots + .set(i_robot, self.robots[i_robot].next(dx, dy)) + .unwrap(), + ..self.clone() + }, + self.robots[i_robot].next(dx, dy), + ) + } + + fn with_key(&self, c: char) -> BoardState { + BoardState { + keys: self.keys.add_key(c), + ..self.clone() + } + } +} + +#[derive(Default, Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +struct Location { + x: usize, + y: usize, +} + +impl Location { + fn next(&self, dx: isize, dy: isize) -> Location { + Location { + x: (self.x as isize + dx) as usize, + y: (self.y as isize + dy) as usize, + } + } +} + +#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +struct KeySet { + bitset: u32, +} + +impl KeySet { + fn add_key(self, key: char) -> KeySet { + KeySet { + bitset: self.bitset | KeySet::key_to_bitset(key), + } + } + + fn door_is_locked(self, door: char) -> bool { + KeySet::door_to_bitset(door) & (!self.bitset) > 0 + } + + fn key_to_bitset(key: char) -> u32 { + if key.is_ascii_alphabetic() && key.is_ascii_lowercase() { + 1 << (key as u8 - b'a') + } else { + 0 + } + } + + fn door_to_bitset(door: char) -> u32 { + if door.is_ascii_alphabetic() && door.is_ascii_uppercase() { + 1 << (door as u8 - b'A') + } else { + 0 + } + } +} + +#[test] +fn doors_are_locked_without_key() { + assert_eq!(true, KeySet::default().door_is_locked('A')) +} + +#[test] +fn doors_are_unlocked_with_key() { + assert_eq!(false, KeySet::default().add_key('a').door_is_locked('A')) +} + +#[test] +fn example_1() { + let maze: Maze = r" +######### +#b.A.@.a# +######### +" + .split('\n') + .map(|s| s.to_string()) + .collect(); + + assert_eq!(maze.shortest_route(), 8); +} + +#[test] +fn example_2() { + let maze: Maze = r" +################# +#i.G..c...e..H.p# +########.######## +#j.A..b...f..D.o# +########@######## +#k.E..a...g..B.n# +########.######## +#l.F..d...h..C.m# +################# +" + .split('\n') + .map(|s| s.to_string()) + .collect(); + + assert_eq!(maze.shortest_route(), 136); +} + +#[test] +fn example_3() { + let maze: Maze = r" +############# +#DcBa.#.GhKl# +#.###@#@#I### +#e#d#####j#k# +###C#@#@###J# +#fEbA.#.FgHi# +############# +" + .split('\n') + .map(|s| s.to_string()) + .collect(); + + assert_eq!(maze.shortest_route(), 32); +} + +#[test] +fn example_4() { + let maze: Maze = r" +############# +#g#f.D#..h#l# +#F###e#E###.# +#dCba@#@BcIJ# +############# +#nK.L@#@G...# +#M###N#H###.# +#o#m..#i#jk.# +############# +" + .split('\n') + .map(|s| s.to_string()) + .collect(); + + assert_eq!(maze.shortest_route(), 74); +} diff --git a/2019/src/bin/day_19.rs b/2019/src/bin/day_19.rs new file mode 100644 index 0000000..73c8374 --- /dev/null +++ b/2019/src/bin/day_19.rs @@ -0,0 +1,102 @@ +use aoc2019::*; +use cached::cached_key; +use cached::UnboundCache; +use rpds::list; +use rpds::list::List; +use rpds::vector; +use std::io; +use std::io::prelude::*; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 19: Tractor Beam")] +/// Finds the effective area of a tractor beam in an n x n square, and +/// how far away you need to be to capture Santa's ship. +/// +/// See https://adventofcode.com/2019/day/19 for details. +struct Opt { + /// The size for a diagnostics scan. + #[structopt(long = "diagnostics-size")] + diagnostics_size: Option<usize>, + /// The size of Santa's ship + #[structopt(long = "ship-size")] + ship_size: Option<usize>, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>(); + + if let Some(size) = opt.diagnostics_size { + println!("{}", count_active_in_area(program.clone(), 0, 0, size)); + } + if let Some(size) = opt.ship_size { + println!("{:?}", find_closest_ship_space(program, size)) + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +fn count_active_in_area(program: IntcodeProgram, left: usize, top: usize, size: usize) -> usize { + (left..left + size) + .flat_map(|x| (top..top + size).map(move |y| (x, y))) + .filter(|(x, y)| tractor_beam_is_active(program.clone(), *x, *y)) + .count() +} + +fn area_is_all_full(program: IntcodeProgram, left: usize, top: usize, size: usize) -> bool { + // This check with a grid that's aligned to 10 gives an early exit + // for most, that will have the program executions shared. This + // makes the memoized tractor function more effective at cutting + // down on execution, even though you need to do the whole lot + // again to verify if this passes. + (left..left + size) + .flat_map(|x| (top..top + size).map(move |y| (x, y))) + .filter(|(x, y)| x % 10 == 0 && y % 10 == 0) + .all(|(x, y)| tractor_beam_is_active(program.clone(), x, y)) + && (left..left + size) + .flat_map(|x| (top..top + size).map(move |y| (x, y))) + .all(|(x, y)| tractor_beam_is_active(program.clone(), x, y)) +} + +fn find_closest_ship_space(program: IntcodeProgram, size: usize) -> (usize, usize) { + (0..) + .flat_map(|radius| { + (0..radius) + .flat_map(move |x| (0..radius).map(move |y| (x, y))) + .filter(move |(x, y)| { + (radius - 1) * (radius - 1) < x * x + y * y && x * x + y * y <= radius * radius + }) + }) + .find(|(x, y)| area_is_all_full(program.clone(), *x, *y, size)) + .unwrap() +} + +cached_key! { + TRACTOR_BEAM_IS_ACTIVE: UnboundCache<(usize, usize), bool> = UnboundCache::new(); + Key = { (x, y) }; + fn tractor_beam_is_active(program: IntcodeProgram, x: usize, y: usize) -> bool = { + program + .with_input(list![Intcode::from(x), Intcode::from(y)]) + .execute() + == Ok(vector![Intcode::from(1)]) + + } +} diff --git a/2019/src/bin/day_2.rs b/2019/src/bin/day_2.rs new file mode 100644 index 0000000..ba9e189 --- /dev/null +++ b/2019/src/bin/day_2.rs @@ -0,0 +1,96 @@ +use aoc2019::*; +use std::io; +use std::io::prelude::*; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 2: 1202 Program Alarm")] +/// Executes an Intcode program +/// +/// The program is read from stdin as a series of comma-separated +/// values. Newlines are ignored. When the program halts, the value at +/// position 0 is returned. +/// +/// If an output is provided, all possible inputs are tried to find +/// the input that results in the desired output. In this case, the +/// inputs are returned in the format (noun, verb). +/// +///See https://adventofcode.com/2019/day/2 for details. +struct Opt { + #[structopt(short = "n", long = "noun")] + noun: Option<Intcode>, + #[structopt(short = "v", long = "verb")] + verb: Option<Intcode>, + #[structopt(short = "o", long = "output")] + output: Option<Intcode>, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect(); + + match (opt.noun, opt.verb, opt.output) { + (Some(noun), Some(verb), _) => { + let result = exit_on_failed_assertion( + program + .with_noun_verb_input(noun, verb) + .execute_returning_memory_0(), + "Program errored", + ); + println!("{}", result); + } + (_, _, Some(output)) => { + let (noun, verb) = + exit_on_failed_assertion(find_input(&program, output), "Program errored"); + println!("({}, {})", noun, verb); + } + (None, None, None) => { + let result = + exit_on_failed_assertion(program.execute_returning_memory_0(), "Program errored"); + println!("{}", result); + } + _ => { + eprintln!("Either a noun and verb or an expected output must be provided"); + process::exit(1); + } + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +fn find_input( + program: &IntcodeProgram, + output: Intcode, +) -> Result<(Intcode, Intcode), IntcodeProgramError> { + (0..99) + .flat_map(|noun| (0..99).map(move |verb| (Intcode::from(noun), Intcode::from(verb)))) + .map(|(noun, verb)| { + ( + noun.clone(), + verb.clone(), + program + .with_noun_verb_input(noun, verb) + .execute_returning_memory_0(), + ) + }) + .find(|(_noun, _verb, out)| *out == Ok(output.clone())) + .map(|(noun, verb, _out)| Ok((noun, verb))) + .unwrap_or(Err(IntcodeProgramError::Unknown)) +} diff --git a/2019/src/bin/day_20.rs b/2019/src/bin/day_20.rs new file mode 100644 index 0000000..953df75 --- /dev/null +++ b/2019/src/bin/day_20.rs @@ -0,0 +1,310 @@ +use rpds::rbt_set; +use rpds::vector::Vector; +use rpds::RedBlackTreeMap; +use rpds::RedBlackTreeSet; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::iter::FromIterator; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 20: Donut Maze")] +/// Finds the shortest path through a maze with portals. +/// +/// See https://adventofcode.com/2019/day/20 for details. +struct Opt { + /// include the rule that going through portals changes your depth + #[structopt(short = "d")] + include_depth: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let maze = stdin + .lock() + .lines() + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .collect::<MazeBuilder>() + .build(); + + println!("{}", maze.shortest_route(opt.include_depth)); +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +struct MazeBuilder { + map: Vector<Vector<char>>, +} + +impl FromIterator<String> for MazeBuilder { + fn from_iter<T: IntoIterator<Item = String>>(iter: T) -> Self { + MazeBuilder { + map: iter + .into_iter() + .map(|line| line.chars().collect()) + .collect(), + } + } +} + +impl MazeBuilder { + fn build(self) -> Maze { + Maze { + walls: self + .map + .iter() + .map(|line| line.iter().map(|ch| *ch != '.').collect()) + .collect(), + portals: self.grouped_portals(), + entrance: self + .all_portals() + .find(|(id, _)| *id == ['A', 'A']) + .unwrap() + .1, + exit: self + .all_portals() + .find(|(id, _)| *id == ['Z', 'Z']) + .unwrap() + .1, + } + } + + fn grouped_portals(&self) -> Vector<(Point, Point)> { + self.all_portals() + .fold( + (Vector::new(), RedBlackTreeMap::new()), + |(matched, unmatched): ( + Vector<(Point, Point)>, + RedBlackTreeMap<[char; 2], Point>, + ), + (next_id, next_p)| match unmatched.get(&next_id) { + Some(pair) => ( + matched.push_back(pair.clone().inside_out( + next_p, + self.map[0].len(), + self.map.len(), + )), + unmatched.remove(&next_id), + ), + None => (matched, unmatched.insert(next_id, next_p)), + }, + ) + .0 + } + + fn all_portals(&self) -> impl Iterator<Item = ([char; 2], Point)> + '_ { + self.horizontal_trailing_portals() + .chain(self.horizontal_leading_portals()) + .chain(self.vertical_trailing_portals()) + .chain(self.vertical_leading_portals()) + } + + fn horizontal_trailing_portals(&self) -> impl Iterator<Item = ([char; 2], Point)> + '_ { + // .XX + (0..self.map.len()) + .flat_map(move |y| (0..self.map[y].len() - 2).map(move |x| Point { x, y })) + .filter(move |p| { + self.map[p.y][p.x] == '.' + && self.map[p.y][p.x + 1].is_alphabetic() + && self.map[p.y][p.x + 2].is_alphabetic() + }) + .map(move |p| ([self.map[p.y][p.x + 1], self.map[p.y][p.x + 2]], p)) + } + + fn horizontal_leading_portals(&self) -> impl Iterator<Item = ([char; 2], Point)> + '_ { + // XX. + (0..self.map.len()) + .flat_map(move |y| (0..self.map[y].len() - 2).map(move |x| Point { x, y })) + .filter(move |p| { + self.map[p.y][p.x + 2] == '.' + && self.map[p.y][p.x + 1].is_alphabetic() + && self.map[p.y][p.x].is_alphabetic() + }) + .map(move |p| { + ( + [self.map[p.y][p.x], self.map[p.y][p.x + 1]], + Point { x: p.x + 2, y: p.y }, + ) + }) + } + + fn vertical_trailing_portals(&self) -> impl Iterator<Item = ([char; 2], Point)> + '_ { + // .XX + (0..self.map[0].len()) + .flat_map(move |x| (0..self.map.len() - 2).map(move |y| Point { x, y })) + .filter(move |p| { + self.map[p.y][p.x] == '.' + && self.map[p.y + 1][p.x].is_alphabetic() + && self.map[p.y + 2][p.x].is_alphabetic() + }) + .map(move |p| ([self.map[p.y + 1][p.x], self.map[p.y + 2][p.x]], p)) + } + + fn vertical_leading_portals(&self) -> impl Iterator<Item = ([char; 2], Point)> + '_ { + // XX. + (0..self.map[0].len()) + .flat_map(move |x| (0..self.map.len() - 2).map(move |y| Point { x, y })) + .filter(move |p| { + self.map[p.y + 2][p.x] == '.' + && self.map[p.y + 1][p.x].is_alphabetic() + && self.map[p.y][p.x].is_alphabetic() + }) + .map(move |p| { + ( + [self.map[p.y][p.x], self.map[p.y + 1][p.x]], + Point { x: p.x, y: p.y + 2 }, + ) + }) + } +} + +#[derive(Debug)] +struct Maze { + walls: Vector<Vector<bool>>, + portals: Vector<(Point, Point)>, + entrance: Point, // AA + exit: Point, // ZZ +} + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +struct Point { + x: usize, + y: usize, +} + +impl Point { + fn add(&self, x: isize, y: isize) -> Point { + Point { + x: (self.x as isize + x) as usize, + y: (self.y as isize + y) as usize, + } + } + + fn inside_out(self, other: Point, width: usize, height: usize) -> (Point, Point) { + if self.closest_side(width, height) > other.closest_side(width, height) { + (self, other) + } else { + (other, self) + } + } + + fn closest_side(&self, width: usize, height: usize) -> usize { + self.x.min(width - self.x).min(self.y).min(height - self.y) + } +} + +impl Maze { + fn shortest_route(&self, include_depth: bool) -> usize { + iter::successors( + Some(( + rbt_set![(self.entrance.clone(), 0)], + rbt_set![(self.entrance.clone(), 0)], + )), + |(explored, locations)| { + Some(Maze::next_depth_states( + explored.clone(), + self.next_locations(locations, explored, include_depth), + )) + }, + ) + // .inspect(|(explored, states)| eprintln!("{:?}", states)) + .take_while(|(_explored, states)| states.size() > 0) + .enumerate() + .find(|(_i, (_explored, states))| { + states + .iter() + .any(|(p_state, depth)| *p_state == self.exit && (!include_depth || *depth == 0)) + }) + .unwrap() + .0 + } + + fn next_depth_states( + explored: RedBlackTreeSet<(Point, isize)>, + locations: RedBlackTreeSet<(Point, isize)>, + ) -> ( + RedBlackTreeSet<(Point, isize)>, + RedBlackTreeSet<(Point, isize)>, + ) { + ( + locations + .iter() + .fold(explored, |acc, next| acc.insert(next.clone())), + locations, + ) + } + + fn next_locations( + &self, + locations: &RedBlackTreeSet<(Point, isize)>, + explored: &RedBlackTreeSet<(Point, isize)>, + include_depth: bool, + ) -> RedBlackTreeSet<(Point, isize)> { + locations + .iter() + .flat_map(|(p, depth)| { + [(-1, 0), (1, 0), (0, -1), (0, 1)] + .iter() + .map(move |(dx, dy)| (p.add(*dx, *dy), *depth)) + .chain( + self.portals + .iter() + .filter(move |(from, _to)| p == from) + .map(move |(_from, to)| (to.clone(), depth + 1)), + ) + .chain( + self.portals + .iter() + .filter(move |(_to, from)| p == from) + .map(move |(to, _from)| (to.clone(), depth - 1)), + ) + }) + .filter(|(p_next, depth)| { + !self.walls[p_next.y][p_next.x] && (!include_depth || *depth >= 0) + }) + .filter(|state| !explored.contains(state)) + .collect() + } +} + +#[test] +fn portal_maze_example_1() { + let maze: Maze = r" A + A + #######.######### + #######.........# + #######.#######.# + #######.#######.# + #######.#######.# + ##### B ###.# +BC...## C ###.# + ##.## ###.# + ##...DE F ###.# + ##### G ###.# + #########.#####.# +DE..#######...###.# + #.#########.###.# +FG..#########.....# + ###########.##### + Z + Z " + .split('\n') + .map(|s| s.to_string()) + .collect::<MazeBuilder>() + .build(); + + assert_eq!(maze.shortest_route(false), 23); + assert_eq!(maze.shortest_route(true), 26); +} diff --git a/2019/src/bin/day_21.rs b/2019/src/bin/day_21.rs new file mode 100644 index 0000000..7fa781c --- /dev/null +++ b/2019/src/bin/day_21.rs @@ -0,0 +1,109 @@ +use aoc2019::*; +use std::io; +use std::io::prelude::*; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 21: Springdroid Adventure")] +/// Pilots a springdroid around! +/// +/// See https://adventofcode.com/2019/day/21 for details. +struct Opt {} + +fn main() { + let stdin = io::stdin(); + let _opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>(); + + let walk_result = exit_on_failed_assertion( + { + let input = vec![ + "NOT T T\n", + "AND A T\n", + "AND B T\n", + "AND C T\n", + "NOT T J\n", + "AND D J\n", + "WALK\n", + ]; + program + .with_input( + input + .iter() + .flat_map(|line| line.chars().map(|c| Intcode::from(c as u8))) + .collect(), + ) + .execute() + }, + "Program failed", + ); + + println!( + "{}", + walk_result + .drop_last() + .unwrap() + .iter() + .flat_map(|c| c.to_signed_bytes_be()) + .map(|c| c as char) + .collect::<String>() + ); + println!("{}", walk_result.last().unwrap()); + + let run_result = exit_on_failed_assertion( + { + // (!A || !B || !C) && D && (E || H) + let input = vec![ + "OR E J\n", + "OR H J\n", + "AND D J\n", + "NOT T T\n", + "AND A T\n", + "AND B T\n", + "AND C T\n", + "NOT T T\n", + "AND T J\n", + "RUN\n", + ]; + program + .with_input( + input + .iter() + .flat_map(|line| line.chars().map(|c| Intcode::from(c as u8))) + .collect(), + ) + .execute() + }, + "Program failed", + ); + + println!( + "{}", + run_result + .drop_last() + .unwrap() + .iter() + .flat_map(|c| c.to_signed_bytes_be()) + .map(|c| c as char) + .collect::<String>() + ); + println!("{}", run_result.last().unwrap()); +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} diff --git a/2019/src/bin/day_22.rs b/2019/src/bin/day_22.rs new file mode 100644 index 0000000..5b999a6 --- /dev/null +++ b/2019/src/bin/day_22.rs @@ -0,0 +1,325 @@ +use derive_more::Display; +use num::bigint::BigInt; +use num::traits::identities::Zero; +use num::traits::sign::abs; +use num::traits::Signed; +use std::fmt; +use std::io; +use std::io::prelude::*; +use std::process; +use std::str::FromStr; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 22: Slam Shuffle")] +/// Shuffles some cards. +/// +/// See https://adventofcode.com/2019/day/22 for details. +struct Opt { + /// The size of the deck + deck_size: BigInt, + /// At the end, query the position of card + card: BigInt, + /// Number of repetitions + repetitions: BigInt, + + /// Prints the card in position n, rather than the position of card n + #[structopt(short = "p")] + position_mode: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let instructions = stdin + .lock() + .lines() + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(x.parse::<Instruction>(), "Parse error")) + .collect::<Vec<Instruction>>(); + + //eprintln!("{:?}", instructions); + + if opt.position_mode { + println!( + "{}", + instructions + .iter() + .rev() + .fold( + StandardisedInstruction::identity(opt.deck_size.clone()), + |acc, next| acc.then(&(next.clone(), opt.deck_size.clone(), false).into()) + ) + .repeat(opt.repetitions) + .apply(opt.card.clone()) + ); + } else { + println!( + "{}", + instructions + .iter() + .fold( + StandardisedInstruction::identity(opt.deck_size.clone()), + |acc, next| { + eprintln!("{}", acc); + acc.then(&(next.clone(), opt.deck_size.clone(), true).into()) + } + ) + .repeat(opt.repetitions) + .apply(opt.card.clone()) + ); + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +fn mod_plus(a: BigInt, b: BigInt, modulus: BigInt) -> BigInt { + mod_normalize(a + b, modulus) +} + +fn mod_sub(a: BigInt, b: BigInt, modulus: BigInt) -> BigInt { + mod_normalize(a - b, modulus) +} + +fn mod_times(a: BigInt, b: BigInt, modulus: BigInt) -> BigInt { + mod_normalize(a * b, modulus) +} + +fn mod_divide(a: BigInt, b: BigInt, modulus: BigInt) -> BigInt { + mod_times(a, mod_inverse(b, modulus.clone()), modulus) +} + +fn mod_pow(a: BigInt, b: BigInt, modulus: BigInt) -> BigInt { + a.modpow(&b, &modulus) +} + +fn mod_normalize(a: BigInt, modulus: BigInt) -> BigInt { + if a.is_negative() { + a.clone() + modulus.clone() * (1 + abs(a) / modulus) + } else { + a % modulus + } +} + +// NB: This may give nonsense if modulus isn't coprime with a +fn mod_inverse(a: BigInt, modulus: BigInt) -> BigInt { + mod_normalize(euclid_gcd_coefficients(a, modulus.clone()).0, modulus) +} + +fn euclid_gcd_coefficients(a: BigInt, b: BigInt) -> (BigInt, BigInt) { + fn euclid_gcd_coefficients_inner( + r: BigInt, + old_r: BigInt, + s: BigInt, + old_s: BigInt, + t: BigInt, + old_t: BigInt, + ) -> (BigInt, BigInt) { + if r.is_zero() { + (old_s, old_t) + } else { + euclid_gcd_coefficients_inner( + old_r.clone() - (old_r.clone() / r.clone()) * r.clone(), + r.clone(), + old_s - (old_r.clone() / r.clone()) * s.clone(), + s, + old_t - (old_r.clone() / r) * t.clone(), + t, + ) + } + } + + assert!(a < b); + + euclid_gcd_coefficients_inner(b, a, 0.into(), 1.into(), 1.into(), 0.into()) +} + +#[derive(Debug, Clone)] +enum Instruction { + DealIntoNewStack, + Cut(BigInt), + ReverseCut(BigInt), + DealWithIncrement(BigInt), +} + +impl FromStr for Instruction { + type Err = ParseErr; + fn from_str(s: &str) -> Result<Self, Self::Err> { + if s.starts_with("deal into new stack") { + Ok(Instruction::DealIntoNewStack) + } else if s.starts_with("cut -") { + s.split(' ') + .nth(1) + .map(|val| { + val.parse::<BigInt>() + .map_err(|_| ParseErr) + .map(|parsed| Instruction::ReverseCut(abs(parsed))) + }) + .unwrap_or(Err(ParseErr)) + } else if s.starts_with("cut") { + s.split(' ') + .nth(1) + .map(|val| { + val.parse::<BigInt>() + .map_err(|_| ParseErr) + .map(|parsed| Instruction::Cut(parsed)) + }) + .unwrap_or(Err(ParseErr)) + } else if s.starts_with("deal with increment") { + s.split(' ') + .nth(3) + .map(|val| { + val.parse::<BigInt>() + .map_err(|_| ParseErr) + .map(|parsed| Instruction::DealWithIncrement(parsed)) + }) + .unwrap_or(Err(ParseErr)) + } else { + Err(ParseErr) + } + } +} + +// f(x) = ax + b mod c +#[derive(Display, Clone)] +#[display(fmt = "f(x) = {} x + {} % {}", a, b, modulus)] +struct StandardisedInstruction { + a: BigInt, + b: BigInt, + modulus: BigInt, +} + +impl From<(Instruction, BigInt, bool)> for StandardisedInstruction { + fn from((instruction, modulus, forward): (Instruction, BigInt, bool)) -> Self { + match (instruction, forward) { + (Instruction::DealIntoNewStack, _) => StandardisedInstruction { + a: BigInt::from(-1), + b: BigInt::from(-1), + modulus: modulus, + }, + (Instruction::Cut(n), true) => StandardisedInstruction { + a: BigInt::from(1), + b: BigInt::from(-n), + modulus: modulus, + }, + (Instruction::Cut(n), false) => StandardisedInstruction { + a: BigInt::from(1), + b: BigInt::from(n), + modulus: modulus, + }, + (Instruction::ReverseCut(n), true) => StandardisedInstruction { + a: BigInt::from(1), + b: BigInt::from(n), + modulus: modulus, + }, + (Instruction::ReverseCut(n), false) => StandardisedInstruction { + a: BigInt::from(1), + b: BigInt::from(-n), + modulus: modulus, + }, + (Instruction::DealWithIncrement(n), true) => StandardisedInstruction { + a: BigInt::from(n), + b: BigInt::from(0), + modulus: modulus, + }, + (Instruction::DealWithIncrement(n), false) => StandardisedInstruction { + a: BigInt::from(mod_inverse(n, modulus.clone())), + b: BigInt::from(0), + modulus: modulus, + }, + } + .normalise() + } +} + +impl StandardisedInstruction { + fn identity(modulus: BigInt) -> StandardisedInstruction { + StandardisedInstruction { + a: BigInt::from(1), + b: BigInt::from(0), + modulus, + } + } + fn normalise(&self) -> StandardisedInstruction { + StandardisedInstruction { + a: mod_normalize(self.a.clone(), self.modulus.clone()), + b: mod_normalize(self.b.clone(), self.modulus.clone()), + modulus: self.modulus.clone(), + } + } + fn then(&self, other: &StandardisedInstruction) -> StandardisedInstruction { + // g(f(x)) = ga (fa x + fb) + gb = + StandardisedInstruction { + a: mod_times(self.a.clone(), other.a.clone(), self.modulus.clone()), + b: mod_plus( + mod_times(self.b.clone(), other.a.clone(), self.modulus.clone()), + other.b.clone(), + self.modulus.clone(), + ), + modulus: self.modulus.clone(), + } + } + fn repeat(&self, repetitions: BigInt) -> StandardisedInstruction { + StandardisedInstruction { + a: mod_pow(self.a.clone(), repetitions.clone(), self.modulus.clone()), + b: mod_divide( + mod_times( + self.b.clone(), + mod_sub( + BigInt::from(1), + mod_pow(self.a.clone(), repetitions.clone(), self.modulus.clone()), + self.modulus.clone(), + ), + self.modulus.clone(), + ), + mod_sub(BigInt::from(1), self.a.clone(), self.modulus.clone()), + self.modulus.clone(), + ), + modulus: self.modulus.clone(), + } + } + + fn apply(&self, x: BigInt) -> BigInt { + mod_plus( + mod_times(self.a.clone(), x, self.modulus.clone()), + self.b.clone(), + self.modulus.clone(), + ) + } +} + +#[derive(Debug, Clone, Copy)] +struct ParseErr; + +impl fmt::Display for ParseErr { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "Error parsing input") + } +} + +impl std::error::Error for ParseErr {} + +#[test] +fn mod_inverse_of_13() { + assert_eq!(mod_inverse(1.into(), 13.into()), 1.into()); + assert_eq!(mod_inverse(2.into(), 13.into()), 7.into()); + assert_eq!(mod_inverse(3.into(), 13.into()), 9.into()); + assert_eq!(mod_inverse(4.into(), 13.into()), 10.into()); + assert_eq!(mod_inverse(5.into(), 13.into()), 8.into()); + assert_eq!(mod_inverse(6.into(), 13.into()), 11.into()); + assert_eq!(mod_inverse(7.into(), 13.into()), 2.into()); + assert_eq!(mod_inverse(8.into(), 13.into()), 5.into()); + assert_eq!(mod_inverse(9.into(), 13.into()), 3.into()); + assert_eq!(mod_inverse(10.into(), 13.into()), 4.into()); + assert_eq!(mod_inverse(11.into(), 13.into()), 6.into()); + assert_eq!(mod_inverse(12.into(), 13.into()), 12.into()); +} diff --git a/2019/src/bin/day_23.rs b/2019/src/bin/day_23.rs new file mode 100644 index 0000000..e074cf4 --- /dev/null +++ b/2019/src/bin/day_23.rs @@ -0,0 +1,211 @@ +use aoc2019::*; +use rpds::list; +use rpds::list::List; +use rpds::vector::Vector; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 23: Category Six")] +/// Executes an Intcode program on a network of computers +/// +/// See https://adventofcode.com/2019/day/23 for details. +struct Opt { + #[structopt(short = "n", long = "network-size")] + network_size: usize, + #[structopt(long = "nat")] + send_nat: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>(); + + let network = Network::new(program, opt.network_size); + + if opt.send_nat { + println!("{}", network.first_repeated_nat_packet().y); + } else { + println!("{}", network.first_nat_packet().y); + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +#[derive(Debug, Clone)] +struct Network { + computers: Vector<IntcodeProgram>, + nat: Option<Packet>, + is_potentially_idle: bool, + is_idle: bool, +} + +impl Network { + fn new(program: IntcodeProgram, network_size: usize) -> Network { + Network { + computers: (0..network_size) + .map(|ip| program.with_input(list![ip.into(), Intcode::from(-1)])) + .collect(), + nat: None, + is_potentially_idle: false, + is_idle: false, + } + } + + fn first_nat_packet(&self) -> Packet { + iter::successors(Some(self.clone()), |network| Some(network.next())) + .filter_map(|network| network.nat) + .next() + .unwrap() + } + + fn first_repeated_nat_packet(&self) -> Packet { + self.sent_nat_packets() + .zip(self.sent_nat_packets().skip(1)) + // .inspect(|(nat, _p2)| eprintln!("{}", nat.y)) + .find(|(p1, p2)| p1.y == p2.y) + .unwrap() + .0 + } + + fn sent_nat_packets<'a>(&'a self) -> impl Iterator<Item = Packet> + 'a { + iter::successors(Some(self.clone()), |network| { + Some(network.with_nat_packet_sent().run_to_network_idle()) + }) + .filter_map(|network| network.nat) + } + + fn run_to_network_idle(&self) -> Network { + iter::successors(Some(self.clone()), |network| Some(network.next())) + .find(|network| network.is_idle) + .unwrap() + } + + fn with_nat_packet_sent(&self) -> Network { + if self.nat.is_some() { + Network { + computers: self + .computers + .iter() + .enumerate() + .map(|(ip, computer)| { + computer + .with_additional_input( + self.nat + .iter() + .filter(|packet| packet.dest == Intcode::from(ip)) + .flat_map(|packet| vec![packet.x.clone(), packet.y.clone()]) + .collect(), + ) + .run_to_termination_or_input() + }) + .collect(), + nat: self.nat.clone(), + is_potentially_idle: false, + is_idle: false, + } + } else { + self.clone() + } + } + + fn next(&self) -> Network { + Network { + computers: self + .computers + .iter() + .enumerate() + .map(|(ip, computer)| { + computer + .with_cleared_output() + .with_additional_input(if self.empty_queues() { + list![Intcode::from(-1)] + } else { + list![] + }) + .with_additional_input( + self.pending_packets() + .filter(|packet| packet.dest == Intcode::from(ip)) + .flat_map(|packet| vec![packet.x, packet.y]) + .collect(), + ) + .run_to_termination_or_input() + }) + .collect(), + nat: self + .pending_packets() + .filter(|packet| packet.is_nat()) + .map(|packet| packet.with_dest(0.into())) + .last() + .or_else(|| self.nat.clone()), + is_potentially_idle: self.empty_queues(), + is_idle: self.is_potentially_idle && self.empty_queues(), + } + } + + fn pending_packets<'a>(&'a self) -> impl Iterator<Item = Packet> + 'a { + self.computers.iter().flat_map(|computer| { + computer + .output + .iter() + .cloned() + .collect::<Vec<Intcode>>() + .chunks_exact(3) + .map(|packet| Packet { + dest: packet[0].clone(), + x: packet[1].clone(), + y: packet[2].clone(), + }) + .collect::<Vec<Packet>>() + }) + } + + fn pending_input<'a>(&'a self) -> impl Iterator<Item = Intcode> + 'a { + self.computers + .iter() + .flat_map(|computer| computer.input.iter().cloned().collect::<Vec<Intcode>>()) + } + + fn empty_queues(&self) -> bool { + self.pending_packets().count() == 0 && self.pending_input().count() == 0 + } +} + +#[derive(Debug, Clone)] +struct Packet { + dest: Intcode, + x: Intcode, + y: Intcode, +} + +impl Packet { + fn is_nat(&self) -> bool { + self.dest == 255.into() + } + + fn with_dest(&self, dest: Intcode) -> Packet { + Packet { + dest, + ..self.clone() + } + } +} diff --git a/2019/src/bin/day_24.rs b/2019/src/bin/day_24.rs new file mode 100644 index 0000000..ebc6a1b --- /dev/null +++ b/2019/src/bin/day_24.rs @@ -0,0 +1,239 @@ +use rpds::RedBlackTreeSet; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::iter::FromIterator; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 24: Planet of Discord")] +/// Simulates the life and death of Eris bugs +/// +/// See https://adventofcode.com/2019/day/24 for details. +struct Opt { + /// How many iterations of the game of life should be run + /// If not provided, runs until a state appears twice. + #[structopt(short = "n")] + depth: Option<usize>, + /// Interprets the map as being one part of an infinite fractal map + #[structopt(short = "f")] + fractal: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let initial_state: State = stdin + .lock() + .lines() + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .collect::<State>() + .with_fractal_mode(opt.fractal); + + let final_state = match opt.depth { + Some(depth) => initial_state.n_steps_forward(depth), + None => initial_state.first_repeated_state(), + }; + + println!("Bugs: {}", final_state.alive.size()); + println!("Biodiversity: {}", final_state.biodiversity_rating()); +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +struct State { + alive: RedBlackTreeSet<Coordinate>, + fractal_mode: bool, +} + +impl FromIterator<String> for State { + fn from_iter<T: IntoIterator<Item = String>>(iter: T) -> Self { + State { + alive: iter + .into_iter() + .enumerate() + .flat_map(move |(y, line)| { + line.chars() + .enumerate() + .filter(move |(_x, c)| *c == '#') + .map(move |(x, _c)| Coordinate { + x: x as isize, + y: y as isize, + depth: 0, + }) + .collect::<Vec<Coordinate>>() + }) + .collect(), + fractal_mode: false, + } + } +} + +impl State { + fn with_fractal_mode(&self, fractal_mode: bool) -> State { + State { + fractal_mode, + ..self.clone() + } + } + + fn n_steps_forward(&self, n: usize) -> Self { + iter::successors(Some(self.clone()), |state| Some(state.next())) + .nth(n) + .unwrap() + } + + fn first_repeated_state(&self) -> State { + iter::successors( + Some((RedBlackTreeSet::new(), self.clone())), + |(seen, state)| Some((seen.insert(state.clone()), state.next())), + ) + .find(|(seen, state)| seen.contains(state)) + .unwrap() + .1 + } + + fn next(&self) -> State { + State { + alive: self + .still_alive_next_round() + .chain(self.comes_alive_next_round()) + .collect(), + ..self.clone() + } + } + + fn biodiversity_rating(&self) -> usize { + self.alive + .iter() + .map(|coord| 2_usize.pow((coord.y * 5 + coord.x) as u32)) + .sum() + } + + fn still_alive_next_round<'a>(&'a self) -> impl Iterator<Item = Coordinate> + 'a { + self.alive + .iter() + .filter(move |coord| self.count_alive_neighbours(**coord) == 1) + .cloned() + } + + fn comes_alive_next_round<'a>(&'a self) -> impl Iterator<Item = Coordinate> + 'a { + self.alive + .iter() + .flat_map(move |coord| self.neighbours(*coord)) + .filter(move |coord| !self.alive.contains(coord)) + .filter(move |coord| { + self.count_alive_neighbours(*coord) == 1 || self.count_alive_neighbours(*coord) == 2 + }) + } + + fn count_alive_neighbours(&self, coordinate: Coordinate) -> usize { + self.neighbours(coordinate) + .into_iter() + .filter(|coord| self.alive.contains(coord)) + .count() + } + + fn neighbours(&self, coordinate: Coordinate) -> Vec<Coordinate> { + if self.fractal_mode { + [(-1, 0), (1, 0), (0, -1), (0, 1)] + .into_iter() + .map(|(dx, dy)| Coordinate { + x: coordinate.x + dx, + y: coordinate.y + dy, + depth: coordinate.depth, + }) + .flat_map(move |coord| match (coord.x, coord.y) { + (x, _y) if x < 0 => vec![Coordinate { + x: 1, + y: 2, + depth: coord.depth - 1, + }] + .into_iter(), + (_x, y) if y < 0 => vec![Coordinate { + x: 2, + y: 1, + depth: coord.depth - 1, + }] + .into_iter(), + (x, _y) if x >= 5 => vec![Coordinate { + x: 3, + y: 2, + depth: coord.depth - 1, + }] + .into_iter(), + (_x, y) if y >= 5 => vec![Coordinate { + x: 2, + y: 3, + depth: coord.depth - 1, + }] + .into_iter(), + (2, 2) => match (coordinate.x, coordinate.y) { + (1, 2) => (0..5) + .map(|y| Coordinate { + x: 0, + y, + depth: coord.depth + 1, + }) + .collect::<Vec<_>>() + .into_iter(), + (2, 1) => (0..5) + .map(|x| Coordinate { + x, + y: 0, + depth: coord.depth + 1, + }) + .collect::<Vec<_>>() + .into_iter(), + (3, 2) => (0..5) + .map(|y| Coordinate { + x: 4, + y, + depth: coord.depth + 1, + }) + .collect::<Vec<_>>() + .into_iter(), + (2, 3) => (0..5) + .map(|x| Coordinate { + x, + y: 4, + depth: coord.depth + 1, + }) + .collect::<Vec<_>>() + .into_iter(), + (_, _) => vec![].into_iter(), + }, + _ => vec![coord.clone()].into_iter(), + }) + .collect() + } else { + [(-1, 0), (1, 0), (0, -1), (0, 1)] + .into_iter() + .map(|(dx, dy)| Coordinate { + x: coordinate.x + dx, + y: coordinate.y + dy, + depth: coordinate.depth, + }) + .filter(|coord| coord.x >= 0 && coord.x < 5 && coord.y >= 0 && coord.y < 5) + .collect() + } + } +} + +#[derive(Debug, Clone, Copy, PartialOrd, Ord, PartialEq, Eq)] +struct Coordinate { + x: isize, + y: isize, + depth: isize, +} diff --git a/2019/src/bin/day_25.dot b/2019/src/bin/day_25.dot new file mode 100644 index 0000000..58dc131 --- /dev/null +++ b/2019/src/bin/day_25.dot @@ -0,0 +1,43 @@ +digraph { + Breach [label="Hull Breach"] + Crew [label="Crew Quarters (antenna)"] + Hallway [label="Hallway (weather machine)"] + Storage [label="Storage (klein bottle)"] + Stables [label="Stables (spool of cat6)"] + Warp [label="Warp Drive Maintenance"] + Security [label="Security Checkpoint"] + Pressure [label="Pressure-Sensitive Floor"] + Gift [label="Gift Wrapping Center"] + Sick [label="Sick Bay (infinite loop X)"] + Chocolate [label="Hot Chocolate Fountain (giant electromagnet X)"] + Observatory [label="Observatory (cake)"] + Navigation [label="Navigation (escape pod XX)"] + Corridor [label="Corridor"] + Holodeck [label="Holodeck (molten lava X)"] + Science [label="Science Lab (tambourine)"] + Passages [label="Passages (shell)"] + Engineering [label="Engineering"] + Arcade [label="Arcade (photons X)"] + Kitchen [label="Kitchen (mug)"] + + + Breach -> Crew [label=East] + Breach -> Hallway [label=North] + Hallway -> Storage [label=North] + Storage -> Stables [label=East] + Stables -> Warp [label=South] + Warp -> Security [label=South] + Security -> Pressure [label=East] + Stables -> Gift [label=East] + Gift -> Sick [label=North] + Sick -> Chocolate [label=West] + Chocolate -> Observatory [label=North] + Chocolate -> Navigation [label=West] + Corridor -> Holodeck [label=North] + Holodeck -> Science [label=North] + Sick -> Corridor [label=East] + Corridor -> Passages [label=South] + Passages -> Engineering [label=East] + Engineering -> Arcade [label=South] + Gift -> Kitchen [label=South] +} diff --git a/2019/src/bin/day_25.rs b/2019/src/bin/day_25.rs new file mode 100644 index 0000000..522789e --- /dev/null +++ b/2019/src/bin/day_25.rs @@ -0,0 +1,110 @@ +use aoc2019::*; +use std::io; +use std::io::prelude::*; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 25: Cryostasis")] +/// Pilots a robot to save Santa! +/// +/// See https://adventofcode.com/2019/day/25 for details. +struct Opt {} + +fn main() { + let stdin = io::stdin(); + let _opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>(); + + let input = vec![ + "east", + "take antenna", + "west", + "north", + "take weather machine", + "north", + "take klein bottle", + "east", + "take spool of cat6", + "east", + "south", + "take mug", + "north", + "north", + "west", + "north", + "take cake", + "south", + "east", + "east", + "north", + "north", + "take tambourine", + "south", + "south", + "south", + "take shell", + "north", + "west", + "south", + "west", + "south", + "south", + "inv", + //"drop mug", + //"drop weather machine", + "drop cake", + "drop shell", + "drop klein bottle", + "drop tambourine", + //"drop antenna", + //"drop spool of cat6", + "east", + ]; + + let result = exit_on_failed_assertion( + program + .with_input( + input + .iter() + .flat_map(|line| { + line.chars() + .map(|c| Intcode::from(c as u8)) + .chain(vec![Intcode::from(10)].into_iter()) + }) + .collect(), + ) + .run_to_termination_or_input() + .output_into_result(), + "Program failed", + ); + + println!( + "{}", + result + .drop_last() + .unwrap() + .iter() + .flat_map(|c| c.to_signed_bytes_be()) + .map(|c| c as char) + .collect::<String>() + ); + println!("{}", result.last().unwrap()); +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} diff --git a/2019/src/bin/day_3.rs b/2019/src/bin/day_3.rs new file mode 100644 index 0000000..f4163bd --- /dev/null +++ b/2019/src/bin/day_3.rs @@ -0,0 +1,333 @@ +use rpds::vector::Vector; +use std::fmt; +use std::io; +use std::io::prelude::*; +use std::process; +use std::str::FromStr; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 3: Crossed Wires")] +/// Finds the closest intersection between two wires. By default, +/// 'closest' is defined as closest in terms of Manhattan distance. If +/// --signal-distance is set, distance is defined in terms of the +/// total distance along the wire. +/// +/// See https://adventofcode.com/2019/day/3 for details. +struct Opt { + #[structopt(short = "s", long = "signal-distance")] + /// returns the closest intersection by signal distance. + signal_distance: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let mut input = stdin + .lock() + .lines() + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(x.parse::<Wire>(), "Input was not a valid wire")); + + let (wire1, wire2) = match (input.next(), input.next()) { + (Some(w1), Some(w2)) => (w1, w2), + _ => { + eprintln!("Input must have two wires"); + process::exit(1); + } + }; + + match wire1.closest_collision(&wire2, opt.signal_distance) { + Some(c) => println!( + "{}", + if opt.signal_distance { + c.signal_distance + } else { + c.manhattan_distance() + } + ), + None => { + eprintln!("No collisions"); + process::exit(1); + } + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +#[derive(Debug, Clone)] +struct Wire { + segments: Vector<WireSegment>, +} + +impl FromStr for Wire { + type Err = UnknownError; + + fn from_str(s: &str) -> Result<Self, UnknownError> { + s.split(',') + .fold( + Ok(Vector::new()), + |acc: Result<Vector<WireSegment>, UnknownError>, next_str| { + acc.and_then(|previous_segments| { + WireSegment::from_str( + previous_segments.last().map(|l| l.end()).unwrap_or((0, 0)), + previous_segments + .last() + .map(|l| l.end_signal_distance()) + .unwrap_or(0), + next_str, + ) + .map(|seg| previous_segments.push_back(seg)) + }) + }, + ) + .map(|segments| Wire { segments }) + } +} + +impl Wire { + fn closest_collision(&self, other: &Wire, use_signal_distance: bool) -> Option<Collision> { + self.collisions(other).min_by_key(|c| { + if use_signal_distance { + c.signal_distance + } else { + c.manhattan_distance() + } + }) + } + + fn collisions<'a>(&'a self, other: &'a Wire) -> impl Iterator<Item = Collision> + 'a { + self.segments + .iter() + .flat_map(move |seg1| other.segments.iter().map(move |seg2| (seg1, seg2))) + .flat_map(|(seg1, seg2)| seg1.collisions(seg2)) + .filter(|c| !(c.x == 0 && c.y == 0)) + } +} + +#[derive(Debug, Clone)] +struct WireSegment { + start: (i32, i32), + start_signal_distance: i32, + direction: Direction, + length: i32, +} + +impl WireSegment { + fn from_str( + start: (i32, i32), + start_signal_distance: i32, + s: &str, + ) -> Result<Self, UnknownError> { + s.parse::<Direction>().and_then(|direction| { + WireSegment::length_from_str(s).map(|length| WireSegment { + start, + start_signal_distance, + direction, + length, + }) + }) + } + + fn length_from_str(s: &str) -> Result<i32, UnknownError> { + s.chars() + .skip(1) + .collect::<String>() + .parse() + .map_err(|_| UnknownError) + } + + fn end(&self) -> (i32, i32) { + ( + self.start.0 + self.direction.as_vec().0 * self.length, + self.start.1 + self.direction.as_vec().1 * self.length, + ) + } + + fn end_signal_distance(&self) -> i32 { + self.start_signal_distance + self.length + } + + fn collisions(&self, other: &WireSegment) -> Option<Collision> { + use Direction::*; + + match (self.direction, other.direction) { + (Left, Left) | (Right, Right) | (Up, Up) | (Down, Down) => None, + (Left, Right) | (Right, Left) | (Up, Down) | (Down, Up) => None, + (Left, Up) => collisions( + self.end(), + self.end_signal_distance(), + self.length, + -1, + other.start, + other.start_signal_distance, + other.length, + 1, + ), + (Left, Down) => collisions( + self.end(), + self.end_signal_distance(), + self.length, + -1, + other.end(), + other.end_signal_distance(), + other.length, + -1, + ), + (Right, Up) => collisions( + self.start, + self.start_signal_distance, + self.length, + 1, + other.start, + other.start_signal_distance, + other.length, + 1, + ), + (Right, Down) => collisions( + self.start, + self.start_signal_distance, + self.length, + 1, + other.end(), + other.end_signal_distance(), + other.length, + -1, + ), + (Down, Right) => collisions( + other.start, + other.start_signal_distance, + other.length, + 1, + self.end(), + self.end_signal_distance(), + self.length, + -1, + ), + (Down, Left) => collisions( + other.end(), + other.end_signal_distance(), + other.length, + -1, + self.end(), + self.end_signal_distance(), + self.length, + -1, + ), + (Up, Right) => collisions( + other.start, + other.start_signal_distance, + other.length, + 1, + self.start, + self.start_signal_distance, + self.length, + 1, + ), + (Up, Left) => collisions( + other.end(), + other.end_signal_distance(), + other.length, + -1, + self.start, + self.start_signal_distance, + self.length, + 1, + ), + } + } +} + +fn collisions( + horizontal_start: (i32, i32), + horizontal_start_signal_distance: i32, + horizontal_length: i32, + horizontal_signal_distance_multiplier: i32, + vertical_start: (i32, i32), + vertical_start_signal_distance: i32, + vertical_length: i32, + vertical_signal_distance_multiplier: i32, +) -> Option<Collision> { + if horizontal_start.1 >= vertical_start.1 + && horizontal_start.1 <= vertical_start.1 + vertical_length + && vertical_start.0 >= horizontal_start.0 + && vertical_start.0 <= horizontal_start.0 + horizontal_length + { + Some(Collision { + x: vertical_start.0, + y: horizontal_start.1, + signal_distance: horizontal_start_signal_distance + + (vertical_start.0 - horizontal_start.0) * horizontal_signal_distance_multiplier + + vertical_start_signal_distance + + (horizontal_start.1 - vertical_start.1) * vertical_signal_distance_multiplier, + }) + } else { + None + } +} + +#[derive(Debug, Clone, Copy)] +enum Direction { + Up, + Down, + Left, + Right, +} + +impl FromStr for Direction { + type Err = UnknownError; + + fn from_str(s: &str) -> Result<Self, UnknownError> { + use Direction::*; + match s.chars().next() { + Some('L') => Ok(Left), + Some('R') => Ok(Right), + Some('U') => Ok(Up), + Some('D') => Ok(Down), + Some(_) => Err(UnknownError), + None => Err(UnknownError), + } + } +} +impl Direction { + fn as_vec(&self) -> (i32, i32) { + use Direction::*; + match self { + Up => (0, 1), + Down => (0, -1), + Left => (-1, 0), + Right => (1, 0), + } + } +} + +struct Collision { + x: i32, + y: i32, + signal_distance: i32, +} + +impl Collision { + fn manhattan_distance(&self) -> i32 { + self.x.abs() + self.y.abs() + } +} + +#[derive(Debug, PartialEq)] +struct UnknownError; + +impl fmt::Display for UnknownError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "Unknown error") + } +} +impl std::error::Error for UnknownError {} diff --git a/2019/src/bin/day_4.rs b/2019/src/bin/day_4.rs new file mode 100644 index 0000000..d7d6b69 --- /dev/null +++ b/2019/src/bin/day_4.rs @@ -0,0 +1,55 @@ +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 4: Secure Container")] +/// Calculates how many possible lock values there are +/// +/// See https://adventofcode.com/2019/day/4 for details. +struct Opt { + /// Repeated digits must be exactly 2 long + #[structopt(long = "larger-range-rule")] + larger_range_rule: bool, + min: u32, + max: u32, +} + +fn main() { + let opt = Opt::from_args(); + + println!( + "{}", + valid_combinations(opt.min, opt.max, opt.larger_range_rule) + ) +} + +fn valid_combinations(min: u32, max: u32, larger_range_rule: bool) -> u32 { + (min..max) + .filter(|x| { + two_adjacent_identical_digits(*x, larger_range_rule) && digits_never_decrease(*x) + }) + .count() as u32 +} + +fn two_adjacent_identical_digits(x: u32, larger_range_rule: bool) -> bool { + if larger_range_rule { + (0..5).any(|d| { + digit(x, d) == digit(x, d + 1) + && digit(x, d) != digit(x, d + 2) + && digit(x, d) != digit(x, d - 1) + }) + } else { + (0..5).any(|d| digit(x, d) == digit(x, d + 1)) + } +} + +fn digits_never_decrease(x: u32) -> bool { + (0..5).all(|d| digit(x, d) >= digit(x, d + 1)) +} + +fn digit(x: u32, digit: i32) -> u32 { + if digit < 0 { + 0 + } else { + (x / 10u32.pow(digit as u32)) % 10 + } +} diff --git a/2019/src/bin/day_5.rs b/2019/src/bin/day_5.rs new file mode 100644 index 0000000..07f7af8 --- /dev/null +++ b/2019/src/bin/day_5.rs @@ -0,0 +1,45 @@ +use aoc2019::*; +use std::io; +use std::io::prelude::*; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 5: Sunny with a Chance of Asteroids")] +/// Executes an Intcode program +/// +/// The program is read from stdin as a series of comma-separated +/// values. Newlines are ignored. +/// +/// See https://adventofcode.com/2019/day/5 for details. +struct Opt { + #[structopt(short = "i", long = "input")] + input: Vec<Intcode>, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>() + .with_input(opt.input.into_iter().collect()); + + let result = exit_on_failed_assertion(program.execute(), "Program errored"); + println!("{}", result); +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} diff --git a/2019/src/bin/day_6.rs b/2019/src/bin/day_6.rs new file mode 100644 index 0000000..2af272c --- /dev/null +++ b/2019/src/bin/day_6.rs @@ -0,0 +1,251 @@ +use rpds::vector::Vector; +use std::fmt; +use std::io; +use std::io::prelude::*; +use std::iter::FromIterator; +use std::process; +use std::str::FromStr; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 6: Universal Orbit Map")] +/// Finds the minumum number of orbital transfers between two points. +/// +/// Input is read from stdin, one direct orbit per line, in the format +/// `A)B` (B is orbiting A). +/// +/// See https://adventofcode.com/2019/day/6 for details. +struct Opt { + /// Debug checksum: Counts the total orbits + #[structopt(short = "d", long = "debug")] + debug: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let orbits: OrbitalMap = stdin + .lock() + .lines() + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(x.parse::<Orbit>(), "Input was not a valid orbit")) + .collect(); + + // eprintln!("{:#?}", orbits); + + if opt.debug { + println!("{}", orbits.total_orbits()); + } else { + println!("{}", orbits.orbital_transfers("YOU", "SAN")); + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +#[derive(Debug)] +struct StrError { + str: String, +} + +impl fmt::Display for StrError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", self.str) + } +} +impl std::error::Error for StrError {} + +#[derive(Debug, Clone)] +struct Orbit { + a: String, + b: String, +} + +impl FromStr for Orbit { + type Err = StrError; + + fn from_str(s: &str) -> Result<Self, StrError> { + match s.split(')').collect::<Vec<_>>()[..] { + [a, b] => Ok(Orbit { + a: a.to_string(), + b: b.to_string(), + }), + _ => Err(StrError { + str: format!("{} is not a valid orbit description", s), + }), + } + } +} + +#[derive(Clone, Debug)] +struct OrbitalMap { + id: String, + depth: usize, + orbiters: Vector<OrbitalMap>, +} + +struct OrbitalMapBuilder { + orbiters: Vector<OrbitalMap>, + inserted_orbits: Vector<String>, + pending_orbits: Vector<Orbit>, +} + +impl FromIterator<Orbit> for OrbitalMap { + fn from_iter<T: IntoIterator<Item = Orbit>>(iter: T) -> Self { + iter.into_iter().collect::<OrbitalMapBuilder>().build() + } +} + +impl FromIterator<Orbit> for OrbitalMapBuilder { + fn from_iter<T: IntoIterator<Item = Orbit>>(iter: T) -> Self { + OrbitalMapBuilder { + orbiters: Vector::new(), + inserted_orbits: Vector::new(), + pending_orbits: iter.into_iter().collect(), + } + } +} + +impl OrbitalMapBuilder { + fn build(self) -> OrbitalMap { + if self.pending_orbits.is_empty() { + OrbitalMap { + id: ROOT.into(), + depth: 0, + orbiters: self.orbiters, + } + } else { + self.pending_orbits + .into_iter() + .fold( + OrbitalMapBuilder { + pending_orbits: Vector::new(), + ..self + }, + |acc, next| acc.insert(&next), + ) + .build() + } + } + + fn insert(self, orbit: &Orbit) -> OrbitalMapBuilder { + if orbit.a == ROOT { + OrbitalMapBuilder { + orbiters: self.orbiters.push_back(OrbitalMap::new(orbit.b.clone(), 1)), + inserted_orbits: self.inserted_orbits.push_back(orbit.b.clone()), + ..self + } + } else if self.inserted_orbits.iter().any(|o| *o == orbit.a) { + OrbitalMapBuilder { + orbiters: self + .orbiters + .into_iter() + .map(|map| OrbitalMap::insert(map.clone(), orbit)) + .collect(), + inserted_orbits: self.inserted_orbits.push_back(orbit.b.clone()), + ..self + } + } else { + OrbitalMapBuilder { + pending_orbits: self.pending_orbits.push_back(orbit.clone()), + ..self + } + } + } +} + +const ROOT: &str = "COM"; + +impl OrbitalMap { + fn new(id: String, depth: usize) -> OrbitalMap { + OrbitalMap { + id, + depth, + orbiters: Vector::new(), + } + } + + fn insert(self, orbit: &Orbit) -> OrbitalMap { + if orbit.a == self.id { + if self.orbiters.iter().any(|o| o.id == orbit.b) { + self + } else { + OrbitalMap { + orbiters: self + .orbiters + .push_back(OrbitalMap::new(orbit.b.clone(), self.depth + 1)), + ..self + } + } + } else { + OrbitalMap { + orbiters: self + .orbiters + .into_iter() + .map(|map| OrbitalMap::insert(map.clone(), orbit)) + .collect(), + ..self + } + } + } + + fn count_orbits(&self) -> usize { + self.orbiters.len() + + self + .orbiters + .iter() + .map(|o| o.count_orbits()) + .sum::<usize>() + } + + fn total_orbits(&self) -> usize { + self.count_orbits() + + self + .orbiters + .iter() + .map(|o| o.total_orbits()) + .sum::<usize>() + } + + fn find_depth(&self, id: &str) -> usize { + if self.id == id { + self.depth + } else { + // only the actual one will return non-zero from this + self.orbiters.iter().map(|o| o.find_depth(id)).sum() + } + } + + fn contains(&self, id: &str) -> bool { + self.id == id || self.orbiters.iter().any(|o| o.contains(id)) + } + + fn find_common_ancestor(&self, a: &str, b: &str) -> Option<OrbitalMap> { + if !self.contains(a) || !self.contains(b) { + None + } else { + self.orbiters + .iter() + .flat_map(|o| o.find_common_ancestor(a, b)) + .next() + .or(Some(self.clone())) + } + } + + fn orbital_transfers(&self, from: &str, to: &str) -> usize { + self.find_depth(from) + self.find_depth(to) + - 2 * self + .find_common_ancestor(from, to) + .map(|o| o.depth) + .unwrap_or(0) + - 2 + } +} diff --git a/2019/src/bin/day_7.rs b/2019/src/bin/day_7.rs new file mode 100644 index 0000000..9b9177a --- /dev/null +++ b/2019/src/bin/day_7.rs @@ -0,0 +1,175 @@ +use aoc2019::*; +use rpds::list; +use rpds::list::List; +use rpds::vector::Vector; +use std::io; +use std::io::prelude::*; +use std::iter; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 7: Amplification Circuit")] +/// Executes an Intcode program on 5 amplifiers, and finds the input that gives the max output +/// +/// See https://adventofcode.com/2019/day/7 for details. +struct Opt { + #[structopt(short = "f", long = "feedback-loop")] + feedback_loop_mode: bool, +} + +fn main() { + let stdin = io::stdin(); + let opt = Opt::from_args(); + + let program: IntcodeProgram = stdin + .lock() + .split(b',') + .map(|x| exit_on_failed_assertion(x, "Error reading input")) + .map(|x| exit_on_failed_assertion(String::from_utf8(x), "Input was not valid UTF-8")) + .map(|x| exit_on_failed_assertion(x.trim().parse::<Intcode>(), "Invalid number")) + .collect::<IntcodeProgram>(); + + let result = exit_on_failed_assertion( + find_max_power(&program, opt.feedback_loop_mode), + "Program errored", + ); + println!("{}", result); +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +fn find_max_power( + program: &IntcodeProgram, + feedback_loop_mode: bool, +) -> Result<Intcode, IntcodeProgramError> { + PhaseSetting::all(feedback_loop_mode) + .map(|phase| AmplifierArray::new(program, &phase).execute()) + .collect::<Result<Vec<Intcode>, _>>() + .map(|powers| powers.into_iter().max().unwrap_or(Intcode::from(0))) +} + +#[derive(Debug, Clone)] +struct PhaseSetting([Intcode; 5]); + +impl PhaseSetting { + fn all(feedback_loop_mode: bool) -> impl Iterator<Item = PhaseSetting> { + if feedback_loop_mode { + PhaseSetting::permute(5, 10) + } else { + PhaseSetting::permute(0, 5) + } + } + + fn permute(min: i32, max: i32) -> impl Iterator<Item = PhaseSetting> { + // This is an absolutely atrocious way to do the permutation, + // but luckily it's only 5 elements long. + (min..max) + .flat_map(move |a| { + (min..max).flat_map(move |b| { + (min..max).flat_map(move |c| { + (min..max).flat_map(move |d| { + (min..max).map(move |e| { + PhaseSetting([a.into(), b.into(), c.into(), d.into(), e.into()]) + }) + }) + }) + }) + }) + .filter(move |phase| (min..max).all(|x| phase.0.contains(&x.into()))) + } +} + +#[derive(Debug, Clone)] +struct AmplifierArray { + amplifiers: Vector<IntcodeProgram>, +} + +impl AmplifierArray { + fn new(program: &IntcodeProgram, phase: &PhaseSetting) -> AmplifierArray { + AmplifierArray { + amplifiers: (0..5) + .map(|n| AmplifierArray::new_amp(program, phase, n)) + .collect(), + } + } + + fn new_amp(program: &IntcodeProgram, phase: &PhaseSetting, n: usize) -> IntcodeProgram { + if n == 0 { + program.with_input(list![phase.0[n].clone(), Intcode::from(0)]) + } else { + program.with_input(list![phase.0[n].clone()]) + } + } + + fn execute(&self) -> Result<Intcode, IntcodeProgramError> { + self.run_to_termination().output_into_result() + } + + fn run_to_termination(&self) -> AmplifierArray { + iter::successors(Some(self.clone()), |p| Some(p.next())) + .find(|p| p.is_terminated()) + .unwrap() // successors doesn't terminate, so this will never be none. + } + + fn output_into_result(&self) -> Result<Intcode, IntcodeProgramError> { + self.amplifiers + .first() + .and_then(|amp| amp.input.first().cloned()) + .ok_or(IntcodeProgramError::Unknown) + } + + fn is_terminated(&self) -> bool { + self.amplifiers.last().map(|amp| amp.halted).unwrap_or(true) + } + + fn next(&self) -> AmplifierArray { + self.run_amplifiers().update_inputs() + } + + fn run_amplifiers(&self) -> AmplifierArray { + AmplifierArray { + amplifiers: self + .amplifiers + .iter() + .map(|amp| amp.run_to_termination_or_input()) + .collect(), + } + } + + fn update_inputs(&self) -> AmplifierArray { + AmplifierArray { + amplifiers: self + .amplifiers + .iter() + .fold( + ( + Vector::new(), + self.amplifiers + .last() + .map(|a| a.output.iter().cloned().collect::<List<Intcode>>()) + .unwrap_or(List::new()), + ), + |(amps, piped_input), next_amp| { + ( + amps.push_back( + next_amp + .with_additional_input(piped_input) + .with_cleared_output(), + ), + next_amp.output.iter().cloned().collect::<List<Intcode>>(), + ) + }, + ) + .0, + } + } +} diff --git a/2019/src/bin/day_8.rs b/2019/src/bin/day_8.rs new file mode 100644 index 0000000..0508e7c --- /dev/null +++ b/2019/src/bin/day_8.rs @@ -0,0 +1,135 @@ +use std::fmt; +use std::io; +use std::io::prelude::*; +use std::process; +use structopt::StructOpt; + +#[derive(Debug, StructOpt)] +#[structopt(name = "Day 8: Space Image Format")] +/// Executes an Intcode program on 5 amplifiers, and finds the input that gives the max output +/// +/// See https://adventofcode.com/2019/day/8 for details. +struct Opt { + /// Rather than rendering the image, calculate and print its checksum + #[structopt(short = "c", long = "checksum")] + checksum_mode: bool, + #[structopt(short = "w", long = "width")] + width: u32, + #[structopt(short = "h", long = "height")] + height: u32, +} + +fn main() { + let opt = Opt::from_args(); + + let image: Image = { + let mut buffer = String::new(); + exit_on_failed_assertion( + io::stdin().read_to_string(&mut buffer), + "Error reading input", + ); + + Image::from_str(&buffer.trim(), opt.width, opt.height) + }; + + if opt.checksum_mode { + println!("{}", image.checksum()); + } else { + println!("{}", image); + } +} + +fn exit_on_failed_assertion<A, E: std::error::Error>(data: Result<A, E>, message: &str) -> A { + match data { + Ok(data) => data, + Err(e) => { + eprintln!("{}: {}", message, e); + process::exit(1); + } + } +} + +#[derive(Debug)] +struct Image { + width: u32, + height: u32, + layers: Vec<ImageLayer>, +} + +impl fmt::Display for Image { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.flatten() + .pixels + .chunks(self.width as usize) + .map(|line| { + line.iter() + .map(|c| write!(f, "{}", if *c == 0 { ' ' } else { '1' })) + .collect::<fmt::Result>() + .and_then(|_| writeln!(f)) + }) + .collect() + } +} + +impl Image { + fn from_str(s: &str, width: u32, height: u32) -> Image { + Image { + width, + height, + layers: s + .as_bytes() + .chunks((width * height) as usize) + .map(|chunk| ImageLayer::new(chunk)) + .collect(), + } + } + + fn checksum(&self) -> usize { + self.layers + .iter() + .min_by_key(|layer| layer.pixel_count(0)) + .map(|layer| layer.pixel_count(1) * layer.pixel_count(2)) + .unwrap_or(0) + } + + fn flatten(&self) -> ImageLayer { + self.layers + .iter() + .fold(ImageLayer::empty(self.width, self.height), |acc, next| { + ImageLayer { + pixels: acc + .pixels + .iter() + .zip(next.pixels.iter()) + .map(|(a, b)| if *a == 2 { *b } else { *a }) + .collect(), + } + }) + } +} + +#[derive(Debug)] +struct ImageLayer { + pixels: Vec<u8>, +} + +impl ImageLayer { + fn new(char_pixels: &[u8]) -> ImageLayer { + ImageLayer { + pixels: char_pixels + .iter() + .map(|c| c.overflowing_sub(b'0').0) + .collect(), + } + } + + fn empty(width: u32, height: u32) -> ImageLayer { + ImageLayer { + pixels: vec![2; (width * height) as usize], + } + } + + fn pixel_count(&self, value: u8) -> usize { + self.pixels.iter().filter(|p| **p == value).count() + } +} diff --git a/2019/src/bin/day_9.rs b/2019/src/bin/day_9.rs new file mode 100644 index 0000000..7f9b4aa --- /dev/null +++ b/2019/src/bin/day_9.rs @@ -0,0 +1 @@ +// Run the day 5 binary for this diff --git a/2019/src/lib.rs b/2019/src/lib.rs new file mode 100644 index 0000000..a7dfc02 --- /dev/null +++ b/2019/src/lib.rs @@ -0,0 +1,438 @@ +use derivative::Derivative; +use num::bigint::BigInt; +use num::traits::identities::Zero; +use rpds::RedBlackTreeMap; +use rpds::{list::List, vector::Vector}; +use std::fmt; +use std::iter; +use std::iter::FromIterator; +use std::iter::IntoIterator; +use std::iter::Iterator; + +pub type Intcode = BigInt; + +#[derive(Clone, Derivative)] +#[derivative(Debug)] +pub struct IntcodeProgram { + #[derivative(Debug(format_with = "std::fmt::Display::fmt"))] + instruction_pointer: Intcode, + #[derivative(Debug(format_with = "std::fmt::Display::fmt"))] + relative_base: Intcode, + pub error: Option<IntcodeProgramError>, + pub halted: bool, + pub awaiting_input: bool, + #[derivative(Debug(format_with = "std::fmt::Display::fmt"))] + memory: RedBlackTreeMap<Intcode, Intcode>, + #[derivative(Debug(format_with = "std::fmt::Display::fmt"))] + pub input: List<Intcode>, + #[derivative(Debug(format_with = "std::fmt::Display::fmt"))] + pub output: Vector<Intcode>, +} + +impl FromIterator<Intcode> for IntcodeProgram { + fn from_iter<I: IntoIterator<Item = Intcode>>(iter: I) -> Self { + IntcodeProgram { + instruction_pointer: Intcode::from(0), + relative_base: Intcode::from(0), + error: None, + halted: false, + awaiting_input: false, + memory: iter + .into_iter() + .enumerate() + .map(|(addr, val)| (Intcode::from(addr), val)) + .collect(), + input: List::new(), + output: Vector::new(), + } + } +} + +pub fn intcode_to_bool(i: &Intcode) -> bool { + *i != Intcode::from(0) +} + +pub fn bool_to_intcode(i: bool) -> Intcode { + if i { + Intcode::from(1) + } else { + Intcode::from(0) + } +} + +impl IntcodeProgram { + pub fn with_mem_0(&self, val: Intcode) -> IntcodeProgram { + self.with_memory_set(0.into(), val) + } + + pub fn with_noun_verb_input(&self, noun: Intcode, verb: Intcode) -> IntcodeProgram { + self.with_memory_set(1.into(), noun) + .with_memory_set(2.into(), verb) + } + + pub fn with_input(&self, input: List<Intcode>) -> IntcodeProgram { + IntcodeProgram { + input, + ..self.clone() + } + } + + pub fn with_additional_input(&self, input: List<Intcode>) -> IntcodeProgram { + IntcodeProgram { + input: self.input.iter().chain(input.iter()).cloned().collect(), + ..self.clone() + } + } + + pub fn with_cleared_output(&self) -> IntcodeProgram { + IntcodeProgram { + output: Vector::new(), + ..self.clone() + } + } + + pub fn execute(&self) -> Result<Vector<Intcode>, IntcodeProgramError> { + self.run_to_termination().output_into_result() + } + + pub fn execute_returning_memory_0(&self) -> Result<Intcode, IntcodeProgramError> { + self.run_to_termination().memory_0_into_result() + } + + pub fn run_to_termination(&self) -> IntcodeProgram { + iter::successors(Some(self.clear_await_input()), |p| { + Some(IntcodeProgram::next(&p)) + }) + .find(|p| p.halted) + .unwrap() // successors doesn't terminate, so this will never be none. + } + + pub fn run_to_termination_or_input(&self) -> IntcodeProgram { + iter::successors(Some(self.clear_await_input()), |p| { + Some(IntcodeProgram::next(&p)) + }) + .find(|p| p.halted || p.awaiting_input) + .unwrap() + } + + pub fn output_into_result(&self) -> Result<Vector<Intcode>, IntcodeProgramError> { + match self.error { + Some(ref error) => Err(error.clone()), + None => Ok(self.output.clone()), + } + } + + fn with_instruction_pointer(&self, instruction_pointer: Intcode) -> IntcodeProgram { + IntcodeProgram { + instruction_pointer, + ..self.clone() + } + } + + fn with_instruction_pointer_offset(&self, offset: usize) -> IntcodeProgram { + IntcodeProgram { + instruction_pointer: self.instruction_pointer.clone() + offset, + ..self.clone() + } + } + + fn with_relative_base(&self, relative_base: Intcode) -> IntcodeProgram { + IntcodeProgram { + relative_base, + ..self.clone() + } + } + + fn with_memory_set(&self, address: Intcode, value: Intcode) -> IntcodeProgram { + IntcodeProgram { + memory: self.memory.insert(address, value), + ..self.clone() + } + } + + fn with_input_consumed(&self) -> IntcodeProgram { + self.input + .drop_first() + .map(|input| IntcodeProgram { + input, + ..self.clone() + }) + .unwrap_or(self.error(IntcodeProgramError::Unknown)) + } + + fn with_output(&self, print: Intcode) -> IntcodeProgram { + IntcodeProgram { + output: self.output.push_back(print), + ..self.clone() + } + } + + fn memory_0_into_result(&self) -> Result<Intcode, IntcodeProgramError> { + match self.error { + Some(ref error) => Err(error.clone()), + None => Ok(self + .memory + .get(&Intcode::from(0)) + .cloned() + .unwrap_or(Intcode::from(0))), + } + } + fn next(&self) -> IntcodeProgram { + //dbg!(self); + self.memory + .get(&self.instruction_pointer) + .map(|opcode| match opcode.to_radix_le(100).1[0] { + 1 => self.add(opcode), + 2 => self.multiply(opcode), + 3 => self.input(opcode), + 4 => self.output(opcode), + 5 => self.jump_if_true(opcode), + 6 => self.jump_if_false(opcode), + 7 => self.less_than(opcode), + 8 => self.equals(opcode), + 9 => self.set_relative_base(opcode), + 99 => self.halt(), + unknown => self.error(IntcodeProgramError::InvalidOpcode(unknown.clone())), + }) + .unwrap_or(self.error(IntcodeProgramError::Unknown)) + } + + fn add(&self, mode: &Intcode) -> IntcodeProgram { + self.with_instruction_pointer_offset(4).with_memory_set( + self.get_literal(3, mode), + self.get(1, mode) + self.get(2, mode), + ) + } + + fn multiply(&self, mode: &Intcode) -> IntcodeProgram { + self.with_instruction_pointer_offset(4).with_memory_set( + self.get_literal(3, mode), + self.get(1, mode) * self.get(2, mode), + ) + } + + fn input(&self, mode: &Intcode) -> IntcodeProgram { + match self.input.first().cloned() { + Some(input) => self + .with_instruction_pointer_offset(2) + .with_memory_set(self.get_literal(1, mode), input) + .with_input_consumed(), + None => self.await_input(), + } + } + + fn output(&self, mode: &Intcode) -> IntcodeProgram { + self.with_instruction_pointer_offset(2) + .with_output(self.get(1, mode)) + } + + fn jump_if_true(&self, mode: &Intcode) -> IntcodeProgram { + if !self.get(1, mode).is_zero() { + self.with_instruction_pointer(self.get(2, mode)) + } else { + self.with_instruction_pointer_offset(3) + } + } + fn jump_if_false(&self, mode: &Intcode) -> IntcodeProgram { + if self.get(1, mode).is_zero() { + self.with_instruction_pointer(self.get(2, mode)) + } else { + self.with_instruction_pointer_offset(3) + } + } + + fn less_than(&self, mode: &Intcode) -> IntcodeProgram { + self.with_instruction_pointer_offset(4).with_memory_set( + self.get_literal(3, mode), + if self.get(1, mode) < self.get(2, mode) { + Intcode::from(1) + } else { + Intcode::from(0) + }, + ) + } + + fn equals(&self, mode: &Intcode) -> IntcodeProgram { + self.with_instruction_pointer_offset(4).with_memory_set( + self.get_literal(3, mode), + if self.get(1, mode) == self.get(2, mode) { + Intcode::from(1) + } else { + Intcode::from(0) + }, + ) + } + + fn set_relative_base(&self, mode: &Intcode) -> IntcodeProgram { + self.with_instruction_pointer_offset(2) + .with_relative_base(self.relative_base.clone() + self.get(1, mode)) + } + + fn halt(&self) -> IntcodeProgram { + IntcodeProgram { + halted: true, + ..self.clone() + } + } + + fn await_input(&self) -> IntcodeProgram { + IntcodeProgram { + awaiting_input: true, + ..self.clone() + } + } + + fn clear_await_input(&self) -> IntcodeProgram { + IntcodeProgram { + awaiting_input: false, + ..self.clone() + } + } + + fn error(&self, error: IntcodeProgramError) -> IntcodeProgram { + IntcodeProgram { + halted: true, + error: Some(error), + ..self.clone() + } + } + + fn get(&self, pointer_offset: usize, mode: &Intcode) -> Intcode { + match mode + .to_radix_le(10) + .1 + .get(pointer_offset + 1) + .cloned() + .unwrap_or(0) + { + 0 => self.get_position(pointer_offset), + 1 => self.get_immediate(pointer_offset), + 2 => self.get_relative(pointer_offset), + _ => Intcode::from(0), + } + } + + fn get_literal(&self, pointer_offset: usize, mode: &Intcode) -> Intcode { + match mode + .to_radix_le(10) + .1 + .get(pointer_offset + 1) + .cloned() + .unwrap_or(0) + { + 0 => self.get_immediate(pointer_offset), + 1 => self.get_immediate(pointer_offset), + 2 => self.get_immediate_relative(pointer_offset), + _ => Intcode::from(0), + } + } + + fn get_immediate(&self, pointer_offset: usize) -> Intcode { + self.memory + .get(&(self.instruction_pointer.clone() + pointer_offset)) + .cloned() + .unwrap_or(Intcode::from(0)) + } + + fn get_position(&self, pointer_offset: usize) -> Intcode { + self.memory + .get(&self.get_immediate(pointer_offset)) + .cloned() + .unwrap_or(Intcode::from(0)) + } + + fn get_relative(&self, pointer_offset: usize) -> Intcode { + self.memory + .get(&(self.get_immediate(pointer_offset) + self.relative_base.clone())) + .cloned() + .unwrap_or(Intcode::from(0)) + } + + fn get_immediate_relative(&self, pointer_offset: usize) -> Intcode { + self.get_immediate(pointer_offset) + self.relative_base.clone() + } +} + +#[derive(Debug, PartialEq, Clone)] +pub enum IntcodeProgramError { + InvalidOpcode(u8), + Unknown, +} + +impl fmt::Display for IntcodeProgramError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + use IntcodeProgramError::*; + + match self { + InvalidOpcode(i) => write!(f, "{} is not a valid opcode", i), + Unknown => write!(f, "Unknown error"), + } + } +} +impl std::error::Error for IntcodeProgramError {} + +#[cfg(test)] +mod tests { + use super::*; + + fn i32_vec_to_intcode_program(input: Vec<i32>) -> IntcodeProgram { + input.into_iter().map(Intcode::from).collect() + } + + fn i32_vec_to_intcode_memory(input: Vec<i32>) -> RedBlackTreeMap<Intcode, Intcode> { + input + .into_iter() + .enumerate() + .map(|(i, val)| (Intcode::from(i), Intcode::from(val))) + .collect() + } + + fn i32_vec_to_intcode_vec(input: Vec<i32>) -> Vector<Intcode> { + input.into_iter().map(Intcode::from).collect() + } + + fn test_example_program( + before_execution: Vec<i32>, + after_execution: Vec<i32>, + ) -> IntcodeProgram { + let program = i32_vec_to_intcode_program(before_execution).run_to_termination(); + + assert_eq!(program.error, None); + assert_eq!(program.memory, i32_vec_to_intcode_memory(after_execution)); + program + } + + #[test] + fn day_2_example_1() { + test_example_program(vec![1, 0, 0, 0, 99], vec![2, 0, 0, 0, 99]); + } + + #[test] + fn day_2_example_2() { + test_example_program(vec![2, 3, 0, 3, 99], vec![2, 3, 0, 6, 99]); + } + + #[test] + fn day_5_example_1() { + test_example_program(vec![1002, 4, 3, 4, 33], vec![1002, 4, 3, 4, 99]); + } + + #[test] + fn day_9_example_1() { + let quine = vec![ + 109, 1, 204, -1, 1001, 100, 1, 100, 1008, 100, 16, 101, 1006, 101, 0, 99, + ]; + let program = i32_vec_to_intcode_program(quine.clone()).run_to_termination(); + assert_eq!(program.error, None); + assert_eq!(program.output, i32_vec_to_intcode_vec(quine)); + } +} + +pub fn sort_by_key<T, K: Ord>( + iter: impl IntoIterator<Item = T>, + f: impl FnMut(&T) -> K, +) -> impl Iterator<Item = T> { + let mut tmp: Vec<T> = iter.into_iter().collect(); + tmp.sort_by_key(f); + tmp.into_iter() +} diff --git a/2019/src/main.rs b/2019/src/main.rs new file mode 100644 index 0000000..0c24a73 --- /dev/null +++ b/2019/src/main.rs @@ -0,0 +1,12 @@ +use std::io; +use std::io::prelude::*; + +fn main() { + let stdin = io::stdin(); + let answer = string_length_sum(stdin.lock().lines().map(|l| l.unwrap())); + dbg!(answer); +} + +fn string_length_sum(it: impl Iterator<Item = String>) -> usize { + it.map(|l| l.len()).sum() +} diff --git a/2020/Cargo.lock b/2020/Cargo.lock new file mode 100644 index 0000000..dcd07c3 --- /dev/null +++ b/2020/Cargo.lock @@ -0,0 +1,3654 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" + +[[package]] +name = "ab_glyph" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26a685fe66654266f321a8b572660953f4df36a2135706503a4c89981d76e1a2" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9fe5e32de01730eb1f6b7f5b51c17e03e2325bf40a74f754f04f130043affff" + +[[package]] +name = "addr2line" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c0929d69e78dd9bf5408269919fcbcaeb2e35e5d43e5815517cdc6a8e11a423" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "advent-of-code-2020" +version = "0.1.0" +dependencies = [ + "bevy", + "thiserror", +] + +[[package]] +name = "ahash" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eb6ec8807cd25b59e6b8100815afc73f54e294f1a425a2e555971969889a8f8" +dependencies = [ + "getrandom 0.2.0", + "lazy_static", +] + +[[package]] +name = "aho-corasick" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +dependencies = [ + "memchr", +] + +[[package]] +name = "alsa" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb213f6b3e4b1480a60931ca2035794aa67b73103d254715b1db7b70dcb3c934" +dependencies = [ + "alsa-sys", + "bitflags", + "libc", + "nix 0.15.0", +] + +[[package]] +name = "alsa-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5a0559bcd3f7a482690d98be41c08a43e92f669b179433e95ddf5e8b8fd36a3" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "android_log-sys" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8052e2d8aabbb8d556d6abbcce2a22b9590996c5f849b9c7ce4544a2e3b984e" + +[[package]] +name = "android_log-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e" + +[[package]] +name = "android_logger" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cbd542dd180566fad88fd2729a53a62a734843c626638006a9d63ec0688484e" +dependencies = [ + "android_log-sys 0.1.2", + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "android_logger" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5027a747b8132dc36dc894415a300aab31d6489ee788e9ba07bc99558b1278ca" +dependencies = [ + "android_log-sys 0.2.0", + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "anyhow" +version = "1.0.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf8dcb5b4bbaa28653b647d8c77bd4ed40183b48882e130c1f1ffb73de069fd7" + +[[package]] +name = "anymap" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "ascii" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e" + +[[package]] +name = "ash" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c69a8137596e84c22d57f3da1b5de1d4230b1742a710091c85f4d7ce50f00f38" +dependencies = [ + "libloading 0.6.5", +] + +[[package]] +name = "async-channel" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59740d83946db6a5af71ae25ddf9562c2b176b2ca42cf99a455f09f4a220d6b9" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb877970c7b440ead138f6321a3b5395d6061183af779340b65e20c0fede9146" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "once_cell", + "vec-arena", +] + +[[package]] +name = "async-task" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" + +[[package]] +name = "autocfg" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" + +[[package]] +name = "backtrace" +version = "0.3.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2baad346b2d4e94a24347adeee9c7a93f412ee94b9cc26e5b59dea23848e9f28" +dependencies = [ + "addr2line", + "cfg-if 1.0.0", + "libc", + "miniz_oxide 0.4.3", + "object", + "rustc-demangle", +] + +[[package]] +name = "base-x" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" + +[[package]] +name = "base64" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "base64" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" + +[[package]] +name = "base64" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" + +[[package]] +name = "bevy" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8de175e156277bf382d5212e4f580e74caaa62917b5554e12ab2addd87ae789" +dependencies = [ + "android_logger 0.9.0", + "bevy_app", + "bevy_asset", + "bevy_audio", + "bevy_core", + "bevy_diagnostic", + "bevy_dynamic_plugin", + "bevy_ecs", + "bevy_gilrs", + "bevy_gltf", + "bevy_input", + "bevy_math", + "bevy_pbr", + "bevy_property", + "bevy_render", + "bevy_scene", + "bevy_sprite", + "bevy_tasks", + "bevy_text", + "bevy_transform", + "bevy_type_registry", + "bevy_ui", + "bevy_utils", + "bevy_wgpu", + "bevy_window", + "bevy_winit", + "ndk-glue", +] + +[[package]] +name = "bevy-glsl-to-spirv" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d5f2f58f0aec3c50a20799792c3705e80dd7df327e79791cacec197e84e5e61" + +[[package]] +name = "bevy_app" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93cdf694a6d588bf46a2a7ae5623f176fc5c4ee4d0d71281fdc25bd263136a14" +dependencies = [ + "bevy_derive", + "bevy_ecs", + "bevy_utils", + "instant", + "log", + "serde", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "bevy_asset" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ed5c0dcf4262387a3917dcf4cd1a7bf9539bac843a6c9653bb56e9d5ef723c" +dependencies = [ + "anyhow", + "bevy_app", + "bevy_ecs", + "bevy_property", + "bevy_tasks", + "bevy_type_registry", + "bevy_utils", + "crossbeam-channel", + "downcast-rs", + "js-sys", + "log", + "ndk-glue", + "notify", + "parking_lot", + "rand", + "ron", + "serde", + "thiserror", + "uuid", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "bevy_audio" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6198d842cc25f77dc828d0ba0ae9b313fd864e18af29f60e9d5319d056f8166" +dependencies = [ + "anyhow", + "bevy_app", + "bevy_asset", + "bevy_ecs", + "bevy_type_registry", + "bevy_utils", + "parking_lot", + "rodio", +] + +[[package]] +name = "bevy_core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbe690bd67ba93067651604a3da5b314ec4de5417547ad0f1fbd93da541ea30" +dependencies = [ + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_property", + "bevy_tasks", + "bevy_type_registry", + "bevy_utils", + "instant", + "log", +] + +[[package]] +name = "bevy_derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c18d8de3b2f1c66dbac70fbf82bce0dcbeceecf2356eb1b542c735d5c17e0a0" +dependencies = [ + "Inflector", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", + "uuid", +] + +[[package]] +name = "bevy_diagnostic" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e98868df99533447a6ad202e6826fe24cecab80c163c1dcac56b811ea69a9f7" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_utils", + "instant", + "parking_lot", + "uuid", +] + +[[package]] +name = "bevy_dynamic_plugin" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc5672a27be1e38e11b6f2f1e1290fde2aa4f074628aad33303953ce881a5a78" +dependencies = [ + "bevy_app", + "libloading 0.6.5", + "log", +] + +[[package]] +name = "bevy_ecs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad8a73ad248ed6c16b1ca53eaedd76ae5aa284aa5c4527f8cf3526b5e3a7fce" +dependencies = [ + "bevy_hecs", + "bevy_tasks", + "bevy_utils", + "downcast-rs", + "fixedbitset", + "log", + "parking_lot", + "rand", + "thiserror", +] + +[[package]] +name = "bevy_gilrs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "255ceb467ab2982a0bd1ef0c49ae557704f99fe11ab990a11492cea2e6d7fd7f" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "gilrs", + "log", +] + +[[package]] +name = "bevy_gltf" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44dfa912e7fb0ac140b46e2cdf4f6f5e66e6def8049dc8cee69de9a9bafd1836" +dependencies = [ + "anyhow", + "base64 0.12.3", + "bevy_app", + "bevy_asset", + "bevy_ecs", + "bevy_math", + "bevy_pbr", + "bevy_render", + "bevy_scene", + "bevy_transform", + "bevy_type_registry", + "gltf", + "image", + "thiserror", +] + +[[package]] +name = "bevy_hecs" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18661dc92bcb6cc1f2f5ad630f3f3eae7b23942860ea6845a2a775b5a1f7564f" +dependencies = [ + "bevy_hecs_macros", + "bevy_utils", + "lazy_static", + "serde", +] + +[[package]] +name = "bevy_hecs_macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a85e43b7043183821aa62f09c91164a0aa6de771c5397a7a0d0eaf754cc042a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_input" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069dc814211aaf691c9aca9ce97210d3238c19e599dfc2bc50b183fe925f0a00" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_utils", +] + +[[package]] +name = "bevy_math" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71ff845326919ef68a796ae4740e33356683020756bc1d23b552b9b31a106fd3" +dependencies = [ + "glam", +] + +[[package]] +name = "bevy_pbr" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34e4185bf49b2cfd31a0aec90722b3e898b37de5d61ec4cc53e5df9ecae19d71" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_property", + "bevy_render", + "bevy_transform", + "bevy_type_registry", + "bevy_window", +] + +[[package]] +name = "bevy_property" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bd127fa915b12581aab82cf77ade4a29c1a7b00c19672b88c187c14d111227c" +dependencies = [ + "bevy_ecs", + "bevy_math", + "bevy_property_derive", + "bevy_utils", + "erased-serde", + "ron", + "serde", + "smallvec", +] + +[[package]] +name = "bevy_property_derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c7a3bc30a90561dc05e662597d595d29a9a7171fb7e5fc34fdb09e4c60c10f" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_render" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c1e99851a90fba39994aa26887da114cb53388e1ba7324b60cea4156351ad23" +dependencies = [ + "anyhow", + "bevy-glsl-to-spirv", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_property", + "bevy_transform", + "bevy_type_registry", + "bevy_utils", + "bevy_window", + "bitflags", + "downcast-rs", + "hex", + "hexasphere", + "image", + "log", + "once_cell", + "parking_lot", + "serde", + "shaderc", + "smallvec", + "spirv-reflect", + "thiserror", + "uuid", +] + +[[package]] +name = "bevy_scene" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d00a586fa10ea919800eda837f98396b49b99a84ee1fc8d6ad4ede151d3b9e4" +dependencies = [ + "anyhow", + "bevy_app", + "bevy_asset", + "bevy_ecs", + "bevy_property", + "bevy_type_registry", + "bevy_utils", + "parking_lot", + "ron", + "serde", + "thiserror", + "uuid", +] + +[[package]] +name = "bevy_sprite" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15eb21af28740fcaf9bd4cec1df90a3015ffab1d33d51022ebc9f106f55210d8" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_ecs", + "bevy_math", + "bevy_render", + "bevy_transform", + "bevy_type_registry", + "bevy_utils", + "guillotiere", + "rectangle-pack", + "thiserror", +] + +[[package]] +name = "bevy_tasks" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c39e34a30611a1c4a80a30d252f0c53afa27e9500fa73dae1dca2e41c85c765" +dependencies = [ + "async-channel", + "async-executor", + "event-listener", + "futures-lite", + "num_cpus", + "wasm-bindgen-futures", +] + +[[package]] +name = "bevy_text" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61b128707cbbc841fa8aa3b41e29362d4a7ba38fb4450b7766d3ff9884389766" +dependencies = [ + "ab_glyph", + "anyhow", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_math", + "bevy_render", + "bevy_sprite", + "bevy_type_registry", + "bevy_utils", +] + +[[package]] +name = "bevy_transform" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b3c44fc53eb744fc16edc923655a50a01fd0e8e6edfe6f3b3065997e913f5" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_property", + "bevy_type_registry", + "bevy_utils", + "log", + "smallvec", +] + +[[package]] +name = "bevy_type_registry" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aac65e5c297e547844cb5986da14975181a352f532c8d6fe95f7b62e5a40d32" +dependencies = [ + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_property", + "bevy_utils", + "parking_lot", + "serde", + "uuid", +] + +[[package]] +name = "bevy_ui" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2994737dd6413028a2bcda7315ab6cbe8c30c1dab809fb3de4b1e1a8e2fbfabc" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_render", + "bevy_sprite", + "bevy_text", + "bevy_transform", + "bevy_type_registry", + "bevy_utils", + "bevy_window", + "stretch", +] + +[[package]] +name = "bevy_utils" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "554cd4eba4b278f6cc0fe5da0b7dbe8deba51613e6769f93b0d5a8a32eac54b6" +dependencies = [ + "ahash", + "getrandom 0.2.0", +] + +[[package]] +name = "bevy_wgpu" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ba8d9ae1409735ddc2b83426849ba819699288d0ff1166b9caa352511300a1d" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_diagnostic", + "bevy_ecs", + "bevy_render", + "bevy_utils", + "bevy_window", + "bevy_winit", + "crossbeam-channel", + "crossbeam-utils", + "futures-lite", + "log", + "parking_lot", + "wgpu", +] + +[[package]] +name = "bevy_window" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f15434d9c46bfc96d449a121e01139489ddc9e79b879edee73c58f90b6b2bbb3" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_utils", + "uuid", + "web-sys", +] + +[[package]] +name = "bevy_winit" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fd72a8a4b42e975c2cac508500471b468568f042d6bbaf6f200844eba3192b0" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_utils", + "bevy_window", + "log", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "bindgen" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c72a978d268b1d70b0e963217e60fdabd9523a941457a6c42a7315d15c7e89e5" +dependencies = [ + "bitflags", + "cexpr", + "cfg-if 0.1.10", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", +] + +[[package]] +name = "bit-set" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0dc55f2d8a1a85650ac47858bb001b4c0dd73d79e3c455a842925e68d29cd3" + +[[package]] +name = "bitflags" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "bumpalo" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e8c087f005730276d1096a652e92a8bacee2e2472bcc9715a74d2bec38b5820" + +[[package]] +name = "bytemuck" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41aa2ec95ca3b5c54cf73c91acf06d24f4495d5f1b1c12506ae3483d646177ac" + +[[package]] +name = "byteorder" +version = "1.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" + +[[package]] +name = "bytes" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" + +[[package]] +name = "cache-padded" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" + +[[package]] +name = "cc" +version = "1.0.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1770ced377336a88a67c473594ccc14eca6f4559217c34f64aac8f83d641b40" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chunked_transfer" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7477065d45a8fe57167bf3cf8bcd3729b54cfcb81cca49bda2d038ea89ae82ca" + +[[package]] +name = "clang-sys" +version = "0.29.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6837df1d5cba2397b835c8530f51723267e16abbf83892e9e5af4f0e5dd10a" +dependencies = [ + "glob", + "libc", + "libloading 0.5.2", +] + +[[package]] +name = "cloudabi" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4344512281c643ae7638bbabc3af17a11307803ec8f0fcad9fae512a8bf36467" +dependencies = [ + "bitflags", +] + +[[package]] +name = "cmake" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855" +dependencies = [ + "cc", +] + +[[package]] +name = "cocoa" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c54201c07dcf3a5ca33fececb8042aed767ee4bfd5a0235a8ceabcda956044b2" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation 0.9.1", + "core-graphics 0.22.1", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +dependencies = [ + "bitflags", + "block", + "core-foundation 0.9.1", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680" +dependencies = [ + "ascii", + "byteorder", + "either", + "memchr", + "unreachable", +] + +[[package]] +name = "combine" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9417a0c314565e2abffaece67e95a8cb51f9238cd39f3764d9dfdf09e72b20c" +dependencies = [ + "bytes", + "memchr", + "pin-project-lite", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +dependencies = [ + "cache-padded", +] + +[[package]] +name = "cookie" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "888604f00b3db336d2af898ec3c1d5d0ddf5e6d462220f2ededc33a87ac4bbd5" +dependencies = [ + "time", + "url 1.7.2", +] + +[[package]] +name = "copyless" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536" + +[[package]] +name = "core-foundation" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d" +dependencies = [ + "core-foundation-sys 0.6.2", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +dependencies = [ + "core-foundation-sys 0.8.2", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b" + +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + +[[package]] +name = "core-foundation-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" + +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc239bba52bab96649441699533a68de294a101533b0270b2d65aa402b29a7f9" +dependencies = [ + "bitflags", + "core-foundation 0.9.1", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation 0.9.1", + "foreign-types", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", + "libc", + "objc", +] + +[[package]] +name = "coreaudio-rs" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f229761965dad3e9b11081668a6ea00f1def7aa46062321b5ec245b834f6e491" +dependencies = [ + "bitflags", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f73df0f29f4c3c374854f076c47dc018f19acaa63538880dba0937ad4fa8d7" +dependencies = [ + "bindgen", +] + +[[package]] +name = "cpal" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05631e2089dfa5d3b6ea1cfbbfd092e2ee5deeb69698911bc976b28b746d3657" +dependencies = [ + "alsa", + "core-foundation-sys 0.6.2", + "coreaudio-rs", + "jni 0.17.0", + "js-sys", + "lazy_static", + "libc", + "mach 0.3.2", + "ndk", + "ndk-glue", + "nix 0.15.0", + "oboe", + "parking_lot", + "stdweb 0.1.3", + "thiserror", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam-channel" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87" +dependencies = [ + "crossbeam-utils", + "maybe-uninit", +] + +[[package]] +name = "crossbeam-utils" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" +dependencies = [ + "autocfg", + "cfg-if 0.1.10", + "lazy_static", +] + +[[package]] +name = "d3d12" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a60cceb22c7c53035f8980524fdc7f17cf49681a3c154e6757d30afbec6ec4" +dependencies = [ + "bitflags", + "libloading 0.6.5", + "winapi 0.3.9", +] + +[[package]] +name = "darling" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "deflate" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" +dependencies = [ + "adler32", + "byteorder", +] + +[[package]] +name = "derivative" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb582b60359da160a9477ee80f15c8d784c477e69c217ef2cdd4169c24ea380f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "discard" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "either" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" + +[[package]] +name = "env_logger" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "erased-serde" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ca8b296792113e1500fd935ae487be6e00ce318952a6880555554824d6ebf38" +dependencies = [ + "serde", +] + +[[package]] +name = "error-chain" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" +dependencies = [ + "backtrace", + "version_check", +] + +[[package]] +name = "euclid" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5337024b8293bdce5265dc9570ef6e608a34bfacbbc87fe1a5dcb5f1dac2f4e2" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" + +[[package]] +name = "fastrand" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5faf057445ce5c9d4329e382b2ce7ca38550ef3b73a5348362d5f24e0c7fe3" +dependencies = [ + "instant", +] + +[[package]] +name = "fetch_unroll" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5c55005e95bbe15f5f72a73b6597d0dc82ddc97ffe2ca097a99dcd591fefbca" +dependencies = [ + "libflate", + "tar", + "ureq", +] + +[[package]] +name = "filetime" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c122a393ea57648015bf06fbd3d372378992e86b9ff5a7a497b076a28c79efe" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "winapi 0.3.9", +] + +[[package]] +name = "fixedbitset" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e08c8bc7575d7e091fe0706963bd22e2a4be6a64da995f03b2a5a57d66ad015" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece68d15c92e84fa4f19d3780f1294e5ca82a78a6d515f1efaabcc144688be00" +dependencies = [ + "matches", + "percent-encoding 2.1.0", +] + +[[package]] +name = "fsevent" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97f347202c95c98805c216f9e1df210e8ebaec9fdb2365700a43c10797a35e63" +dependencies = [ + "bitflags", + "fsevent-sys", +] + +[[package]] +name = "fsevent-sys" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a29c77f1ca394c3e73a9a5d24cfcabb734682d9634fc398f2204a63c994120" +dependencies = [ + "libc", +] + +[[package]] +name = "fuchsia-zircon" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +dependencies = [ + "bitflags", + "fuchsia-zircon-sys", +] + +[[package]] +name = "fuchsia-zircon-sys" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" + +[[package]] +name = "futures" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b3b0c040a1fe6529d30b3c5944b280c7f0dcb2930d2c3062bca967b602583d0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b7109687aa4e177ef6fe84553af6280ef2778bdb7783ba44c9dc3399110fe64" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "847ce131b72ffb13b6109a221da9ad97a64cbe48feb1028356b836b47b8f1748" + +[[package]] +name = "futures-executor" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4caa2b2b68b880003057c1dd49f1ed937e38f22fcf6c212188a121f08cf40a65" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611834ce18aaa1bd13c4b374f5d653e1027cf99b6b502584ff8c9a64413b30bb" + +[[package]] +name = "futures-lite" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6c079abfac3ab269e2927ec048dabc89d009ebfdda6b8ee86624f30c689658" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-macro" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" +dependencies = [ + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f878195a49cee50e006b02b93cf7e0a95a38ac7b776b4c4d9cc1207cd20fcb3d" + +[[package]] +name = "futures-task" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c554eb5bf48b2426c4771ab68c6b14468b6e76cc90996f528c3338d761a4d0d" +dependencies = [ + "once_cell", +] + +[[package]] +name = "futures-util" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d304cff4a7b99cfb7986f7d43fbe93d175e72e704a8860787cc95e9ffd85cbd2" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "getrandom" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee8025cf36f917e6a52cce185b7c7177689b838b7ec138364e50cc2277a56cf4" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "stdweb 0.4.20", + "wasi 0.9.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gfx-auxil" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07cd956b592970f08545b9325b87580eb95a51843b6f39da27b8667fec1a1216" +dependencies = [ + "fxhash", + "gfx-hal", + "spirv_cross", +] + +[[package]] +name = "gfx-backend-dx11" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b0c3b8b2e0a60c1380a7c27652cd86b791e5d8312fb9592a7a59bd437e9532" +dependencies = [ + "arrayvec", + "bitflags", + "gfx-auxil", + "gfx-hal", + "libloading 0.6.5", + "log", + "parking_lot", + "range-alloc", + "raw-window-handle", + "smallvec", + "spirv_cross", + "thunderdome", + "winapi 0.3.9", + "wio", +] + +[[package]] +name = "gfx-backend-dx12" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375014deed24d76b03604736dd899f0925158a1a96db90cbefb9cce070f71af7" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags", + "d3d12", + "gfx-auxil", + "gfx-hal", + "log", + "range-alloc", + "raw-window-handle", + "smallvec", + "spirv_cross", + "winapi 0.3.9", +] + +[[package]] +name = "gfx-backend-empty" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2085227c12b78f6657a900c829f2d0deb46a9be3eaf86844fde263cdc218f77c" +dependencies = [ + "gfx-hal", + "log", + "raw-window-handle", +] + +[[package]] +name = "gfx-backend-metal" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60ba1c77c112e7d35786dbd49ed26f2a76ce53a44bc09fe964935e4e35ed7f2b" +dependencies = [ + "arrayvec", + "bitflags", + "block", + "cocoa-foundation", + "copyless", + "foreign-types", + "gfx-auxil", + "gfx-hal", + "lazy_static", + "log", + "metal", + "objc", + "parking_lot", + "range-alloc", + "raw-window-handle", + "smallvec", + "spirv_cross", + "storage-map", +] + +[[package]] +name = "gfx-backend-vulkan" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a3a63cf61067a09b7d1ac480af3cb2ae0c5ede5bed294607bbd814cb1666c45" +dependencies = [ + "arrayvec", + "ash", + "byteorder", + "core-graphics-types", + "gfx-hal", + "inplace_it", + "lazy_static", + "log", + "objc", + "raw-window-handle", + "smallvec", + "winapi 0.3.9", + "x11", +] + +[[package]] +name = "gfx-descriptor" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8c7afcd000f279d541a490e27117e61037537279b9342279abf4938fe60c6b" +dependencies = [ + "arrayvec", + "fxhash", + "gfx-hal", + "log", +] + +[[package]] +name = "gfx-hal" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d0754f5b7a43915fd7466883b2d1bb0800d7cc4609178d0b27bf143b9e5123" +dependencies = [ + "bitflags", + "raw-window-handle", +] + +[[package]] +name = "gfx-memory" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dccdda5d2b39412f4ca2cb15c70b5a82783a86b0606f5e985342754c8ed88f05" +dependencies = [ + "bit-set", + "fxhash", + "gfx-hal", + "log", + "slab", +] + +[[package]] +name = "gilrs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b64ac678e1174eb012be1cfd409ff2483f23cb79bc880ce4737147245b0fbff" +dependencies = [ + "fnv", + "gilrs-core", + "log", + "stdweb 0.4.20", + "uuid", + "vec_map", +] + +[[package]] +name = "gilrs-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1024d4046c5c67d2adb8c90f6ed235163b58e05d35a63bf699b53f0cceeba2c6" +dependencies = [ + "core-foundation 0.6.4", + "io-kit-sys", + "libc", + "libudev-sys", + "log", + "nix 0.18.0", + "rusty-xinput", + "stdweb 0.4.20", + "uuid", + "vec_map", + "winapi 0.3.9", +] + +[[package]] +name = "gimli" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" + +[[package]] +name = "glam" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8637c7ec4fd0776c51eeab3e0d5d1aa7e440ece3fc2ee7d674e13c957287bfc1" +dependencies = [ + "serde", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "gltf" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6fb0d1d772daf10ea74528c3aeb12215f6d5b820adf2ecfc93a6578d6779c3c" +dependencies = [ + "byteorder", + "gltf-json", + "lazy_static", +] + +[[package]] +name = "gltf-derive" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6636de7bf52227363554f1ca2d9cd180fc666129ddd0933097e1f227dfa7293" +dependencies = [ + "inflections", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "gltf-json" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3fc3deb81e6fa04bf808f6be7c3983229552a95b77f687ad96af00f6d3e7d6c" +dependencies = [ + "gltf-derive", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "guillotiere" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7cccefbf418f663e11e9500326f46a44273dc598210bbedc8bbe95e696531f" +dependencies = [ + "euclid", + "svg_fmt", +] + +[[package]] +name = "hermit-abi" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" + +[[package]] +name = "hexasphere" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00ad921775e70efb68429688766ca130de39af65d5201db760b0e6558bfa8175" +dependencies = [ + "glam", + "lazy_static", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.23.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f0a8345b33b082aedec2f4d7d4a926b845cee184cbe78b703413066564431b" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-iter", + "num-rational", + "num-traits", + "png", + "scoped_threadpool", +] + +[[package]] +name = "inflections" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" + +[[package]] +name = "inotify" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46dd0a94b393c730779ccfd2a872b67b1eb67be3fc33082e733bdb38b5fde4d4" +dependencies = [ + "bitflags", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4563555856585ab3180a5bf0b2f9f8d301a728462afffc8195b3f5394229c55" +dependencies = [ + "libc", +] + +[[package]] +name = "inplace_it" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd01a2a73f2f399df96b22dc88ea687ef4d76226284e7531ae3c7ee1dc5cb534" + +[[package]] +name = "instant" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb1fc4429a33e1f80d41dc9fea4d108a88bec1de8053878898ae448a0b52f613" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "io-kit-sys" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f21dcc74995dd4cd090b147e79789f8d65959cbfb5f0b118002db869ea3bd0a0" +dependencies = [ + "core-foundation-sys 0.6.2", + "mach 0.2.3", +] + +[[package]] +name = "iovec" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +dependencies = [ + "libc", +] + +[[package]] +name = "itoa" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc6f3ad7b9d11a0c00842ff8de1b60ee58661048eb8049ed33c73594f359d7e6" + +[[package]] +name = "jni" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1981310da491a4f0f815238097d0d43d8072732b5ae5f8bd0d8eadf5bf245402" +dependencies = [ + "cesu8", + "combine 3.8.1", + "error-chain", + "jni-sys", + "log", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36bcc950632e48b86da402c5c077590583da5ac0d480103611d5374e7c967a3c" +dependencies = [ + "cesu8", + "combine 4.4.0", + "error-chain", + "jni-sys", + "log", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca059e81d9486668f12d455a4ea6daa600bd408134cd17e3d3fb5a32d1f016f8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin", +] + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" + +[[package]] +name = "libflate" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9135df43b1f5d0e333385cb6e7897ecd1a43d7d11b91ac003f4d2c2d2401fdd" +dependencies = [ + "adler32", + "crc32fast", + "rle-decode-fast", + "take_mut", +] + +[[package]] +name = "libloading" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" +dependencies = [ + "cc", + "winapi 0.3.9", +] + +[[package]] +name = "libloading" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1090080fe06ec2648d0da3881d9453d97e71a45f00eb179af7fdd7e3f686fdb0" +dependencies = [ + "cfg-if 1.0.0", + "winapi 0.3.9", +] + +[[package]] +name = "libm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "lock_api" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +dependencies = [ + "cfg-if 0.1.10", +] + +[[package]] +name = "mach" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86dd2487cdfea56def77b88438a2c915fb45113c5319bfe7e14306ca4cd0b0e1" +dependencies = [ + "libc", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matches" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" + +[[package]] +name = "maybe-uninit" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" + +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" + +[[package]] +name = "metal" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c4e8a431536529327e28c9ba6992f2cb0c15d4222f0602a16e6d7695ff3bccf" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "foreign-types", + "log", + "objc", +] + +[[package]] +name = "minimp3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9684a8c55935322fdab159b5d7a6163b33f6e7d32c4a8a54fe53d1bcfad738db" +dependencies = [ + "minimp3-sys", + "slice-deque", +] + +[[package]] +name = "minimp3-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e21c73734c69dc95696c9ed8926a2b393171d98b3f5f5935686a26a487ab9b90" +dependencies = [ + "cc", +] + +[[package]] +name = "miniz_oxide" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +dependencies = [ + "adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "mio" +version = "0.6.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fce347092656428bc8eaf6201042cb551b8d67855af7374542a92a0fbfcac430" +dependencies = [ + "cfg-if 0.1.10", + "fuchsia-zircon", + "fuchsia-zircon-sys", + "iovec", + "kernel32-sys", + "libc", + "log", + "miow", + "net2", + "slab", + "winapi 0.2.8", +] + +[[package]] +name = "mio-extras" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" +dependencies = [ + "lazycell", + "log", + "mio", + "slab", +] + +[[package]] +name = "miow" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" +dependencies = [ + "kernel32-sys", + "net2", + "winapi 0.2.8", + "ws2_32-sys", +] + +[[package]] +name = "naga" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0873deb76cf44b7454fba7b2ba6a89d3de70c08aceffd2c489379b3d9d08e661" +dependencies = [ + "bitflags", + "fxhash", + "log", + "num-traits", + "spirv_headers", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" +dependencies = [ + "jni-sys", + "ndk-sys", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-glue" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" +dependencies = [ + "android_logger 0.8.6", + "lazy_static", + "libc", + "log", + "ndk", + "ndk-macro", + "ndk-sys", +] + +[[package]] +name = "ndk-macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" +dependencies = [ + "darling", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c44922cb3dbb1c70b5e5f443d63b64363a898564d739ba5198e3a9138442868d" + +[[package]] +name = "net2" +version = "0.2.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ebc3ec692ed7c9a255596c67808dee269f64655d8baf7b4f0638e51ba1d6853" +dependencies = [ + "cfg-if 0.1.10", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "nix" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2e0b4f3320ed72aaedb9a5ac838690a8047c7b275da22711fddff4f8a14229" +dependencies = [ + "bitflags", + "cc", + "cfg-if 0.1.10", + "libc", + "void", +] + +[[package]] +name = "nix" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055" +dependencies = [ + "bitflags", + "cc", + "cfg-if 0.1.10", + "libc", +] + +[[package]] +name = "nom" +version = "5.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af" +dependencies = [ + "memchr", + "version_check", +] + +[[package]] +name = "notify" +version = "5.0.0-pre.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8b946889dfdad884379cd56367d93b6d0ce8889cc027d26a69a3a31c0a03bb5" +dependencies = [ + "anymap", + "bitflags", + "crossbeam-channel", + "filetime", + "fsevent", + "fsevent-sys", + "inotify", + "libc", + "mio", + "mio-extras", + "walkdir", + "winapi 0.3.9", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-integer" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" +dependencies = [ + "derivative", + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "object" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d3b63360ec3cb337817c2dbd47ab4a0f170d285d8e5a2064600f3def1402397" + +[[package]] +name = "oboe" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6a13c9fe73346ff3cee5530b8dd9da1ce3e13cb663be210af3938a2a1dd3eab" +dependencies = [ + "jni 0.14.0", + "ndk", + "ndk-glue", + "num-derive", + "num-traits", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ff7a51600eabe34e189eec5c995a62f151d8d97e5fbca39e87ca738bb99b82" +dependencies = [ + "fetch_unroll", +] + +[[package]] +name = "once_cell" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0" + +[[package]] +name = "owned_ttf_parser" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb477c7fd2a3a6e04e1dc6ca2e4e9b04f2df702021dc5a5d1cf078c587dc59f7" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + +[[package]] +name = "parking_lot" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c361aa727dd08437f2f1447be8b59a33b0edd15e0fcee698f935613d9efbca9b" +dependencies = [ + "cfg-if 0.1.10", + "cloudabi", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi 0.3.9", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "pin-project" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee41d838744f60d959d7074e3afb6b35c7456d0f61cad38a24e35e6553f73841" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81a4ffa594b66bff340084d4081df649a7dc049ac8d7fc458d8e628bfbbb2f86" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + +[[package]] +name = "png" +version = "0.16.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfe7f9f1c730833200b134370e1d5098964231af8450bce9b78ee3ab5278b970" +dependencies = [ + "bitflags", + "crc32fast", + "deflate", + "miniz_oxide 0.3.7", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" + +[[package]] +name = "proc-macro-crate" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" +dependencies = [ + "toml", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" + +[[package]] +name = "proc-macro-nested" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eba180dafb9038b050a4c280019bbedf9f2467b61e5d892dcad585bb57aadc5a" + +[[package]] +name = "proc-macro2" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "qstring" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e" +dependencies = [ + "percent-encoding 2.1.0", +] + +[[package]] +name = "quote" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.15", + "libc", + "rand_chacha", + "rand_core", + "rand_hc", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.15", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core", +] + +[[package]] +name = "range-alloc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a871f1e45a3a3f0c73fb60343c811238bb5143a81642e27c2ac7aac27ff01a63" + +[[package]] +name = "raw-window-handle" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211" +dependencies = [ + "libc", +] + +[[package]] +name = "rectangle-pack" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e509b8eba9ca1884760ad1e2161cece724d4fd2b4cb47ddc01706920c6500cd7" + +[[package]] +name = "redox_syscall" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" + +[[package]] +name = "regex" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-syntax" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" + +[[package]] +name = "ring" +version = "0.16.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72b84d47e8ec5a4f2872e8262b8f8256c5be1c938a7d6d3a867a3ba8f722f74" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi 0.3.9", +] + +[[package]] +name = "rle-decode-fast" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac" + +[[package]] +name = "rodio" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9683532495146e98878d4948fa1a1953f584cd923f2a5f5c26b7a8701b56943" +dependencies = [ + "cpal", + "minimp3", +] + +[[package]] +name = "ron" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8a58080b7bb83b2ea28c3b7a9a994fd5e310330b7c8ca5258d99b98128ecfe4" +dependencies = [ + "base64 0.12.3", + "bitflags", + "serde", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver", +] + +[[package]] +name = "rustls" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b25a18b1bf7387f0145e7f8324e700805aade3842dd3db2e74e4cdeb4677c09e" +dependencies = [ + "base64 0.10.1", + "log", + "ring", + "sct", + "webpki", +] + +[[package]] +name = "rusty-xinput" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2aa654bc32eb9ca14cce1a084abc9dfe43949a4547c35269a094c39272db3bb" +dependencies = [ + "lazy_static", + "log", + "winapi 0.3.9", +] + +[[package]] +name = "ryu" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "sct" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "serde" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88fa983de7720629c9387e9f517353ed404164b1e482c970a90c1a4aaf7dc1a" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd1ae72adb44aab48f325a02444a5fc079349a8d804c1fc922aed3f7454c74e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcac07dbffa1c65e7f816ab9eba78eb142c6d44410f4eeba1e26e4f5dfa56b95" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" + +[[package]] +name = "shaderc" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b8aeaae10b9bda5cba66736a7e265f67698e912e1cc6a4678acba286e22be9" +dependencies = [ + "libc", + "shaderc-sys", +] + +[[package]] +name = "shaderc-sys" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b12d7c62d6732884c9dfab587503fa3a795b108df152415a89da23812d4737e" +dependencies = [ + "cmake", + "libc", +] + +[[package]] +name = "shlex" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2" + +[[package]] +name = "slab" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" + +[[package]] +name = "slice-deque" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ef6ee280cdefba6d2d0b4b78a84a1c1a3f3a4cec98c2d4231c8bc225de0f25" +dependencies = [ + "libc", + "mach 0.3.2", + "winapi 0.3.9", +] + +[[package]] +name = "smallvec" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acad6f34eb9e8a259d3283d1e8c1d34d7415943d4895f65cc73813c7396fc85" +dependencies = [ + "serde", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spirv-reflect" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecc7af6a7d3ca6d15f4d6b5077df89c77ad1f4b314d0cabee221656d041dad7" +dependencies = [ + "bitflags", + "cc", + "num-traits", + "serde", + "serde_derive", + "spirv_headers", +] + +[[package]] +name = "spirv_cross" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea964c42ce40326fe96111918abe71fa45076da1ea85769f3f1ab1cda9a1d496" +dependencies = [ + "cc", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "spirv_headers" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f5b132530b1ac069df335577e3581765995cba5a13995cdbbdbc8fb057c532c" +dependencies = [ + "bitflags", + "num-traits", +] + +[[package]] +name = "stdweb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" + +[[package]] +name = "stdweb" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" +dependencies = [ + "discard", + "rustc_version", + "serde", + "serde_json", + "stdweb-derive", + "stdweb-internal-macros", + "stdweb-internal-runtime", + "wasm-bindgen", +] + +[[package]] +name = "stdweb-derive" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "serde_derive", + "syn", +] + +[[package]] +name = "stdweb-internal-macros" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" +dependencies = [ + "base-x", + "proc-macro2", + "quote", + "serde", + "serde_derive", + "serde_json", + "sha1", + "syn", +] + +[[package]] +name = "stdweb-internal-runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" + +[[package]] +name = "storage-map" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418bb14643aa55a7841d5303f72cf512cfb323b8cc221d51580500a1ca75206c" +dependencies = [ + "lock_api", +] + +[[package]] +name = "stretch" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0dc6d20ce137f302edf90f9cd3d278866fd7fb139efca6f246161222ad6d87" +dependencies = [ + "lazy_static", + "libm", +] + +[[package]] +name = "strsim" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" + +[[package]] +name = "svg_fmt" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" + +[[package]] +name = "syn" +version = "1.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "take_mut" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" + +[[package]] +name = "tar" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "489997b7557e9a43e192c527face4feacc78bfbe6eed67fd55c4c9e381cba290" +dependencies = [ + "filetime", + "libc", + "redox_syscall", + "xattr", +] + +[[package]] +name = "thiserror" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e9ae34b84616eedaaf1e9dd6026dbe00dcafa92aa0c8077cb69df1fcfe5e53e" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ba20f23e85b10754cd195504aebf6a27e2e6cbe28c17778a0c930724628dd56" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "thunderdome" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7572415bd688d401c52f6e36f4c8e805b9ae1622619303b9fa835d531db0acae" + +[[package]] +name = "time" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi 0.3.9", +] + +[[package]] +name = "tinyvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b78a366903f506d2ad52ca8dc552102ffdd3e937ba8a227f024dc1d1eae28575" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "toml" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75cf45bb0bef80604d001caaec0d09da99611b3c0fd39d3080468875cdb65645" +dependencies = [ + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27" +dependencies = [ + "cfg-if 0.1.10", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f50de3927f93d202783f4513cda820ab47ef17f624b03c096e86ef00c67e6b5f" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "ttf-parser" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7622061403fd00f0820df288e5a580e87d3ce15a1c4313c59fd1ffb77129903f" + +[[package]] +name = "typed-arena" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0685c84d5d54d1c26f7d3eb96cd41550adb97baed141a761cf335d3d33bcd0ae" + +[[package]] +name = "unicode-bidi" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" +dependencies = [ + "matches", +] + +[[package]] +name = "unicode-normalization" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1e9a0b71dba18b6fa17c7b3dcf1440bb3522552deb2f84bf47dabd9fb7e5570" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" + +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "ureq" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "801125e6d1ba6864cf3a5a92cfb2f0b0a3ee73e40602a0cd206ad2f3c040aa96" +dependencies = [ + "base64 0.11.0", + "chunked_transfer", + "cookie", + "lazy_static", + "qstring", + "rustls", + "url 2.2.0", + "webpki", + "webpki-roots", +] + +[[package]] +name = "url" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a" +dependencies = [ + "idna 0.1.5", + "matches", + "percent-encoding 1.0.1", +] + +[[package]] +name = "url" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5909f2b0817350449ed73e8bcd81c8c3c8d9a7a5d8acba4b27db277f1868976e" +dependencies = [ + "form_urlencoded", + "idna 0.2.0", + "matches", + "percent-encoding 2.1.0", +] + +[[package]] +name = "uuid" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" +dependencies = [ + "rand", + "serde", +] + +[[package]] +name = "vec-arena" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eafc1b9b2dfc6f5529177b62cf806484db55b32dc7c9658a118e11bbeb33061d" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +dependencies = [ + "same-file", + "winapi 0.3.9", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasm-bindgen" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ac64ead5ea5f05873d7c12b545865ca2b8d28adfc50a49b84770a3a97265d42" +dependencies = [ + "cfg-if 0.1.10", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7866cab0aa01de1edf8b5d7936938a7e397ee50ce24119aef3e1eaa3b6171da" +dependencies = [ + "cfg-if 0.1.10", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307" + +[[package]] +name = "web-sys" +version = "0.3.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bf6ef87ad7ae8008e15a355ce696bed26012b7caa21605188cfd8214ab51e2d" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab146130f5f790d45f82aeeb09e55a256573373ec64409fc19a6fb82fb1032ae" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "webpki-roots" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91cd5736df7f12a964a5067a12c62fa38e1bd8080aff1f80bc29be7c80d19ab4" +dependencies = [ + "webpki", +] + +[[package]] +name = "wgpu" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "549160f188eef412ac978499ddf0ceadad4c9159bb1160f9e6b9d4cc8ee977dc" +dependencies = [ + "arrayvec", + "futures", + "gfx-backend-vulkan", + "js-sys", + "objc", + "parking_lot", + "raw-window-handle", + "smallvec", + "tracing", + "typed-arena", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea487deeae90e06d77eb8e6cef945247774e7c0a0a226d238b31e90633594365" +dependencies = [ + "arrayvec", + "bitflags", + "copyless", + "fxhash", + "gfx-backend-dx11", + "gfx-backend-dx12", + "gfx-backend-empty", + "gfx-backend-metal", + "gfx-backend-vulkan", + "gfx-descriptor", + "gfx-hal", + "gfx-memory", + "naga", + "parking_lot", + "raw-window-handle", + "smallvec", + "thiserror", + "tracing", + "wgpu-types", +] + +[[package]] +name = "wgpu-types" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e3529528e608b54838ee618c3923b0f46e6db0334cfc6c42a16cf4ceb3bdb57" +dependencies = [ + "bitflags", +] + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winit" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5bc559da567d8aa671bbcd08304d49e982c7bf2cb91e10288b9188931c1b772" +dependencies = [ + "bitflags", + "cocoa", + "core-foundation 0.9.1", + "core-graphics 0.22.1", + "core-video-sys", + "dispatch", + "instant", + "lazy_static", + "libc", + "log", + "mio", + "mio-extras", + "ndk", + "ndk-glue", + "ndk-sys", + "objc", + "parking_lot", + "percent-encoding 2.1.0", + "raw-window-handle", + "wasm-bindgen", + "web-sys", + "winapi 0.3.9", + "x11-dl", +] + +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi 0.3.9", +] + +[[package]] +name = "ws2_32-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +dependencies = [ + "winapi 0.2.8", + "winapi-build", +] + +[[package]] +name = "x11" +version = "2.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ecd092546cb16f25783a5451538e73afc8d32e242648d54f4ae5459ba1e773" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8" +dependencies = [ + "lazy_static", + "libc", + "maybe-uninit", + "pkg-config", +] + +[[package]] +name = "xattr" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" +dependencies = [ + "libc", +] diff --git a/2020/Cargo.toml b/2020/Cargo.toml new file mode 100644 index 0000000..8a7f35d --- /dev/null +++ b/2020/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "advent-of-code-2020" +version = "0.1.0" +authors = ["Justin Wernick <justin@worthe-it.co.za>"] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +bevy = "0.3.0" +thiserror = "1.0.22"
\ No newline at end of file diff --git a/2020/inputs/day_1.txt b/2020/inputs/day_1.txt new file mode 100644 index 0000000..fbbfa17 --- /dev/null +++ b/2020/inputs/day_1.txt @@ -0,0 +1,200 @@ +1337 +1906 +2007 +1939 +818 +1556 +2005 +1722 +1484 +1381 +1682 +1253 +1967 +1718 +2002 +1398 +1439 +1689 +1746 +1979 +1985 +1387 +1509 +1566 +1276 +1625 +1853 +882 +1750 +1390 +1731 +1555 +1860 +1675 +1457 +1554 +1506 +1639 +1543 +1849 +1062 +1869 +1769 +1858 +1916 +1504 +1747 +1925 +1275 +1273 +1383 +1816 +1814 +1481 +1649 +1993 +1759 +1949 +1499 +1374 +1613 +1424 +783 +1765 +1576 +1933 +1270 +1844 +1856 +1634 +1261 +1293 +1741 +668 +1573 +1599 +1877 +1474 +1918 +476 +1515 +1029 +202 +1589 +1867 +1503 +1582 +1605 +1557 +587 +1462 +1955 +1806 +1834 +1739 +1343 +1594 +1622 +1972 +1527 +1798 +1719 +1866 +134 +2000 +1992 +1966 +1909 +1340 +1621 +1921 +1256 +1365 +1314 +1748 +1963 +1379 +1627 +1848 +1977 +1917 +1826 +1716 +1631 +1404 +1936 +1677 +1661 +1986 +1997 +1603 +1932 +1780 +1902 +2009 +1257 +1871 +1362 +1662 +1507 +1255 +1539 +1962 +1886 +1513 +1264 +1873 +1700 +807 +1426 +1697 +1698 +1519 +1791 +1240 +1542 +1497 +1761 +1640 +1502 +1770 +1437 +1333 +1805 +1591 +1644 +1420 +1809 +1587 +1421 +1540 +1942 +470 +1940 +1831 +1247 +1632 +1975 +1774 +1919 +1829 +1944 +1553 +1361 +1483 +1995 +1868 +1601 +1552 +1854 +1490 +1855 +1987 +1538 +1389 +1454 +1427 +1686 +1456 +1974 diff --git a/2020/inputs/day_10.txt b/2020/inputs/day_10.txt new file mode 100644 index 0000000..fa8ea01 --- /dev/null +++ b/2020/inputs/day_10.txt @@ -0,0 +1,111 @@ +71 +183 +111 +89 +92 +142 +25 +101 +52 +86 +18 +22 +70 +2 +135 +163 +34 +143 +153 +35 +144 +24 +23 +94 +100 +102 +17 +57 +76 +182 +134 +38 +7 +103 +66 +31 +11 +121 +77 +113 +128 +82 +99 +148 +137 +41 +32 +48 +131 +60 +127 +138 +73 +28 +10 +84 +180 +63 +125 +53 +176 +165 +114 +145 +152 +72 +107 +167 +59 +164 +78 +126 +118 +136 +83 +79 +58 +14 +106 +69 +51 +39 +157 +42 +177 +173 +93 +141 +3 +33 +13 +19 +45 +154 +95 +170 +54 +181 +6 +151 +1 +112 +96 +115 +85 +108 +166 +160 +40 +122 +12 diff --git a/2020/inputs/day_11.txt b/2020/inputs/day_11.txt new file mode 100644 index 0000000..977ae5f --- /dev/null +++ b/2020/inputs/day_11.txt @@ -0,0 +1,90 @@ +LLLLL.LLLLLL.LLLLLLLLL.LLL.LL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLL.LLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLL +LLLLL.L.LLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLL.L.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +L.LL.L.L.LL.....L.L..L.LL.L.L.L.....L..LLL.L.....L.L...LL..L.....L...L..L.LLLL..L.LL......L.L.L. +LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLL. +LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +......LL..LLLL.L...LL.....L.L.......L..L.LL....L.LLL........L.L.L.LL.....L.........L....L......L +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL..LLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.L.LLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.L.LLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLL..LLLLL.LLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +.L...L...L.....L...L....L.LL.LLL.LL...LL.L..L...L......L..LL..L..LL..L.L......L.L.LLL......L.L.. +LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLL.LLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLL.L.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLL.LLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LL.LL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +...........LLL.....LLL.....LL.L..........L..L.L.L...L.L.....L........L......L..L..L...LL....L.L. +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLL.LLLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLL.LLLL.L.LLLL.LLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLL.LLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLL.LLLL.LLLLLLL.L.LLLLLLLL +LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.L.LLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +.LLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLL.LLLLLLLLLLLLL +L.......LL...LL...L..L.....L..LL..L.L.LLL.L.L..L.LL.L.........L....LLLL..LL..L.L..L..LLLL..LL.L. +LLLLL.LLLLLL.LLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLL..LLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +....LLL.LL....L.L.........L.L............L..L...L.LLLL......L...L.L..L....L.......L..L.......... +LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL..LLLLLLLL.LLLLLL.LL.L.LLLLL.LLLLLL.LLLLLL.LLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LL.L.LLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.L..LLL..LLLLLLLLL.LLLLLL.LLLL.L.LLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLL..LLLLL.LLLLLLLLL.LLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +.L..LLLL..L.L.LLL.......LL.LL.LL......L.L....L.LLL.......L...L.L.LL...LL.....L.L....L.L...L.L... +LLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLL +LLLLL.LL.LLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLL..LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL..LLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLL.LL +LLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLL +LLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLL +.L..L..LLL....LL......LL.L.L..LL..LL....L...L..L.L.L...L..L..L.LLLL.L....L.....L..L...L...LLL... +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.L.LLLLLL.LLLL.LLL.LLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LL.LLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLL..LLLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLLLLL.L.LLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +..LL.LL.L.LL.L...L..L..L..L...LL........L......LL.LLLL.......L..LLL.L.L....L.....L..LL..L.LL.LL. +LLLLL.LLLL.L.LLLLL.LLL.LLLLLL.LLLLLLL.LL.LLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL..LLLLL.LLLLLLL.LLLL.LLLLLLLLLLL.LLLL..LLLL.LLLLLLLLLLL.LLLLLLLLLLLLL.LLLL +LLLLL.LLLLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLL..LLLLLLLLLLLLLLL.L.LLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LL.LL.LLL.LL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL..LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +.LL..LL.L.LL......L.L.LL...L..LL..LL...L..L.L..LL...L.L..L.....L.LLL..L..LL.L..L.......L..LLL... +LLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL..LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL..LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLL.LLLLLLLLL.LLLL.LLL.L.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL +LLLLL.LLL.LL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LL.LLL.LLLL.LLLLL.LLLLLL.LL.L.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +.L.L....LLL.L.L........L..L....L..L...LL..L..LLL..L.L....L..L.LL....LL.L.L.....L........L..L.L.. +LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LLL +LLLLL.LLLLLL.LLLLLLLLLLLLLL.L.LLLLLLL.LLLLLLLL.LLLLLLL.LLLL.LLLLL.LLLLLL.LLLL.LLLLL.LL..LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.L.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLLLLLLLLL.LLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLL +LLLL..L.LLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL +LLLLL..LLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLL..LLLLLLLLL.LLLLLLLL +LLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.L.LL..LLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL diff --git a/2020/inputs/day_12.txt b/2020/inputs/day_12.txt new file mode 100644 index 0000000..d7bc269 --- /dev/null +++ b/2020/inputs/day_12.txt @@ -0,0 +1,755 @@ +F93 +R90 +F81 +E3 +F80 +R90 +W4 +R90 +F64 +N1 +R90 +W4 +F11 +W1 +L180 +F28 +R90 +W4 +L180 +F95 +N3 +F71 +L90 +W1 +F1 +E2 +L90 +F85 +W3 +L90 +F28 +E3 +N5 +F47 +S2 +R90 +N2 +L90 +W4 +L180 +W3 +F51 +F77 +L90 +W5 +N5 +W3 +S5 +W5 +R180 +N1 +W3 +S5 +F36 +W1 +F34 +N4 +F40 +E2 +S3 +R90 +W5 +S2 +N4 +R90 +S2 +L90 +N4 +L90 +S2 +E1 +F2 +N4 +F65 +N1 +F46 +R180 +F60 +N4 +F45 +R90 +S3 +L90 +F70 +W4 +L270 +N4 +F49 +E3 +F52 +R180 +F5 +E5 +R90 +F43 +L90 +S4 +F54 +N1 +F7 +S2 +F91 +S4 +N3 +E3 +S4 +L180 +F15 +S2 +F90 +W5 +S2 +F80 +N4 +L90 +R90 +N4 +E2 +R180 +E5 +F62 +L90 +N5 +F77 +N5 +F75 +E2 +L90 +S4 +F55 +E1 +N5 +F57 +R90 +F6 +L90 +N3 +E5 +L180 +N2 +L270 +N5 +F8 +E2 +F88 +E3 +N3 +E4 +R90 +N1 +W5 +R90 +N4 +E3 +S3 +R90 +N1 +E2 +F4 +N4 +R90 +N3 +W5 +L180 +E1 +F2 +N4 +W5 +F80 +S4 +F7 +L180 +F96 +L90 +F16 +L90 +E4 +F78 +W2 +R90 +S3 +F29 +W4 +R90 +E4 +F39 +N1 +F48 +E4 +L180 +E1 +R180 +E2 +R90 +N3 +R180 +W2 +N5 +W5 +E3 +F25 +E1 +L180 +N5 +F44 +L90 +N4 +W4 +L90 +F72 +L90 +S1 +E5 +N5 +R90 +N1 +W3 +S5 +R90 +W1 +F14 +L90 +W2 +R90 +W3 +F76 +S5 +W5 +F93 +W4 +R90 +F57 +E3 +R90 +S3 +W1 +R90 +S3 +F8 +R90 +N2 +F46 +W4 +S1 +L90 +E4 +W5 +L90 +W2 +F69 +N5 +W5 +F80 +N3 +E4 +L90 +E4 +F25 +S3 +R180 +F77 +R90 +W2 +F19 +E4 +L180 +W2 +F37 +S2 +F68 +L90 +E2 +F66 +S1 +R90 +F66 +E2 +L180 +F97 +N3 +W4 +F43 +S4 +R180 +N1 +R270 +E3 +N2 +N3 +F65 +L90 +S2 +L90 +N3 +L90 +S3 +F23 +L270 +W3 +S5 +E2 +R90 +S1 +F85 +N3 +R90 +W4 +F58 +E1 +L90 +N3 +L90 +E2 +S1 +F14 +E2 +N5 +W1 +N3 +E1 +L90 +E3 +F43 +E3 +N3 +F21 +E4 +F53 +E2 +L180 +E4 +F20 +E2 +N2 +E5 +L90 +N4 +W3 +N4 +S2 +L90 +W3 +F96 +L90 +S3 +R90 +N1 +E3 +S5 +L270 +F41 +N5 +W5 +S1 +W5 +R90 +F79 +W3 +L90 +E3 +F22 +N1 +L90 +E2 +L90 +R90 +F20 +L90 +W3 +R90 +W2 +L180 +W4 +F57 +R180 +N3 +L90 +F36 +L90 +E2 +R90 +N2 +E3 +N1 +W4 +W4 +N3 +E5 +F54 +R180 +F98 +W1 +R90 +F21 +S1 +L90 +S2 +L90 +S2 +F90 +E4 +S2 +R90 +N5 +F25 +N4 +W3 +N2 +F27 +S3 +E3 +N3 +F15 +L180 +S4 +F62 +W2 +L180 +E2 +N2 +L90 +R90 +F97 +R90 +S1 +R90 +E2 +F16 +W2 +E1 +F89 +W1 +L180 +S3 +W2 +S3 +E1 +F92 +F30 +N1 +E2 +S1 +F76 +E1 +S5 +W5 +F28 +W4 +L90 +F44 +E4 +N5 +F25 +R90 +F59 +S4 +F58 +S2 +F19 +W5 +S4 +E5 +N3 +F37 +E1 +L90 +F40 +E5 +F56 +S2 +W5 +F73 +N5 +F2 +L90 +F18 +E2 +N5 +L90 +F56 +R90 +F18 +W1 +S5 +E1 +N1 +L90 +W2 +E4 +N4 +E1 +W4 +N4 +L90 +N3 +R90 +W5 +S5 +F2 +R180 +F96 +R90 +W3 +F26 +L90 +S4 +E2 +F43 +S2 +R90 +F61 +W5 +F93 +R90 +F95 +L90 +E4 +R90 +N4 +F47 +R90 +W5 +L90 +F42 +L90 +W5 +F87 +R90 +N1 +N2 +E4 +F64 +S5 +L270 +F86 +S4 +W3 +S1 +L90 +F72 +R270 +W1 +F17 +S1 +E2 +R90 +W1 +N1 +F42 +N5 +L90 +F87 +F66 +L90 +N2 +W2 +L90 +S5 +F7 +R90 +N4 +L270 +F2 +W1 +N4 +F94 +W5 +R180 +S4 +F15 +E4 +F76 +N1 +E2 +F68 +S3 +F50 +R270 +E5 +F77 +R90 +S3 +E2 +N3 +S4 +F39 +S1 +E5 +S3 +L90 +E4 +S2 +W3 +F54 +R90 +F44 +L90 +W3 +F59 +R90 +N3 +F37 +E1 +F75 +R90 +F31 +W3 +F70 +S5 +L90 +E1 +F67 +W4 +L90 +S1 +W5 +S1 +S4 +W2 +E2 +S3 +R90 +S2 +E5 +L90 +F43 +R90 +E1 +S5 +F42 +L90 +W1 +N2 +E1 +L180 +S4 +W1 +L90 +F81 +E1 +R180 +N5 +R180 +N5 +L180 +F65 +R90 +F64 +W4 +S4 +R90 +F70 +E1 +S1 +F50 +E2 +S4 +E4 +N2 +S1 +R90 +E4 +R90 +F70 +R90 +N4 +F71 +R180 +F80 +S3 +L90 +N5 +L180 +F11 +N1 +R90 +W2 +N1 +R90 +W4 +R90 +F67 +W3 +R90 +W5 +L90 +E4 +F90 +L90 +N4 +L180 +F48 +R90 +W2 +F94 +R90 +N4 +L90 +W2 +F2 +L90 +W1 +E5 +S2 +W5 +S5 +E2 +N3 +W5 +N1 +F98 +S3 +W3 +L90 +S3 +W4 +R90 +W1 +F64 +N5 +R90 +S5 +W5 +F84 +S1 +E3 +L90 +S3 +E5 +F6 +N4 +W1 +R90 +E4 +F14 +N1 +R90 +F31 +L90 +F24 +F4 +N4 +F54 +S3 +R270 +F98 +E1 +L180 +F2 +E4 +F70 +W1 +R180 +N5 +F23 diff --git a/2020/inputs/day_2.txt b/2020/inputs/day_2.txt new file mode 100644 index 0000000..3a0963f --- /dev/null +++ b/2020/inputs/day_2.txt @@ -0,0 +1,1000 @@ +15-16 l: klfbblslvjclmlnqklvg +6-13 h: pghjchdxhnjhjd +4-13 n: nnznntzznqnzbtzj +10-16 r: nrrrrkrjtxwrrrwx +1-6 t: rttftttttttttmdttttt +4-12 l: zhllfxlmvqtnhx +6-8 d: wxpwgdbjtffddkb +7-9 q: rqcqxjqhsm +6-8 x: xxxfxdxxx +5-9 d: dwnwnbsddfmc +2-6 j: jvdrrjchml +8-10 x: xxxcxxxzxxxxx +15-16 f: ffffffffffffffnfc +3-12 v: vgvvvvvvvvfqvvvv +2-5 p: tknppm +11-12 r: frrnrfqtshrgw +13-16 f: rfjmkrqkqrxmfnqj +3-5 f: ffffxffn +2-4 f: fffwf +11-13 s: srslssshssssx +1-6 c: cccdcn +2-6 t: tthhnc +12-17 w: wwwwwwwwwwwmwwwwg +5-6 k: kqkksskkp +4-5 p: ppppx +5-12 h: hbjhqhdwnqxhhsh +6-8 p: ppgzpppw +3-4 z: zzcz +6-15 x: hfvxxsqbfxxlhpxtb +4-7 m: qmxzhgt +18-20 b: fvzbbrbcvskxrpkwnmwb +1-11 c: ccccccccccggccc +1-3 p: dppp +2-6 j: fjbmljmdb +2-4 l: slpmqpk +3-5 b: stbpbbndtgzxlsnbdk +6-11 h: hlzkdhhhrhchmhbhl +1-4 w: wwpv +10-12 p: pmpppkpppgph +11-14 f: fbdxffpffffffkfffjvf +4-9 v: vkvfhfvvrvvv +16-17 t: tmtbztrptdlvttvkt +2-6 w: wwwwphwwwwnwwj +6-11 x: xxxxxxxxxxkxx +9-10 t: ttftchttnd +2-9 w: wkwwwwwwlww +2-4 g: ggvcgggggggggg +5-6 d: dldddsddddddd +5-8 j: jddjjnld +9-12 l: xldxlklvlkll +2-3 w: xwnrwdwndlvl +16-18 m: mmmmrmmmmmrvvmmvmm +3-4 t: ctts +11-12 b: ndgjdbppcdbhhssw +2-11 s: nssksssnssxvq +2-5 g: qggwcvf +10-14 l: llxlllrjlmlllwllll +8-9 w: wwwwfpwtvtjwjw +8-10 m: mmmmmmmmmmm +1-11 z: rldjzzzpzzs +16-17 v: qvsrnvvvwxgmvjjcvhcx +14-18 k: kkkkkkkkkkkkkkkkklk +2-3 q: qqrqqqxqqqq +4-9 c: lclckhcgn +2-3 b: nbbbbldlbbb +15-18 v: vtvvrvxvvnvxhvnvvv +4-7 q: qqqnqqqq +3-13 j: svjjdcnkwnbpl +4-11 q: blnqvqsngwj +3-4 j: dxdkj +5-7 c: dzxbsctqwclcgc +3-4 f: jfhffff +3-5 t: sttwk +7-8 t: tnqtvsztqwpvtftknt +1-12 r: grrrrrrrrrrrrrrr +7-8 k: kkkkkkqkk +3-4 l: llls +1-14 h: khhhjhhhhhhhhh +3-5 d: ttcdddd +1-7 w: dqwhwkww +4-5 p: pppqppppp +10-14 l: lqlltwlllllllzjk +15-17 d: ddddddddddddddddcdd +1-8 z: xpbbjxrzlzznxlz +1-2 v: vrvv +7-11 l: llllllclllslll +3-14 h: hhvhhhhhhhhhhhh +6-7 m: mmgpbjmgqmm +9-13 h: hhhhhhhhhhhhfnhhhhwh +12-17 c: cccpfcccccnccccqscc +6-12 x: kqfxbhxbdxxxl +6-8 z: zqkbtzzb +6-8 l: llllllllllllll +6-13 d: wdzdxdddddlzdtbd +3-8 h: gzcknrxkjgtggnqwqjs +1-6 t: tttttvtt +5-8 x: fjxnxrtn +6-9 z: zzzzzzzzszzz +2-4 v: vpvvtv +1-7 w: wcwrxgf +2-3 t: vxftld +1-2 n: nnxmntsqzk +5-11 l: nmvllllnlckl +7-13 c: cwchccjcrfsccc +2-3 z: dzdz +7-8 s: sddgbhws +3-11 w: qqsqrgmwwmwgfdhpsct +16-17 q: qqqqzqqqqqqqqqqqh +7-15 h: thqthdphmbhhjphhh +6-10 k: gcflljjwkk +9-17 f: ffffffffffffffffdf +10-12 q: qqqqbqlpqqfdqq +3-16 x: dbxmwtlqdmvldxlgxdhk +1-2 x: xxjxh +10-11 p: ppqpppkpptp +3-5 w: wwwwwwwww +10-11 j: xjmhqgdznjf +9-11 n: dxnnnnnnnnmnnn +1-5 l: mlllvllwlrblllll +14-16 q: tqqqqqqwqqqqqmqqqqq +2-3 b: nvbbbcf +5-8 x: xmkxxgxq +1-4 x: xxxfx +1-6 n: nnnrnm +9-17 p: pppppppppppppppppp +2-4 d: ddqd +13-14 p: fmpkxpprppppzhpp +5-6 t: tttttgrttt +10-12 r: rrrrrrrrrlrrrrrrrr +4-7 h: gnmqvqrhwhh +4-5 m: smsmmmm +4-5 q: qgzqb +6-12 c: rdnnsccnrjkcnm +4-16 k: gfkxktpwhxzkgcdnb +4-5 f: ffgvf +6-13 n: nfslcrnkksfmnmvcfnnz +15-18 s: sssqsssssmshmsmsss +1-15 v: vvvvwvvxvvvcvvwvvvvv +2-8 h: gphlnhph +4-13 t: vtjvrcxqwbsrk +2-10 t: tvttftzttttqttt +12-13 t: dvsbstlkfpztdqs +7-8 w: rvwncwww +13-16 v: vlqzjlvxljrvvjvvzp +12-13 w: wwwwwwwwnwdwwgwwwx +14-15 d: dcpdddddddddddmdbd +1-3 b: bbdbbbb +11-12 t: rkdtncbtkktzmvtghb +3-7 n: nzbfgbnnx +5-13 v: vsvbkvvvvvvvv +3-8 n: nltdrmbn +14-15 p: mzkmmqdfpcptzbzc +4-6 q: qtqkgqfmqwm +9-10 v: vvdvvxvvxvwd +5-7 m: mmmmmmkm +6-7 k: kkkkkgkk +8-9 h: shhhhhhhh +8-11 p: pppppppppczplbwcpb +11-17 k: kkkkkkkkkkkkkktkc +9-17 w: mwtfbvsfnhwxqqvxw +8-12 j: jhjjjjjrkjnjjjjjjjj +3-5 g: sgfgqgg +12-14 j: jjjjjjjjjjjjjjjjjjjj +1-11 f: jsffffzfffffxffftf +16-17 f: fffffffffftfffffff +2-4 k: klkwkk +5-8 g: gtjngzkhgb +4-7 b: bbbmbbbb +4-5 w: wwwdw +5-15 g: tplhhgmggbhggrllqg +9-13 v: jvvbqvsbvzhxvh +1-3 d: ddsddn +2-5 w: cfwds +7-11 x: xxxxjxvvxvxhxvml +5-6 v: jwqxvb +3-15 s: ssqsssssssssssss +5-9 d: dddddddddddddddd +5-8 l: vklnlclj +10-13 s: sltdlfbssxsss +11-18 j: hxjxjnjcpmkppnpjpjk +4-6 t: ttbzhvt +2-17 v: rzmhrssrjvpncwqwl +2-4 x: mtcxz +11-12 d: dddddddwddbd +2-13 h: whgpdxvkfxrhg +5-7 d: ddddddxdtddddddhdddq +4-8 b: lhcfbkbbdmb +8-15 l: lvtmkgwllqttgplbgjj +3-5 n: nqngjvw +12-19 m: mmmmmmmmmmmmmmmmmmgm +5-9 g: grhgsdcwgmdt +6-9 j: msgrcrfvzksfxxjq +6-10 s: xdssssssssssssssg +8-9 h: hhhnhhnfhh +12-15 f: fffffffffffffffwfff +3-7 p: pzzpbjkfcczbmnpkf +6-7 r: cnjlbhr +2-5 f: dwxcftrbljgstf +5-11 h: hhhhjhhhhhqh +16-18 r: rrrrrrrrrrrrrrrrrmrr +2-4 r: rxmrd +7-9 c: ccccczccccc +7-13 d: ddddddddddddfd +3-11 k: mmkspkltjwm +8-11 c: rvccccgtclc +1-3 v: vvhhv +4-7 t: jttnttgx +4-16 n: nnnjnfnnnnnnnnnnnn +5-6 m: mmmdmqmm +9-10 x: xxxxxxxkxrx +2-4 m: tmcmzjmvtcghlgm +6-7 q: lqqjqqnzqqmq +16-19 k: kjwkhkkjhkskskpnkfk +19-20 b: pbbpsbnbbmnntbnbbbbn +4-5 p: ppppmp +3-4 d: grlqndd +4-7 n: nnnnnnsn +9-12 k: kkkkkkkkfkkkkk +4-10 h: hfhhhxhfhd +4-9 t: ttttxbbbcdmxsrhjj +4-11 l: npxwbsmklbls +17-20 d: dddddwdhdkddjdddtfdd +3-4 s: nldssq +4-8 s: sssdsssgs +5-16 t: ttttprtcttttttzt +9-17 j: tjjtjjjjgljjjcjjfj +7-8 b: bbbbtbkbb +2-13 l: szllllllllxllll +8-11 n: bmpnwrnngnmsfw +1-5 d: jddqtdwddxddjd +10-11 s: hqgnvslssstqdnvs +14-16 p: ppppppppvpplpgpp +2-8 h: khhjfcqp +6-7 d: fxdpdwvdjkd +5-7 n: bnnprnf +9-13 f: vfffwfffffffkfxff +2-10 j: vjhcggzrjqt +5-7 g: gggfggzwgg +5-6 d: ddbsjddfsdnddxfpgdd +12-13 g: gggqjgxgzpgsggxggxk +1-8 l: hlslllllll +12-13 f: sbfftpvbjsmff +6-7 s: hqcthsb +5-11 s: qsstnssssqsrsskdss +2-6 x: hxrfnjfclx +1-2 w: swwwwwwwwwwwjwmwwwww +7-12 s: whsbkgsmvnfjnnkq +10-12 l: fllllllllsllll +8-9 s: lsssssssqs +1-7 p: pdpppghqppxpppppp +1-3 x: jhxmjhkdrxgd +1-7 b: lbxbbbvbwbbbbt +4-5 c: cdckcbcmqcc +5-9 k: kkmklhlmkkgkrld +12-18 x: dvjxqxxxxxdxxxzxhp +5-8 h: nhfhnfqx +15-16 k: kkkkktrkkkkkpkhqxkkd +1-13 j: dcnbwjxllpksj +11-13 v: wvqhznrrfgmnvz +2-5 m: bpjbmbrmfh +10-15 t: mgtttttqspthnttkktt +9-10 n: nnpnnnnpnh +8-10 b: bjbzhbbbcq +4-12 n: nnnvnnnnnnnnnn +13-14 v: zbkchmmvjvsgkvhcz +2-9 j: jdqjgnnjjjvjt +11-16 g: ggggxqglgglfhvgggn +1-2 b: bsbm +8-11 v: lvvvjhvmxvvvv +5-7 x: xxsxxxpr +2-15 t: stwqdkrqcwbmngtd +5-8 r: rcrrvndr +5-6 v: vvvvvr +4-5 x: qpxxr +1-2 k: nkkkkkd +10-13 r: znlqhvwdvrqbrrrfzwc +1-2 h: hwhhhchhhhhhhhhhhh +3-6 b: bbbbbvbbbvbb +13-14 s: ssssssssmssssdss +7-11 x: cwxhmnhzxrxdrzzxbw +5-16 m: rgjtmrqqmfmmckxm +17-18 b: bbbbbbbbbbbbbbbbbk +11-20 k: kppkqkftkgkkknbtglkb +13-14 t: rtcfrkjvtgnrtf +5-6 z: kdzjxzjgmd +2-3 p: rxppj +9-12 b: mtpbbbbbbbbgp +8-9 b: rbbbbbsbbbbxb +13-17 r: rxgbrrnrrrrrrkrrlrrr +8-11 w: pzqswqwcfln +3-4 x: xxxx +6-9 j: fjhkjjklc +6-7 m: ctmzmfm +8-9 l: lllllllgllpts +8-9 t: hgpwblqkvqtb +4-7 d: dddpddd +4-5 c: ccccwcccg +1-7 q: lvvtpqqvnsqbzqpr +8-15 q: qqqqqqqqqqpqqqlqqq +4-8 f: frfffffffxf +7-12 r: rrrrrrrrrrrkprrtrrrp +14-15 j: jsjjjjjjjjjjjjl +6-17 b: khgflbrbrjbgzjtjt +5-7 j: jjknjpw +2-9 h: rhlqbdklh +5-7 j: lrtvccjbzgjh +12-14 t: tltwtxtctttnttttft +8-9 q: qqqqqqqqx +4-15 p: ppppppppppppppc +2-3 v: vvvvv +5-7 h: djvplxb +11-12 g: gjxlvggsgggxsgfgp +5-6 g: gggggfg +1-6 x: wxtxxxxxxxxxx +1-4 r: rqrcrvrzbrxrwjr +9-10 w: wwwmwwwwpww +7-15 z: pzrbrxpzzzzzntzv +4-5 q: qjqwqqnlqhclq +12-16 g: ggccgzggggsggjgg +11-13 b: phbmbsgkvszbbrbb +2-3 l: xhlbhl +1-7 q: qwdqmtv +5-9 x: xxxxjxxxxx +6-8 p: kvpwqbdp +11-13 t: tqttttttttttmt +9-16 l: wzdxdmlxlkfjknnz +1-11 j: vjjjjjjjjjjj +2-18 t: tsttttttttttttttthtt +6-7 n: fnnncnl +3-5 s: lssvgfssgsshsvstsss +3-5 h: hhhbhhh +4-10 x: tsxxxxxxbls +2-4 n: nnjw +17-18 p: bptpftnxjchrwthtppk +14-15 d: dddddddddddddddd +10-14 m: mmmwnmmgmdmmmmmmmmm +8-9 k: pkpqffpkktbgkbk +7-11 l: lllllllllqplllllllll +11-15 n: nnnzngknbnzdnsnnn +2-4 l: vbqm +10-11 w: wwwwwwwwwwq +3-5 x: xxtxxxxx +3-15 b: spbcxjlbbbrbbbbb +4-5 n: nvfsn +13-16 n: bppjnncnbgjndnnntwgs +1-8 t: mttttttttt +6-9 d: jvmssdkdhxsd +9-10 d: gdrllcfdnd +7-11 c: cscxccccnztccccz +15-16 p: pppppkphpppppspg +2-4 n: vnkjlwwsswscmxktnj +9-11 r: rrrrrkrzslr +7-10 t: tttgqtnttttttttt +4-10 b: bbrzbzpbsbnbbjnbsb +7-8 j: jlljxtsj +5-15 z: lzzzfqzzzzzqzzzzzz +10-11 r: rrrrrrrrrrcrrrr +6-8 t: tztpbttttt +2-9 c: vcgtfxfbr +9-16 r: vgjrwcxhrrhbzxnj +17-18 r: bczjtmjwrtzwvmgbrl +5-6 d: dqgddvd +1-2 r: krzrkr +8-9 j: rxjjjjgbj +8-9 c: cjccccccc +13-14 b: bbbbgbbbbbbbbvb +5-6 p: hbhwtp +1-2 w: wfhrfsfbjtpkqcjrwdb +10-13 q: qqqqqqqnqrqqzqq +3-4 m: xcmcz +11-15 d: dldddcddddjddqd +4-10 h: khhlhhhhhhhhhhhh +2-4 d: bdfpmxzqzbzmxmmwg +4-5 l: lgrbl +9-13 s: ssssssssfsssss +7-8 p: pplkpmkppppppxp +3-8 j: jjjjjjjj +7-8 f: jfffffhzfff +2-5 p: pppppppp +8-9 l: tlclllmlz +4-5 m: mtrmx +13-16 x: xxxxsxmxxxxvwxxw +5-8 n: jknnngnv +4-7 p: ppptppgpppp +12-15 r: rrrrrrrrrrrxrrrhr +2-9 s: sssssssssss +5-6 z: zphzzr +13-17 m: mmlmmsmzmsddbxmkb +5-7 g: gggggggg +8-9 f: ndzfvfkfz +2-10 g: wtngwdkcxgrth +6-13 r: rrqrrqrrqrrrcrrrr +1-6 z: hfzzzz +10-13 j: jjjjjjjjjjjjdj +5-11 m: wfqvmhbjhhnmzdlmpjc +6-8 d: clddzxcdghn +8-12 n: qfqbbvkpjbznrz +3-6 r: rrbrrrrrrx +9-10 r: rrrrrrrrrrr +4-5 m: chltmcm +7-8 r: rrrnprrzrhr +3-4 j: jfcj +16-17 n: nnnnnnnnnnnnnnnnwnnn +7-8 r: rrrrrrnfr +4-12 n: nnnnspnlcnmsnnnn +11-12 v: vvvvvvfvvvhvvv +2-8 h: hlhhkhhchhhghh +4-5 t: stntztttmp +3-5 v: vvvmbvhvvvlvn +9-14 x: srxmtbtgxgmqxxxc +4-5 z: zrlgz +10-11 p: phxkvklpmdp +8-15 m: mmmmmmmpmmmmmmm +1-13 h: mzwqkhhhphsgh +17-19 s: qssssmssgfmssmmpssk +6-8 b: bbbbbbbjbb +3-4 l: rllr +2-4 j: kvjj +2-5 n: lnnkrm +15-16 w: wwwkwwwwwwwwwwwc +1-3 c: ccncc +2-5 s: bhppmsttzcscss +1-4 t: tttxtttt +1-9 r: rfrrrbhtxrrbrmrmr +12-13 s: qplrssssmfswrsswss +2-4 h: zrhhhhzhzhch +1-5 g: rgjgg +11-14 t: ttttvftttttqlsttt +3-4 s: sskss +5-15 m: mmmmnmmmmmvmmmm +1-8 j: sjjjjjjj +1-4 c: ccclcc +5-7 d: ddddhdd +2-8 z: tczzjzzzzzzzgz +1-5 s: qsqdz +8-11 z: zhzpzrvzhzkzzgm +5-9 g: nvdfgshgbgltlqggbp +1-12 r: rrrrrrrrrrrrr +3-4 m: xmmb +8-10 j: jjjjdjmjshqjzk +2-4 t: tptttftt +4-13 t: ggqscfggftnxgjpn +4-12 q: hvzjzqsqwqjlqx +7-8 q: qqqlqqqkqq +9-10 f: ffffffffdfff +2-7 k: kgkkkkkk +7-11 t: xbpdkrtplmfbtkwgp +4-7 c: ccccccccc +12-14 d: dddddddddddqdddddd +6-7 k: xhnntkpnbkfwlr +3-5 q: qqxxq +13-17 d: ddddddddddddvddddd +2-3 g: smglpgpflsrbwxcjctb +5-9 z: zjzzznfzf +7-13 l: lmrkvvxtltcnj +15-16 r: vjrrrkzxrrrqrtrpzv +2-7 x: xsxxxxxx +7-14 m: npmnmgdvnqmgrmm +2-4 x: pxxl +7-15 k: nkkkckgwdkffkmb +7-11 n: dznnmcnssmcn +8-10 s: skssgswssmsss +14-16 n: nnnnnnnncdnjnnhwnnn +4-7 g: kggmgggbggggwggcqgng +4-7 g: gggqggggg +1-2 c: cccc +4-8 j: mzzvwjgrbrv +11-12 x: pksjnwlltskxlj +1-9 k: zfkkkksrkkkkkkz +1-6 k: xkkkkknkk +1-6 c: gccccncbccccc +14-15 h: hhhhhrhhgkhhhmhh +7-8 f: qffgnfhf +2-6 m: vmqwxzgsm +5-8 k: kkzjkwkvk +3-4 s: dcsss +2-4 p: jjbps +2-11 z: zjzzzzzzzzzz +4-7 f: bnkhvjfff +13-16 m: mmmmmmmmmmmmjmmmmmm +5-10 t: kdwjmcgtvtdttmtvw +3-12 j: jjljwjfjjjjjnhjjjjc +13-14 f: fffffflffxfffbf +2-6 m: zmhmsm +4-18 n: nnnvnnnnnhnnnfnnnhnn +3-6 n: xznnsnn +7-11 g: ggggpgggggggsg +6-8 l: llllltllll +4-5 s: ssnttsrs +6-14 w: wwwwwwwwwwwpwlwwww +9-12 q: pxqvswnqqbsqvgsd +1-4 j: mjjjjz +9-19 f: fffffffflfffffffffff +2-6 t: rttqtstct +6-9 d: dddddtddddd +7-12 l: lllllllllllllll +1-12 p: gppppppplpppppp +1-4 s: fslssssssfcd +6-7 v: wvvzffggdfvbvvv +2-7 t: kkwgspt +6-16 n: nncbnnnntwrxlzzwdrsj +3-4 z: zzszzhrqwngprjt +4-5 v: vkvvvcfjc +4-5 j: hcjtj +2-4 k: kqkkkkkkkksk +7-9 g: gzgmgpgkv +5-9 s: kjnwsrjrzssssdlnsqs +2-8 j: jtjxxgmjkjx +5-12 r: bfrcrtjkzqffsjtvwj +1-2 v: xvvvmvvvv +5-9 v: vzrgdldfvx +3-5 m: mqsfmmlmvdfj +12-15 v: wswvvbqqhlvqvwx +6-7 b: bbmjdhb +2-4 b: hbjmjr +6-7 n: pnnnnln +13-15 z: zzlgzpmztfzqzzl +5-6 c: pcppscccccc +6-7 z: zzzzzzz +6-14 l: lllllllllllllqllqlll +13-16 r: rrrrrwrrrrrrhrrr +11-12 r: rrrrhrvhqmqrwr +15-19 w: wwwwwwwwwwwwwwwwwwdw +3-6 w: wwqxkw +17-18 z: zzzzzzzzszzzzzzczvz +3-4 g: lgxx +4-5 x: nsdxdskjxtrz +11-12 w: wvdgqppfwwdf +2-3 w: qgrz +7-8 w: wwrppwfwwrcwr +2-6 n: gtspnngz +3-7 j: jjpjjjzjjjjj +1-2 l: pllblvgmfjvv +15-18 r: rrlgctrrrcrqqgldpr +3-6 v: vvvvvt +2-10 s: vslltcxpbg +5-8 j: blvzjtjnfmjnjtsrzmc +9-13 b: bbbbbbbbbbbbsb +3-4 w: wwfjw +6-7 x: xxxxxxmx +7-15 g: ggggggrgggggggfggg +16-18 f: zffffffffffffffwfff +3-4 q: qcqn +3-4 k: kvzqk +4-18 z: wpclkbsxwbmbmkdpzzcm +1-8 z: zkzzzzzgzzzzz +7-16 x: xxxxxxxxxxxxxxjkxxx +3-6 t: xwcjztz +8-9 r: rdrprrtrs +1-7 v: dvvvvvcvvd +6-8 t: tttttkttt +1-5 w: xzwww +6-7 c: ctdjbwcc +3-4 t: ttnttt +9-10 q: qmcqqqsqqqvqqq +11-12 d: dpftdmdmdmld +7-8 j: tbjmbjlj +3-6 t: tttttqtt +6-8 t: tdttthbnqt +2-5 q: qqqqp +1-3 t: ttht +13-17 n: nnnnnnnnnnnnnnnndnn +4-6 j: ftkvjj +5-10 c: hvccfcsccb +7-11 v: vmqvqnnnvzglvvvv +5-8 k: kkkkkksckkk +1-12 z: rzzzzzzzzzzzzzzzvzz +17-18 t: tttttmtttmttttttpttt +16-17 z: xljjnngmjmhprcqzw +4-11 d: dtddbpddlhn +17-18 t: tptttttttttttttttbtt +9-12 w: wwwwwwwwwwwcw +3-4 z: zdzj +1-8 q: qlqqkqqhqtqhxqbbwcp +6-8 r: rkrrlrrmzrcnnrk +13-17 b: dbsbbbbbbbsbmkbbb +5-16 q: gqnvqwwgqshmtrdbplfb +7-9 c: mcvccccczc +10-11 p: pppxppppppc +1-6 v: vvvvvmvvvvv +5-6 s: ssssks +6-14 r: prgrbvrjrgrkrrr +2-11 c: qbnxcvxgldcvdd +11-15 d: ddddddddddsddddd +13-14 w: rwwwwwwwwwwwwsw +12-15 t: ttttttttttttttt +5-8 g: skjgxsjpgvsgr +5-11 g: ggddglggxgqgg +2-4 c: cccc +2-3 h: rvdg +9-13 r: rrrrrrrrsrrrjrrr +2-7 f: dflmgzsdftgkgc +1-5 f: jffffffnfcff +3-4 c: cccrqc +2-7 m: kblcghm +3-4 r: rscrnbbpfkr +2-3 d: wdtqpd +5-6 q: qqqpqnqq +13-15 d: ddddsdddddddddjd +3-4 c: cmcw +2-7 q: qqqqqqjqqqqbqfqq +11-14 x: txxxxpxdxxkxqcv +10-11 b: bbbbbbbbbkbb +7-11 p: ppppppppppmpv +5-6 r: dnxrcvrrr +1-4 d: rdddddd +5-9 f: lxgfvffdf +8-16 k: vmfksjkwkrkkkhkkvknk +15-16 v: vvvvvqvvvvvvvvgv +2-5 p: xpctr +11-15 w: wfwwwwwkwwwwwpr +11-13 x: xxxxxxxlxrfxxs +18-19 b: bbbbbbbbbbqbbbbbbbb +2-4 l: fgwl +8-11 m: xmjnmmmmnmh +4-6 g: lgvpksgq +5-7 t: jtgtvttjlfhpljtzzstd +7-11 p: mjcgvcmxgqpntxkpb +2-3 r: rrgrrnr +6-7 r: rrrrrcr +4-14 d: dddjdddddddddpdddd +5-7 q: qqqqkqqqq +1-4 t: qttqt +4-10 f: hbfjbzrfgvffq +16-17 j: wjjwjwpsjjdvfjnhv +3-4 v: vvtwv +5-6 s: ssdswspdss +1-2 r: rnrrmskrr +4-7 h: rqxbjjhsfh +4-9 l: llllllllhl +4-6 w: sgtwwmcpwd +4-11 l: fjdllznlllmdnll +4-5 k: kkklk +4-6 s: sszrssssssss +12-14 w: wwwwwwwwwwwvwww +2-4 b: vnzb +7-18 g: ggggggggggggggggggg +1-13 s: srjdvvpqnrsnnkzfj +14-15 g: bmhbclmqcgtqxgg +8-12 g: gggfhxgglgzb +3-5 c: scrkcshctccmhm +7-12 q: qklqqqhqvxqqqqw +1-6 m: mlmxzwkmm +3-16 r: rswggrrrrczxfpjt +14-16 l: llldlblllqllllns +2-5 w: wwwwmw +7-9 r: rrrhrprrr +2-3 j: zjmdfcth +3-8 w: xwgwwwwww +1-5 l: plllllll +2-4 b: fbqp +2-3 p: jwpmp +3-4 c: kscm +2-5 b: mbpbnfkvh +4-15 m: qrswmmmgmvmfqtmrrn +12-15 r: rxrrrrrdrhpfrrrrcrrr +10-13 j: jjljjjjjjnjjjjj +8-20 w: gjccptmwtrwxjtskrdfp +11-14 j: jjjjjxjjjjgjjk +1-4 g: gggzzgg +4-8 q: wqqqqblsmsk +1-11 h: lhhhfhhhhbvhhtjwrbh +4-8 x: xlxqxxtxxxxx +13-14 x: xxxxsxxxxxxxqxxx +12-16 b: bxvbbbqbbbbfzbblb +1-4 j: jzbd +5-6 q: qqqqwqkkqqq +2-5 x: xxxxgx +8-10 n: nnnnnnnnnhn +5-10 m: mmmmrmmmmmmmm +2-3 c: qwcz +3-5 n: cckvz +18-19 q: qqqqqqlqtqqqqqqqjqv +5-13 k: kkpkkkkkkkkklkkk +5-10 q: jfjgqllmqzv +15-17 l: llllllllllllllhll +4-10 b: pgqbfrsnvbhzfmtbtw +1-4 c: mccc +6-16 f: fffffpfffffffcfffff +4-9 j: qjbjlcsgljtbvv +11-12 z: dstqbtxxvdchsg +3-8 d: jvdpnvqs +2-3 n: nfvnnnn +6-12 r: zdbfdrvtmpkrjkr +1-15 k: kbdckwtkfhvrbjk +6-8 v: fvhsvgcv +2-3 p: ppkppp +2-14 r: drclhnrdhtcbmnr +7-10 p: vchpmlpjfxbfnwsdxjr +1-3 v: lvvv +1-3 b: bbjbb +2-12 q: qmxbbbgqlscqvdtpq +7-9 l: lllllkllqlllclll +16-17 r: hrrrrrrrrrrrrrrrr +8-9 g: gggggggfg +6-8 v: zvqffmkv +9-12 t: tttttznttjtfrtsjxtd +5-12 q: bqhbltqnjlhqqhtkq +8-9 d: ddddddddkd +2-8 q: tvpqmrrq +13-16 q: qqqgmqqqqqsqmqqpqqqs +7-9 p: pppppplppp +4-6 h: hhxhlhhhxhp +6-8 g: gggggdggggg +4-5 j: jjjkjj +4-5 x: xxxfg +2-13 x: xxhrhxwbrgrdskghtkj +12-19 x: cxxxxxxxxxxhxxxxxxx +1-4 m: tmmmm +5-11 x: mgqnkjxxscxdxr +3-4 t: tttctt +4-13 b: bfkbfbbwbcbpvcbkdqww +5-7 d: dwddddqd +4-15 l: lvvlfclwbssvsdl +9-14 d: ndkfnddtdddfjpvdqt +8-9 s: ssssssssk +9-13 l: dlljknlsllbslhlml +4-5 n: lnnwn +8-12 v: rlvbqlwvfhvv +6-7 f: rcpfwfvffqfcpf +10-11 g: rnqgxbtnxqfzgggtn +8-11 d: ntdzzddkbdhcdddrgdld +5-6 s: xkmssxscvbpwj +1-3 r: rrmr +9-14 p: pvppppppppppppppp +11-15 t: vhftnbtmwpgbcvt +2-7 t: pmbwnrj +10-11 c: cccccccdcvcc +9-14 s: ssksssssssssslsss +2-5 t: ctrtqpn +4-6 t: mttjftttt +4-5 z: zfbzz +2-3 x: xwxlwstzmvvt +4-5 b: vbsbjwpbsbbb +3-4 x: cwxxlmdf +5-6 z: zzzqszzzzzz +1-4 c: ncczc +3-6 k: kkkkkkk +2-3 z: rjzkpxxdvzlzxjzz +8-10 z: fzjzszzdnzbzkzzfz +1-9 c: ccccxccjpccccc +3-12 j: jjjjjjjjjjjcj +10-14 l: llplllvbllllsp +8-12 r: hnrcrxfzrkcjcprrzjbr +17-20 q: qqkqqqqqqqqqqqqbqqqh +6-9 l: lllljlrlpxllllll +8-9 v: vzzmtwfgv +3-7 v: fqdbsshw +12-13 f: fwffnjfbfffzzqfxfffx +1-3 m: zjmdvjjg +5-7 r: nrswrlbw +8-11 c: crzfvzpcbcbchgxbln +9-17 g: ggggggzgwwjpggpgvgrk +6-9 k: hhkrvkkqfhqwbdb +10-16 q: mzzjqfmtkqwvgdfttj +11-13 m: mmmmmmmmmmtmm +1-2 j: jjhrrj +3-12 h: hhhhhhhhhhhhh +8-11 w: zwkrwznrppw +7-14 d: dpxjnddbvdbcllqr +5-8 c: ccccfcccccc +12-16 p: tnptbppgwxxpppjb +1-14 t: qktttttttttttttt +9-12 t: tttttcttgjtt +3-5 p: tcpdgwhrkxkzjjhvsgqp +13-14 k: kkkkkkkkkkkkklk +11-13 x: xxxxxxsxxxxxt +5-12 n: nxxnnznnnnmlnnn +12-14 h: hhlhhhhhhhzcnnhhhhkh +8-10 j: jbjbjmjvjj +6-9 c: ccccccccsc +5-12 j: jjjjjjjjjjjcj +1-2 f: fhffff +13-17 x: xnlxxxxsxxxxxxxxp +2-5 d: sddzn +2-4 q: qqqt +2-6 p: fmxfxnkp +9-11 k: nkdgncqkkgwjp +2-5 p: hpmgcfcmz +1-3 f: ffczf +5-9 r: rtrrprrrrrr +2-4 p: pnpprdn +9-11 l: ltllbllvllc +4-5 x: xxxmxxx +5-9 x: xxxxxxxxxx +16-20 b: hgcbhbbhbgbbdxhdgjwb +10-15 c: qcccpcccdcccccfccwcf +10-11 x: xndsgkwqpxb +15-17 f: wwbqxrffgfvffdmdffw +5-6 q: qqqhqvqqqq +3-4 h: hhhchc +7-9 x: xxxxxxxxgx +7-8 f: fmfflfgf +12-13 v: vvvvvvvvvvvcvvvv +3-7 g: gggbggsgg +1-5 w: wpswsggtw +3-5 h: hhhhkhhhhhdhw +6-7 w: wwwwwmwwwww +5-11 m: mfdmcwmlvpmfc +14-15 j: jjjjjjjjjjjjjjrjj +3-5 v: rvtvkdvqv +3-6 p: frppxpdpg +3-5 t: ttttrt +2-7 x: xxwxxkfxxxxxxxxxxgxr +6-8 k: kkkkkpkgkkkk +10-11 f: fffffpfffkfdf +11-12 g: gggghgnggflg +1-7 x: xxnxxxxkxx +3-4 h: rhhx +6-8 r: bcwrrrrrhrxmqgrhrzm +2-6 l: mpdlnnp +2-4 j: jbjjdhx +2-15 d: dfdddddddnddddfzddjd +5-12 h: gbngwvffshph +1-2 t: txcpth +14-15 f: ffffkfflfffffgf +8-9 b: bbbbbbpbj +5-6 f: zffhfz +8-15 j: qjjfrtjllqfjjcj +3-5 l: llxllll +10-15 z: tpdzhnzkzrtzrzzzrfrz +3-5 q: qqlqq +3-4 d: vmzddpm +8-11 c: cmvzlxtqxcvckxqm +2-13 r: drpppdsqsmvnlkjb +7-9 w: wwwwwwkww +3-6 s: svfspfnpzq +3-4 b: fqpbbbbzpgqf +2-4 s: smssm +8-9 q: qqqqqlqbq +4-7 s: stcssbw +15-16 k: kkkkkkkkkkkkkkkk +10-13 x: xxsxxzxzxxsxphxxxxx +4-5 p: drpsx +7-11 v: vvvvvvvvvvvvv +14-15 n: nnnnnnnnnpnnnbnn +5-8 k: blgkkkkc +12-16 g: ggggggggggvggggggg +1-8 c: cccccccdc +3-9 p: ppqppppppp +7-9 q: cxqqqbhqqzhjqv +1-12 m: mrkvwmmsjmkmw +2-4 s: xrrj +2-4 w: mbww +7-14 v: vvvvvvvvvvvvvbv +3-8 p: kppjprpxppb +4-10 n: znncndnnjncnrnkn +5-7 k: kktnkks +10-13 r: rrrrrrrrrrrrnr +1-6 k: kkkkkrvk +3-5 k: jhjzkbqsjwkxsvd +5-8 p: pcqpprckrp +2-5 f: fsjwf +6-9 l: jxhtplclr +4-13 x: gdxdcdmmxlfxxs +2-10 v: vvvrvvvvvhvvvvvvvv +11-12 v: wqnwrlvjsxvs +1-4 m: mfqm +3-5 d: bmddv +8-10 h: hbhhdhfchh +4-5 s: sssdb +2-3 l: lsll +10-11 k: kkkkdcpnkkgkk +6-8 r: vrrrrxrrrrr +3-4 s: gxsbfr +17-18 p: ptppppppbbpbprpcqpp +16-17 s: gpgwvvnjbdqpksnsd +5-10 f: gfkfzqflfzffvf +6-18 m: kxxfrxjmwmltdvxwmmb +5-6 d: ddntbd +11-15 b: bbbrbhbgbbltbbhb +6-7 r: krbrrrp +5-6 q: qqqqqkqqqqq +3-6 k: kfkmjt +8-10 d: drbwtrdshdbg +13-15 n: tqnprfnndhplcjn +2-4 w: wjwg +10-11 p: xprpnpvhppp +9-10 r: rrrrrrrrqrrr +2-8 w: wjwnwhwwwwwww +12-13 g: gggggggggggwggg +1-6 s: sssssss +1-9 k: xkkkkkkkkkkkkkv +2-4 c: ccccc +3-7 s: ftssfrm +12-13 k: kkkkkkkkbkksk +9-16 q: qqqmqbbqhzqwtlwqb +7-9 p: ppppppppdppp +4-6 b: pcvbvkhb +9-10 g: qmchkfggmgpqgxxgxq +2-9 t: sthtnttthtlsq +3-4 x: xxxx +8-14 s: ssssssssdssssssss +1-3 m: gmbmvbmqbxvm +10-15 s: sgwkdvnsswsszwrn +3-4 s: gmgs +5-11 f: fffffffffffffffff +7-9 v: vvfvsvzdhvv +4-8 l: lllllllpllllllllll +11-16 x: xxxplxxxxxpxxxxxxxxx +9-13 t: tdtftttjdtttc +9-13 g: rknsckngkvdxg +3-4 d: sdqwddmr +1-3 l: lljl +7-17 r: trhrpmrqswrmnrbrrhb +7-8 g: ghkxwgttgk +5-7 b: fbnbtbndb +6-7 v: vnxlvgv +1-6 t: txtkttg +2-13 n: ljnnnnlpsnscfnnnnnnf +4-11 b: bbbbbbbbbbfb +6-9 x: wxdkxxnnnx +2-4 w: wswww +5-13 j: jjsjjjjjjjjjkjjjj +1-4 f: fszhf +5-9 z: wzgfpzzzzjszfvfpwz +5-9 x: xxxxhxxxsx +15-17 b: bbbbbbbbbbbbbbkbqb +2-7 x: xvdmgxxwgxx +3-4 q: qqqq +6-7 m: mqmlltc +8-10 k: kkkfkhkkkpkkkk +2-6 n: cnxnts +1-6 s: gsssssssssscssss +1-9 n: bbvkmnkdn +2-5 p: nmlhpv +4-6 g: vnggdpgm +7-12 b: bbbbbbvwsbbbbbbbbbbx +2-3 b: lgbjjr +7-12 n: chqccgnwsznngz +4-6 v: nntkvvv +2-5 g: qkrjgkqgljh +1-5 f: rffffsfzxfjfzffff +15-16 z: zpzzzzzzzzzhzzkszz +3-4 l: lmflkl +7-8 f: fffvzxff +2-4 r: rrrgrrrr +12-14 w: tjwgwkkwwwwwwwwww +2-12 m: mzmkmmmmmhmmcmmmrmf +5-7 q: nfqbgqqqpqqgjq +1-4 r: ktpr +5-6 j: jjjgbj +9-13 d: ddpbdddwbbdmd +8-9 r: rphfrrrsrr +10-12 f: fffffffffffbffpff +5-12 b: xhbbcbbbbxtbbb +9-10 j: jjjjjjjjqjjj +3-4 q: qqqn +3-9 r: srrtqqprjmqgnp +2-3 c: gcqc +3-4 c: bclc +3-6 n: jnxhshghnnqncgncn +2-4 h: ckhh +9-12 t: tdjjqcdbtkbtmb +11-13 x: cxxkxbxktxxxkxxxpxxh +4-14 m: hjqmqjvqgjdjzsssdkm +6-12 r: rrrrrlrrrrrrrr +14-16 g: gngggggkfglzgggv +9-13 h: hvhhdzhhmhhhh +3-15 x: xxjxxxxxxxxxxxbxx +10-12 z: zzzzzzzzzpzzz +3-4 h: dnhv +13-14 g: gggggggggggggg +7-11 r: rrrrrrrrrrr +6-9 x: czxxlsxxx +3-5 h: hhchh +1-9 j: jjjjjgdjjjjjjjf +7-10 b: ctsbpxrvwbkbjklghnbn +10-11 g: gggggggggglg +1-7 x: xnpsxfm +9-10 q: xxxzqbpdqj +4-10 q: pqsqbqcvllfn +11-12 x: xxxkxxxxxxgxxxx +3-12 s: pstrsssntsssssbssj +9-12 s: wnsdfrtssllsfbsssccb +1-6 r: nrrrrmrc +11-13 k: kkskkkbkkkzkkk +4-5 h: hhhhshh +5-19 f: ffffffffffffffffffcf +3-4 z: zczzz +5-8 l: ghlllsllfw +3-9 g: ggpngglkkf +7-9 b: xwbbbhhbmgjhbbbhnbb +4-5 c: cjmgczcccpzqr +15-16 j: jqfqsnnvffpjjjqj +5-6 z: zzzztvws +3-7 t: tftxtvfzs +1-5 l: tlllll +5-18 n: nnnngnnnnnnnnnnnnnn +5-6 m: bchzqm +9-10 p: lmpsbqgzpxggltl +2-9 h: hqdpjwpxhg +4-6 n: nqbnbnknnzd +2-7 q: qbqqqvq +7-8 c: cccccclc +8-12 r: rrkrrrprvrcqnr +14-15 j: jkpjjnjjjwjjjjjjhjwj +7-9 s: stsstspsn +8-11 h: hhhhbhhhhjhhhh +5-6 d: dddtpdd diff --git a/2020/inputs/day_3.txt b/2020/inputs/day_3.txt new file mode 100644 index 0000000..0fe60b0 --- /dev/null +++ b/2020/inputs/day_3.txt @@ -0,0 +1,323 @@ +...........#..............##... +...#....................#...... +.....####...........#.#..#.#... +....##.#....................... +.......#.##......#.###......... +.#.....#.......##.......#.....# +...........##....##.#....#..... +......#.........#....#......... +..###....#.........#....#.#.... +....#....#.#..#..#.........#.#. +..........................#...# +.##...........#...#.#.......#.. +#....##...#.#....#............. +....#..##......##..#.#....#.... +#..........#.............#..#.# +...#.####.....#..#.#.#..#...#.. +..........#......#........#..#. +............#.....#..#..#....#. +.................#...#......... +..#...#...................#.... +..............##...#........... +..........................#..#. +#...#...#............#...#..... +.................#..##.......#. +............#....#............. +.#......#.#...#....#...#....... +.....#.....##..##.....#.......# +.#..#..##...............#..#... +#...#...##............#........ +.......#....#.......#.......... +............................... +#................#...#......... +...#...#..#..#.............##.# +......#........#..............# +...#.....##.#...#...#.......... +.........#..#........##.#...##. +#.........##..#.......#........ +........##.#.#................. +.#....#............###....#.... +...#.##....#.....##..#..#....#. +....#..#........##..#...#..##.. +..........#............#....... +.........#........##....#..##.. +#....#.........#.#.......#..#.. +...#....#......##.#............ +........#..#...............#... +..............#.....#........#. +......#..#.#........#..#..#.##. +..#........###....#.#.......... +...#..#...#.#....##..#........# +........#..#..............#.... +#.####.................#....##. +.#................#............ +....#....#....#................ +#......#........##....#...#.... +......#..##..#..###...#.#.#.... +.#..........##................. +...#...#....#...#.....#.....#.. +............#......##.........# +..............##............... +##....#....#...#...#....#..###. +...................#.......##.. +#.....##........#....#......... +...#.......#...........#....... +...............##.............. +##.......#......#.....#........ +#....#..#..##..#.......#..#..#. +.....#.............#.......#... +......#..#........#.......#.#.. +..#...#...........#.##......... +..#................####.#..#... +......##....#.........#........ +..#..#.......#...##....#......# +#.#..........#..............#.# +.#.#..............#.##...#..... +................#.....#.#...... +##.........#.........#.....#... +....#.#.....................#.. +..#..#..#........#.......#..... +.....#..#.#....#....#.....#.... +..####....#.#.........#........ +#..##...##..#.#............#..# +.#........#..##.#.....#......## +.##.##.....##....#.#........... +....#..#.#..##............#.#.. +........#.#...#....#.........#. +.....#.#.#.....#....#.....##... +#...#..#....##..#.............. +..#...#....#...##..#.......#... +.#....##....................... +.........#............##.#..#.. +....#................#...#.#... +...................#..#...#.... +#..#...................#....... +..##..............#..........## +...#.##......#.............#... +.........#.#.........#......... +...###......#.................# +..........#....##.............. +.##..#....#.........#.#........ +.........#.......#.......#.#... +#........#............#......#. +....................#.......... +.......#...##..........#...#... +....#.#.......#.#...##..#.#.... +...#..........#..............#. +........##..............#...... +......#...##......#....##...... +....#.....#.#.##..............# +...#...........#.#............. +...........#......#.#.......... +...#.#......#......#...#...#... +..#.......................#.... +...#...#..#..................#. +##.....#.....#..#..#.....#...#. +.#..#.......##.#.#............. +......##.......##............#. +.......#..#..#.......#....#.#.. +......#.....##..##...#........# +.....#........#.##..........#.. +#....##............#........#.. +.....#..#...#............#...#. +##.#....#........#............. +.##...............##......#.#.. +###..#..#.......#.#..........#. +.....#...........#...##........ +..#.#.#.........#.....#....#... +.....#....##.......#..#.#...... +......#.....#...#..#...##..#... +.....#....#................#... +......#....#.#...##......##.#.# +.....###.............#......... +.................#......#####.. +.#.......#..........#.#....##.. +..#..#.......#.....#..#......## +..........#.#.##.......##....#. +##...#...##.##......#..###..... +..#..#..#......#....#.......... +..#...#....#......#....#....#.# +.#...#........#.....#......#..# +#.........#......#.##.##....... +#.##..#.............#.....#.... +....#.......#..#..##...##...... +...#.............#.#......#.... +#.....#..........##...##.....#. +...............#........#....#. +#.....#...#..#.............##.. +.#....##.#.......#.#..........# +....#....#.#.....#....#......#. +......#......#................. +.#.#..#.#.#...#...#..#.##.#..## +.............#.....#........... +............#...#..#..#.....#.. +.#..........#.......#....#..... +......#..###.#...#............. +......#..........#............. +....#.................#..#.#.#. +...##.##.#....##.##............ +####......#........###......#.. +..#.......#.#..#.##............ +.....#.....#.#.......#.....#... +.....#..........#.#............ +#.....#.............#......##.. +......##..........##....#...... +.#..............#..........#... +......#..#...#........#..#....# +.#......#.......#..#........... +..#..#....#.#.......#....##..#. +........#.#................#... +#.......#.##.#......#...#.....# +..#...#.#.....##............... +..........#.....##............. +.......#............#........#. +...#............#......#......# +.#..#.......#...#...#..#..#.... +#....#.#...#......#...#......#. +.#.......#..#.#...........#.... +...##.#...#.......#..........#. +.....#..............#..#...#... +...........................#... +.............#.....#........... +....#.#..#..#...#..#........... +.....#.#.#..#.#....#.#.#....... +.......#..............#.....##. +........#..#..#.#..#...#.#..... +.....#.#...#.#.#.....#..#...#.. +.....#....#.......#......#.#... +.#.#...........#........#...... +.##..##......#......#......#.#. +.....#.###.#.......##.#..#..... +#.......##..#.........#....#... +.#.............#.........#.#.#. +..........#..#..#....#....#.... +#....#...........##..#.....#..# +......#....#...###..#...#...... +.....#....#........#....#..#... +...##..............#.##...#.... +.#............#........##...... +..##........#.#...........#...# +..#.#...##...#..#..........##.. +.................#.......#..... +......#.....#............#..... +.#.....#.........#.#..#.#...... +.............#.#.#..#.......#.# +#......#.....#..##...#.......#. +.......#.#..#...#.........#.... +...#..##...#.........#.#....#.. +........................#..#... +....##..##................#.... +.......#..#.......#........##.. +.....#....#.##....#............ +.#....#............#.....#...#. +..##.....#......#......#.#....# +...#...........#...##....#..... +......#.##.#..##...##.#.#..##.. +.......##....#......#....#.#... +.....####..#............#..##.. +......##..##..##.........#...#. +.#.#...............#.........#. +......#......#...........#..... +.....#.......##.....#..#....... +.....##..#..#....#.#.......#... +...........###.###.##..#.#..#.. +.#...............##.........#.. +......##..........#..#.....##.# +.............#....#....#..##... +.#..............#........#..... +.#..#.........................# +.##..............#..........#.. +..#..#.#.#.#......#............ +....#...#.#.#....#........#..#. +.....#........#....#.....#..... +.#...#.#......#..#........#.##. +.......#.....#................# +.#.#........................#.. +............#..#.......#....... +....##.#........#...#.#.#.#.#.. +.....#.......##................ +...##...#....#.....#.#......... +#...#..............#.......#... +...#.#.#.#..##....##........... +.....##...#....#.....#......... +#......#.....#....#............ +....#..###....#.##.......#...#. +..................##.#......#.. +.....##..............##.#....#. +.........#...#........#..#....# +.##..#.........#....#..##...#.. +#.#.##................#.##..... +..#.#....#.#.......#....#...... +..#.#.##.#.......#............. +..#....#.#..##.#..........#.#.. +#.....#.....#.....#.........#.. +#.......##.....#....##.....#... +..#...#.........##.#..##....... +..#.#.........#.......#........ +#.....#.....##.#.#..#...#..#.## +.........................#.##.. +..#.#..#..#..#........#......#. +..#..............#............. +.....#.......##.##.....#....... +....#...#...............#..#... +....#......#.#........##.#..#.# +....................#..#....... +.....#.......#......#.##....... +#.......##..........#.....#.... +.#.......#....#.#......#....... +......#...#...............#.##. +....##.#.....#.............#.## +#..#................##...#..... +....###......#.#.........#..#.. +...#...#......#...##....#...#.# +..#...#.#.##.#................. +.....##......#..#.#....#....... +##.......#......#.#..#.#....... +.#.#.#.........#...#.#..#...... +#...#.#........#....#.#.....#.. +....#.......##....#......##.... +.....#..........#......#....#.. +#...#....#...#.....#.#......... +...#..##.....##....#.....#.#... +..................#.....##..... +.....#............#............ +...#.....#..#........#.#..##... +.......#.#..................... +......#...#.......#..#...#..#.. +.#..#...#.....##.....#.#.#....# +....##...#.#............#..#..# +...........#............#..#... +.......#.....#................# +..#......#.#.......#.#......... +.....#..#.#.##................. +.....#..#...................... +...#....#...#..#.#..#....#..... +.#............#.....#.......... +#.##..#..#.......#......#.....# +.#.........#....#....#......... +...#.#.#........#.#....#...#... +#........#..#..#..........#..#. +.....#..#.....##......##..##.#. +..............#.......#..#..#.. +....#........#.##.#...#........ +..#.#..#....#........##.....##. +...##.....#...#.......#.#....#. +#.....#..##.##.#...##.......#.. +.....#........#.#.#....#....... +.#................#####..#.#... +..........##..#..###....#...... +.....#.......#..........#..#... +..#....#....................#.. +#.....#..#.....#...##.#.....#.# +...#..##............#.....#.... +##.#..#.......##............... +........##...#.#.....#......#.. +........#...#.................. +#......#................#.#.... +...........#...#..#.........#.. +...#.##..#.##.................. +.....#......###......#..#...... +..#.#.....#...#..#.##........#. +....#..........#.#.....#....... +..#..........#..........#.#.... +..#.##.......#......#.......... diff --git a/2020/inputs/day_4.txt b/2020/inputs/day_4.txt new file mode 100644 index 0000000..b17cdcd --- /dev/null +++ b/2020/inputs/day_4.txt @@ -0,0 +1,1023 @@ +ecl:#eef340 eyr:2023 hcl:#c0946f pid:244684338 iyr:2020 cid:57 byr:1969 hgt:152cm + +pid:303807545 cid:213 ecl:gry hcl:#fffffd +eyr:2038 byr:1951 +hgt:171cm iyr:2011 + +hcl:#c0946f byr:1933 eyr:2025 pid:517067213 hgt:173cm +ecl:hzl +iyr:2018 + +pid:5253256652 byr:2009 hgt:152cm iyr:1989 eyr:1968 hcl:64cb63 ecl:hzl + +iyr:2013 +pid:862607211 eyr:2020 +hgt:174cm +byr:1990 +ecl:blu hcl:#888785 + +ecl:grn byr:1955 +pid:608098408 eyr:2027 iyr:2020 hcl:#b6652a cid:264 +hgt:181cm + +byr:1998 ecl:hzl eyr:2021 +hcl:#866857 hgt:189cm iyr:2030 +pid:013735467 + +pid:075417314 hcl:#b6652a byr:1957 +iyr:2011 +hgt:154cm +eyr:2025 +ecl:amb + +iyr:1993 hgt:74cm eyr:1960 +byr:2029 +hcl:293244 ecl:#3cb5e5 pid:4861232363 + +hgt:153cm hcl:#6b5442 pid:065240897 byr:1932 +cid:196 ecl:blu eyr:2028 iyr:2019 + +eyr:2024 ecl:amb +hcl:#866857 byr:1922 pid:496904942 hgt:164cm iyr:2020 + +pid:847705161 byr:1951 cid:124 iyr:1991 +eyr:2028 ecl:dne +hcl:6b2d28 hgt:172cm + +byr:2007 iyr:2029 ecl:hzl eyr:2026 hgt:168in +hcl:z +pid:63151612 + +iyr:2027 hgt:172in +cid:174 byr:2014 hcl:z eyr:1921 +ecl:grt pid:#cebdc2 + +ecl:amb hcl:#d09c0f +iyr:2015 hgt:156cm eyr:2026 byr:1962 +pid:086120872 + +cid:125 +pid:837849996 +byr:1958 ecl:brn hgt:166cm hcl:#ceb3a1 eyr:2028 iyr:2012 + +ecl:gry hgt:180cm +pid:939059935 eyr:2023 byr:1977 hcl:#b6652a + +hgt:190in byr:2029 eyr:1984 +ecl:gry hcl:z pid:055092916 iyr:2010 + +hgt:63in ecl:blu byr:1940 iyr:2012 eyr:2029 hcl:#7d3b0c +pid:163033394 + +eyr:2040 pid:181cm +iyr:1928 hgt:76cm hcl:d8aafb byr:1949 cid:275 ecl:xry + +hcl:#cfa07d ecl:oth byr:1948 eyr:2021 +pid:719690182 hgt:179cm iyr:2020 + +byr:1939 cid:266 +eyr:2026 iyr:2017 hcl:#f116d2 +ecl:hzl pid:522421825 +hgt:68in + +hcl:z hgt:61in +cid:115 pid:180cm iyr:2030 byr:2014 eyr:2032 ecl:hzl + +ecl:xry +eyr:2028 pid:191cm iyr:2015 hgt:150cm byr:2029 + +eyr:2027 +hcl:#a97842 pid:997937480 hgt:61in iyr:2019 +byr:1921 +ecl:grn + +hgt:163cm +pid:912318455 iyr:2016 byr:1988 ecl:brn hcl:#a97842 cid:221 eyr:2029 + +cid:333 hcl:#c0946f +hgt:163cm iyr:2018 eyr:2027 ecl:oth + +cid:70 hcl:#c0946f +pid:961507902 byr:1949 ecl:grn iyr:2017 eyr:2029 hgt:69in + +hgt:169cm ecl:amb +iyr:2013 pid:496169901 +byr:1943 eyr:2028 hcl:#ceb3a1 +cid:249 + +ecl:blu cid:343 +iyr:1998 hgt:154in hcl:#efcc98 byr:1972 + +pid:508213120 iyr:2012 eyr:2025 hcl:z hgt:70cm byr:1976 +ecl:brn + +iyr:1924 +eyr:2005 +hcl:z +hgt:167 pid:154cm +byr:2007 + +pid:761333244 hgt:180cm iyr:2017 hcl:#18171d eyr:2021 +byr:1983 +cid:67 ecl:oth + +eyr:1993 +byr:2003 +hcl:#602927 +ecl:grt +cid:84 hgt:178 +pid:1847086637 iyr:2026 + +hcl:#866857 hgt:162cm pid:483774485 iyr:2010 +byr:1946 eyr:2028 ecl:gry + +pid:726639691 eyr:2028 +hgt:171cm hcl:#ff65a6 +iyr:2011 byr:1989 + +hcl:z iyr:2026 ecl:xry +eyr:2037 byr:2005 pid:#f09a0f +hgt:68 cid:156 + +hgt:71in ecl:blu eyr:2026 hcl:#18171d +byr:1981 iyr:2017 +pid:698636544 + +eyr:2021 +byr:1957 ecl:brn pid:365378126 cid:93 iyr:2019 hcl:#18171d hgt:179cm + +byr:1996 iyr:2014 hgt:64cm +eyr:2034 +hcl:z + +pid:629486472 cid:140 +hgt:192cm eyr:2020 hcl:#b6652a iyr:1988 byr:2021 ecl:brn + +byr:1955 iyr:2015 eyr:2030 +ecl:gry hcl:z pid:6550198754 +hgt:158cm cid:305 + +ecl:gry hcl:#a97842 +hgt:176cm eyr:2022 pid:810146585 iyr:2020 + +byr:2027 hcl:#cfa07d +iyr:2011 ecl:#f07598 +cid:293 +hgt:150cm pid:#fa948d eyr:2029 + +eyr:2028 iyr:2013 hgt:69in ecl:gry pid:317170371 +cid:147 hcl:#bfe1f1 + +byr:1976 +pid:059341891 hgt:174cm +ecl:oth +eyr:2029 iyr:2017 hcl:#733820 + +iyr:2018 hcl:#ceb3a1 hgt:188cm cid:308 +pid:792826885 byr:1948 ecl:blu eyr:2028 + +iyr:2017 cid:94 hcl:#95c7dc +pid:231757803 eyr:2022 +byr:1992 hgt:153cm ecl:amb + +eyr:2027 +iyr:2011 hgt:186cm +ecl:brn pid:996347346 hcl:#866857 +byr:1960 + +eyr:2025 byr:2001 +ecl:blu pid:755715478 iyr:2019 hgt:61in + +ecl:gry +eyr:2038 +hgt:81 hcl:z iyr:2028 +cid:214 byr:1965 + +pid:412744447 byr:1979 hcl:#cfa07d ecl:blu +eyr:2029 cid:157 +hgt:180in iyr:1948 + +hgt:170cm +pid:623557081 byr:1924 eyr:2024 hcl:98d623 iyr:2012 ecl:amb + +cid:311 ecl:grn +iyr:2011 byr:1982 +eyr:2002 hcl:#ef318a +pid:0548169957 +hgt:87 + +eyr:2030 hcl:#733820 iyr:2016 pid:558470391 +byr:1936 ecl:oth hgt:185cm + +iyr:2019 +ecl:amb byr:1949 +pid:376468392 +hgt:178cm + +pid:019195245 +ecl:grn hgt:171cm +byr:1978 iyr:2011 eyr:2022 hcl:#733820 +cid:134 + +hcl:#623a2f hgt:192cm eyr:2026 byr:1977 +ecl:grn cid:308 + +ecl:hzl pid:715816358 hgt:69in iyr:2014 hcl:#623a2f +byr:1996 +eyr:2027 + +iyr:1947 +ecl:#39a697 +hgt:183cm byr:2029 +eyr:2022 pid:7951883913 +hcl:z + +ecl:gry byr:1950 +hcl:#18171d hgt:168cm iyr:2020 pid:677187333 eyr:2027 + +byr:1969 ecl:blu hcl:#18171d iyr:2011 +hgt:162cm +pid:701349891 + +cid:269 byr:1966 +iyr:2011 +pid:905940527 eyr:2023 hgt:190cm +ecl:brn hcl:#ceb3a1 + +eyr:2027 pid:454627395 ecl:brn +hcl:#ceb3a1 cid:302 hgt:184cm +byr:1959 +iyr:2015 + +iyr:2011 +eyr:2028 +hgt:166cm +hcl:#733820 byr:1938 ecl:blu pid:857984986 + +hcl:#c0946f ecl:brn pid:226877822 +hgt:182cm byr:1998 +cid:160 + +hgt:186in pid:26499164 byr:2017 +hcl:z +iyr:1998 eyr:2026 +cid:331 ecl:#236556 + +pid:328866543 +hgt:165cm eyr:2039 iyr:1987 ecl:amb byr:2018 hcl:z + +iyr:2016 eyr:2036 hcl:#888785 byr:1976 pid:160402352 hgt:76cm ecl:blu + +ecl:blu +hcl:#fffffd eyr:2025 hgt:66in pid:979788527 +byr:1957 iyr:2013 + +ecl:grn pid:279357265 iyr:2019 eyr:2021 byr:1953 +hgt:177cm hcl:#c0946f + +ecl:oth hcl:z eyr:2025 byr:1949 hgt:189cm iyr:2020 pid:901383503 + +byr:2019 hcl:#733820 +pid:31022828 eyr:1929 +hgt:75cm iyr:2012 ecl:grn + +pid:080462937 +ecl:blu hcl:#866857 +cid:102 +iyr:2013 eyr:2025 byr:1975 hgt:64in + +iyr:2016 +eyr:2028 +cid:125 +byr:1979 hcl:#866857 +ecl:brn hgt:173cm pid:814947616 + +hcl:z byr:2020 pid:#c3b54b hgt:174in eyr:2038 +iyr:2016 +ecl:gmt + +cid:132 +iyr:1958 +pid:61543452 hcl:z +ecl:zzz eyr:2039 byr:2006 + +cid:55 eyr:2022 byr:1954 iyr:2015 +hgt:188cm hcl:#a97842 pid:49143631 ecl:amb + +hgt:152cm +byr:1982 +iyr:2013 ecl:blu +hcl:#341e13 +eyr:2026 pid:440841976 + +iyr:2019 ecl:blu pid:553456616 hcl:#733820 hgt:160cm byr:1932 eyr:2030 + +byr:1980 hgt:169cm hcl:#7d3b0c cid:312 iyr:2010 +eyr:2026 pid:028550304 ecl:grn + +ecl:amb eyr:2021 iyr:2014 hgt:71in pid:986053283 byr:1981 + +ecl:oth +eyr:2023 hcl:#888785 +byr:1949 +iyr:2016 pid:699325656 + +hgt:63cm cid:297 eyr:2020 pid:990390922 +hcl:#602927 ecl:lzr +iyr:2012 byr:2016 + +hcl:9ea2fa eyr:2023 pid:088680493 +byr:1998 iyr:2017 ecl:utc hgt:170cm cid:175 + +cid:316 iyr:2016 eyr:2026 hcl:#79ff1d hgt:65in +byr:1997 pid:215466710 ecl:oth + +cid:213 byr:1983 hcl:#888785 iyr:2016 pid:767747981 eyr:2025 +ecl:hzl hgt:168cm + +eyr:2030 byr:1972 +cid:282 +ecl:gry hgt:178cm +hcl:#a97842 +iyr:2018 + +hcl:#6b5442 ecl:amb +eyr:2028 cid:104 hgt:159cm pid:446429120 iyr:2012 +byr:1938 + +byr:1940 hgt:178cm ecl:oth +hcl:#ceb3a1 +pid:845683663 iyr:2015 eyr:2024 + +byr:1940 pid:496262233 +hgt:184cm hcl:#b6652a +ecl:grn cid:152 iyr:2012 eyr:2029 + +hgt:185cm pid:455744229 byr:1954 eyr:2022 ecl:gry hcl:#6b5442 iyr:2012 + +hgt:182cm byr:1966 eyr:2028 ecl:#a5b7fc +iyr:2029 + +pid:343591896 +cid:58 +ecl:hzl +eyr:2022 hgt:180in byr:2021 +hcl:#6b5442 + +ecl:utc hcl:#b6652a +pid:635147657 byr:2020 +eyr:2022 hgt:157cm iyr:2018 + +ecl:grt cid:312 iyr:1959 pid:154262836 +hgt:171cm +hcl:#fffffd +eyr:2024 +byr:1982 + +hcl:#7a12b4 pid:223424149 ecl:hzl hgt:175cm +byr:1930 iyr:2010 eyr:2028 + +hcl:#c0946f pid:633476454 eyr:2026 iyr:2011 +byr:1934 +hgt:186cm +cid:289 ecl:gry + +hcl:#fffffd pid:376300524 hgt:155cm byr:1964 iyr:2017 eyr:2021 ecl:grn + +hcl:a5d4dc byr:2006 cid:165 ecl:#db800f iyr:2029 pid:0199789970 eyr:1961 hgt:61cm + +eyr:2027 hgt:170cm iyr:2010 +hcl:#c0946f +ecl:grn pid:415726530 +byr:1985 + +cid:197 byr:1957 hgt:192in hcl:#a97842 ecl:hzl eyr:2029 pid:958973455 iyr:2011 + +iyr:2015 pid:933689314 hgt:162cm ecl:amb +cid:122 eyr:2021 +hcl:#6b5442 byr:1973 + +eyr:2026 hgt:172cm +iyr:2012 +ecl:brn hcl:#733820 pid:004474632 +byr:2000 + +hgt:191cm eyr:2030 byr:1999 pid:9155071477 iyr:2026 hcl:#602927 cid:315 +ecl:grn + +iyr:2010 pid:182884251 hcl:#18171d hgt:154cm +eyr:2020 +byr:1926 ecl:oth + +iyr:2019 eyr:1920 pid:132839546 +cid:283 hgt:188in hcl:#efcc98 byr:2027 + +iyr:2011 hgt:177cm +cid:117 byr:1976 +ecl:gry +hcl:#623a2f eyr:2030 pid:134592046 + +byr:1968 hgt:146 +iyr:2013 hcl:eefdc4 eyr:2028 +ecl:xry pid:722120008 + +iyr:2016 byr:1941 hgt:67cm cid:51 hcl:#b6652a ecl:hzl eyr:2034 pid:994005715 + +hcl:#cfa07d ecl:oth +hgt:182cm eyr:2021 pid:612583941 +byr:1983 +iyr:2019 + +byr:1922 +hcl:#602927 hgt:161cm ecl:gry eyr:2020 pid:190170808 iyr:2013 + +hgt:63cm cid:136 +iyr:1999 +pid:8235748647 hcl:z +byr:2022 eyr:1933 +ecl:#304383 + +cid:273 ecl:blu hcl:z +iyr:2011 byr:2007 +eyr:2020 +pid:942473857 hgt:178in + +ecl:grt byr:2029 hgt:187in eyr:2030 cid:160 +hcl:#efcc98 pid:#39f22b +iyr:1966 + +byr:1978 ecl:oth iyr:2011 hgt:164cm eyr:2027 hcl:#cfa07d + +hgt:75cm hcl:#1e8137 byr:1986 ecl:blu eyr:2022 pid:796688423 +iyr:2012 + +eyr:2026 +ecl:#3013af hcl:z pid:#e8597f hgt:123 iyr:2025 byr:1942 + +hcl:z hgt:177in +iyr:1993 pid:#4c9348 byr:2008 eyr:1989 + +pid:123524366 byr:1935 +hgt:156cm hcl:#7d3b0c +iyr:2020 ecl:brn eyr:2020 + +hcl:z eyr:2038 pid:7663741757 ecl:gmt hgt:174 +byr:2008 iyr:1939 +cid:225 + +hcl:#888785 hgt:172cm +ecl:oth pid:500711541 eyr:2027 +byr:1931 iyr:2012 + +pid:575447108 ecl:amb byr:1943 +hcl:#888785 hgt:173cm eyr:2024 + +eyr:2021 iyr:2010 pid:178773264 hgt:157cm byr:1965 hcl:#bb7bcf ecl:amb + +iyr:2023 ecl:#35bd84 byr:2020 +hgt:72in +eyr:2037 +hcl:#6b5442 +pid:421311669 + +byr:1921 iyr:2011 +pid:146088688 +eyr:2023 hcl:#15ed24 hgt:183cm +ecl:brn + +hcl:#b6652a cid:243 +byr:1993 eyr:2024 +iyr:2014 hgt:172cm +pid:771275594 + +eyr:2024 +hcl:#cfa07d pid:858807920 cid:293 hgt:157cm ecl:hzl iyr:2013 byr:1984 + +ecl:blu hgt:193cm cid:73 hcl:#18171d eyr:2026 +iyr:2016 pid:124151812 byr:1945 + +ecl:amb iyr:2018 +pid:214555737 hgt:157cm +eyr:2028 +byr:1925 hcl:#866857 + +pid:5633250409 +hcl:4ef7d8 +byr:2004 iyr:1958 +hgt:96 +eyr:2038 ecl:xry cid:274 + +byr:1972 pid:401239851 hgt:184in hcl:z iyr:2017 +eyr:2030 ecl:#cb289a cid:140 + +hgt:175cm +byr:1926 hcl:#cfa07d eyr:2029 ecl:gry pid:325039730 iyr:2017 + +cid:101 hgt:166cm byr:1986 ecl:amb +hcl:#7d3b0c iyr:2013 +pid:413769688 eyr:2024 + +hgt:159cm cid:311 +byr:1993 eyr:2028 pid:188cm ecl:oth hcl:#602927 iyr:2013 + +pid:565831038 +ecl:amb +hgt:155cm hcl:#fffffd cid:335 iyr:2016 +eyr:2029 byr:1997 + +hgt:122 +byr:2022 +eyr:2028 ecl:blu iyr:2017 pid:269710626 hcl:#b6652a + +cid:196 +byr:1953 hcl:#6b5442 iyr:2010 +pid:216121215 hgt:188cm ecl:blu + +iyr:2011 hcl:98166c hgt:62cm +byr:2028 +eyr:2024 +pid:792478385 ecl:grn + +hcl:#efcc98 iyr:2012 pid:020039675 eyr:2021 byr:1974 hgt:156cm +ecl:hzl + +cid:123 hcl:#7d3b0c +byr:2026 eyr:2004 iyr:2012 ecl:oth pid:349203133 hgt:160cm + +pid:085461475 +byr:1962 iyr:2020 hcl:#623a2f +eyr:2024 +cid:80 ecl:brn +hgt:154cm + +ecl:oth hgt:156cm iyr:2016 +hcl:#6b5442 +byr:1973 +eyr:2021 pid:539898580 + +iyr:2026 hgt:191cm +hcl:z +byr:1930 pid:#abc2f0 ecl:blu cid:242 eyr:2024 + +cid:167 +hgt:179cm +iyr:2017 eyr:2021 pid:756797571 byr:1949 ecl:brn hcl:#a97842 + +byr:1975 eyr:2030 +ecl:oth hgt:169in pid:4031206183 hcl:#733820 iyr:2017 cid:244 + +ecl:#54cfeb hgt:152cm +iyr:2026 hcl:36b4b9 +byr:2030 +pid:#fa1cb9 eyr:1964 + +byr:1974 cid:99 hcl:9e3296 +eyr:2032 +pid:686747414 +iyr:1995 +ecl:amb + +iyr:2030 ecl:oth hcl:z byr:1979 +pid:114661006 hgt:191cm eyr:1941 + +hcl:#341e13 iyr:2014 byr:1953 +pid:188326193 ecl:gry hgt:189cm cid:283 +eyr:2030 + +byr:1975 +pid:092061576 hgt:73in eyr:2023 +ecl:brn cid:227 hcl:#5e9d91 +iyr:2011 + +hcl:#7d3b0c hgt:167cm cid:141 +eyr:1957 byr:2012 ecl:gmt iyr:2019 pid:#1b7c8a + +hgt:168cm hcl:#c0946f pid:599500784 byr:1930 eyr:2023 ecl:hzl cid:113 +iyr:2013 + +eyr:2030 hcl:#b4cb4f +hgt:68in +ecl:brn byr:1923 pid:699162086 + +iyr:2013 +ecl:dne hcl:z eyr:1971 +pid:#580add byr:2020 +hgt:190cm + +hcl:#ceb3a1 +byr:1976 eyr:2020 +cid:162 iyr:2016 +hgt:168cm +ecl:hzl + +pid:050478613 hgt:59cm +iyr:2017 +ecl:grn byr:2030 hcl:#cfa07d eyr:2025 + +pid:352943968 eyr:2025 byr:1980 iyr:2014 ecl:gry hcl:#c0946f +hgt:193cm + +pid:328621931 cid:310 hgt:170cm +hcl:#733820 byr:1955 +iyr:2016 +eyr:2028 ecl:hzl + +hcl:#866857 +pid:095858739 byr:1956 +iyr:2018 hgt:193cm +ecl:hzl +eyr:2029 + +pid:70973661 eyr:2039 ecl:gry +iyr:2016 +cid:291 +hcl:#623a2f hgt:97 + +hcl:4d51a8 +eyr:1978 +ecl:gmt +byr:2029 iyr:2022 +pid:34507041 hgt:61cm + +byr:1989 ecl:brn pid:769582914 +eyr:2026 cid:218 +iyr:2020 hcl:#866857 hgt:184cm + +ecl:brn +iyr:1998 cid:227 +hgt:162in +byr:2026 +hcl:#602927 eyr:2027 pid:236998728 + +ecl:gry byr:1984 hgt:157 cid:295 +eyr:2020 +iyr:2018 hcl:#733820 +pid:037871534 + +hgt:166cm hcl:#c0946f pid:412146401 +iyr:2011 +eyr:2022 +byr:1938 +ecl:brn + +ecl:brn cid:95 byr:1981 eyr:2030 hcl:#efcc98 pid:777041035 hgt:152cm iyr:2011 + +eyr:2024 hgt:89 pid:3761913749 iyr:1939 byr:1967 hcl:a222f6 cid:165 ecl:#7fe574 + +cid:339 hgt:156cm +ecl:brn iyr:2013 byr:1951 hcl:#efcc98 eyr:2026 +pid:863566946 + +ecl:brn hcl:#6b5442 eyr:2023 +pid:787129723 byr:1949 iyr:2015 + +pid:#7f615a +cid:202 hcl:#6b5442 eyr:2028 +ecl:#a5419c +hgt:75cm +iyr:2011 +byr:2001 + +pid:864001133 +cid:236 +byr:1943 hcl:#733820 ecl:dne eyr:2025 hgt:171cm iyr:1989 + +pid:193073684 ecl:grn byr:1962 iyr:2014 +hcl:#cfa07d hgt:189cm +cid:321 eyr:2029 + +byr:1959 +hcl:#b6652a +eyr:2026 +hgt:159cm pid:815014918 iyr:2011 ecl:amb + +iyr:2017 hgt:182cm +hcl:#a97842 eyr:2023 ecl:grn pid:656177536 +byr:1973 + +eyr:1923 ecl:grn +cid:138 iyr:2020 +hgt:164cm byr:1958 hcl:#c0946f pid:783366277 + +iyr:1932 hgt:172 ecl:blu +hcl:#733820 byr:1962 pid:554221464 + +cid:169 pid:922622614 +byr:1942 hcl:#ceb3a1 hgt:169cm eyr:2024 +ecl:gry iyr:2017 + +cid:219 ecl:grn +hgt:156cm byr:1998 eyr:2021 +iyr:2017 hcl:#ceb3a1 pid:450186263 + +ecl:amb hgt:179cm pid:768428582 iyr:2010 eyr:2023 byr:1952 hcl:#fffffd + +eyr:2024 +hgt:193cm +iyr:2017 pid:469033795 byr:1979 hcl:#18171d cid:67 ecl:amb + +iyr:2016 byr:1937 pid:798267514 hgt:155cm hcl:#866857 eyr:2026 +ecl:oth + +hgt:172cm hcl:#866857 iyr:2018 pid:662186551 +byr:1996 +eyr:2025 ecl:amb + +pid:2854521962 +iyr:2021 +ecl:zzz +hcl:12f1ba eyr:2037 hgt:159cm +byr:1937 + +ecl:oth pid:488050418 byr:1927 hcl:#a97842 hgt:153cm iyr:2013 eyr:2024 + +pid:119536312 ecl:#2036ad +hcl:543178 iyr:2020 +byr:2013 +hgt:177cm +eyr:2022 + +pid:788908662 hcl:#602927 eyr:2029 +ecl:oth byr:1930 +iyr:2020 +hgt:179cm + +byr:1972 +pid:053386972 iyr:2014 ecl:grn hgt:65in hcl:#cfa07d + +pid:9828921035 ecl:blu +hcl:z hgt:152in +eyr:1949 byr:2010 + +cid:157 pid:097910554 byr:1999 +hgt:159cm hcl:#6b5442 ecl:blu eyr:2024 +iyr:2010 + +hcl:#a97842 +eyr:2040 ecl:#f8ad77 +hgt:173cm +byr:2019 iyr:2010 +pid:#d16a6e + +ecl:dne hgt:191cm iyr:2020 hcl:#b6652a +eyr:2021 pid:571971509 byr:1983 + +hcl:#18171d iyr:2016 pid:159074622 +eyr:2027 hgt:163cm byr:1954 +cid:257 + +pid:243560302 cid:58 +hcl:53a4cf byr:2012 +ecl:#fdbfb8 eyr:1920 hgt:179 iyr:2026 + +pid:040606106 eyr:2030 hgt:188cm +byr:1969 +iyr:2012 hcl:#ceb3a1 ecl:amb + +eyr:2022 +hgt:175cm hcl:#b6652a byr:1967 pid:269969031 +iyr:2018 + +hcl:#18171d cid:278 byr:1931 +pid:134809791 +eyr:2035 ecl:#44e6cd iyr:1993 + +hgt:177in +ecl:utc cid:289 +iyr:1923 +hcl:13a67a pid:3045345984 byr:2030 eyr:1944 + +pid:839901650 eyr:2030 +ecl:grn +byr:2015 iyr:2017 hgt:168 hcl:131f4e + +iyr:2015 pid:529736732 ecl:brn hgt:176cm +eyr:2026 byr:1952 hcl:#6b5442 + +hcl:#c0946f +cid:323 pid:303966428 iyr:2019 +eyr:2027 hgt:170cm +byr:2001 +ecl:brn + +pid:193678728 hgt:72in eyr:2027 iyr:2015 byr:1951 ecl:gry hcl:#18171d + +eyr:2026 cid:283 +iyr:1938 pid:687430885 +hgt:186cm +byr:1949 ecl:#521638 hcl:d13b2f + +eyr:2024 hcl:#ceb3a1 iyr:2013 ecl:brn +hgt:168cm pid:792088241 + +hcl:#888785 ecl:amb +byr:2009 iyr:2015 +hgt:151cm +eyr:2020 pid:223927808 + +byr:1926 +pid:717704850 +hcl:#623a2f eyr:2022 hgt:64in iyr:2018 ecl:gry + +eyr:2023 byr:1954 +hgt:169cm +ecl:hzl +iyr:2010 pid:116868997 hcl:#18171d + +ecl:hzl byr:1965 hcl:#a97842 iyr:2011 pid:506354451 hgt:172cm eyr:2029 + +eyr:2022 pid:994565705 +iyr:2013 ecl:brn hcl:#623a2f +byr:1979 + +iyr:2011 +byr:1931 hgt:183cm hcl:#284f26 cid:306 +ecl:amb eyr:2021 +pid:977533079 + +eyr:2027 +iyr:2011 ecl:gry +byr:1993 +pid:272334781 hgt:161cm hcl:#9a35b6 + +eyr:2026 +hcl:#602927 ecl:blu +pid:212300161 byr:1946 +cid:193 iyr:2020 hgt:157cm + +pid:538594567 byr:1976 eyr:2027 hcl:#efcc98 iyr:2011 hgt:154cm ecl:oth + +byr:1949 +hcl:z ecl:#ce67aa +eyr:1942 pid:7978941589 iyr:2025 hgt:161in + +hcl:#c0946f +cid:55 +byr:1963 ecl:blu hgt:161cm +pid:547120453 iyr:2015 eyr:2021 + +hgt:173cm eyr:2022 +iyr:2016 byr:2001 +ecl:hzl pid:239803460 + +hcl:#b6652a ecl:oth eyr:2021 hgt:167cm pid:401266644 iyr:1969 byr:1974 + +eyr:2030 pid:581963885 +hcl:#64cb23 +ecl:blu +byr:1928 hgt:181cm iyr:2018 + +pid:186338247 +ecl:hzl hgt:193cm hcl:#ceb3a1 +eyr:2022 iyr:2010 + +iyr:2015 ecl:gry hgt:159cm eyr:2027 hcl:#ceb3a1 +byr:1925 pid:715902111 cid:149 + +iyr:2018 hcl:#623a2f eyr:2020 hgt:162cm ecl:grn cid:135 +byr:1922 +pid:373216777 + +eyr:2020 pid:749899012 hcl:#888785 ecl:brn +iyr:2010 cid:225 hgt:172cm +byr:1972 + +iyr:2020 hgt:178cm ecl:grn hcl:#18171d pid:613792489 cid:240 +eyr:2028 +byr:1972 + +iyr:2015 byr:1938 eyr:2026 +cid:113 ecl:grn +pid:846231640 hgt:161cm +hcl:#b6652a + +ecl:gry +hcl:#ceb3a1 +byr:1956 cid:338 pid:936012518 +hgt:62in +eyr:2029 iyr:2016 + +pid:730866353 ecl:brn byr:1986 +iyr:2014 +hgt:190cm +eyr:2021 hcl:#a97842 cid:126 + +eyr:2021 +cid:180 pid:958310635 ecl:brn iyr:2015 hgt:189cm hcl:#efcc98 + +hgt:188cm ecl:hzl pid:179001863 iyr:2016 eyr:2029 hcl:#341e13 byr:1932 + +cid:77 eyr:2027 hcl:#623a2f iyr:2016 ecl:brn hgt:170cm +byr:1947 + +hgt:66in pid:617518313 iyr:2013 byr:1977 hcl:#b6652a ecl:brn eyr:2025 + +pid:787861420 +iyr:2014 hcl:#623a2f hgt:61in +ecl:oth cid:78 +eyr:2022 byr:1975 + +ecl:hzl +iyr:2017 eyr:2028 hcl:#602927 +byr:1958 pid:985208714 +hgt:160cm + +byr:2002 +iyr:2013 +hcl:#341e13 pid:188110633 ecl:gry hgt:169cm +eyr:2025 + +byr:1981 +eyr:2028 +hcl:#341e13 ecl:amb hgt:160cm cid:121 +iyr:2015 pid:963848397 + +iyr:2013 hcl:#866857 pid:#db8648 eyr:2021 ecl:gry +byr:1975 +hgt:153cm cid:114 + +hgt:109 +cid:287 hcl:#6b5442 +iyr:2028 byr:1926 eyr:2036 pid:2378208387 +ecl:#245a62 + +pid:857722366 +byr:1975 eyr:2027 +ecl:grn iyr:2019 hcl:#0afad1 +hgt:66in + +byr:1935 hcl:#cfa07d hgt:173cm ecl:brn eyr:2021 iyr:2019 + +cid:66 eyr:2024 hcl:#efcc98 byr:2002 iyr:2010 +hgt:176cm pid:697153153 ecl:amb + +iyr:2019 +hcl:#cfa07d ecl:blu +pid:695914972 +eyr:2024 +hgt:158cm +byr:1943 + +ecl:xry hgt:62in +pid:14733148 cid:148 +iyr:2016 byr:1925 hcl:#6b5442 +eyr:2028 + +iyr:2025 +cid:53 hgt:132 ecl:gmt hcl:159b19 +pid:156cm +byr:2025 eyr:2001 + +hcl:#623a2f ecl:oth byr:1974 iyr:2018 hgt:161cm eyr:2029 pid:6826285172 + +ecl:gry +byr:1956 hcl:#7d3b0c hgt:170cm iyr:2020 + +eyr:2020 +pid:#946a88 hgt:186cm hcl:#733820 byr:1946 ecl:#016645 iyr:2015 + +hgt:181cm hcl:#888785 iyr:2013 pid:634152817 +byr:1982 cid:245 ecl:grn eyr:2021 + +ecl:brn +pid:737531770 iyr:2010 +eyr:2020 +byr:1929 hgt:189cm hcl:#c0946f + +cid:158 iyr:2019 hcl:#341e13 eyr:2027 ecl:amb +byr:1986 pid:834976623 + +pid:976934668 cid:61 eyr:2020 iyr:2020 +hgt:76in byr:1927 ecl:amb +hcl:#e05ee3 + +pid:526042518 iyr:2019 eyr:2027 hcl:#623a2f byr:1976 ecl:amb + +pid:279367290 hcl:#a97842 hgt:158cm +eyr:2027 +byr:1959 +iyr:2020 + +ecl:xry byr:2028 +pid:357216861 hcl:#a97842 eyr:2024 hgt:66cm +iyr:2012 + +hgt:188in +ecl:lzr cid:64 eyr:1958 byr:2014 hcl:z pid:285207570 iyr:2026 + +eyr:1973 iyr:2017 ecl:oth cid:282 pid:695814158 +hcl:z + +iyr:2010 pid:661168409 +hcl:#53c696 +hgt:186cm ecl:amb +byr:1960 +eyr:2029 + +eyr:1982 hgt:169cm +iyr:2002 byr:2025 hcl:327f93 pid:831648100 + +byr:1967 ecl:oth +eyr:2021 +hcl:#602927 iyr:2014 +pid:274974402 hgt:183cm diff --git a/2020/inputs/day_5.txt b/2020/inputs/day_5.txt new file mode 100644 index 0000000..11800ca --- /dev/null +++ b/2020/inputs/day_5.txt @@ -0,0 +1,901 @@ +BBFBBBBRRL +FBFFFFBLRL +FBFBBFFRLR +FBFFFBFRLR +FFBBFFFLRR +FFBBBFFRRR +BFBBFBFLRL +BFFFBFFLRR +FBBBFFBLLR +BBFFBBFRRL +BFBBBBBRLR +FBBBBFFLLR +FFBFFFBLLR +FFBBFBFRRR +BBFBFFFRRR +FFBFFBBLLR +FBBFFBBLRL +FFBBBFBLLL +FFBFFBBLRR +FBFFBFBLLR +FFFBBBFLLL +BFBBFBFRLR +BBFBBBFLLL +FBBBFBBRLL +FFBBBBFRRL +BFBBBBFLRR +BBFBBFBLRL +FFBFFFBLRL +BFBBBBBRRR +FFFBFBFLLR +BFBFBBBLLR +FFBFBBBLRL +FFFBFBBLRR +BFFBFFFLLL +BFFFBFBLRL +BFBFFFBRLL +BBFFFFBRLR +FBBFFFBLRR +BFFFFBFLLL +BBBFFFFLLL +BFBFFBBRLL +BBFBFFFRRL +BFBBFFFRLR +BBFBFBFRRL +FBBFFBFRRL +BFBFBFFRRL +FFBFFFFLLR +FBBBFBBLLR +BBFFBFBRLL +BFFBFBBRLL +FBBFFFFRRR +BFFFBBBLRL +FFBBFFBLLL +FFFBBFFRRL +FBFBBBBLRR +FFBBBFFLLL +FBFBFFBRRR +FBBFFBBLLR +FBFFBFFRLL +BFBBBFFRLR +FBFFBBBLRR +FBFFFFBRLR +BBFFBBFLRL +FBFFBBFLRL +FBFBBFFRRR +BFBBBFBLRL +FBFBFFFLLR +FFFFBBBLLR +BFBFFBBLLR +BFFBBBFRLR +BFBBBFFLRR +BBFFFBBLLR +BFFFBBFLRL +FBFFBFBLRL +FBBBFFFRRL +FBFFFFBLLL +BFBFFBBRLR +BFBFBBBLRL +BFFBFBBRLR +FBBFBBBLLR +FFBFBFFRLL +FFFBBBBLRR +BFBFFFFLLL +BBFBFBBLLR +BFFFBBBRLR +FFBFFBFRLR +FBBFBBBLRL +BBFFFBBLLL +FFBFFBBRRR +FBBBBFBLLR +BBFBBFFRLL +BFBBBBFRLR +BBFBFFBRLR +FFBFFFFLLL +BBFBFBFRLL +FFBFFBBRLL +FBBFFFFRLR +FFBBBBBRRR +BBFFBBBLRL +BFFBBFBRLL +BFFFBBFRLL +BFFBFBFLRL +FBFFFFFRRR +BFFBFBBRRL +FBFBBBFLLR +FBFBFBBRLL +BBBFFFFRRR +BFBFBFFLRL +FFFFBFBRLL +FFBBFFBLRL +BBFFBFBLLL +BFFBBBBRLL +BFFBBBBRRR +BFBBBBFRRL +BBBFFFBLRL +FFBBFFFRRR +BFFFFFBRLR +FFFBBFBLLL +BFBFBBFRLR +FBBBFBFLRL +BFBFBFFRLR +BBFBBFFLRL +BFFFBFBLLL +BFFFFBBRLL +FFBFFFFRRL +BFFBFBBLLR +FFFFBBBLLL +FBBFFBBRRL +BFBFFFFLLR +FBFBFBFRLL +FBBBBBBLRR +BBFFFFBLRR +FFFFBFBRRR +FBBBBFBRLL +BBFBFBBLRR +FFBBFBFLLL +BFBBFFBLRL +FFFBBBBRRR +BFBBFFFRLL +BFBBBFBRRR +FFFFBBFRLR +FFBBFBFLRR +FFFFFBBLLR +BBFBBFBRLL +FBFBBBBRLR +BBFFFFBLRL +FBBFFFBLLR +FFBFFBBLLL +FFFBBBFLLR +FFFBBBFRRR +FFBBBFBRRR +FFFBBFFRRR +FFBBFFBLLR +BFBFFBFRRR +FFBFBBFLLR +BFFFFFFRRR +FFBFFBFLRL +BFFBFBBRRR +FBFBFFFRLL +BBBFFFBLLL +BFBBFBFRRL +BFFFFFBLRR +FBBBBBFRRR +FFBBBBFLRR +BBFBBBBLRR +BBFBFBFLLR +FFFFBBFRRR +FFBBBBBLLR +BFFFBFBRLR +FBBBFFBLLL +FFFFFFFRRR +FFFBFBFRRL +BFBBFBBLRR +FBBBBFBLRL +FBBBBFBRRR +BFFFFBFRRR +BFFBBFFLLL +FBBFBFBLRL +BFBBFFFRRL +FBFBFFBRLR +FBFFBFFLRR +BFFFBFBLLR +BFBBFFBRRR +BBFBBFBLLL +BFFBFFFLRR +FFFBBFFRLL +BFBBFFFLLL +BFFFBBBRLL +FBFFBBFRRR +FFBFBFBLLR +FBFFFFBLRR +FFBBFFFLLL +FFFBBBBRRL +BBFBFFFLLL +BBFFBBFLLR +BFBFBBBRRR +FBBBBFBRRL +FBFFFBFLLR +FBFBBBFRRR +BFFFBFBRRL +FBFBBBFLRL +BBFFBFFLRL +BBFBBFFLLR +FFFFBFFRLL +FFFBBBBLRL +FBBBFBFRLL +BBFFFBBLRL +FFFBFFBLRR +BBFBFBBRRL +FFFFBBBRRR +FFBBBBBLRL +FFFFFFBLLL +FBFFFFFRRL +FFFFFBBLRR +BFFFBBBRRL +FBBFFFFLRL +FFFFFBBRLR +FFBFFBFRLL +FFFBBBFRRL +BFBBBFFLRL +FFFFFBFLRR +BFBFBBBRLR +FBFBBBFLLL +BFBFFBFLRL +FFBFBFFRRR +FFBBFFFRLL +BFBFBFFLLL +FBFBFBBRLR +BFFBBBFRRL +FBFFBBBRRR +FBFBFBBLRR +BFBBBBFLLR +FFFBFFFRLR +BFBBFFBRRL +BFFFBFFLRL +BFBFBBFRRR +FBBFFBFLLL +FFFFFFBLRR +FBFFBFBLRR +FFBBBFFLRR +FBBBFFBRLL +BFFFBBBRRR +FFBFFFFRLL +BBFFFBFRRR +BFFBFBBLLL +BFBBFFBRLR +FFBFBBBLRR +FFFBFBBLLL +FFFBBFFLLL +FBBBBBBLRL +BFBFBBBLLL +BFBFFFFRRL +FFBFBBFRRR +FFBFBFBRRL +FFFBBBBRLL +BFFBFFBRLL +BBFFFFBRRL +FFBFBFBLLL +FFBFBFBRLL +FBFBBBFRRL +FBFFBBFRLR +BBBFFFFLRL +FBFBFFFRRL +FFFBFBFRLR +FBFBFBBRRL +BFBBFBBLLL +FFBBBBBRLL +BBFFBFBRRL +FFFBFFFRRR +FBBFBFBLLL +BFFFBFFRLR +FBFBFFBRLL +BBFBBFFLLL +FBBBBFFLRR +FFBBBFFLRL +FBBBFFBRRR +FFBBFBBRLR +FBFBBFFLLR +BFBBBFFLLR +FFFBBFFLRR +FBFFBFFLRL +BFBFBFFLRR +BBFBFFFLLR +FFFBBBBLLR +FFBBFFBRLL +BBBFFFBRLL +FBFFBFBRRL +BFBFFFFRLL +FBFBFBFRLR +BBFFFFFLLL +FFBFBBBLLR +FFBFBFFLRR +FBBBBFBRLR +FFBFBBBRLR +BFFBBBBLRL +FFBBBBBRLR +BFBBBFFRRR +FBFBBFBRLL +FFBFFFBRRL +BBFBFBFLLL +BFBBBFBRLR +BFBBFBFLLR +FBBFBFFRLL +FFBFBBFLRR +BFFBFBFRLL +FFBBFBBLRL +FBFBFBBLRL +BBFFFBFLLR +BFBFBBBLRR +BBFFBBBLLR +BBFFFFBRRR +BFFFFFBLRL +FBBBFBBRRR +BFBFFFBLLL +FFFBBFFLLR +BFFBBFFLLR +BBFBBBBLRL +FBBFBFFLRR +FBFBFFBLLR +BFFFFFFLLL +BFFBBFFRLL +BBFFFFFLLR +FBFFBBFRRL +FBBFFFFLLR +BFBFFBBRRL +FFBFFFBLLL +BFFFFFBLLR +FFBBBFBRRL +FFBBBBFLLR +BFBFFFBLLR +FFFFBFFRLR +BFBBFFBRLL +FFBBBBBLLL +FBBFBFFRRR +BFFFFFFLLR +FFBBBBBLRR +FFFFFBFRRR +BFFFBBBLLL +BFFFBFFRRR +FFBBBFBRLR +BFFBBBBLRR +BFBBBFFRRL +BFBFBFFRRR +BFBBFBBRLR +BFBBBBFRLL +FFBBBBFLLL +FFFBBFBLRR +FBBFBBFRLR +BBFBBFFLRR +FBBFBBBRRL +BFFBFFFRRL +BFFFFBFLRR +FFBFBBFLLL +FFBFBBBLLL +FBFFBFBRRR +FFFBFFBRLL +BFFFFBFLRL +FFFFBFFLLR +BBFBBBBRLL +FBFBBFBRRR +BFFFBBBLRR +FBFFFBFRLL +FFBBBFBLRL +FBFFFBBLRR +FFBBFBFRLR +FBBBBBFLRL +FFFFBFBLRR +BFBFBFBLRR +FFBBFFFLRL +BFFBBBFLLR +FFFFFFBRLR +FFBBBFBLRR +FBFBBFFRLL +BBFBFBFRLR +FBBFFFFLLL +BFBBFBFRRR +BFFBBBFRRR +FBFFFBFLRR +FBBFFBFLRL +BFBBFFFLRR +FFBFFFFLRL +BFFBFFBLLL +FFFBFBBRRR +BBFFBFFLRR +BBBFFFFRRL +FBBBFFBLRL +FBBFFBBLRR +FFBFBFFLLR +FFFBBFFRLR +FBBBFBBRLR +FFFFBBBLRR +BBFFBFBRRR +FBFBBFFLRL +FBBBBFFLLL +FFBFFBBRLR +BBFFFFFLRR +FFBFBFBRLR +FFBFBFBLRL +FBBBFBBLRL +FFFBFBBLRL +FBFBFFFRRR +BFFBFFFRLR +BFBBFFBLLR +BFBFFBFRLL +FBFBFBFRRR +FBFFFFBRLL +FFFFFBBRRR +FBBBFFFLRL +FFFBFFBRLR +BFBFFBFLRR +FBBFBBFRRL +BFBBBBFRRR +BFFFFBBLRR +FBFFFFFLLL +BFBFFFBRRL +FFFBFFBLRL +FFBFFFBLRR +FBBFFBFRLL +BBFBFFBLLL +BBFFBBFLLL +FFBBBFFRLL +BFBBFFFLRL +FBBFBFFLLR +FBFBFFBLLL +FFBBBFFLLR +FBBFFBFLRR +FBBFBBFRRR +BFFFFBBLLL +FFFBFFBLLR +FBFBFFFRLR +FBFBFBBRRR +FBFBBFBRRL +BBFBBFBRRR +FFFFBBBRLL +FBFFBBBLRL +BBBFFFFRLL +FBFFFBFLRL +BFFFFBFLLR +FBFBBFFRRL +BFFBFBBLRR +FBFBBBBRRL +FBFBFBBLLR +FBFFBBFLRR +FFFFBFFLLL +BFBFFFFRRR +BBFFBBBLRR +FBFFFFFLLR +BBFBFFFRLR +BFFFFBBRLR +FBFFFFFLRL +FBBBFBBLRR +BFFBBFBLLL +BFFBFBBLRL +BFFBBBFRLL +FFBFFBFRRR +BFBFBFBRLL +BBFBBFBLLR +FBFBBFBLRL +FBFFFBBRLR +BBFBFFBRLL +BBFFFBFRLR +FBBFFFBLLL +BBFBBBBLLL +BFFFFFFLRR +FBBBBBFRLL +BFFFBFBRRR +BFFFFFFLRL +FBBBBFBLRR +FBFFBBBRLR +FFBBFBFRRL +FFBBFBBRRL +FFFBFBFRRR +FFBBBBFLRL +BFBBFFFRRR +FBFBBBBRLL +FBFFBBFRLL +FFBFFFFRRR +BFFFFBBLLR +FBFBBFBLLR +BBFFBBBRRR +FBBFBBBRLR +BFBFBFFRLL +BFFBBFBLRL +BFFBFFFRRR +FFBBBFBRLL +FBFFBFFRRL +FBBBBFFRRR +FFFBBBFRLL +BBFFFBBRLL +BBFFFBBRLR +FFBBFFFRRL +BBFFBFBLRR +BBFBFFBRRR +BFBBBBBLRR +BFFBBFFLRL +BBFFFFBLLL +FFFFBFBRRL +FBBFFBBRRR +FBBBFFFLRR +FBBFBBFLRR +FBBBFBBLLL +FFFFBBFLRL +FFFFFBBLLL +BFBBBBBLLR +BFBFFFFLRR +FBFFFFBLLR +BBFFBBBRLL +FBFFBFFRRR +FFBBFBFLLR +BBFBBBFLRR +FBBBBBBRLL +FFFFFFBLLR +FFFFFBFRLR +FBFFBFBRLL +BBFFBFFRRR +BFFBFFFLLR +FFBBFBBLRR +BBFFBBBRLR +FFBBFFBRRL +FBBBBFFRRL +BFBFFFFRLR +BFBBBFBLLL +BFBFFFBRRR +FBBBFFFRLR +BFBBFFBLRR +BBFBBFFRLR +BBFFFBBRRR +FFFFBBBRRL +FFBFBBFRLL +FBFFFFBRRL +FBBBFFBRLR +FFBFFFBRRR +FBBBBBBLLL +BFFBFFBLRL +FBFFBBBRLL +BBFBBBFRLR +BFBFBFBRLR +BBFFFFBRLL +FFBBFBBLLR +FFBBFFBRLR +BBFBBBBRLR +BFBBBFBLLR +FFFFBFFRRR +BBFFFBFRRL +FBBFBBBLLL +FFFBFFFLRL +BFFFFBBRRR +FFFBFBFLRL +BBFFBBFRRR +FBBFFFFLRR +FFFBBBFLRL +BFFBBBFLLL +BFBBFFBLLL +FFFFFFBLRL +FBFFBFFLLL +FBBBBBBRRR +FBBFFBBRLR +BFFFBBBLLR +BBFBBBBRRR +BFBFBFFLLR +BFBFFBFRLR +FBBBFFFRRR +FFBFBBFRLR +FFFFFBFRLL +FFBFBBBRRR +BFBFFBBLLL +FBBBBBFRLR +FFBBFBBLLL +BFBFFBBLRL +FBBFBFBRRL +BFFBBBBRRL +FBBFFFBLRL +FBBFBFBLLR +FBBFBBBLRR +BFBBBFBRRL +FBBBFBFLLL +BFFFBFFLLR +FBBBFBFLRR +FFBFFBBLRL +BBFBBBBLLR +BFFFBFFLLL +FBFFFFFLRR +BBFBFBBLRL +BFBFBBFRRL +FBFBFFBLRR +BFFFFFFRRL +BFFFFBFRLR +BFBBFBBRLL +BBFFFFFRLL +FFBBFFFLLR +FFFBFFFLRR +FFFBFFBRRR +BBFBFFBLLR +BFFBFFFRLL +FBFBFFBRRL +BFBBBFFLLL +BBFFBFBLRL +FBFBBFFLRR +FBBFBBBRRR +FFFBBFBRLL +FBBFBFBRRR +BFFFBBFLLL +FBBBFFBLRR +BFBFFBBRRR +FFFFFFBRLL +BBFFFBFLRL +BFBFBFBRRR +BFFFBBFRLR +BFBFFFBLRR +FFFBFFBRRL +BBFFFBBRRL +BFBBBFBRLL +BFBFFFBLRL +FFFBFFFLLR +BFFBFFFLRL +BBFBBFBLRR +FBBBFBBRRL +FBBFBFFRLR +FBFFFFFRLR +FBBBBFFRLR +BFBFBBFRLL +BBFBFBFRRR +BFBFBFBRRL +FBBBBBBRLR +BFBFBBFLLR +BFFFBBFRRL +BBBFFFFRLR +BBBFFFBLLR +FBFBBBFLRR +FBFFFBBLRL +FBFFBBBLLR +BFBFBBFLRR +BFBBFBBLRL +BFFFFFBRRL +FFBBFFFRLR +BFFBBFFRLR +BFBFBFBLRL +BFFBFBFRLR +FFBBFFBRRR +BFBBBBBLLL +BBFFFFFRRL +BBFFFFFLRL +FFFBBFFLRL +BFBBFBFRLL +FFFBBBBLLL +FFFFFBFLRL +FFFFBBFLRR +FBFFFBFRRR +BFFBBBBLLL +BBFBBFFRRL +BFFFBBFLLR +FBBBFFFLLL +FFBFFBBRRL +BFBBBFBLRR +BFFBBBFLRL +BFBBBBBRLL +FFFBBBFRLR +FFFFBFFRRL +FFBFBFFLLL +BBFBFFFLRL +BFFFBBFLRR +FFFBFBFRLL +BFBFFBBLRR +FFFBFBBLLR +BBFFFFFRLR +FFBFBFFRRL +FFFFFBBLRL +FBBBFBFRRL +FBBBBFBLLL +FFFFBBBRLR +FBBBBFFLRL +BFBBBBBRRL +BBFFBFBLLR +FBFBFFFLRL +FBFFFBFRRL +FFFBBFBLRL +BFFFFFBLLL +BFFBFBFLLL +FFFFBBFRRL +FFFBFBBRLR +FBFBBBBRRR +FBFFBBBLLL +FFBBBBFRRR +BFFFFBFRLL +BBFBFBBRLR +BFFBBBFLRR +FBBFBFFRRL +FFFFFBFLLL +BBFBFBFLRR +FFBFBBFLRL +BFFBBFBRLR +FFBBBFFRLR +FFFBBFBRLR +FBFBBBBLLR +BFFBBBBLLR +BBFBFBFLRL +BBFFFFFRRR +FFFBFFFRRL +FBBFFBFRRR +BBFFBFFRLL +FFBBFBFRLL +FFFFBFBLLR +BBFFBBFRLL +BFBBBBFLRL +FBFFBFFRLR +BFBFBBFLLL +FFFFBBFLLL +BFBBBBBLRL +FFBFBFBLRR +BFFFFFBRRR +FBFBBBBLRL +FBBFBBFLLR +FBBFFFFRRL +FBFFFBFLLL +FBFFBBBRRL +FFBFFFFRLR +FBBFBBBRLL +FFFFBFBRLR +FFBFBBBRRL +BFFBFBFRRL +FFBFFBFLLL +BFFBFBFLRR +BBFBFFBLRL +BBFFBFFLLR +BFBBBBFLLL +BBFBBFFRRR +BBFFFBBLRR +BFBFFBFRRL +FBBFBFBLRR +BBFBBBFRRR +FFFBBFBLLR +FFFBFFFLLL +FBBBFBFLLR +BFBBFBFLLL +BFBFBFBLLL +BBFFBBFLRR +FFFBFBFLRR +BFFFFFFRLR +BBFBFBBRRR +BBFFFBFRLL +FFFFBBFRLL +FBBFBBFRLL +FBFFFFBRRR +FBFFBBFLLR +BFFBFFBLLR +FFBFFBFLRR +FBFFBFBRLR +FBFBBFFLLL +FBBFFFBRRL +FBFBFBFRRL +FFBFBFBRRR +FBFBFBFLRL +FFFBFBBRLL +FBBBFFFLLR +FFBBBBFRLL +FBFFFBBRLL +BFFBFFBLRR +FBBFBBFLRL +FBFFFBBRRR +FBFFFBBLLR +BFFBFFBRRR +FBBBFBFRRR +FBFFFFFRLL +BBFBBBFRLL +FFFBFFBLLL +FFBFFFFLRR +FBFFFBBRRL +BBFFBFFRLR +FBFBFBBLLL +FBBBBBBLLR +FBFBBFBLLL +BBFBFFFLRR +BFFFFBBRRL +BBFFFBFLRR +FFBFFFBRLL +FFFFBBBLRL +BFBBBFFRLL +BBFBFFFRLL +FBFBBBBLLL +BBFBBFBRLR +BBFFBFBRLR +BFBFFFFLRL +FBBBFBFRLR +FFBFFFBRLR +FBBBBBFLLR +FFBBBFBLLR +BFFBBFBRRL +BBFFBFFRRL +FFFFFFBRRR +FFBBFBBRRR +FBBBBBBRRL +BFFBBFFRRL +FBBFBFBRLR +FBBFFFFRLL +FBBBBBFLLL +FBBFFFBRRR +BFFFFBBLRL +FFFFBFBLLL +FBFBFFFLLL +FBFBBFBLRR +FFFFBFFLRR +FFFBBBFLRR +FBFFBFFLLR +BBFFBFFLLL +FFBFFBFRRL +BFBBFBBRRR +BBFFFBFLLL +FBFFBFBLLL +BFFBFFBRRL +BBFBFFBLRR +FBFBFFFLRR +BFBBFBBLLR +BFFBBFFRRR +FFFFFFBRRL +BBBFFFFLLR +BFBFFBFLLL +FBBBBBFRRL +BFFBBBBRLR +FFBBFBFLRL +FBFBFFBLRL +FFBBBBFRLR +BBFBBFBRRL +FFFFFBFLLR +FBFBFBFLLL +BFBFBFBLLR +FFFBFFFRLL +BFFBBFBLLR +FFBBFBBRLL +FFFBBFBRRL +FBBFFBBLLL +FFFBBBBRLR +FFFBBFBRRR +BBFFBBBRRL +FBBFBFFLRL +FBBBBBFLRR +BBFBFFBRRL +FFFBFBFLLL +FBBBFFFRLL +BFFBFBFLLR +FFBBBBBRRL +BFFBBFFLRR +FBBFBFBRLL +BFFFBFFRRL +BBFFFFBLLR +BBFFBBFRLR +BFFFBBFRRR +FBFBBFBRLR +FFFFFBBRLL +FBBFFFBRLL +BFFFFFBRLL +BFFFBFBLRR +BFFBFFBRLR +FFFFBFBLRL +FFBFFBFLLR +FBBFBFFLLL +BFFBFBFRRR +BBFBBBFLRL +BBBFFFFLRR +BFBBFFFLLR +FBBFFFBRLR +FFFFFBFRRL +FFFBFBBRRL +BBBFFFBLRR +FFBFBBFRRL +FFBBFFBLRR +BBFFBBBLLL +BFBFBBBRRL +BFFFBFBRLL +FFBFBBBRLL +FBFBFBFLRR +FBFFFBBLLL +FBBFFBFLLR +BFFFFBFRRL +FFBBBFFRRL +FFBFBFFLRL +BBFBBBFLLR +FBBFFBFRLR +FBBFFBBRLL +BFBFFFBRLR +BFFFBFFRLL +BBFBFBBRLL +BFFFFFFRLL +FBFBBBFRLL +BFBBFBFLRR +BFBFBBBRLL +BBFBBBFRRL +BFFBBFBRRR +BFBFFBFLLR +FBFBFBFLLR +FFFFFBBRRL +FBFBBBFRLR +FBFFBBFLLL +FFBFBFFRLR +BBFBFBBLLL +FFFFBFFLRL +FBBFBBFLLL +BFBFBBFLRL +FFFFBBFLLR +BFBBFBBRRL +FBBBFFBRRL +FBBBBFFRLL diff --git a/2020/inputs/day_6.txt b/2020/inputs/day_6.txt new file mode 100644 index 0000000..ae67ede --- /dev/null +++ b/2020/inputs/day_6.txt @@ -0,0 +1,2199 @@ +nvlyak +nyvha +yaen +qynia + +kend +endk + +atxcykpvmb +pcvmthyxbak +ayvpcbtkxm +cvpkyabtmx +typbmvckxa + +s +s +s +s + +on +aoqc +owq +coa + +pw +wpi +pwxlhqor +pw + +nx +xn + +dlevrzpucfmsq +pceimlrfsquvd +dpceruqsfmlv +hgxudfpqyvbcslrjname + +kczmswvorg +uryvlqaogmdixs +rmostvg +gsrmovb + +ref +fer + +vmwdhgnlfiyoepsujbk +epudykjwhignmfbovsl +fjvuimnwbkogsldhpey +ibmhuscpgeolfkynvdwj +psjgubfvlhaknodeiywm + +fmnpljusix +vqrefngyjdahclk +lfjons + +y +uiwl + +lsuqkmjinrzhgevfpwto +gkmodihnsjtful +ciguflhkojmtsn +thkjnoufsimgl +oskgmdfljntuhi + +gaktdwxhmqvfrpsuc +hmtwkgipdvaurxqf +akrmpxtughdqwfbv +gumqniswhrdkvftaxp +hagouqxpzrjlmedftywkv + +zkbyecw +kczeybw +wbeyakuzc + +iwdkjlarzfynvechgbxsq +jetfxrzdbcksnavilmwgyh +wvexlryjbizfgkhanqdcs + +vk +kv +kv +vk + +yrguw +rguyw +pwuryg +gnuwry + +dyhkusanvjwc +ukaywncj +uyqjknwac +aknyjcuw +jnukwaytxc + +toczmkldrevywiajgn +jyldmgewcvrozinkat +iynkmatdjerlogzwvc + +pthyrfjgqelxa +qfejxtrynlh +xwdfkuziyhejtqovrmlc + +osjrgc +vohfpa +goc +gjo + +j +jon +j +xdj + +bpqhmgwzakfrtjvuno +eafupgombqnwrkzth +frwqtdngpbhuaklzmo +wgtnuchpkqibfzmravso +mfbtvkghauzopnrwq + +xiocgdwpastbmyj +rdzgcbtfaomsy +dstgbcymozkqal + +xvc +cvx +xvc +xvc + +dhvtlqkeniymjzoa +eoazjnhvtkyqdlm +koltmeyqjhzdva +doumkhrlyzjqeagtcv + +mn +mfhw + +kx +x +jm + +x +xv + +tdhyubvwqfxejslpringc +xqhvtbfwrygsdapjiulnec +vnwbsurdiexghpjtlycqf + +pqtdgsmkolzryca +qjguxdratfeclpmoy + +twnviyzmlk +gknjmyqvziwl + +deoabzihqvycxn +iqcxadpehvry + +dbflcxvnapwgei +pchmodnafl +hadcflpn +dlcfanp + +tk +kt + +peuroxtzyg +iwdcnlqfskmbavjh + +mjfh +ynkbrsdpwoqtagci +lvx +ujxez +xl + +gyuszwb +sioduawzrglb +tsbumxwzg +zwgeuxbs + +tujvkwpy +tyvrpmjfk +vwpkuyjt + +wdkqailvjmfcshugy +qugwvlxdsikhfmyjac +dkiscawvyfqhmjlug + +noblsu +snloub +sulobn +lonubsm + +osecqjbfg +fljbmiose +ojesfbt + +zmctviabre +ajzmicetrvb +ctmivabzre +yrztbmieavc +mivcbtazer + +tyql +osmjgxzrcakn +iwftdbl + +nmqflphkvyjcatgbzd +jxzemtvdknwqr + +ilxrytkdpmsevfjchozqw +tpdrjxwihvlycozemsfkq +hitwfmzvjpylcodbqxsrke + +flhp +pflh + +ao +a +o +o +gljzn + +ajmkvwqu +ogvjzwta +whalvuj + +mhktpynfrjgblaqueox +anmjxplvibukhztqersy +tabljcpemkyrxhunwq + +lnkvfawqo +nofpsqwavylz +vofwalqen +hcnowiaqlfv + +dofxbaqrtnyvkpljmhsu +uklstfynmbxhapojqi +tufmnpaqyojsklxhb +oanlusqmxftkpjbhy + +tpjle +the +vtpez +ytern +ouecxwfkt + +jbna +xepqbmufn +ybjni + +jklhaxoqysbt +tzwpcf +tenfcvdmpzu + +kyqumgfrdiapzwojtvch +fvczqjrgadiwhnpluomk +dpwkmrjzauiqvfgcho +nkpwrmzidfahcvjuogq +azrkxioghpvcudmwqfj + +udjshwgpeaozimcl +fylwnoevcza +evlakborcfwz + +xhued +iubgewo + +lywovcemagd +ahveyomxsl +oqzyfljavbe + +pkyn +befycqpi +pysk +yp + +mgi +mgi +digm +gmi + +cgdqeoyfjranxuv +lwnkzeptsdqihvcujmg + +wzqrhgibdxuyl +ludbwqxgiyr +yruxibwdgql +bgtwqxruylid +buyrwlidgxq + +gqwvxspbl +xvbwpsgql +bspgxwvql +cwlxsvqgpb +sgpxqblwv + +camqk +onaslperix +jauw +yatm + +z +z +z +z +z + +fx +fxe + +goemcr +roegm +sgmxiero +ogmert +germo + +czgdxtiprhnwqeujkfl +dyhmkanzwbv + +n +e + +dkcjqbw +o +gp +h + +zbwcu +ubf +mveurnab + +tqwbxuc +qcwutxb +ucbxwqt +xqwutbc +xqtuwcba + +uwhqrt +wrtq +trwq +crtqw +wrtqc + +rqfntm +nrqm +rqmn + +limsht +alstikh +ilhst +uhitls +lsahti + +oaex +vsgyo +lziu + +cwqdlxbst +cdxtlwbsq + +hgqc +hgdq +qhg + +eh +he +eh + +zfutalwkxms +ukxltsfzmwa + +zpklocsqgwyhb +zobyqhlcksgpw +zhspqwovjylkgbc + +ymkudfqethwgji +emtuyfwghjdqki +zwyeumktfhjdirgq +wymqgifkudjteh + +edhqnrxtpz +tqdxznrhep +qzepndrthx +exzrhnqptds +zetyhrpdqunx + +vmleax +valxum +vpmlax +axlpvumz +clvamxbn + +ebt +xr +rl +u + +vzny +nz +nz + +ywebzj +ywefjzb +bxwnjcyzkep +zjeywfpb +yldrbhsizajewvu + +hfd +dmf +fadh +dvmf +fcousnld + +egar +hwnrgzcp +bgofedjr +jkruvsylg +rdvgue + +jsge +hesqg +esug + +xaoz +ocuqev +fwgrlp +otxv + +fzemjdhwb +xhdmjzbe + +ytsfpumedxqvzhl +fdteschymvxqlpz +phyrfwtqlaxgvznesd +hvlextsbqpzyfd +jydlhetzoqfpsvix + +jxkrobp +rsplxbgk +yxmbpkorhj + +injbuyktrcs +bcsriktuny +skyrhbtnucxe + +duck +cykuv +osfcurnlwax +uvmc + +vpt +tpv +pvt +vpt +vtp + +dacxvsi +icaxsd +xdihcneas + +nf +nkf +fn + +yrewaxckd +wtydesfcr +erdftwqyc + +hmfezapkqjyri +ekqajhyzfpmri +raikjeqmhfypz +qjmyrekfzphai +frtjeqkimhazpys + +ryxmsbqovuidphfwecajnz +hdjmiqbxnpvouyfcewsazr +vubyrcmqeswafxjzhinpdo +cbjmnaoqurlhsifvwzdexyp + +iu +ui +isutlr +iu +iu + +lftaziorb +rvamfeyjgqnx +frtak +aifr +aftzr + +us +schk + +bjafywgieth +tifbhyjgwade +imhwefbgatjy +wgtyifejbah + +a +yj +b +iab + +qkgazumerlhb +syritxopfvd + +gdiakrne +ygdpcwqfbmikzanver +dolarkigen +gtkanierdh + +axv +axdvl + +erpjfh +prgjfeh +hrejpf +pejfhr +ejrhfp + +zijsrtcqdxmy +mtxdfyji +timydgxj +jtmhvakxidyn +iyjmwdvxnt + +rh +har + +tdoyugpljirwenzx +nurlzgjtyopide +jnrlitgpzdoyue +zlptnudjryogie +pzgyeoliturnjd + +ivcyexsotkzqmr +sgfjhqnpy + +omw +joq +mop + +welbhpzftgjinqyk +gwpdjqacitshlbykfzmrx + +sygqwn +fwyqsdg +scgwqy + +gdjzwbhltxs +dlkojzbq +jfavyipcembun + +cydkuqlhan +uavstnychbqxk +azqntcuyhk + +k +bf +z +w + +gyh +e + +rhmpg +pmhgr +rpmhg + +pas +vhtsaqfgnu +kpjsa +sab +jcopska + +tsjabirpehudncx +custniapedhxrb +cepnuastxhdirb +shbpetcdaxuinr +dbtiepaucrshnx + +tuswfrqpgxk +kprjsdtqxunf +pxwfrtuqske +xwskmfprqut +pfrtxqskhu + +szirxjtu +zuxjtsi +jutsxiz +usjitxz +ijstxuz + +zqesxfbmrivokl +mevkzirbfol +fbkomeyvilrz + +rlwoeckxnh +xebkornwcl +xcoknwler +wnlkrcoex +kecronwxl + +fmdbraihnpxytkcgezu +kbeyxmadczhritnpuf +pnhfmubicxteadrzyk +updrybtmhzefcnxkia +kbezfjwmhytnixacudpr + +w +w +w +w + +fgwdoctvpzymhbrkjxn +yaqjctxvsrozmwk +xkwozitrvmeqjcyl +cwkazxtrmlijyov + +vnym +bvmy +yvm +byvm +vym + +mxjblongrfahycqvpu +ncywhdpxefajbrgloqu + +sgukdmfqvbwcei +zigahlxojdnpc + +fudobaklngyjqpstmiz +psflydzmbtkiqaojgnu +itgzqsfdyabnolpjkum +sitlkyuqnjodzmpbagf +ytdijopqublaksmngzf + +vhaobfn +ohbnfav +vahofbn +naovhfb + +tfhsqwcbrv +iqrbzspnwyhtfc + +pfbwotesuyhkvgx +vnrlcxayzdmih + +nbyhpfklvtqo +qbtjopfyk +qpoeybfkt + +uvmgzs +pvsmizrug +ghvmszu +mugszcv +kusmvzg + +mua +amu +uma +mua + +d +m + +s +s +yuk +s + +gtjqp +pfotsh +pshgbt +wpeztyr +bqjtplo + +zwbvestiaoljy +gmnzshupfqre + +anvsdkbltiugc +tqsdcanuibgvkl +stkrvabegidclxun +takcsgnuvmdibl +cvqsklngiubadt + +txvfnuwcljpqkeryoamigd +jgarvmodftpniekquxszcyhb + +htu +hegb +whf + +jn +nj +jn + +vcjlxekmqzoduphynw +hkyeojlvndumcwzx +ozhdnvjeckwlmuxy +ujxdyznvlcmokhew +vdywzekucjnhoxlm + +blxuhyvjrzow +uzlwokmsripy + +rum +mrl +rbwfmz +durmq + +obcpqvkitduelwf +ahcrwiltpuedfobxkv +cvijgzoukptwdfble +kpqjduetilovfcbw + +irfqsp +wifas + +xvgyrpq +yrpqvhgzx +fspxmrivkwgycnequ +axhyqrpvgz +xdygqvrpa + +xrlmcsibvea +bdcveasxzip +esvbclaxi +vaxsbcei +xaeibsvc + +songrtmwhpydqizlf +halvzroefxcsubt + +uqozritygam +kmtryqvz +qfmjstkyrz + +rqtepcofhuylnxaj +xoptqwruhijsmnzcylfe +hxqcpyfjntleuro +brjyuoetfxpndlvcqh + +prltixwohdmfjukgqzsv +orluxtzpvjafdqwkhsgbe + +iyhuarewvbfjmlz +vramijyfzhbew +zyehbmwvifjra +vjmweybazihrf + +duixtbqyhomsla +suinmaxtlqdoyhb +htiquxmaybosld + +pselyhov +zhwpovekt +snheopv +ivxophe +nhpoeuv + +amqcriebkojlwyuxnhfdptgzvs +uovdszkygbjhanefqxplimtwcr + +ozngukih +nvksbd + +grkotivmcxnyubwleqspjzhfad +ekmqxnfabwiduopjsgclzvyhtr + +jzv +wzxfivmjb +zjvp +zjv +jzvs + +js +evqis +qxs +swyct +s + +n +n +zn + +udjtxws +usdwixj + +lf +l + +cdsaxzlv +jcsxlnydtrzvk +lvdqamzsxhc +udlxwczvgs + +gutwbrhjxyeam +jrleawgbsnxthimyu +rbjexdythumwag +hrwjmoexytqaubg +uwymabxrhjqgdect + +vipjrlbsmcogxznty +vetpngyzsbmoxcrijl +hoxvbsnjlfygmrczpti +pmlgzyasvxticjbrknod + +xzakbvtehnlciswmyufjdrgo +kocmslwbgvuxijernzydfhat +vcdxgkslnzoarmjwutyiefbh +tzhugvbcnokyxsfliwardmej + +up +u +pu +fu + +cbzjelmqivw +ickezvjlqm + +srwnt +nwrtj +rswnt + +hfjxoskd +dlpzeyjai + +mt +tm +mt +mt +tm + +rpxenfzmhwdvacbygiujkqot +lhbvkwmpfyazrtojcquxind +qtcjdairznhuwxmpsvyfkob + +apvk +qvapk + +ujscpqtgbyezdfhnwoil +bftognyujilpwhsqzdce +zbhslwipdjeqntcfouyg +tyuqdlfepgzshcoiwnbj +dzqxjblenucpwshtoiyfg + +cdxtsaunbwkezlrp +vbdpsuktlxczerwan +pnxudwaclrtebksz + +tq +t +zt +t +jtqg + +fvmhiloanbgjzptryucdkxw +jzhwtkbdpoxfacirngluyvm +pwnybcjmgxurfzivoklhdta +brtavopdklnhxwgzmifyjcu +ncifvypdtgwxbzakhjrmulo + +kwhiguft +uxyo +ux + +ruyoe +ezqhbi +clndewsfta +e +qrke + +doa +doa +doa + +xt +tx +xt +xt +xt + +roxwktbmgiyc +qtbejyxzlpcaighfod +oscgtuyiwvrbkxn + +agcdevxkmbnzqjl +jrdzmnclbgkvexqwa + +pqjtyenfmxdaorw +qayjpxmfdterwon +frdtlawxmjnoeqpy + +aze +zea +veaz +yzxdequoa + +eq +uetqs + +jsmezrk +zskmer +zmkers +krezsm + +mfzqsukgcw +cmskguzfqw +gksucwfmqz +uwqsgfzmck +wfzucmgsqk + +wftx +fwtd +twf + +bizwg +gzwosd +afzqrwun +cjpzwb + +qjntchmdbgpe +nqtephjgmdbc +qjeltdcphgbmn +nqtbcjhepmdg + +g +g +gr +g +g + +yulnpwc +uplcwn +nplemufywc +calkisogupw + +sigh +igsh +ghski + +naqpd +xydrsjwlibzm +qdevh +cd + +mraejinsdp +mierdjansp +qpsmrianjde +npirjedams +ridpaejmns + +o +o +o +o + +lhfqsxm +xlmsqfh +slfqmxh + +jhivsoabqlfpeuw +fvxrelbhuncowqjtsz + +yajhetclfk +jnqbylmpwgxcf +azchyrsivjeltdf + +n +n +n +n +n + +hkuaq +hkqua +uakqh +khqtalu +ahxkuqy + +tguprf +pfu +ufp +uofp + +lnmtjo +njolmt + +qymzdw +vjckmtl +oipreghfausnxb + +niswjectqkldzyg +wunjdetklisczyqg +gldcysiqznjtekw +iqwdczjsytkleng +lgyiezdncjqktws + +dntm +atm +tma +tm +txm + +ntpcwask +skcna +nksac + +prai +pria +arpi +irpa + +mzldgbrtovj +tbjgldozmvr +ogzvdlrjtbm + +ft +fq + +jgstdlzarcemiopynukfw +ywlhakgzeoxdnjmsirc +moicgebadzlwkysrnxj + +jpeiqxbz +xipjebzt + +rnpf +fqhu +agprm +wedyzci +bxur + +aynswjoklfeqzcitxudbrvh +ihrbxwvdqsyoejpnfkzc + +hrqliwxtfbk +qiwfrxbtkhl +kihqxrftlwb +wrhlxbtqkif +tfbqriwlkhx + +bwdhnqk +wbhkqtd +qwbkhdx + +fpcboialrdgqkejntyzm +lmieayocqpkznbrtdfgj +mbtdrpozfljkeyangiqc +pmdjlerfkybgnaoqzitc +pganmcfbtedkrzloyqij + +zfrvn +zfnr +znrf + +nuq +ltiuacgjs +aug + +xj +lyzixn +eaxwuf + +aeywqjkl +eanklwju +kjelzaw +ealjwtk +azklwej + +ncqxulrmfvedao +eodqxlvmrncu +elrmnuqpcdoxv +qloxudmvnecahr +lcdxqwmurvznjeo + +aijnhvxemsqztfk +xnvkehsiqmzft +tehvxnfskiwqzm +epsmzhixqvtnkfr +htkinzvqefxmrs + +wgfzomlbhujxs +ezvrxmkycafwob + +lhyrq +ylfherq +hlreyq +wqlyerh +hgsqlyru + +acnkurdevm +duernacvm +nteaducorvs + +hxvqtsjzgn +iakeoyr + +id +i +di +hkxi + +fqunm +funxikw +xfiuknz + +wvgpqlzxnui +livzmwyqgpnu + +eanbkcjlxpsm +ofmdwrqe + +w +ws +wr +w +w + +aylsbi +lyaiqsgb +vyeblmasuhi +yblsia +ylbsiaq + +fpbhozqdljytwcnxsvr +zarwdgqhtvyxcnpbsofji +dbzhsfwrvqnyjxtpoc +qwxpbnycrfjsozvhtd +tsoypwnmzfjhbvdxcqr + +bezfskqut +egbpkdflqtmouzs +kxzenfustqb +tsebufkzq + +hoekryzuqt +oreuqhyktz +teorhukzqy +kyqehortuz + +d +uqwgitdaj +dz +vod +fvd + +smjqnlt +jsqmlnt +ntsqlmj +jqntslm + +saxdlkjwvyctqenrio +wqnvsoyaextcilkrjd +krdqwevyliojxcntas +ywlnkcafdoirsvjxetq + +ryae +yaq +ya +ya +ya + +epvy +nvyqu +vnxy +oyvh + +kschegfmla +lgfmscaehk +gshfalcemk +lcgemshkfa +mkgaselhctf + +bfxqtegnoismrk +mnuivtxasgbjqyfkp +mkxgrnltfiqbhsw + +s +s +s + +zoe +eoz +oze +eoz + +q +kuprd +gvmbn +vctx +oi + +nbrjveycdlw +jyhfcwnglerv + +vkoxqwfhubrcsnme +bqkexhovswmntfrc + +aidoznexygkjlqs +neysaiudmoqklgxzc + +ypsn +eyp +yp +iyp + +gol +olg + +rypjohwvxkisnldatuzfb +btpxvolknwdhuryiafjsz +vkahgbsitwdoyjplfruznx + +mipqtk +nikqpvu + +kztifpne +yzit +rigtz +zait + +jxgvt +gfjoky +kvygh +dmwgqsrcp +ounalgyze + +nypvuiseqtjwxchlbfogdamzr +apqnbzhwmjldotfsvexruicyg +bpyjzomwahcrgsutlefxkqdivn + +qumcbsvlpthfwyda +hagwiucnvfdypqlzs + +tog +otg +gfto +gto + +ctp +uda + +vlbi +swmiujf + +xbi +upsdbi +bizr + +ltw +we +wzavnymh +iw +wfe + +caqjdphelmtvyfbxo +acxmtljedhoqbsfyp + +fyqthpe +bmrceljqy +eyqt + +frjdhuyqsgon +krouhsfgydnj + +ltopekjnacgbms +elngjotmpsca +splcgnatmoej +egjctspmlaon +jtealcmpongs + +fvsmiotkb +fbnupmcsxd +fmkvjysb +qbksmywrtf + +mklqnp +mqnlk +mwqnlke + +jykqrlaocvunfpix +rcymsnwuafdtvgbqoieh + +c +c +ct +c + +mlv +lyfpq +vsli +vrdwl + +srtaq +nuptlr + +hcfjdaqwo +qmoefalzdh + +zxyksijbeahgvc +xgvjhsczeyikba +yxickjesbhgavz +sjvgibeczxhkay +hvgizjmaxsybcke + +wjmypxi +jipmx +pjmix +bjivamxp + +dytnalmqkbpruef +qplfuynbdaertm +rbnetqdupamlwyf + +e +e +m +p +e + +b +eb +b +b +b + +yieovwqukxcnbfjpdg +qjvunkgywpfoidbxec +jupowqfbiknvdgeycx +dqeicgjfpxonbukwvy +gociquxvjbfdwnpkye + +lwrch +huosc + +somiywgdbf +fbmvdwgzsy +ufrltkydsnwm + +epvfduyh +vfpeyuhd +epdchvyuf +udeohyvpf +evhpyufd + +b +b + +szfgmlxwd +eapoqydvi + +puedtjkqbwfznhvycxrolamsgi +cvqeyszrwdfnkutjihxmlapbgo +nfdpoukvizgctxwmeaqjrhlbys + +nuf +je +uieq +ctodh +sbx + +psrwqlgd +lrwdqgpzs + +qheijmngzsrdawbvucolxpy +vhqnlcouibjdarzxpmeygs +edlixjhrquamovnpbsgycz + +jkphyr +urycxn + +snbcyoe +nuewpy + +gbnsoirkwyhp +iogsqbkymwp +fzbwkeyutdxp + +w +w +w + +jsbp +bjsp +jspb + +jfbdpv +pfjvb + +wfhvsjloznb +gmupxcnrakelfsvzqd + +dbsuoriacgnwxtzveyhqfkmp +adwcifzvsgnkphyburtexomq +wzbkmsdpfrhiaqxyecuonvgt +athzyrgbwckvomqudsnexfip +vidbhyqesancrzugkxfopwmt + +nl +ln +nl +osnl + +iewcxgqtf +gtwmfieqc +icfvqwyhadgkn +qcgwerfli + +wyj +jy +atycnje +qyjg +yzjsg + +ivjwfeuz +jvcw +mbhvwj +rswvhjd + +zmjlpeia +eimrlpzaj +jmealyqpi + +zgkf +gkz + +zuosdlvkxm +tlxskcvpumo +kuyomrxlvs +uvosxmldyk + +yuilcqhgmazts +swhvdcigltmakzuy +stojxiflyghnazcpum +gkhqtyciuwszmal + +nzhlyu +hngc +ngcah +anch +nvkhj + +xhfvwbkn +nahwxfo +fhgnwx +dmfuxnht + +vbhpedluncftoxys +cydfsolpejhbntux + +vkilx +pvxskd + +hvwuecgs +guvwcsh +sgrwculmvhb +wcpznuqsvghi +vhwcsulg + +ndfapjlztc +npoacfjtld + +jzd +xaulvyksp +zeh + +ck +ck +ck +kc + +kiroh +rh + +euxdrkvtfbqon +ytfvurxwheokqn + +sirznatbxkghm +skaiqzrmhnx +ztgmhrsikanx +hksxmairnez +ywdiracnfsuzhjxmpk + +bacgwvmxrdfne +pdcofwbza +cfqdwuptzabo + +dqmp +dqpm +qvmpd + +kczxnlerm +vqrzjmf + +qmuorwspx +dywcxarilegkh + +gqzph +qhapozk +zhqp + +fastkjnl +jsnafkt +jfnacskt + +fxgpiadjrvhs +smfwbejadh +hjmfyaods +fzdqsjham +hlcbyfjkaunsdt + +dqlevpahscoyi +iypldavhsqoce +clhvyaisoepdq +eayqiosdlpvch +epodliqvhcsay + +nhxbmlqv +qylkhmnxvbj +xbnlvqmh +vxmbhqln +lbvhxsqmn + +exrtdq +tderq +djretq + +lwqj +jmwlr +zbswtx + +pxi +ipx +ixp +xip + +vgfscwrqzdojxhe +xfvqhzsjecgownd +qdopyzjwegfsxchv +gosqeckhvzdjfxw +gszxpfveocjhqmdw + +gvlyuiscaewfpx +gfwjtapuoynvqzi + +ycsdnbzjoki +wfpvogmqhautlx + +tbjliqdfzgny +zjwilpghqdyekc + +yftcnao +ncfytaio +conyfta + +yslactbwhjfvnomiue +mbyiavojlwtunces +eontumvircsalbjwy +jguvcxylitsbmwenazo +bayolijwqcevpmsktdun + +ynmki +ykinm +inymk +iykmn +yimnk + +vzjnpybg +vjqfyno +rnvity + +ilxkjhcfpdmeb +hwdjleirc +aiulechdj +dljiwehc + +rptom +ife +nuli +yized + +loe +eg + +fprtvcgkwnasljebhm +nvbltrckumfhpgjew +grpuefzknmblovjw +bjwgykpinqlemrd +mrlegnjwbkp + +xtquyrjnszl +ysrqzj +zsqyjpr + +ft +fjt +ft +tf + +ejli +l +l +rl + +lwgrihbdvno +ydbrvhgolniw +rivdongwhlb +ndhbrgwilov +dwvrnlhbgio + +fc +fc +cqfo +fc +fc + +nhaoi +nioha +osijah + +hgrec +gchre +cehrg + +higmvfbtjre +ikhxjbrefvq +brjiefhvl +ivfeqblhrj +hrkifjvbe + +vsgqmibordtznkl +dehupjlcxtsrnfawy + +t +crfi + +nrai +hjcmpzla +dveria + +krp +achvofx +kbp + +vfdzhuskanm +lhucb +uh + +qu +uqj +quh +qu + +tokmzyuxjsbvic +zegday + +wqfxlhyapcdtv +vctalwmjdpqyfh + +nqge +vneiqt +hqvfenwj +nksqcrlmde +vqgbone + +f +w +w +f +oq + +qziwcdjyepvhn +wvypijednqzc + +uwjflbhoq +dwxublig + +c +lc +ec +c +txcjrkd + +cglvpyadf +rqfvgaplc +kgpatsxuelvh +oapgvliwc + +ln +st +bs + +sfra +dskrnf +mzhjrfpx + +phu +uph +uph +hpu +phu + +pcxhvbf +hxbtyk + +jdzsaiwbphmftqxrlngcyoe +mqbrsplojgyheznxcdtfwia +pitajxzhsonwygrfblecmqd +nyliauzgfbcprewhdtjmsxoq +taxnylhvgjqewcksfpmzdbior + +h +c +om + +ruplsfnhyjqigwkzexbtoc +newjivhyckdagob +ywocjmnkbghie + +jdrtpbvohaxy +dnjxyrfsv + +lq +nsulxvmhj +l +lk + +fdsxhvqaiblt +fihykrdlsoaqx +laqgpznecjiuxfsdhmw + +capkzueqjmdv +ckdvymqazu +fklcmdbuxqarzv +zkcsvmqhiadgeu +jotqkuzndvciwam + +lzqbrgkp +grvpntoz +ozwvpg +suefagcp +pkjygd + +zbangyoqjlkdevrxti +gzniebarjloykqtdxv + +xviqehycstgjladuoznfwp +odwplyiqnxghutezcvsj +ersxgqtcjouvdiznlyhwp +cpshuoijtxvelqynwmdgz + +tnzkdmgqci +mqkzgydtijn +mtikzqdng + +d +ad +d + +k +iof + +otkvualrqdsixf +nkhwid +dbkiwpj +ikd +ekziydgm + +wjvgqsxinfburh +wxgqsurjvflnhbi + +hebmgftkpcq +owektbpfhqcmg +egtfbpckhmdq +qmcetgpfkhb + +exukswmlgznjoqhvabid +dkgmeoahtxpzflnwru + +lf +fl +lf +fle + +zblhfjqpr +rzp +uprzo + +wmktipjq +twmikp +jmtwikyp +azcempwtkiv +itkmpw + +qwodjmelanykpxuh +weqnajoxmupklyihd +pjodermlyuknwxhqa +mqbaoxylgdshtnjpwuvkfe +lnaxijmwqhukodpye + +azxw +xazw +zwax +wafqztx +zaxw + +ydzmvpskfjiqneluabgtrw +vyfdpqrkbistwlaxzjum +ukortizjvdwhlpafycmqsb + +cno +y +no +y +bqe + +zlcotxyhfeij +xtlvhifkszoj + +kczqegopj +qupzjod + +hpclqaktjmbnyxw +iqphxcamk + +rebc +qcbra +brc +crb + +flkoiavp +aduhjeqtyrmzkn +cslwgfaokp + +qmnzcjb +bmeqzjsc +jxochgfbmwzvq +zqcbmja + +deyifvsxw +evdyw +edbhzyuqv + +xmhknbcwdaztvl +mruslxozyangpj +xgszalnm +aoqmleunizxs + +eh +he +eh +nxeh +eh + +cjbx +jxsub + +yusezdlpgxtm +dyrkmstuegpx +pdxmyeutvkjsrhgaw + +ruz +rzu +zur +zru + +wgbdctzlsmh +peglstyhcd +adtqlhcgvs +tylndgrcujhsbx +odltpshecg + +ylntchparijwfo +wtrjpiaohylcf +wlfyvrehcutapgko + +tkbpfhjzravmquxewgl +goxphazbfvrqkijlwtm +mkrbzqphvawtyjfxilg +plhcnwgqmrxfvdzabjkt + +pfhtlqawckegij +wjpaksdctfghlo + +jqctpgrvu +qkvgjuprtc +vutcqpgrj +gpruvjtcq +gvqprujct + +dkevisf +kfei +mlukicwfje + +nsoyjcwzife +spnocteji + +cfuzsbtvdkq +rcasmqzkpdxuo +drxzwqckus +zqsrndeukxic + +vkgpbz +zkpvg +zkvpg + +eqhpyasvnumzgclitofjw +ofsgpaijzqmtvcuwhlbe +ujiewctamfxqdghslpvzo +qivnwtlfcmpgaeouhjzs + +lfahbowz +ryxcwtvs +mytucdivw + +lqetdskgyznojharxvufpwimbc +kpcoqugdvxibftjmywzslnreh +mxjgcinhobeldrwfukyvptqsz + +jxhc +fjsqglzwhu +mhcj +hecj + +ihdsbckn + +siponk +sikonp +psinkfo + +qbvdrutoan +qbcftunvoi +qvkoxzbtushny +qtwojubnv + +eu +u +xtujdms +ehu + +jkqdoner +eyxnkuaoqfg +kqenxmyo + +wk +wk +ykw +kw +kw + +gvrebwq +erkflnbjhagv +givrybues +itpvegsrbz + +hlykfbqnexots +tqhgfonkzeyxsbl +qkcybxtsnloefh +fxalqkntsuobyech +hvyjefkbitrqoplwxns + +paxu +parnkxu +pxua +xupa +uxpa + +ytzjokcqlmviha +sykbmizchvq +aocvizymhkq +ivhkcqlzym +iayelkzqmtchv + +aekxzstuc +czetkxsau +zqpakexsuct +zuxtacske +kuszetcax + +czlkiprvydnmsoxqwajgb +byszdijkplawcvnm +ikmwandcjzlvybsp +nbvwlikjscdmpzay + +fpuxqtigly +hpuqkfxigyt +tifpygqkux +uygqftwpxi + +gvdwnrefpj +nwgapvedr +egdvwnrp +xshwezgipdvr + +joefgnu +tknuhvfy + +rjo +rpjyos +rjo +roj +jro + +zxvatmfbujgryinokwehsc +xjzdusehibgtvncmkflyao + +fpnkyo +nopfky +kpnyof +ponkfy +tnpfoyk + +mevhflgowbkqdjutrzys +qrgmkeohvstnbwfdjluy + +pejhrgwtmcny +hjangqtbprsmwe +umiegvdprwtznhj +nhgptresjwlm + +ohgmls +othljm +jmhtlso +mhxlcnp + +dtufxjrbq +rdfjxtqbu +qjtdufbrx + +iexvaok +kexu +xkje +xkfe + +dpursykgo +ugkrsqpody +sokpgyrdnu +kwsuoyrpdg +sovjiydkagmuptbrhcf + +mwxcqs +mcwxqs +mwxqsc +tcswmxq + +cqatfowbvmirly +woibncaylqgvsf + +bico +izdt +tiz + +af +fkq +f +fyb +f + +wxftpjclsrhm +sdzuvanek + +jr +rjp +rj + +zhpknlosiadcfbjweuqvy +ulbkhapqzisefdyonjc + +oivjy +djvwbofy +kvlqyxrj +bsivdyjf + +kifcamqwgy +amfkgicyq +miygkcafq + +egslifrtvcnhk +vymgiprjzcxasbqn + +gji +g +oar +jgk + +gxtkohsqcvmrjzie +jfghvuxokznqwsdmarcl + +xvlnpjdar +vldnopxaj +dtnpsayjvlc +dgjvalnmp +mfnvjdpal + +mnaxd +xmda +kdaxm + +szpeac +ezpsac +aesxpcz + +vgpldyruqmfbsehzkxjwa +wrxmvtqgyjsdazlkbofeuhc +ablmzyevqgswfnxkdrphuj + +aoedxnzjqsbyihtpkcfuwl +dsbeyathwxjupozlqncikf + +mwzkrnhp +okqj + +s +s + +erjyvcwhuitdaogsnfb +dculesyjotbwhavfirn +swfbohtjdciaurenyv +ubsvfamrjoynwchitdke + +yb +yb +by + +pbrhzvjcsgeylfxt +sjcyezvxfgbhtplr + +rphvaxw +zhjapvrxw +xahvwspr +lpdqrvwahmx + +rpmild +vlrpswnb +ylrezfpi +pbraslm +utxgqhpjkorl + +pizbmcxreftywhdq +pqyezcxtidgmhfrw +ixrctphwqydzfme +fxdhpyctwrinmazqe +pctzyrhdiqwmxef + +wasjdyzgfu +zfdyujgwsa +wbyzjgadufs +afzswydguj + +zqanmksjruhx +qljaunzmkrshx +jrxqsmzknhua +rjazknumxqhs +kuzqxhjmasrn + +virdpbztchkgo +hdiopebvzaw + +ziwscmotk +jwmas + +h +h +h +h +h + +qhywbkuvnst +zmynwxvufqarkbeht + +onfvrqxa +xrvqnofa +fiuarnvoxq +qvzafonrx +fqvxebnaolr + +kmfulryg +bkswufgylmr +myulgjrfk +gouyxrlkmf + +skerjmgbvtcphdzafniyxo +ljybizemsvhokxrdcagptnf + +oyt +hytx +mdtyjrslkczu +bvyto + +mpwv +acvbp + +m +ftz + +kvtmidlngo +edznioyvkx +kofvirdn diff --git a/2020/inputs/day_7.txt b/2020/inputs/day_7.txt new file mode 100644 index 0000000..04950b5 --- /dev/null +++ b/2020/inputs/day_7.txt @@ -0,0 +1,594 @@ +striped white bags contain 4 drab silver bags. +drab silver bags contain no other bags. +pale plum bags contain 1 dark black bag. +muted gold bags contain 1 wavy red bag, 3 mirrored violet bags, 5 bright gold bags, 5 plaid white bags. +muted teal bags contain 2 pale beige bags, 5 clear beige bags, 2 dotted gold bags, 4 posh cyan bags. +posh coral bags contain 1 light silver bag, 2 dull blue bags, 3 dim fuchsia bags, 2 dotted magenta bags. +faded black bags contain 4 light silver bags. +muted lavender bags contain 1 pale gold bag. +clear fuchsia bags contain 1 dull gray bag, 2 shiny indigo bags, 3 posh olive bags, 5 vibrant plum bags. +shiny olive bags contain 1 dotted gold bag, 5 bright violet bags. +vibrant lavender bags contain 3 dotted aqua bags, 4 pale chartreuse bags, 5 mirrored blue bags. +pale fuchsia bags contain 5 pale crimson bags, 2 dull teal bags. +clear lavender bags contain 5 shiny fuchsia bags, 5 wavy teal bags. +light chartreuse bags contain 5 mirrored yellow bags, 3 bright maroon bags. +mirrored white bags contain 1 bright gray bag, 4 plaid blue bags. +dark teal bags contain 4 bright maroon bags, 5 plaid bronze bags, 1 dark brown bag. +wavy yellow bags contain 4 dim silver bags, 1 striped tomato bag, 5 clear chartreuse bags. +dark turquoise bags contain 4 clear plum bags. +posh gray bags contain 2 faded purple bags, 2 faded orange bags. +wavy tomato bags contain 1 dark purple bag. +vibrant gray bags contain 3 muted gray bags, 1 dark fuchsia bag, 5 posh white bags, 5 posh tomato bags. +light crimson bags contain 2 dotted chartreuse bags. +dull gray bags contain 4 muted brown bags, 2 shiny blue bags, 4 dim crimson bags. +drab red bags contain 2 bright cyan bags, 1 pale brown bag. +dotted salmon bags contain 5 mirrored indigo bags. +vibrant green bags contain 2 dark coral bags. +light magenta bags contain 4 clear bronze bags, 4 dull teal bags, 4 posh salmon bags. +vibrant purple bags contain 4 posh plum bags, 2 bright gray bags. +posh lime bags contain 3 plaid yellow bags, 4 posh salmon bags. +bright white bags contain 4 dull aqua bags, 1 shiny silver bag. +faded blue bags contain 5 muted cyan bags, 2 mirrored coral bags. +dim green bags contain 2 posh lavender bags. +faded gray bags contain 2 dark gold bags, 1 drab turquoise bag. +wavy black bags contain 4 dim fuchsia bags, 1 muted orange bag, 4 drab salmon bags. +plaid plum bags contain 5 dotted tomato bags, 1 shiny beige bag. +bright tan bags contain 2 posh salmon bags. +wavy gold bags contain 1 faded olive bag, 5 vibrant black bags, 3 dull orange bags. +dull fuchsia bags contain 1 faded crimson bag, 5 vibrant white bags. +shiny maroon bags contain 5 dull lavender bags, 1 dim white bag. +wavy white bags contain 5 light teal bags, 4 dim salmon bags, 3 dotted red bags, 5 dark red bags. +dim cyan bags contain 1 muted orange bag. +muted cyan bags contain 4 dull turquoise bags, 5 posh gray bags, 5 clear turquoise bags, 1 shiny plum bag. +posh violet bags contain 5 plaid crimson bags, 5 muted purple bags, 1 wavy beige bag, 2 mirrored orange bags. +faded purple bags contain 3 plaid blue bags, 1 dull lavender bag, 1 muted orange bag, 2 dotted tomato bags. +wavy beige bags contain 1 dotted beige bag. +dim black bags contain 1 wavy blue bag, 1 plaid black bag, 3 pale lavender bags, 2 light violet bags. +dotted lavender bags contain 1 plaid blue bag, 5 dim crimson bags. +dark yellow bags contain 3 posh green bags. +wavy salmon bags contain 1 clear aqua bag, 3 mirrored crimson bags, 3 pale magenta bags, 2 dull teal bags. +clear silver bags contain 3 faded tan bags, 5 faded aqua bags, 1 clear tomato bag. +vibrant bronze bags contain 1 faded maroon bag, 4 plaid indigo bags, 2 bright purple bags, 5 dim violet bags. +pale brown bags contain 1 dull lavender bag, 2 clear turquoise bags. +faded salmon bags contain 1 pale silver bag. +dark gray bags contain 2 pale teal bags. +posh red bags contain 3 faded black bags, 2 dull red bags. +dim indigo bags contain 3 bright green bags, 2 dotted tomato bags, 5 bright magenta bags. +dull maroon bags contain 5 light green bags. +wavy teal bags contain 5 faded tan bags, 4 clear orange bags. +pale chartreuse bags contain 5 bright blue bags, 3 light indigo bags, 3 shiny white bags, 3 wavy bronze bags. +mirrored gray bags contain 4 vibrant tomato bags, 1 dark red bag, 5 drab silver bags, 3 posh magenta bags. +dark lavender bags contain 4 dotted white bags, 5 vibrant chartreuse bags, 2 dim teal bags. +shiny turquoise bags contain 3 dim lime bags, 5 bright cyan bags, 2 pale green bags. +shiny indigo bags contain 2 dark fuchsia bags, 4 posh chartreuse bags. +pale crimson bags contain 5 mirrored silver bags, 2 posh black bags. +light salmon bags contain 2 vibrant orange bags, 2 dotted red bags. +plaid orange bags contain 1 dotted turquoise bag, 4 vibrant brown bags. +dim maroon bags contain 5 shiny gold bags, 4 mirrored maroon bags. +muted green bags contain 1 plaid plum bag. +faded indigo bags contain 3 faded purple bags, 4 vibrant indigo bags, 1 light coral bag. +dull blue bags contain 5 dull salmon bags, 2 wavy magenta bags. +vibrant black bags contain 1 light coral bag, 5 vibrant cyan bags, 3 dim magenta bags. +striped lime bags contain 1 striped maroon bag, 2 vibrant brown bags. +drab brown bags contain 1 faded olive bag, 5 dotted beige bags. +dark plum bags contain 5 faded brown bags. +clear olive bags contain 3 dull aqua bags, 5 drab yellow bags. +wavy crimson bags contain 2 posh plum bags, 2 dull aqua bags, 5 shiny teal bags, 2 vibrant purple bags. +mirrored olive bags contain 2 wavy gold bags. +dim crimson bags contain no other bags. +faded plum bags contain 1 plaid indigo bag. +light maroon bags contain 3 vibrant orange bags, 2 clear olive bags, 3 clear brown bags, 1 pale black bag. +posh white bags contain 3 dull green bags, 3 clear brown bags. +drab black bags contain 2 shiny turquoise bags. +light purple bags contain 2 pale black bags, 5 light silver bags, 1 drab coral bag. +pale yellow bags contain 2 vibrant orange bags, 5 posh black bags, 2 vibrant tomato bags, 3 dotted lavender bags. +dull cyan bags contain 5 wavy beige bags, 1 dull yellow bag, 3 drab lime bags, 3 drab chartreuse bags. +drab lavender bags contain 2 plaid black bags, 4 dotted gray bags, 1 dim silver bag, 2 shiny gold bags. +striped brown bags contain 5 light maroon bags, 3 light red bags, 3 clear indigo bags. +drab tomato bags contain 2 light black bags, 2 clear salmon bags. +dotted red bags contain 4 dim salmon bags, 5 striped indigo bags. +vibrant teal bags contain 5 bright black bags, 1 dark purple bag, 2 bright turquoise bags. +striped teal bags contain 4 mirrored silver bags. +dull beige bags contain 4 clear olive bags, 4 light teal bags, 3 bright plum bags, 4 dotted lavender bags. +light violet bags contain 2 dull lavender bags, 4 bright gray bags, 5 vibrant orange bags, 3 wavy magenta bags. +dim brown bags contain 2 clear plum bags, 2 shiny teal bags, 2 posh salmon bags. +striped magenta bags contain 4 posh turquoise bags, 3 pale cyan bags, 3 faded indigo bags. +bright orange bags contain 4 plaid gray bags, 4 dark black bags, 4 faded red bags, 4 bright black bags. +muted olive bags contain 2 dotted crimson bags, 4 faded lavender bags, 2 vibrant gray bags. +plaid teal bags contain 2 light yellow bags, 4 drab cyan bags, 3 light green bags. +faded fuchsia bags contain 1 posh silver bag, 4 drab chartreuse bags, 4 drab teal bags. +dim silver bags contain 1 pale turquoise bag. +bright lime bags contain 1 striped silver bag, 5 muted teal bags, 1 shiny tan bag, 1 dark silver bag. +dotted green bags contain 3 posh green bags, 1 drab yellow bag. +drab purple bags contain 5 bright violet bags, 1 posh tomato bag. +dull bronze bags contain 4 mirrored black bags. +striped tomato bags contain 1 posh gray bag, 2 posh magenta bags. +bright crimson bags contain 2 light olive bags, 4 clear tan bags, 3 drab fuchsia bags. +bright turquoise bags contain 4 pale teal bags, 3 drab silver bags. +shiny lavender bags contain 2 striped lime bags, 2 plaid tomato bags, 1 faded orange bag, 5 wavy magenta bags. +light tomato bags contain 5 dotted olive bags. +wavy magenta bags contain no other bags. +vibrant fuchsia bags contain 5 posh brown bags, 5 plaid indigo bags. +dark tomato bags contain 3 shiny plum bags. +pale bronze bags contain 5 plaid black bags, 5 vibrant brown bags, 2 dim lime bags, 4 muted bronze bags. +striped fuchsia bags contain 3 muted brown bags, 2 pale chartreuse bags, 1 dim magenta bag. +dark brown bags contain 4 clear bronze bags. +posh teal bags contain 5 dotted plum bags, 2 drab gray bags, 3 dull fuchsia bags. +wavy turquoise bags contain 1 dull lavender bag. +striped maroon bags contain 4 muted yellow bags, 4 clear orange bags, 4 vibrant orange bags. +shiny green bags contain 3 muted brown bags, 1 vibrant black bag, 4 wavy cyan bags, 3 posh brown bags. +plaid salmon bags contain 4 mirrored indigo bags, 2 wavy white bags, 5 mirrored bronze bags, 3 light coral bags. +dotted magenta bags contain 2 light olive bags, 2 dark red bags, 4 clear green bags, 3 dim plum bags. +light orange bags contain 5 dark plum bags, 3 bright maroon bags, 2 dotted lime bags. +clear brown bags contain 3 dim white bags, 2 posh magenta bags. +vibrant turquoise bags contain 2 striped yellow bags, 1 mirrored crimson bag. +muted coral bags contain 4 wavy gold bags, 2 dim tan bags, 1 shiny green bag. +plaid crimson bags contain 1 dull aqua bag. +vibrant plum bags contain 4 striped tomato bags, 1 striped turquoise bag. +dark coral bags contain 5 posh black bags, 1 shiny beige bag, 3 pale brown bags. +mirrored brown bags contain 1 clear blue bag, 1 dull indigo bag. +bright blue bags contain 2 light violet bags, 1 dotted tomato bag. +drab cyan bags contain 2 dim turquoise bags, 5 clear violet bags. +dotted coral bags contain 3 dotted aqua bags. +shiny yellow bags contain 1 wavy cyan bag. +shiny red bags contain 5 shiny beige bags, 3 dotted lime bags, 5 dotted plum bags. +muted lime bags contain 3 dark turquoise bags, 3 bright chartreuse bags. +pale gray bags contain 5 dotted coral bags, 4 wavy teal bags, 2 clear aqua bags. +pale blue bags contain 5 dull salmon bags, 3 posh bronze bags, 2 vibrant tomato bags. +dim turquoise bags contain 4 posh aqua bags, 2 dark turquoise bags. +pale turquoise bags contain 5 vibrant brown bags, 2 shiny maroon bags. +dim gray bags contain 2 faded tomato bags, 2 faded indigo bags. +clear aqua bags contain 1 light turquoise bag, 3 dotted turquoise bags. +faded turquoise bags contain 5 muted lime bags. +clear plum bags contain 2 plaid indigo bags, 5 drab yellow bags. +vibrant white bags contain 2 bright violet bags, 4 dark plum bags, 1 dim plum bag, 4 plaid indigo bags. +dark orange bags contain 3 posh purple bags, 5 clear orange bags, 1 dim white bag. +light olive bags contain 3 drab green bags. +muted salmon bags contain 4 muted cyan bags. +clear maroon bags contain 2 muted yellow bags, 5 plaid crimson bags, 1 clear turquoise bag. +wavy orange bags contain 4 vibrant blue bags, 4 posh brown bags, 2 pale turquoise bags, 5 shiny orange bags. +dotted gold bags contain 3 posh magenta bags, 1 faded crimson bag, 3 dotted olive bags, 3 plaid olive bags. +dull purple bags contain 5 drab salmon bags, 4 dim lavender bags. +light bronze bags contain 2 wavy indigo bags. +muted turquoise bags contain 5 clear turquoise bags, 4 plaid violet bags, 4 clear orange bags, 2 posh maroon bags. +mirrored blue bags contain 4 clear chartreuse bags. +drab tan bags contain 3 striped violet bags, 2 bright silver bags, 2 dark bronze bags, 1 mirrored black bag. +dark maroon bags contain 1 vibrant orange bag. +drab yellow bags contain 1 vibrant blue bag, 2 dim violet bags. +light cyan bags contain 4 posh beige bags. +vibrant salmon bags contain 3 wavy gold bags. +muted orange bags contain 3 dotted tomato bags, 4 vibrant tomato bags, 5 dull lavender bags. +dull turquoise bags contain 1 wavy white bag. +dotted indigo bags contain 3 wavy bronze bags. +dark red bags contain 4 wavy bronze bags, 5 wavy turquoise bags. +light coral bags contain 4 clear tan bags, 2 vibrant beige bags, 1 dull lavender bag, 5 shiny white bags. +mirrored turquoise bags contain 5 clear fuchsia bags, 3 mirrored black bags, 4 plaid tan bags. +mirrored yellow bags contain 4 pale turquoise bags, 2 wavy orange bags, 3 drab coral bags, 4 dim chartreuse bags. +dotted fuchsia bags contain 4 dim bronze bags, 4 striped indigo bags. +dotted purple bags contain 5 posh maroon bags, 1 dim yellow bag. +clear coral bags contain 5 dark olive bags, 2 wavy bronze bags, 3 light red bags. +mirrored teal bags contain 3 drab yellow bags. +faded green bags contain 2 dark purple bags. +light lime bags contain 4 bright chartreuse bags, 5 clear tomato bags, 2 bright green bags, 2 faded teal bags. +bright yellow bags contain 4 dull purple bags, 3 faded beige bags. +bright maroon bags contain 2 vibrant blue bags, 5 bright violet bags, 5 plaid indigo bags, 3 vibrant orange bags. +faded red bags contain 5 pale brown bags, 4 striped tomato bags, 2 bright green bags. +muted maroon bags contain 1 dark tan bag, 5 drab teal bags, 4 dull maroon bags. +plaid coral bags contain 5 bright blue bags, 1 dotted indigo bag. +dotted brown bags contain 1 dull beige bag, 2 bright indigo bags, 2 striped chartreuse bags, 1 muted silver bag. +wavy coral bags contain 2 clear cyan bags, 2 muted teal bags, 1 faded red bag, 2 mirrored silver bags. +faded coral bags contain 3 bright green bags, 1 bright cyan bag, 3 plaid blue bags, 5 wavy lavender bags. +dim gold bags contain 5 dim teal bags, 1 vibrant tomato bag, 5 pale chartreuse bags, 3 bright indigo bags. +bright salmon bags contain 5 plaid chartreuse bags, 5 light tan bags, 5 vibrant maroon bags. +wavy violet bags contain 4 bright green bags. +mirrored lavender bags contain 5 drab plum bags, 2 drab turquoise bags, 2 dark magenta bags. +faded aqua bags contain 3 faded teal bags, 1 dark red bag. +muted yellow bags contain 1 mirrored silver bag, 1 striped white bag, 3 mirrored gold bags, 1 muted gray bag. +pale coral bags contain 2 striped gray bags, 2 clear beige bags. +mirrored cyan bags contain 1 pale beige bag, 4 dim crimson bags. +dotted aqua bags contain 4 dim crimson bags, 3 vibrant beige bags. +dark white bags contain 4 dim maroon bags, 1 light olive bag, 3 dull fuchsia bags, 4 mirrored maroon bags. +dotted chartreuse bags contain 5 clear tan bags, 2 clear white bags, 2 dark coral bags, 4 faded brown bags. +mirrored red bags contain 5 faded violet bags, 2 dark chartreuse bags. +drab maroon bags contain 3 bright violet bags. +dark violet bags contain 5 dark turquoise bags, 1 muted blue bag, 4 plaid bronze bags. +dull silver bags contain 4 dotted lime bags, 3 dotted silver bags, 4 dull red bags, 3 pale white bags. +striped lavender bags contain 5 drab silver bags. +light yellow bags contain 3 posh plum bags, 3 bright olive bags, 4 wavy crimson bags. +posh chartreuse bags contain 2 bright violet bags. +pale green bags contain 5 shiny lime bags, 3 faded teal bags, 5 posh gray bags, 1 posh chartreuse bag. +shiny lime bags contain 1 dull beige bag, 4 light aqua bags, 4 dotted tomato bags. +plaid tan bags contain 1 mirrored chartreuse bag. +drab coral bags contain 5 posh gray bags, 2 dull black bags. +drab salmon bags contain 4 drab yellow bags, 3 mirrored green bags. +faded yellow bags contain 2 mirrored beige bags, 1 bright turquoise bag, 1 vibrant black bag. +bright tomato bags contain 4 clear brown bags. +muted beige bags contain 1 clear turquoise bag. +striped black bags contain 1 plaid chartreuse bag. +bright cyan bags contain 5 clear tomato bags. +striped coral bags contain 2 muted red bags. +posh bronze bags contain 5 striped yellow bags. +mirrored maroon bags contain 4 vibrant tomato bags, 5 bright green bags, 4 vibrant maroon bags, 4 striped violet bags. +dotted turquoise bags contain 1 posh beige bag, 5 muted silver bags. +bright purple bags contain 5 drab silver bags, 5 shiny blue bags, 2 plaid bronze bags, 4 faded magenta bags. +posh plum bags contain 5 striped white bags, 2 pale brown bags, 1 wavy turquoise bag. +dark crimson bags contain 1 dull black bag, 2 dull yellow bags, 1 posh white bag, 3 dotted lime bags. +plaid bronze bags contain 5 striped indigo bags, 5 light indigo bags, 4 wavy magenta bags, 3 vibrant blue bags. +clear red bags contain 4 posh silver bags, 1 dim aqua bag. +striped salmon bags contain 3 bright violet bags, 4 faded olive bags, 5 dim turquoise bags. +dim bronze bags contain no other bags. +wavy brown bags contain 4 vibrant turquoise bags. +wavy maroon bags contain 1 mirrored bronze bag, 2 posh fuchsia bags, 1 mirrored indigo bag. +mirrored salmon bags contain 2 faded lavender bags. +dark aqua bags contain 4 faded teal bags, 1 dim tomato bag. +pale violet bags contain 5 clear blue bags, 3 plaid blue bags, 5 dim teal bags, 2 pale black bags. +mirrored crimson bags contain 2 posh magenta bags, 2 dotted aqua bags, 1 dim bronze bag. +bright indigo bags contain 4 bright violet bags. +muted violet bags contain 4 mirrored maroon bags, 2 dull red bags, 4 plaid tomato bags, 1 pale yellow bag. +shiny gold bags contain 3 vibrant blue bags, 5 plaid blue bags, 2 dark red bags, 1 dull green bag. +clear green bags contain 4 dotted lavender bags. +dark indigo bags contain 2 light lime bags, 3 wavy brown bags. +muted fuchsia bags contain 3 plaid green bags. +bright silver bags contain 4 dim tomato bags, 3 clear olive bags, 1 dull teal bag. +plaid purple bags contain 4 dark silver bags, 1 vibrant crimson bag, 4 dark black bags, 3 faded magenta bags. +clear chartreuse bags contain 4 posh plum bags. +plaid tomato bags contain 2 wavy aqua bags, 3 striped indigo bags, 1 wavy magenta bag. +posh cyan bags contain 3 drab green bags, 3 bright chartreuse bags, 3 muted gray bags, 2 light black bags. +posh turquoise bags contain 5 wavy teal bags, 3 light tan bags, 1 dull gold bag. +plaid olive bags contain 2 dim chartreuse bags. +shiny orange bags contain 4 pale brown bags, 3 dim salmon bags. +clear gray bags contain 4 bright salmon bags, 5 vibrant crimson bags. +shiny brown bags contain 1 bright gold bag, 3 clear tomato bags. +muted aqua bags contain 2 mirrored indigo bags, 1 dim tan bag. +plaid red bags contain 1 clear plum bag. +muted bronze bags contain 4 clear white bags, 3 dotted plum bags. +plaid blue bags contain 2 dull lavender bags, 5 wavy magenta bags, 1 light indigo bag. +shiny salmon bags contain 2 dotted black bags, 1 light magenta bag. +shiny cyan bags contain 5 faded violet bags, 3 mirrored bronze bags, 4 dark maroon bags, 2 wavy lavender bags. +drab magenta bags contain 2 light blue bags, 1 wavy orange bag, 5 posh chartreuse bags. +dim violet bags contain 5 dark red bags, 4 light violet bags, 2 dotted fuchsia bags, 2 plaid tomato bags. +faded crimson bags contain 3 clear silver bags, 1 vibrant beige bag. +plaid fuchsia bags contain 3 plaid red bags, 4 drab purple bags, 4 clear lime bags, 3 dim turquoise bags. +dull green bags contain 5 dotted beige bags, 4 drab silver bags, 4 posh magenta bags, 1 muted orange bag. +wavy indigo bags contain 2 pale tan bags. +plaid lavender bags contain 1 dark black bag. +clear bronze bags contain 3 pale teal bags. +clear blue bags contain 2 light teal bags, 5 dotted olive bags, 3 bright indigo bags. +posh aqua bags contain 2 light violet bags, 2 dull salmon bags, 1 vibrant violet bag. +dark gold bags contain 2 striped maroon bags. +vibrant chartreuse bags contain 3 wavy silver bags. +dark magenta bags contain 1 clear silver bag. +dim red bags contain 3 wavy indigo bags, 2 muted teal bags. +muted silver bags contain 5 pale crimson bags, 2 dotted tomato bags. +mirrored tan bags contain 1 pale salmon bag. +dull violet bags contain 2 dull black bags. +striped beige bags contain 4 dark maroon bags, 2 wavy orange bags. +striped turquoise bags contain 3 light indigo bags, 5 bright maroon bags, 1 light teal bag. +pale gold bags contain 5 dotted teal bags. +wavy olive bags contain 3 dotted fuchsia bags. +clear violet bags contain 1 dotted lavender bag, 5 bright tan bags, 5 dim violet bags, 5 drab salmon bags. +pale maroon bags contain 4 drab red bags, 1 wavy yellow bag, 1 muted green bag, 1 striped fuchsia bag. +drab bronze bags contain 4 light gray bags, 3 posh magenta bags, 1 dull yellow bag. +vibrant gold bags contain 4 dull violet bags, 3 clear white bags, 5 wavy chartreuse bags, 4 pale turquoise bags. +clear beige bags contain 4 plaid blue bags, 3 shiny plum bags, 1 light silver bag. +faded silver bags contain 5 drab turquoise bags, 4 plaid green bags, 4 posh yellow bags, 1 plaid blue bag. +light brown bags contain 1 dark red bag, 1 dotted gray bag. +shiny violet bags contain 5 posh cyan bags, 5 vibrant plum bags, 5 mirrored chartreuse bags, 4 plaid green bags. +dark bronze bags contain 4 bright gold bags, 2 striped maroon bags, 4 dark aqua bags, 5 pale chartreuse bags. +dull black bags contain 2 vibrant tomato bags, 1 vibrant blue bag, 3 pale yellow bags. +dotted beige bags contain 5 dotted tomato bags, 1 striped indigo bag. +clear indigo bags contain 3 dark violet bags. +bright coral bags contain 1 dark indigo bag. +drab turquoise bags contain 5 drab plum bags, 3 pale magenta bags, 5 drab red bags, 4 dull olive bags. +shiny fuchsia bags contain 2 dull lavender bags, 5 striped tomato bags. +dull indigo bags contain 3 pale turquoise bags, 3 faded tomato bags, 5 dim magenta bags, 3 drab indigo bags. +dim aqua bags contain 4 faded brown bags, 1 mirrored lime bag. +muted purple bags contain 3 dim salmon bags, 4 light violet bags, 2 striped turquoise bags, 2 shiny teal bags. +dotted black bags contain 3 dotted cyan bags, 4 wavy magenta bags, 4 posh chartreuse bags. +drab violet bags contain 4 dark gray bags, 5 dull chartreuse bags, 4 plaid gray bags. +plaid green bags contain 3 dark red bags, 1 wavy crimson bag, 4 light coral bags, 4 striped indigo bags. +faded brown bags contain 3 dark orange bags. +light teal bags contain 3 striped indigo bags, 4 dim bronze bags. +plaid black bags contain 2 mirrored crimson bags, 5 dim silver bags, 4 posh purple bags. +shiny blue bags contain 2 plaid green bags, 4 plaid crimson bags, 2 faded plum bags. +plaid lime bags contain 2 striped maroon bags. +pale lavender bags contain 2 mirrored indigo bags, 1 pale green bag, 5 dim chartreuse bags, 3 pale white bags. +drab chartreuse bags contain 1 bright salmon bag, 4 vibrant brown bags, 1 muted violet bag. +light indigo bags contain no other bags. +plaid violet bags contain 2 dim white bags, 4 faded lavender bags. +drab gold bags contain 5 dotted aqua bags, 3 muted beige bags, 4 faded black bags, 5 dark red bags. +mirrored bronze bags contain 2 plaid blue bags, 1 light orange bag. +dim olive bags contain 1 striped silver bag. +plaid white bags contain 5 pale turquoise bags, 4 mirrored orange bags, 2 vibrant aqua bags. +wavy purple bags contain 3 dark silver bags, 1 dull white bag, 3 dotted magenta bags, 2 dim salmon bags. +clear orange bags contain 5 striped indigo bags, 1 wavy bronze bag, 4 vibrant blue bags. +plaid gray bags contain 1 dull aqua bag, 3 dull olive bags, 3 posh black bags. +vibrant violet bags contain 2 vibrant maroon bags. +pale olive bags contain 2 vibrant fuchsia bags. +muted brown bags contain 5 pale teal bags, 2 light brown bags, 4 light tomato bags. +posh lavender bags contain 4 bright indigo bags, 1 striped indigo bag, 5 dark purple bags. +dotted blue bags contain 4 muted salmon bags, 3 mirrored red bags, 5 pale white bags, 3 clear red bags. +dim purple bags contain 4 muted cyan bags. +bright fuchsia bags contain 5 muted black bags. +vibrant lime bags contain 3 posh purple bags, 1 drab aqua bag. +wavy green bags contain 3 drab red bags, 2 faded brown bags, 2 wavy cyan bags. +dull lime bags contain 3 bright salmon bags, 4 posh crimson bags, 1 drab salmon bag, 4 pale yellow bags. +mirrored aqua bags contain 4 striped violet bags, 1 striped indigo bag, 2 striped tomato bags. +striped tan bags contain 4 light blue bags, 4 dull beige bags. +drab green bags contain 5 muted silver bags, 1 vibrant orange bag, 2 striped indigo bags, 4 striped tomato bags. +dotted orange bags contain 5 mirrored white bags, 5 muted orange bags, 2 drab tomato bags, 2 dull white bags. +dim tomato bags contain 2 dull lavender bags. +dull magenta bags contain 3 faded brown bags, 5 faded teal bags. +faded maroon bags contain 4 posh brown bags, 2 dotted aqua bags. +plaid cyan bags contain 4 faded crimson bags, 4 light chartreuse bags, 1 light crimson bag, 1 posh fuchsia bag. +dim salmon bags contain 1 dotted olive bag, 4 light indigo bags. +faded chartreuse bags contain 4 bright gold bags, 4 clear silver bags. +light plum bags contain 2 dotted chartreuse bags, 1 drab white bag. +posh silver bags contain 3 mirrored black bags, 4 dull blue bags. +dull salmon bags contain 4 dim white bags, 5 clear tomato bags, 2 mirrored maroon bags. +light green bags contain 4 plaid chartreuse bags, 5 vibrant aqua bags. +posh indigo bags contain 2 dull olive bags, 2 dotted lime bags, 1 drab red bag. +dark blue bags contain 5 dotted green bags, 3 wavy crimson bags, 4 clear silver bags. +bright black bags contain 5 posh bronze bags, 3 bright cyan bags, 5 muted black bags. +bright lavender bags contain 1 shiny indigo bag, 1 dim yellow bag, 1 wavy yellow bag. +faded white bags contain 1 dotted black bag, 5 wavy red bags. +muted black bags contain 1 mirrored aqua bag, 4 dark red bags, 5 dull yellow bags. +light turquoise bags contain 3 shiny plum bags. +vibrant coral bags contain 2 shiny orange bags, 4 bright olive bags. +vibrant aqua bags contain 2 wavy crimson bags, 2 muted orange bags. +dotted tan bags contain 1 light indigo bag, 2 dim magenta bags. +posh yellow bags contain 4 faded lavender bags. +pale lime bags contain 4 mirrored orange bags, 3 dull gray bags, 1 muted magenta bag. +drab white bags contain 2 faded tan bags, 3 wavy aqua bags. +shiny tomato bags contain 4 dim coral bags, 3 dotted lime bags. +wavy plum bags contain 1 bright orange bag. +dull crimson bags contain 2 pale silver bags, 1 light beige bag, 4 wavy violet bags. +dotted violet bags contain 4 light indigo bags, 1 dark black bag, 3 pale green bags. +dark salmon bags contain 5 light tan bags, 4 dim chartreuse bags, 5 faded green bags, 3 light brown bags. +dull brown bags contain 5 mirrored aqua bags, 5 dim magenta bags, 4 light brown bags, 5 plaid black bags. +shiny chartreuse bags contain 5 wavy yellow bags, 3 faded aqua bags, 1 bright fuchsia bag, 5 drab plum bags. +muted red bags contain 3 drab white bags, 5 dim beige bags, 4 bright olive bags. +posh blue bags contain 1 dotted beige bag, 1 vibrant cyan bag, 4 vibrant brown bags, 2 clear turquoise bags. +wavy bronze bags contain 4 wavy turquoise bags, 4 dim bronze bags, 3 shiny beige bags, 2 dull lavender bags. +posh beige bags contain 3 muted gray bags, 4 light salmon bags, 5 striped turquoise bags. +vibrant red bags contain 5 muted blue bags. +dark olive bags contain 5 dark maroon bags. +dotted gray bags contain 3 wavy magenta bags. +vibrant cyan bags contain 5 dotted lavender bags, 3 vibrant orange bags. +dark chartreuse bags contain 3 pale white bags, 1 dull lavender bag. +faded lime bags contain 4 clear green bags, 3 shiny plum bags, 2 light green bags. +vibrant blue bags contain 1 wavy turquoise bag, 4 dim salmon bags. +dull tan bags contain 3 dim chartreuse bags, 1 plaid tomato bag, 4 dark brown bags. +muted gray bags contain 4 clear tan bags, 3 wavy aqua bags, 5 dim white bags. +clear yellow bags contain 1 drab white bag, 5 dark salmon bags, 2 dull yellow bags. +clear tomato bags contain 2 dotted gray bags, 5 vibrant beige bags, 1 bright maroon bag, 2 drab green bags. +shiny tan bags contain 5 posh lavender bags, 5 pale yellow bags. +dark black bags contain 4 muted purple bags, 5 light gray bags, 5 drab red bags. +striped plum bags contain 3 dull red bags, 1 dark tomato bag, 4 dark yellow bags, 5 plaid cyan bags. +light gray bags contain 3 plaid chartreuse bags. +light aqua bags contain 4 wavy magenta bags, 3 light black bags. +vibrant brown bags contain 1 bright blue bag, 1 posh black bag. +posh tomato bags contain 5 wavy magenta bags. +dotted bronze bags contain 4 mirrored chartreuse bags. +mirrored violet bags contain 2 clear maroon bags, 1 light red bag, 4 mirrored gray bags. +dark purple bags contain 5 bright blue bags, 3 plaid blue bags. +faded beige bags contain 4 plaid bronze bags, 5 vibrant turquoise bags, 3 pale orange bags, 5 mirrored aqua bags. +mirrored green bags contain 1 dotted fuchsia bag, 5 light indigo bags, 3 shiny beige bags. +striped violet bags contain 5 drab silver bags, 2 dim crimson bags, 3 plaid blue bags. +mirrored tomato bags contain 5 light lavender bags. +posh purple bags contain 3 pale orange bags. +dim blue bags contain 5 dotted plum bags, 1 light orange bag, 4 dim maroon bags. +dark cyan bags contain 4 vibrant white bags, 4 dull white bags, 1 posh purple bag. +drab beige bags contain 5 dull purple bags. +vibrant olive bags contain 5 light silver bags. +plaid beige bags contain 3 muted silver bags, 4 vibrant orange bags. +wavy silver bags contain 2 dim crimson bags, 4 shiny maroon bags, 4 pale indigo bags. +posh crimson bags contain 2 light violet bags, 4 pale coral bags, 3 plaid bronze bags. +vibrant crimson bags contain 3 dull red bags. +dotted olive bags contain no other bags. +mirrored beige bags contain 2 plaid gray bags, 5 mirrored yellow bags. +bright brown bags contain 2 faded aqua bags, 1 dim tomato bag, 5 posh magenta bags. +bright magenta bags contain 2 posh gray bags, 3 dim salmon bags. +clear magenta bags contain 2 dim cyan bags, 3 clear red bags, 1 dull fuchsia bag, 4 wavy coral bags. +clear lime bags contain 5 dull green bags, 2 shiny bronze bags, 2 faded orange bags, 1 bright beige bag. +muted tan bags contain 4 vibrant maroon bags, 3 vibrant black bags, 5 shiny maroon bags, 5 vibrant turquoise bags. +pale beige bags contain 3 light tomato bags. +dark fuchsia bags contain 2 faded brown bags, 3 dotted lavender bags, 4 shiny teal bags, 2 bright blue bags. +dim magenta bags contain 4 posh chartreuse bags. +bright aqua bags contain 5 drab violet bags. +striped crimson bags contain 2 bright green bags. +dull chartreuse bags contain 4 plaid bronze bags, 2 shiny gray bags, 4 dull lavender bags. +wavy chartreuse bags contain 1 vibrant tomato bag, 1 dim tomato bag, 3 pale green bags, 1 posh plum bag. +dotted white bags contain 1 dark teal bag, 4 dotted violet bags, 5 bright beige bags, 3 dim silver bags. +mirrored purple bags contain 1 posh green bag. +faded bronze bags contain 4 dotted indigo bags. +faded lavender bags contain 3 muted purple bags. +clear turquoise bags contain 4 muted orange bags, 1 striped violet bag, 5 clear tan bags, 5 dim white bags. +shiny plum bags contain 4 dim crimson bags. +wavy fuchsia bags contain 3 dotted brown bags, 5 dark magenta bags, 2 dark bronze bags. +faded olive bags contain 5 plaid indigo bags. +mirrored orange bags contain 4 striped violet bags, 2 light violet bags, 4 shiny orange bags. +pale indigo bags contain 3 shiny indigo bags. +faded tan bags contain 3 shiny maroon bags, 5 posh aqua bags, 1 striped violet bag, 2 dim white bags. +bright chartreuse bags contain 1 posh black bag, 5 bright gray bags, 3 plaid chartreuse bags. +drab blue bags contain 1 pale violet bag, 4 vibrant green bags. +posh tan bags contain 4 shiny lime bags. +plaid maroon bags contain 2 dotted black bags. +dull coral bags contain 4 posh coral bags, 1 dotted silver bag, 5 drab beige bags, 1 plaid red bag. +striped yellow bags contain 1 plaid tomato bag, 1 dotted lavender bag. +muted magenta bags contain 4 muted black bags. +dotted cyan bags contain 1 vibrant tomato bag, 3 light indigo bags, 1 wavy turquoise bag. +dim lavender bags contain 1 muted black bag, 4 pale white bags, 2 mirrored coral bags, 5 pale brown bags. +bright gold bags contain 5 vibrant green bags. +light white bags contain 2 striped lime bags, 2 muted lime bags, 5 muted brown bags, 4 bright green bags. +wavy lavender bags contain 2 vibrant purple bags, 5 posh white bags. +clear black bags contain 2 posh turquoise bags, 3 dotted orange bags, 3 faded teal bags. +muted crimson bags contain 1 pale violet bag, 5 drab lavender bags. +posh green bags contain 4 vibrant beige bags, 5 dark purple bags, 3 dim salmon bags, 3 light black bags. +vibrant silver bags contain 3 posh coral bags, 4 posh white bags. +dim coral bags contain 2 posh violet bags, 1 dark cyan bag, 3 shiny green bags, 3 vibrant cyan bags. +striped red bags contain 5 muted olive bags, 4 wavy teal bags, 3 shiny gray bags, 1 mirrored coral bag. +bright violet bags contain 3 shiny beige bags, 1 wavy magenta bag, 5 light indigo bags. +vibrant magenta bags contain 4 striped salmon bags, 1 light tan bag. +faded gold bags contain 5 light tomato bags, 1 wavy black bag, 4 faded maroon bags. +muted plum bags contain 1 vibrant brown bag, 2 muted cyan bags, 4 muted salmon bags. +plaid gold bags contain 5 shiny beige bags, 3 faded fuchsia bags, 5 vibrant cyan bags, 5 shiny gold bags. +striped indigo bags contain no other bags. +wavy gray bags contain 2 plaid indigo bags, 3 clear tomato bags, 4 dull blue bags. +plaid silver bags contain 5 clear salmon bags, 5 faded lime bags, 4 shiny tan bags, 5 mirrored chartreuse bags. +plaid yellow bags contain 4 shiny chartreuse bags, 1 light lime bag, 2 dull green bags. +plaid turquoise bags contain 3 dotted aqua bags, 3 posh magenta bags. +striped olive bags contain 2 faded aqua bags, 5 dotted orange bags, 5 dull turquoise bags, 1 pale violet bag. +faded teal bags contain 3 striped indigo bags. +dull red bags contain 1 mirrored gray bag, 4 drab coral bags, 2 bright plum bags, 1 dull green bag. +dull gold bags contain 5 bright blue bags. +shiny magenta bags contain 1 light white bag. +striped green bags contain 1 clear blue bag. +dull teal bags contain 3 dark purple bags, 4 dim lime bags, 5 clear chartreuse bags. +faded magenta bags contain 4 shiny gray bags, 5 pale crimson bags, 5 light coral bags, 2 pale white bags. +pale tomato bags contain 4 dull black bags, 1 posh chartreuse bag, 1 faded cyan bag. +muted blue bags contain 5 striped white bags, 1 faded orange bag. +light blue bags contain 4 posh white bags. +plaid chartreuse bags contain 2 bright gray bags. +dull aqua bags contain 5 clear tan bags, 5 dotted red bags, 5 vibrant tomato bags. +light lavender bags contain 5 clear fuchsia bags, 1 striped olive bag. +bright green bags contain 4 vibrant violet bags, 2 vibrant maroon bags. +light beige bags contain 1 striped maroon bag. +drab indigo bags contain 4 posh tomato bags, 5 faded brown bags. +dotted yellow bags contain 3 wavy violet bags, 4 bright violet bags, 4 vibrant lime bags, 1 pale beige bag. +striped gold bags contain 2 light indigo bags, 3 dull red bags, 5 vibrant beige bags. +muted indigo bags contain 5 bright purple bags, 1 pale plum bag, 5 wavy black bags. +dark lime bags contain 2 faded blue bags. +shiny white bags contain 4 clear tan bags, 3 pale yellow bags, 5 plaid tomato bags, 4 wavy turquoise bags. +vibrant maroon bags contain 4 dark red bags, 2 dull aqua bags, 5 wavy aqua bags. +drab teal bags contain 3 shiny indigo bags. +bright plum bags contain 2 plaid chartreuse bags. +vibrant yellow bags contain 3 posh purple bags. +posh salmon bags contain 4 dim plum bags, 1 pale yellow bag, 2 shiny gold bags. +shiny black bags contain 3 dim magenta bags. +bright gray bags contain no other bags. +dull orange bags contain 3 dotted purple bags. +pale purple bags contain 2 bright cyan bags, 2 drab teal bags, 2 dotted gold bags, 4 mirrored fuchsia bags. +dull yellow bags contain 3 posh gray bags. +muted tomato bags contain 3 faded orange bags. +drab olive bags contain 4 dim maroon bags, 1 bright turquoise bag, 3 shiny indigo bags, 5 vibrant lavender bags. +clear salmon bags contain 2 dim chartreuse bags, 2 shiny black bags, 5 dotted indigo bags, 3 dotted aqua bags. +posh black bags contain 2 wavy turquoise bags, 2 shiny plum bags, 2 mirrored gold bags. +light gold bags contain 5 shiny tomato bags, 4 light cyan bags. +shiny coral bags contain 3 faded silver bags. +plaid magenta bags contain 1 vibrant black bag, 2 bright blue bags. +dotted teal bags contain 4 faded olive bags, 5 vibrant brown bags, 3 clear salmon bags. +striped purple bags contain 5 shiny bronze bags. +dim tan bags contain 2 light tan bags, 1 dotted gold bag, 3 shiny white bags. +light silver bags contain 5 dotted cyan bags, 4 dotted aqua bags. +dull white bags contain 5 striped turquoise bags. +plaid aqua bags contain 3 dim bronze bags, 5 dull brown bags, 3 faded plum bags, 2 mirrored crimson bags. +dotted silver bags contain 1 faded teal bag. +dull olive bags contain 1 dark turquoise bag, 3 muted orange bags. +clear purple bags contain 3 drab salmon bags. +mirrored plum bags contain 1 vibrant lavender bag. +bright beige bags contain 4 plaid magenta bags, 1 dull turquoise bag, 4 dim white bags, 1 light aqua bag. +pale red bags contain 1 muted lavender bag, 2 vibrant teal bags, 4 plaid cyan bags, 5 dull orange bags. +drab orange bags contain 3 bright plum bags, 5 vibrant chartreuse bags. +mirrored gold bags contain 2 wavy magenta bags. +posh maroon bags contain 3 dotted lime bags, 2 muted black bags, 3 faded green bags. +clear white bags contain 4 pale black bags. +pale silver bags contain 2 dim coral bags, 2 dull lavender bags, 2 dark teal bags, 3 wavy green bags. +vibrant tomato bags contain 5 dull lavender bags. +striped orange bags contain 5 shiny salmon bags, 1 pale gold bag, 4 mirrored gray bags, 1 plaid black bag. +dim beige bags contain 5 dim salmon bags, 2 striped yellow bags, 5 shiny orange bags, 5 light salmon bags. +clear gold bags contain 2 dim salmon bags, 4 vibrant cyan bags. +dim teal bags contain 3 light indigo bags, 3 pale green bags, 5 muted bronze bags. +shiny silver bags contain 3 drab red bags, 1 pale magenta bag, 3 plaid blue bags, 4 pale white bags. +dark beige bags contain 4 posh black bags, 1 dark maroon bag. +bright bronze bags contain 4 mirrored yellow bags, 1 vibrant salmon bag, 2 mirrored teal bags, 1 shiny beige bag. +dotted maroon bags contain 1 clear tomato bag. +bright olive bags contain 3 striped tomato bags, 3 plaid indigo bags, 3 posh magenta bags. +faded tomato bags contain 5 bright violet bags. +mirrored magenta bags contain 3 wavy coral bags, 4 dull tan bags, 3 wavy chartreuse bags. +striped aqua bags contain 3 drab teal bags, 3 drab crimson bags, 5 plaid gold bags, 2 vibrant aqua bags. +clear crimson bags contain 5 striped chartreuse bags, 5 vibrant blue bags. +striped blue bags contain 4 dull red bags, 3 vibrant white bags, 4 posh black bags. +posh olive bags contain 5 muted cyan bags. +plaid indigo bags contain 5 dotted fuchsia bags, 2 plaid chartreuse bags, 3 vibrant blue bags. +mirrored lime bags contain 2 dotted lavender bags, 2 wavy bronze bags. +wavy blue bags contain 5 mirrored green bags, 5 faded tomato bags, 1 posh turquoise bag. +light fuchsia bags contain 3 faded tomato bags, 5 muted beige bags, 2 faded beige bags, 4 wavy indigo bags. +dull plum bags contain 4 dark blue bags, 5 shiny maroon bags, 3 pale gray bags, 5 drab lime bags. +drab fuchsia bags contain 3 dark maroon bags. +pale teal bags contain 4 vibrant blue bags, 1 bright green bag, 3 dim crimson bags, 1 posh salmon bag. +dull tomato bags contain 3 dim maroon bags, 4 plaid gray bags, 5 striped gold bags, 5 striped white bags. +pale orange bags contain 4 drab yellow bags. +wavy aqua bags contain 1 dim bronze bag. +dim chartreuse bags contain 2 bright violet bags. +dotted crimson bags contain 5 vibrant orange bags, 4 wavy magenta bags. +faded cyan bags contain 3 mirrored blue bags, 3 shiny fuchsia bags, 4 bright indigo bags. +pale salmon bags contain 2 pale cyan bags, 2 muted lime bags, 2 vibrant plum bags. +drab lime bags contain 2 drab yellow bags, 2 light magenta bags, 3 dotted fuchsia bags. +shiny bronze bags contain 1 posh lavender bag. +dim fuchsia bags contain 5 dotted gold bags, 5 vibrant indigo bags, 4 shiny teal bags, 2 dotted silver bags. +dark green bags contain 2 shiny blue bags. +bright red bags contain 2 pale brown bags, 3 plaid blue bags, 4 drab bronze bags, 3 dim yellow bags. +clear teal bags contain 2 drab white bags, 3 muted beige bags. +pale aqua bags contain 4 light tan bags. +dull lavender bags contain 1 dim bronze bag, 5 dim crimson bags, 1 dotted olive bag. +dotted plum bags contain 1 light black bag. +shiny teal bags contain 3 light indigo bags. +dotted lime bags contain 1 shiny gold bag, 3 plaid crimson bags. +dark tan bags contain 5 faded tan bags. +vibrant indigo bags contain 3 shiny fuchsia bags. +light tan bags contain 4 pale yellow bags, 1 pale crimson bag, 3 light gray bags. +drab plum bags contain 2 shiny turquoise bags, 2 vibrant yellow bags, 4 muted brown bags, 2 drab lavender bags. +dim white bags contain 5 dark red bags, 5 dotted olive bags. +light red bags contain 2 vibrant indigo bags, 1 wavy salmon bag, 3 dull brown bags. +mirrored fuchsia bags contain 5 dotted tomato bags. +mirrored indigo bags contain 5 pale lime bags, 5 light magenta bags, 4 light gray bags, 2 dull red bags. +dim yellow bags contain 2 muted beige bags, 2 plaid olive bags, 3 faded aqua bags. +shiny gray bags contain 1 drab yellow bag, 3 shiny lavender bags, 1 posh white bag. +faded violet bags contain 2 bright olive bags, 5 clear gray bags, 2 dark orange bags, 1 pale magenta bag. +mirrored black bags contain 4 clear blue bags. +drab aqua bags contain 1 vibrant crimson bag, 4 clear fuchsia bags. +pale black bags contain 5 pale turquoise bags, 4 striped yellow bags, 4 dotted beige bags. +wavy cyan bags contain 1 vibrant brown bag. +dark silver bags contain 3 light tomato bags, 5 dotted lavender bags, 3 bright turquoise bags. +faded orange bags contain 3 clear turquoise bags, 3 mirrored gold bags, 2 plaid bronze bags, 2 dotted fuchsia bags. +drab crimson bags contain 5 clear blue bags. +posh magenta bags contain 1 bright violet bag, 2 dotted beige bags, 2 bright gray bags. +posh brown bags contain 3 dim tomato bags, 1 dim chartreuse bag, 5 shiny orange bags. +drab gray bags contain 3 striped violet bags. +pale cyan bags contain 5 dotted aqua bags, 3 striped tomato bags. +wavy tan bags contain 3 pale indigo bags. +plaid brown bags contain 2 dotted indigo bags, 1 dull indigo bag, 2 light brown bags. +vibrant beige bags contain 1 shiny teal bag, 3 vibrant cyan bags, 2 posh gray bags, 3 striped tomato bags. +shiny aqua bags contain 2 vibrant black bags, 2 muted coral bags, 4 vibrant coral bags. +mirrored silver bags contain 3 drab silver bags, 1 clear turquoise bag. +pale tan bags contain 3 pale magenta bags. +striped cyan bags contain 5 drab tomato bags. +mirrored coral bags contain 1 mirrored crimson bag, 1 bright maroon bag. +pale white bags contain 4 shiny beige bags, 1 shiny maroon bag, 5 dim bronze bags. +shiny beige bags contain 3 mirrored gold bags. +mirrored chartreuse bags contain 1 dotted tomato bag, 2 bright cyan bags. +wavy red bags contain 1 posh lavender bag, 1 vibrant blue bag, 3 muted brown bags. +muted chartreuse bags contain 3 dim lavender bags, 4 pale plum bags, 4 light magenta bags. +shiny purple bags contain 4 muted green bags, 5 light white bags, 2 faded tan bags, 5 light beige bags. +clear tan bags contain 3 dotted red bags, 1 striped violet bag, 4 plaid chartreuse bags. +bright teal bags contain 1 faded black bag, 3 faded maroon bags. +posh orange bags contain 5 light gold bags, 3 posh aqua bags. +striped gray bags contain 2 bright plum bags, 2 shiny gray bags. +dim lime bags contain 1 plaid blue bag. +posh fuchsia bags contain 1 dull indigo bag, 2 plaid blue bags. +dotted tomato bags contain no other bags. +dim plum bags contain 1 dim chartreuse bag. +dim orange bags contain 2 muted magenta bags, 5 faded aqua bags. +posh gold bags contain 5 light maroon bags, 4 dark turquoise bags, 1 posh white bag, 5 wavy beige bags. +striped bronze bags contain 1 dark magenta bag. +wavy lime bags contain 4 mirrored lavender bags, 3 pale bronze bags, 1 dull white bag. +pale magenta bags contain 2 dim crimson bags, 4 plaid plum bags, 5 muted silver bags, 2 dim yellow bags. +striped chartreuse bags contain 5 light black bags, 3 bright fuchsia bags, 4 pale black bags. +vibrant tan bags contain 2 dim tan bags. +shiny crimson bags contain 5 pale beige bags, 3 clear purple bags, 2 pale violet bags, 4 dotted chartreuse bags. +vibrant orange bags contain no other bags. +striped silver bags contain 5 clear orange bags, 2 dotted fuchsia bags. +clear cyan bags contain 5 muted gray bags, 3 wavy aqua bags. +light black bags contain 1 striped yellow bag. +muted white bags contain 3 muted tomato bags, 5 light black bags, 4 pale black bags, 5 shiny gold bags. diff --git a/2020/inputs/day_8.txt b/2020/inputs/day_8.txt new file mode 100644 index 0000000..5ef799e --- /dev/null +++ b/2020/inputs/day_8.txt @@ -0,0 +1,626 @@ +acc +48 +nop +308 +acc +33 +acc +48 +jmp +379 +acc +27 +acc +23 +acc +29 +acc +3 +jmp +326 +acc -12 +nop +248 +nop +146 +jmp +293 +acc +8 +acc -16 +acc +18 +jmp +255 +jmp +390 +jmp +442 +acc +38 +jmp +451 +jmp +499 +acc +41 +acc +44 +nop +298 +acc +31 +jmp +337 +acc -3 +acc +34 +nop +266 +acc -19 +jmp +281 +jmp +232 +acc -9 +acc +25 +acc -8 +nop +228 +jmp +79 +jmp +58 +acc +38 +nop +318 +jmp +17 +acc +44 +jmp +298 +acc -4 +jmp +196 +jmp +249 +acc -9 +acc -3 +acc +17 +jmp +556 +jmp +1 +acc -15 +jmp +166 +acc +23 +acc +10 +acc +39 +jmp +475 +acc +28 +jmp +41 +jmp +322 +acc +48 +acc -11 +acc -13 +acc +12 +jmp +92 +jmp +1 +acc +9 +jmp -26 +acc +4 +acc -8 +nop +484 +acc -14 +jmp +526 +acc -13 +acc -2 +acc -13 +jmp +419 +acc +22 +acc -17 +jmp +1 +jmp +151 +acc +3 +acc +2 +acc -13 +acc -11 +jmp +352 +acc +24 +jmp -27 +nop +206 +acc +22 +nop +225 +jmp +360 +acc +48 +jmp +105 +jmp +80 +acc -16 +jmp +89 +acc +0 +jmp +339 +acc +37 +acc +41 +nop +156 +jmp +452 +jmp +208 +nop +60 +jmp +155 +acc -16 +jmp +274 +nop -77 +acc -16 +acc +21 +jmp +508 +acc -7 +acc -1 +jmp -83 +acc -11 +jmp +28 +acc +3 +acc +32 +acc -18 +jmp -89 +acc +4 +acc -14 +acc -1 +acc +33 +jmp -75 +nop +185 +acc +8 +acc +22 +acc +26 +jmp +164 +acc -19 +jmp +260 +jmp +174 +acc +2 +acc +34 +jmp -120 +acc -15 +acc +48 +jmp +165 +acc +5 +nop +240 +jmp -121 +jmp +114 +jmp -36 +nop +432 +jmp +1 +acc -18 +jmp +429 +acc +44 +nop +110 +jmp +198 +acc -18 +acc +32 +acc +41 +jmp +102 +nop +177 +acc +35 +acc +24 +acc +46 +jmp +121 +acc +20 +jmp +1 +jmp +407 +jmp +1 +acc +35 +acc +46 +nop -18 +jmp +6 +jmp +422 +acc -19 +jmp -85 +acc +33 +jmp -116 +nop +79 +jmp +284 +acc +3 +acc +49 +nop +317 +jmp +6 +acc +6 +jmp +295 +nop -141 +acc -4 +jmp -44 +nop +155 +acc +48 +acc -17 +jmp +188 +acc +22 +jmp +286 +nop +103 +acc -2 +acc +45 +jmp +20 +acc +21 +acc +37 +jmp +235 +jmp +42 +acc -11 +nop -15 +acc -5 +jmp +235 +jmp +178 +acc +12 +acc -15 +jmp +25 +acc +9 +acc +11 +nop +389 +acc +50 +jmp +146 +acc +26 +jmp +144 +acc -14 +jmp +304 +nop +254 +jmp +337 +jmp +17 +jmp +1 +acc +6 +acc -4 +acc +42 +jmp +117 +acc +25 +acc +50 +acc +45 +jmp -112 +acc +14 +acc +27 +jmp +347 +nop +15 +jmp +14 +acc +29 +jmp +236 +jmp -71 +acc -11 +acc +21 +nop +32 +jmp -162 +acc -15 +jmp +322 +acc -4 +acc +16 +jmp +1 +jmp +100 +jmp +1 +jmp -77 +acc +21 +nop -199 +acc +49 +acc -1 +jmp -231 +jmp +230 +acc -19 +jmp +1 +jmp -49 +jmp -11 +acc +6 +jmp -110 +jmp +331 +acc +44 +jmp +292 +acc -7 +acc -18 +acc +50 +jmp +221 +acc +33 +acc +7 +jmp -45 +jmp +342 +acc -19 +acc +36 +acc +15 +jmp -229 +nop -5 +jmp +57 +acc +26 +acc +43 +nop -175 +jmp +82 +acc +45 +jmp -161 +acc -16 +acc +35 +acc +46 +acc +43 +jmp +1 +nop +195 +acc +39 +acc +27 +acc +32 +jmp +227 +jmp -272 +nop +201 +acc +6 +acc +13 +acc +12 +jmp -177 +acc -9 +acc +46 +nop +199 +acc -1 +jmp +1 +jmp +3 +acc +42 +jmp +75 +jmp +305 +acc +49 +acc -16 +jmp -92 +acc +3 +nop +279 +jmp +54 +jmp +31 +acc +50 +jmp -125 +acc +21 +nop -178 +acc +40 +jmp +193 +acc +39 +acc -5 +jmp +261 +nop -3 +acc -13 +jmp -310 +acc +6 +acc -17 +acc +12 +acc +38 +jmp +267 +jmp -311 +acc -2 +jmp -7 +nop +77 +acc -2 +acc +39 +acc -16 +jmp +10 +nop +59 +jmp -296 +acc -4 +acc +41 +jmp -249 +acc +43 +nop +35 +jmp +95 +jmp +171 +acc +10 +nop +169 +acc -17 +jmp +47 +acc +49 +acc +38 +nop +199 +jmp +249 +jmp -53 +nop -194 +acc +19 +acc +18 +jmp -16 +acc +33 +jmp +194 +nop -194 +acc +49 +jmp +85 +acc +50 +nop -318 +acc -7 +jmp -49 +acc -6 +acc +48 +acc -13 +acc -14 +jmp +67 +acc +12 +acc +19 +acc +3 +jmp -371 +jmp -149 +acc +49 +nop -202 +jmp -315 +acc -6 +jmp -171 +acc -7 +jmp +113 +acc +34 +acc +36 +acc +17 +jmp -97 +acc +3 +jmp -244 +acc +25 +acc +30 +acc +25 +acc -19 +jmp +44 +nop +84 +jmp +124 +nop +17 +acc -11 +acc -8 +acc +4 +jmp +193 +jmp -388 +acc +36 +acc +17 +jmp +1 +acc -5 +jmp +166 +acc +39 +acc -10 +jmp -280 +acc +15 +jmp +1 +jmp -396 +jmp +113 +acc +37 +acc +13 +jmp -35 +nop +109 +acc +8 +acc +6 +acc +19 +jmp +39 +jmp +1 +jmp +1 +acc +39 +acc -14 +jmp -291 +acc +39 +acc +31 +jmp -231 +acc +41 +jmp -55 +nop -167 +jmp +105 +acc -8 +acc +34 +jmp -114 +nop +58 +jmp +1 +nop -270 +acc +31 +jmp -135 +acc +8 +acc +33 +jmp +1 +jmp -64 +acc +24 +acc +16 +jmp +117 +acc +35 +acc -11 +nop +44 +acc +18 +jmp +1 +jmp +88 +acc +29 +nop +34 +jmp +1 +nop -118 +jmp -404 +jmp -144 +acc -12 +nop -372 +acc -14 +jmp -209 +acc +12 +jmp +1 +acc -1 +jmp +132 +nop -93 +jmp -130 +acc +23 +acc +30 +acc +3 +jmp -209 +nop -381 +acc -19 +jmp +23 +nop +87 +jmp -277 +acc +39 +jmp -391 +acc +14 +acc +18 +acc +24 +nop -459 +jmp -267 +acc +35 +nop +84 +jmp -231 +acc +5 +acc +0 +acc +45 +jmp -210 +jmp -211 +acc +7 +acc +8 +nop -249 +jmp -8 +jmp -105 +nop -455 +acc -19 +acc +36 +jmp -368 +acc +33 +acc +10 +acc +9 +jmp -259 +nop +41 +acc -14 +acc +2 +jmp -336 +acc +46 +jmp -261 +nop -284 +acc +21 +nop -154 +jmp -485 +jmp -505 +acc +32 +nop -327 +acc +1 +nop +43 +jmp -23 +acc -7 +jmp -88 +acc +10 +jmp -440 +acc +12 +jmp -430 +jmp +1 +acc +46 +nop -105 +jmp -87 +acc +49 +acc -10 +acc -6 +jmp -411 +jmp -268 +acc +35 +acc +15 +jmp +45 +acc -14 +acc +0 +jmp -234 +nop -67 +acc +32 +acc +1 +jmp -476 +jmp -297 +nop -274 +jmp -435 +acc +36 +acc -2 +acc +33 +acc +9 +jmp -26 +jmp +50 +acc +23 +jmp -172 +jmp +1 +acc +34 +acc +32 +acc -4 +jmp -312 +acc -11 +acc +26 +jmp -150 +acc +41 +nop -79 +acc +25 +jmp -76 +acc -2 +acc +29 +acc +12 +jmp -549 +nop -357 +nop -438 +jmp -320 +acc +7 +acc -6 +jmp -149 +nop -74 +acc +7 +acc +45 +jmp -383 +acc -8 +acc +5 +acc +12 +jmp -463 +acc -17 +acc +5 +jmp -34 +jmp +1 +acc +18 +jmp -523 +acc +38 +acc +35 +nop -222 +jmp -424 +nop -365 +jmp -188 +acc +0 +acc +7 +nop -167 +acc +27 +jmp -351 +acc +26 +jmp -201 +nop -208 +nop -466 +acc +50 +nop -531 +jmp -273 +acc +21 +acc +25 +nop -397 +acc +29 +jmp +1 diff --git a/2020/inputs/day_9.txt b/2020/inputs/day_9.txt new file mode 100644 index 0000000..31690cc --- /dev/null +++ b/2020/inputs/day_9.txt @@ -0,0 +1,1000 @@ +37 +7 +16 +34 +48 +24 +5 +40 +30 +35 +2 +45 +19 +33 +36 +49 +32 +1 +44 +21 +25 +3 +11 +38 +15 +4 +6 +7 +8 +16 +9 +10 +5 +12 +13 +17 +14 +35 +18 +19 +20 +23 +36 +53 +22 +21 +41 +28 +11 +24 +15 +25 +26 +27 +29 +64 +50 +31 +30 +34 +32 +44 +33 +47 +74 +35 +66 +37 +36 +38 +45 +39 +40 +41 +42 +57 +51 +55 +68 +70 +71 +72 +61 +88 +65 +75 +140 +77 +73 +82 +110 +81 +74 +116 +86 +80 +112 +83 +92 +128 +141 +106 +120 +146 +126 +147 +133 +134 +138 +139 +156 +209 +162 +160 +154 +155 +233 +216 +163 +313 +298 +273 +189 +198 +226 +253 +232 +265 +259 +260 +316 +267 +272 +277 +449 +428 +314 +309 +471 +318 +379 +430 +458 +387 +683 +475 +415 +421 +486 +525 +544 +575 +532 +519 +632 +539 +590 +739 +586 +623 +627 +688 +696 +697 +804 +1072 +1119 +940 +808 +896 +836 +990 +907 +1107 +1436 +1114 +1129 +1051 +1058 +1754 +1385 +1644 +1459 +1250 +2686 +1324 +2442 +1504 +1501 +1612 +1704 +1915 +1715 +1732 +1826 +1897 +2048 +2431 +2109 +3004 +2165 +2825 +2301 +3039 +2862 +3145 +2574 +2709 +2751 +3447 +4043 +3005 +4198 +3113 +3612 +4910 +3629 +3541 +4306 +4157 +4466 +4349 +4274 +5113 +5027 +5446 +6186 +7889 +8522 +5436 +5854 +5283 +5864 +6292 +6118 +6546 +6617 +6742 +6654 +7241 +7170 +7698 +8431 +11231 +8506 +8623 +9301 +9387 +10140 +10310 +12518 +11137 +10719 +11147 +11290 +11401 +11575 +12156 +12410 +12664 +16757 +13271 +13396 +19611 +14411 +14868 +17129 +16937 +29793 +17807 +17924 +18688 +27532 +23665 +21029 +21866 +23954 +22009 +22976 +30217 +34022 +25986 +27807 +29601 +30400 +26667 +27682 +28264 +40602 +29279 +31805 +34066 +41472 +45606 +41589 +47696 +48711 +55214 +43038 +57543 +69154 +45963 +77223 +66588 +68866 +55265 +115299 +58207 +54349 +95816 +68284 +62330 +115750 +61084 +100312 +90012 +116995 +100820 +84627 +139841 +94674 +89001 +97387 +98303 +190490 +178080 +109614 +112556 +113472 +115433 +116349 +225364 +116679 +122633 +194241 +123414 +145711 +158471 +150085 +173628 +268085 +179301 +198099 +182014 +183675 +186388 +391499 +207001 +207917 +222170 +223086 +229235 +323350 +228905 +530351 +233028 +239312 +262390 +304647 +308556 +389397 +295796 +344859 +415293 +352929 +380113 +430087 +405100 +365689 +370063 +393389 +545520 +431003 +530726 +445256 +456114 +462263 +533552 +524701 +472340 +846296 +535108 +674245 +763452 +604352 +640655 +758059 +697788 +718618 +733042 +1129053 +759078 +838645 +876259 +824392 +918090 +887117 +893266 +907519 +901370 +1591316 +934603 +1469711 +1359500 +1742482 +1139460 +1175763 +1245007 +1302140 +1362411 +1338443 +1571687 +1416406 +1963852 +1557434 +1583470 +1597723 +1663037 +1769525 +2032726 +1780383 +1827869 +3212193 +1808889 +2351009 +2908044 +2538174 +2384467 +3385303 +3352070 +2315223 +2420770 +2547147 +2640583 +2778817 +3886910 +2973840 +2999876 +4336251 +3140904 +3181193 +5009062 +4606686 +4229659 +5601963 +3589272 +3636758 +4124112 +4159898 +4666232 +4699690 +4735993 +4805237 +6183905 +4862370 +4955806 +4967917 +5187730 +5419400 +7370563 +5973716 +6589148 +7226030 +6322097 +10580402 +6817951 +7713384 +11509827 +7749170 +7760870 +7796656 +8824488 +8860105 +8895891 +10281770 +12554407 +15536208 +9667607 +16645061 +13548127 +9923723 +13692660 +10607130 +22222014 +12295813 +14531335 +12911245 +20092469 +19476293 +14567121 +15678056 +15462554 +15510040 +18356300 +30972594 +19141875 +34623804 +17755996 +18563498 +19591330 +25386277 +20274737 +20530853 +27240787 +22902943 +22219536 +30198460 +30667241 +25207058 +26827148 +27442580 +43742577 +32323117 +30029675 +34158451 +33218550 +33266036 +33866340 +36112296 +37347326 +36319494 +52721949 +44977607 +38154828 +39866067 +40805590 +42494273 +43433796 +68014567 +45122479 +55485572 +58425608 +52034206 +52649638 +76652724 +57472255 +128686930 +95216222 +73666820 +66484586 +67084890 +69378332 +91338595 +72431790 +137710495 +74474322 +78020895 +127917362 +84988546 +84239386 +83299863 +85928069 +111607065 +132899930 +135078332 +186342970 +104683844 +109506461 +110121893 +123956841 +124557145 +161700808 +256917030 +186081387 +146906112 +136463222 +141810122 +150452685 +158713708 +207374252 +157774185 +167539249 +168288409 +193421756 +169227932 +269381250 +197535134 +229240989 +214190305 +244584793 +214805737 +219628354 +177777905 +246585115 +286915907 +261020367 +278273344 +311038054 +335827658 +283369334 +292262807 +360961005 +396780238 +437669659 +325313434 +365074383 +448869343 +361710165 +347005837 +608295280 +392583642 +422362698 +391968210 +397406259 +424363020 +456051249 +503091339 +461147239 +893720908 +561642678 +589311398 +570536151 +675337544 +619196992 +575632141 +639268644 +707966842 +708716002 +672319271 +687023599 +821769279 +754293807 +738974047 +739589479 +1483032306 +1031683390 +789374469 +1036779380 +1233961949 +880414269 +1133466510 +964238578 +1022789917 +1809594090 +2272406775 +1164943539 +1209804795 +1214900785 +1194829133 +1247951412 +1461693740 +1359342870 +1791073187 +1411908750 +1651262177 +1478563526 +1493883286 +1821057859 +1776368859 +1753613047 +1954318008 +2156256427 +1844652847 +1903204186 +3010605047 +1987028495 +2129182117 +2187733456 +3196833290 +3284956473 +2359772672 +2404633928 +2409729918 +2442780545 +2607294282 +2771251620 +2837906396 +3920255304 +2905792036 +3747857033 +3323216373 +3247496333 +4630514001 +4802553217 +3598265894 +4510498468 +4307838114 +3831681342 +4174761951 +4116210612 +7346122927 +4316915573 +4597463374 +5652130261 +4847414473 +4764406600 +6236315270 +5050074827 +5214032165 +7618666093 +6369517514 +8918763829 +6153288369 +6229008409 +6570712706 +6921482267 +7422258284 +7714476506 +7906104008 +7915181467 +8148596915 +11663038500 +8679095815 +8290972563 +8433126185 +8914378947 +9081322173 +11168176080 +9611821073 +13362629080 +9814481427 +10264106992 +11203363196 +12382296778 +14284698981 +12522805883 +12724001075 +16834819698 +23726169079 +13492194973 +17995701120 +15136734790 +15620580514 +15821285475 +22196778205 +16439569478 +16724098748 +23306676400 +17514448358 +17347505132 +18728860374 +18693143246 +19426302500 +19875928065 +21467470188 +21017844623 +32651183148 +24905102661 +28002877292 +31949108383 +31860833538 +40450267827 +29313480448 +28628929763 +38018063680 +33616281634 +34238547106 +31441865989 +59143411073 +33163668226 +36040648378 +34071603880 +48956314347 +36243308732 +60070795752 +49020721915 +55083751822 +39302230565 +40893772688 +70744096554 +45922947284 +52907979953 +54218583109 +59951985675 +63385084328 +57942410211 +62477148674 +93101815502 +61792597989 +65680413095 +64605534215 +93919014663 +67235272106 +69204316604 +69406976958 +70112252258 +70314912612 +75545539297 +110813319904 +88322952480 +80196003253 +150800101154 +118824117324 +110098089292 +98830927237 +100141530393 +112160993320 +114170568784 +129027870095 +157729929438 +199136272384 +124269746663 +186062344652 +127473011084 +130285947310 +133809850819 +136439588710 +183374885388 +138611293562 +139519229216 +250332549120 +194366572037 +204465749916 +316348291962 +168518955733 +210481950563 +314563839208 +232640778056 +238752823955 +198972457630 +212302523713 +250610157494 +438833585871 +251742757747 +266992240300 +266084304646 +705825826171 +257758958394 +270249439529 +264095798129 +272421144381 +404848522600 +441133843782 +278130522778 +308038184949 +362885527770 +367491413363 +379000906296 +380821479446 +502352915241 +409454408193 +411274981343 +431613235686 +437725281585 +478386828359 +484723668094 +633575718009 +509501716141 +703809586231 +523843263040 +852408825125 +521854756523 +528008397923 +534345237658 +766448713370 +653242623827 +778766394706 +586168707727 +641016050548 +688859664395 +730376941133 +869844328604 +889661809702 +790275887639 +820729389536 +841067643879 +842888217029 +955456498726 +1110011970767 +1070892375821 +1573265158162 +1227184758275 +1031356472664 +1056199994181 +1045698019563 +1252231697656 +1162870807071 +1169024448471 +1264722178791 +1479135552034 +1239411331554 +1275028372122 +1427236351606 +1510860379152 +2589147522801 +2054998066430 +2180904346588 +1611005277175 +1631343531518 +1776185888262 +1683955860908 +1798344715755 +2077054492227 +2087556466845 +2116590395384 +3761010353135 +2101898013744 +2194227279735 +2208568826634 +2402282138625 +3878083902006 +2331895255542 +4408949747769 +3458949458526 +2514439703676 +2666647683160 +2702264723728 +2938096730758 +3121865656327 +3460141749170 +3242348808693 +4325159222018 +5090292990044 +3315299392426 +3482300576663 +5330434482961 +3992571995490 +4631030099060 +6603177027504 +4218488409128 +4296125293479 +6148948259823 +4402796106369 +6364214465020 +5884582715288 +4846334959218 +4998542938702 +5181087386836 +6017564116154 +5216704427404 +9033826205429 +5640361454486 +8698921399848 +6582007405497 +6557648201119 +9936627949262 +7718095498795 +9199882107714 +7307871387916 +9961464582021 +8838906954708 +10215247366106 +9477365058278 +8514613702607 +20151875315368 +9142460252697 +9401339045071 +9583883493205 +15142551968857 +19249073571535 +11234268543558 +10179630325538 +10397791814240 +15983346450568 +26198593816674 +12198009655605 +12948232842402 +15781889513211 +15724467658194 +13865519589035 +15025966886711 +17679560080816 +15822485090523 +16146778342624 +25939715024300 +30924441482068 +24924349765908 +17657073955304 +18098497195812 +18543799297768 +28913828624374 +18985222538276 +19763513818743 +20577422139778 +31707814108762 +21413898869096 +34325688810979 +27922477313799 +25146242498007 +38256982220594 +32409318886803 +31545079669851 +28891486475746 +53838178390282 +29688004679558 +30848451977234 +39957698166864 +50472467153603 +33803852297928 +68570964349415 +57805315100120 +37083719734088 +35755571151116 +36642296493580 +63239517435353 +38748736357019 +66735007697782 +44909756316750 +79219213969216 +46560141367103 +49336376182895 +57555561384810 +64647057626862 +78706434523883 +115861510462796 +62097323566361 +114974785120332 +78227862658641 +60536456656792 +66771724413646 diff --git a/2020/src/bin/day_1.rs b/2020/src/bin/day_1.rs new file mode 100644 index 0000000..68a570c --- /dev/null +++ b/2020/src/bin/day_1.rs @@ -0,0 +1,83 @@ +use bevy::prelude::*; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_stage("mark") + .add_system_to_stage("mark", mark_sum_pair.system()) + .add_system_to_stage("mark", mark_sum_triple.system()) + .add_stage("report") + .add_system_to_stage("report", print_product_pair.system()) + .add_system_to_stage("report", print_product_triple.system()) + //.add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +struct Expense(i32); +struct FlaggedPair; +struct FlaggedTriple; + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_1.txt").unwrap(); // TODO: Error handling on systems? + for line in BufReader::new(f).lines() { + let expense = line.unwrap().trim().parse().unwrap(); + commands.spawn((Expense(expense),)); + } +} + +fn mark_sum_pair(mut commands: Commands, expenses: Query<(Entity, &Expense)>) { + for (entity_1, expense_1) in expenses.iter() { + for (entity_2, expense_2) in expenses.iter() { + if expense_1.0 + expense_2.0 == 2020 { + commands.insert_one(entity_1, FlaggedPair); + commands.insert_one(entity_2, FlaggedPair); + } + } + } +} + +fn mark_sum_triple(mut commands: Commands, expenses: Query<(Entity, &Expense)>) { + for (entity_1, expense_1) in expenses.iter() { + for (entity_2, expense_2) in expenses.iter() { + for (entity_3, expense_3) in expenses.iter() { + if expense_1.0 + expense_2.0 + expense_3.0 == 2020 { + commands.insert_one(entity_1, FlaggedTriple); + commands.insert_one(entity_2, FlaggedTriple); + commands.insert_one(entity_3, FlaggedTriple); + } + } + } + } +} + +fn print_product_pair(flagged_expenses: Query<With<FlaggedPair, &Expense>>) { + let mut product = 1; + for expense in flagged_expenses.iter() { + product *= expense.0; + } + // TODO: Put it on the screen! + println!("Product Pair: {}", product); +} + +fn print_product_triple(flagged_expenses: Query<With<FlaggedTriple, &Expense>>) { + let mut product = 1; + for expense in flagged_expenses.iter() { + product *= expense.0; + } + // TODO: Put it on the screen! + println!("Product Triple: {}", product); +} diff --git a/2020/src/bin/day_10.rs b/2020/src/bin/day_10.rs new file mode 100644 index 0000000..7ef4fa2 --- /dev/null +++ b/2020/src/bin/day_10.rs @@ -0,0 +1,124 @@ +use bevy::{app::AppExit, prelude::*}; +use std::io::{BufRead, BufReader}; +use std::{collections::BTreeMap, fs::File}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_startup_stage("differences") + .add_startup_system_to_stage("differences", add_min_differences.system()) + .add_startup_system_to_stage("differences", add_all_differences.system()) + .add_startup_stage("report") + .add_startup_system_to_stage("report", print_difference_stats.system()) + .add_system(add_next_paths_to_end_sum.system()) + .add_system(report_full_paths_to_end.system()) + .add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +#[derive(PartialEq, Eq, PartialOrd, Ord)] +struct MinJoltDiff(i64); +#[derive(Clone)] +struct NextJolts(Vec<Entity>); +struct Jolts(i64); +struct PathsToEnd(u64); + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_10.txt").unwrap(); + + commands.spawn((Jolts(0),)); + for line in BufReader::new(f).lines() { + let line = line.unwrap(); + let line = line.trim(); + let num = line.parse().unwrap(); + + commands.spawn((Jolts(num),)); + } +} + +fn add_min_differences( + mut commands: Commands, + jolts_query: Query<(Entity, &Jolts, Option<&MinJoltDiff>)>, +) { + for (entity, jolts, jolt_diff) in jolts_query.iter() { + if jolt_diff.is_none() { + let min_increase = jolts_query + .iter() + .map(|(_, other_jolts, _)| other_jolts) + .filter(|other_jolts| other_jolts.0 > jolts.0) + .map(|other_jolts| MinJoltDiff(other_jolts.0 - jolts.0)) + .min() + .unwrap_or(MinJoltDiff(3)); + commands.insert_one(entity, min_increase); + } + } +} + +fn add_all_differences(mut commands: Commands, jolts_query: Query<(Entity, &Jolts)>) { + for (entity, jolts) in jolts_query.iter() { + let next_entities = jolts_query + .iter() + .filter(|(_, other_jolts)| other_jolts.0 > jolts.0 && other_jolts.0 - jolts.0 <= 3) + .map(|(other_entity, _)| other_entity) + .collect(); + commands.insert_one(entity, NextJolts(next_entities)); + } +} + +fn print_difference_stats(diffs: Query<&MinJoltDiff>) { + let mut buckets: BTreeMap<i64, usize> = BTreeMap::new(); + for diff in diffs.iter() { + *buckets.entry(diff.0).or_insert(0) += 1; + } + println!("Buckets: {:?}", buckets); + + println!( + "Bucket 1 * Bucket 3: {}", + buckets.get(&1).unwrap_or(&0) * buckets.get(&3).unwrap_or(&0) + ); +} + +fn add_next_paths_to_end_sum( + mut commands: Commands, + potential_to_add: Query<Without<PathsToEnd, (Entity, &NextJolts)>>, + already_added: Query<&PathsToEnd>, +) { + for (entity, next) in potential_to_add.iter() { + if next.0.is_empty() { + commands.insert_one(entity, PathsToEnd(1)); + } else { + let next_paths: Result<Vec<&PathsToEnd>, _> = next + .0 + .iter() + .map(|next_entity| already_added.get(*next_entity)) + .collect(); + if let Ok(next_paths) = next_paths { + let sum = next_paths.iter().map(|paths| paths.0).sum(); + commands.insert_one(entity, PathsToEnd(sum)); + } + } + } +} + +fn report_full_paths_to_end( + mut exit_events: ResMut<Events<AppExit>>, + jolts: &Jolts, + paths: &PathsToEnd, +) { + if jolts.0 == 0 { + println!("Paths from the start to the end: {}", paths.0); + exit_events.send(AppExit); + } +} diff --git a/2020/src/bin/day_11.rs b/2020/src/bin/day_11.rs new file mode 100644 index 0000000..82bb282 --- /dev/null +++ b/2020/src/bin/day_11.rs @@ -0,0 +1,209 @@ +use bevy::prelude::*; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_event::<AdjacentStableEvent>() + .add_event::<LineOfSightStableEvent>() + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_system(iterate_adjacent_seats.system()) + .add_system(iterate_line_of_sight_seats.system()) + .add_system(report_adjacent_done.system()) + .add_system(report_line_of_sight_done.system()) + .add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +#[derive(PartialEq, Eq, Clone, Copy)] +struct Position { + x: i32, + y: i32, +} +impl Position { + fn distance(&self, other: &Position) -> i32 { + (self.x - other.x).abs().max((self.y - other.y).abs()) + } +} +impl std::ops::Add<&Position> for Position { + type Output = Position; + fn add(self, other: &Position) -> Self::Output { + Position { + x: self.x + other.x, + y: self.y + other.y, + } + } +} + +struct AdjacentSeat { + occupied: bool, +} +struct LineOfSightSeat { + occupied: bool, +} + +struct AdjacentStableEvent; +struct LineOfSightStableEvent; + +#[derive(Default)] +struct Bounds { + min_x: i32, + max_x: i32, + min_y: i32, + max_y: i32, +} + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_11.txt").unwrap(); + let mut bounds = Bounds::default(); + + for (y, line) in BufReader::new(f).lines().enumerate() { + let line = line.unwrap(); + let line = line.trim(); + for (x, c) in line.chars().enumerate() { + if c == 'L' { + commands.spawn(( + Position { + x: x as i32, + y: y as i32, + }, + AdjacentSeat { occupied: false }, + LineOfSightSeat { occupied: false }, + )); + } + bounds.max_x = x as i32; + } + + bounds.max_y = y as i32; + } + commands.insert_resource(bounds); +} + +fn iterate_adjacent_seats( + mut commands: Commands, + mut stable_events: ResMut<Events<AdjacentStableEvent>>, + seats: Query<(Entity, &Position, &AdjacentSeat)>, +) { + let mut changes: Vec<(Entity, AdjacentSeat)> = Vec::new(); + for (entity, position, seat) in seats.iter() { + let surrounding_count = seats + .iter() + .filter(|(_, other_position, other_seat)| { + other_seat.occupied && position.distance(other_position) == 1 + }) + .count(); + let change = if !seat.occupied && surrounding_count == 0 { + Some(true) + } else if seat.occupied && surrounding_count >= 4 { + Some(false) + } else { + None + }; + if let Some(occupied) = change { + changes.push((entity, AdjacentSeat { occupied })); + } + } + if changes.is_empty() { + stable_events.send(AdjacentStableEvent); + } + + for (entity, seat) in changes { + commands.insert_one(entity, seat); + } +} + +fn iterate_line_of_sight_seats( + mut commands: Commands, + mut stable_events: ResMut<Events<LineOfSightStableEvent>>, + bounds: Res<Bounds>, + seats: Query<(Entity, &Position, &LineOfSightSeat)>, +) { + let dir_vectors = [ + Position { x: -1, y: 0 }, + Position { x: -1, y: -1 }, + Position { x: 0, y: -1 }, + Position { x: 1, y: -1 }, + Position { x: 1, y: 0 }, + Position { x: 1, y: 1 }, + Position { x: 0, y: 1 }, + Position { x: -1, y: 1 }, + ]; + + let mut changes: Vec<(Entity, LineOfSightSeat)> = Vec::new(); + for (entity, position, seat) in seats.iter() { + let mut surrounding_count = 0; + for vec in dir_vectors.iter() { + let mut check = position.clone(); + while check.x >= bounds.min_x + && check.x <= bounds.max_x + && check.y >= bounds.min_y + && check.y <= bounds.max_y + { + check = check + vec; + if let Some((_, _, other_seat)) = + seats.iter().find(|(_, other_pos, _)| other_pos == &&check) + { + if other_seat.occupied { + surrounding_count += 1; + } + break; + } + } + } + + let change = if !seat.occupied && surrounding_count == 0 { + Some(true) + } else if seat.occupied && surrounding_count >= 5 { + Some(false) + } else { + None + }; + if let Some(occupied) = change { + changes.push((entity, LineOfSightSeat { occupied })); + } + } + if changes.is_empty() { + stable_events.send(LineOfSightStableEvent); + } + + for (entity, seat) in changes { + commands.insert_one(entity, seat); + } +} + +fn report_adjacent_done( + stable_events: Res<Events<AdjacentStableEvent>>, + mut stable_event_reader: Local<EventReader<AdjacentStableEvent>>, + seats: Query<&AdjacentSeat>, +) { + for _ in stable_event_reader.iter(&stable_events) { + let occupied = seats.iter().filter(|s| s.occupied).count(); + println!("{} seats end up occupied in the adjacent model", occupied); + } +} + +fn report_line_of_sight_done( + stable_events: Res<Events<LineOfSightStableEvent>>, + mut stable_event_reader: Local<EventReader<LineOfSightStableEvent>>, + seats: Query<&LineOfSightSeat>, +) { + for _ in stable_event_reader.iter(&stable_events) { + let occupied = seats.iter().filter(|s| s.occupied).count(); + println!( + "{} seats end up occupied in the line of sight model", + occupied + ); + } +} diff --git a/2020/src/bin/day_12.rs b/2020/src/bin/day_12.rs new file mode 100644 index 0000000..489cdca --- /dev/null +++ b/2020/src/bin/day_12.rs @@ -0,0 +1,233 @@ +use bevy::prelude::*; +use std::fs::File; +use std::io::{BufRead, BufReader}; +use std::ops::Deref; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_system(move_normal_ship.system()) + .add_system(move_waypoint_ship.system()) + .add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +#[derive(PartialEq, Eq, Clone, Copy)] +struct Position { + x: i64, + y: i64, +} +impl Position { + fn manhattan_distance(&self, other: &Position) -> i64 { + (self.x - other.x).abs() + (self.y - other.y).abs() + } +} +impl std::ops::Add<&Position> for &Position { + type Output = Position; + fn add(self, other: &Position) -> Self::Output { + Position { + x: self.x + other.x, + y: self.y + other.y, + } + } +} +impl std::ops::Mul<i64> for Position { + type Output = Position; + fn mul(self, other: i64) -> Self::Output { + Position { + x: self.x * other, + y: self.y * other, + } + } +} + +enum Facing { + North, + South, + East, + West, +} +impl Facing { + fn right(&mut self) { + use Facing::*; + *self = match self { + North => East, + East => South, + South => West, + West => North, + } + } + + fn reverse(&mut self) { + self.right(); + self.right(); + } + + fn left(&mut self) { + self.reverse(); + self.right(); + } +} + +struct Instructions(Vec<Instruction>); +#[derive(Clone)] +enum Instruction { + North(i64), + South(i64), + East(i64), + West(i64), + Left(i64), + Right(i64), + Forward(i64), +} + +struct InstructionPointer(usize); + +struct Waypoint(Position); + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_12.txt").unwrap(); + + let instructions: Vec<Instruction> = BufReader::new(f) + .lines() + .map(|line| { + let line = line.unwrap(); + let line = line.trim(); + + let val: i64 = line[1..].parse().unwrap(); + let instruction = match line.chars().next().unwrap() { + 'N' => Instruction::North(val), + 'S' => Instruction::South(val), + 'E' => Instruction::East(val), + 'W' => Instruction::West(val), + 'L' => Instruction::Left(val), + 'R' => Instruction::Right(val), + 'F' => Instruction::Forward(val), + other => panic!("Unknown instruction: {}", other), + }; + instruction + }) + .collect(); + + commands.spawn(( + Instructions(instructions.clone()), + InstructionPointer(0), + Facing::East, + Position { x: 0, y: 0 }, + )); + + commands.spawn(( + Waypoint(Position { x: 10, y: 1 }), + Instructions(instructions), + InstructionPointer(0), + Position { x: 0, y: 0 }, + )); +} + +fn move_normal_ship( + mut q: Query< + Without< + Waypoint, + ( + &Instructions, + &mut InstructionPointer, + &mut Facing, + &mut Position, + ), + >, + >, +) { + for (instructions, mut instruction_pointer, mut facing, mut position) in q.iter_mut() { + if let Some(instruction) = instructions.0.get(instruction_pointer.0) { + use Instruction::*; + match instruction { + North(val) => position.y += val, + South(val) => position.y -= val, + East(val) => position.x += val, + West(val) => position.x -= val, + Left(90) | Right(270) => facing.left(), + Left(180) | Right(180) => facing.reverse(), + Left(270) | Right(90) => facing.right(), + Left(val) | Right(val) => panic!("Unknown left/right val: {}", val), + Forward(val) => match facing.deref() { + Facing::North => position.y += val, + Facing::South => position.y -= val, + Facing::East => position.x += val, + Facing::West => position.x -= val, + }, + }; + + instruction_pointer.0 += 1; + } else { + println!( + "Normal Ship at destination: {} x {}, Manhattan distance: {}", + position.x, + position.y, + position.manhattan_distance(&Position { x: 0, y: 0 }) + ); + } + } +} + +fn move_waypoint_ship( + instructions: &Instructions, + mut waypoint: Mut<Waypoint>, + mut instruction_pointer: Mut<InstructionPointer>, + mut position: Mut<Position>, +) { + if let Some(instruction) = instructions.0.get(instruction_pointer.0) { + use Instruction::*; + match instruction { + North(val) => waypoint.0.y += val, + South(val) => waypoint.0.y -= val, + East(val) => waypoint.0.x += val, + West(val) => waypoint.0.x -= val, + Left(90) | Right(270) => { + waypoint.0 = Position { + x: -waypoint.0.y, + y: waypoint.0.x, + } + } + Left(180) | Right(180) => { + waypoint.0 = Position { + x: -waypoint.0.x, + y: -waypoint.0.y, + } + } + Left(270) | Right(90) => { + waypoint.0 = Position { + x: waypoint.0.y, + y: -waypoint.0.x, + } + } + Left(val) | Right(val) => panic!("Unknown left/right val: {}", val), + Forward(val) => *position = position.deref() + &(waypoint.0 * *val), + }; + + // println!( + // "Position: {} x {}. Waypoint: {} x {}", + // position.x, position.y, waypoint.0.x, waypoint.0.y + // ); + + instruction_pointer.0 += 1; + } else { + println!( + "Waypoint Ship at destination: {} x {}, Manhattan distance: {}", + position.x, + position.y, + position.manhattan_distance(&Position { x: 0, y: 0 }) + ); + } +} diff --git a/2020/src/bin/day_2.rs b/2020/src/bin/day_2.rs new file mode 100644 index 0000000..6c26647 --- /dev/null +++ b/2020/src/bin/day_2.rs @@ -0,0 +1,104 @@ +use bevy::prelude::*; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_stage("mark") + .add_system_to_stage("mark", validate_sled_passwords.system()) + .add_system_to_stage("mark", validate_toboggan_passwords.system()) + .add_stage("report") + .add_system_to_stage("report", count_valid_sled_passwords.system()) + .add_system_to_stage("report", count_valid_toboggan_passwords.system()) + //.add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +struct PasswordRule { + num_1: usize, + num_2: usize, + c: char, +} +struct Password(String); +struct SledPasswordValidation(bool); +struct TobogganPasswordValidation(bool); + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_2.txt").expect("Failed to read file"); // TODO: Use the asset loading system to load this rather? + for line in BufReader::new(f).lines() { + let line = line.expect("Error reading file"); + let line = line.trim(); + let mut parts = line.split_whitespace(); + let range = parts.next().expect("File was missing a range"); + let chars = parts.next().expect("File was missing chars"); + let password = parts.next().expect("File was missing a password"); + + let mut range_parts = range.split('-'); + + let rule = PasswordRule { + num_1: range_parts + .next() + .expect("Range did not have a minimum") + .parse() + .expect("Minimum was not a number"), + num_2: range_parts + .next() + .expect("Range did not have a maximum") + .parse() + .expect("Maximum was not a number"), + c: chars.chars().next().expect("File was missing chars"), + }; + let password = Password(password.to_owned()); + + commands.spawn((rule, password)); + } +} + +fn validate_sled_passwords( + mut commands: Commands, + passwords: Query<Without<SledPasswordValidation, (Entity, &PasswordRule, &Password)>>, +) { + for (entity, rule, password) in passwords.iter() { + let actual = password.0.chars().filter(|c| c == &rule.c).count(); + let valid = actual >= rule.num_1 && actual <= rule.num_2; + commands.insert_one(entity, SledPasswordValidation(valid)); + } +} + +fn validate_toboggan_passwords( + mut commands: Commands, + passwords: Query<Without<TobogganPasswordValidation, (Entity, &PasswordRule, &Password)>>, +) { + for (entity, rule, password) in passwords.iter() { + let actual_1 = password.0.chars().nth(rule.num_1 - 1); + let actual_2 = password.0.chars().nth(rule.num_2 - 1); + let actual_1_match = actual_1.map_or(false, |c| c == rule.c); + let actual_2_match = actual_2.map_or(false, |c| c == rule.c); + + let valid = actual_1_match != actual_2_match; + commands.insert_one(entity, TobogganPasswordValidation(valid)); + } +} + +fn count_valid_sled_passwords(validation: Query<&SledPasswordValidation>) { + let count = validation.iter().filter(|v| v.0).count(); + println!("Valid Sled Passwords: {}", count); +} + +fn count_valid_toboggan_passwords(validation: Query<&TobogganPasswordValidation>) { + let count = validation.iter().filter(|v| v.0).count(); + println!("Valid Toboggan Passwords: {}", count); +} diff --git a/2020/src/bin/day_3.rs b/2020/src/bin/day_3.rs new file mode 100644 index 0000000..5e6f0bd --- /dev/null +++ b/2020/src/bin/day_3.rs @@ -0,0 +1,205 @@ +use bevy::app::AppExit; +use bevy::prelude::*; +use bevy::render::camera::Camera; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_stage("game_entities") + .add_startup_system_to_stage("game_entities", read_input_file.system()) + .add_system(move_tobogganist.system()) + .add_system(collide_with_trees.system()) + .add_system(clear_finished_tobogganists.system()) + .add_system(end_of_slope.system()) + .add_system(translate_positions.system()) + .add_system(tobogganist_cam.system()) + .add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands, mut materials: ResMut<Assets<ColorMaterial>>) { + commands.spawn(Camera2dComponents::default()); + + commands.insert_resource(Materials { + tobogganist_material: materials.add(Color::rgb(0., 0., 255.).into()), + tree_material: materials.add(Color::rgb(0., 255., 0.).into()), + }); +} + +struct Materials { + tobogganist_material: Handle<ColorMaterial>, + tree_material: Handle<ColorMaterial>, +} + +struct Tobogganist; + +struct Tree; +#[derive(PartialEq, Eq)] +struct Position { + x: usize, + y: usize, +} +struct Velocity { + x: usize, + y: usize, +} +struct MapSize { + width: usize, + height: usize, +} +struct TreeHitCount(usize); +struct Score(usize); + +fn read_input_file(mut commands: Commands, materials: Res<Materials>) { + commands + .spawn(SpriteComponents { + sprite: Sprite::new(Vec2::new(10., 10.)), + material: materials.tobogganist_material.clone(), + ..Default::default() + }) + .with(Tobogganist) + .with(Position { x: 0, y: 0 }) + .with(Velocity { x: 1, y: 1 }) + .with(TreeHitCount(0)); + + commands + .spawn(SpriteComponents { + sprite: Sprite::new(Vec2::new(10., 10.)), + material: materials.tobogganist_material.clone(), + ..Default::default() + }) + .with(Tobogganist) + .with(Position { x: 0, y: 0 }) + .with(Velocity { x: 3, y: 1 }) + .with(TreeHitCount(0)); + + commands + .spawn(SpriteComponents { + sprite: Sprite::new(Vec2::new(10., 10.)), + material: materials.tobogganist_material.clone(), + ..Default::default() + }) + .with(Tobogganist) + .with(Position { x: 0, y: 0 }) + .with(Velocity { x: 5, y: 1 }) + .with(TreeHitCount(0)); + + commands + .spawn(SpriteComponents { + sprite: Sprite::new(Vec2::new(10., 10.)), + material: materials.tobogganist_material.clone(), + ..Default::default() + }) + .with(Tobogganist) + .with(Position { x: 0, y: 0 }) + .with(Velocity { x: 7, y: 1 }) + .with(TreeHitCount(0)); + + commands + .spawn(SpriteComponents { + sprite: Sprite::new(Vec2::new(10., 10.)), + material: materials.tobogganist_material.clone(), + ..Default::default() + }) + .with(Tobogganist) + .with(Position { x: 0, y: 0 }) + .with(Velocity { x: 1, y: 2 }) + .with(TreeHitCount(0)); + + let f = File::open("./inputs/day_3.txt").expect("Failed to read file"); // TODO: Use the asset loading system to load this rather? + let mut width = 0; + let mut height = 0; + for (y, line) in BufReader::new(f).lines().enumerate() { + let line = line.expect("Error reading file"); + let line = line.trim(); + width = width.max(line.len()); + for (x, c) in line.chars().enumerate() { + if c == '#' { + commands + .spawn(SpriteComponents { + sprite: Sprite::new(Vec2::new(10., 10.)), + material: materials.tree_material.clone(), + ..Default::default() + }) + .with(Tree) + .with(Position { x, y }) + .with(TreeHitCount(0)); + } + } + height = y + 1; + } + commands.insert_resource(MapSize { width, height }); + commands.insert_resource(Score(1)); +} + +fn translate_positions(mut transform: Mut<Transform>, position: &Position) { + transform.translation = Vec3::new(position.x as f32 * 10., position.y as f32 * -10., 0.); +} + +fn tobogganist_cam( + tobogganist: Query<With<Tobogganist, &Transform>>, + mut camera: Query<With<Camera, &mut Transform>>, +) { + for mut camera_transform in camera.iter_mut() { + if let Some(tobogganist_transform) = tobogganist.iter().next() { + camera_transform.translation = Vec3::new(0., tobogganist_transform.translation.y(), 0.); + } + } +} + +fn move_tobogganist(map_size: Res<MapSize>, mut position: Mut<Position>, velocity: &Velocity) { + position.x += velocity.x; + position.x %= map_size.width; + position.y += velocity.y; +} + +fn collide_with_trees( + mut tobogganists: Query<With<Tobogganist, (&Position, &mut TreeHitCount)>>, + trees: Query<With<Tree, &Position>>, +) { + for (tobogganist_position, mut tree_hit_count) in tobogganists.iter_mut() { + for tree_position in trees.iter() { + if *tree_position == *tobogganist_position { + tree_hit_count.0 += 1; + } + } + } +} + +fn clear_finished_tobogganists( + mut commands: Commands, + map_size: Res<MapSize>, + mut score: ResMut<Score>, + tobogganists: Query<With<Tobogganist, (Entity, &Position, &Velocity, &TreeHitCount)>>, +) { + for (entity, position, velocity, tree_hit_count) in tobogganists.iter() { + if position.y >= map_size.height { + println!( + "A tobogganist finished heading at incline {} x {}, after hitting {} trees", + velocity.x, velocity.y, tree_hit_count.0 + ); + score.0 *= tree_hit_count.0; + commands.despawn(entity); + } + } +} + +fn end_of_slope( + score: Res<Score>, + mut exit_events: ResMut<Events<AppExit>>, + tobogganists: Query<&Tobogganist>, +) { + if tobogganists.iter().count() == 0 { + println!("All tobogganists finished. Total score: {}", score.0); + exit_events.send(AppExit); + } +} diff --git a/2020/src/bin/day_4.rs b/2020/src/bin/day_4.rs new file mode 100644 index 0000000..50b8eb5 --- /dev/null +++ b/2020/src/bin/day_4.rs @@ -0,0 +1,222 @@ +use bevy::prelude::*; +use std::fs::File; +use std::io::{BufRead, BufReader}; +use std::str::FromStr; +use thiserror::Error; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_system(count_valid.system()) + //.add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +#[derive(Error, Debug)] +enum ValidationError { + #[error("{0}")] + FromIntError(#[from] std::num::ParseIntError), + #[error("value is out of range")] + OutOfRange, + #[error("value has an invalid unit")] + InvalidUnit, + #[error("value has an invalid characters")] + InvalidChars, +} + +struct BirthYear(u32); +impl FromStr for BirthYear { + type Err = ValidationError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + let num: u32 = s.parse()?; + if num >= 1920 && num <= 2002 { + Ok(Self(num)) + } else { + Err(ValidationError::OutOfRange) + } + } +} + +struct IssueYear(u32); +impl FromStr for IssueYear { + type Err = ValidationError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + let num: u32 = s.parse()?; + if num >= 2010 && num <= 2020 { + Ok(Self(num)) + } else { + Err(ValidationError::OutOfRange) + } + } +} + +struct ExpirationYear(u32); +impl FromStr for ExpirationYear { + type Err = ValidationError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + let num: u32 = s.parse()?; + if num >= 2020 && num <= 2030 { + Ok(Self(num)) + } else { + Err(ValidationError::OutOfRange) + } + } +} + +struct Height(u32); +impl FromStr for Height { + type Err = ValidationError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + let inches = s.ends_with("in"); + let centimeters = s.ends_with("cm"); + if !inches && !centimeters { + return Err(ValidationError::InvalidUnit); + } + + let num: u32 = s[0..s.len() - 2].parse()?; + let num_cm = if inches { + ((num as f32) * 2.54).round() as u32 + } else { + num + }; + + if num_cm >= 150 && num_cm <= 193 { + Ok(Self(num_cm)) + } else { + Err(ValidationError::OutOfRange) + } + } +} + +struct HairColor(String); +impl FromStr for HairColor { + type Err = ValidationError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + if !s.starts_with("#") { + return Err(ValidationError::InvalidChars); + } + if s.len() != 7 { + return Err(ValidationError::InvalidChars); + } + if !s + .chars() + .skip(1) + .all(|c| (c >= 'a' && c <= 'f') || c >= '0' && c <= '9') + { + return Err(ValidationError::InvalidChars); + } + + Ok(Self(s.to_string())) + } +} + +struct EyeColor(String); +impl FromStr for EyeColor { + type Err = ValidationError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + let valid_vals = ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]; + if valid_vals.contains(&s) { + Ok(Self(s.to_string())) + } else { + Err(ValidationError::InvalidChars) + } + } +} + +struct PassportId(String); +impl FromStr for PassportId { + type Err = ValidationError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + if s.len() != 9 { + return Err(ValidationError::InvalidChars); + } + if !s.chars().all(|c| c.is_ascii_digit()) { + return Err(ValidationError::InvalidChars); + } + + Ok(Self(s.to_string())) + } +} + +struct CountryId(String); +impl FromStr for CountryId { + type Err = ValidationError; + fn from_str(s: &str) -> Result<Self, Self::Err> { + Ok(Self(s.to_string())) + } +} + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_4.txt").expect("Failed to read file"); + + commands.spawn(()); + for line in BufReader::new(f).lines() { + let line = line.unwrap(); + let line = line.trim(); + if line.is_empty() { + commands.spawn(()); + } else { + for section in line.split_whitespace() { + let mut section_parts = section.split(':'); + let name = section_parts.next().unwrap(); + let value = section_parts.next().unwrap(); + match name { + "byr" => { + BirthYear::from_str(value).ok().map(|c| commands.with(c)); + } + "iyr" => { + IssueYear::from_str(value).ok().map(|c| commands.with(c)); + } + "eyr" => { + ExpirationYear::from_str(value) + .ok() + .map(|c| commands.with(c)); + } + "hgt" => { + Height::from_str(value).ok().map(|c| commands.with(c)); + } + "hcl" => { + HairColor::from_str(value).ok().map(|c| commands.with(c)); + } + "ecl" => { + EyeColor::from_str(value).ok().map(|c| commands.with(c)); + } + "pid" => { + PassportId::from_str(value).ok().map(|c| commands.with(c)); + } + "cid" => { + CountryId::from_str(value).ok().map(|c| commands.with(c)); + } + _ => {} + } + } + } + } +} + +fn count_valid( + passports: Query<( + &BirthYear, + &IssueYear, + &ExpirationYear, + &Height, + &HairColor, + &EyeColor, + &PassportId, + )>, +) { + let count = passports.iter().count(); + println!("There are {} valid passports", count); +} diff --git a/2020/src/bin/day_5.rs b/2020/src/bin/day_5.rs new file mode 100644 index 0000000..15c8a70 --- /dev/null +++ b/2020/src/bin/day_5.rs @@ -0,0 +1,157 @@ +use bevy::prelude::*; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_startup_stage("search") + .add_startup_system_to_stage("search", find_unoccupied_seat.system()) + .add_startup_stage("metadata") + .add_startup_system_to_stage("metadata", add_seat_ids.system()) + .add_startup_system_to_stage("metadata", add_seat_sprites.system()) + .add_startup_stage("report") + .add_startup_system_to_stage("report", print_highest_seat_id.system()) + .add_startup_system_to_stage("report", print_my_seat_id.system()) + .add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands, mut materials: ResMut<Assets<ColorMaterial>>) { + commands.spawn(Camera2dComponents { + transform: Transform::from_translation(Vec3::new(80. / 2., 1280. / 2., 0.)), + ..Default::default() + }); + + commands.insert_resource(Materials { + my_seat_material: materials.add(Color::rgb(0., 0., 255.).into()), + seat_material: materials.add(Color::rgb(0., 255., 0.).into()), + }); +} + +struct Materials { + my_seat_material: Handle<ColorMaterial>, + seat_material: Handle<ColorMaterial>, +} + +#[derive(PartialEq, Eq)] +struct Position { + x: u32, + y: u32, +} +struct SeatId(u32); +struct MySeat; + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_5.txt").unwrap(); + for line in BufReader::new(f).lines() { + let mut max_y = 128; + let mut min_y = 0; + let mut max_x = 8; + let mut min_x = 0; + for c in line.unwrap().trim().chars() { + let mid_x = (min_x + max_x) / 2; + let mid_y = (min_y + max_y) / 2; + match c { + 'F' => { + max_y = mid_y; + } + 'B' => { + min_y = mid_y; + } + 'L' => { + max_x = mid_x; + } + 'R' => { + min_x = mid_x; + } + _ => panic!("Unexpected character {}", c), + } + } + + assert_eq!(max_y - min_y, 1); + assert_eq!(max_x - min_x, 1); + + commands.spawn((Position { x: min_x, y: min_y },)); + } +} + +fn find_unoccupied_seat(mut commands: Commands, seats: Query<&Position>) { + for y in 1..127 { + for x in 0..8 { + let potential_position = Position { x, y }; + let required_left = if x == 0 { + Position { x: 7, y: y - 1 } + } else { + Position { x: x - 1, y } + }; + let required_right = if x == 7 { + Position { x: 0, y: y + 1 } + } else { + Position { x: x + 1, y } + }; + + let required_surrounds = [required_left, required_right]; + if !seats.iter().any(|p| p == &potential_position) { + if required_surrounds + .iter() + .all(|required| seats.iter().any(|p| p == required)) + { + commands.spawn((MySeat, potential_position)); + } + } + } + } +} + +fn add_seat_ids(mut commands: Commands, seats: Query<(Entity, &Position)>) { + for (entity, position) in seats.iter() { + let seat_id = position.y * 8 + position.x; + commands.insert_one(entity, SeatId(seat_id)); + } +} + +fn add_seat_sprites( + mut commands: Commands, + materials: Res<Materials>, + seats: Query<(Entity, &Position, Option<&MySeat>)>, +) { + for (entity, position, my_seat) in seats.iter() { + commands.insert( + entity, + SpriteComponents { + sprite: Sprite::new(Vec2::new(10., 10.)), + material: if my_seat.is_some() { + materials.my_seat_material.clone() + } else { + materials.seat_material.clone() + }, + transform: Transform::from_translation(Vec3::new( + position.x as f32 * 10., + position.y as f32 * 10., + 0., + )), + ..Default::default() + }, + ); + } +} + +fn print_highest_seat_id(seats: Query<&SeatId>) { + let max = seats.iter().map(|s| s.0).max(); + println!("Max seat id: {:?}", max); +} + +fn print_my_seat_id(seats: Query<With<MySeat, &SeatId>>) { + for seat_id in seats.iter() { + println!("My seat id: {}", seat_id.0); + } +} diff --git a/2020/src/bin/day_6.rs b/2020/src/bin/day_6.rs new file mode 100644 index 0000000..68efbce --- /dev/null +++ b/2020/src/bin/day_6.rs @@ -0,0 +1,102 @@ +use bevy::prelude::*; +use std::collections::{BTreeMap, BTreeSet}; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_stage("calculate") + .add_system_to_stage("calculate", calculate_anyone_groups.system()) + .add_system_to_stage("calculate", calculate_everyone_groups.system()) + .add_stage("report") + .add_system_to_stage("report", count_anyone_group_sizes.system()) + .add_system_to_stage("report", count_everyone_group_sizes.system()) + //.add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +struct Individual; +struct Anyone; +struct Everyone; + +struct Group(usize); +struct Answers(BTreeSet<char>); + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_6.txt").unwrap(); + + let mut current_group = 0; + for line in BufReader::new(f).lines() { + let line = line.unwrap(); + let line = line.trim(); + if line.is_empty() { + current_group += 1; + } else { + let answers = line.chars().collect(); + commands.spawn((Individual, Group(current_group), Answers(answers))); + } + } +} + +fn calculate_anyone_groups( + mut commands: Commands, + individuals: Query<With<Individual, (&Group, &Answers)>>, +) { + let mut anyone_groups = BTreeMap::new(); + for (group_id, answer) in individuals.iter() { + let updated = anyone_groups + .entry(group_id.0) + .or_insert(BTreeSet::new()) + .union(&answer.0) + .cloned() + .collect(); + anyone_groups.insert(group_id.0, updated); + } + + for (group_id, anyone) in anyone_groups.into_iter() { + commands.spawn((Anyone, Group(group_id), Answers(anyone))); + } +} + +fn calculate_everyone_groups( + mut commands: Commands, + individuals: Query<With<Individual, (&Group, &Answers)>>, +) { + let mut anyone_groups = BTreeMap::new(); + for (group_id, answer) in individuals.iter() { + let updated = anyone_groups + .entry(group_id.0) + .or_insert(answer.0.clone()) + .intersection(&answer.0) + .cloned() + .collect(); + anyone_groups.insert(group_id.0, updated); + } + + for (group_id, anyone) in anyone_groups.into_iter() { + commands.spawn((Everyone, Group(group_id), Answers(anyone))); + } +} + +fn count_anyone_group_sizes(groups: Query<With<Anyone, &Answers>>) { + let sum: usize = groups.iter().map(|g| g.0.len()).sum(); + println!("Anyone: {}", sum); +} + +fn count_everyone_group_sizes(groups: Query<With<Everyone, &Answers>>) { + let sum: usize = groups.iter().map(|g| g.0.len()).sum(); + println!("Everyone: {}", sum); +} diff --git a/2020/src/bin/day_7.rs b/2020/src/bin/day_7.rs new file mode 100644 index 0000000..45cb9ee --- /dev/null +++ b/2020/src/bin/day_7.rs @@ -0,0 +1,137 @@ +use bevy::prelude::*; +use std::collections::{BTreeMap, BTreeSet}; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_system(trim_empty_bags.system()) + .add_system(add_known_sizes.system()) + .add_system(report_gold_bag_known_size.system()) + //.add_system(debug_print_bags.system()) + .add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +const TARGET_COLOUR: &str = "shiny gold"; + +struct Bag { + colour: String, + required: BTreeMap<String, usize>, +} +struct CantContainShinyGold; +#[derive(Clone)] +struct KnownSize(usize); + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_7.txt").unwrap(); + + for line in BufReader::new(f).lines() { + let line = line.unwrap(); + let line = line.trim(); + + let (src_colour, contents) = split_2(line, "bags contain"); + let contents_parts = contents + .trim_end_matches('.') + .split(',') + .filter(|part| part != &"no other bags") + .map(|part| { + let (quantity, colour) = split_2( + part.trim().trim_end_matches("bags").trim_end_matches("bag"), + " ", + ); + (colour, quantity.parse().unwrap()) + }) + .collect(); + commands.spawn((Bag { + colour: src_colour, + required: contents_parts, + },)); + } +} + +fn split_2(line: &str, split: &str) -> (String, String) { + let parts = line.splitn(2, split).collect::<Vec<_>>(); + assert_eq!(parts.len(), 2); + (parts[0].trim().to_string(), parts[1].trim().to_string()) +} + +fn debug_print_bags(bags: Query<&Bag>) { + for bag in bags.iter() { + println!("{} requires {:?}", bag.colour, bag.required); + } +} + +fn trim_empty_bags( + mut commands: Commands, + bags: Query<Without<CantContainShinyGold, (Entity, &Bag)>>, +) { + let mut colours_cleared = BTreeSet::new(); + for (entity, bag) in bags.iter() { + let required_not_relevant = bag.required.keys().all(|required| { + !bags + .iter() + .any(|can_contain_shiny_gold| &can_contain_shiny_gold.1.colour == required) + }); + if required_not_relevant && bag.colour != TARGET_COLOUR { + colours_cleared.insert(bag.colour.clone()); + commands.insert_one(entity, CantContainShinyGold); + } + } + + if colours_cleared.is_empty() { + println!( + "{} bags can hold the shiny gold one", + bags.iter().count() - 1 + ); + } +} + +fn add_known_sizes(mut commands: Commands, bags: Query<(Entity, &Bag, Option<&KnownSize>)>) { + for (entity, bag, size) in bags.iter() { + if size.is_some() { + continue; + } + + let mut new_size = Some(0); + for (required_colour, required_quantity) in bag.required.iter() { + if new_size.is_none() { + break; + } + + let inner_bag_size = bags + .iter() + .find(|(_, bag, _)| &bag.colour == required_colour) + .and_then(|(_, _, size)| size.clone()); + new_size = new_size + .zip(inner_bag_size) + .map(|(a, b)| a + required_quantity * b.0) + } + + if let Some(new_size) = new_size { + commands.insert_one(entity, KnownSize(new_size + 1)); + } + } +} + +fn report_gold_bag_known_size(bags: Query<(&Bag, &KnownSize)>) { + println!("{} have a known size", bags.iter().count()); + for (bag, size) in bags.iter() { + if bag.colour == TARGET_COLOUR { + println!("The shiny gold bag must contain {} other bags!", size.0 - 1) + } + } +} diff --git a/2020/src/bin/day_8.rs b/2020/src/bin/day_8.rs new file mode 100644 index 0000000..2c0c227 --- /dev/null +++ b/2020/src/bin/day_8.rs @@ -0,0 +1,154 @@ +use bevy::{app::AppExit, prelude::*}; +use std::convert::TryFrom; +use std::io::{BufRead, BufReader}; +use std::{collections::BTreeSet, fs::File}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_stage("check_line") + .add_system_to_stage("check_line", track_program_line_execution.system()) + .add_system_to_stage("check_line", track_program_termination.system()) + .add_stage("exec") + .add_system_to_stage("exec", tick_computer.system()) + .add_system_to_stage("exec", exit.system()) + .add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +struct Program { + ops: Vec<Op>, +} +#[derive(Clone)] +enum Op { + Acc(i32), + Jmp(i32), + Nop(i32), +} +struct UnalteredProgram; +#[derive(Default)] +struct Computer { + program_counter: i32, + accumulator: i32, + termiated: bool, +} +#[derive(Default)] +struct LineTracker(BTreeSet<i32>); + +impl Computer { + fn exec(&mut self, program: &Program) { + if self.termiated { + return; + } + + let x = usize::try_from(self.program_counter).ok(); + match x.and_then(|x| program.ops.get(x)) { + None => {} + Some(Op::Acc(val)) => { + self.accumulator += val; + self.program_counter += 1; + } + Some(Op::Jmp(val)) => { + self.program_counter += val; + } + Some(Op::Nop(_)) => { + self.program_counter += 1; + } + } + if self.program_counter >= program.ops.len() as i32 { + self.termiated = true; + } + } +} + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_8.txt").unwrap(); + + let ops: Vec<Op> = BufReader::new(f) + .lines() + .map(|line| { + let line = line.unwrap(); + let line = line.trim(); + + let mut line_parts = line.split_whitespace(); + let opcode = line_parts.next().unwrap(); + let val: i32 = line_parts.next().unwrap().parse().unwrap(); + let op = match opcode { + "acc" => Op::Acc(val), + "jmp" => Op::Jmp(val), + "nop" => Op::Nop(val), + _ => panic!("Invalid opcode"), + }; + op + }) + .collect(); + commands.spawn(( + UnalteredProgram, + Program { ops: ops.clone() }, + Computer::default(), + LineTracker::default(), + )); + + for i in 0..ops.len() { + let mut ops = ops.clone(); + ops[i] = match ops[i] { + Op::Nop(v) => Op::Jmp(v), + Op::Jmp(v) => Op::Nop(v), + Op::Acc(v) => Op::Acc(v), + }; + commands.spawn(( + Program { ops: ops.clone() }, + Computer::default(), + LineTracker::default(), + )); + } +} + +fn track_program_line_execution( + mut commands: Commands, + entity: Entity, + mut line_tracker: Mut<LineTracker>, + computer: &Computer, + unaltered: Option<&UnalteredProgram>, +) { + if line_tracker.0.contains(&computer.program_counter) { + if unaltered.is_some() { + println!( + "About to execute a line for the second time! Line {}. Accumulator: {}", + computer.program_counter, computer.accumulator + ); + } + commands.despawn(entity); + } else { + line_tracker.0.insert(computer.program_counter); + } +} + +fn track_program_termination(mut commands: Commands, entity: Entity, computer: &Computer) { + if computer.termiated { + println!("Program terminated! Accumulator: {}", computer.accumulator); + commands.despawn(entity); + } +} + +fn tick_computer(mut computer: Mut<Computer>, program: &Program) { + computer.exec(program); +} + +fn exit(mut exit_events: ResMut<Events<AppExit>>, computers: Query<&Computer>) { + if computers.iter().len() == 0 { + exit_events.send(AppExit); + } +} diff --git a/2020/src/bin/day_9.rs b/2020/src/bin/day_9.rs new file mode 100644 index 0000000..b5a02e6 --- /dev/null +++ b/2020/src/bin/day_9.rs @@ -0,0 +1,120 @@ +use bevy::{app::AppExit, prelude::*}; +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn main() { + App::build() + .add_resource(WindowDescriptor { + title: "Advent of Code".to_string(), + width: 1920, + height: 1080, + ..Default::default() + }) + .add_resource(ClearColor(Color::rgb(0., 0., 0.))) + .add_startup_system(setup_camera.system()) + .add_startup_system(read_input_file.system()) + .add_stage("add") + .add_system_to_stage("add", check_next_num.system()) + .add_stage("remove") + .add_system_to_stage("remove", remove_oldest_line.system()) + .add_stage("find_range") + .add_system_to_stage("find_range", find_contiguous_range.system()) + .add_plugins(DefaultPlugins) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dComponents::default()); +} + +#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] +struct LineNum(usize); +#[derive(Clone)] +struct Num(i64); +struct Active; +struct Invalid; +struct Done; + +fn read_input_file(mut commands: Commands) { + let f = File::open("./inputs/day_9.txt").unwrap(); + + for (line_num, line) in BufReader::new(f).lines().enumerate() { + let line = line.unwrap(); + let line = line.trim(); + let num = line.parse().unwrap(); + commands.spawn((LineNum(line_num), Num(num))); + if line_num < 25 { + commands.with(Active); + } + } +} + +fn check_next_num( + mut commands: Commands, + active: Query<With<Active, &Num>>, + next: Query<Without<Done, Without<Active, (Entity, &LineNum, &Num)>>>, +) { + if let Some((min_entity, line, num)) = next.iter().min_by_key(|(_, line, _)| line.0) { + let mut is_sum = false; + for active_1 in active.iter() { + for active_2 in active.iter() { + is_sum = is_sum || (num.0 == active_1.0 + active_2.0) + } + } + commands.insert_one(min_entity, Active); + + if !is_sum { + commands.insert_one(min_entity, Invalid); + println!( + "{} on line {} was not a sum of the previous lot!", + num.0, line.0 + ); + } + } +} + +fn remove_oldest_line( + mut commands: Commands, + line_nums: Query<Without<Done, With<Active, (Entity, &LineNum)>>>, +) { + if let Some((min_entity, _)) = line_nums.iter().min_by_key(|(_, line)| line.0) { + commands.remove_one::<Active>(min_entity); + commands.insert_one(min_entity, Done); + } else { + println!("All numbers cleared"); + } +} + +fn find_contiguous_range( + mut exit_events: ResMut<Events<AppExit>>, + line_nums: Query<(&LineNum, &Num)>, + invalid: Query<With<Invalid, &Num>>, +) { + for invalid in invalid.iter() { + let mut nums: Vec<(LineNum, Num)> = line_nums + .iter() + .map(|(line, num)| (line.clone(), num.clone())) + .collect(); + + nums.sort_by_key(|(line, _num)| line.clone()); + let nums: Vec<i64> = nums.into_iter().map(|(_line, num)| num.0).collect(); + + for min in 0..nums.len() { + for max in min + 2..nums.len() + 1 { + let sum: i64 = nums[min..max].iter().sum(); + if sum == invalid.0 { + let min_in_range = nums[min..max].iter().min().unwrap(); + let max_in_range = nums[min..max].iter().max().unwrap(); + println!( + "Range found! {} + {} = {}", + min_in_range, + max_in_range, + min_in_range + max_in_range + ); + } + } + } + + exit_events.send(AppExit); + } +} diff --git a/2020/src/lib.rs b/2020/src/lib.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/2020/src/lib.rs @@ -0,0 +1 @@ + diff --git a/2020/src/main.rs b/2020/src/main.rs new file mode 100644 index 0000000..e7a11a9 --- /dev/null +++ b/2020/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} |