day two, part two

This commit is contained in:
2024-12-02 14:16:10 +01:00
parent 044e765637
commit 23454461ee
+20 -6
View File
@@ -1,23 +1,36 @@
use std::fs; use std::fs;
fn is_safe(report: Vec<i32>) -> bool { fn is_safe(report: Vec<i32>, problem_dampener: bool) -> bool {
let mut order = 0; let mut order = 0;
let mut safe = true;
for index in 1..report.len() { for index in 1..report.len() {
let diff = report[index].checked_sub(report[index - 1]).unwrap(); let diff = report[index].checked_sub(report[index - 1]).unwrap();
let abs_diff = diff.abs(); let abs_diff = diff.abs();
if abs_diff < 1 || abs_diff > 3 { if abs_diff < 1 || abs_diff > 3 {
return false; safe = false;
}; };
if order == 0 { if order == 0 && abs_diff > 0 {
order = diff / abs_diff order = diff / abs_diff
} else if order != diff / abs_diff { } else if diff != 0 && order != diff / abs_diff {
return false; safe = false;
} }
} }
true
if !safe && problem_dampener {
for index in 0..report.len() {
let mut modified = report.clone();
modified.remove(index);
if is_safe(modified, false) {
return true;
}
}
false
} else {
safe
}
} }
fn solution(s: &str) { fn solution(s: &str) {
@@ -27,6 +40,7 @@ fn solution(s: &str) {
line.split_whitespace() line.split_whitespace()
.map(|val| val.parse::<i32>().unwrap()) .map(|val| val.parse::<i32>().unwrap())
.collect(), .collect(),
true,
) { ) {
safe_reports += 1; safe_reports += 1;
} }