This commit is contained in:
2016-12-01 14:26:17 +01:00
parent 204757aba5
commit e5af2023c2
4 changed files with 87 additions and 0 deletions

76
2015/03/src/main.rs Normal file
View File

@@ -0,0 +1,76 @@
use std::io::{self, Read};
use std::collections::HashMap;
fn main() {
let mut input = String::new();
io::stdin().read_to_string(&mut input).unwrap();
let count = process(&input, 2);
println!("count={}", count);
}
fn process(input: &str, versions: usize) -> usize {
let mut houses: HashMap<(i32, i32), i32> = HashMap::new();
houses.insert((0, 0), versions as i32);
let mut index = (0..versions).cycle();
let mut pos = vec![(0, 0); versions];
for step in input.chars() {
let i = index.next().unwrap();
pos[i] = match step {
'>' => (pos[i].0 + 1, pos[i].1),
'<' => (pos[i].0 - 1, pos[i].1),
'^' => (pos[i].0, pos[i].1 + 1),
'v' => (pos[i].0, pos[i].1 - 1),
_ => pos[i],
};
let count = houses.entry(pos[i]).or_insert(0);
*count += 1;
}
houses.len()
}
#[cfg(test)]
mod tests {
use super::process;
#[test]
fn example_01() {
assert_eq!(2, process(">", 1));
}
#[test]
fn example_02() {
assert_eq!(4, process("^>v<", 1));
}
#[test]
fn example_03() {
assert_eq!(2, process("^v^v^v^v^v", 1));
}
#[test]
fn example_04() {
assert_eq!(3, process("^v", 2));
}
#[test]
fn example_05() {
assert_eq!(3, process("^>v<", 2));
}
#[test]
fn example_06() {
assert_eq!(11, process("^v^v^v^v^v", 2));
}
}