1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
use crate::Input; use std::collections::HashSet; pub fn solve(input: &mut Input) -> Result<u32, String> { let mut visited_houses = HashSet::new(); let mut santa_position = (0, 0); visited_houses.insert(santa_position); let mut robo_santa_position = (0, 0); for (idx, c) in input.text.chars().enumerate() { let mover = if input.is_part_one() || idx % 2 == 0 { &mut santa_position } else { &mut robo_santa_position }; match c { '>' => { mover.0 += 1; } '<' => { mover.0 -= 1; } '^' => { mover.1 -= 1; } 'v' => { mover.1 += 1; } _ => { return Err(format!("Invalid input char '{}'", c)); } } visited_houses.insert(*mover); } Ok(visited_houses.len() as u32) } #[test] pub fn tests() { use crate::{test_part_one, test_part_two}; let real_input = include_str!("day03_input.txt"); test_part_one!(real_input => 2572); test_part_two!(real_input => 2631); }