(Rust) day 16 added functions for asm machine
This commit is contained in:
parent
cc5b1f5606
commit
ba5fb5495a
105
16/src/main.rs
105
16/src/main.rs
|
@ -1,9 +1,104 @@
|
||||||
fn addi(first: i32, second: i32) -> i32 {
|
fn addi(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
return first + second;
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = regs[first] + second;
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn addr(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = regs[first] + regs[second];
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn muli(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = regs[first] * second;
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn mulr(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = regs[first] * regs[second];
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bori(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = regs[first] | second;
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn borr(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = regs[first] | regs[second];
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn seti(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = first;
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn setr(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = regs[first];
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn gtir(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = if first > regs[second] {1} else {0};
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn gtri(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = if regs[first] > second {1} else {0};
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn gtrr(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = if regs[first] > regs[second] {1} else {0};
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn eqir(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = if first == regs[second] {1} else {0};
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn eqri(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = if regs[first] == second {1} else {0};
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn eqrr(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = if regs[first] == regs[second] {1} else {0};
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bani(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = regs[first] & second;
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn banr(first: usize, second: usize, address: usize, registers: &Vec<usize>) -> Vec<usize> {
|
||||||
|
let mut regs = registers.clone();
|
||||||
|
regs[address] = first & regs[second];
|
||||||
|
return regs;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("Hello, world!");
|
let functions = [addi, addr, muli, mulr, seti, setr, bani, banr, bori, borr, gtir, gtri, gtrr, eqir, eqri, eqrr];
|
||||||
let a: fn(i32, i32) -> i32 = addi;
|
println!("{}", functions.len());
|
||||||
println!("{}", a(1, 2));
|
let input = vec![1, 2, 3, 4];
|
||||||
|
for func in functions.iter() {
|
||||||
|
println!("{}", func(1, 2, 3, &input)[3]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user