diff options
author | alyx <alyx@aleteoryx.me> | 2023-11-19 14:55:43 -0500 |
---|---|---|
committer | alyx <alyx@aleteoryx.me> | 2023-11-19 14:55:43 -0500 |
commit | 2d12f6ec2294e36ae090fdd1e10025452ec1a480 (patch) | |
tree | 9467466f8fb7daba9d76a6a956931eba51b5d865 /2015/rs/src/three.rs | |
download | adventofcode-2d12f6ec2294e36ae090fdd1e10025452ec1a480.tar.gz adventofcode-2d12f6ec2294e36ae090fdd1e10025452ec1a480.tar.bz2 adventofcode-2d12f6ec2294e36ae090fdd1e10025452ec1a480.zip |
Initial commit, done up to 2015.7
Diffstat (limited to '2015/rs/src/three.rs')
-rw-r--r-- | 2015/rs/src/three.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/2015/rs/src/three.rs b/2015/rs/src/three.rs new file mode 100644 index 0000000..04db03a --- /dev/null +++ b/2015/rs/src/three.rs @@ -0,0 +1,29 @@ +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<I: Iterator<Item = (i32, i32)>>(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)); + } +} |