diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/bin/day4.rs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/bin/day4.rs b/src/bin/day4.rs index 9a256a7..768ca25 100644 --- a/src/bin/day4.rs +++ b/src/bin/day4.rs @@ -5,7 +5,7 @@ static DAY: u8 = 4; fn main() { let input = advent::read_lines(DAY); println!("{DAY}a: {}", count_xmas(&input)); - println!("{DAY}b: {}", 0); + println!("{DAY}b: {}", count_x_mas(&input)); } fn get_letter_grid(input: &[String]) -> HashMap<(isize,isize), char> { @@ -86,6 +86,25 @@ fn count_xmas(input: &[String]) -> usize { xmas_count } +fn count_x_mas(input: &[String]) -> usize { + let grid = get_letter_grid(input); + let max_y = input.len() as isize; + let max_x = input[0].len() as isize; + let mut xmas_count = 0; + + for x in 0..max_x { + for y in 0..max_y { + for word1 in ["MAS", "SAM"] { + for word2 in ["MAS", "SAM"] { + if word_se(&grid, x, y, word1) && word_sw(&grid, x+2, y, word2) { xmas_count += 1; } + } + } + } + } + + xmas_count +} + #[cfg(test)] mod tests { use super::*; @@ -105,5 +124,6 @@ mod tests { "MXMXAXMASX", ].iter().map(|&x| String::from(x)).collect::<Vec<_>>(); assert_eq!(count_xmas(&input), 18); + assert_eq!(count_x_mas(&input), 9); } } |
