В 15 задаче на игру "2048" не принимает решение по пункту: Метод getMoveEfficiency не должен менять вес плиток в массиве gameTiles и счет. Прилагаю код двух методов по этой задаче.
public boolean hasBoardChanged(){
        int weightGame = 0;
        int weightStack = 0;
        for (int i = 0; i < gameTiles.length; i++){
            for (int j = 0; j < gameTiles[i].length; j++){
                weightGame += gameTiles[i][j].value;
            }
        }
        Tile[][] tiles = (Tile[][])previousStates.peek();
        for (int i = 0; i < tiles.length; i++){
            for (int j = 0; j < tiles[i].length; j++){
                weightStack += tiles[i][j].value;
            }
        }
        if (weightGame != weightStack)
            return true;
        return false;
    }
public MoveEfficiency getMoveEfficiency(Move move){
        move.move();
        if (hasBoardChanged()){

            return new MoveEfficiency(getEmptyTiles().size(), score, move );

        }
        rollback();
        return new MoveEfficiency(-1, 0, move);
    }