cleaned up double code in IntCodeComputer
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
mod tasks;
|
||||
|
||||
fn main() {
|
||||
tasks::day07::run();
|
||||
tasks::day05::run();
|
||||
}
|
||||
|
||||
@@ -150,65 +150,8 @@ impl IntCodeComputer {
|
||||
}
|
||||
|
||||
pub fn run_until_end(&mut self) {
|
||||
let mut op = Op::from(self.pc, &self.ram);
|
||||
let mut inputs = self.input_storage.iter();
|
||||
while op.opcode != OpCode::Terminate {
|
||||
match op.opcode {
|
||||
OpCode::Add => {
|
||||
let r = op.params[0].retrieve(&self.ram) + op.params[1].retrieve(&self.ram);
|
||||
op.params[2].store(&mut self.ram, r);
|
||||
self.pc += 4;
|
||||
}
|
||||
OpCode::Multiply => {
|
||||
let r = op.params[0].retrieve(&self.ram) * op.params[1].retrieve(&self.ram);
|
||||
op.params[2].store(&mut self.ram, r);
|
||||
self.pc += 4;
|
||||
}
|
||||
OpCode::Input => {
|
||||
let v = inputs.next().expect("Not enough inputs given");
|
||||
op.params[0].store(&mut self.ram, *v);
|
||||
self.pc += 2;
|
||||
}
|
||||
OpCode::Output => {
|
||||
self.output_storage.push(op.params[0].retrieve(&self.ram));
|
||||
self.pc += 2;
|
||||
}
|
||||
OpCode::JumpIfTrue => {
|
||||
if op.params[0].retrieve(&self.ram) > 0 {
|
||||
self.pc = op.params[1].retrieve(&self.ram) as usize;
|
||||
} else {
|
||||
self.pc += 3;
|
||||
}
|
||||
}
|
||||
OpCode::JumpIfFalse => {
|
||||
if op.params[0].retrieve(&self.ram) == 0 {
|
||||
self.pc = op.params[1].retrieve(&self.ram) as usize;
|
||||
} else {
|
||||
self.pc += 3;
|
||||
}
|
||||
}
|
||||
OpCode::LessThan => {
|
||||
let r = if op.params[0].retrieve(&self.ram) < op.params[1].retrieve(&self.ram) {
|
||||
1
|
||||
} else {
|
||||
0
|
||||
};
|
||||
op.params[2].store(&mut self.ram, r);
|
||||
self.pc += 4;
|
||||
}
|
||||
OpCode::Equals => {
|
||||
let r = if op.params[0].retrieve(&self.ram) == op.params[1].retrieve(&self.ram)
|
||||
{
|
||||
1
|
||||
} else {
|
||||
0
|
||||
};
|
||||
op.params[2].store(&mut self.ram, r);
|
||||
self.pc += 4;
|
||||
}
|
||||
OpCode::Terminate => {}
|
||||
}
|
||||
op = Op::from(self.pc, &self.ram);
|
||||
if !self.run_until_input_empty() {
|
||||
panic!("There wasn't enough input given to run until the program halted");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user