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