commit 7b2fc5a4c86b986083d03bc4f36dea3b6eac06ab
parent 83a8899ff3b6ea88f6995be0a9009c5a30ead677
Author: Yash <nerdstep710@gmail.com>
Date: Thu, 4 Feb 2021 13:47:55 -0600
Add support for math operations
Diffstat:
3 files changed, 32 insertions(+), 3 deletions(-)
diff --git 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
@@ -0,0 +1,21 @@
+pub fn do_math(arguments: &str, operator: char) -> u32 {
+ let split_args = arguments.split("-").collect::<Vec<&str>>();
+
+ 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
@@ -3,6 +3,8 @@ use std::env;
use std::fmt;
use std::usize;
+mod eval;
+
struct Program {
data: Vec<String>,
pc: usize
@@ -24,12 +26,15 @@ impl Program {
}
fn eval(&self, instruction: &String) {
- let instruction_vec: Vec<char> = instruction.chars().collect();
- let opcode = instruction_vec[0];
+ let opcode = instruction.chars().collect::<Vec<char>>()[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)
}
}