8x8x8 Satranç Kübüne Vezir

Elimizde 8x8x8 lik bir satranç kübü var. Bu tahtaya birbirini yemeyen maksimum kaç vezir yerleştirilir? (Vezirler derinlemesine de hareket edebilmektedir)

Bir yorum “8x8x8 Satranç Kübüne Vezir”

  1. #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    using namespace std;

    #define PRINT(vec) for(int i = 0; i < vec.size(); i++) cout << vec[i] << endl;

    int board[8][8][8] = {0}, moves = 0;

    template
    string toString(T arg)
    {
    stringstream ss;
    ss << arg;
    return ss.str();
    }

    void Clear()
    {
    for(int x = 0; x < 8; x++)
    {
    for(int y = 0; y < 8; y++)
    {
    for(int z = 0; z < 8; z++)
    board[x][y][z] = 0;
    }
    }
    moves = 0;
    }

    void ClearScreen() {
    COORD topLeft = { 0, 0 };
    HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO screen;
    DWORD written;

    GetConsoleScreenBufferInfo(console, &screen);
    FillConsoleOutputCharacterA(
    console, ' ', screen.dwSize.X * screen.dwSize.Y, topLeft, &written
    );
    FillConsoleOutputAttribute(
    console, FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE,
    screen.dwSize.X * screen.dwSize.Y, topLeft, &written
    );
    SetConsoleCursorPosition(console, topLeft);
    }

    void print()
    {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
    for(int x = 0; x < 8; x++)
    {
    for(int y = 0; y < 8; y++)
    {
    for(int z = 0; z < 8; z++)
    {
    if(board[x][y][z] == 2)
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
    if(board[x][y][z] == 1)
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11);
    printf("%d", board[x][y][z]);
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
    printf(" ");
    }
    printf("\n");

    }
    printf("\n");
    }
    }

    void write_to_file(string additional)
    {
    ofstream yaz("maksimum.txt");
    for(int x = 0; x < 8; x++)
    {
    for(int y = 0; y < 8; y++)
    {
    for(int z = 0; z < 8; z++)
    {
    yaz << board[x][y][z];
    }
    yaz << endl;

    }
    yaz << endl;
    }
    yaz << endl << additional;
    }

    bool Place(int X, int Y, int Z)
    {
    swap(Y, X);
    if(board[Z][X][Y] == 1 || board[Z][X][Y] == 2) return false;
    board[Z][X][Y] = 2;
    for(int x = 0; x < 8; x++)
    {
    if(x != Z && board[x][X][Y] != 2) board[x][X][Y] = 1;
    if(x != X && board[Z][x][Y] != 2) board[Z][x][Y] = 1;
    if(x != Y && board[Z][X][x] != 2) board[Z][X][x] = 1;
    }
    for(int i = X, j = Y; i < 8 && j = 0 && j < 8; i–, j++)
    if(i != X && j != Y && board[Z][i][j] != 2) board[Z][i][j] = 1;
    for(int i = X, j = Y; i = 0; i++, j–)
    if(i != X && j != Y && board[Z][i][j] != 2) board[Z][i][j] = 1;
    for(int i = X, j = Y; i >= 0 && j >= 0; i–, j–)
    if(i != X && j != Y && board[Z][i][j] != 2) board[Z][i][j] = 1;

    for(int i = X, j = Y, k = Z; i < 8 && j < 8 && k = 0 && j >= 0 && k < 8; i–, j–, k++)
    if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
    for(int i = X, j = Y, k = Z; i = 0 && k = 0 && j < 8 && k < 8; i–, j++, k++)
    if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;

    for(int i = X, j = Y, k = Z; i < 8 && j = 0; i++, j++, k–)
    if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
    for(int i = X, j = Y, k = Z; i >= 0 && j >= 0 && k >= 0; i–, j–, k–)
    if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
    for(int i = X, j = Y, k = Z; i = 0 && k >= 0; i++, j–, k–)
    if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;
    for(int i = X, j = Y, k = Z; i >= 0 && j = 0; i–, j++, k–)
    if(i != X && j != Y && k != Z && board[k][i][j] != 2) board[k][i][j] = 1;

    for(int x = X, k = Z; x < 8 && k < 8; x++, k++)
    if(x != X && board[k][x][Y] != 2) board[k][x][Y] = 1;
    for(int x = Y, k = Z; x < 8 && k = 0 && k = 0 && k < 8; x–, k++)
    if(x != Y && board[k][X][x] != 2) board[k][X][x] = 1;

    for(int x = X, k = Z; x = 0; x++, k–)
    if(x != X && board[k][x][Y] != 2) board[k][x][Y] = 1;
    for(int x = Y, k = Z; x = 0; x++, k–)
    if(x != Y && board[k][X][x] != 2) board[k][X][x] = 1;

    for(int x = X, k = Z; x >= 0 && k >= 0; x–, k–)
    if(x != X && board[k][x][Y] != 2) board[k][x][Y] = 1;
    for(int x = Y, k = Z; x >= 0 && k >= 0; x–, k–)
    if(x != Y && board[k][X][x] != 2) board[k][X][x] = 1;
    moves ++;
    return true;
    }

    vector randomVec()
    {
    vector d = {0,1,2,3};
    vector d2;
    do
    {
    int r = rand()%d.size();
    d2.push_back(d[r]);d.erase(d.begin() + r);
    }while(d.size() > 0);
    return d2;
    }

    bool Tara(int Z)
    {
    for(int i = 0; i < 8; i++)
    {
    for(int j = 0; j < 8; j++)
    {
    if(board[i][j][Z] == 0) return true;
    }
    }
    return false;
    }

    int automatic()
    {
    Clear();
    Place(0, 0, 0);
    bool br = false;
    vector nums = {0,1,2,3,4,5,6,7};
    vector zCoords;

    for(int i = 0; i < 4; i++)
    {
    int r = rand()%nums.size();
    zCoords.push_back(nums.at(r)); nums.erase(nums.begin() + r);
    }
    for(int z : zCoords)
    {
    for(auto k : randomVec())
    {
    if(k == 0)if(Place(0, 0, z)) {z = 0; break;}
    if(k == 1)if(Place(0, 7, z)) {z = 0; break;}
    if(k == 2)if(Place(7, 7, z)) {z = 0; break;}
    if(k == 3)if(Place(7, 0, z)) {z = 0; break;}
    }
    }
    for(int z = 0; z < 8; z++)
    {
    br = false;
    for(int i = 0; i < 8; i++)
    {
    for(auto k : randomVec())
    {
    if(k == 0)if(Place(0,i,z)) {z = 0;break; br = true;}
    if(k == 1)if(Place(i,0,z)) {z = 0;break; br = true;}
    if(k == 2)if(Place(7,i,z)) {z = 0;break; br = true;}
    if(k == 3)if(Place(i,7,z)) {z = 0;break; br = true;}
    }
    if(br)break;
    }
    }
    vector coords_x, coords_y;
    vector avalibleZ = {0,1,2,3,4,5,6,7};
    int randomZ = 0;
    do
    {
    randomZ = 0;
    coords_x.clear();
    coords_y.clear();
    int index_ = rand()%avalibleZ.size();
    randomZ = avalibleZ.at(index_);
    avalibleZ.erase(avalibleZ.begin() + index_);

    for(int i = 0; i < 8; i++)
    {
    for(int j = 0; j < 8; j++)
    {
    if(board[randomZ][j][i] == 0)
    {
    coords_x.push_back(i);
    coords_y.push_back(j);
    }
    }
    }

    int first_size = coords_x.size();
    for(int k = 0; k < first_size; k++)
    {
    int index = rand()%coords_x.size();
    int gX = coords_x.at(index);
    int gY = coords_y.at(index);
    Place(gX, gY, randomZ);
    coords_x.erase(coords_x.begin() + index);
    coords_y.erase(coords_y.begin() + index);
    }
    }while(!avalibleZ.empty());

    return moves;
    }

    int main()
    {
    srand(time(NULL));
    Clear();
    string command;
    while(true)
    {
    ClearScreen();
    print();
    getline(cin, command);
    string word;
    vector words;
    istringstream iss(command);
    while(iss >> word) words.push_back(word);
    words.push_back(word);
    for(int i = 0; i 1) maxK = atoi(words[1].c_str());

    int max = 0;
    for(int k = 0; k max) max = moves;
    if(words.size() > 2 && words[2] == “write”)write_to_file(toString(max));
    }
    cout << "Maksimum: " << max << endl << endl;
    system("pause");
    }
    else if(words[0] == "help")
    {
    cout << "Vezir Command: Vezir x(a-h) y(1-8) z(0-7)" << endl << "clear Command: clears the entire board" << endl << endl;
    system("pause");
    }
    }
    return 0;
    }
    /* Auto 1000 yazarsanız 1000 kere dener ve maksimim değeri size gösterir.*/

Bir yanıt yazın