day 2, rust
This commit is contained in:
Generated
+7
@@ -0,0 +1,7 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "aoc2024-02"
|
||||
version = "0.1.0"
|
||||
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "aoc2024-02"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
@@ -0,0 +1,65 @@
|
||||
fn is_safe(items: &Vec<i32>) -> bool {
|
||||
let deltas: Vec<_> = items
|
||||
.iter()
|
||||
.scan(None, |p, s| match p.clone() {
|
||||
None => {
|
||||
*p = Some(*s);
|
||||
Some(None)
|
||||
}
|
||||
Some(v) => {
|
||||
*p = Some(*s);
|
||||
Some(Some(*s - v))
|
||||
}
|
||||
})
|
||||
.flatten()
|
||||
.collect();
|
||||
if deltas.iter().all(|x| *x >= 1 && *x <= 3) || deltas.iter().all(|x| *x >= -3 && *x <= -1) {
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let raw = std::fs::read_to_string("input.txt").expect("Couldn't read input");
|
||||
let first: i32 = raw
|
||||
.split("\n")
|
||||
.filter(|line| !line.is_empty())
|
||||
.map(|line| {
|
||||
let items = line
|
||||
.split(" ")
|
||||
.map(|x| x.parse())
|
||||
.collect::<Result<Vec<i32>, _>>()
|
||||
.unwrap();
|
||||
if is_safe(&items) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}
|
||||
})
|
||||
.sum();
|
||||
println!("{}", first);
|
||||
let second: i32 = raw
|
||||
.split("\n")
|
||||
.filter(|line| !line.is_empty())
|
||||
.map(|line| {
|
||||
let items = line
|
||||
.split(" ")
|
||||
.map(|x| x.parse())
|
||||
.collect::<Result<Vec<i32>, _>>()
|
||||
.unwrap();
|
||||
if is_safe(&items) {
|
||||
1
|
||||
} else if (0..items.len()).any(|i| {
|
||||
let mut items = items.clone();
|
||||
items.remove(i);
|
||||
is_safe(&items)
|
||||
}) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
}
|
||||
})
|
||||
.sum();
|
||||
println!("{}", second);
|
||||
}
|
||||
Reference in New Issue
Block a user