public override BoardMinified ApplyRule(BoardMinified board, HistoryItemMinified latestMove)
        {
            var size           = board.GetSize();
            var player1Figures = new PieceMinified[20];
            var player2Figures = new PieceMinified[20];

            if (size < 4)
            {
                throw new NotImplementedException("Game size smaller than 4");
            }

            // todo - refactor this
            var  isWhite = true;
            byte i       = 0;

            for (var y = (byte)(size - 1); y > size / 2; y--)
            {
                var startX = (byte)(1 - y % 2);
                for (var x = startX; x < size; x += 2)
                {
                    var piece = new PieceMinified(x, y, isWhite, true, false);
                    player1Figures[i] = piece;
                    board.SetBoardCell(x, y, new BoardCell(i, isWhite));
                    i++;
                }
            }

            i = 0;
            for (byte y = 0; y < size / 2 - 1; y++)
            {
                var startX = (byte)(1 - y % 2);
                for (var x = startX; x < size; x += 2)
                {
                    var piece = new PieceMinified(x, y, !isWhite, false, true);
                    player2Figures[i] = piece;
                    board.SetBoardCell(x, y, new BoardCell(i, isWhite));
                    i++;
                }
            }

            for (byte j = 0; j < player1Figures.Length; j++)
            {
                board.Player1Pieces[j] = player1Figures[j];
            }

            for (byte j = 0; j < player2Figures.Length; j++)
            {
                board.Player2Pieces[j] = player2Figures[j];
            }

            return(Next(board, null));
        }
        internal static BoardMinified CreateSampleBoard()
        {
            var board = new BoardMinified(4);

            board.Player1Pieces[0] = new PieceMinified(0, 3, true, true, false, false);
            board.Player1Pieces[1] = new PieceMinified(3, 2, true, true, false, false);
            board.Player2Pieces[0] = new PieceMinified(1, 0, true, true, false, false);

            board.SetBoardCell(1, 0, new BoardCell(0, false));
            board.SetBoardCell(0, 3, new BoardCell(0, true));
            board.SetBoardCell(3, 2, new BoardCell(1, true));

            board.Player1PiecesCount = 2;
            board.Player2PiecesCount = 1;

            return(board);
        }