Add Rust solutions for days 1-3
Signed-off-by: Alek Ratzloff <alekr@jsausa.com>
This commit is contained in:
56
day01/Day01.rs
Normal file
56
day01/Day01.rs
Normal file
@@ -0,0 +1,56 @@
|
||||
use std::io::{self, Read};
|
||||
|
||||
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
|
||||
|
||||
fn get_input_string() -> io::Result<String> {
|
||||
let mut buffer = String::new();
|
||||
io::stdin().read_to_string(&mut buffer)?;
|
||||
Ok(buffer)
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let mass_list: Vec<_> = get_input_string()?
|
||||
.split("\n")
|
||||
.filter(|n| !n.is_empty())
|
||||
.map(|n| n.parse::<u64>().unwrap())
|
||||
.collect();
|
||||
part1(&mass_list);
|
||||
part2(&mass_list);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn part1(mass_list: &Vec<u64>) {
|
||||
let total: u64 = mass_list.iter()
|
||||
.copied()
|
||||
.map(fuel_req)
|
||||
.sum();
|
||||
|
||||
println!("Part 1: {}", total);
|
||||
}
|
||||
|
||||
fn fuel_req(mass: u64) -> u64 {
|
||||
let frac = mass / 3;
|
||||
if frac <= 2 {
|
||||
0
|
||||
} else {
|
||||
frac - 2
|
||||
}
|
||||
}
|
||||
|
||||
fn part2(mass_list: &Vec<u64>) {
|
||||
let total: u64 = mass_list.iter()
|
||||
.copied()
|
||||
.map(full_fuel_req)
|
||||
.sum();
|
||||
|
||||
println!("Part 2: {}", total);
|
||||
}
|
||||
|
||||
fn full_fuel_req(mass: u64) -> u64 {
|
||||
let req = fuel_req(mass);
|
||||
if req == 0 {
|
||||
0
|
||||
} else {
|
||||
req + full_fuel_req(req)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user