fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define rep(i, j) for (int i = 0; i < 4; i++)\
  5. for (int j = 0; j < 4; j++)
  6.  
  7. typedef array<array<int, 4>, 4> board;
  8.  
  9. board flip(board a, bool z = 1) {
  10. board b;
  11. rep(i, j) {
  12. if (z) b[i][j] = a[j][i];
  13. else b[i][j] = a[3 - j][3 - i];
  14. }
  15. return b;
  16. }
  17.  
  18. board dir(board a, char c) {
  19. if (c == 'U') return a;
  20. if (c == 'L') return flip(a);
  21. if (c == 'R') return flip(a, 0);
  22. return flip(flip(a, 0));
  23. }
  24.  
  25. board move(board a, char c) {
  26. a = dir(a, c);
  27. rep(j, i) {
  28. if (a[i][j] == 0) continue;
  29. for (int k = i + 1; k < 4; k++) {
  30. if (a[k][j] == 0) continue;
  31. if (a[i][j] == a[k][j]) {
  32. a[i][j] *= -2;
  33. a[k][j] = 0;
  34. }
  35. break;
  36. }
  37. }
  38. rep(i, j) if (a[i][j] < 0) a[i][j] = -a[i][j];
  39. rep(j, i) {
  40. if (a[i][j] > 0) continue;
  41. for (int k = i + 1; k < 4; k++) {
  42. if (a[k][j] > 0) {
  43. a[i][j] = a[k][j];
  44. a[k][j] = 0;
  45. break;
  46. }
  47. }
  48. }
  49. a = dir(a, c);
  50. return a;
  51. }
  52.  
  53. int main() {
  54.  
  55. board x;
  56. x[0][0]=8;
  57. x[0][1]=0;
  58. x[0][2]=0;
  59. x[0][3]=0;
  60. x[1][0]=0;
  61. x[1][1]=2;
  62. x[1][2]=4;
  63. x[1][3]=0;
  64. x[2][0]=0;
  65. x[2][1]=2;
  66. x[2][2]=4;
  67. x[2][3]=0;
  68. x[3][0]=0;
  69. x[3][1]=8;
  70. x[3][2]=0;
  71. x[3][3]=0;
  72. char moveup='U';
  73. x = move(x,moveup);;
  74. for(int i=0;i<4;i++){
  75. for(int j=0;j<4;j++){
  76. cout << x[i][j] << " ";
  77. }
  78. cout << endl;
  79. }
  80. return 0;
  81. }
Success #stdin #stdout 0.01s 5300KB
stdin
Standard input is empty
stdout
8 4 8 0 
0 8 0 0 
0 0 0 0 
0 0 0 0