day2 solution

This commit is contained in:
swaits committed 2021-12-01 22:55:12 -07:00
1 parent b380ecbabd
commit 282ed1aa2e
4 files changed
+1069

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
forward 5
down 5
forward 8
up 3
down 8
forward 2
+1000
View File
@@ -0,0 +1,1000 @@
forward 2
down 9
up 6
forward 1
down 5
down 7
down 9
forward 9
down 8
up 7
forward 2
up 6
forward 4
down 5
down 9
up 1
down 9
forward 8
forward 6
forward 6
forward 5
forward 9
up 3
up 5
forward 1
down 4
down 7
forward 2
up 3
down 8
forward 1
down 2
forward 3
up 1
up 1
up 7
forward 5
up 8
forward 8
forward 8
down 6
forward 1
forward 5
forward 4
forward 6
forward 5
down 6
down 9
forward 9
down 8
forward 6
down 5
forward 9
up 3
up 1
down 8
down 7
down 9
forward 7
down 8
down 9
down 5
down 3
forward 1
forward 6
down 1
forward 9
down 5
forward 7
up 2
down 8
forward 1
down 4
down 9
down 4
up 5
forward 4
forward 6
forward 1
down 3
forward 1
down 6
up 5
up 4
forward 6
forward 1
forward 1
down 2
up 4
up 3
up 2
up 6
down 6
forward 1
down 8
forward 1
up 6
forward 7
down 5
forward 4
forward 6
down 4
forward 4
down 4
down 4
forward 2
forward 8
down 5
down 1
down 8
up 5
up 8
down 5
forward 4
down 6
up 7
forward 2
down 3
forward 2
forward 2
down 9
down 3
up 6
forward 8
up 2
up 9
forward 4
down 1
down 5
forward 4
down 2
down 3
forward 5
down 4
forward 7
up 4
forward 6
up 8
forward 1
up 9
down 4
forward 2
down 1
forward 7
down 3
down 2
forward 5
down 3
down 9
down 9
up 5
forward 2
down 8
up 9
forward 4
down 3
forward 3
forward 6
up 2
forward 3
down 1
down 1
down 1
forward 7
forward 4
forward 7
down 5
down 6
down 2
forward 6
down 3
up 6
forward 4
down 8
up 1
forward 8
down 2
down 5
forward 4
down 9
forward 2
forward 2
down 3
forward 3
down 1
forward 2
down 7
forward 3
forward 9
up 9
forward 6
forward 2
down 1
down 5
forward 6
forward 6
down 3
up 3
forward 9
down 7
down 2
down 4
down 7
forward 5
up 4
forward 8
down 5
forward 7
down 7
up 7
down 8
forward 9
up 5
forward 1
down 2
forward 5
down 9
forward 3
down 5
forward 8
forward 3
up 5
down 2
up 3
forward 2
up 1
up 5
down 8
forward 2
down 5
up 4
up 5
up 2
forward 9
forward 6
down 9
up 9
forward 6
forward 4
forward 3
forward 7
up 1
down 2
down 6
down 1
forward 8
down 1
forward 6
down 8
forward 8
down 7
down 6
down 5
forward 2
up 8
up 6
up 5
down 1
forward 1
down 1
down 5
forward 7
forward 3
down 1
forward 5
forward 5
forward 8
down 1
up 2
down 6
up 6
forward 6
forward 6
down 3
forward 9
up 4
forward 4
down 6
up 1
forward 6
down 2
down 5
down 2
down 6
up 5
down 1
down 1
forward 3
forward 7
forward 3
up 2
down 8
down 4
down 1
down 5
down 1
down 9
forward 6
down 6
down 4
down 6
down 8
forward 4
down 6
down 7
forward 8
down 4
up 4
down 1
forward 1
forward 4
forward 1
up 9
down 7
forward 7
down 4
forward 1
up 4
forward 4
down 5
down 7
forward 5
forward 7
forward 1
forward 1
forward 9
forward 9
up 3
forward 4
down 2
forward 9
up 8
forward 3
up 5
down 3
down 8
forward 8
down 6
forward 1
down 6
down 6
up 9
down 2
forward 8
up 9
down 7
up 9
up 8
up 1
forward 6
forward 9
down 2
forward 8
down 1
up 4
forward 4
forward 7
up 2
forward 4
down 5
forward 3
down 2
down 7
down 4
down 2
up 5
down 5
down 5
down 4
up 1
forward 7
down 6
forward 5
forward 1
down 4
up 9
down 5
forward 7
forward 5
down 6
down 3
down 9
down 1
forward 6
up 2
down 7
down 3
down 6
up 3
down 4
down 4
forward 9
down 3
forward 2
down 9
down 8
up 4
down 2
forward 2
down 5
down 4
down 4
down 2
forward 6
down 3
forward 1
down 4
forward 7
down 5
up 4
down 6
forward 8
down 6
forward 2
forward 4
forward 5
forward 7
forward 4
forward 5
down 8
down 7
forward 3
forward 5
up 7
forward 1
down 4
forward 5
forward 4
forward 4
down 5
down 8
forward 8
down 1
down 1
down 5
up 5
forward 6
down 6
forward 3
forward 4
forward 7
forward 4
down 8
forward 2
down 4
forward 4
down 1
up 2
forward 6
up 1
down 7
down 9
forward 7
forward 2
up 3
down 2
down 9
down 5
up 7
forward 1
forward 8
down 8
up 3
down 3
forward 9
up 4
down 5
up 5
down 1
up 8
forward 9
down 3
up 6
forward 6
forward 1
down 1
forward 9
down 8
forward 8
down 6
up 9
down 4
up 3
up 9
forward 2
down 2
down 2
forward 3
down 2
forward 5
forward 4
up 8
forward 9
up 7
forward 2
down 5
down 6
forward 8
up 7
forward 4
forward 3
up 5
down 8
forward 3
up 2
down 3
forward 6
down 9
down 2
down 6
down 2
forward 7
forward 5
forward 7
down 8
forward 2
down 2
forward 8
up 8
forward 4
forward 3
up 5
down 3
forward 3
up 8
up 7
down 4
down 1
forward 2
down 1
up 6
up 4
down 3
up 1
forward 7
forward 7
forward 7
forward 8
down 1
forward 5
down 6
forward 9
forward 7
forward 7
down 4
up 4
down 6
down 9
up 4
up 2
up 6
forward 4
up 4
up 6
down 2
forward 4
down 9
forward 9
forward 9
down 1
forward 7
down 2
down 7
down 8
down 8
down 9
up 9
down 5
forward 5
forward 7
forward 4
down 7
forward 8
forward 1
down 8
up 9
down 7
forward 9
forward 4
forward 8
down 9
forward 4
down 3
forward 3
down 1
down 1
down 2
up 5
down 2
down 1
down 8
forward 3
up 2
forward 7
down 3
down 8
down 1
forward 4
forward 7
down 5
forward 6
down 6
down 2
forward 6
down 3
up 4
down 7
forward 7
up 1
up 9
down 1
down 2
down 8
down 7
up 1
forward 7
down 2
forward 4
forward 6
forward 9
down 6
forward 2
up 8
down 2
up 2
up 5
down 8
up 6
down 9
forward 6
down 8
down 6
down 1
up 7
up 6
down 8
forward 2
up 7
forward 5
forward 7
forward 7
up 5
forward 2
down 9
up 2
up 8
up 2
down 3
down 7
forward 9
down 3
up 9
forward 8
up 8
forward 4
forward 8
forward 6
up 1
down 3
up 1
down 1
forward 2
forward 1
forward 4
forward 7
up 8
down 9
up 2
down 7
forward 4
down 3
forward 4
forward 2
down 9
forward 8
forward 5
forward 3
down 6
forward 4
forward 4
forward 9
forward 4
up 5
down 7
up 6
forward 5
down 5
forward 4
down 5
forward 7
forward 3
forward 5
down 5
forward 4
down 5
up 4
down 8
up 3
down 3
up 5
forward 4
forward 5
down 6
forward 6
forward 1
forward 8
down 6
down 9
up 5
forward 2
forward 8
up 6
down 6
forward 2
down 8
forward 7
forward 7
down 5
forward 5
forward 8
forward 1
down 4
down 2
down 5
up 4
forward 3
forward 5
down 4
down 7
down 4
up 9
up 6
forward 1
down 8
up 8
up 9
forward 2
forward 1
down 6
forward 6
down 4
forward 7
up 2
up 1
forward 4
down 1
forward 8
forward 3
up 7
up 5
down 1
forward 8
forward 6
up 6
forward 9
down 5
down 9
forward 2
down 3
up 1
up 7
down 1
forward 8
up 9
down 1
down 5
down 7
down 5
down 5
down 5
up 9
forward 9
forward 7
forward 4
forward 6
down 5
down 3
forward 9
forward 1
down 1
down 8
up 4
down 9
forward 9
up 1
down 5
forward 8
up 6
forward 3
down 6
up 8
down 7
forward 3
forward 6
down 7
forward 6
forward 4
forward 4
down 4
forward 6
forward 5
down 6
forward 6
down 7
forward 6
forward 3
up 4
up 2
up 6
down 2
down 8
forward 5
forward 1
up 4
forward 7
forward 9
up 6
down 7
down 3
up 5
forward 5
down 8
up 1
down 1
down 3
down 2
down 1
forward 5
down 3
down 5
forward 7
forward 9
down 3
forward 7
forward 5
forward 4
forward 2
forward 7
forward 8
forward 6
down 8
forward 5
forward 6
forward 6
down 8
down 2
forward 4
down 7
forward 6
down 7
down 4
forward 6
up 6
forward 4
forward 9
forward 2
forward 3
forward 1
down 8
down 3
forward 4
up 3
forward 7
forward 1
down 7
down 8
forward 1
up 8
forward 8
up 8
down 5
forward 6
down 8
down 4
down 9
up 1
down 3
forward 6
down 6
forward 7
forward 3
down 6
down 6
forward 4
down 4
down 1
down 8
forward 2
forward 8
forward 8
down 6
forward 9
down 9
down 5
down 5
forward 7
down 1
forward 1
down 1
down 6
down 1
forward 1
up 6
up 9
forward 5
down 6
forward 8
forward 6
down 7
forward 1
forward 4
forward 9
forward 2
forward 4
down 2
forward 1
forward 8
down 1
down 1
forward 4
down 5
down 3
down 9
down 2
up 8
down 7
down 1
down 9
forward 2
forward 2
up 3
forward 3
down 3
forward 5
forward 9
down 7
up 7
down 9
forward 3
forward 7
down 1
forward 8
down 8
forward 1
down 8
down 6
forward 2
down 3
down 1
down 8
forward 3
up 5
down 7
up 2
up 8
forward 5
up 7
down 6
up 7
down 9
forward 5
up 4
forward 9
down 5
up 7
down 2
up 2
up 7
forward 5
down 6
forward 4
down 4
down 3
forward 2
up 2
down 5
forward 8
down 3
up 7
down 1
down 7
forward 7
forward 4
forward 7
down 2
down 9
down 6
down 9
down 2
down 9
down 7
down 5
forward 4
up 5
up 7
forward 2
forward 7
down 3
down 3
forward 4
+61
View File
@@ -0,0 +1,61 @@
use crate::utils::read_file;
use anyhow::Result;
fn parse_line(s: &str) -> (&str, i32) {
let parsed: Vec<&str> = s.splitn(2, ' ').collect();
let instruction = parsed[0];
let quantity = parsed[1].parse::<i32>().unwrap();
(instruction, quantity)
}
fn follow_course(s: &str) -> i32 {
let (mut pos, mut depth) = (0, 0);
s.lines().for_each(|line| match parse_line(line) {
("forward", d) => pos += d,
("down", d) => depth += d,
("up", d) => depth -= d,
_ => unreachable!(),
});
pos * depth
}
fn follow_course_better(s: &str) -> i32 {
let (mut pos, mut depth, mut aim) = (0, 0, 0);
s.lines().for_each(|line| match parse_line(line) {
("forward", d) => {
pos += d;
depth += aim * d;
}
("down", d) => aim += d,
("up", d) => aim -= d,
_ => unreachable!(),
});
pos * depth
}
pub(crate) fn run() -> Result<(usize, usize)> {
let input = read_file("data/day02.txt")?;
Ok((
follow_course(&input) as usize,
follow_course_better(&input) as usize,
))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_example() {
let input = read_file("data/day02-test.txt").unwrap();
assert_eq!(follow_course(&input), 150);
assert_eq!(follow_course_better(&input), 900);
}
#[test]
fn test_my_data() {
let input = read_file("data/day02.txt").unwrap();
assert_eq!(follow_course(&input), 2070300);
assert_eq!(follow_course_better(&input), 2078985210);
}
}
+2
View File
@@ -1,9 +1,11 @@
use anyhow::Result;
mod day01;
mod day02;
mod utils;
fn main() -> Result<()> {
println!("day01: {:?}", day01::run()?);
println!("day02: {:?}", day02::run()?);
Ok(())
}