Example #1
0
        public void PointsOutFrom()
        {
            HashSet <Point> answer = new HashSet <Point>()
            {
                Point.Get(0, 4), Point.Get(0, 5), Point.Get(1, 4), Point.Get(2, 5), Point.Get(3, 6), Point.Get(4, 7), Point.Get(5, 8), Point.Get(1, 3), Point.Get(2, 3), Point.Get(3, 3), Point.Get(4, 3), Point.Get(5, 3), Point.Get(6, 3), Point.Get(7, 3), Point.Get(8, 3), Point.Get(0, 2), Point.Get(0, 1), Point.Get(0, 0), Point.Get(1, 2), Point.Get(2, 1),
            };
            PieceGrid           grid   = new PieceGrid(10, PieceHelpers.GetInitialAmazonPositions(10));
            IEnumerable <Point> points = grid.GetOpenPointsOutFrom(Point.Get(0, 3));

            Assert.IsTrue(points.ToSet().SetEquals(answer));
        }
Example #2
0
        public void MovesFrom()
        {
            HashSet <Move> answer = new HashSet <Move>()
            {
                new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(2, 0)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(1, 0)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(9, 1)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(8, 1)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(7, 1)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(6, 1)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(5, 1)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(4, 1)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(3, 1)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(0, 1)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(1, 1)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(9, 8)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(8, 7)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(7, 6)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(6, 5)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(5, 4)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(3, 2)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(2, 9)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(2, 8)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(2, 7)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(2, 6)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(2, 5)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(2, 4)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(2, 2)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(2, 1), Point.Get(1, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(2, 1)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(1, 0)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(1, 1)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(0, 1)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(9, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(8, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(7, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(6, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(5, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(4, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(3, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(2, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(0, 2)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(8, 9)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(7, 8)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(6, 7)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(5, 6)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(4, 5)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(3, 4)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(1, 9)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(1, 8)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(1, 7)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(1, 6)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(1, 5)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(1, 4)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(1, 2), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(2, 0)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(1, 0)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(9, 9)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(8, 8)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(7, 7)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(6, 6)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(5, 5)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(4, 4)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(3, 3)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(2, 2)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(1, 1)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(0, 5)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(0, 4)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(0, 2)), new Move(Point.Get(0, 3), Point.Get(0, 0), Point.Get(0, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(1, 0)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(0, 0)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(9, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(8, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(7, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(6, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(5, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(4, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(3, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(2, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(1, 1)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(8, 9)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(7, 8)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(6, 7)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(5, 6)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(4, 5)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(3, 4)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(1, 2)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(0, 5)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(0, 4)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(0, 1), Point.Get(0, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(2, 0)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(1, 1)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(0, 0)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(0, 1)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(9, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(8, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(7, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(6, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(5, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(4, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(3, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(2, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(1, 2)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(7, 9)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(6, 8)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(5, 7)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(4, 6)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(3, 5)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(2, 4)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(0, 5)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(0, 4)), new Move(Point.Get(0, 3), Point.Get(0, 2), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(9, 2)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(8, 0)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(8, 1)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(8, 2)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(5, 0)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(6, 1)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(7, 2)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(3, 3)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(5, 3)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(6, 3)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(7, 3)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(9, 4)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(8, 9)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(8, 8)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(8, 7)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(8, 6)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(8, 5)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(8, 4)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(2, 9)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(3, 8)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(4, 7)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(5, 6)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(6, 5)), new Move(Point.Get(0, 3), Point.Get(8, 3), Point.Get(7, 4)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(9, 1)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(8, 2)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(7, 0)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(7, 1)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(7, 2)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(4, 0)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(5, 1)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(6, 2)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(8, 3)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(3, 3)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(5, 3)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(6, 3)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(9, 5)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(8, 4)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(7, 9)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(7, 8)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(7, 7)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(7, 6)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(7, 5)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(7, 4)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(1, 9)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(2, 8)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(3, 7)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(4, 6)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(5, 5)), new Move(Point.Get(0, 3), Point.Get(7, 3), Point.Get(6, 4)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(9, 0)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(8, 1)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(7, 2)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(6, 1)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(6, 2)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(4, 1)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(5, 2)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(8, 3)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(7, 3)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(3, 3)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(5, 3)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(8, 5)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(7, 4)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(6, 8)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(6, 7)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(6, 6)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(6, 5)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(6, 4)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(0, 9)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(1, 8)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(2, 7)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(3, 6)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(4, 5)), new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(5, 4)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(8, 0)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(7, 1)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(6, 2)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(5, 0)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(5, 1)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(5, 2)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(2, 0)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(3, 1)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(4, 2)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(8, 3)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(7, 3)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(6, 3)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(3, 3)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(9, 7)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(8, 6)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(7, 5)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(6, 4)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(5, 9)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(5, 8)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(5, 7)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(5, 6)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(5, 5)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(5, 4)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(0, 8)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(1, 7)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(2, 6)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(3, 5)), new Move(Point.Get(0, 3), Point.Get(5, 3), Point.Get(4, 4)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(7, 0)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(6, 1)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(5, 2)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(4, 0)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(4, 1)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(4, 2)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(1, 0)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(2, 1)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(3, 2)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(8, 3)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(7, 3)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(6, 3)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(5, 3)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(3, 3)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(9, 8)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(8, 7)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(7, 6)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(6, 5)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(5, 4)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(4, 9)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(4, 8)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(4, 7)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(4, 6)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(4, 5)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(4, 4)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(0, 7)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(1, 6)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(2, 5)), new Move(Point.Get(0, 3), Point.Get(4, 3), Point.Get(3, 4)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(5, 1)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(4, 2)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(3, 1)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(3, 2)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(0, 0)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(1, 1)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(2, 2)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(8, 3)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(7, 3)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(6, 3)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(5, 3)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(9, 9)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(8, 8)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(7, 7)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(6, 6)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(5, 5)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(4, 4)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(3, 8)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(3, 7)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(3, 6)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(3, 5)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(3, 4)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(1, 5)), new Move(Point.Get(0, 3), Point.Get(3, 3), Point.Get(2, 4)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(5, 0)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(4, 1)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(3, 2)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(2, 0)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(2, 1)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(2, 2)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(0, 1)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(1, 2)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(8, 3)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(7, 3)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(6, 3)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(5, 3)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(3, 3)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(8, 9)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(7, 8)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(6, 7)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(5, 6)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(4, 5)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(3, 4)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(2, 9)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(2, 8)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(2, 7)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(2, 6)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(2, 5)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(2, 4)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(0, 5)), new Move(Point.Get(0, 3), Point.Get(2, 3), Point.Get(1, 4)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(4, 0)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(3, 1)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(2, 2)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(1, 0)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(1, 1)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(1, 2)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(0, 2)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(8, 3)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(7, 3)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(6, 3)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(5, 3)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(3, 3)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(7, 9)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(6, 8)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(5, 7)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(4, 6)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(3, 5)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(2, 4)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(1, 9)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(1, 8)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(1, 7)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(1, 6)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(1, 5)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(1, 4)), new Move(Point.Get(0, 3), Point.Get(1, 3), Point.Get(0, 4)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(9, 4)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(8, 5)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(7, 6)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(6, 7)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(5, 0)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(5, 1)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(5, 2)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(5, 3)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(5, 4)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(5, 5)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(5, 6)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(5, 7)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(1, 4)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(2, 5)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(3, 6)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(4, 7)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(9, 8)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(8, 8)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(7, 8)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(6, 8)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(0, 8)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(1, 8)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(2, 8)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(3, 8)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(4, 8)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(5, 9)), new Move(Point.Get(0, 3), Point.Get(5, 8), Point.Get(4, 9)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(9, 2)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(8, 3)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(7, 4)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(6, 5)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(5, 6)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(4, 0)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(4, 1)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(4, 2)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(4, 4)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(4, 5)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(4, 6)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(1, 4)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(2, 5)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(3, 6)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(9, 7)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(8, 7)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(7, 7)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(6, 7)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(5, 7)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(0, 7)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(1, 7)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(2, 7)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(3, 7)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(5, 8)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(4, 9)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(4, 8)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(2, 9)), new Move(Point.Get(0, 3), Point.Get(4, 7), Point.Get(3, 8)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(9, 0)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(8, 1)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(7, 2)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(6, 3)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(5, 4)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(4, 5)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(3, 1)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(3, 2)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(3, 3)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(3, 4)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(3, 5)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(1, 4)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(2, 5)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(8, 6)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(7, 6)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(6, 6)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(5, 6)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(4, 6)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(1, 6)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(2, 6)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(5, 8)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(4, 7)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(3, 8)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(3, 7)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(0, 9)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(1, 8)), new Move(Point.Get(0, 3), Point.Get(3, 6), Point.Get(2, 7)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(7, 0)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(6, 1)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(5, 2)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(4, 3)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(3, 4)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(2, 0)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(2, 1)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(2, 2)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(2, 4)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(1, 4)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(9, 5)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(8, 5)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(7, 5)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(6, 5)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(5, 5)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(4, 5)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(3, 5)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(0, 5)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(1, 5)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(5, 8)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(4, 7)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(3, 6)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(2, 9)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(2, 8)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(2, 7)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(2, 6)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(0, 7)), new Move(Point.Get(0, 3), Point.Get(2, 5), Point.Get(1, 6)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(5, 0)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(4, 1)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(3, 2)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(1, 0)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(1, 1)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(1, 2)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(9, 4)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(8, 4)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(7, 4)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(6, 4)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(5, 4)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(4, 4)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(3, 4)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(2, 4)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(0, 4)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(5, 8)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(4, 7)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(3, 6)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(2, 5)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(1, 9)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(1, 8)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(1, 7)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(1, 6)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(1, 5)), new Move(Point.Get(0, 3), Point.Get(1, 4), Point.Get(0, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(5, 0)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(4, 1)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(3, 2)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(2, 3)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(1, 4)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(0, 0)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(0, 1)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(0, 2)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(0, 4)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(9, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(8, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(7, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(6, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(5, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(4, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(3, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(2, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(1, 5)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(4, 9)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(3, 8)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(2, 7)), new Move(Point.Get(0, 3), Point.Get(0, 5), Point.Get(1, 6)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(4, 0)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(3, 1)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(2, 2)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(1, 3)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(0, 0)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(0, 1)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(0, 2)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(0, 3)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(9, 4)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(8, 4)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(7, 4)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(6, 4)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(5, 4)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(4, 4)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(3, 4)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(2, 4)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(1, 4)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(5, 9)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(4, 8)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(3, 7)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(2, 6)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(1, 5)), new Move(Point.Get(0, 3), Point.Get(0, 4), Point.Get(0, 5)),
            };
            PieceGrid          grid  = new PieceGrid(10, PieceHelpers.GetInitialAmazonPositions(10));
            IEnumerable <Move> moves = grid.GetMovesFromPoint(Point.Get(0, 3));

            //string code = GetMoveString(moves);
            Assert.IsTrue(moves.ToSet().SetEquals(answer));
        }
Example #3
0
        public void PointsOutFromArrow()
        {
            HashSet <Point> answer = new HashSet <Point>()
            {
                Point.Get(5, 1), Point.Get(4, 2), Point.Get(3, 1), Point.Get(3, 2), Point.Get(0, 0), Point.Get(1, 1), Point.Get(2, 2), Point.Get(8, 3), Point.Get(7, 3), Point.Get(6, 3), Point.Get(5, 3), Point.Get(4, 3), Point.Get(0, 3), Point.Get(1, 3), Point.Get(2, 3), Point.Get(9, 9), Point.Get(8, 8), Point.Get(7, 7), Point.Get(6, 6), Point.Get(5, 5), Point.Get(4, 4), Point.Get(3, 8), Point.Get(3, 7), Point.Get(3, 6), Point.Get(3, 5), Point.Get(3, 4), Point.Get(1, 5), Point.Get(2, 4),
            };
            PieceGrid           grid   = new PieceGrid(10, PieceHelpers.GetInitialAmazonPositions(10));
            IEnumerable <Point> points = grid.GetOpenPointsOutFrom(Point.Get(3, 3), Point.Get(0, 3));

            Assert.IsTrue(points.Contains(Point.Get(0, 3)));
            //string code = GetPointsString(points);
            Assert.IsTrue(points.ToSet().SetEquals(answer));
        }
Example #4
0
        public Dictionary <PieceOfColor, IMagickImage> GetPieceTypeDictionaryOfSize(int size)
        {
            var pieces = GetPieceDictionaryOfSize(size);
            var dict   = new Dictionary <PieceOfColor, IMagickImage>();

            foreach (var p in pieces)
            {
                dict.Add(PieceHelpers.GetPieceOfColor(p.Key), p.Value.Clone());
                p.Value.Dispose();
            }

            return(dict);
        }
Example #5
0
        public void PointsOutFrom2()
        {
            HashSet <Point> answer = new HashSet <Point>()
            {
                Point.Get(9, 0), Point.Get(8, 1), Point.Get(7, 2), Point.Get(6, 3), Point.Get(5, 0), Point.Get(5, 1), Point.Get(5, 2), Point.Get(5, 3), Point.Get(1, 0), Point.Get(2, 1), Point.Get(3, 2), Point.Get(4, 3), Point.Get(9, 4), Point.Get(8, 4), Point.Get(7, 4), Point.Get(6, 4), Point.Get(0, 4), Point.Get(1, 4), Point.Get(2, 4), Point.Get(3, 4), Point.Get(4, 4), Point.Get(9, 8), Point.Get(8, 7), Point.Get(7, 6), Point.Get(6, 5), Point.Get(5, 9), Point.Get(5, 8), Point.Get(5, 7), Point.Get(5, 6), Point.Get(5, 5), Point.Get(0, 9), Point.Get(1, 8), Point.Get(2, 7), Point.Get(3, 6), Point.Get(4, 5),
            };
            PieceGrid grid = new PieceGrid(10, PieceHelpers.GetInitialAmazonPositions(10));

            grid.PointPieces[Point.Get(0, 3)] = Open.Get();
            grid.PointPieces[Point.Get(5, 4)] = AmazonPlayer1.Get();
            IEnumerable <Point> points = grid.GetOpenPointsOutFrom(Point.Get(5, 4));

            Assert.IsTrue(points.ToSet().SetEquals(answer));
        }
Example #6
0
        public void PointsOutFromArrow2()
        {
            HashSet <Point> answer = new HashSet <Point>()
            {
                Point.Get(5, 0), Point.Get(4, 1), Point.Get(3, 1), Point.Get(1, 0), Point.Get(2, 1), Point.Get(9, 2), Point.Get(8, 2), Point.Get(7, 2), Point.Get(6, 2), Point.Get(5, 2), Point.Get(4, 2), Point.Get(0, 2), Point.Get(1, 2), Point.Get(2, 2), Point.Get(9, 8), Point.Get(8, 7), Point.Get(7, 6), Point.Get(6, 5), Point.Get(5, 4), Point.Get(4, 3), Point.Get(3, 8), Point.Get(3, 7), Point.Get(3, 6), Point.Get(3, 5), Point.Get(3, 4), Point.Get(3, 3), Point.Get(0, 5), Point.Get(1, 4), Point.Get(2, 3),
            };
            PieceGrid grid = new PieceGrid(10, PieceHelpers.GetInitialAmazonPositions(10));

            grid.PointPieces[Point.Get(0, 3)] = Open.Get();
            grid.PointPieces[Point.Get(5, 4)] = AmazonPlayer1.Get();
            IEnumerable <Point> points = grid.GetOpenPointsOutFrom(Point.Get(3, 2), Point.Get(5, 4));

            //string code = GetPointsString(points);
            Assert.IsTrue(points.ToSet().SetEquals(answer));
        }
Example #7
0
        public void PointsOutFrom3()
        {
            HashSet <Point> answer = new HashSet <Point>()
            {
            };
            PieceGrid grid = new PieceGrid(10, PieceHelpers.GetInitialAmazonPositions(10));

            grid.PointPieces[Point.Get(0, 4)] = ArrowPlayer1.Get();
            grid.PointPieces[Point.Get(1, 4)] = ArrowPlayer1.Get();
            grid.PointPieces[Point.Get(1, 3)] = ArrowPlayer1.Get();
            grid.PointPieces[Point.Get(1, 2)] = ArrowPlayer1.Get();
            grid.PointPieces[Point.Get(0, 2)] = ArrowPlayer1.Get();
            IEnumerable <Point> points = grid.GetOpenPointsOutFrom(Point.Get(0, 3));

            Assert.IsTrue(points.ToSet().SetEquals(answer));
        }
Example #8
0
        public void ApplyMove()
        {
            PieceGrid grid = new PieceGrid(10, PieceHelpers.GetInitialAmazonPositions(10));

            Assert.AreEqual(AmazonPlayer1.Get(), grid.PointPieces[Point.Get(0, 3)]);
            Assert.AreEqual(Open.Get(), grid.PointPieces[Point.Get(6, 3)]);
            Assert.AreEqual(Open.Get(), grid.PointPieces[Point.Get(6, 7)]);
            Assert.IsTrue(grid.Amazon1Points.Contains(Point.Get(0, 3)));
            Assert.IsFalse(grid.Amazon1Points.Contains(Point.Get(6, 3)));
            grid.ApplyMove(new Move(Point.Get(0, 3), Point.Get(6, 3), Point.Get(6, 7)));
            Assert.AreEqual(Open.Get(), grid.PointPieces[Point.Get(0, 3)]);
            Assert.AreEqual(AmazonPlayer1.Get(), grid.PointPieces[Point.Get(6, 3)]);
            Assert.AreEqual(ArrowPlayer1.Get(), grid.PointPieces[Point.Get(6, 7)]);
            Assert.IsTrue(grid.Amazon1Points.Contains(Point.Get(6, 3)));
            Assert.IsFalse(grid.Amazon1Points.Contains(Point.Get(0, 3)));
        }
Example #9
0
        public static string UCIMovesFromMoveObjects(this IEnumerable <Move> moveCollection)
        {
            var moves = moveCollection.ToArray();

            if (!moves.Any())
            {
                return("");
            }

            return(string.Join(" ", moves.Select(m =>
            {
                var pString = m.MoveType == MoveType.Promotion
                    ? char.ToLower(PieceHelpers.GetCharFromPromotionPiece(m.PromotionPiece)).ToString()
                    : "";
                return $"{m.SourceIndex.ToSquareString()}{m.DestinationIndex.ToSquareString()}{pString}";
            })));
        }
Example #10
0
        /// <summary>
        ///     Gets a basic move with no SAN and no en passant information
        /// </summary>
        /// <param name="lan"></param>
        /// <returns></returns>
        public static Move BasicMoveFromLAN(string lan)
        {
            var length = lan.Length;

            if (length < 4 || length > 5)
            {
                throw new MoveException($"LAN move {lan} has invalid length.");
            }

            var sourceString   = lan.Substring(0, 2);
            var destString     = lan.Substring(2, 2);
            var source         = sourceString.ToBoardIndex();
            var dest           = destString.ToBoardIndex();
            var promotionChar  = lan.Length == 5 ? lan[4] : (char?)null;
            var promotionPiece = PieceHelpers.GetPromotionPieceFromChar(promotionChar);
            var isPromotion    = length == 5;

            return(MoveHelpers.GenerateMove(source, dest,
                                            isPromotion ? MoveType.Promotion : MoveType.Normal, promotionPiece));
        }
Example #11
0
        public override string Translate(Move move, Board preMoveBoard, Board postMoveBoard)
        {
            string capture = "", promotionPiece = "", checkInfo = "", result = "";

            if (move.MoveType == MoveType.Castle)
            {
                return(CastleToSan(move));
            }


            var strSrcPiece = GetSANSourceString(preMoveBoard, move);

            if (postMoveBoard.PieceCaptured.HasValue)
            {
                capture = "x";
            }

            if (move.MoveType == MoveType.Promotion)
            {
                promotionPiece = $"={PieceHelpers.GetCharFromPromotionPiece(move.PromotionPiece)}";
            }

            if (BoardHelpers.IsColorInCheck(postMoveBoard.Occupancy, postMoveBoard.ActivePlayer))
            {
                checkInfo = "+";
                if (postMoveBoard.GameState == GameState.Checkmate)
                {
                    checkInfo = "#";
                }
            }

            //Get piece representation
            var san =
                $"{strSrcPiece}{capture}{move.DestinationIndex.ToSquareString()}{promotionPiece}{checkInfo} {result}"
                .Trim();

            return(san);
        }
Example #12
0
        public Move GetMoveFromSAN(Board board, string sanMove)
        {
            Move moveExt;
            var  strMove = StripNonMoveInfoFromMove(sanMove);

            if (strMove.Length < 2)
            {
                throw new MoveException("Invalid move. Must have at least 2 characters.");
            }

            var colorMoving = board.ActivePlayer;

            if (char.IsLower(strMove[0]))
            {
                moveExt = GetPawnMoveDetails(board, strMove);
            }
            else if (strMove == CastleKingSide || strMove == CastleQueenSide)
            {
                if (colorMoving == Color.White)
                {
                    return(strMove == CastleKingSide
                        ? MoveHelpers.WhiteCastleKingSide
                        : MoveHelpers.WhiteCastleQueenSide);
                }

                return(strMove == CastleKingSide ? MoveHelpers.BlackCastleKingSide : MoveHelpers.BlackCastleQueenSide);
            }
            else
            {
                var pieceMoving            = PieceHelpers.GetPiece(strMove[0]);
                var destinationSquare      = strMove.Substring(strMove.Length - 2, 2).ToBoardIndex();
                var applicableBlockerBoard = board.Occupancy.Occupancy(colorMoving, pieceMoving);
                var squaresAttackingTarget =
                    Bitboard.Instance.PiecesAttackingSquareByColor(board.Occupancy, destinationSquare, colorMoving);
                var activePieces = squaresAttackingTarget & applicableBlockerBoard;
                if (activePieces == 0)
                {
                    throw new MoveException(
                              $"No pieces on any squares are attacking the square {destinationSquare.ToSquareString()}",
                              board);
                }


                var attackerIndices = activePieces.GetSetBits();


                if (attackerIndices.Length == 0)
                {
                    throw new MoveException(
                              $"Error with move {sanMove}:No pieces of type {pieceMoving.ToString()} are attacking the square {destinationSquare.ToSquareString()}",
                              board);
                }

                if (attackerIndices.Length == 1)
                {
                    moveExt = MoveHelpers.GenerateMove(attackerIndices[0], destinationSquare);
                }
                else
                {
                    moveExt = DetermineWhichPieceMovesToSquare(board, strMove, attackerIndices,
                                                               applicableBlockerBoard,
                                                               destinationSquare);
                }
            }

            if (moveExt == null)
            {
                throw new NoNullAllowedException(
                          $"MoveTranslatorService: Move should not be null after translation. Error in PGN or application for move {sanMove}.");
            }

            return(moveExt);
        }
Example #13
0
 private static char?PromotionPieceChar(Move move)
 {
     return(move.MoveType == MoveType.Promotion
         ? char.ToLower(PieceHelpers.GetCharFromPromotionPiece(move.PromotionPiece))
         : (char?)null);
 }