Day 5
This commit is contained in:
parent
c944c2a758
commit
e361844dd9
3 changed files with 1019 additions and 0 deletions
11
day5/2/Cargo.toml
Normal file
11
day5/2/Cargo.toml
Normal file
|
@ -0,0 +1,11 @@
|
|||
[package]
|
||||
name = "intcode"
|
||||
version = "0.1.0"
|
||||
authors = ["Armin Friedl <dev@friedl.net>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
log = "0.4"
|
||||
env_logger="0.7"
|
678
day5/2/input
Normal file
678
day5/2/input
Normal file
|
@ -0,0 +1,678 @@
|
|||
3
|
||||
225
|
||||
1
|
||||
225
|
||||
6
|
||||
6
|
||||
1100
|
||||
1
|
||||
238
|
||||
225
|
||||
104
|
||||
0
|
||||
1101
|
||||
90
|
||||
60
|
||||
224
|
||||
1001
|
||||
224
|
||||
-150
|
||||
224
|
||||
4
|
||||
224
|
||||
1002
|
||||
223
|
||||
8
|
||||
223
|
||||
1001
|
||||
224
|
||||
7
|
||||
224
|
||||
1
|
||||
224
|
||||
223
|
||||
223
|
||||
1
|
||||
57
|
||||
83
|
||||
224
|
||||
1001
|
||||
224
|
||||
-99
|
||||
224
|
||||
4
|
||||
224
|
||||
1002
|
||||
223
|
||||
8
|
||||
223
|
||||
1001
|
||||
224
|
||||
5
|
||||
224
|
||||
1
|
||||
223
|
||||
224
|
||||
223
|
||||
1102
|
||||
92
|
||||
88
|
||||
225
|
||||
101
|
||||
41
|
||||
187
|
||||
224
|
||||
1001
|
||||
224
|
||||
-82
|
||||
224
|
||||
4
|
||||
224
|
||||
1002
|
||||
223
|
||||
8
|
||||
223
|
||||
101
|
||||
7
|
||||
224
|
||||
224
|
||||
1
|
||||
224
|
||||
223
|
||||
223
|
||||
1101
|
||||
7
|
||||
20
|
||||
225
|
||||
1101
|
||||
82
|
||||
64
|
||||
225
|
||||
1002
|
||||
183
|
||||
42
|
||||
224
|
||||
101
|
||||
-1554
|
||||
224
|
||||
224
|
||||
4
|
||||
224
|
||||
102
|
||||
8
|
||||
223
|
||||
223
|
||||
1001
|
||||
224
|
||||
1
|
||||
224
|
||||
1
|
||||
224
|
||||
223
|
||||
223
|
||||
1102
|
||||
70
|
||||
30
|
||||
224
|
||||
101
|
||||
-2100
|
||||
224
|
||||
224
|
||||
4
|
||||
224
|
||||
102
|
||||
8
|
||||
223
|
||||
223
|
||||
101
|
||||
1
|
||||
224
|
||||
224
|
||||
1
|
||||
224
|
||||
223
|
||||
223
|
||||
2
|
||||
87
|
||||
214
|
||||
224
|
||||
1001
|
||||
224
|
||||
-2460
|
||||
224
|
||||
4
|
||||
224
|
||||
1002
|
||||
223
|
||||
8
|
||||
223
|
||||
101
|
||||
7
|
||||
224
|
||||
224
|
||||
1
|
||||
223
|
||||
224
|
||||
223
|
||||
102
|
||||
36
|
||||
180
|
||||
224
|
||||
1001
|
||||
224
|
||||
-1368
|
||||
224
|
||||
4
|
||||
224
|
||||
1002
|
||||
223
|
||||
8
|
||||
223
|
||||
1001
|
||||
224
|
||||
5
|
||||
224
|
||||
1
|
||||
223
|
||||
224
|
||||
223
|
||||
1102
|
||||
50
|
||||
38
|
||||
225
|
||||
1102
|
||||
37
|
||||
14
|
||||
225
|
||||
1101
|
||||
41
|
||||
20
|
||||
225
|
||||
1001
|
||||
217
|
||||
7
|
||||
224
|
||||
101
|
||||
-25
|
||||
224
|
||||
224
|
||||
4
|
||||
224
|
||||
1002
|
||||
223
|
||||
8
|
||||
223
|
||||
101
|
||||
2
|
||||
224
|
||||
224
|
||||
1
|
||||
224
|
||||
223
|
||||
223
|
||||
1101
|
||||
7
|
||||
30
|
||||
225
|
||||
1102
|
||||
18
|
||||
16
|
||||
225
|
||||
4
|
||||
223
|
||||
99
|
||||
0
|
||||
0
|
||||
0
|
||||
677
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
0
|
||||
1105
|
||||
0
|
||||
99999
|
||||
1105
|
||||
227
|
||||
247
|
||||
1105
|
||||
1
|
||||
99999
|
||||
1005
|
||||
227
|
||||
99999
|
||||
1005
|
||||
0
|
||||
256
|
||||
1105
|
||||
1
|
||||
99999
|
||||
1106
|
||||
227
|
||||
99999
|
||||
1106
|
||||
0
|
||||
265
|
||||
1105
|
||||
1
|
||||
99999
|
||||
1006
|
||||
0
|
||||
99999
|
||||
1006
|
||||
227
|
||||
274
|
||||
1105
|
||||
1
|
||||
99999
|
||||
1105
|
||||
1
|
||||
280
|
||||
1105
|
||||
1
|
||||
99999
|
||||
1
|
||||
225
|
||||
225
|
||||
225
|
||||
1101
|
||||
294
|
||||
0
|
||||
0
|
||||
105
|
||||
1
|
||||
0
|
||||
1105
|
||||
1
|
||||
99999
|
||||
1106
|
||||
0
|
||||
300
|
||||
1105
|
||||
1
|
||||
99999
|
||||
1
|
||||
225
|
||||
225
|
||||
225
|
||||
1101
|
||||
314
|
||||
0
|
||||
0
|
||||
106
|
||||
0
|
||||
0
|
||||
1105
|
||||
1
|
||||
99999
|
||||
7
|
||||
226
|
||||
226
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1006
|
||||
224
|
||||
329
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
1107
|
||||
677
|
||||
226
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1006
|
||||
224
|
||||
344
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
8
|
||||
677
|
||||
226
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1005
|
||||
224
|
||||
359
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
107
|
||||
677
|
||||
677
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1006
|
||||
224
|
||||
374
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
7
|
||||
677
|
||||
226
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1006
|
||||
224
|
||||
389
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
108
|
||||
677
|
||||
226
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1005
|
||||
224
|
||||
404
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
1108
|
||||
677
|
||||
226
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1005
|
||||
224
|
||||
419
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
8
|
||||
226
|
||||
677
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1006
|
||||
224
|
||||
434
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
1008
|
||||
677
|
||||
677
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1005
|
||||
224
|
||||
449
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
1107
|
||||
226
|
||||
677
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1006
|
||||
224
|
||||
464
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
107
|
||||
226
|
||||
677
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1006
|
||||
224
|
||||
479
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
7
|
||||
226
|
||||
677
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1005
|
||||
224
|
||||
494
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
8
|
||||
677
|
||||
677
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1006
|
||||
224
|
||||
509
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
1108
|
||||
677
|
||||
677
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1005
|
||||
224
|
||||
524
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
1108
|
||||
226
|
||||
677
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1005
|
||||
224
|
||||
539
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
107
|
||||
226
|
||||
226
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1006
|
||||
224
|
||||
554
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
1007
|
||||
226
|
||||
226
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1005
|
||||
224
|
||||
569
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
1008
|
||||
226
|
||||
226
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1005
|
||||
224
|
||||
584
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
1007
|
||||
677
|
||||
677
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1005
|
||||
224
|
||||
599
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
108
|
||||
677
|
||||
677
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1006
|
||||
224
|
||||
614
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
1007
|
||||
226
|
||||
677
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1006
|
||||
224
|
||||
629
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
1008
|
||||
677
|
||||
226
|
||||
224
|
||||
102
|
||||
2
|
||||
223
|
||||
223
|
||||
1005
|
||||
224
|
||||
644
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
1107
|
||||
226
|
||||
226
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1005
|
||||
224
|
||||
659
|
||||
1001
|
||||
223
|
||||
1
|
||||
223
|
||||
108
|
||||
226
|
||||
226
|
||||
224
|
||||
1002
|
||||
223
|
||||
2
|
||||
223
|
||||
1005
|
||||
224
|
||||
674
|
||||
101
|
||||
1
|
||||
223
|
||||
223
|
||||
4
|
||||
223
|
||||
99
|
||||
226
|
330
day5/2/src/main.rs
Normal file
330
day5/2/src/main.rs
Normal file
|
@ -0,0 +1,330 @@
|
|||
#[allow(unused_imports)]
|
||||
use log::{debug, error, info, trace, warn};
|
||||
|
||||
use env_logger;
|
||||
|
||||
use std::fs::File;
|
||||
use std::io::{BufReader, BufRead, stdin, stdout, Write};
|
||||
use std::error::Error;
|
||||
use std::result::Result;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Computer {
|
||||
mem: Vec<i32>,
|
||||
intp: *mut i32, // here will be dragons
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Opcode {
|
||||
inst: u8,
|
||||
mode: Vec<Opmode>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Opmode {
|
||||
Position,
|
||||
Immediate
|
||||
}
|
||||
|
||||
impl From<i32> for Opcode {
|
||||
fn from(num: i32) -> Self {
|
||||
let mut x = num;
|
||||
let mut opcode = Opcode {
|
||||
inst: (num%100) as u8,
|
||||
mode: Vec::new()
|
||||
};
|
||||
|
||||
x /= 100; // strip 2 least significant digits
|
||||
|
||||
loop {
|
||||
match x%10 {
|
||||
0 => opcode.mode.push(Opmode::Position),
|
||||
1 => opcode.mode.push(Opmode::Immediate),
|
||||
_ => panic!{"Invalid opmode: {}", x%10}
|
||||
}
|
||||
|
||||
x /= 10;
|
||||
if x == 0 {break}
|
||||
}
|
||||
|
||||
opcode
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
impl Computer {
|
||||
fn new() -> Self {
|
||||
let mut mem = vec![0];
|
||||
let intp = &mut mem[0] as *mut i32;
|
||||
|
||||
Computer {mem, intp}
|
||||
}
|
||||
|
||||
fn push(&mut self, val: i32) {
|
||||
if self.mem[0] == 0 { // we are in init state
|
||||
self.mem[0] = val
|
||||
} else {
|
||||
self.mem.push(val);
|
||||
}
|
||||
}
|
||||
|
||||
fn set(&mut self, pos: usize, val: i32) {
|
||||
self.mem[pos] = val;
|
||||
}
|
||||
|
||||
fn compute(&mut self) -> i32 {
|
||||
// first reset the pointer just to be sure
|
||||
self.intp = &mut self.mem[0] as *mut i32;
|
||||
|
||||
loop {
|
||||
let opcode: Opcode = self._expect_next(&Opmode::Immediate).into();
|
||||
trace!{"{:?}", opcode}
|
||||
|
||||
match opcode.inst {
|
||||
1 => self._add(&opcode.mode),
|
||||
2 => self._mul(&opcode.mode),
|
||||
3 => self._input(),
|
||||
4 => self._output(&opcode.mode),
|
||||
5 => self._jump_true(&opcode.mode),
|
||||
6 => self._jump_false(&opcode.mode),
|
||||
7 => self._less_than(&opcode.mode),
|
||||
8 => self._equals(&opcode.mode),
|
||||
99 => break,
|
||||
_ => panic!{"Invalid opcode {}", opcode.inst},
|
||||
}
|
||||
}
|
||||
|
||||
self.mem[0]
|
||||
}
|
||||
|
||||
fn _add(&mut self, modes: &[Opmode]) {
|
||||
let op1 = self._expect_next(&modes.get(0).unwrap_or(&Opmode::Position));
|
||||
let op2 = self._expect_next(&modes.get(1).unwrap_or(&Opmode::Position));
|
||||
let pos = self._expect_next(&Opmode::Immediate) as usize;
|
||||
debug!{"Adding {} and {} to position {}", op1, op2, pos}
|
||||
|
||||
self.mem[pos] = op1 + op2;
|
||||
trace!{"{:?}", self}
|
||||
}
|
||||
|
||||
fn _mul(&mut self, modes: &[Opmode]) {
|
||||
let op1 = self._expect_next(&modes.get(0).unwrap_or(&Opmode::Position));
|
||||
let op2 = self._expect_next(&modes.get(1).unwrap_or(&Opmode::Position));
|
||||
let pos = self._expect_next(&Opmode::Immediate) as usize;
|
||||
debug!{"Multiplying {} and {} to position {}", op1, op2, pos}
|
||||
|
||||
self.mem[pos] = op1*op2;
|
||||
trace!{"{:?}", self}
|
||||
}
|
||||
|
||||
fn _input(&mut self) {
|
||||
let pos = self._expect_next(&Opmode::Immediate) as usize;
|
||||
debug!{"Reading input to position {}", pos}
|
||||
|
||||
let mut input = String::new();
|
||||
print!{"Input: "};
|
||||
stdout().flush().unwrap();
|
||||
|
||||
stdin().read_line(&mut input).unwrap();
|
||||
|
||||
self.mem[pos] = input.trim().parse().expect("Invalid input");
|
||||
trace!{"{:?}", self}
|
||||
}
|
||||
|
||||
fn _output(&mut self, modes: &[Opmode]) {
|
||||
let op = self._expect_next(&modes.get(0).unwrap_or(&Opmode::Position));
|
||||
debug!{"Writing output {}", op}
|
||||
|
||||
println!("Output: {}", op);
|
||||
trace!{"{:?}", self}
|
||||
}
|
||||
|
||||
fn _jump_true(&mut self, modes: &[Opmode]) {
|
||||
let op1 = self._expect_next(&modes.get(0).unwrap_or(&Opmode::Position));
|
||||
let op2 = self._expect_next(&modes.get(1).unwrap_or(&Opmode::Position));
|
||||
debug!{"Jump true for op {} to position {}", op1, op2}
|
||||
|
||||
if op1 == 0 {return;}
|
||||
|
||||
|
||||
debug!{"Jumping to {}", op2}
|
||||
self.intp = &mut self.mem[0] as *mut i32; // reset pointer
|
||||
unsafe {
|
||||
self.intp = self.intp.offset(op2 as isize);
|
||||
}
|
||||
trace!{"{:?}", self}
|
||||
}
|
||||
|
||||
fn _jump_false(&mut self, modes: &[Opmode]) {
|
||||
let op1 = self._expect_next(&modes.get(0).unwrap_or(&Opmode::Position));
|
||||
let op2 = self._expect_next(&modes.get(1).unwrap_or(&Opmode::Position));
|
||||
debug!{"Jump false for op {} to position {}", op1, op2}
|
||||
|
||||
if op1 != 0 {return;}
|
||||
|
||||
self.intp = &mut self.mem[0] as *mut i32; // reset pointer
|
||||
unsafe {
|
||||
self.intp = self.intp.offset(op2 as isize);
|
||||
}
|
||||
trace!{"{:?}", self}
|
||||
}
|
||||
|
||||
fn _less_than(&mut self, modes: &[Opmode]) {
|
||||
let op1 = self._expect_next(&modes.get(0).unwrap_or(&Opmode::Position));
|
||||
let op2 = self._expect_next(&modes.get(1).unwrap_or(&Opmode::Position));
|
||||
let position = self._expect_next(&Opmode::Immediate) as usize;
|
||||
|
||||
debug!{"Less than {} < {} writing to position {}", op1, op2, position}
|
||||
|
||||
if op1 < op2 {
|
||||
self.mem[position] = 1;
|
||||
} else {
|
||||
self.mem[position] = 0;
|
||||
}
|
||||
|
||||
trace!{"{:?}", self}
|
||||
}
|
||||
|
||||
fn _equals(&mut self, modes: &[Opmode]) {
|
||||
let op1 = self._expect_next(&modes.get(0).unwrap_or(&Opmode::Position));
|
||||
let op2 = self._expect_next(&modes.get(1).unwrap_or(&Opmode::Position));
|
||||
let position = self._expect_next(&Opmode::Immediate) as usize;
|
||||
|
||||
debug!{"Equals {} == {} writing to position {}", op1, op2, position}
|
||||
|
||||
if op1 == op2 {
|
||||
self.mem[position] = 1;
|
||||
} else {
|
||||
self.mem[position] = 0;
|
||||
}
|
||||
|
||||
trace!{"{:?}", self}
|
||||
}
|
||||
|
||||
fn _next(&mut self) -> Option<i32> {
|
||||
unsafe{ // Dragons
|
||||
|
||||
// overflow check, smart cpu
|
||||
let lstp = self.mem.last_mut().unwrap() as *mut i32;
|
||||
if self.intp == lstp.offset(1) {
|
||||
return None;
|
||||
}
|
||||
|
||||
let op = *self.intp;
|
||||
self.intp = self.intp.offset(1);
|
||||
|
||||
Some(op)
|
||||
}
|
||||
}
|
||||
|
||||
fn _expect_next(&mut self, mode: &Opmode) -> i32 {
|
||||
let next = self._next().expect("Exhausted");
|
||||
|
||||
match mode {
|
||||
Opmode::Position => {
|
||||
trace!{"Next in position {} = {}", next, self.mem[next as usize]}
|
||||
self.mem[next as usize]
|
||||
},
|
||||
Opmode::Immediate => {
|
||||
trace!{"Next in immediate = {}", next}
|
||||
next
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Clone for Computer {
|
||||
fn clone(&self) -> Self {
|
||||
let mut mem = self.mem.clone();
|
||||
let intp = &mut mem[0] as *mut i32;
|
||||
|
||||
Computer { mem, intp }
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<(), Box<dyn Error>>{
|
||||
env_logger::init();
|
||||
|
||||
let input = File::open("input")?;
|
||||
let reader = BufReader::new(input);
|
||||
|
||||
let mut computer = Computer::new();
|
||||
|
||||
reader.lines()
|
||||
.filter_map(Result::ok) // transform into Option and filter
|
||||
.filter_map(|l| l.parse().ok()) // parse String to i32 transform to Option and filter
|
||||
.for_each(|i| computer.push(i)); // push instruction to computer
|
||||
|
||||
computer.compute();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn tc1() {
|
||||
env_logger::init();
|
||||
let mut computer = Computer::new();
|
||||
let mem = vec![3,9,8,9,10,9,4,9,99,-1,8];
|
||||
mem.iter().for_each(|&n| computer.push(n));
|
||||
println!{"{:?}", computer}
|
||||
computer.compute();
|
||||
println!{"{:?}", computer}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tc2() {
|
||||
env_logger::init();
|
||||
let mut computer = Computer::new();
|
||||
let mem = vec![3,12,6,12,15,1,13,14,13,4,13,99,-1,0,1,9];
|
||||
mem.iter().for_each(|&n| computer.push(n));
|
||||
println!{"{:?}", computer}
|
||||
computer.compute();
|
||||
println!{"{:?}", computer}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tc3() {
|
||||
env_logger::init();
|
||||
let mut computer = Computer::new();
|
||||
let mem = vec![3,21,1008,21,8,20,1005,20,22,107,8,21,20,1006,20,31,
|
||||
1106,0,36,98,0,0,1002,21,125,20,4,20,1105,1,46,104,
|
||||
999,1105,1,46,1101,1000,1,20,4,20,1105,1,46,98,99];
|
||||
mem.iter().for_each(|&n| computer.push(n));
|
||||
debug!{"{:?}", computer}
|
||||
computer.compute();
|
||||
debug!{"{:?}", computer}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod regression {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn tc1() {
|
||||
let mut computer = Computer::new();
|
||||
let mem = vec![1002,4,3,4,33];
|
||||
mem.iter().for_each(|&n| computer.push(n));
|
||||
println!{"{:?}", computer}
|
||||
computer.compute();
|
||||
println!{"{:?}", computer}
|
||||
|
||||
assert_eq!{99, computer.mem[4]}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tc2() {
|
||||
let mut computer = Computer::new();
|
||||
let mem = vec![1101,100,-1,4,0];
|
||||
mem.iter().for_each(|&n| computer.push(n));
|
||||
println!{"{:?}", computer}
|
||||
computer.compute();
|
||||
println!{"{:?}", computer}
|
||||
|
||||
assert_eq!{99, computer.mem[4]}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in a new issue