Added day 2 code for part 1 and 2
Signed-off-by: Louis Vallat <louis@louis-vallat.xyz>
This commit is contained in:
parent
c73c41bf4c
commit
f420e96477
8
day2/Cargo.toml
Normal file
8
day2/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
||||
[package]
|
||||
name = "day2"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
1000
day2/input
Normal file
1000
day2/input
Normal file
File diff suppressed because it is too large
Load Diff
57
day2/src/main.rs
Normal file
57
day2/src/main.rs
Normal file
@ -0,0 +1,57 @@
|
||||
use std::{fs, env, vec};
|
||||
|
||||
|
||||
fn read_input(path: &str) -> String {
|
||||
return fs::read_to_string(path).expect("Cannot read file.");
|
||||
}
|
||||
|
||||
fn parse_input(s: &str) -> Vec<(String, i32)> {
|
||||
let mut r:Vec<(String, i32)> = vec![];
|
||||
let v = s.split("\n").into_iter();
|
||||
for e in v {
|
||||
let p = e.split_whitespace().collect::<Vec<&str>>();
|
||||
if p.len() == 2 && p[1].parse::<i32>().is_ok() {
|
||||
r.push((p[0].to_owned(), p[1].parse::<i32>().unwrap()));
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
fn compute_horizontal_depth_aim(t: (String, i32), a: (i32, i32, i32)) -> (i32, i32, i32) {
|
||||
return match t.0.as_str() {
|
||||
"up" => (a.0, a.1, a.2 - t.1),
|
||||
"down" => (a.0, a.1, a.2 + t.1),
|
||||
"forward" => (a.0 + t.1, a.1 + a.2 * t.1, a.2),
|
||||
_ => a
|
||||
};
|
||||
}
|
||||
|
||||
fn compute_horizontal_depth(t: (String, i32), a: (i32, i32)) -> (i32, i32) {
|
||||
return match t.0.as_str() {
|
||||
"up" => (a.0, a.1 - t.1),
|
||||
"down" => (a.0, a.1 + t.1),
|
||||
"forward" => (a.0 + t.1, a.1),
|
||||
_ => a
|
||||
};
|
||||
}
|
||||
|
||||
fn get_horizontal_depth_aim(v: Vec<(String, i32)>) -> (i32, i32, i32) {
|
||||
return v.into_iter().fold((0, 0, 0), |acc, e| compute_horizontal_depth_aim(e, acc));
|
||||
}
|
||||
|
||||
fn get_horizontal_depth(v: Vec<(String, i32)>) -> (i32, i32) {
|
||||
return v.into_iter().fold((0, 0), |acc, e| compute_horizontal_depth(e, acc));
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
for arg in args.iter().skip(1) {
|
||||
let v = parse_input(&read_input(&arg));
|
||||
let r1 = get_horizontal_depth(v.clone());
|
||||
let r2 = get_horizontal_depth_aim(v);
|
||||
println!("[{}]", &arg);
|
||||
println!("\tPart 1 {} x {} = {}", r1.0, r1.1, r1.0 * r1.1);
|
||||
println!("\tPart 2 {} x {} = {}", r2.0, r2.1, r2.0 * r2.1);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user