public MachineValue Add(MachineValue value) { var temp = Value + value.Value; if (temp < Min.Value || temp > Max.Value) { return(Invalid); } return(new MachineValue(temp)); }
public MachineValue Substract(MachineValue value) { var temp = Value - value.Value; if (temp < Min.Value || temp > Max.Value) { return(Invalid); } return(new MachineValue(temp)); }
public static bool TryParse(string s, out MachineValue value) { int temp; if (!int.TryParse(s, out temp)) { value = Invalid; return(false); } if (temp < Min.Value || temp > Max.Value) { value = Invalid; return(false); } value = new MachineValue(temp); return(true); }
public static int solution(string S) { var stack = new Stack <MachineValue>(); var args = S.Split(new char[] { ' ' }); for (int i = 0; i < args.Length; i++) { MachineValue value; if (MachineValue.TryParse(args[i], out value)) { stack.Push(value); continue; } if (value.Equals(MachineValue.Invalid)) { return(ErrorValue); } switch (args[i]) { case "DUP": stack.Push(stack.Peek()); continue; case "POP": stack.Pop(); continue; case "+": if (stack.Count < 2) { return(ErrorValue); } var addResult = stack.Pop().Add(stack.Pop()); if (addResult.Equals(MachineValue.Invalid)) { return(ErrorValue); } stack.Push(addResult); continue; case "-": if (stack.Count < 2) { return(ErrorValue); } var substractResult = stack.Pop().Substract(stack.Pop()); if (substractResult.Equals(MachineValue.Invalid)) { return(ErrorValue); } stack.Push(substractResult); continue; } return(ErrorValue); } return(stack.Pop().Value); }