From d4e5f1aea9324912b84e70d5418bf9a280d76b99 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Wed, 1 Dec 2021 21:13:45 -0800 Subject: [PATCH] Day 2 part 1. --- 2021/input/2021/day2.txt | 1000 ++++++++++++++++++++++++++++++++++++++ 2021/src/day2.rs | 79 +++ 2021/src/lib.rs | 1 + 3 files changed, 1080 insertions(+) create mode 100644 2021/input/2021/day2.txt create mode 100644 2021/src/day2.rs diff --git a/2021/input/2021/day2.txt b/2021/input/2021/day2.txt new file mode 100644 index 0000000..b7b994b --- /dev/null +++ b/2021/input/2021/day2.txt @@ -0,0 +1,1000 @@ +forward 8 +forward 3 +forward 8 +down 6 +forward 3 +up 6 +down 3 +down 8 +down 5 +down 1 +down 4 +up 4 +forward 7 +forward 7 +down 8 +forward 8 +forward 2 +forward 4 +forward 6 +down 2 +forward 1 +down 2 +down 6 +up 4 +forward 4 +forward 4 +down 1 +down 1 +forward 8 +down 9 +forward 4 +down 4 +forward 9 +down 9 +forward 7 +forward 4 +forward 4 +down 7 +forward 9 +up 5 +forward 7 +forward 4 +up 5 +up 6 +down 9 +forward 3 +forward 3 +forward 5 +up 3 +forward 8 +down 9 +forward 3 +forward 5 +down 2 +forward 7 +forward 8 +forward 8 +up 3 +down 9 +forward 2 +forward 5 +forward 4 +up 1 +down 3 +forward 7 +forward 4 +up 3 +down 8 +up 8 +forward 7 +forward 7 +down 2 +down 7 +forward 3 +forward 1 +down 7 +down 4 +down 9 +forward 5 +down 9 +up 8 +down 9 +down 7 +forward 2 +down 5 +down 6 +forward 3 +forward 2 +forward 3 +forward 2 +down 4 +up 1 +forward 6 +down 2 +forward 2 +down 5 +up 1 +up 8 +forward 5 +forward 6 +up 8 +down 4 +forward 4 +down 3 +forward 5 +forward 5 +forward 8 +forward 3 +up 1 +down 9 +up 4 +up 5 +down 3 +down 9 +up 6 +down 1 +down 2 +down 3 +down 6 +up 5 +forward 9 +forward 6 +forward 6 +forward 4 +forward 7 +up 6 +down 2 +down 9 +down 9 +forward 4 +down 9 +forward 2 +down 4 +down 8 +down 3 +up 1 +down 2 +down 7 +down 1 +down 5 +up 5 +forward 3 +forward 2 +down 2 +up 4 +up 9 +forward 5 +up 9 +down 9 +forward 1 +down 4 +forward 6 +down 2 +forward 7 +forward 2 +down 6 +forward 9 +down 9 +down 8 +forward 7 +down 3 +down 3 +down 5 +forward 5 +up 9 +up 5 +down 1 +forward 9 +down 3 +down 6 +forward 3 +up 4 +up 1 +down 3 +down 1 +up 6 +forward 4 +up 4 +forward 5 +down 3 +down 5 +forward 4 +down 1 +up 6 +down 5 +forward 1 +forward 6 +down 5 +forward 1 +forward 4 +forward 2 +down 1 +down 3 +down 9 +down 9 +down 8 +forward 4 +down 5 +forward 6 +up 6 +down 3 +forward 1 +down 9 +forward 4 +down 2 +up 5 +down 4 +forward 1 +forward 2 +down 6 +forward 3 +down 9 +forward 6 +forward 1 +forward 7 +up 1 +up 7 +up 2 +forward 4 +up 3 +down 4 +up 1 +down 3 +forward 1 +down 5 +up 6 +forward 6 +forward 6 +up 3 +up 2 +down 8 +down 2 +down 2 +down 7 +forward 8 +up 2 +up 2 +up 5 +down 6 +up 3 +down 9 +forward 7 +down 7 +forward 8 +forward 2 +forward 5 +up 5 +up 1 +forward 5 +up 2 +up 3 +up 2 +up 3 +down 3 +down 2 +forward 1 +up 1 +down 4 +up 8 +forward 5 +down 9 +forward 8 +up 1 +forward 7 +forward 7 +up 7 +up 6 +up 6 +down 5 +down 3 +up 4 +up 1 +down 9 +down 9 +forward 4 +down 7 +forward 2 +forward 8 +forward 1 +down 9 +forward 2 +forward 5 +up 5 +down 5 +down 6 +forward 1 +down 4 +forward 9 +up 3 +down 4 +forward 7 +forward 1 +forward 3 +forward 6 +down 1 +forward 3 +up 5 +up 6 +down 3 +forward 5 +forward 8 +forward 4 +down 9 +forward 2 +forward 4 +down 8 +forward 6 +down 7 +up 7 +forward 1 +down 8 +forward 5 +forward 7 +up 3 +forward 7 +forward 2 +up 5 +forward 3 +down 4 +up 5 +down 6 +up 6 +forward 6 +up 1 +up 7 +up 8 +forward 4 +down 6 +down 8 +up 8 +down 2 +forward 3 +forward 9 +down 9 +down 6 +down 2 +up 4 +forward 5 +forward 6 +forward 5 +down 5 +forward 5 +down 2 +down 9 +down 3 +down 4 +forward 2 +forward 7 +down 7 +down 2 +down 4 +down 8 +up 6 +down 7 +forward 2 +up 6 +forward 6 +down 4 +up 8 +forward 1 +up 2 +forward 6 +forward 7 +down 2 +down 4 +down 3 +down 2 +forward 5 +down 4 +forward 6 +forward 6 +down 8 +forward 7 +forward 1 +forward 1 +forward 4 +forward 7 +forward 8 +down 2 +forward 9 +up 7 +forward 1 +down 1 +forward 2 +forward 2 +up 4 +forward 3 +down 1 +down 4 +down 3 +forward 8 +forward 8 +forward 9 +forward 4 +down 6 +up 6 +up 7 +up 7 +down 1 +up 1 +up 9 +up 7 +down 9 +forward 4 +up 8 +down 5 +up 3 +down 2 +forward 4 +forward 6 +up 7 +up 2 +down 5 +down 3 +down 9 +forward 1 +down 1 +down 6 +down 3 +forward 9 +down 3 +up 6 +up 4 +up 6 +down 6 +up 7 +down 5 +up 4 +up 3 +up 3 +up 2 +forward 1 +forward 5 +forward 8 +down 2 +up 9 +forward 6 +forward 8 +up 3 +down 3 +forward 7 +forward 4 +down 7 +up 2 +down 1 +down 5 +forward 8 +down 6 +down 2 +down 9 +down 5 +up 7 +up 5 +forward 7 +down 8 +down 5 +forward 7 +up 5 +up 1 +down 4 +forward 1 +up 3 +forward 7 +forward 9 +down 7 +forward 4 +down 9 +down 2 +up 2 +forward 2 +down 6 +forward 3 +down 5 +up 8 +forward 5 +up 5 +forward 1 +down 4 +forward 7 +down 8 +forward 7 +up 2 +forward 1 +forward 2 +down 7 +forward 7 +forward 5 +up 3 +down 8 +forward 8 +up 6 +up 2 +forward 9 +down 7 +up 6 +down 1 +up 5 +forward 4 +forward 9 +forward 6 +forward 3 +forward 3 +forward 1 +forward 8 +down 6 +forward 3 +up 2 +up 6 +down 3 +down 7 +forward 5 +down 2 +up 9 +up 3 +down 1 +down 3 +up 7 +up 5 +down 6 +down 5 +up 2 +down 1 +down 2 +forward 1 +down 1 +forward 1 +down 1 +up 5 +up 4 +forward 1 +down 7 +forward 4 +down 6 +forward 2 +forward 1 +forward 4 +forward 9 +down 7 +forward 7 +down 7 +down 5 +forward 7 +forward 3 +forward 8 +up 4 +forward 9 +down 1 +down 9 +forward 3 +down 7 +forward 1 +forward 8 +up 7 +forward 5 +down 8 +forward 3 +forward 6 +forward 6 +up 5 +forward 7 +up 3 +down 9 +forward 4 +forward 4 +forward 1 +down 2 +down 9 +forward 8 +forward 8 +down 9 +forward 5 +up 4 +down 6 +forward 3 +up 4 +down 5 +down 2 +down 3 +down 2 +up 1 +up 9 +up 3 +forward 5 +forward 7 +down 1 +down 5 +up 1 +forward 8 +down 5 +forward 8 +forward 8 +down 2 +forward 2 +forward 7 +forward 3 +forward 6 +up 9 +down 3 +forward 7 +down 5 +forward 3 +up 1 +down 3 +down 9 +forward 5 +forward 5 +up 5 +down 3 +down 3 +up 1 +forward 6 +up 1 +up 6 +forward 5 +down 3 +down 9 +forward 1 +down 5 +up 5 +down 7 +down 7 +down 6 +down 2 +up 7 +down 3 +forward 2 +up 6 +down 2 +forward 6 +forward 9 +down 6 +down 4 +down 5 +down 7 +forward 9 +up 2 +down 2 +down 4 +forward 4 +down 9 +forward 3 +forward 8 +forward 6 +up 5 +down 2 +down 7 +forward 7 +up 6 +down 4 +up 8 +forward 2 +down 8 +forward 7 +up 8 +up 5 +up 8 +down 1 +forward 4 +forward 7 +down 5 +forward 1 +forward 5 +down 9 +down 6 +up 8 +up 5 +down 7 +down 4 +forward 4 +forward 2 +forward 4 +down 1 +up 4 +down 5 +down 4 +up 5 +forward 2 +up 3 +down 9 +down 1 +down 4 +up 1 +up 7 +down 5 +forward 9 +down 5 +down 7 +down 2 +down 8 +forward 7 +down 5 +down 6 +forward 3 +down 8 +down 5 +down 9 +up 6 +up 2 +down 9 +down 6 +down 7 +forward 8 +down 8 +forward 4 +up 8 +forward 3 +down 2 +up 2 +forward 4 +down 9 +down 2 +up 6 +down 4 +forward 6 +down 7 +forward 5 +forward 4 +down 3 +up 6 +forward 7 +forward 1 +up 6 +down 6 +forward 5 +forward 3 +down 8 +up 8 +up 8 +forward 5 +forward 1 +up 1 +forward 3 +up 6 +forward 2 +down 8 +forward 8 +up 8 +forward 1 +forward 6 +forward 8 +up 7 +up 3 +forward 8 +forward 5 +down 4 +down 4 +forward 8 +up 1 +forward 5 +down 9 +forward 2 +down 2 +down 3 +forward 1 +down 2 +up 3 +down 1 +up 1 +up 1 +forward 8 +forward 5 +forward 2 +up 1 +down 9 +up 7 +down 1 +forward 9 +up 4 +forward 5 +forward 5 +forward 8 +down 1 +forward 3 +forward 4 +forward 8 +up 2 +forward 5 +down 8 +forward 5 +up 7 +forward 3 +forward 2 +forward 3 +up 7 +up 4 +up 9 +forward 7 +forward 1 +up 6 +up 5 +down 8 +forward 3 +down 5 +forward 7 +forward 3 +up 9 +forward 9 +forward 7 +up 2 +down 7 +forward 4 +down 9 +up 8 +up 3 +down 4 +down 1 +forward 4 +up 3 +down 6 +down 2 +forward 8 +up 1 +forward 5 +up 7 +down 5 +forward 9 +forward 6 +forward 9 +down 3 +up 8 +forward 6 +forward 4 +forward 2 +forward 2 +down 8 +up 5 +down 4 +down 6 +forward 3 +forward 6 +forward 1 +forward 3 +down 8 +down 5 +up 3 +down 1 +down 7 +forward 8 +forward 1 +down 6 +down 9 +forward 2 +up 5 +down 6 +up 6 +down 5 +down 8 +forward 1 +down 3 +forward 1 +forward 8 +forward 2 +down 4 +forward 1 +down 6 +down 6 +forward 3 +up 7 +forward 5 +up 1 +up 4 +forward 7 +forward 1 +down 5 +forward 2 +down 1 +forward 4 +forward 2 +forward 5 +up 2 +up 1 +forward 2 +down 4 +down 5 +forward 6 +forward 1 +down 7 +down 6 +down 2 +forward 5 +forward 6 +up 8 +up 6 +forward 2 +forward 6 +down 9 +down 4 +forward 1 +down 3 +down 1 +up 4 +down 8 +forward 3 +down 5 +up 4 +down 5 +up 3 +down 1 +down 1 +down 9 +forward 8 +up 8 +down 2 +forward 9 +down 8 +down 4 +up 4 +up 9 +up 4 +forward 8 +forward 9 +forward 3 +forward 2 +down 2 +forward 5 +down 6 +down 2 +down 9 +forward 3 +up 4 +forward 8 +up 9 +forward 2 +forward 1 +down 3 +up 1 +up 7 +down 3 +up 2 +down 2 +up 2 +forward 4 +down 7 +forward 2 +forward 4 +forward 3 +down 6 +forward 4 +down 3 +forward 2 +down 1 +up 4 +down 8 +up 3 +forward 4 +up 6 +forward 5 +forward 3 +forward 1 +up 2 +forward 4 +forward 7 +down 3 +forward 9 +up 7 +down 9 +forward 2 +forward 4 +down 9 +down 1 +up 3 +forward 2 +forward 7 +down 7 +forward 9 +forward 5 +forward 7 +forward 2 +forward 3 +forward 4 +forward 5 +forward 6 +down 1 +forward 8 +down 4 +down 6 +up 8 +up 5 +forward 5 +down 9 +down 2 +down 2 +forward 7 +forward 8 +up 8 +down 4 +up 5 +forward 1 +down 5 +forward 3 +up 3 +down 6 +forward 5 +up 3 +up 5 +forward 4 +forward 2 +up 6 +down 9 +forward 7 diff --git a/2021/src/day2.rs b/2021/src/day2.rs new file mode 100644 index 0000000..35caedf --- /dev/null +++ b/2021/src/day2.rs @@ -0,0 +1,79 @@ +//! --- Day 2: Dive! --- +//! Now, you need to figure out how to pilot this thing. +//! +//! It seems like the submarine can take a series of commands like forward 1, down 2, or up 3: +//! +//! forward X increases the horizontal position by X units. +//! down X increases the depth by X units. +//! up X decreases the depth by X units. +//! Note that since you're on a submarine, down and up affect your depth, and so they have the opposite result of what you might expect. +//! +//! The submarine seems to already have a planned course (your puzzle input). You should probably figure out where it's going. For example: +//! +//! forward 5 +//! down 5 +//! forward 8 +//! up 3 +//! down 8 +//! forward 2 +//! Your horizontal position and depth both start at 0. The steps above would then modify them as follows: +//! +//! forward 5 adds 5 to your horizontal position, a total of 5. +//! down 5 adds 5 to your depth, resulting in a value of 5. +//! forward 8 adds 8 to your horizontal position, a total of 13. +//! up 3 decreases your depth by 3, resulting in a value of 2. +//! down 8 adds 8 to your depth, resulting in a value of 10. +//! forward 2 adds 2 to your horizontal position, a total of 15. +//! After following these instructions, you would have a horizontal position of 15 and a depth of 10. (Multiplying these together produces 150.) +//! +//! Calculate the horizontal position and depth you would have after following the planned course. What do you get if you multiply your final horizontal position by your final depth? + +use aoc_runner_derive::{aoc, aoc_generator}; + +#[aoc(day2, part1)] +fn part1(input: &str) -> i32 { + let mut horizontal: i32 = 0; + let mut depth: i32 = 0; + input.split("\n").for_each(|l| { + let p: Vec<_> = l.split(" ").collect(); + + match p[0] { + "forward" => horizontal += p[1].parse::().expect("forward"), + "up" => depth -= p[1].parse::().expect("up"), + "down" => depth += p[1].parse::().expect("down"), + _ => panic!("unknown command {}", p[0]), + } + }); + horizontal * depth +} + +/* +#[aoc(day2, part2)] +fn part2(depths: &[u32]) -> u32 { +todo!("part2") +} +*/ + +#[test] +fn test_part1() { + let input = r#" +forward 5 +down 5 +forward 8 +up 3 +down 8 +forward 2 +"# + .trim(); + assert_eq!(part1(input), 150); +} + +/* +#[test] +fn test_part2() { +let input = r#" +"# +.trim(); +assert_eq!(part2(&parse(input)), TODO); +} +*/ diff --git a/2021/src/lib.rs b/2021/src/lib.rs index 9c36492..44b33e3 100644 --- a/2021/src/lib.rs +++ b/2021/src/lib.rs @@ -1,4 +1,5 @@ pub mod day1; +pub mod day2; use aoc_runner_derive::aoc_lib;