Esempio n. 1
0
 private NailNumber CheckSplit(ref bool split)
 {
     if (IsNumber)
     {
         if (_value > 9)
         {
             var node = new NailNumber(new NailNumber(_value / 2), new NailNumber((_value + 1) / 2));
             node._left.SetPrevious(_previous);
             _previous?.SetNext(node._left);
             node._right.SetNext(_next);
             _next?.SetPrevious(node._right);
             split = true;
             return(node);
         }
     }
     else
     {
         _left = _left.CheckSplit(ref split);
         if (split)
         {
             return(this);
         }
         _right = _right.CheckSplit(ref split);
     }
     return(this);
 }
Esempio n. 2
0
            public NailNumber Add(NailNumber a)
            {
                var  result = new NailNumber(new NailNumber(this), new NailNumber(a));
                bool redo;

                do
                {
                    redo = false;
                    result.CheckExplode(ref redo);
                    if (!redo)
                    {
                        result.CheckSplit(ref redo);
                    }
                } while (redo);

                return(result);
            }