From 01c6b2cb42a4144a573ec43e9e25c6718741a272 Mon Sep 17 00:00:00 2001 From: omagdy Date: Sun, 8 Dec 2024 15:28:08 +0200 Subject: Some solutions to AOC 2020 --- 2020/Rust/src/day4.rs | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100755 2020/Rust/src/day4.rs (limited to '2020/Rust/src/day4.rs') diff --git a/2020/Rust/src/day4.rs b/2020/Rust/src/day4.rs new file mode 100755 index 0000000..113e838 --- /dev/null +++ b/2020/Rust/src/day4.rs @@ -0,0 +1,94 @@ +#[derive(Debug)] +struct Passport { + byr: Option, + iyr: Option, + eyr: Option, + hgt: Option, + hcl: Option, + ecl: Option, + pid: Option, + cid: Option, +} + +impl Passport { + fn new() -> Self { + Self { + byr: None, + iyr: None, + eyr: None, + hgt: None, + hcl: None, + ecl: None, + pid: None, + cid: None, + } + } +} + +impl From<&str> for Passport { + fn from(value: &str) -> Self { + let mut passport = Passport::new(); + let v = value.replace("\n", " "); + let v: Vec<&str> = v.split(" ").collect(); + for ele in v { + if ele.is_empty() { + continue; + } + let (key, value) = ele.split_once(':').unwrap(); + match key { + "byr" => passport.byr = Some(value.parse::().unwrap()), + "iyr" => passport.iyr = Some(value.parse::().unwrap()), + "eyr" => passport.eyr = Some(value.parse::().unwrap()), + "hgt" => { + passport.hgt = Some( + value + .trim_end_matches(|c| c == 'c' || c == 'm' || c == 'i' || c == 'n') + .parse::() + .unwrap(), + ) + } + "hcl" => passport.hcl = Some(value.to_string()), + "ecl" => passport.ecl = Some(value.to_string()), + "pid" => passport.pid = Some(value.to_string()), + "cid" => passport.cid = Some(value.parse::().unwrap()), + _ => unreachable!(), + } + } + passport + } +} + +fn solve_part_one(input: &str) -> usize { + let mut cnt: usize = 0; + let passports: Vec = input + .split("\n\n") + .map(|pass| Passport::from(pass)) + .collect(); + for passport in passports { + if passport.byr == None + || passport.iyr == None + || passport.eyr == None + || passport.hgt == None + || passport.hcl == None + || passport.ecl == None + || passport.pid == None + { + continue; + } + cnt += 1; + } + cnt +} + +fn solve_part_two(input: &str) -> usize { + todo!() +} + +fn main() { + let test = include_str!("../input/day_4.test"); + let prod = include_str!("../input/day_4.prod"); + println!("Test_1: {}", solve_part_one(test)); + println!("Prod_1: {}", solve_part_one(prod)); + // println!("Test_2: {}", solve_part_two(test)); + // println!("Prod_2: {}", solve_part_two(prod)); +} -- cgit v1.2.3