From b91f98240b57af68c48cec93de46ec4165729e6b Mon Sep 17 00:00:00 2001 From: kageru Date: Sun, 1 Dec 2019 19:00:25 +0100 Subject: [PATCH] Add day 1 in Rust --- 2019/1/day1.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 2019/1/day1.rs diff --git a/2019/1/day1.rs b/2019/1/day1.rs new file mode 100644 index 0000000..70f4d6d --- /dev/null +++ b/2019/1/day1.rs @@ -0,0 +1,32 @@ +use std::io::{self, BufRead}; +use std::ops::Div; + +fn main() { + let lines: Vec = io::stdin() + .lock() + .lines() + .map(|l| l.unwrap().parse().unwrap()) + .collect(); + println!("Part 1: {}", part1(lines.clone())); + println!("Part 2: {}", part2(lines)); +} + +fn part1(numbers: Vec) -> u32 { + numbers.into_iter().map(cost).sum() +} + +fn part2(numbers: Vec) -> u32 { + numbers.into_iter().map(|m| cost_rec(m, 0)).sum() +} + +fn cost(mass: u32) -> u32 { + mass.div(3).saturating_sub(2) +} + +fn cost_rec(mass: u32, acc: u32) -> u32 { + let c = cost(mass); + match c { + 0 => acc, + _ => cost_rec(c, acc + c) + } +}