Exemplo n.º 1
0
            public MachineValue Add(MachineValue value)
            {
                var temp = Value + value.Value;

                if (temp < Min.Value || temp > Max.Value)
                {
                    return(Invalid);
                }
                return(new MachineValue(temp));
            }
Exemplo n.º 2
0
            public MachineValue Substract(MachineValue value)
            {
                var temp = Value - value.Value;

                if (temp < Min.Value || temp > Max.Value)
                {
                    return(Invalid);
                }
                return(new MachineValue(temp));
            }
Exemplo n.º 3
0
            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);
            }
Exemplo n.º 4
0
        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);
        }