3 changed files with 162 additions and 0 deletions
@ -0,0 +1,39 @@ |
|||||
|
pub struct Data { |
||||
|
masses: Vec<i32>, |
||||
|
} |
||||
|
|
||||
|
impl Data { |
||||
|
pub fn new() -> Data { |
||||
|
Data { masses: Vec::new() } |
||||
|
} |
||||
|
pub fn parse(&mut self, input: String) { |
||||
|
let mut mass: i32; |
||||
|
for line in input.split("\n") { |
||||
|
let sline = line.to_string(); |
||||
|
if sline.len() >= 1 { |
||||
|
mass = sline.parse::<i32>().unwrap(); |
||||
|
self.masses.push(mass); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
pub fn compute1(&self) -> i32 { |
||||
|
let mut fuel: i32 = 0; |
||||
|
for mass in self.masses.iter() { |
||||
|
fuel += (mass / 3) - 2; |
||||
|
} |
||||
|
fuel |
||||
|
} |
||||
|
|
||||
|
pub fn compute2(&self) -> i32 { |
||||
|
let mut total: i32 = 0; |
||||
|
for mass in self.masses.iter() { |
||||
|
let mut fuel = mass / 3 - 2; |
||||
|
while fuel > 0 { |
||||
|
total += fuel; |
||||
|
fuel = fuel / 3 - 2; |
||||
|
} |
||||
|
} |
||||
|
total |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,32 @@ |
|||||
|
use std::fs::File; |
||||
|
use std::io::Read; |
||||
|
|
||||
|
mod day1; |
||||
|
mod tests; |
||||
|
|
||||
|
fn main() { |
||||
|
match read_file("../day1.txt") { |
||||
|
Ok(input) => { |
||||
|
let mut data = day1::Data::new(); |
||||
|
data.parse(input); |
||||
|
println!("Day1 Challenge1 result = {}", data.compute1()); |
||||
|
println!("Day1 Challenge2 result = {}", data.compute2()); |
||||
|
} |
||||
|
Err(msg) => { |
||||
|
println!("Error: {}", msg); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
fn read_file(filename: &str) -> Result<String, std::io::Error> { |
||||
|
match File::open(filename) { |
||||
|
Ok(mut file) => { |
||||
|
let mut input = String::new(); |
||||
|
match file.read_to_string(&mut input) { |
||||
|
Ok(_) => Ok(input), |
||||
|
Err(msg) => Err(msg), |
||||
|
} |
||||
|
} |
||||
|
Err(msg) => Err(msg), |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,91 @@ |
|||||
|
use super::*; |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_11() { |
||||
|
let input = String::from("12"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute1(); |
||||
|
assert_eq!(res, 2); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_12() { |
||||
|
let input = String::from("14"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute1(); |
||||
|
assert_eq!(res, 2); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_13() { |
||||
|
let input = String::from("12\n14"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute1(); |
||||
|
assert_eq!(res, 4); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_14() { |
||||
|
let input = String::from("1969"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute1(); |
||||
|
assert_eq!(res, 654); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_15() { |
||||
|
let input = String::from("100756"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute1(); |
||||
|
assert_eq!(res, 33583); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_21() { |
||||
|
let input = String::from("12"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute2(); |
||||
|
assert_eq!(res, 2); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_22() { |
||||
|
let input = String::from("14"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute2(); |
||||
|
assert_eq!(res, 2); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_23() { |
||||
|
let input = String::from("12\n14"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute2(); |
||||
|
assert_eq!(res, 4); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_24() { |
||||
|
let input = String::from("1969"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute2(); |
||||
|
assert_eq!(res, 966); |
||||
|
} |
||||
|
|
||||
|
#[test] |
||||
|
fn day1_25() { |
||||
|
let input = String::from("100756"); |
||||
|
let mut d1 = day1::Data::new(); |
||||
|
d1.parse(input); |
||||
|
let res = d1.compute2(); |
||||
|
assert_eq!(res, 50346); |
||||
|
} |
||||
Loading…
Reference in new issue