public override void Execute(QuackVM vm, Workflow workflow) { int operand1 = vm.GetRegistry(_register); writer.WriteLine(operand1); workflow.GoToNext(); }
public override void Execute(QuackVM vm, Workflow workflow) { int operand1 = vm.Get(); vm.PutRegistry(_register, operand1); workflow.GoToNext(); }
public Workflow(QuackVM vm) { _vm = vm; _commands = new ICommand[100001]; _labelPositions = new Dictionary <string, int>(); _currentPosition = 0; _lastPosition = 0; }
public override void Execute(QuackVM vm, Workflow workflow) { int operand1 = vm.GetRegistry(_register); char c = (char)(operand1 % 256); writer.Write(c); workflow.GoToNext(); }
public override void Execute(QuackVM vm, Workflow workflow) { long operand1 = vm.Get(); long operand2 = vm.Get(); vm.Put((int)((operand1 * operand2) % 65536)); workflow.GoToNext(); }
public override void Execute(QuackVM vm, Workflow workflow) { int operand1 = vm.Get(); int operand2 = vm.Get(); vm.Put((operand1 - operand2 + 65536) % 65536); workflow.GoToNext(); }
public override void Execute(QuackVM vm, Workflow workflow) { int value = vm.GetRegistry(_register); if (value == 0) { workflow.GoToLabel(_labelName); } else { workflow.GoToNext(); } }
public override void Execute(QuackVM vm, Workflow workflow) { int operand1 = vm.Get(); int operand2 = vm.Get(); if (operand2 == 0) { vm.Put(0); } else { vm.Put(operand1 % operand2); } workflow.GoToNext(); }
static void Main(string[] args) { using (reader = File.OpenText("input.txt")) using (writer = new StreamWriter(File.Create("output.txt"))) { QuackVM vm = new QuackVM(); Workflow wf = new Workflow(vm); while (!reader.EndOfStream) { string str = reader.ReadLine(); ICommand cmd = null; switch (str[0]) { case '+': cmd = new PlusCommand(); break; case '-': cmd = new MinusCommand(); break; case '*': cmd = new MultiplyCommand(); break; case '/': cmd = new DivideCommand(); break; case '%': cmd = new ModuloCommand(); break; case '>': cmd = new SetRegisterCommand(str[1]); break; case '<': cmd = new GetRegisterCommand(str[1]); break; case 'P': if (str.Length > 1) { cmd = new PrintRegisterCommand(str[1]); } else { cmd = new PrintCommand(); } break; case 'C': if (str.Length > 1) { cmd = new PrintRegisterCharCommand(str[1]); } else { cmd = new PrintCharCommand(); } break; case ':': cmd = new LabelCommand(str.Substring(1)); break; case 'J': cmd = new GoToLabelCommand(str.Substring(1)); break; case 'Z': cmd = new GoToLabelZCommand(str[1], str.Substring(2)); break; case 'E': cmd = new GoToLabelECommand(str[1], str[2], str.Substring(3)); break; case 'G': cmd = new GoToLabelGCommand(str[1], str[2], str.Substring(3)); break; case 'Q': cmd = new QuitCommand(); break; default: cmd = new NumberCommand(int.Parse(str)); break; } wf.AddCommand(cmd); } while (!wf.IsCompleted()) { wf.ExecuteCurrentCommand(); } } }
public override void Execute(QuackVM vm, Workflow workflow) { vm.Put(_number); workflow.GoToNext(); }
public override void Execute(QuackVM vm, Workflow workflow) { workflow.Quit(); }
public override void Execute(QuackVM vm, Workflow workflow) { workflow.GoToLabel(_labelName); }
public override void Execute(QuackVM vm, Workflow workflow) { workflow.GoToNext(); }
public abstract void Execute(QuackVM vm, Workflow workflow);