diff --git a/inputs/day2.sample.txt b/inputs/day2.sample.txt new file mode 100644 index 0000000..7303f2a --- /dev/null +++ b/inputs/day2.sample.txt @@ -0,0 +1,8 @@ +forward 5 +down 5 +forward 8 +up 3 +down 8 +forward 2 + + diff --git a/inputs/day2.txt b/inputs/day2.txt new file mode 100644 index 0000000..8e1352e --- /dev/null +++ b/inputs/day2.txt @@ -0,0 +1,1002 @@ +forward 5 +down 7 +forward 8 +forward 1 +forward 1 +down 1 +down 9 +up 4 +down 5 +down 3 +up 1 +up 1 +forward 1 +up 2 +forward 5 +forward 4 +forward 7 +down 4 +up 9 +forward 5 +down 5 +forward 2 +forward 1 +forward 3 +down 6 +up 8 +up 8 +forward 8 +up 7 +down 3 +down 4 +forward 2 +down 9 +forward 9 +down 7 +down 9 +forward 8 +down 5 +forward 9 +forward 2 +forward 7 +down 4 +forward 8 +down 4 +up 7 +forward 7 +forward 7 +forward 5 +forward 1 +down 1 +down 5 +forward 9 +forward 9 +down 2 +down 2 +down 2 +forward 4 +forward 3 +forward 2 +down 7 +down 7 +forward 8 +forward 3 +forward 1 +up 4 +forward 9 +down 1 +up 2 +forward 3 +forward 7 +up 6 +up 9 +forward 4 +down 8 +down 5 +down 9 +forward 9 +forward 4 +forward 5 +forward 3 +down 9 +forward 1 +forward 7 +down 5 +forward 5 +forward 3 +down 6 +down 5 +down 8 +forward 6 +down 2 +forward 2 +down 6 +forward 1 +up 5 +up 3 +forward 7 +down 2 +forward 2 +forward 1 +forward 9 +up 9 +up 3 +forward 5 +down 5 +forward 9 +up 9 +down 7 +down 1 +up 9 +down 7 +up 4 +forward 1 +up 2 +up 5 +down 2 +forward 1 +down 3 +forward 5 +down 4 +down 1 +down 2 +down 4 +down 5 +forward 3 +forward 2 +forward 6 +forward 8 +forward 6 +down 4 +up 7 +forward 2 +down 3 +down 7 +down 1 +forward 7 +forward 1 +forward 9 +forward 8 +forward 3 +up 8 +forward 4 +up 7 +up 8 +forward 2 +forward 5 +down 2 +down 1 +forward 1 +up 6 +down 7 +forward 2 +up 6 +up 2 +forward 5 +down 5 +forward 5 +forward 3 +up 7 +forward 1 +down 3 +forward 4 +up 5 +forward 6 +forward 1 +up 6 +up 7 +forward 1 +forward 2 +up 6 +up 6 +forward 1 +forward 5 +up 9 +down 4 +down 9 +down 2 +down 5 +down 7 +down 3 +down 2 +down 7 +forward 8 +down 1 +forward 6 +forward 4 +up 8 +up 6 +forward 5 +forward 3 +forward 3 +down 9 +up 1 +up 3 +up 1 +up 8 +up 9 +down 5 +down 5 +forward 2 +forward 5 +down 9 +down 1 +down 4 +forward 5 +up 9 +forward 2 +forward 8 +up 1 +down 9 +down 9 +down 2 +down 9 +up 5 +forward 7 +down 3 +forward 3 +down 2 +forward 4 +forward 9 +forward 6 +down 1 +down 4 +down 4 +down 7 +down 6 +down 7 +forward 8 +forward 1 +forward 6 +forward 8 +up 1 +down 2 +down 8 +forward 4 +forward 2 +down 1 +down 1 +down 9 +forward 4 +down 3 +down 5 +down 7 +down 8 +forward 9 +forward 9 +forward 4 +down 9 +down 5 +up 3 +up 2 +forward 9 +down 6 +forward 4 +down 9 +forward 9 +up 6 +up 3 +forward 3 +down 1 +up 1 +forward 1 +forward 8 +up 4 +up 9 +forward 9 +down 9 +up 4 +down 4 +up 7 +forward 1 +down 7 +forward 9 +down 3 +forward 5 +forward 4 +down 1 +down 6 +down 5 +down 2 +forward 7 +down 2 +forward 1 +down 6 +forward 8 +down 3 +down 7 +down 1 +down 8 +up 4 +forward 7 +forward 9 +forward 1 +forward 9 +forward 8 +forward 9 +down 4 +up 6 +down 2 +up 8 +down 7 +down 5 +up 2 +up 7 +down 9 +up 1 +forward 1 +down 9 +forward 9 +forward 2 +forward 1 +up 9 +down 5 +down 1 +forward 7 +down 5 +forward 6 +down 3 +forward 2 +up 4 +down 8 +down 9 +down 9 +forward 6 +forward 6 +down 2 +forward 7 +up 2 +forward 4 +down 6 +down 4 +up 1 +up 5 +up 2 +down 7 +down 4 +down 4 +up 7 +forward 8 +up 5 +down 3 +forward 9 +forward 8 +down 5 +forward 2 +up 5 +down 6 +down 8 +forward 2 +forward 7 +up 8 +forward 3 +up 4 +up 8 +forward 8 +forward 2 +forward 8 +down 4 +down 9 +down 1 +down 4 +down 3 +forward 9 +forward 5 +down 8 +forward 7 +down 4 +up 1 +down 4 +down 9 +forward 4 +forward 9 +down 8 +down 4 +down 2 +forward 5 +forward 2 +forward 4 +forward 4 +forward 5 +down 4 +up 4 +up 9 +down 7 +forward 2 +up 5 +forward 3 +down 5 +down 8 +down 8 +down 4 +forward 9 +forward 4 +forward 3 +down 4 +down 4 +down 3 +up 6 +up 2 +forward 4 +up 8 +down 1 +forward 2 +forward 4 +down 7 +forward 7 +forward 3 +down 3 +down 1 +up 6 +up 7 +down 9 +up 7 +forward 9 +forward 6 +forward 4 +down 2 +forward 4 +forward 4 +forward 9 +down 5 +forward 4 +down 9 +up 9 +up 6 +forward 6 +down 6 +forward 4 +down 3 +forward 4 +down 9 +up 1 +down 5 +down 4 +forward 4 +down 7 +down 3 +down 6 +down 5 +forward 4 +forward 3 +down 5 +forward 6 +down 3 +up 2 +down 2 +up 5 +down 4 +forward 9 +forward 1 +down 8 +forward 8 +up 9 +down 3 +down 4 +forward 1 +forward 2 +up 3 +down 9 +up 9 +forward 3 +down 8 +forward 7 +forward 4 +forward 2 +up 9 +forward 5 +forward 7 +forward 9 +up 4 +forward 2 +forward 7 +down 6 +down 2 +up 5 +forward 3 +down 8 +up 9 +forward 1 +forward 9 +down 1 +up 3 +down 5 +up 8 +down 1 +forward 1 +forward 8 +forward 7 +up 9 +forward 6 +forward 5 +forward 9 +down 2 +forward 4 +down 9 +forward 1 +up 4 +forward 2 +down 9 +down 8 +down 5 +up 9 +forward 6 +down 7 +up 8 +forward 9 +up 5 +down 3 +forward 2 +forward 5 +forward 6 +up 5 +forward 6 +down 7 +down 4 +forward 3 +down 8 +forward 9 +down 2 +forward 7 +down 5 +down 2 +forward 5 +forward 9 +forward 3 +up 3 +up 7 +down 4 +forward 3 +up 8 +forward 8 +forward 1 +down 4 +forward 4 +forward 2 +forward 6 +up 1 +down 7 +forward 3 +down 6 +down 7 +forward 4 +forward 5 +up 9 +forward 3 +forward 6 +down 2 +down 1 +forward 5 +up 6 +down 3 +forward 9 +down 8 +up 3 +up 5 +up 6 +down 7 +forward 1 +down 8 +forward 7 +down 3 +forward 1 +up 9 +down 4 +up 9 +forward 9 +down 4 +forward 3 +up 3 +down 1 +up 3 +up 6 +forward 9 +forward 6 +down 9 +down 8 +forward 9 +up 8 +down 8 +forward 4 +forward 3 +forward 2 +down 6 +down 7 +down 1 +down 2 +down 2 +down 5 +forward 8 +forward 2 +down 4 +forward 4 +down 5 +forward 9 +forward 1 +down 9 +up 4 +up 5 +up 9 +forward 5 +down 6 +up 7 +forward 1 +up 8 +up 3 +forward 2 +down 1 +forward 3 +up 8 +up 7 +down 8 +down 9 +forward 7 +down 2 +up 5 +up 8 +down 3 +forward 3 +forward 1 +up 7 +down 3 +up 9 +down 8 +up 5 +forward 1 +down 8 +up 4 +up 7 +down 2 +down 9 +forward 3 +up 4 +forward 4 +down 9 +forward 1 +forward 3 +forward 9 +up 6 +forward 7 +up 8 +forward 5 +down 2 +down 2 +forward 4 +down 6 +forward 7 +forward 9 +up 8 +forward 2 +up 6 +forward 6 +forward 1 +forward 5 +forward 9 +forward 5 +forward 1 +forward 8 +forward 4 +forward 1 +down 2 +forward 3 +forward 8 +forward 6 +forward 1 +down 7 +forward 1 +up 2 +forward 6 +up 2 +up 8 +down 3 +down 9 +forward 2 +forward 3 +up 9 +down 7 +forward 6 +up 3 +forward 4 +forward 1 +up 4 +down 1 +down 3 +down 7 +down 4 +forward 4 +forward 5 +up 6 +down 4 +down 9 +down 2 +forward 4 +down 6 +forward 4 +forward 5 +forward 3 +down 9 +down 3 +up 8 +down 2 +down 8 +up 3 +down 1 +forward 1 +forward 3 +down 8 +up 3 +up 8 +up 1 +down 3 +down 9 +down 9 +down 6 +forward 9 +down 7 +down 7 +down 4 +forward 3 +forward 3 +down 2 +down 6 +up 9 +forward 9 +down 9 +forward 9 +down 8 +down 1 +up 3 +forward 4 +up 2 +forward 8 +up 9 +forward 8 +up 5 +forward 9 +down 7 +forward 9 +forward 7 +down 9 +down 6 +down 5 +forward 5 +forward 1 +forward 8 +up 1 +up 7 +up 5 +forward 3 +down 1 +forward 4 +up 6 +up 3 +down 1 +forward 4 +down 4 +forward 4 +forward 5 +down 2 +down 7 +down 1 +forward 5 +forward 2 +forward 5 +forward 1 +forward 1 +down 7 +up 7 +forward 8 +down 7 +forward 6 +forward 2 +down 9 +forward 2 +down 7 +down 5 +up 1 +down 6 +down 7 +down 6 +down 1 +forward 5 +down 5 +forward 6 +up 9 +forward 9 +up 1 +down 9 +forward 4 +down 6 +down 2 +forward 3 +down 9 +up 6 +forward 1 +down 2 +forward 8 +forward 7 +forward 4 +forward 2 +forward 7 +forward 1 +down 9 +forward 7 +down 4 +up 6 +down 7 +forward 1 +up 8 +forward 5 +up 3 +up 1 +down 6 +forward 9 +up 7 +up 5 +down 2 +up 9 +up 4 +forward 1 +forward 1 +forward 9 +down 3 +down 6 +forward 1 +up 6 +up 9 +down 9 +forward 7 +forward 8 +up 9 +up 4 +down 8 +up 3 +down 8 +forward 9 +down 3 +down 6 +forward 7 +up 4 +forward 7 +down 2 +down 6 +up 4 +down 8 +down 4 +down 2 +up 5 +down 4 +down 2 +forward 9 +up 9 +forward 3 +down 9 +up 1 +down 8 +down 5 +forward 5 +forward 3 +up 3 +forward 9 +down 1 +forward 1 +up 2 +down 9 +forward 5 +forward 6 +up 3 +forward 2 +forward 8 +down 9 +up 7 +down 8 +up 5 +forward 9 +forward 3 +down 7 +forward 9 +down 8 +forward 7 +down 6 +down 6 +down 1 +up 4 +up 1 +forward 3 +down 7 +up 3 +down 3 +forward 5 +down 8 +forward 2 +down 9 +forward 6 +down 6 +down 6 +forward 9 +down 2 +forward 6 +up 7 +down 3 +up 5 +forward 4 +down 7 +forward 8 +forward 9 +forward 7 +down 3 +forward 7 +forward 2 +down 6 +forward 6 +down 2 +down 1 +forward 4 +forward 5 +up 6 +forward 7 +up 3 +up 5 +forward 2 +forward 8 +forward 9 +down 2 +forward 4 +forward 5 +down 7 +up 8 +forward 9 +forward 9 +down 3 +down 1 +forward 2 +forward 2 +down 9 +up 5 +down 5 +up 5 +down 2 +forward 1 +down 2 +down 9 +down 1 +forward 2 +down 9 +down 1 +forward 7 +down 8 +down 5 +down 1 +up 5 +forward 4 +down 8 +down 6 +down 6 +forward 9 +up 7 +up 2 +up 8 +down 1 +forward 9 +down 9 +down 5 +forward 2 +down 7 +up 8 +forward 5 +up 2 +down 1 +down 8 +up 5 +forward 1 +forward 1 +down 7 +up 2 +down 3 +up 6 +down 6 +forward 7 +down 3 +forward 8 +down 1 +down 4 +down 3 +up 8 +down 9 +up 2 +up 5 +forward 2 +forward 5 +forward 8 +up 7 +forward 4 +forward 2 +forward 2 +forward 3 +up 4 +down 3 +forward 7 +forward 9 +forward 7 + + diff --git a/src/main.rs b/src/main.rs index 0270747..a2841a7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,49 +1,58 @@ #![feature(test)] extern crate test; -const INPUT: &'static str = include_str!("../inputs/day1.txt"); +const INPUT: &'static str = include_str!("../inputs/day2.txt"); -fn depths() -> Vec { - INPUT - .lines() - .filter(|&x| !x.is_empty()) - .map(|x| x.parse::().unwrap()) - .collect() +enum Moves { + Forward(i32), + Down(i32), + Up(i32), } -fn solution(depths: &[u64]) -> i32 { - let mut count = 0; +fn cmds() -> impl Iterator { + INPUT.lines().filter(|&x| !x.is_empty()).map(|x| { + let x: Vec<&str> = x.split_ascii_whitespace().collect(); - // For a window size of 3, We can consider a window size of 4 - // A + B + C && B + C + D - // Since B, C are shared between the two consecutive sets, - // We only need to compare A and D - for set in depths.windows(4) { - if set[0] < set[3] { - count += 1; + match x[0] { + "forward" => Moves::Forward(x[1].parse::().unwrap()), + "down" => Moves::Down(x[1].parse::().unwrap()), + "up" => Moves::Up(x[1].parse::().unwrap()), + _ => unreachable!(), + } + }) +} + +fn solution(moves: impl Iterator) -> i32 { + let mut vertical = 0; + let mut horizontal = 0; + + for mmove in moves { + match mmove { + Moves::Forward(v) => horizontal += v, + Moves::Down(v) => vertical += v, + Moves::Up(v) => vertical -= v, } } - count + vertical * horizontal } fn main() { - let depths = &depths(); - let count = solution(depths); + let moves = cmds(); + let count = solution(moves); println!("increased {} times", count); } #[bench] fn solution_bench(b: &mut test::Bencher) { - let depths = depths(); - b.iter(|| { - let v = solution(&depths); + let moves = cmds(); + let v = solution(moves); test::black_box(v); }) } #[test] fn solution_test() { - assert_eq!(solution(&depths()), 1429); + assert_eq!(solution(cmds()), 1429); }