From 7b2fc5a4c86b986083d03bc4f36dea3b6eac06ab Mon Sep 17 00:00:00 2001 From: Yash Date: Thu, 4 Feb 2021 13:47:55 -0600 Subject: [PATCH] Add support for math operations --- inp.txt | 4 +++- src/eval.rs | 21 +++++++++++++++++++++ src/main.rs | 9 +++++++-- 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/eval.rs diff --git a/inp.txt b/inp.txt index 0720e77..3a3d9a4 100644 --- a/inp.txt +++ b/inp.txt @@ -1 +1,3 @@ -pHello pWorld! +pHello pWorld! +a15-16 s19-4 m3-3 d9-3 + diff --git a/src/eval.rs b/src/eval.rs new file mode 100644 index 0000000..13a0cbd --- /dev/null +++ b/src/eval.rs @@ -0,0 +1,21 @@ +pub fn do_math(arguments: &str, operator: char) -> u32 { + let split_args = arguments.split("-").collect::>(); + + let num1: u32 = match split_args[0].parse() { + Ok(num) => num, + Err(_e) => panic!("ArgumentError: Not a number: {}", split_args[0]) + }; + + let num2: u32 = match split_args[1].parse() { + Ok(num) => num, + Err(_e) => panic!("ArgumentError: Not a number: {}", split_args[1]) + }; + + match operator { + '+' => num1 + num2, + '-' => num1 - num2, + '*' => num1 * num2, + '/' => num1 / num2, + _ => panic!("SyntaxError: Unknown operator {}", operator) + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index d8155b2..ee982c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,8 @@ use std::env; use std::fmt; use std::usize; +mod eval; + struct Program { data: Vec, pc: usize @@ -24,12 +26,15 @@ impl Program { } fn eval(&self, instruction: &String) { - let instruction_vec: Vec = instruction.chars().collect(); - let opcode = instruction_vec[0]; + let opcode = instruction.chars().collect::>()[0]; let arguments = &instruction[1..]; match opcode { 'p' => println!("{}", arguments), + 'a' => println!("{}", eval::do_math(arguments, '+')), + 's' => println!("{}", eval::do_math(arguments, '-')), + 'm' => println!("{}", eval::do_math(arguments, '*')), + 'd' => println!("{}", eval::do_math(arguments, '/')), _ => panic!("SyntaxError at opcode {}!", self.pc) } }