From d5e3b22792c87706ff98a6e5713746c2a957cef3 Mon Sep 17 00:00:00 2001 From: mhsn Date: Mon, 28 Apr 2025 20:03:12 +0100 Subject: 2024-02 rust p1 --- 2024/02/rust/src/main.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 2024/02/rust/src/main.rs (limited to '2024/02/rust/src/main.rs') diff --git a/2024/02/rust/src/main.rs b/2024/02/rust/src/main.rs new file mode 100644 index 0000000..620fe8b --- /dev/null +++ b/2024/02/rust/src/main.rs @@ -0,0 +1,46 @@ +use std::io; + +fn main() { + let input: Vec> = io::stdin() + .lines() + .map(|line| { + line.unwrap() + .split_whitespace() + .map(str::parse::) + .collect() + }) + .collect::, _>>() + .unwrap(); + + let silver: usize = input.iter().map(self::safe).flatten().count(); + let gold: u64 = 0; + println!("silver: {silver}"); + println!("gold: {gold}"); +} + +#[derive(Debug, PartialEq)] +enum Dir { + Asc, + Desc, +} + +fn safe(xs: &Vec) -> Option { + let mut dirs = xs + .iter() + .zip(xs.iter().skip(1)) + .map(|(x, y)| y - x) + .map(|d| match d { + -3..=-1 => Some(Dir::Desc), + 1..=3 => Some(Dir::Asc), + _ => None, + }) + .collect::>>()? + .into_iter(); + + let head = dirs.next().unwrap_or(Dir::Asc); + if dirs.all(|d| d == head) { + Some(head) + } else { + None + } +} -- cgit v1.2.3