0

私はチェス AI をプログラミングしている最中で、ピーススクエア テーブルの実装で問題が発生しました。1 つの辺に 1 つの正方形のテーブルのみを配置したいので、x 軸に関する値を保持する 1 次元配列を反転する関数が必要です。たとえば、この配列:

[ 2, 4, 5, 3, 5, 0, 1, 4, 2 ]

次のように反転します。

[ 1, 4, 2, 3, 5, 0, 2, 4, 5 ]

次の方法を使用して、ネストされたループを使用して 0x64 配列でこれを達成しました (注: 例は 3x3 のみでしたが、次の関数は 8x8 に調整されます)。ただ、時間が気になるのでもっと効率の良いものはないかと思っていました。

public int[] gridFromPerspective(int[] grid){

    int[] flippedGrid = new int[64];

    for(int i = 7; i < 32; i += 8){
        for(int j = 0; j < 8; j++){
            flippedGrid[i-j] = grid[63-(i-j)];
            flippedGrid[63-(i-j)] = grid[i-j];
        }
    }
}

を使用してビットボードを簡単かつ効率的に反転できることは知っていますがsq' = sq ^ 56、1 次元配列の場合にこの手法をどのように使用できるかはわかりません。アドバイスをいただければ幸いです。

4

2 に答える 2

1

グリッド サイズをハードコードしない、少し単純なバージョンを次に示します。

private static int[] flipVertically(int[] grid) {
    final int width = (int)Math.sqrt(grid.length);
    int[] flippedGrid = new int[grid.length];
    for (int i = 0; i < grid.length; i += width)
        System.arraycopy(grid, i, flippedGrid, grid.length - width - i, width);
    return flippedGrid;
}
于 2015-12-03T02:44:55.420 に答える