diff --git a/src/day3.rs b/src/day3.rs index 751f8c8..3985b55 100644 --- a/src/day3.rs +++ b/src/day3.rs @@ -64,7 +64,7 @@ impl Day3 { } } - fn has_adjacent_symbol(&self, pos: &Coord, n: &u32) -> bool { + fn has_adjacent_symbol(&self, pos: &Coord, n: u32) -> bool { let n_len = Self::number_length(n); for y in pos.y.checked_sub(1).unwrap_or(0)..pos.y + 2 { for x in pos.x.checked_sub(1).unwrap_or(0)..pos.x + n_len + 1 { @@ -86,12 +86,17 @@ impl Day3 { fn is_adjacent(&self, pos: &Coord, number: &(Coord, u32)) -> bool { - return pos.x >= number.0.x.checked_sub(1).unwrap_or(0) && pos.x <= number.0.x + Self::number_length(&number.1) && + return pos.x >= number.0.x.checked_sub(1).unwrap_or(0) && pos.x <= number.0.x + Self::number_length(number.1) && pos.y >= number.0.y.checked_sub(1).unwrap_or(0) && pos.y <= number.0.y + 1 } - fn number_length(n: &u32) -> usize { - n.to_string().len() + fn number_length(n: u32) -> usize { + if n < 10 { 1 } + else if n < 100 { 2 } + else if n < 1000 { 3 } + else if n < 10000 { 4 } + else if n < 100000 { 5 } + else { n.to_string().len() } } } @@ -102,7 +107,7 @@ impl DaySolver for Day3 { // println!("{:?}", self); let mut sum = 0u32; for (pos, n) in &self.numbers { - if self.has_adjacent_symbol(&pos, n) { + if self.has_adjacent_symbol(&pos, n.to_owned()) { sum += n; // } else { // println!("No adjacent symbol for {}", n);