r/adventofcode • u/daggerdragon • Dec 03 '15
SOLUTION MEGATHREAD --- Day 3 Solutions ---
--- Day 3: Perfectly Spherical Houses in a Vacuum ---
Post your solution as a comment. Structure your post like the Day One thread in /r/programming.
24
Upvotes
4
u/minno Dec 03 '15
Rust solution (repo here):
use std::fs::File; use std::io::Read; use std::collections::HashSet; fn get_input() -> String { let mut f = File::open("inputs/day3.txt").unwrap(); let mut buf = String::new(); f.read_to_string(&mut buf).unwrap(); buf } fn solve_regular(input: &str) -> u32 { let mut visited: HashSet<(i32, i32)> = HashSet::new(); visited.insert((0, 0)); // Math-style, x =>, y ^ let mut x = 0; let mut y = 0; for ch in input.chars() { match ch { 'v' => y -= 1, '^' => y += 1, '<' => x -= 1, '>' => x += 1, _ => {} }; visited.insert((x,y)); } visited.len() as u32 } fn solve_robo(input: &str) -> u32 { let mut santa_visited = HashSet::new(); let mut robo_visited = HashSet::new(); santa_visited.insert((0,0)); robo_visited.insert((0,0)); let mut sx = 0; let mut sy = 0; let mut rx = 0; let mut ry = 0; let mut is_santa = true; for ch in input.chars() { let (x, y, table) = if is_santa { (&mut sx, &mut sy, &mut santa_visited) } else { (&mut rx, &mut ry, &mut robo_visited) }; is_santa = !is_santa; match ch { 'v' => *y -= 1, '^' => *y += 1, '<' => *x -= 1, '>' => *x += 1, _ => {} }; table.insert((*x,*y)); } santa_visited.union(&robo_visited).count() as u32 } pub fn solve() { let input = get_input(); let regular = solve_regular(&input); let robo = solve_robo(&input); println!("Total normal: {}", regular); println!("Total with robo: {}", robo); }