2015/03
This commit is contained in:
4
2015/03/Cargo.lock
generated
Normal file
4
2015/03/Cargo.lock
generated
Normal file
@@ -0,0 +1,4 @@
|
||||
[root]
|
||||
name = "03"
|
||||
version = "0.1.0"
|
||||
|
||||
6
2015/03/Cargo.toml
Normal file
6
2015/03/Cargo.toml
Normal file
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "03"
|
||||
version = "0.1.0"
|
||||
authors = ["logaritmisk <anders.e.olsson@gmail.com>"]
|
||||
|
||||
[dependencies]
|
||||
1
2015/03/input.txt
Normal file
1
2015/03/input.txt
Normal file
File diff suppressed because one or more lines are too long
76
2015/03/src/main.rs
Normal file
76
2015/03/src/main.rs
Normal 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));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user