Browse Source

day1 completed

master
Michael Preisach 6 years ago
parent
commit
860bb871f1
  1. 39
      src/day1.rs
  2. 32
      src/main.rs
  3. 91
      src/tests.rs

39
src/day1.rs

@ -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
}
}

32
src/main.rs

@ -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),
}
}

91
src/tests.rs

@ -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…
Cancel
Save