Esempio n. 1
0
        public object Clone()
        {
            var result = new SnailPair(Value);

            result.Parent = Parent;
            result.Left   = Left != null ? (Left as SnailPair).Clone() as SnailPair : null;
            result.Right  = Right != null ? (Right as SnailPair).Clone() as SnailPair : null;
            return(result);
        }
Esempio n. 2
0
        public static SnailPair operator +(SnailPair a, SnailPair b)
        {
            var result = new SnailPair(a.Clone() as SnailPair, b.Clone() as SnailPair);

            while (result.Explode() || result.Split())
            {
                ;
            }
            return(result);
        }
Esempio n. 3
0
 public bool Split()
 {
     if (!IsLeaf)
     {
         if ((Left as SnailPair).Split())
         {
             return(true);
         }
         if ((Right as SnailPair).Split())
         {
             return(true);
         }
         return(false);
     }
     if (Value >= 10)
     {
         Left  = new SnailPair(Value / 2);
         Right = new SnailPair(Value / 2 + (Value % 2));
         Value = 0;
         return(true);
     }
     return(false);
 }
Esempio n. 4
0
        public static SnailPair Parse(string s, ref int position)
        {
            SnailPair result = new SnailPair();

            if (s[position] == '[')
            {
                ++position;
                result.Left = Parse(s, ref position);
                ++position;
                result.Right = Parse(s, ref position);
                ++position;
            }
            else
            {
                var dLength = 0;
                while (char.IsDigit(s[position + dLength]))
                {
                    ++dLength;
                }
                result.Value = long.Parse(s.Substring(position, dLength));
                position    += dLength;
            }
            return(result);
        }
Esempio n. 5
0
 public SnailPair(SnailPair left, SnailPair right) : base(left, right)
 {
 }