From 57c026e4e9bcb24f79ef47b8ea20d8fbd0bb437c Mon Sep 17 00:00:00 2001 From: Tim Kurvers Date: Tue, 3 Dec 2024 22:44:28 +0100 Subject: [PATCH] feat(rust): add solutions for 2024 day 2 --- rust/src/2024/02.rs | 55 +++++++++++++++++++++++++++++ rust/src/utils/challenges/macros.rs | 2 +- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 rust/src/2024/02.rs diff --git a/rust/src/2024/02.rs b/rust/src/2024/02.rs new file mode 100644 index 0000000..a91c265 --- /dev/null +++ b/rust/src/2024/02.rs @@ -0,0 +1,55 @@ +use std::ops::Index; + +use advent_of_code::utils::challenges::prelude::*; + +type Report = Vec; + +fn parse(input: &PuzzleInput) -> Vec { + input.trim().lines().map(|line| { + line.split_ascii_whitespace().map(|level| level.parse::().unwrap()).collect() + }).collect() +} + +fn is_safe(report: &Report) -> bool { + let mut sign: i32 = 0; + for i in 0..report.len() - 1 { + let (a, b) = (report.index(i), report.index(i + 1)); + + let diff = a - b; + let diffabs = diff.abs(); + if diffabs < 1 || diffabs > 3 { return false } + + let diffsign = diff.signum(); + if sign != 0 && sign != diffsign { return false } + sign = diffsign + } + + true +} + +fn is_safe_with_removal(report: &Report) -> bool { + for index in 0..report.len() { + let mut variation = report.clone(); + variation.remove(index); + if is_safe(&variation) { + return true + } + } + false +} + +fn part_one(input: &PuzzleInput, _args: &RawPuzzleArgs) -> Solution { + let reports = parse(input); + + let safe = reports.into_iter().filter(is_safe); + Answer(safe.count() as u64) +} + +fn part_two(input: &PuzzleInput, _args: &RawPuzzleArgs) -> Solution { + let reports = parse(input); + + let safe = reports.into_iter().filter(is_safe_with_removal); + Answer(safe.count() as u64) +} + +solve!(part_one, part_two); diff --git a/rust/src/utils/challenges/macros.rs b/rust/src/utils/challenges/macros.rs index 1da1602..7509e57 100644 --- a/rust/src/utils/challenges/macros.rs +++ b/rust/src/utils/challenges/macros.rs @@ -16,7 +16,7 @@ macro_rules! preload_challenges { 01, 02, 03 ) 2024 ( - 01 + 01, 02 ) } };