feat: complete day 2

This commit is contained in:
Rekai Nyangadzayi Musuka 2021-12-02 04:28:27 -04:00
parent ca9eb632b8
commit faf02e34fa
5 changed files with 120 additions and 5 deletions

View File

@ -1,9 +1,47 @@
fn solve_part1(input: &str) -> i32 { fn solve_part1(input: &str) -> i32 {
todo!() let (horiz, _, depth) = solve(input);
horiz * depth
} }
fn solve_part2(input: &str) -> i32 { fn solve_part2(input: &str) -> i32 {
todo!() let (horiz, depth, _) = solve(input);
horiz * depth
}
fn solve(input: &str) -> (i32, i32, i32) {
let (mut horiz, mut depth, mut aim) = (0, 0, 0);
for (dir, dist) in parse_input(input) {
match dir {
Some("forward") => {
horiz += dist;
depth += aim * dist;
}
Some("up") => aim -= dist,
Some("down") => aim += dist,
other => panic!("{:#?} is invalid", other),
}
}
(horiz, depth, aim)
}
fn parse_input(input: &str) -> Vec<(Option<&str>, i32)> {
input
.lines()
.map(|s| {
let mut it = s.split_whitespace();
let dir = it.next();
let dist = it
.next()
.map(|s| s.parse().ok())
.flatten()
.expect("parse &str as i32");
(dir, dist)
})
.collect()
} }
pub fn run(input: String) { pub fn run(input: String) {
@ -15,4 +53,16 @@ pub fn run(input: String) {
} }
#[cfg(test)] #[cfg(test)]
mod tests {} mod tests {
const PART_1_EXAMPLE_INPUT: &str = "forward 5\ndown 5\nforward 8\nup 3\ndown 8\nforward 2";
#[test]
fn part1() {
assert_eq!(super::solve_part1(PART_1_EXAMPLE_INPUT), 150);
}
#[test]
fn part2() {
assert_eq!(super::solve_part2(PART_1_EXAMPLE_INPUT), 900);
}
}

30
rust/2021/src/day_03.rs Normal file
View File

@ -0,0 +1,30 @@
fn solve_part1(input: &str) -> i32 {
todo!();
}
fn solve_part2(input: &str) -> i32 {
todo!();
}
pub fn run(input: String) {
println!("--- Part 1 ---");
println!("Answer: {}", solve_part1(&input));
println!();
println!("--- Part 2 ---");
println!("Answer: {}", solve_part2(&input))
}
#[cfg(test)]
mod tests {
const EXAMPLE_INPUT: &str = todo!();
#[test]
fn part1() {
todo!();
}
#[test]
fn part2() {
todo!();
}
}

View File

@ -0,0 +1,30 @@
fn solve_part1(input: &str) -> i32 {
todo!();
}
fn solve_part2(input: &str) -> i32 {
todo!();
}
pub fn run(input: String) {
println!("--- Part 1 ---");
println!("Answer: {}", solve_part1(&input));
println!();
println!("--- Part 2 ---");
println!("Answer: {}", solve_part2(&input))
}
#[cfg(test)]
mod tests {
const EXAMPLE_INPUT: &str = todo!();
#[test]
fn part1() {
todo!();
}
#[test]
fn part2() {
todo!();
}
}

View File

@ -1,6 +1,9 @@
mod day_01; mod day_01;
mod day_02; mod day_02;
mod day_03;
pub const INPUT_PATH: &str = "./input/2021/day3.txt";
pub fn run(input: String) { pub fn run(input: String) {
day_02::run(input); day_03::run(input);
} }

View File

@ -1,4 +1,6 @@
use advent_of_code_2021::INPUT_PATH;
fn main() { fn main() {
let input = std::fs::read_to_string("./input/2021/day2.txt").expect("open input file"); let input = std::fs::read_to_string(INPUT_PATH).expect("open input file");
advent_of_code_2021::run(input); advent_of_code_2021::run(input);
} }