Files
adventofcode-2019/day01/Day01.rs

57 lines
1.1 KiB
Rust
Raw Normal View History

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)
}
}