Example #1
0
        public void ExplodeSnailFishNumbersCorrectly(string number, SnailFishNumber expectedNumber)
        {
            var parser = new SnailFishNumberParser(number);
            var value  = parser.Value;

            var sut = new SnailFishNumberExploder(value).Apply();

            Assert.Equal(expectedNumber, sut);
        }
Example #2
0
        public void AddNumbers()
        {
            var result = _numbers[0];

            foreach (var operand in _numbers.Skip(1))
            {
                bool reduced = false;
                var  sum     = new SnailFishNumber(result, operand);

                var visitor = new ReorderRegularNumberVisitor();
                sum.Accept(visitor);

                do
                {
                    reduced = false;

                    var exploder = new SnailFishNumberExploder(sum);
                    if (exploder.CanReduce())
                    {
                        sum     = exploder.Apply();
                        reduced = true;
                    }
                    else
                    {
                        var splitter = new SnailFishNumberSplitter(sum);
                        if (splitter.CanReduce())
                        {
                            sum     = splitter.Apply();
                            reduced = true;
                        }
                    }
                }while (reduced);

                result = sum;
            }

            Result = result;
        }