Exemplo n.º 1
0
        public static bool Equals(BlackOrWhiteSquare sq1, BlackOrWhiteSquare sq2)
        {
            if (sq1 == null && sq2 == null)
            {
                return(true);
            }

            if (sq1 == null || sq2 == null)
            {
                return(false);
            }

            if (sq1.color != sq2.color)
            {
                return(false);
            }

            if (sq1.color == 'W' || sq1.color == 'B')
            {
                return(true);
            }

            for (int i = 0; i < sq1.next.Count; i++)
            {
                if (!Equals(sq1.next[i], sq2.next[i]))
                {
                    return(false);
                }
            }
            return(true);
        }
Exemplo n.º 2
0
        public static BlackOrWhiteSquare Merge(BlackOrWhiteSquare sq1, BlackOrWhiteSquare sq2)
        {
            if (sq1.color == 'B' || sq2.color == 'B')
            {
                return(new BlackOrWhiteSquare('B'));
            }

            if (sq1.color == 'W')
            {
                return(sq2);
            }

            if (sq2.color == 'W')
            {
                return(sq1);
            }

            BlackOrWhiteSquare cur = new BlackOrWhiteSquare('N');

            cur.next = new List <BlackOrWhiteSquare>();
            for (int i = 0; i < 4; i++)
            {
                cur.next.Add(Merge(sq1.next[i], sq2.next[i]));
            }

            for (int i = 1; i < 4; i++)
            {
                if (cur.next[i - 1].color != cur.next[i].color)
                {
                    return(cur);
                }
            }
            cur.color = cur.next[0].color;
            cur.next  = null;
            return(cur);
        }
Exemplo n.º 3
0
        internal void Test()
        {
            BlackOrWhiteSquare sq1 = null;
            BlackOrWhiteSquare sq2 = null;

            Console.WriteLine("{0}, should be true", SquareOperations.Equals(sq1, sq2));

            sq1 = new BlackOrWhiteSquare('W');
            Console.WriteLine("{0}, should be false", SquareOperations.Equals(sq1, sq2));

            sq2 = new BlackOrWhiteSquare('W');
            BlackOrWhiteSquare sq3;

            sq3 = SquareOperations.Merge(sq1, sq2);
            Console.WriteLine("{0}, should be true", SquareOperations.Equals(sq1, sq2));

            sq2 = new BlackOrWhiteSquare('B');
            sq3 = SquareOperations.Merge(sq1, sq2);
            Console.WriteLine("{0}, should be false", SquareOperations.Equals(sq1, sq2));

            sq1.color = 'N';
            sq1.next  = new List <BlackOrWhiteSquare>();
            sq1.next.Add(new BlackOrWhiteSquare('B'));
            sq1.next.Add(new BlackOrWhiteSquare('W'));
            sq1.next.Add(new BlackOrWhiteSquare('W'));
            sq1.next.Add(new BlackOrWhiteSquare('B'));
            sq3 = SquareOperations.Merge(sq1, sq2);
            Console.WriteLine("{0}, should be false", SquareOperations.Equals(sq1, sq2));

            sq2.color = 'N';
            sq2.next  = new List <BlackOrWhiteSquare>();
            sq2.next.Add(new BlackOrWhiteSquare('B'));
            sq2.next.Add(new BlackOrWhiteSquare('W'));
            sq2.next.Add(new BlackOrWhiteSquare('W'));
            sq2.next.Add(new BlackOrWhiteSquare('B'));
            sq3 = SquareOperations.Merge(sq1, sq2);
            Console.WriteLine("{0}, should be true", SquareOperations.Equals(sq1, sq2));

            sq2.next[1].color = 'B';
            sq3 = SquareOperations.Merge(sq1, sq2);
            Console.WriteLine("{0}, should be false", SquareOperations.Equals(sq1, sq2));

            sq1.next[1].color = 'N';
            sq1.next[1].next  = new List <BlackOrWhiteSquare>();
            sq1.next[1].next.Add(new BlackOrWhiteSquare('B'));
            sq1.next[1].next.Add(new BlackOrWhiteSquare('B'));
            sq1.next[1].next.Add(new BlackOrWhiteSquare('W'));
            sq1.next[1].next.Add(new BlackOrWhiteSquare('W'));
            sq3 = SquareOperations.Merge(sq1, sq2);
            Console.WriteLine("{0}, should be false", SquareOperations.Equals(sq1, sq2));

            sq2.next[1].color = 'N';
            sq2.next[1].next  = new List <BlackOrWhiteSquare>();
            sq2.next[1].next.Add(new BlackOrWhiteSquare('B'));
            sq2.next[1].next.Add(new BlackOrWhiteSquare('B'));
            sq2.next[1].next.Add(new BlackOrWhiteSquare('W'));
            sq2.next[1].next.Add(new BlackOrWhiteSquare('W'));
            sq3 = SquareOperations.Merge(sq1, sq2);
            Console.WriteLine("{0}, should be true", SquareOperations.Equals(sq1, sq2));

            sq2.next[1].next[2].color = 'B';
            sq3 = SquareOperations.Merge(sq1, sq2);
            Console.WriteLine("{0}, should be false", SquareOperations.Equals(sq1, sq2));

            sq2.next[1].next[0].color = 'W';
            sq2.next[1].next[1].color = 'W';
            sq2.next[1].next[2].color = 'B';
            sq2.next[1].next[3].color = 'B';
            sq3 = SquareOperations.Merge(sq1, sq2);
        }