#include <array> #include <ctime> #include <vector> #include <cstdlib> #include <iostream> // #include "solution.h" using namespace std; #define rep(i, j) for (int i = 0; i < 4; i++)\ for (int j = 0; j < 4; j++) typedef array<array<int, 4>, 4> board; board flip(board a, bool z = 1) { board b; rep(i, j) { if (z) b[i][j] = a[j][i]; else b[i][j] = a[3 - j][3 - i]; } return b; } board dir(board a, char c) { if (c == 'U') return a; if (c == 'L') return flip(a); if (c == 'R') return flip(a, 0); return flip(flip(a, 0)); } board move(board a, char c) { a = dir(a, c); rep(j, i) { if (a[i][j] == 0) continue; for (int k = i + 1; k < 4; k++) { if (a[k][j] == 0) continue; if (a[i][j] == a[k][j]) { a[i][j] *= -2; a[k][j] = 0; } break; } } rep(i, j) if (a[i][j] < 0) a[i][j] = -a[i][j]; rep(j, i) { if (a[i][j] > 0) continue; for (int k = i + 1; k < 4; k++) { if (a[k][j] > 0) { a[i][j] = a[k][j]; a[k][j] = 0; break; } } } a = dir(a, c); return a; } board put(board a) { vector<pair<int, int>> zeros; rep(i, j) if (a[i][j] == 0) zeros.push_back({i, j}); int p = rand() % 100; int k = rand() % zeros.size(); int i = zeros[k].first; int j = zeros[k].second; int val = (p < 10) ? 4 : 2; a[i][j] = val; return a; } // BEGIN // Энд функц заралж ашиглаж болно board flip1(board a, bool z = 1) { board b; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (z) b[i][j] = a[j][i]; else b[i][j] = a[3 - j][3 - i]; } } return b; } board dir1(board a, char c) { if (c == 'U') return a; if (c == 'L') return flip1(a); if (c == 'R') return flip1(a, 0); return flip1(flip1(a, 0)); } board move1(board a, char c) { a = dir1(a, c); for (int j = 0; j < 4; j++) { for (int i = 0; i < 4; i++) { if (a[i][j] == 0) continue; for (int k = i + 1; k < 4; k++) { if (a[k][j] == 0) continue; if (a[i][j] == a[k][j]) { a[i][j] *= -2; a[k][j] = 0; } break; } } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (a[i][j] < 0) a[i][j] = -a[i][j]; } } for (int j = 0; j < 4; j++) { for (int i = 0; i < 4; i++) { if (a[i][j] > 0) continue; for (int k = i + 1; k < 4; k++) { if (a[k][j] > 0) { a[i][j] = a[k][j]; a[k][j] = 0; break; } } } } a = dir1(a, c); return a; } bool over(const board& a, char move) { board b = move1(a, move); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (b[i][j] == 0) { return false; } } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if ((i < 3 && b[i][j] == b[i + 1][j]) || (j < 3 && b[i][j] == b[i][j + 1])) { return false; } } } return true; } char play(board a) { char up = 'U'; char down = 'D'; char right = 'R'; char left = 'L'; if (over(a, right)) { return right; } board b = move1(a, up); if (a != b) { if (!over(b, up)) { return up; } } b = move1(a, down); if (a != b) { if (!over(b, down)) { return down; } } b = move1(a, right); if (a != b) { if (!over(b, right)) { return right; } } return left; } // Энд бичсэн хэсгээ л сервэрт илгээнэ // END int main(int argc, char **argv) { string token; if (argc == 2) token = argv[1]; srand(247); srand(time(0)); board a; rep(i, j) a[i][j] = 0; int itr = 0; clock_t begin = clock(); while (true) { char c = play(a); rep(i, j) cout << a[i][j] << " \n"[j == 3]; cout << c << "\n"; if (c != 'U' && c != 'R' && c != 'D' && c != 'L') break; board b = move(a, c); if (itr > 0 && b == a) break; a = put(b); double timer = double(clock() - begin) / CLOCKS_PER_SEC; if (timer > 10) break; itr++; } int score = 0; rep(i, j) score += a[i][j]; cout << "Score: " << score << endl; cout << "Last state:\n"; rep(i, j) cout << a[i][j] << " \n"[j == 3]; double timer = double(clock() - begin) / CLOCKS_PER_SEC; cout << "Time: " << (int)timer <<"sec\n"; return 0; }
Standard input is empty
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 L 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 U 0 2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 U 0 2 0 2 0 0 0 0 0 0 0 0 2 0 0 0 U 2 2 0 2 0 0 0 0 0 2 0 0 0 0 0 0 U 2 4 0 2 0 0 0 0 0 0 0 0 2 0 0 0 U 4 4 0 2 0 0 0 0 0 0 2 0 0 0 0 0 U 4 4 2 2 0 0 0 0 0 0 2 0 0 0 0 0 U 4 4 4 2 2 0 0 0 0 0 0 0 0 0 0 0 D 0 0 0 0 0 0 0 2 4 0 0 0 2 4 4 2 U 4 4 4 4 2 0 0 0 0 0 2 0 0 0 0 0 U 4 4 4 4 2 0 2 0 0 0 0 0 0 0 0 2 U 4 4 4 4 2 2 2 2 0 0 0 0 0 0 0 0 D 2 0 0 0 0 0 0 0 4 4 4 4 2 2 2 2 U 2 4 4 4 4 2 2 2 2 0 0 0 0 2 0 0 U 2 4 4 4 4 4 2 2 2 0 0 2 0 0 0 0 U 2 8 4 4 4 2 2 4 2 0 0 0 0 0 0 0 U 2 8 4 8 4 2 2 0 2 0 0 0 0 0 0 2 U 2 8 4 8 4 2 2 2 2 2 0 0 0 0 0 0 U 2 8 4 8 4 4 2 2 2 0 0 0 0 0 0 2 U 2 8 4 8 4 4 2 4 2 0 0 0 0 0 0 2 U 2 8 4 8 4 4 2 4 2 0 2 2 0 0 0 0 U 2 8 4 8 4 4 4 4 2 0 0 2 2 0 0 0 U 2 8 8 8 4 4 4 4 4 0 0 2 0 0 0 0 U 2 8 8 8 8 4 4 4 4 0 0 2 0 0 0 0 D 0 0 2 0 2 0 0 8 8 8 8 4 4 4 4 2 U 2 8 2 8 8 4 8 4 4 0 4 2 2 0 0 0 D 2 0 0 0 8 2 2 8 4 8 8 4 2 4 4 2 U 2 2 2 8 8 8 8 4 4 4 4 2 2 2 0 0 D 2 2 2 0 8 8 2 8 4 4 8 4 2 2 4 2 U 2 2 4 8 8 8 8 4 4 4 4 2 2 2 0 2 U 2 2 4 8 8 8 8 4 4 4 4 4 2 2 2 0 U 2 2 4 8 8 8 8 8 4 4 4 0 2 2 2 2 U 2 2 4 16 8 8 8 2 4 4 4 0 2 2 2 2 U 2 2 4 16 8 8 8 4 4 4 4 0 2 2 2 2 U 2 2 4 16 8 8 8 4 4 4 4 2 2 2 2 2 U 2 2 4 16 8 8 8 4 4 4 4 4 2 2 2 4 U 2 2 4 16 8 8 8 8 4 4 4 4 2 2 2 2 R 0 4 4 16 0 0 16 16 0 0 8 8 0 2 4 4 U 0 4 4 32 2 2 16 8 0 0 8 4 0 0 4 0 U 2 4 4 32 0 2 16 8 0 0 8 4 0 2 4 0 U 2 4 4 32 0 4 16 8 0 2 8 4 0 0 4 0 U 2 8 4 32 0 2 16 8 2 0 8 4 0 0 4 0 U 4 8 4 32 0 2 16 8 0 4 8 4 0 0 4 0 D 0 0 4 2 0 8 16 32 0 2 8 8 4 4 4 4 U 4 8 4 2 2 2 16 32 0 4 8 8 0 0 4 4 D 2 0 4 2 0 8 16 32 4 2 8 8 2 4 4 4 U 2 8 4 2 4 2 16 32 2 4 8 8 2 0 4 4 U 2 8 4 2 4 2 16 32 4 4 8 8 2 0 4 4 U 2 8 4 2 8 2 16 32 2 4 8 8 0 2 4 4 D 2 8 4 2 2 2 16 32 8 4 8 8 2 2 4 4 U 4 8 4 2 8 2 16 32 2 4 8 8 2 2 4 4 U 4 8 4 2 8 2 16 32 4 4 8 8 2 2 4 4 R 4 8 4 2 8 2 16 32 0 2 8 16 0 0 4 8 U 4 8 4 2 8 4 16 32 0 2 8 16 0 0 4 8 D 0 4 4 2 0 8 16 32 4 4 8 16 8 2 4 8 U 4 4 4 2 8 8 16 32 0 4 8 16 4 2 4 8 U 4 4 4 2 8 8 16 32 4 4 8 16 2 2 4 8 R 0 4 8 2 4 16 16 32 0 8 8 16 0 4 4 8 U 4 4 8 2 2 16 16 32 0 8 8 16 0 4 4 8 D 2 4 8 2 0 16 16 32 4 8 8 16 2 4 4 8 U 2 4 8 2 4 16 16 32 2 8 8 16 2 4 4 8 U 2 4 8 2 4 16 16 32 4 8 8 16 4 4 4 8 U 2 4 8 2 8 16 16 32 4 8 8 16 2 4 4 8 R 2 4 8 2 2 8 32 32 0 4 16 16 0 2 8 8 U 4 4 8 2 0 8 32 32 2 4 16 16 0 2 8 8 U 4 4 8 2 2 8 32 32 2 4 16 16 0 2 8 8 U 4 4 8 2 4 8 32 32 0 4 16 16 2 2 8 8 U 8 4 8 2 2 8 32 32 2 4 16 16 0 2 8 8 U 8 4 8 2 4 8 32 32 0 4 16 16 2 2 8 8 U 8 4 8 2 4 8 32 32 2 4 16 16 2 2 8 8 U 8 4 8 2 4 8 32 32 4 4 16 16 4 2 8 8 U 8 4 8 2 8 8 32 32 4 4 16 16 2 2 8 8 U 16 4 8 2 4 8 32 32 2 4 16 16 2 2 8 8 U 16 4 8 2 4 8 32 32 4 4 16 16 2 2 8 8 U 16 4 8 2 8 8 32 32 2 4 16 16 2 2 8 8 U 16 4 8 2 8 8 32 32 4 4 16 16 4 2 8 8 U 16 4 8 2 8 8 32 32 8 4 16 16 2 2 8 8 U 16 4 8 2 16 8 32 32 2 4 16 16 4 2 8 8 U 32 4 8 2 2 8 32 32 4 4 16 16 2 2 8 8 R 32 4 8 2 0 2 8 64 2 0 8 32 0 0 4 16 U 32 4 16 2 2 2 8 64 0 0 4 32 0 0 2 16 D 0 0 16 2 0 2 8 64 32 4 4 32 2 2 2 16 U 32 2 16 2 2 4 8 64 2 2 4 32 0 0 2 16 U 32 2 16 2 4 4 8 64 0 2 4 32 2 0 2 16 U 32 2 16 2 4 4 8 64 2 2 4 32 0 2 2 16 U 32 2 16 2 4 4 8 64 2 4 4 32 0 2 2 16 U 32 2 16 2 4 8 8 64 2 2 4 32 2 0 2 16 U 32 2 16 2 4 8 8 64 4 2 4 32 2 0 2 16 U 32 2 16 2 8 8 8 64 2 2 4 32 0 2 2 16 U 32 2 16 2 8 8 8 64 2 4 4 32 2 0 2 16 U 32 2 16 2 8 8 8 64 4 4 4 32 2 0 2 16 D 32 2 16 2 8 2 8 64 4 8 4 32 2 4 2 16 U 32 4 16 2 8 8 8 64 4 4 4 32 2 2 2 16 R 32 4 16 2 2 8 16 64 0 4 8 32 0 2 4 16 U 32 4 32 2 2 8 8 64 0 4 4 32 2 2 0 16 U 32 4 32 2 4 8 8 64 0 4 4 32 0 2 4 16 U 32 4 32 2 4 8 8 64 0 4 8 32 0 2 2 16 U 32 4 32 2 4 8 16 64 0 4 2 32 0 2 2 16 U 32 4 32 2 4 8 16 64 0 4 4 32 0 2 2 16 D 0 4 32 2 2 8 16 64 32 4 4 32 4 2 2 16 U 2 4 32 2 32 8 16 64 4 4 4 32 2 2 2 16 R 2 4 32 2 32 8 16 64 2 4 8 32 0 2 4 16 D 2 4 32 2 2 8 16 64 32 4 8 32 2 2 4 16 U 4 4 32 2 32 8 16 64 2 4 8 32 2 2 4 16 U 4 4 32 2 32 8 16 64 4 4 8 32 2 2 4 16 R 2 8 32 2 32 8 16 64 0 8 8 32 0 4 4 16 U 2 16 32 2 32 8 16 64 0 4 8 32 0 2 4 16 D 2 16 32 2 0 8 16 64 2 4 8 32 32 2 4 16 U 4 16 32 2 32 8 16 64 2 4 8 32 0 2 4 16 D 2 16 32 2 4 8 16 64 32 4 8 32 2 2 4 16 R 2 16 32 2 4 8 16 64 32 4 8 32 2 4 4 16 U 2 16 32 2 4 8 16 64 32 8 8 32 2 2 4 16 U 2 16 32 2 4 16 16 64 32 2 8 32 2 2 4 16 U 2 32 32 2 4 4 16 64 32 2 8 32 2 0 4 16 D 2 2 32 2 4 32 16 64 32 4 8 32 2 2 4 16 R 0 4 32 2 4 32 16 64 32 4 8 32 2 4 4 16 U 4 4 32 2 32 32 16 64 2 8 8 32 0 2 4 16 D 2 4 32 2 4 32 16 64 32 8 8 32 2 2 4 16 R 2 4 32 2 4 32 16 64 0 32 16 32 2 4 4 16 U 2 4 32 2 4 64 32 64 2 4 4 32 2 0 0 16 U 2 4 64 2 4 64 4 64 4 4 2 32 0 0 0 16 U 2 4 64 2 8 64 4 64 0 4 2 32 0 2 0 16 D 0 4 2 2 0 64 64 64 2 4 4 32 8 2 2 16 U 2 4 2 2 8 64 64 64 2 4 4 32 0 2 2 16 D 2 4 2 2 2 64 64 64 8 4 4 32 2 2 2 16 U 4 4 2 2 8 64 64 64 2 4 4 32 2 2 2 16 U 4 4 2 2 8 64 64 64 4 4 4 32 2 2 2 16 R 4 0 8 4 0 8 64 128 0 4 8 32 0 2 4 16 U 4 8 8 4 0 4 64 128 0 2 8 32 4 0 4 16 U 8 8 8 4 2 4 64 128 0 2 8 32 0 0 4 16 D 0 0 8 4 2 8 64 128 8 4 8 32 2 2 4 16 U 2 8 8 4 8 4 64 128 2 2 8 32 2 0 4 16 U 2 8 8 4 8 4 64 128 4 2 8 32 2 0 4 16 D 2 2 8 4 8 8 64 128 4 4 8 32 2 2 4 16 R 0 4 8 4 2 16 64 128 0 8 8 32 0 4 4 16 U 2 4 8 4 0 16 64 128 0 8 8 32 2 4 4 16 U 4 4 8 4 0 16 64 128 0 8 8 32 2 4 4 16 U 4 4 8 4 2 16 64 128 2 8 8 32 0 4 4 16 U 4 4 8 4 4 16 64 128 2 8 8 32 0 4 4 16 U 8 4 8 4 2 16 64 128 2 8 8 32 0 4 4 16 U 8 4 8 4 4 16 64 128 0 8 8 32 2 4 4 16 U 8 4 8 4 4 16 64 128 2 8 8 32 2 4 4 16 U 8 4 8 4 4 16 64 128 4 8 8 32 2 4 4 16 U 8 4 8 4 8 16 64 128 2 8 8 32 2 4 4 16 U 16 4 8 4 4 16 64 128 4 8 8 32 0 4 4 16 U 16 4 8 4 8 16 64 128 0 8 8 32 2 4 4 16 U 16 4 8 4 8 16 64 128 2 8 8 32 2 4 4 16 U 16 4 8 4 8 16 64 128 4 8 8 32 2 4 4 16 R 16 4 8 4 8 16 64 128 4 4 16 32 0 2 8 16 D 2 4 8 4 16 16 64 128 8 4 16 32 4 2 8 16 R 2 4 8 4 2 32 64 128 8 4 16 32 4 2 8 16 U 4 4 8 4 8 32 64 128 4 4 16 32 2 2 8 16 R 0 8 8 4 8 32 64 128 0 8 16 32 2 4 8 16 U 8 8 8 4 2 32 64 128 0 8 16 32 2 4 8 16 U 8 8 8 4 4 32 64 128 0 8 16 32 4 4 8 16 U 8 8 8 4 8 32 64 128 4 8 16 32 0 4 8 16 U 16 8 8 4 4 32 64 128 0 8 16 32 2 4 8 16 U 16 8 8 4 4 32 64 128 2 8 16 32 2 4 8 16 U 16 8 8 4 4 32 64 128 4 8 16 32 2 4 8 16 U 16 8 8 4 8 32 64 128 2 8 16 32 2 4 8 16 U 16 8 8 4 8 32 64 128 4 8 16 32 2 4 8 16 R 2 16 16 4 8 32 64 128 4 8 16 32 2 4 8 16 R 4 2 32 4 8 32 64 128 4 8 16 32 2 4 8 16 R Score: 364 Last state: 4 2 32 4 8 32 64 128 4 8 16 32 2 4 8 16 Time: 0sec