diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..a41a05d --- /dev/null +++ b/src/main.rs @@ -0,0 +1,60 @@ +use std::fs; + +fn read_file(file : &str) -> String { + fs::read_to_string(file).unwrap() +} + +fn required_fuel(mass : u32) -> u32 { + (mass / 3).saturating_sub(2) +} + +fn required_fuel_with_fuel(mass : u32) -> u32 { + let mut total = 0; + let mut current = mass; + loop { + current = required_fuel(current); + total += current; + if current == 0 { + break; + } + } + total +} + +fn day1() { + let input = read_file("input1"); + let sum : u32 = input.split('\n') + .filter(|x| !x.is_empty()) + .map(|x| x.parse::<u32>().unwrap()) + .map(|x| required_fuel(x)) + .sum(); + println!("1a: {}", sum); + + let sum2 : u32 = input.split('\n') + .filter(|x| !x.is_empty()) + .map(|x| x.parse::<u32>().unwrap()) + .map(|x| required_fuel_with_fuel(x)) + .sum(); + println!("1b: {}", sum2); +} + +fn main() { + day1(); +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_day1() { + assert_eq!(required_fuel(12), 2); + assert_eq!(required_fuel(14), 2); + assert_eq!(required_fuel(1969), 654); + assert_eq!(required_fuel(100756), 33583); + + assert_eq!(required_fuel_with_fuel(14), 2); + assert_eq!(required_fuel_with_fuel(1969), 966); + assert_eq!(required_fuel_with_fuel(100756), 50346); + } +} |
