advent-of-code/2024/day-02/part_one.rs

59 lines
938 B
Rust

mod common;
use std::env;
use common::{PuzzleInputs, Report};
fn main() {
let input_file = env::args().nth(1).unwrap();
let input = PuzzleInputs::parse(input_file);
let mut num_safe = 0;
for report in &input.reports {
if let Status::Safe = is_report_safe(report) {
num_safe += 1;
}
}
println!("{num_safe}");
}
#[derive(Debug)]
enum Status {
Safe,
Unsafe,
}
fn is_report_safe(report: &Report) -> Status {
let mut order: i32 = 0;
for window in report.levels.windows(2) {
let a = window[0];
let b = window[1];
let diff = b.abs_diff(a);
if diff < 1 || diff > 3 {
return Status::Unsafe;
}
if b > a {
order += 1;
} else {
order -= 1;
}
}
if (order.abs() + 1) != (report.levels.len() as i32) {
return Status::Unsafe;
}
Status::Safe
}