pub fn solve(input: &str) { let grid = input.lines().map(|str| str.as_bytes()).collect::>(); let width = grid[0].len() as i32; let height = grid.len() as i32; let words = ((b'M', b'A', b'S'), (b'S', b'A', b'M')); let mut matches = 0; for xpos in 1..(width - 1) { for ypos in 1..(height - 1) { if grid[xpos as usize][ypos as usize] == b'A' { let left = (grid[(xpos - 1) as usize][(ypos - 1) as usize], grid[(xpos) as usize][(ypos) as usize], grid[(xpos + 1) as usize][(ypos + 1) as usize]); let right = (grid[(xpos + 1) as usize][(ypos - 1) as usize], grid[(xpos) as usize][(ypos) as usize], grid[(xpos - 1) as usize][(ypos + 1) as usize]); if (left == words.0 || left == words.1) && (right == words.0 || right == words.1) { matches += 1; } } } } println!("matches: {}", matches); }