fork download
  1. #include <array>
  2. #include <ctime>
  3. #include <vector>
  4. #include <cstdlib>
  5. #include <iostream>
  6. // #include "solution.h"
  7. using namespace std;
  8.  
  9. #define rep(i, j) for (int i = 0; i < 4; i++)\
  10. for (int j = 0; j < 4; j++)
  11.  
  12. typedef array<array<int, 4>, 4> board;
  13.  
  14. board flip(board a, bool z = 1) {
  15. board b;
  16. rep(i, j) {
  17. if (z) b[i][j] = a[j][i];
  18. else b[i][j] = a[3 - j][3 - i];
  19. }
  20. return b;
  21. }
  22.  
  23.  
  24. board dir(board a, char c) {
  25. if (c == 'U') return a;
  26. if (c == 'L') return flip(a);
  27. if (c == 'R') return flip(a, 0);
  28. return flip(flip(a, 0));
  29. }
  30.  
  31. board move(board a, char c) {
  32. a = dir(a, c);
  33. rep(j, i) {
  34. if (a[i][j] == 0) continue;
  35. for (int k = i + 1; k < 4; k++) {
  36. if (a[k][j] == 0) continue;
  37. if (a[i][j] == a[k][j]) {
  38. a[i][j] *= -2;
  39. a[k][j] = 0;
  40. }
  41. break;
  42. }
  43. }
  44. rep(i, j) if (a[i][j] < 0) a[i][j] = -a[i][j];
  45. rep(j, i) {
  46. if (a[i][j] > 0) continue;
  47. for (int k = i + 1; k < 4; k++) {
  48. if (a[k][j] > 0) {
  49. a[i][j] = a[k][j];
  50. a[k][j] = 0;
  51. break;
  52. }
  53. }
  54. }
  55. a = dir(a, c);
  56. return a;
  57. }
  58.  
  59. board put(board a) {
  60. vector<pair<int, int>> zeros;
  61. rep(i, j) if (a[i][j] == 0) zeros.push_back({i, j});
  62. int p = rand() % 100;
  63. int k = rand() % zeros.size();
  64. int i = zeros[k].first;
  65. int j = zeros[k].second;
  66. int val = (p < 10) ? 4 : 2;
  67. a[i][j] = val;
  68. return a;
  69. }
  70.  
  71. // BEGIN
  72. // Энд функц заралж ашиглаж болно
  73.  
  74. board flip1(board a, bool z = 1) {
  75. board b;
  76. for (int i = 0; i < 4; i++) {
  77. for (int j = 0; j < 4; j++) {
  78. if (z)
  79. b[i][j] = a[j][i];
  80. else
  81. b[i][j] = a[3 - j][3 - i];
  82. }
  83. }
  84. return b;
  85. }
  86.  
  87. board dir1(board a, char c) {
  88. if (c == 'U')
  89. return a;
  90. if (c == 'L')
  91. return flip1(a);
  92. if (c == 'R')
  93. return flip1(a, 0);
  94. return flip1(flip1(a, 0));
  95. }
  96.  
  97. board move1(board a, char c) {
  98. a = dir1(a, c);
  99. for (int j = 0; j < 4; j++) {
  100. for (int i = 0; i < 4; i++) {
  101. if (a[i][j] == 0) continue;
  102. for (int k = i + 1; k < 4; k++) {
  103. if (a[k][j] == 0) continue;
  104. if (a[i][j] == a[k][j]) {
  105. a[i][j] *= -2;
  106. a[k][j] = 0;
  107. }
  108. break;
  109. }
  110. }
  111. }
  112. for (int i = 0; i < 4; i++) {
  113. for (int j = 0; j < 4; j++) {
  114. if (a[i][j] < 0) a[i][j] = -a[i][j];
  115. }
  116. }
  117. for (int j = 0; j < 4; j++) {
  118. for (int i = 0; i < 4; i++) {
  119. if (a[i][j] > 0) continue;
  120. for (int k = i + 1; k < 4; k++) {
  121. if (a[k][j] > 0) {
  122. a[i][j] = a[k][j];
  123. a[k][j] = 0;
  124. break;
  125. }
  126. }
  127. }
  128. }
  129. a = dir1(a, c);
  130. return a;
  131. }
  132.  
  133. bool over(const board& a, char move) {
  134. board b = move1(a, move);
  135. for (int i = 0; i < 4; i++) {
  136. for (int j = 0; j < 4; j++) {
  137. if (b[i][j] == 0) {
  138. return false;
  139. }
  140. }
  141. }
  142. for (int i = 0; i < 4; i++) {
  143. for (int j = 0; j < 4; j++) {
  144. if ((i < 3 && b[i][j] == b[i + 1][j]) || (j < 3 && b[i][j] == b[i][j + 1])) {
  145. return false;
  146. }
  147. }
  148. }
  149. return true;
  150. }
  151.  
  152. char play(board a) {
  153. char up = 'U';
  154. char down = 'D';
  155. char right = 'R';
  156. char left = 'L';
  157.  
  158. if (over(a, right)) {
  159. return right;
  160. }
  161.  
  162. board b = move1(a, up);
  163. if (a != b) {
  164. if (!over(b, up)) {
  165. return up;
  166. }
  167. }
  168. b = move1(a, down);
  169. if (a != b) {
  170. if (!over(b, down)) {
  171. return down;
  172. }
  173. }
  174. b = move1(a, right);
  175. if (a != b) {
  176. if (!over(b, right)) {
  177. return right;
  178. }
  179. }
  180. return left;
  181. }
  182.  
  183.  
  184. // Энд бичсэн хэсгээ л сервэрт илгээнэ
  185. // END
  186.  
  187. int main(int argc, char **argv) {
  188. string token;
  189. if (argc == 2) token = argv[1];
  190. srand(247);
  191. srand(time(0));
  192. board a; rep(i, j) a[i][j] = 0;
  193.  
  194. int itr = 0;
  195. clock_t begin = clock();
  196. while (true) {
  197. char c = play(a);
  198. rep(i, j) cout << a[i][j] << " \n"[j == 3];
  199. cout << c << "\n";
  200. if (c != 'U' && c != 'R' && c != 'D' && c != 'L') break;
  201. board b = move(a, c);
  202. if (itr > 0 && b == a) break;
  203. a = put(b);
  204. double timer = double(clock() - begin) / CLOCKS_PER_SEC;
  205. if (timer > 10) break;
  206. itr++;
  207. }
  208. int score = 0;
  209. rep(i, j) score += a[i][j];
  210. cout << "Score: " << score << endl;
  211. cout << "Last state:\n";
  212. rep(i, j) cout << a[i][j] << " \n"[j == 3];
  213. double timer = double(clock() - begin) / CLOCKS_PER_SEC;
  214. cout << "Time: " << (int)timer <<"sec\n";
  215. return 0;
  216. }
Success #stdin #stdout 0.01s 5304KB
stdin
Standard input is empty
stdout
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