Browse Source

Day1 works - no unit tests yet

master
Michael Preisach 7 years ago
parent
commit
69cebf03f4
  1. 79
      src/day1.rs
  2. 28
      src/main.rs

79
src/day1.rs

@ -0,0 +1,79 @@
use std::collections::HashSet;
const DEBUG : bool = false;
pub struct Data {
input : Vec<i32>,
}
impl Data {
pub fn new() -> Data {
Data {
input : Vec::new(),
}
}
pub fn parse(&mut self, input: String) {
for line in input.split("\n") {
let mut sline = line.to_string();
if DEBUG {
print!("{} -> ", sline);
}
if sline.len() >= 2 {
let mult: i32 = match sline.remove(0) {
'+' => 1,
'-' => -1,
_ => 0,
};
if DEBUG {
print!("{}, {}", mult, sline.parse::<i32>().unwrap());
}
self.input.push(mult * sline.parse::<i32>().unwrap());
}
}
if DEBUG {
for f in self.input.iter() {
print!("{} ",f);
}
}
}
pub fn challenge1(&mut self) -> i32 {
let mut result : i32 = 0;
for f in self.input.iter() {
result = result + f;
}
result
}
pub fn challenge2(&mut self) -> i32 {
let mut dup : HashSet<i32> = HashSet::new();
let mut found : bool = false;
let mut result : i32 = 0;
while !found {
for i in self.input.clone() {
if !found {
result = result + i;
if dup.contains(&result) {
found = true;
if DEBUG {
println!("{} == elem", result);
}
}
else {
dup.insert(result);
if DEBUG {
for elem in dup.clone() {
print!("{} ", elem);
}
println!("{} != elem", result);
}
}
}
}
}
result
}
}

28
src/main.rs

@ -1,3 +1,29 @@
use std::fs::File;
use std::io::Read;
mod day1;
fn main() { fn main() {
println!("Hello, world!"); match read_file("day1.txt") {
Ok(input) => {
let mut d1 = day1::Data::new();
d1.parse(input);
println!("Day1 Challenge1 result = {}",d1.challenge1());
println!("Day1 Challenge2 result = {}",d1.challenge2());
},
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),
}
}
Loading…
Cancel
Save