From 23454461ee770d109f4f57bf98bf093e519b19fb Mon Sep 17 00:00:00 2001 From: Leo dev Date: Mon, 2 Dec 2024 14:16:10 +0100 Subject: [PATCH] day two, part two --- day-2/src/main.rs | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/day-2/src/main.rs b/day-2/src/main.rs index 2902f39..cc01ae2 100644 --- a/day-2/src/main.rs +++ b/day-2/src/main.rs @@ -1,23 +1,36 @@ use std::fs; -fn is_safe(report: Vec) -> bool { +fn is_safe(report: Vec, problem_dampener: bool) -> bool { let mut order = 0; + let mut safe = true; for index in 1..report.len() { let diff = report[index].checked_sub(report[index - 1]).unwrap(); let abs_diff = diff.abs(); if abs_diff < 1 || abs_diff > 3 { - return false; + safe = false; }; - if order == 0 { + if order == 0 && abs_diff > 0 { order = diff / abs_diff - } else if order != diff / abs_diff { - return false; + } else if diff != 0 && order != diff / abs_diff { + 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) { @@ -27,6 +40,7 @@ fn solution(s: &str) { line.split_whitespace() .map(|val| val.parse::().unwrap()) .collect(), + true, ) { safe_reports += 1; }