Complete day 2
This commit is contained in:
parent
b905c5b69b
commit
51251ea83e
8
Cargo.lock
generated
8
Cargo.lock
generated
@ -19,3 +19,11 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"common",
|
"common",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day02"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"common",
|
||||||
|
]
|
||||||
|
10
crates/day02/Cargo.toml
Normal file
10
crates/day02/Cargo.toml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "day02"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = "1.0"
|
||||||
|
common = { path = "../common" }
|
1000
crates/day02/src/input/input.txt
Executable file
1000
crates/day02/src/input/input.txt
Executable file
File diff suppressed because it is too large
Load Diff
6
crates/day02/src/input/test.txt
Normal file
6
crates/day02/src/input/test.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
forward 5
|
||||||
|
down 5
|
||||||
|
forward 8
|
||||||
|
up 3
|
||||||
|
down 8
|
||||||
|
forward 2
|
73
crates/day02/src/main.rs
Normal file
73
crates/day02/src/main.rs
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
use anyhow::Result;
|
||||||
|
use common::instrument;
|
||||||
|
|
||||||
|
const INPUT: &str = include_str!("input/input.txt");
|
||||||
|
|
||||||
|
fn solve_part1(input: &str) -> Result<i32> {
|
||||||
|
let lines = input.trim().lines();
|
||||||
|
|
||||||
|
let mut horizontal = 0;
|
||||||
|
let mut depth = 0;
|
||||||
|
|
||||||
|
for line in lines {
|
||||||
|
let mut parts = line.split(" ");
|
||||||
|
let command = parts.next().unwrap();
|
||||||
|
let value = parts.next().unwrap().parse::<i32>()?;
|
||||||
|
|
||||||
|
match command {
|
||||||
|
"forward" => horizontal += value,
|
||||||
|
"up" => depth -= value,
|
||||||
|
"down" => depth += value,
|
||||||
|
_ => panic!("Unknown command: {}", command),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(horizontal * depth)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve_part2(input: &str) -> Result<i32> {
|
||||||
|
let lines: Vec<&str> = input.trim().lines().collect();
|
||||||
|
|
||||||
|
let mut horizontal = 0;
|
||||||
|
let mut depth = 0;
|
||||||
|
let mut aim = 0;
|
||||||
|
|
||||||
|
for line in lines {
|
||||||
|
let mut parts = line.split(" ");
|
||||||
|
let command = parts.next().unwrap();
|
||||||
|
let value = parts.next().unwrap().parse::<i32>()?;
|
||||||
|
|
||||||
|
match command {
|
||||||
|
"forward" => {
|
||||||
|
horizontal += value;
|
||||||
|
depth += aim * value;
|
||||||
|
}
|
||||||
|
"up" => aim -= value,
|
||||||
|
"down" => aim += value,
|
||||||
|
_ => panic!("Unknown command: {}", command),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(horizontal * depth)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
instrument!(solve_part1(INPUT).unwrap(), solve_part2(INPUT).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
const TEST_INPUT: &str = include_str!("input/test.txt");
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn solves_part1() {
|
||||||
|
assert_eq!(solve_part1(TEST_INPUT).unwrap(), 150);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn solves_part2() {
|
||||||
|
assert_eq!(solve_part2(TEST_INPUT).unwrap(), 900);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user