From 426e548e3010c515f8247194d81f0d73efbbf5dc Mon Sep 17 00:00:00 2001 From: Dylan Thies Date: Mon, 2 Dec 2024 10:16:57 -0500 Subject: [PATCH] 2024 day-2 some code cleanup --- 2024/day-2/src/part1.rs | 7 ++++--- 2024/day-2/src/part2.rs | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/2024/day-2/src/part1.rs b/2024/day-2/src/part1.rs index 65a198a..17914a5 100644 --- a/2024/day-2/src/part1.rs +++ b/2024/day-2/src/part1.rs @@ -1,6 +1,7 @@ #![warn(clippy::all, clippy::pedantic)] use error_stack::{Report, Result, ResultExt}; +use itertools::Itertools; use nom::{character::complete, multi::separated_list1, IResult}; use std::cmp::Ordering; use thiserror::Error; @@ -19,11 +20,11 @@ struct XmasReport { impl XmasReport { pub fn is_safe(&self) -> Safety { let mut dir = Ordering::Equal; - for i in 1..self.levels.len() { - if !(1_u32..=3).contains(&(self.levels[i - 1].abs_diff(self.levels[i]))) { + for (a, b) in self.levels.iter().tuple_windows(){ + if !(1_u32..=3).contains(&(a.abs_diff(*b))) { return Safety::UnSafe; } - let new_dir = self.levels[i - 1].cmp(&self.levels[i]); + let new_dir = a.cmp(b); if dir != Ordering::Equal && dir != new_dir { return Safety::UnSafe; } diff --git a/2024/day-2/src/part2.rs b/2024/day-2/src/part2.rs index 35774f2..3b19b6d 100644 --- a/2024/day-2/src/part2.rs +++ b/2024/day-2/src/part2.rs @@ -1,6 +1,7 @@ #![warn(clippy::all, clippy::pedantic)] use error_stack::{Report, Result, ResultExt}; +use itertools::Itertools; use nom::{character::complete, multi::separated_list1, IResult}; use std::cmp::Ordering; use thiserror::Error; @@ -20,11 +21,11 @@ impl XmasReport { pub fn is_safe(&self) -> Safety { fn internal_check(levels: &[u32]) -> Safety { let mut dir = Ordering::Equal; - for i in 1..levels.len() { - if !(1_u32..=3).contains(&(levels[i - 1].abs_diff(levels[i]))) { + for (a, b) in levels.iter().tuple_windows() { + if !(1_u32..=3).contains(&(a.abs_diff(*b))) { return Safety::UnSafe; } - let new_dir = levels[i - 1].cmp(&levels[i]); + let new_dir = a.cmp(b); if dir != Ordering::Equal && dir != new_dir { return Safety::UnSafe; }