day 1: part 1: rust

This commit is contained in:
Samuel Ortion 2024-12-02 12:24:09 +01:00
parent 8ae35afa9f
commit 160145a983
Signed by: sortion
GPG Key ID: 9B02406F8C4FB765
2 changed files with 65 additions and 0 deletions

View File

@ -0,0 +1,6 @@
[package]
name = "part1"
version = "0.1.0"
edition = "2021"
[dependencies]

View File

@ -0,0 +1,59 @@
use std::u64;
fn is_increasing(levels: &Vec<u64>) -> bool {
let mut current = 0;
for item in levels {
if *item < current {
return false;
} else {
current = *item;
}
}
return true;
}
fn is_decreasing(levels: &Vec<u64>) -> bool {
let mut current = u64::MAX;
for item in levels {
if *item > current {
return false;
} else {
current = *item;
}
}
return true;
}
fn is_monotonous(levels: &Vec<u64>) -> bool {
return is_increasing(levels) || is_decreasing(levels);
}
fn is_safe(levels: &Vec<u64>) -> bool {
if !is_monotonous(levels) {
return false;
}
for i in 0..(levels.len() - 1) {
let j = i+1;
let a = levels[i];
let b = levels[j];
let diff = (a as i64 - b as i64).abs() as u64;
if diff < 1 || diff > 3 {
return false;
}
}
return true;
}
fn main() -> std::io::Result<()> {
let mut count = 0;
for line in std::io::stdin().lines() {
let line = line.unwrap();
let levels: Vec<u64> = line.split(" ").map(|x| x.parse::<u64>().unwrap()).collect();
if is_safe(&levels) {
count += 1;
}
}
println!("{}", count);
Ok(())
}