public int solution(string S)
        {
            int minInteger = 0;
            int maxInteger = (1 << 20) - 1;
              Stack<int> stack = new Stack<int>();
            foreach (string op in S.Split(' '))
            {
                if (op == "DUP")
                {
                    if (!stack.Any())
                    {
                        return -1;
                    }
                    stack.Push(stack.Peek());
                }
                else if (op == "POP")
                {
                    if (!stack.Any())
                    {
                        return -1;
                    }
                    stack.Pop();
                }
                else if (op == "+")
                {
                    if (stack.Count() < 2)
                    {
                        return -1;
                    }
                    var top = stack.Pop();
                    var nextTop = stack.Pop();
                    var sum = top + nextTop;
                    if (sum > maxInteger)
                    {
                        // Overflow
                        return -1;
                    }
                    stack.Push(sum);
                }
                else if (op == "-")
                {
                    if (stack.Count() < 2)
                    {
                        return -1;
                    }
                    var top = stack.Pop();
                    var nextTop = stack.Pop();
                    var diff = top - nextTop;
                    if (diff < minInteger)
                    {
                        // Overflow
                        return -1;
                    }
                    stack.Push(diff);
                }
                else
                {
                    int number;
                    if (!int.TryParse(op, out number))
                    {
                        return -1;
                    }
                    if (number < minInteger || number > maxInteger)
                    {
                        return -1;
                    }
                    stack.Push(number);
                }
            }

            if (!stack.Any())
            {
                return -1;
            }

            return stack.Pop();
        }
Exemple #2
0
        public int solution(string S)
        {
            int         minInteger = 0;
            int         maxInteger = (1 << 20) - 1;
            Stack <int> stack      = new Stack <int>();

            foreach (string op in S.Split(' '))
            {
                if (op == "DUP")
                {
                    if (!stack.Any())
                    {
                        return(-1);
                    }
                    stack.Push(stack.Peek());
                }
                else if (op == "POP")
                {
                    if (!stack.Any())
                    {
                        return(-1);
                    }
                    stack.Pop();
                }
                else if (op == "+")
                {
                    if (stack.Count() < 2)
                    {
                        return(-1);
                    }
                    var top     = stack.Pop();
                    var nextTop = stack.Pop();
                    var sum     = top + nextTop;
                    if (sum > maxInteger)
                    {
                        // Overflow
                        return(-1);
                    }
                    stack.Push(sum);
                }
                else if (op == "-")
                {
                    if (stack.Count() < 2)
                    {
                        return(-1);
                    }
                    var top     = stack.Pop();
                    var nextTop = stack.Pop();
                    var diff    = top - nextTop;
                    if (diff < minInteger)
                    {
                        // Overflow
                        return(-1);
                    }
                    stack.Push(diff);
                }
                else
                {
                    int number;
                    if (!int.TryParse(op, out number))
                    {
                        return(-1);
                    }
                    if (number < minInteger || number > maxInteger)
                    {
                        return(-1);
                    }
                    stack.Push(number);
                }
            }

            if (!stack.Any())
            {
                return(-1);
            }

            return(stack.Pop());
        }