day1: change to iterator style

This commit is contained in:
Stefan Bühler 2019-12-01 14:31:36 +01:00
parent 45a381165b
commit 17a271e24e

View File

@ -1,10 +1,12 @@
fn fuel_for_modules1(input: &str) -> i64 {
let mut fuel: i64 = 0;
for module in input.split_whitespace() {
let module: i64 = module.parse().unwrap();
fuel += (module / 3) - 2;
}
fuel
fn fuel_for_mass1(mass: u64) -> u64 {
mass / 3 - 2
}
fn fuel_for_modules1<I>(input: I) -> u64
where
I: IntoIterator<Item = u64>,
{
input.into_iter().map(fuel_for_mass1).sum()
}
fn fuel_for_mass2(mass: u64) -> u64 {
@ -13,17 +15,15 @@ fn fuel_for_mass2(mass: u64) -> u64 {
fuel + fuel_for_mass2(fuel)
}
fn fuel_for_modules2(input: &str) -> u64 {
let mut fuel: u64 = 0;
for module in input.split_whitespace() {
let module: u64 = module.parse().unwrap();
fuel += fuel_for_mass2(module);
}
fuel
fn fuel_for_modules2<I>(input: I) -> u64
where
I: IntoIterator<Item = u64>,
{
input.into_iter().map(fuel_for_mass2).sum()
}
fn main() {
let input = include_str!("input.txt");
println!("Fuel 1: {}", fuel_for_modules1(input));
let input = include_str!("input.txt").split_whitespace().map(|s| s.parse::<u64>().unwrap());
println!("Fuel 1: {}", fuel_for_modules1(input.clone()));
println!("Fuel 2: {}", fuel_for_modules2(input));
}