diff --git a/day-3/.gitignore b/day-3/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/day-3/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/day-3/Cargo.lock b/day-3/Cargo.lock deleted file mode 100644 index d0411da..0000000 --- a/day-3/Cargo.lock +++ /dev/null @@ -1,78 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "day-3" -version = "0.1.0" -dependencies = [ - "indoc", -] - -[[package]] -name = "indoc" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8" -dependencies = [ - "indoc-impl", - "proc-macro-hack", -] - -[[package]] -name = "indoc-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", - "unindent", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[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 = "quote" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "syn" -version = "1.0.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8833e20724c24de12bbaba5ad230ea61c3eafb05b881c7c9d3cfe8638b187e68" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "unicode-xid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" - -[[package]] -name = "unindent" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7" diff --git a/day-3/Cargo.toml b/day-3/Cargo.toml deleted file mode 100644 index d861f49..0000000 --- a/day-3/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "day-3" -version = "0.1.0" -authors = ["Tristan Daniël Maat <tm@tlater.net>"] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -indoc = "0.3" diff --git a/day-3/input b/day-3/input deleted file mode 100644 index b4223c3..0000000 --- a/day-3/input +++ /dev/null @@ -1,323 +0,0 @@ -...#...#..#....#..#...#..##..#. -.#..#.....#.#............###... -.#...###....#.............##..# -...##...##....#.....##..#.##... -.....###.#.###..##.#.##.......# -#...##.....#..........#..#.#.#. -......##.......##..#....#.#.... -....#.###.##..#.#..##.##....#.# -.......#.......###.#.#.##.....# -.........#.#....#..........#.#. -.#...##.....##.........#..#.... -.##....#.#.#...##......#....... -##.#.#..#....#....#....#...#.#. -##....#.#..##......#....##...#. -....#..#..##..#.###.......#.#.. -.....##....###...........#.#.## -#.....##.........#....##......# -........###.#..#....#....#..... -...#.......#.##..#.###......#.. -...............#..#....#.##.... -..#..###..#.#..#.........##..#. -####..#..####.................. -#...####...#.......#.#.#...#... -......###.....#......#..#..#... -#...#.....##.....#.#..##...#.#. -#...........##.......#......... -.#..#.........#.#..##....#..... -........##...#................# -........#.###.#.###.#.#.##..##. -.#....##.....#...##.#..#.#..... -..#..#.....###....##.#....#.#.# -#......##.##...##..#.........#. -#..#..#.....#.....#.........#.. -#....#.#...###.........#...#... -.#.#.....##......#.#......#.... -..##......##...#.#.#.#......... -..#......#.....##.###.#.#..#... -....#..#.......#..#..#.....#... -.#.#.....#...#..........#...... -#.#..#...........#.#.##.#...#.# -..#.#....###...#...#.....#.#... -....##.#.###....####.......#... -.....##....#.......#..#..#....# -...##..#.#.#.#......#......#... -...##...#....#...#......###...# -........#..#.#.....#.###....... -..#..##.#....#.#.........#...#. -.....#.####....#.##.........#.. -......#...#...#.....#......###. -.##.....#....#..#.#....#.....#. -...........#...#....##..#...#.. -.....#....#.....#...##..#...#.# -.#...#.........#.......#...#..# -...#..#...#........#......#.... -..#..#####.#.....#.#....#...#.# -...#.......#.#....#...##..#..#. -####..#.#.###.#.#.............. -.##........#...#.#....#..#..... -..#..............#.#..##...#.## -.###.#.....#.#.....##.#......## -....###.....#...#...#.#..#..... -....###.#.##.......#....#...#.. -#..#...#......##..#.....#.#...# -....#.#.........#.............. -#.##.##...#..#.#.#.....#...#.## -#...#...#......#...........##.. -#.#.#......#............#.#.... -.#.#..######...#.#.........#.## -..#.#..#...#......#............ -....#.....#......##..#.....#... -.##............#....##..#...... -.#.#.#...#.##.............###.# -#.#...#...#.....#....#.#.#..... -........#..#......##.##.#.....# -.....#.....#.#####...#....#.... -.#...#......#.........#.#...... -...#...#..##.....##....#..#.... -....#....##..#.........#....... -..#........##..#.#........#.... -...#...##...........#...#....#. -.....##.........#..#....#..#.#. -#..#....##..#...##.....#..##.#. -..#.#.#.#...#...#.....#.#....#. -.......#.###...#.#.......#.#... -....#..#..#.###.#.....###..#.#. -.#..##......#..#..#....#.####.. -..##...........#...#.........#. -......#..#...#..........#...... -....#..........#......##...#... -....#..#.##........#.#...##.#.. -#.##......#........##.#...#...# -#..#....#.....###........##.... -...........##.....##..#....#.## -..#....#..#..#......#.#.....#.. -#....#.##....#.....##.......#.. -.#.....#.#..............#.##..# -.#..#..#...#...#....#.#.....#.. -...###...##.#...#..#........#.. -#...#.##.#.....#.#....#..#..... -#.....###.#.......#.#..#.#..##. -....#..#..##.......###.#...#... -.#...####...............#.....# -.#.##.#.....#.....#.#......##.# -#...........#.##....###.##....# -...............#..........#.... -.....#..#.##.###.#............. -...##.............#.....#.#..#. -....#.#...#.#..#..#..#....#.... -..#.......#..........#...#...#. -...............#.#.#...###....# -....#...#.##....#..##....#..... -........#.#.##.........##.##.## -#.....###.......#.#....#..#..## -.#..#...#......#.#..##.......#. -#.....#.#........#.##..#..#.... -.###..##.#.......#......###.... -.#...###.....#.....#....###...# -........##.##......#.#....#...# -.#....#..#.........#..##...##.. -.......#.......##.#..#..##..... -#..##..##......#.#......#.##... -..#..###..#...#....#..#...#.... -#.............#.####.........## -..#..................#...#..#.. -..#......#........##.......#.#. -.#.#.#.#..###.....#....#.#..... -...#.##.###.......#....#....... -................##...#.....#... -..#.###.#...#.####....#..#..#.. -..#....###....##..#.#.........# -.#..#.#.....#........#....##... -.....#..#......#..#..##.#.#.... -.#..#.........##....##......#.. -.....#.#...#...#.#...#.#...#.#. -..#..#...#...#...##.#..###..... -..#..##......#..##.#...##...... -.......#..##....##.#......#..#. -..#......#.#.....#.##....##.... -..#....#......#......##........ -....##.#.#....#.......#.##..... -#.....#...###....#....#...#.... -............#.#..#...#...#..#.. -..##.............##....#....... -.#.......#.##.#......#....##... -...##............#....#..#...#. -.##.####.....#.#..###.#....#.## -....##.#........#..#...#....... -...#...###.##...........##..#.. -..##..##....#...#..#..........# -..#.........#.#...##..........# -.......##....#.#...##.....#..#. -.............#.....#.#.......#. -#.......#..##..##...##.#....... -..............#.....#.#..#...## -........##..#.....#...#...#.#.. -###.#.................#........ -...#........#...#.#######..#..# -...#.##...##.#.#..######...#... -#.......#..#....#..#.##.....#.. -#..#....##....#.##.......#....# -#...#..#.#.#...#..#.##..#...... -....#..##....#..#.#...........# -.##..#.#.............###....... -#....##......#..#..#.....###... -..#..........#...###.#......... -.####......#....#......#.#....# -..#....#.#.#......#....#....... -.....#.....#....#....#####....# -.##..........#...#.###....#.... -....##.....##......#...#.#..... -.#...#...#..#.#.#...#####...... -...#.##..####.##.##.......##... -............#.......#.......... -.#..##.#..#####........#..#...# -#......##..##..##.........##... -....#....#.............#.#....# -###..#.....#.....#.#...#..#.### -#...#.......##......#....#.#.#. -...#......#..#...#....#...###.# -....#....##.......#....#......# -............#......##.##.....#. -...#.........#......#....##..## -.....##....##...#..###...#..#.. -.......##.#..........#.##.##... -....##...........#.#..#..#.##.# -#...#..##.##.#....#....#.#..... -...##.#.....#..#..#..###....##. -#.##.#..#..#.#.............#... -..#.#.............###.....#.... -...#..#....#..#.....#.#..#..#.. -...#.....##.#...........#..##.# -.........#.#.##..#..#.#...#.... -...#..##..#...#...###.##.#..#.. -.#..##...##......##..##........ -......##....##.#.##.#.#........ -...#..................#.....#.. -.##................#.#..#..###. -.##.##.....#................#.. -.....#.#..........#...#..#.#..# -.............#......#..#.#..#.. -...#...##..#........#....#..... -#......#........##.##...##..... -##..#..##....#...#............# -..##..##.##....##..##........#. -...#....#.#.#.#....#.#...##.... -....#...##..##.#.##...#..#...#. -#..#....##.#.....#.......#...## -##.#....#.............#..#..... -.##..#..#.#.....#.......#.#..#. -.......#..#...##...#...###..#.. -..........#...#.#..##.....#...# -..#....#...........#####....#.. -#....#..#.......##............. -.........##..#####.......##.... -#..#..........#.....###...#..#. -.#.#.#..#...#.......##...#####. -.....#....#.###...#.......#.... -#.#.....##...###....###....#... -.#.....#..#.#.#........#...#... -.##.#.#.#......#....###....#... -.#..##..####......###......#... -......#.#.#.#.#...#...####.##.. -.#........##..#.....#....#....# -.....###......##..#....#....... -#.#.##...#.#......###.......... -........#.#...#..#......#....#. -..##...##.........#.......#.#.. -..#.##....#...##.....#.###..... -.........#..#.#....#....#.#.##. -#.........#......#..#.......#.. -...#...##.......#.........#.... -............#......#........... -##.....#.....#.#...#.....#..... -..#.#...#..#...#.#...........#. -#.#.#..#..#...##.#...#.#.....#. -.#..###.#..##.#.....#.....#.... -##....##....#.......##..##..... -.#..#...........###..........#. -.#..#..#..........###..#....... -#..###......#............##...# -#......#........#..#..#..#.#... -.......#.###...#.##............ -.##....#.......#.#...##.....#.# -....#..#.#.......#.#........... -##....#.###.#....#.#..##.#....# -..#..#..#....#...#........##... -...#...##....#..#.#...#..#..... -......#..#......#....#.......#. -#.#..............#...###...#..# -...#....#..#..........#.#...#.. -#.....##..##.....#........#.... -.#...##..#.#..............#.... -##.#....#..##...#..#.####.#..#. -.....#.......#.#.#.#..#.....### -...#.##....#.#........##....... -#...#.#...#.#..###..##.##...#.# -###..............#.#.###....... -...###..#.#..#....##...###.#... -......##...........#...#..#...# -.#..#.........##.......#..#...# -.#.......###......##...#...#... -.#......##...#........#.......# -.#..#.....#.........#.#........ -#...#.#.....#...#..##.........# -......##.#......##.#..##.#..... -...............#.#..#....#....# -#....#..#..#..#.#.....##...##.. -#.#......#.###......#..#...#### -.#.#..#...#...#.#..#.##.##.#.#. -.....#.#...###...#.#.....##.... -...#..#.#..........##.#....#.#. -...#..#.#.##.....###.##.#....#. -..........#..###......#..#.#... -###.....#..###..#...#..###.#... -..#..#.....##.#.#..###.......#. -....#....##........##.......... -.......#..........#...#......#. -.#........#.#.#.#.#.......#.... -.#..#.......##..##....#.#...#.. -.#.#.#.......#..#.............. -#.#....#.#...#.#.#.....#.#...## -.....#..........##..#.......#.. -.##......#.#....#.#.......#.... -..#.##....#.##.#...#........... -...##......##..##.............# -..........##.#.#..#..........#. -.##....#..#..#.#....##.#...#.#. -...........#....#.....#.#..#... -.#.....#....##..#.........#.... -.....#.....#...#....#...#.###.# -..#....#....#.....#...#......#. -.....##..#.............#...#... -........#..#.......#.#.......#. -#...###..#.##.#...###...##..##. -....##..#.......#...#.#........ -.#...#.#.##....####........#..# -.#...#.#.####.##.#............. -#..##...#....#...#.#.#.#.##..#. -.#.......#........#.....###.... -#.#.....#....#..#....#..#....#. -...#..#...#.....#.........##... -.#....#......###...#....#.#.#.. -#.#........#......#...#....##.. -.....#..#......#..#..#......#.. -.#.....#..#.##.#.#.#...#......# -##........#..#.#..#...#.####... -..........##....#.#..#.#....#.. -#.##..#..#....#..#....##..#.#.# -..#......#.......#...##..#..... -##...#.........#......#......#. -.#.....................#..#.##. -.#.......#........#.#.#..##.#.. -..#..........#........#..##.#.. -.#...#...#.........##.#.#.#.... -....#....#.###.#....###....#.## -....##......##........##.#.##.. -....#.#......#.##.#...#.##..... -....#....#..#.#..###.#.#....... -....#......#..#.#.......#..##.. -.....#..#.#.##.##..##.....#.#.. -...#....................##..... -#.....#...##...#.#............. -..#.#...#.#.#.....##..#....#... diff --git a/day-3/src/main.rs b/day-3/src/main.rs deleted file mode 100644 index b5c2d85..0000000 --- a/day-3/src/main.rs +++ /dev/null @@ -1,91 +0,0 @@ -use std::fs; - -fn main() -> Result<(), Box<dyn std::error::Error>> { - let input = fs::read_to_string("input")?; - let slope = parse_slope(&input)?; - - // Part 1 - let encounters = count_encounters(&slope, (1, 3)); - println!("{}", encounters); - - // Part 2 - let encounters: usize = [(1, 1), (1, 3), (1, 5), (1, 7), (2, 1)] - .iter() - .map(|angle| count_encounters(&slope, *angle)) - .product(); - println!("{}", encounters); - - Ok(()) -} - -fn parse_slope(input: &str) -> Result<Vec<Vec<usize>>, String> { - input - .lines() - .map(|line| { - line.chars() - .map(|c| match c { - '.' => Ok(0), - '#' => Ok(1), - other => Err(format!("Invalid slope; contains character: {}", other)), - }) - .collect() - }) - .collect() -} - -fn count_encounters(input: &Vec<Vec<usize>>, angle: (usize, usize)) -> usize { - input - .iter() - .enumerate() - .step_by(angle.0) - .map(|(i, row)| row[(i * angle.1 / angle.0) % row.len()]) - .sum() -} - -#[cfg(test)] -mod tests { - use super::*; - use indoc::indoc; - - #[test] - fn test_simple() -> Result<(), Box<dyn std::error::Error>> { - let example = indoc!( - "..##....... - #...#...#.. - .#....#..#. - ..#.#...#.# - .#...##..#. - ..#.##..... - .#.#.#....# - .#........# - #.##...#... - #...##....# - .#..#...#.#" - ); - - let parsed = parse_slope(example)?; - assert_eq!(count_encounters(&parsed, (1, 3)), 7); - Ok(()) - } - - #[test] - fn test_simple2() -> Result<(), Box<dyn std::error::Error>> { - let example = indoc!( - "..##....... - #...#...#.. - .#....#..#. - ..#.#...#.# - .#...##..#. - ..#.##..... - .#.#.#....# - .#........# - #.##...#... - #...##....# - .#..#...#.#" - ); - - let parsed = parse_slope(example)?; - assert_eq!(count_encounters(&parsed, (2, 1)), 2); - Ok(()) - } -} diff --git a/day-4/.gitignore b/day-4/.gitignore deleted file mode 100644 index b83d222..0000000 --- a/day-4/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/day-4/Cargo.lock b/day-4/Cargo.lock deleted file mode 100644 index 44f11e3..0000000 --- a/day-4/Cargo.lock +++ /dev/null @@ -1,78 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "day-4" -version = "0.1.0" -dependencies = [ - "indoc", -] - -[[package]] -name = "indoc" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8" -dependencies = [ - "indoc-impl", - "proc-macro-hack", -] - -[[package]] -name = "indoc-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", - "unindent", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[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 = "quote" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "syn" -version = "1.0.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8833e20724c24de12bbaba5ad230ea61c3eafb05b881c7c9d3cfe8638b187e68" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "unicode-xid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" - -[[package]] -name = "unindent" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7" diff --git a/day-4/Cargo.toml b/day-4/Cargo.toml deleted file mode 100644 index 223e26a..0000000 --- a/day-4/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "day-4" -version = "0.1.0" -authors = ["Tristan Daniël Maat <tm@tlater.net>"] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -indoc = "0.3" diff --git a/day-4/input b/day-4/input deleted file mode 100644 index 5b0a490..0000000 --- a/day-4/input +++ /dev/null @@ -1,1068 +0,0 @@ -hgt:159cm -pid:561068005 eyr:2025 iyr:2017 cid:139 ecl:blu hcl:#ceb3a1 -byr:1940 - -iyr:2014 -byr:1986 pid:960679613 eyr:2025 ecl:hzl - -cid:211 ecl:blu hcl:#7d3b0c iyr:2011 pid:006632702 -byr:1982 eyr:2023 hgt:68in - -hcl:#341e13 hgt:192 iyr:2028 -ecl:utc -eyr:2027 byr:1979 pid:653515689 - -eyr:2026 hgt:161cm ecl:#1850b8 -pid:298779494 hcl:b2114e iyr:1953 - -hgt:155cm -hcl:#a97842 iyr:2019 -ecl:gry byr:1939 -pid:935099157 eyr:2027 - -eyr:2024 ecl:grn -pid:102781360 byr:1962 iyr:2013 hcl:#602927 - -hcl:#602927 hgt:152cm -pid:659074205 ecl:brn iyr:2014 byr:1951 - -iyr:2025 hcl:8464b2 byr:2030 pid:976783295 hgt:155cm ecl:dne - -hcl:#ceb3a1 byr:1984 pid:863872932 -iyr:2016 hgt:190cm ecl:grn eyr:2026 - -eyr:2030 hcl:#efcc98 -cid:166 pid:894418497 ecl:hzl -hgt:189cm iyr:2014 byr:1966 - -byr:1937 iyr:2017 eyr:2028 -ecl:amb -hgt:165cm cid:84 -pid:435289747 - -hgt:166cm hcl:#6b5442 byr:1953 eyr:2023 iyr:2010 -pid:948173962 ecl:amb - -byr:1962 cid:276 iyr:2010 hgt:183cm pid:097154397 -hcl:#341e13 eyr:2024 - -hgt:61cm -byr:1942 ecl:xry hcl:#05e97d pid:42823283 -eyr:2024 - -hcl:#888785 -pid:960190685 byr:1967 iyr:2012 cid:99 eyr:2021 -hgt:76in - -eyr:2025 byr:1958 hcl:#18171d iyr:2012 pid:759427419 -ecl:hzl - -ecl:#829d2e -cid:60 iyr:2028 -byr:1979 hcl:caff12 eyr:1931 pid:#fd7aab hgt:184cm - -cid:251 byr:1981 pid:625590775 -hcl:#a97842 eyr:2020 -ecl:amb hgt:178cm -iyr:2016 - -pid:026891577 ecl:amb byr:2014 -hcl:bc419f eyr:2026 -iyr:1948 -hgt:123 cid:67 - -ecl:hzl -hgt:152cm hcl:#efcc98 -byr:1993 -eyr:2025 - -ecl:grn iyr:1924 eyr:2039 pid:8441306576 -hgt:163in -byr:2012 -cid:193 - -ecl:#78f4fa -eyr:2020 hgt:165cm byr:1965 pid:987868257 iyr:2012 -cid:331 hcl:z - -ecl:brn cid:289 pid:868305933 -byr:1936 hgt:174cm iyr:2016 hcl:#623a2f eyr:2021 - -hcl:#2a6308 eyr:2027 hgt:154cm ecl:grn -iyr:2012 -byr:1940 -pid:675209536 - -pid:186cm eyr:2022 -hcl:#fffffd hgt:151cm iyr:2016 ecl:hzl byr:1954 - -ecl:grn hgt:177cm pid:725111435 byr:1927 eyr:2027 cid:154 iyr:2010 hcl:#623a2f - -pid:801551597 cid:55 eyr:2028 hgt:193cm hcl:#a97842 -ecl:hzl byr:1942 iyr:2015 - -cid:176 eyr:2030 iyr:2018 byr:1932 hgt:162cm pid:896180324 ecl:amb hcl:#6b5442 - -cid:239 ecl:grn iyr:1953 pid:9500162195 -byr:1998 -hgt:182cm hcl:#733820 eyr:1966 - -eyr:2030 -pid:919325322 hcl:z iyr:2024 hgt:71cm ecl:#1e935c byr:2026 - -iyr:2012 -ecl:gry eyr:2025 hcl:#602927 hgt:168cm byr:1925 -pid:303312675 - -hgt:150in iyr:2014 ecl:gry eyr:2029 -byr:2029 -cid:228 - -ecl:#9524e0 byr:2026 hcl:z -iyr:2023 -cid:325 -eyr:1996 -pid:6172325031 hgt:191 - -ecl:#689e88 -eyr:1937 -cid:75 byr:1963 iyr:2024 -pid:4980937 hgt:156cm -hcl:#fffffd - -pid:719820090 iyr:2020 hgt:165cm -hcl:#ceb3a1 byr:1997 ecl:blu eyr:2027 - -eyr:2025 -pid:241723456 -iyr:2011 -byr:1953 cid:230 hgt:185cm hcl:#efcc98 ecl:oth - -byr:1936 hcl:#623a2f -iyr:2010 hgt:156cm -eyr:2022 -pid:064253102 ecl:brn - -cid:332 hcl:#a97842 eyr:2026 ecl:gry iyr:2019 pid:#4e4a46 -hgt:150cm -byr:1987 - -ecl:grn hgt:67in -iyr:2012 -byr:1953 pid:910793005 hcl:#341e13 eyr:2020 - -iyr:2024 eyr:2030 cid:204 hgt:166cm pid:218828260 -hcl:701b48 ecl:gry byr:1930 - -hgt:162cm pid:024916763 eyr:2026 ecl:hzl -hcl:#efcc98 iyr:2019 byr:1921 - -eyr:2025 -iyr:2017 ecl:hzl hcl:#fffffd hgt:167cm pid:779214145 - -eyr:2022 -hcl:#6b5442 byr:1941 ecl:grn hgt:169cm iyr:2014 -pid:610328167 - -iyr:2026 cid:179 pid:193cm -ecl:#deb37c -byr:1958 eyr:2024 -hgt:185cm - -pid:907508207 ecl:oth byr:1941 iyr:2017 hcl:#341e13 -eyr:2030 hgt:186cm - -iyr:2018 byr:1925 -ecl:brn eyr:2023 pid:903196231 -hgt:159cm -hcl:#a97842 cid:323 - -hgt:185cm ecl:hzl eyr:2022 iyr:2020 pid:572453155 hcl:#fffffd - -hcl:#a97842 ecl:blu pid:#ab3597 eyr:1964 byr:2030 -hgt:181cm iyr:2018 - -ecl:blu -hcl:#602927 -cid:234 -hgt:68in eyr:2021 pid:257420555 iyr:2014 byr:1972 - -hcl:#7d3b0c eyr:2022 -hgt:152cm byr:1974 -iyr:2017 -pid:353127736 -ecl:gry - -iyr:2018 eyr:2028 byr:1924 hcl:#69929e ecl:gry -hgt:68in pid:942207567 - -eyr:2028 cid:90 -hgt:185cm -ecl:amb byr:1990 pid:947625812 hcl:#623a2f iyr:2011 - -eyr:2023 byr:1996 hgt:175cm -iyr:2012 -hcl:#866857 ecl:blu -pid:437669135 - -byr:1937 eyr:2030 -hcl:#866857 iyr:2017 pid:513963895 hgt:157cm -ecl:grn - -iyr:2016 hcl:#623a2f eyr:2025 -pid:559150893 hgt:176cm -byr:1920 ecl:amb - -byr:1982 -eyr:1961 ecl:hzl -hgt:167cm hcl:#888785 iyr:2011 cid:261 pid:709006236 - -pid:307171649 byr:1935 hcl:#888785 hgt:182cm ecl:brn eyr:2030 iyr:2013 -cid:256 - -ecl:hzl -eyr:1998 -byr:2009 -hgt:153cm iyr:2010 -hcl:#888785 pid:140487128 - -iyr:2019 cid:78 -hgt:169cm -hcl:#888785 ecl:hzl byr:1997 eyr:2028 - -hgt:182in eyr:2025 hcl:#cfa07d ecl:#27a1c9 byr:2005 pid:8143047758 - -byr:2013 hgt:178in -eyr:1933 -pid:829007679 iyr:2016 hcl:#783308 -ecl:grn - -cid:267 byr:1930 pid:949963673 eyr:2026 -ecl:grn iyr:2020 -hgt:188cm hcl:#6b5442 - -eyr:2022 pid:254482159 -byr:1935 iyr:2017 -ecl:hzl -hcl:#b6652a -hgt:165cm - -hcl:109d15 hgt:72cm -cid:258 byr:2023 eyr:1987 ecl:grt iyr:2022 - -byr:1969 -ecl:oth hgt:151cm -pid:578662559 -eyr:2024 iyr:2015 hcl:#602927 -cid:343 - -iyr:2011 byr:1989 -ecl:brn eyr:2029 pid:123354233 -hcl:#efcc98 - -hcl:#a97842 iyr:2010 pid:558586208 -eyr:2029 byr:2002 ecl:amb -cid:225 hgt:152cm - -eyr:2005 byr:2024 iyr:1924 ecl:gmt cid:186 pid:#886ae9 -hcl:3cf4cd hgt:74cm - -ecl:gry -eyr:2029 -iyr:2013 -hgt:178cm hcl:#7d3b0c - -byr:1970 hcl:#6b5442 hgt:155cm iyr:2020 ecl:hzl -pid:698123164 eyr:2030 cid:185 - -hcl:#6b5442 ecl:hzl -iyr:2014 cid:324 pid:149063285 hgt:64in eyr:2023 -byr:1949 - -hcl:#866857 -eyr:2025 -iyr:2012 cid:116 hgt:185cm -pid:416329937 -ecl:grn byr:1962 - -iyr:2020 cid:55 byr:1985 hcl:#733820 pid:237883033 eyr:2020 ecl:blu - -iyr:2020 hgt:71in -ecl:hzl byr:1960 cid:53 hcl:#888785 pid:590574853 eyr:2024 - -pid:834729501 iyr:2019 hgt:72in byr:1977 -hcl:#604861 ecl:oth eyr:2024 - -pid:111536282 ecl:gry -hgt:69in eyr:2021 byr:1940 -iyr:2019 -hcl:#ceb3a1 - -hgt:186cm pid:045765056 ecl:gry byr:1958 iyr:2012 -eyr:2025 hcl:#cfa07d - -hgt:61in eyr:2023 pid:4189258985 ecl:brn iyr:1995 -hcl:#602927 byr:2017 - -byr:1984 hcl:#866857 -iyr:2013 pid:927074474 hgt:168cm -eyr:2021 ecl:oth - -hgt:186cm -pid:948677443 iyr:2014 hcl:#866857 byr:1968 ecl:amb eyr:2027 - -eyr:2028 cid:260 hcl:#623a2f pid:500330326 -iyr:2018 hgt:170cm -ecl:gry -byr:1960 - -hgt:71cm -pid:6209572 byr:1927 iyr:2011 ecl:utc hcl:3bc47a eyr:1984 - -hgt:164cm cid:160 iyr:2010 -byr:1922 eyr:2024 hcl:#c0946f ecl:gry pid:867476938 - -cid:316 -iyr:2015 hcl:#b6652a hgt:72cm pid:#c37dbf byr:2022 eyr:2036 ecl:#8bd8f4 - -iyr:2016 hgt:172cm -pid:482664712 ecl:hzl eyr:2024 hcl:#602927 byr:1945 - -eyr:2029 pid:883381915 -hgt:174cm byr:1937 hcl:#fffffd ecl:gry cid:91 - -eyr:2029 pid:302832265 hcl:#ceb3a1 byr:2010 -hgt:64 iyr:1960 - -hgt:170cm eyr:2030 pid:846949920 -hcl:#ceb3a1 -ecl:hzl iyr:2016 byr:1945 - -hcl:#efcc98 -pid:406029852 eyr:2023 byr:1981 ecl:blu iyr:2013 - -pid:788563693 hcl:#a97842 hgt:172cm eyr:2022 ecl:brn iyr:2010 byr:2002 - -iyr:2013 -hgt:60cm hcl:#7d3b0c pid:6594060725 ecl:#46a7d7 eyr:2023 byr:1995 - -cid:313 byr:1964 pid:102442749 eyr:2020 -hgt:167cm -hcl:#341e13 - -ecl:grn hgt:163cm pid:405504213 cid:349 hcl:#733820 eyr:2029 iyr:2011 - -ecl:hzl pid:470689685 iyr:2015 byr:1980 hgt:180cm eyr:2027 - -eyr:2023 iyr:2013 -hgt:189cm hcl:#866857 byr:1981 -cid:313 -ecl:brn pid:386584267 - -iyr:2011 -hcl:#7d3b0c -eyr:2027 -ecl:gry byr:1931 -hgt:71in -pid:435568613 - -eyr:2021 -pid:443386140 hgt:192cm iyr:2015 byr:1974 - -byr:1989 ecl:oth iyr:2011 -eyr:2027 -pid:761106563 hcl:#efcc98 -hgt:60in - -byr:1933 ecl:brn pid:607926472 -hcl:#cfa07d eyr:2026 -iyr:2010 - -ecl:hzl eyr:2027 hgt:175cm -pid:68527368 -byr:1980 iyr:2017 hcl:#341e13 - -hgt:159cm pid:6199921925 iyr:1920 byr:1950 ecl:amb cid:229 eyr:2034 - -pid:060780170 ecl:gmt -eyr:1961 hgt:184cm hcl:#a97842 byr:2007 - -eyr:2025 byr:1970 ecl:brn hgt:183cm pid:423232940 hcl:#cfa07d cid:283 - -hcl:#18171d hgt:191cm -byr:1951 -eyr:2029 -pid:627632195 cid:268 iyr:2012 - -eyr:2025 iyr:2019 hgt:163cm -ecl:oth pid:967756889 -byr:1938 - -hgt:160cm iyr:2015 -ecl:#9cf598 pid:297446459 cid:123 byr:1968 eyr:1970 -hcl:#efcc98 - -ecl:hzl pid:311990731 hgt:171cm hcl:#602927 byr:1978 -eyr:2026 cid:254 iyr:2014 - -hcl:#8e0dfc -pid:961997362 byr:1950 eyr:2027 hgt:184in ecl:blu iyr:2015 cid:266 - -pid:953859016 iyr:2018 hcl:#341e13 ecl:grn cid:61 -hgt:192cm -eyr:2022 byr:1920 - -eyr:2026 pid:149020634 byr:1942 iyr:2021 hcl:#6b5442 -ecl:oth hgt:176in - -eyr:2025 hgt:176cm -iyr:2020 ecl:oth hcl:#efcc98 pid:196082064 byr:2002 - -hgt:172in hcl:z -pid:#b454a0 -ecl:#d7a600 -byr:1977 -eyr:2035 iyr:2014 - -cid:254 iyr:2020 -pid:716596533 -hcl:#341e13 byr:1947 -hgt:150cm ecl:hzl eyr:2028 - -iyr:2019 pid:190601635 byr:1922 hcl:#18171d hgt:71in ecl:brn eyr:2021 - -byr:1938 iyr:2019 eyr:2028 pid:568504071 hcl:#efcc98 hgt:178cm ecl:amb - -pid:921417345 eyr:2020 ecl:brn hcl:#c0946f -hgt:168cm -byr:1983 cid:170 -iyr:2018 - -iyr:2020 cid:212 eyr:2002 pid:61850316 hgt:148 hcl:#b6652a -byr:2024 ecl:grn - -hcl:z eyr:1985 iyr:2015 hgt:72cm ecl:brn pid:599880521 - -pid:166cm hcl:z -hgt:165 eyr:2036 -cid:152 iyr:1943 -ecl:zzz - -eyr:2021 iyr:2014 -hgt:156cm -pid:654181902 ecl:amb -byr:1946 -hcl:#733820 - -iyr:2019 -hgt:189cm byr:1940 pid:419593669 ecl:amb -cid:149 hcl:#fffffd eyr:2020 - -hgt:172cm -ecl:lzr pid:788208394 hcl:#341e13 cid:183 -iyr:2020 eyr:2027 byr:1988 - -byr:2030 ecl:#d82c54 iyr:2014 -hcl:#be9be7 eyr:2027 pid:1291285950 hgt:61cm - -ecl:hzl -hcl:#a97842 hgt:186cm byr:1992 eyr:2022 - -iyr:2017 hgt:191cm pid:097984693 eyr:2025 byr:1963 -cid:333 -ecl:blu - -ecl:zzz pid:425594420 -byr:1983 -hcl:z -eyr:2028 hgt:184cm -iyr:1937 - -hgt:167cm -eyr:2025 hcl:#623a2f pid:575911832 -cid:305 byr:1939 iyr:2020 - -iyr:2015 hgt:179cm hcl:d678e0 byr:2030 pid:284187009 eyr:1977 cid:285 - -pid:405789549 byr:1982 eyr:2020 hcl:#623a2f -hgt:161cm iyr:2013 ecl:amb - -pid:775860836 hgt:184cm hcl:#fffffd ecl:amb byr:1930 eyr:2022 iyr:2016 - -iyr:2020 byr:1979 -eyr:2024 hgt:171cm -ecl:brn hcl:#ceb3a1 pid:853915000 - -iyr:2015 pid:244459567 -hcl:#18171d cid:224 byr:1931 eyr:2022 hgt:169cm ecl:gry - -iyr:2017 cid:308 eyr:2026 ecl:blu hgt:59in byr:1953 -hcl:#ceb3a1 pid:466915764 - -hcl:#7d3b0c -byr:1940 iyr:2015 -eyr:2020 pid:950614940 ecl:amb -hgt:179cm - -byr:2010 -cid:106 eyr:2022 -iyr:2020 pid:336057617 ecl:brn hcl:f13e26 -hgt:182cm - -byr:1981 iyr:2017 hgt:152cm -hcl:#fffffd -eyr:2024 ecl:gry - -cid:216 hgt:193cm -byr:1975 ecl:oth pid:684529055 iyr:2018 eyr:2020 hcl:#18171d - -hgt:150cm -eyr:2028 -hcl:#cfa07d ecl:grn -iyr:2018 byr:1951 pid:749102509 - -pid:937451204 hcl:#341e13 iyr:2020 -hgt:171cm eyr:2021 -byr:1941 -ecl:hzl - -cid:69 -iyr:2014 eyr:2022 pid:174789690 hgt:157cm byr:1961 ecl:hzl -hcl:#a97842 - -hcl:#7d3b0c pid:658134059 hgt:65in byr:2005 ecl:#2dcb50 iyr:2012 -eyr:2030 - -eyr:2027 -hgt:68in ecl:oth hcl:#888785 iyr:2016 pid:181577931 - -iyr:1997 byr:1994 -hgt:189cm -ecl:gry pid:564165515 -eyr:2029 hcl:#ceb3a1 - -hcl:#602927 eyr:2024 -cid:130 -iyr:2015 ecl:blu -hgt:184cm byr:1996 -pid:897871188 - -ecl:oth hcl:#623a2f -iyr:2016 pid:012591439 byr:1937 eyr:2022 hgt:176cm - -eyr:2020 -byr:1965 -iyr:2013 hgt:193cm -hcl:#ceb3a1 -ecl:hzl pid:177120440 - -byr:1934 iyr:2015 hcl:#341e13 -pid:370860309 ecl:oth -eyr:2028 hgt:157cm - -ecl:brn -byr:2001 -iyr:2010 -eyr:2028 hcl:#866857 hgt:183cm pid:194361427 - -hgt:182cm pid:449667574 ecl:amb -byr:1958 iyr:2017 -hcl:#efcc98 - -iyr:2020 ecl:hzl eyr:2030 hgt:185cm byr:1969 hcl:#ceb3a1 pid:157651787 - -pid:893956434 eyr:2027 hgt:185cm hcl:#a97842 -byr:1944 ecl:oth - -byr:2011 -iyr:2018 -hcl:#623a2f hgt:159cm ecl:blu pid:174cm -eyr:2030 - -ecl:grt pid:520129782 eyr:2020 -byr:2020 hcl:z cid:50 iyr:2017 -hgt:156cm - -iyr:2015 -ecl:grn hcl:#83b224 eyr:2021 pid:554994156 hgt:179cm byr:1994 - -ecl:gry byr:1971 pid:772131254 -eyr:2027 cid:201 hcl:#602927 - -cid:125 -byr:1943 hgt:168cm ecl:hzl pid:418786991 -eyr:2020 iyr:2016 -hcl:#cfa07d - -pid:825704567 eyr:2032 byr:2024 -iyr:1926 -hcl:d31139 hgt:190in - -cid:243 hcl:#cfa07d byr:1951 ecl:oth pid:382615614 -iyr:2018 eyr:2030 hgt:64in - -byr:1925 hgt:187cm ecl:oth eyr:2023 hcl:#888785 - -eyr:2028 iyr:2013 ecl:brn byr:1923 cid:174 hcl:#b6652a hgt:154cm pid:274036240 - -ecl:brn hgt:183cm iyr:2016 -byr:1922 -hcl:#efcc98 eyr:2030 - -hgt:188cm -byr:1979 -ecl:amb -eyr:2025 hcl:#b6652a cid:130 -pid:646985829 iyr:2019 - -hgt:76cm hcl:z cid:112 ecl:zzz -pid:953385473 eyr:2020 -byr:1943 - -ecl:#12c807 -byr:1954 eyr:1934 hgt:73cm hcl:#ceb3a1 iyr:2015 pid:704621520 - -hgt:188cm hcl:#733820 eyr:2024 ecl:grn -iyr:2018 byr:1982 pid:522812862 - -hgt:68cm ecl:blu -byr:2023 pid:875418461 iyr:2021 eyr:2020 hcl:#623a2f - -byr:1967 -pid:313706535 ecl:amb hcl:#888785 -iyr:2012 -eyr:2026 - -eyr:2026 -pid:288363970 cid:70 byr:1932 hgt:157cm iyr:2016 ecl:hzl hcl:#ceb3a1 - -byr:1992 pid:539896055 -eyr:2023 -cid:189 hgt:70in ecl:oth iyr:2019 -hcl:#866857 - -hgt:158in -ecl:gry byr:2028 -eyr:2036 cid:188 -hcl:#cfa07d -pid:044279141 - -eyr:2024 hgt:170cm ecl:hzl -byr:1939 pid:851235247 iyr:2013 -hcl:#fffffd - -ecl:hzl hcl:#c0946f -hgt:167cm -eyr:2024 byr:1936 pid:463230636 cid:297 -iyr:2016 - -pid:291401545 ecl:grn hcl:#b6652a iyr:2014 -hgt:185cm eyr:2025 byr:1947 - -eyr:2029 pid:612595763 -iyr:2018 ecl:gry -cid:290 -byr:1991 hcl:#733820 -hgt:150cm - -hgt:151cm -pid:667532675 cid:134 -byr:1930 -hcl:#efcc98 iyr:2012 -ecl:oth - -ecl:gry -hcl:#888785 hgt:161cm -eyr:2023 -pid:467759498 cid:274 - -eyr:2023 byr:1956 hgt:188cm iyr:2014 hcl:#b6652a pid:382721925 ecl:brn - -byr:1947 ecl:gry eyr:2020 -pid:874004905 hcl:#602927 hgt:161cm iyr:2029 - -pid:164334257 -iyr:2014 cid:286 eyr:2020 -hcl:#733820 -ecl:gry byr:1959 hgt:165cm - -hgt:59in -pid:#5b1362 -eyr:2028 iyr:1980 hcl:z byr:2030 -ecl:utc - -pid:604128460 iyr:2016 byr:1952 hgt:152cm ecl:grn hcl:#7d3b0c eyr:2021 - -pid:7483106309 eyr:2005 hgt:158in byr:2024 iyr:1935 hcl:z -ecl:#158994 - -hcl:22207f eyr:1994 -cid:166 pid:#d8e64c ecl:utc -byr:1966 hgt:70cm -iyr:1980 - -iyr:2012 pid:045892410 hgt:70in ecl:dne hcl:1a323a byr:1920 eyr:2022 - -hcl:#18171d iyr:2019 eyr:2026 -hgt:191cm pid:514596186 cid:327 byr:1938 ecl:grn - -pid:904148746 hcl:#a97842 hgt:161cm -cid:181 -iyr:2012 eyr:2020 ecl:oth - -iyr:2028 -eyr:2034 -cid:276 pid:#0e7ee2 byr:2020 -hgt:63cm ecl:gry -hcl:z - -pid:4270554593 eyr:2031 ecl:lzr hgt:72cm -iyr:2027 hcl:ffc210 cid:132 -byr:2008 - -iyr:2018 pid:174cm cid:144 -ecl:#10b2ed byr:1931 eyr:2040 hcl:z hgt:68in - -pid:446746712 -iyr:1957 -ecl:oth cid:213 hgt:184cm byr:2008 hcl:z - -hcl:#7d3b0c iyr:2012 ecl:hzl -eyr:2023 pid:270148060 - -pid:832184923 -eyr:2023 hgt:180cm -byr:1965 ecl:hzl cid:189 hcl:#a97842 -iyr:2016 - -pid:688867083 -iyr:2011 hcl:#733820 cid:147 eyr:2021 -byr:1986 ecl:oth - -hgt:166in ecl:amb byr:2014 -pid:169cm hcl:#cfa07d iyr:1976 - -hgt:64in byr:1987 hcl:01f3d7 -pid:553206412 eyr:2027 ecl:grn cid:336 -iyr:2012 - -cid:336 -ecl:oth byr:1975 -pid:296100726 hcl:#6b5442 iyr:2016 hgt:180cm eyr:2029 - -hcl:#ceb3a1 hgt:181cm pid:364719801 byr:1922 eyr:2029 -iyr:2010 cid:346 ecl:gry - -hcl:#1c7f1d cid:205 -hgt:184cm -byr:1928 -pid:694275035 iyr:2018 ecl:blu eyr:2023 - -eyr:1970 -hcl:z byr:2001 -pid:9244596 iyr:2030 hgt:187in ecl:blu - -hgt:96 -byr:2030 ecl:zzz eyr:1920 pid:115437655 hcl:z -iyr:2017 -cid:344 - -iyr:2018 -eyr:2023 -hcl:#888785 hgt:188cm -ecl:amb byr:1992 pid:602211075 - -pid:848099019 hgt:168cm iyr:2016 -eyr:2026 ecl:amb -hcl:#866857 byr:1981 - -iyr:2013 hcl:#623a2f hgt:151cm cid:135 byr:1974 eyr:2026 ecl:gry -pid:313553018 - -hcl:#733820 -byr:1986 hgt:182cm -ecl:brn eyr:2024 iyr:2017 -pid:676008782 - -eyr:2030 pid:833874339 iyr:2011 byr:1949 hgt:159cm -ecl:brn hcl:#602927 - -hgt:182cm hcl:#6b5442 pid:131549376 eyr:2029 iyr:2012 -ecl:gry byr:1926 - -cid:55 ecl:amb iyr:2015 hgt:192cm hcl:#a97842 -byr:1944 -eyr:2027 - -iyr:1944 eyr:2038 hcl:a2adf2 cid:99 byr:2006 hgt:67cm -pid:154cm -ecl:dne - -eyr:2005 hcl:#1495bd ecl:grt byr:2028 -iyr:2016 hgt:155 pid:182cm -cid:326 - -hgt:136 -pid:599182089 eyr:2020 byr:1945 -iyr:2012 -ecl:oth hcl:#18171d - -pid:4695182580 -iyr:2012 -ecl:brn eyr:2039 byr:1936 -hcl:#cfa07d - -ecl:hzl byr:1949 cid:133 hgt:159cm hcl:#b6652a pid:9833212692 iyr:2011 eyr:2030 - -eyr:2020 -hgt:175cm -cid:140 iyr:2014 byr:1980 hcl:#7d3b0c -ecl:grn pid:400508366 - -pid:#100a75 iyr:2016 -hgt:65 -eyr:2037 ecl:hzl -byr:1962 - -eyr:2024 pid:180cm hcl:#6b5442 hgt:154cm -iyr:1964 - -byr:1986 hgt:159cm ecl:brn -pid:856817592 hcl:#cfa07d eyr:2024 -iyr:2017 - -hgt:166cm -byr:1996 hcl:#410645 -ecl:hzl iyr:2010 cid:178 pid:337713295 -eyr:2026 - -iyr:2017 byr:1964 hgt:167cm hcl:#7d3b0c cid:298 ecl:brn pid:371416367 - -byr:1929 iyr:2011 hcl:#fffffd ecl:blu -pid:013408674 hgt:187cm eyr:2021 - -hcl:#cfa07d byr:1986 cid:331 -iyr:2010 ecl:gry pid:616063053 hgt:150cm -eyr:2028 - -pid:013835033 iyr:2017 byr:1991 -hgt:154cm hcl:#efcc98 eyr:2020 - -byr:1978 eyr:2024 -hgt:155cm iyr:2012 hcl:#694989 pid:914726069 -ecl:amb - -ecl:blu pid:139464317 hcl:#fffffd eyr:2024 byr:1970 hgt:72in iyr:2012 - -byr:1965 hcl:#ceb3a1 ecl:hzl iyr:2019 pid:910593212 eyr:2029 - -byr:1994 cid:228 -ecl:grn hgt:171cm pid:538884417 eyr:2025 iyr:2011 hcl:#6b5442 - -cid:264 hcl:#623a2f -hgt:186cm iyr:2012 ecl:brn eyr:2024 pid:304101929 byr:1954 - -hgt:183cm byr:1987 hcl:z ecl:gry eyr:2020 pid:384983241 iyr:2015 - -pid:#885c1a -byr:2012 eyr:2034 ecl:#8ea705 iyr:2028 hgt:61cm hcl:z - -eyr:2023 hgt:156cm byr:1939 hcl:#cd2220 ecl:brn pid:484163297 - -hgt:158in -byr:2000 ecl:lzr -iyr:2014 -eyr:2033 pid:50157400 - -byr:1974 hcl:#c0946f -iyr:2018 pid:285451524 cid:299 eyr:2029 hgt:184cm ecl:hzl - -byr:1974 hcl:#602927 hgt:151cm iyr:2013 pid:322935162 ecl:amb -cid:209 -eyr:2026 - -hcl:#341e13 iyr:2015 -ecl:gry byr:1970 -hgt:186cm -pid:330151070 eyr:2034 - -ecl:gry eyr:2023 -hgt:160cm hcl:#c0946f -iyr:2011 byr:1926 pid:727347794 - -iyr:2012 -byr:1974 hcl:#866857 -eyr:2025 -pid:933155590 hgt:167cm -ecl:grn - -iyr:2015 ecl:gry eyr:2029 -byr:1967 hcl:#f9f576 hgt:170cm pid:439696954 cid:173 - -eyr:2029 byr:1935 ecl:brn pid:165587982 -hcl:#6b5442 -iyr:2020 - -eyr:2029 ecl:hzl hcl:#866857 byr:1994 -pid:308548232 hgt:162cm iyr:2012 - -byr:1924 cid:274 -pid:028266367 eyr:2025 iyr:2017 hgt:169cm -hcl:#cfa07d ecl:gry - -eyr:2025 byr:1995 -ecl:brn -hgt:160cm -pid:819047484 -hcl:#602927 iyr:2011 - -pid:660383456 -iyr:2016 eyr:2022 hgt:158cm byr:1942 ecl:amb cid:334 hcl:#efcc98 - -hcl:#6b5442 iyr:2024 cid:180 ecl:grn pid:167cm hgt:169 - -eyr:2024 iyr:2017 hgt:165cm hcl:#7d3b0c byr:1920 -ecl:amb pid:236377188 - -pid:063113952 -ecl:grn hcl:#341e13 hgt:166cm -byr:1977 iyr:2017 - -ecl:amb hgt:174cm -eyr:2028 byr:2002 -hcl:#7d3b0c -pid:428826816 iyr:2017 - -byr:2025 ecl:dne hgt:167in pid:706379338 -iyr:2019 hcl:240e75 eyr:1971 - -eyr:2021 -hcl:#efcc98 iyr:2014 -pid:358236477 -byr:1923 cid:73 hgt:165cm ecl:amb - -eyr:2030 cid:267 -ecl:brn -pid:282023612 hcl:#c0946f iyr:2018 byr:1989 -hgt:72cm - -ecl:utc hcl:ea4b34 byr:2013 -pid:#d58d54 -hgt:107 iyr:2027 cid:296 eyr:2038 - -byr:1946 eyr:2024 iyr:2012 -hcl:#341e13 -pid:765835791 hgt:159cm - -hcl:#341e13 byr:1927 -ecl:grn iyr:2011 -hgt:175cm eyr:2023 pid:638808763 cid:339 - -eyr:2030 cid:160 byr:1994 hgt:163cm ecl:hzl iyr:2016 hcl:#623a2f pid:569304871 - -byr:1965 -eyr:2020 hgt:157cm hcl:#a97842 -cid:271 iyr:2014 pid:326802068 ecl:#a16571 - -byr:1965 -ecl:hzl eyr:2029 iyr:2010 hgt:157cm -hcl:#7d3b0c pid:617693914 - -pid:547158528 byr:1956 -ecl:gry hgt:189cm -eyr:2029 -hcl:#602927 -iyr:2011 - -hcl:#efcc98 -ecl:#1ecd0e pid:160cm eyr:2027 hgt:183cm byr:2027 iyr:1963 - -hcl:#fffffd eyr:2021 iyr:2014 byr:1959 ecl:amb -pid:102521439 hgt:190cm - -cid:112 hcl:#fffffd byr:2025 -pid:016603375 -eyr:1942 hgt:145 -iyr:1994 - -ecl:xry -pid:#5be367 -hgt:171cm cid:144 iyr:1946 eyr:2034 hcl:z byr:2022 - -ecl:oth -iyr:2014 hcl:#7d3b0c -cid:316 -byr:1936 pid:088295340 -eyr:2029 - -iyr:2019 -hgt:183cm ecl:brn hcl:#efcc98 pid:821190245 cid:251 eyr:2023 -byr:1993 - -ecl:oth iyr:2018 -cid:131 -hcl:#524e2e byr:1981 hgt:183cm eyr:2022 pid:037981572 - -hcl:#18171d byr:1934 eyr:2020 hgt:62in -cid:64 -ecl:oth pid:343039563 iyr:2010 - -hcl:#733820 pid:374199356 -hgt:169cm eyr:2026 byr:1994 iyr:2015 ecl:brn - -pid:394267581 -hcl:#a97842 iyr:2010 byr:1988 -hgt:185cm ecl:amb -eyr:2022 - -ecl:#be3b70 iyr:2025 -hcl:z -eyr:2010 -byr:2023 -hgt:65 cid:220 pid:#d6af49 - -eyr:2029 -hcl:#a97842 ecl:amb hgt:159cm -cid:228 byr:1946 iyr:2012 -pid:805319194 - -hcl:#c0946f eyr:2020 hgt:171cm ecl:oth iyr:2010 byr:1958 pid:276122958 - -iyr:2017 -hcl:#da47a1 byr:2007 ecl:utc -eyr:1945 cid:327 hgt:192cm pid:549704477 - -iyr:1923 hgt:174in hcl:z byr:1974 -eyr:2026 -ecl:xry pid:158cm - -iyr:2022 -ecl:#ae10f9 -hgt:108 -eyr:2035 hcl:z byr:2019 pid:#1f4f7c - -eyr:2021 pid:959352732 cid:306 hgt:178cm ecl:amb -iyr:2012 -byr:1953 - -byr:2016 ecl:lzr eyr:2021 hcl:z iyr:1977 hgt:181cm cid:164 - -cid:242 byr:2008 hcl:#866857 hgt:172cm iyr:2011 -ecl:blu eyr:2026 pid:350658669 - -hgt:67in eyr:2030 -ecl:gry pid:156329184 iyr:2010 byr:1936 hcl:#efcc98 - -cid:110 hgt:76in iyr:2018 -eyr:2029 pid:474249956 byr:2002 hcl:#866857 -ecl:oth - -iyr:2016 hgt:193cm eyr:2029 -byr:1934 hcl:#b6652a pid:901756621 -ecl:brn - -eyr:2017 hcl:z pid:#2f9848 iyr:2024 -hgt:170cm - -hgt:60in eyr:2026 byr:1922 hcl:#18171d iyr:2016 -pid:921038878 diff --git a/day-4/src/main.rs b/day-4/src/main.rs deleted file mode 100644 index 1e5dfd9..0000000 --- a/day-4/src/main.rs +++ /dev/null @@ -1,122 +0,0 @@ -use std::collections::HashMap; -use std::fs; - -fn main() -> Result<(), Box<dyn std::error::Error>> { - let input = fs::read_to_string("input")?; - let passports = parse_passports(&input)?; - println!("{}", validate_passports(&passports)); - - Ok(()) -} - -fn parse_passports(input: &str) -> Result<Vec<HashMap<&str, &str>>, &str> { - input - .split("\n\n") - .map(|passport| { - passport - .trim() - .split(|c| c == ' ' || c == '\n') - .map(|field| { - let split = field - .find(':') - .ok_or("Invalid passport entry; no separator")?; - let item = field.split_at(split); - - let key = item.0; - let value = item - .1 - .strip_prefix(":") - .expect("We've already checked the separator exists"); - - Ok((key, value)) - }) - .collect() - }) - .collect() -} - -fn validate_passports(passports: &Vec<HashMap<&str, &str>>) -> usize { - let required_fields = ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"]; - let rules = [ - |year: &str| match year.parse() { - Ok(1920..=2002) => true, - _ => false, - }, - |year: &str| match year.parse() { - Ok(2010..=2020) => true, - _ => false, - }, - |year: &str| match year.parse() { - Ok(2020..=2030) => true, - _ => false, - }, - |height: &str| match height.split_at(height.chars().count() - 2) { - (height, "cm") => match height.parse() { - Ok(150..=193) => true, - _ => false, - }, - (height, "in") => match height.parse() { - Ok(59..=76) => true, - _ => false, - }, - _ => false, - }, - |color: &str| match color.split_at(1) { - ("#", code) => code.chars().all(|a| char::is_ascii_hexdigit(&a)), - _ => false, - }, - |color: &str| { - ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"] - .iter() - .any(|c| c == &color) - }, - |pid: &str| pid.chars().count() == 9 && pid.chars().all(char::is_numeric), - ]; - - passports - .iter() - .filter(|passport| { - required_fields - .iter() - .zip(rules.iter()) - .all(|(field, rule)| { - if let Some(value) = passport.get(field) { - rule(value) - } else { - false - } - }) - }) - .count() -} - -#[cfg(test)] -mod tests { - use super::*; - use indoc::indoc; - - #[test] - fn test_simple() -> Result<(), String> { - let example = indoc!( - "ecl:gry pid:860033327 eyr:2020 hcl:#fffffd - byr:1937 iyr:2017 cid:147 hgt:183cm - - iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884 - hcl:#cfa07d byr:1929 - - hcl:#ae17e1 iyr:2013 - eyr:2024 - ecl:brn pid:760753108 byr:1931 - hgt:179cm - - hcl:#cfa07d eyr:2025 pid:166559648 - iyr:2011 ecl:brn hgt:59in - " - ); - - let passports = parse_passports(example)?; - assert_eq!(validate_passports(&passports), 2); - - Ok(()) - } -} diff --git a/day-5/.gitignore b/day-5/.gitignore deleted file mode 100644 index b83d222..0000000 --- a/day-5/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/day-5/Cargo.lock b/day-5/Cargo.lock deleted file mode 100644 index 80f8ea6..0000000 --- a/day-5/Cargo.lock +++ /dev/null @@ -1,78 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -[[package]] -name = "day-5" -version = "0.1.0" -dependencies = [ - "indoc", -] - -[[package]] -name = "indoc" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8" -dependencies = [ - "indoc-impl", - "proc-macro-hack", -] - -[[package]] -name = "indoc-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "syn", - "unindent", -] - -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - -[[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 = "quote" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa563d17ecb180e500da1cfd2b028310ac758de548efdd203e18f283af693f37" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "syn" -version = "1.0.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8833e20724c24de12bbaba5ad230ea61c3eafb05b881c7c9d3cfe8638b187e68" -dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", -] - -[[package]] -name = "unicode-xid" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7fe0bb3479651439c9112f72b6c505038574c9fbb575ed1bf3b797fa39dd564" - -[[package]] -name = "unindent" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f14ee04d9415b52b3aeab06258a3f07093182b88ba0f9b8d203f211a7a7d41c7" diff --git a/day-5/Cargo.toml b/day-5/Cargo.toml deleted file mode 100644 index f161c8d..0000000 --- a/day-5/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "day-5" -version = "0.1.0" -authors = ["Tristan Daniël Maat <tm@tlater.net>"] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -indoc = "0.3" diff --git a/day-5/input b/day-5/input deleted file mode 100644 index 8699311..0000000 --- a/day-5/input +++ /dev/null @@ -1,815 +0,0 @@ -BFBBFFFLRR -FFBFBBBLLL -FBFBFBFLLL -BBFFFBFLLR -FBFFBBFLRR -BBFBFFFLLL -FFBBFFFRLL -BFBFBBBRRR -FBFFBFFRLR -FBBBBBBLLL -BBFBBBBLLL -BFFFBBBLLL -FFBFFFBRLR -BFFFFBFLLR -FFBBBFBLRL -BFFBFBBRRL -FBFBFBBRRR -FBFFFBBRRL -FBFBBBFRLR -BFFFFFBRRL -BBFFFBBLRR -FFBBBBBRRR -FFBBBBBLLL -BBFBFFBRLR -FBFFBFBRRR -FFFBBBBRLL -BBFBFFBLLR -BFBFFFBRLL -FFBFBFFLLR -FBFBBFBRLL -FBFFBBBLLL -FBFBBBFRLL -FBFBFBBRLL -BFFFFBBRLL -FFFBBFFLLR -FFBFFFBLRL -FFBFBBFLLL -BFBBFBBLLL -BFFFFBBRRL -FFBFFFBRLL -BFBBFFFRRR -FFBBFFFLRL -FFBFBFBRLL -BFBFBBBLLL -BBFBBFFLRL -BFFFFBBLLR -FFBFBBFRLR -FFBBFBBLLR -FBFFBBFLLL -BFBFBFBLLL -BFFBFBBLLR -FBBBBFFRLR -FBBBFBFRLL -FBBBBFFLRR -BFFBBBBLRL -FBFFBBFLRL -BBFFFBBLLR -FBFBFFFRLL -FBBBFBBRRL -FFBBBFBLLR -BFFBBBFLLR -BFFFFBFRLR -BBFFFFBLLR -FBBFFFBRRL -BFFFBFBRRR -FBFBFFFRRR -BBBFFFBLRL -BFBFBFBLLR -BFBBBBBLRL -FFBBFBBRRR -FBBFFFBRRR -FFBFBFBRRR -BBFFFFBRRL -BFBBBBBLLL -BFBFBFFRLL -BFBFBFBRRL -BFBFFFFLRL -FFBBBBBLLR -FBBFBFFRLL -FBBFFBBLLL -BFFFFFFLRL -FFFBBFFLRL -FFFBBFFRLL -FFBFFFBLLL -FBBFBFBLRL -BBFFFFBRLR -FBBFBBBRLR -FFBBFFBLLL -FFBFFFBRRR -FBFBFBFRRL -FFBBBFBRRL -BBFFBFFLRR -FBFFFFFRRR -FBBFFFBRLL -FFBBFBBRRL -FFBBFFFLLR -FBFBBFBLLL -BFFFBBFLRR -BFBFBFFLRR -BFFFFBFRRR -BBFBBFFRLL -BFBBBBBLRR -BFBBBBFLLL -BBFBBBBLLR -FFBBBFFRRR -BBFFBFBLRR -FFFBBBFRLR -BFBFFFBLRR -BFFFBBFLLL -FBBBBFFLRL -FBBFFFFRRL -FFBFFBBRRL -BFBBBBBRLR -FBBFFBBLRL -BBFBFBBRLL -FBFFBFBRLR -FBBBBFFLLR -FBBFBBFRRL -FBFBBBBRLL -BFFBFBFRLL -FFBFBBFRRL -FBFFFBFRRL -FBFFBBFRRL -FFBFBBFRLL -BBFBBBBLRL -BFFFBBBRRL -FFBFFFBLRR -FFBBFBBLRL -BFBFBBFRRR -BFFFFFFRRL -FBBBBBBRRR -FBFBBFBLRR -FBFFFFFRLR -BFFBBBFLRR -BFBBFFBLLL -FBFFFFBLRL -FFBBBBBLRL -FFFBBBFRLL -FFBBFBFRLL -FBFBBBFLRL -FFBBBFBRLL -BBFBBFBLRL -FFBFBFFRLR -BBFBBBBLRR -FFFBBBBRRR -FBBBFBFLLL -BFFFBFBRLR -FBBFBBFRRR -FBFFBBBRLR -FBFBBFBRLR -FBBBFBBLLL -BBFBFBFLLL -FFBBFBBRLL -FBBFBBBLRR -BFFFBBFRRL -BFBFFBFLRR -BBFBBBFLLL -BFFFBBFRLR -BFBBFBFLRL -FBBBBBFRRR -FBFFFBBRRR -BBFFFFBLRR -FBFBFBFLRL -BBFFBBBRLL -FFBBBFFLRR -FFBBBBFLRR -FBFBFBBRRL -BBFBFFBRRL -FBBBFFBLLL -BFBFFFFLLR -FFBFFBFLRR -BFBBFFFLLR -BBFBBFFLRR -BFFFFFFLLR -BBFFBFBRRL -FBBBFBBRLL -BFBBBFBLLR -BFBBFFBRLR -FBFBBBFRRR -BFBBBBBRRR -FFBBFBBRLR -FBBFBBFRLR -BFFBBFBRLR -FBFFFFFLLL -FBBFFBFRLL -FBBBBFFRRL -FBFBBBBLRL -FFFBBFBLRR -FFBFFBBLRR -FFBBBBBLRR -FBBFFBFRRR -FBBBFBFRRR -FBBFBBBLLR -BFFFFBFLLL -FFBFFFFRRL -BFBFFBBLRL -FFBFFFFRLR -FBFBFBFRLL -BBFBFBBRRL -FFBFBBFLLR -BFBBFFBLLR -FBFFBFFLLL -BFFBBFBRRR -FBFFFBBRLL -BBFBBFFRRR -FBFBBFBLRL -FBFBFBBLRL -FBFFBBFRRR -FBFFBBBLRL -FFBFBBBRRR -BFBBBFFLLR -FFBBFFFRRL -FFBBBBBRRL -FFBFFBBRLL -FFBBFBFLLR -FBBBFBFLLR -BFFFBFFRLL -FFBBBFBLRR -BFFBBBFRRR -BFBBFBBRRR -BBFBFFFRRR -FBBFFFBLRL -BBFBBBFLLR -BBFFFBBLRL -FBBFFFFLRR -BFFBFFFRRL -FFBFBBBRLL -BBFBBFBRLL -FBFFFBBLRR -BFBFBBFRLL -FBFBBBBRRL -FFFBBBFLLR -FBFFFFBRRR -FBBBBBBRLR -BBFBFBFRRR -BFBFFBFRLL -BFBBBFFLLL -BFBBBFBLLL -FBFFBFBLRL -FFBFFFFLLR -FBBBBBFLLL -BBFFBFBLLR -BBFBBBFLRR -BFFFFFFRRR -BFFBFFBRRR -BFFBBFFLLL -FFFBBBFLLL -BFFBBFFRRR -BBFBBBBRRL -FBFBBFFLRR -BFBFFBBLLR -BFBFFBBRRL -BFBBFFFLLL -BFBFFBBRRR -BFBBFBFRRL -FBFBFFFLLR -BFBFBFFLLR -BFBBBBFRRL -BFFFBFFLRR -FBBFBBBRRL -BBFFFBBRLL -FFBFBBBLRR -FFBBFFBRLL -FBBBFBFRRL -FFBFFFFLRL -BFFFBBBRLL -BFBBBFFRRR -FFBFFBBRRR -BFBFFFBLLR -FBFFFBFLLR -FBFBBFFRRL -FFBFFBBLLL -BBFBBBFLRL -BFBFBBFRRL -BFFFBFFLLL -FBBBFFFRLL -BBBFFFFLLR -BFFBFFBLRL -BBFFBBBLLL -BFFBFFBLLR -BBFFBBBLRL -FBBFFBBLLR -FFBFBBFRRR -FBFBBFBRRR -BFBFFBFRLR -BFBBBFBRLL -FFBBBBFLRL -BFFBFBFLLR -BFBBFFFRLL -BBFBFBBLRR -FBBFBFFLLL -FBBFFFFLRL -FBBBBFBRRL -FFBBBFFRLL -FBBFBFFRRL -FBBBFBFRLR -FBBBFFBLRR -BBFFBBBLRR -FBBFFBFLLL -FBFBBFFRLL -FFBFBFFRLL -BFBFBBBRRL -FBFBBBFRRL -FFBFBBBLLR -BFFBFFFRLR -FFBFBFFRRL -BBFFFFFLRL -FBFFBFFLRL -BBFFFBFLLL -BFFBBFBLRR -BFBBFBFLLR -FBFBFBFLRR -BBFFBBFRLL -BBFBFBFRLL -BBFFFBFRLR -BFFBFBFRRL -BFFBFBBLRL -FFFBBBFLRL -FBBBFFFRRL -FFBFBBFLRR -FBBFBFBRLR -FFFBBFFRRR -FBBBBBBLRL -BBFFBBFRRR -FFBFFBFLLL -BFFFBBFLRL -FBFBBBFLRR -BBFFBFBLLL -FBFFBBFRLR -BFFBFBBLLL -BFBBFFBLRR -FFBBBFFLLR -FBFBFFFRRL -BFBBFBBRLL -BBFBBFBLRR -FBBFFFFLLR -BFFFBBFRRR -BBFFFBFRRR -BBFBBFFLLL -BBFFBFBRLL -BBBFFFFRLR -BFFFFBFRLL -FFBBBFFRRL -BFFBBBFLRL -BBFBBBFRLL -FBFFFFBRLL -BFBFFBFLRL -FFBFFBBLRL -FBBBBBBLRR -BBFFFBFRLL -BFBFFBBRLR -BBFBFFBLLL -BFFFBFFRRR -FFBFFBFLRL -FBBFBFFLRR -BBFBFFBRRR -BBFBFFBLRL -FBBBBFBLRR -BBFFBBBRRR -BBFFBFFLLR -FBBBFFBRLL -BFBFFBBLLL -FBBFBBBLLL -FFBBFBBLRR -FBBBBFFLLL -BFBFBBFLRL -BFBBBFBRRL -BFBBBBFRLL -FFBBFFFRLR -BBFBBBFRLR -BFBBFBBRLR -FFFBBBBLLL -BFFFFFBLRL -FBFBFFBRLL -FBBFBBBRLL -FBBFBBFRLL -BFBFBBFLLR -FFBBFBFLRL -FBBBFFBRRL -FFBFFBFRRR -BBFFFFBRLL -FBBFFBFRRL -BBFFFFFRLR -FBFBFFBLRR -BFFBBFBRLL -BBFFFFFLRR -BBFFBBBRRL -BBFFBFFRLR -FFBBFFBLLR -FBBFFFBLRR -BFFBBBBRLL -FBFBFBBLRR -FBBFBFBRLL -FBBBFFFRRR -FBBFFBBRLL -FFBFFFFRLL -FFBBBFBLLL -FBFFBBBLRR -FFBBFFBRRR -FFFBBFBRRR -FBFBFFBRRR -FFBFFBFRLR -BFFFFFFLLL -FFBFFBFRRL -BFBFBFFLLL -BFFBBBBRRR -BFFBBFBRRL -BBFFBBBRLR -BBFFBFFRRR -BBFBFBFRLR -FFBBFBFLRR -FBFFBFBLRR -BBFBBBBRLL -BBFFFFFLLL -FBFFBFFLRR -BBBFFFBRRL -BFFBFFBRRL -BFBBBFBRRR -FFFBBFBRLL -BFFBBFBLLR -BFBBBBFRLR -BFFFFBFLRL -FBBFBFBRRR -BFFBFBBLRR -BBFBBFBLLL -FBFBFFBRLR -FFBBBBFRLL -BFBFFBBRLL -BBFBBBBRLR -FFFBBBBLRL -FFFBBFBLLR -BFBBFBFLRR -FFFBBFBLRL -FBBBBBFLLR -FBFFBFBRLL -BFBFBBBRLL -BFBBBBFRRR -FBBFBFBRRL -BBFFBBFRLR -FFFBBBBRLR -BFBFBBBLRR -FBBBBFBRLR -BBFBFBBLRL -FFBBBFFRLR -BFBBBFFLRR -FBFBBBBLRR -FBBFFFBRLR -BFFFFFBLRR -BFFBBBBRLR -FBBBFFFRLR -BBBFFFFLRR -BFBFBFBRRR -FFBFFBFRLL -BBFBFBFLRR -BFBBFBBLLR -FFBBBBBRLL -FFFBBBBLRR -FBBFBBFLRL -BFFFBFBLLL -BFBFFFFRLL -FBFFFBFLRL -BBFFFFFRRR -FBBFBBFLLL -FBBFBFFRLR -FFFBBFFLRR -BFBBFFFRRL -FBFFFBBRLR -BBFBFFFRLL -FBBFFBBRRL -BBBFFFFRLL -BFBBBBBRLL -FFFBBFFRRL -FBBFFFBLLR -BFFFBFFLLR -FFBFFBFLLR -FBBFFBBRRR -BFFFFFBRLL -BFFFBFFRRL -BBFBBBFRRR -BFFBFBFLRR -FBFBBFFRLR -BBFFFBFLRR -BBFBFBFLLR -BFFBBBFLLL -FBFBFBBLLR -FBBBBBBRLL -FBFBFFFLRL -FFBBFFBRLR -BBFBBFBRRL -BBFBBFBRLR -BFFBBFFLRR -BFFBFFFLRR -BFBFBFFRRL -BBFBBBBRRR -FBFFFFFLLR -BBFFBBFLLR -BFFFBBBRLR -FBBBBFFRLL -BBFBBFFRRL -BBFFBFFRLL -BFBFBFBLRL -BFBFFFBLLL -BBFBFFFRLR -FBBBFFFLRL -FFFBBBBLLR -FFBFFFFLRR -BBFBFBFRRL -FBFFBBBRLL -FBBBFBBLRL -BBBFFFFLLL -FFBFBBBRRL -FBFBFFBLLR -FBFFFFFLRL -BFBFBBBLRL -BFFBBFFRLR -BFBFFBBLRR -BFFBFBBRLR -FBBFBFBLRR -FFBBBFFLRL -BBFFBBFLRR -FBBBFBBRRR -BFFFBBBLLR -BFBFBBBRLR -BFFBFBFLLL -BBBFFFBRRR -BBBFFFBRLR -FBFBBFFLLL -BFFBBFFLLR -FFBBFFBLRR -FBBBBBFRLR -BFBBFFBRRL -FBBBFFFLRR -FBFFFFFRLL -FFBFFFBLLR -BFFBFFFRLL -BFBFBFBRLL -BFFFFBBLRR -FBBFFBBLRR -BFBBBFBLRL -BBFBFBBLLR -BFBBBFBLRR -FBFFFBFLLL -BFBBBBBLLR -BFBFFFBRLR -BFBFBBFLLL -BBBFFFFRRR -FBBFFBBRLR -BBBFFFFLRL -FBBFBBBRRR -FFBBFBFRRL -BFFFBBBRRR -FFBFBFFRRR -BBFBFFFLRR -FFBFBBBLRL -BFBFBFFRLR -FFBBFFFRRR -FBFFBFBLLL -FBFFBFBLLR -BBFBBFFLLR -BFBBBFFRLR -BFFFFBBLLL -BFFBFFBRLL -FBBFFFFRLL -FFBFBFBLRR -FBBBBFBLLL -BFBFBFBRLR -FBBFBBBLRL -BFBFFBFRRL -FBBFBFBLLL -BFFFBFBLRL -BBFFBFFLLL -BBFFFBFLRL -FFFBBBFRRL -FBBFFFBLLL -BFFFFFBLLR -FBBBBFBRLL -BFFFFBBRRR -BFFFFBBLRL -FBBFFBFRLR -BBFFFFBRRR -FBFFFFBLLL -FFBFBFBRLR -BFFFBBBLRL -BFFFFFFRLL -BFBFFBFLLR -BBFFFBBRLR -FBBBBFBLRL -FBBBBFBRRR -BFFBFFFLLL -BFFBBBFRLL -BFBFBBFRLR -BBFFBFBRLR -FBBBBBFLRR -BFBBFBFRLR -FFBBFBFRLR -BFFFFFBRRR -BFFBBFFLRL -FBFFBFFRRL -BFBBFFFLRL -FBFFFBBLRL -BFFFBFFRLR -BFFFBFBRRL -FBBBBBFLRL -BBFFBBFLLL -FFBBFBBLLL -FFBFBFFLLL -BBBFFFBLLL -BFBFBBBLLR -FBBFFBFLRL -FBBBBFFRRR -BFBBBBFLLR -FFBFFFFRRR -BBFFBBFLRL -FBFBFBBRLR -BFBBFFBLRL -FBFBFFBLLL -BBFFBFFLRL -FBFBFFFLRR -FFBFBFBLRL -BFFBFBBRRR -FFBFBBBRLR -BFBBFFFRLR -BFBFFFFRLR -FFFBBFFLLL -BFBFFFFLLL -FFBFFBBRLR -FFBFBFFLRR -BFFBBFFRLL -BBFFBBBLLR -BFBBBBBRRL -FBFBBBBRRR -FBBFFFFRRR -FFBBBFBRLR -FFBFBFBLLL -BFFBFFFLLR -FBFBFBFRRR -BFFBBBBLLL -BFFFFBBRLR -FBFBBFFLRL -FFBFBFFLRL -FBBBFFBLLR -FBBFBFFLRL -FFBFBBFLRL -BBBFFFFRRL -FFBBFBFLLL -FFBBBBFRRL -BBFFFFBLLL -FFBBFBFRRR -FBFFFFFLRR -BFFBBBBRRL -BFBBFBBRRL -BBFBFBBRLR -FFBFFFFLLL -FBBFBFBLLR -FBFBFFBLRL -BBFBFBBRRR -BFFBBFBLRL -FFBBBFFLLL -FBBBFFFLLL -BFFFBFBLLR -FFBBFFFLLL -BFFBFFBLRR -FFBBFFFLRR -BFFBFBBRLL -FFBFBFBLLR -FBBBBBBLLR -FBFFFFBRLR -BFBBBFFRLL -FFBBBBFRLR -FFBFFBBLLR -BBFFFFFLLR -FBFFFBFRLR -BFBFFFFRRL -FBFFFBBLLL -BBFFFBBLLL -BFFBFBFLRL -BBFFFBFRRL -FBFFBBBRRR -FBFFFBBLLR -FFFBBFBRRL -BBFBFFFLRL -BFBFFFBRRL -BFBBBFBRLR -BFFFBBBLRR -FBBFBFFLLR -FBFBBBBRLR -BBFBBBFRRL -FFFBBFBRLR -BFFBFFFLRL -FBBBBBBRRL -BFFBFFBLLL -BFFBBFFRRL -FBBFBBFLLR -BFFBBBBLLR -BFBBBFFLRL -BFBFFBFRRR -BBFFFBBRRL -BFBFBFFLRL -BFBBFFBRLL -BFFFFFFLRR -FFFBBBFLRR -FBBFFFFLLL -FFBBFFBRRL -BFBFFBFLLL -FBFBBBFLLR -FFBBBBBRLR -BBFBFFBRLL -FBFBBFBRRL -FBBFFBFLRR -BFFFFFBRLR -FBFBBFBLLR -FBBBFFFLLR -BFFFFBFRRL -FBFFFFFRRL -FBFBFFFRLR -FBFBBBFLLL -BBFBFFBLRR -BFBBBFFRRL -BFBBFBFRRR -BBFFFFFRLL -FBFBFBFRLR -FBBBBBFRLL -BBFFBFBLRL -BBFFBBFRRL -BFBFFFFLRR -FBFFBBBRRL -FFFBBFFRLR -BBFFBFFRRL -BBFBBFBLLR -FBBFFBFLLR -FBFFFFBLLR -FFBFBFBRRL -FBFFFFBLRR -BFFBFFFRRR -FFFBBBFRRR -BFBFBFBLRR -FBFBBBBLLR -BBFFFFBLRL -BFBBFBFLLL -FBBBFFBLRL -BBFBFFFRRL -BBBFFFBRLL -FBBFBBFLRR -FBFBFFFLLL -FBBFFFFRLR -BFFBBBFRRL -BBFFFBBRRR -FBBBFFBRLR -FFBFFFBRRL -BFFFFFBLLL -FBFFFBFRLL -BBFFBFBRRR -BFFFFBFLRR -FFBBBBFLLR -BFBFBBFLRR -FBFBFBBLLL -BFFFBFBLRR -BBFBBFBRRR -BFBBFBBLRL -BBFBFBBLLL -FBBBFBFLRL -BFFFBBFRLL -FBBBBBFRRL -BFFBFFBRLR -BFFBBBBLRR -FFFBBFBLLL -BFBBBBFLRL -FBBBFBFLRR -FBFFFBFLRR -BFBFFFBRRR -FBFFBFFLLR -BFBFBFFRRR -BFFBFBFRLR -FBFFFFBRRL -BFFFBFBRLL -FBBBFBBLRR -BFBBFFBRRR -BFBFFFFRRR -BFFBFBFRRR -FFBBFFBLRL -BFBBBBFLRR -FBFFBBBLLR -FBFBBFFLLR -FBFFFBFRRR -FBFBBBBLLL -BFBBFBBLRR -BFBFFFBLRL -BFFBBFBLLL -FBFFBBFLLR -BBFBFFFLLR -BBFFFFFRRL -FBFBBFFRRR -BFFFBFFLRL -FBFBFBFLLR -BFFFFFFRLR -FFBBBBFRRR -BBFBFBFLRL -FBBBFFBRRR -FBFFBFFRRR -FBBBBFBLLR -BBBFFFBLLR -FBFFBFBRRL -FBBBFBBRLR -FBFFBBFRLL -BBBFFFBLRR -BFFFBBFLLR -FBFFBFFRLL -FFBBBBFLLL -FFBBBFBRRR -BBFBBFFRLR -FBBBFBBLLR -FBBFBFFRRR -BFBBFBFRLL -FFFBBBBRRL -FBFBFFBRRL diff --git a/day-5/src/main.rs b/day-5/src/main.rs deleted file mode 100644 index 81f9d27..0000000 --- a/day-5/src/main.rs +++ /dev/null @@ -1,114 +0,0 @@ -use std::fs; - -type SeatCode = [char; 10]; - -fn main() -> Result<(), Box<dyn std::error::Error>> { - let input = fs::read_to_string("input")?; - - // Part 1 - let max_id: Result<usize, String> = input - .lines() - .map(|code| { - let (row, col) = find_seat(parse_seatcode(code)?); - Ok(row * 8 + col) - }) - .max() - .ok_or("No seat codes set")?; - - println!("{}", max_id?); - - // Part 2 - let mut ids = input - .lines() - .map(|code| { - let (row, col) = find_seat(parse_seatcode(code)?); - Ok(row * 8 + col) - }) - .collect::<Result<Vec<usize>, String>>()?; - ids.sort(); - - let mut previous = ids[0]; - for id in &ids[1..] { - if id - 1 != previous { - println!("{}", id); - break; - } else { - previous = *id; - } - } - - Ok(()) -} - -fn parse_seatcode(input: &str) -> Result<SeatCode, String> { - let mut output = ['0'; 10]; - - for (i, c) in input.chars().enumerate() { - if i > 10 { - Err(format!("Seat code too long: '{}'", input))?; - } - - if !['F', 'B', 'L', 'R'].iter().any(|valid| &c != valid) { - Err(format!("Invalid character in seat code: '{}'", input))?; - } - - output[i] = c; - } - - Ok(output) -} - -fn find_seat(code: SeatCode) -> (usize, usize) { - let midpoint = |(start, end): (usize, usize)| (start + end) / 2; - let binary_follow = |range: (usize, usize), direction: &char| match direction { - 'F' | 'L' => (range.0, midpoint(range)), - 'B' | 'R' => (midpoint(range) + 1, range.1), - _ => unreachable!("We already checked all characters are valid"), - }; - - let row = code[..7].iter().fold((0, 127), binary_follow).0; - let col = code[7..].iter().fold((0, 7), binary_follow).0; - - (row, col) -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn test_simple() -> Result<(), Box<dyn std::error::Error>> { - let input = "FBFBBFFRLR"; - let seat = find_seat(parse_seatcode(input)?); - - assert_eq!(seat, (44, 5)); - Ok(()) - } - - #[test] - fn test_simple2() -> Result<(), Box<dyn std::error::Error>> { - let input = "BFFFBBFRRR"; - let seat = find_seat(parse_seatcode(input)?); - - assert_eq!(seat, (70, 7)); - Ok(()) - } - - #[test] - fn test_simple3() -> Result<(), Box<dyn std::error::Error>> { - let input = "FFFBBBFRRR"; - let seat = find_seat(parse_seatcode(input)?); - - assert_eq!(seat, (14, 7)); - Ok(()) - } - - #[test] - fn test_simple4() -> Result<(), Box<dyn std::error::Error>> { - let input = "BBFFBBFRLL"; - let seat = find_seat(parse_seatcode(input)?); - - assert_eq!(seat, (102, 4)); - Ok(()) - } -}