use std::collections::HashSet; static INPUT: &'static str = include_str!("three.txt"); fn main() { let valueified = INPUT.chars().map(|c| match c { '<' => (-1, 0), '>' => (1, 0), '^' => (0, 1), 'v' => (0, -1), _ => (0, 0) }); let mut visited = HashSet::new(); append_visits(valueified.clone(), &mut visited); println!("Number visited normally: {}", visited.len()); let santa_iter = valueified.clone().step_by(2); let robot_iter = valueified.skip(1).step_by(2); let mut visited = HashSet::new(); append_visits(santa_iter.clone(), &mut visited); append_visits(robot_iter.clone(), &mut visited); println!("Number visited w/ robot: {}", visited.len()); } fn append_visits>(iter: I, visited: &mut HashSet<(i32, i32)>) { let (mut x, mut y) = (0, 0); visited.insert((0, 0)); for (move_x, move_y) in iter { x += move_x; y += move_y; visited.insert((x, y)); } }