Browse Source

day2 works

master
Michael Preisach 6 years ago
parent
commit
b8596fd912
  1. 72
      src/day2.rs
  2. 12
      src/main.rs

72
src/day2.rs

@ -0,0 +1,72 @@
// #[derive(Copy, Clone)]
pub struct Data {
pub program: Vec<u32>,
}
impl Data {
pub fn new() -> Data {
Data {
program: Vec::new(),
}
}
pub fn parse(&mut self, input: String) {
for line in input.split(",") {
let sline = line.to_string();
// println!("{}", sline);
self.program.push(match sline.parse::<u32>() {
Ok(i) => i,
Err(_) => 0,
});
}
}
pub fn compute1(&mut self) -> u32 {
let mut pc: usize = 0;
while pc < self.program.len() {
let opcode = self.program[pc];
match opcode {
1 | 2 => {
if self.program.len() < pc + 3 {
break;
}
let arg1 = self.program[pc + 1] as usize;
let arg2 = self.program[pc + 2] as usize;
let res = self.program[pc + 3] as usize;
match opcode {
1 => self.program[res] = self.program[arg1] + self.program[arg2],
2 => self.program[res] = self.program[arg1] * self.program[arg2],
_ => {}
};
}
99 => break,
_ => {
println!(
"An Error happened: Instruction {} at pos {}",
self.program[pc], pc
);
break;
}
}
pc += 4;
}
self.program[0]
}
pub fn compute2(&self) -> u32 {
let mut result = 0u32;
let mut value = 0u32;
while result != 19690720 && value < 10000 {
let mut data = Data::new();
data.program = vec![0; self.program.len()];
data.program.copy_from_slice(&self.program);
data.program[1] = value / 100 as u32;
data.program[2] = value % 100 as u32;
// println!("{:?}", data.program);
result = data.compute1();
value += 1;
}
value - 1
}
}

12
src/main.rs

@ -2,6 +2,7 @@ use std::fs::File;
use std::io::Read;
mod day1;
mod day2;
mod tests;
fn main() {
@ -16,6 +17,17 @@ fn main() {
println!("Error: {}", msg);
}
}
match read_file("../day2.txt") {
Ok(input) => {
let mut data = day2::Data::new();
data.parse(input);
println!("Day2 Challenge1 result = {}", data.compute1());
println!("Day2 Challenge2 result = {}", data.compute2());
}
Err(msg) => {
println!("Error: {}", msg);
}
}
}
fn read_file(filename: &str) -> Result<String, std::io::Error> {

Loading…
Cancel
Save