Exemple #1
0
 private void AddBraskets(int opening = 0, int closing = 0)
 {
     if (brasketFlag)
     {
         brasketFlag = false;
         return;
     }
     if (closing > 0 && closing > opening + BrasketsSum())
     {
         throw new ArgumentException();
     }
     Braskets.Add(opening);
     Braskets.Add(closing);
 }
Exemple #2
0
        private Expression JoinExpression(int from, int to)
        {
            if (Braskets.Skip(2 * from).Take(2 * to).All(b => b == 0))
            {
                return(joinSimpleSequence(from, to));
            }
            int i;

            for (i = 2 * from; i < 2 * to && Braskets[i] == 0; i += 2)
            {
                ;                                          //нашли первую(ые) открывающую(ие) скобку(и)
            }
            var j    = IndexOfClosingBrasket(Braskets, i); // нашли индекс где закрываются все те скобки
            var left = Expressions.GetRange(0, i / 2);     //взяли то что слева ото всех скобок (м.б. и ничего если скобки открываются сразу)

            Braskets[i]--;
            Braskets[j]--;
            left.Add(JoinExpression(i / 2, j / 2));//добавили результат соединения междускобочной части
            return(joinSimpleSequence(left));
        }
Exemple #3
0
        private int BrasketsSum()
        {
            int sign = 1;

            return(Braskets.Aggregate((o, c) => o + (c * (sign *= -1))));
        }