Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define MAX_SQUARE 57521883
  5. #define C1 4617
  6. #define C2 73
  7. #define C3 36936
  8. #define C4 262657
  9. #define C5 2134536
  10. #define C6 16810048
  11. #define C7 2363904
  12. #define C8 19136512
  13. #define C9 18911232
  14.  
  15. typedef long square;
  16.  
  17. #define PRINT(x)\
  18. while (s##x--)\
  19. {\
  20. sprintf(tmp, #x " ");\
  21. strcat(result, tmp);\
  22. }
  23.  
  24. #define ITER_HEAD(x, y)\
  25. for (s##x = 0, r##x = r##y; s##x < 4; s##x++)\
  26. {\
  27. now += s##x;\
  28. if (now > mins)\
  29. {\
  30. now -= s##x;\
  31. break;\
  32. }
  33.  
  34. #define ITER_END(x)\
  35. turn(&r##x, C##x);\
  36. now -= s##x;\
  37. }
  38.  
  39. void turn(square *des, square clock)
  40. {
  41. *des = (*des + clock) & MAX_SQUARE;
  42. }
  43.  
  44. char match(square a)
  45. {
  46. return a == 0;
  47. }
  48.  
  49. int main()
  50. {
  51. FILE *fin, *fout;
  52. int s1, s2, s3, s4, s5, s6, s7, s8, s9;
  53. square r0 = 0, r1, r2, r3, r4, r5, r6, r7, r8, r9;
  54. int mins = 28, now = 0;
  55. char result[55] = {0}, tmp[3], p_result[55] = {0};
  56.  
  57. fin = fopen("clocks.in", "r");
  58. fout = fopen("clocks.out", "w");
  59.  
  60. for (s1 = 0; s1 < 3; s1++)
  61. for (s2 = 0; s2 < 3; s2++)
  62. {
  63. fscanf(fin, "%d", &s3);
  64. r0 += ((s3 % 12) / 3) << ((s1 * 3 + s2) * 3);
  65. }
  66. ITER_HEAD(1, 0)
  67. ITER_HEAD(2, 1)
  68. ITER_HEAD(3, 2)
  69. ITER_HEAD(4, 3)
  70. ITER_HEAD(5, 4)
  71. ITER_HEAD(6, 5)
  72. ITER_HEAD(7, 6)
  73. ITER_HEAD(8, 7)
  74. ITER_HEAD(9, 8)
  75. if (match(r9))
  76. {
  77. PRINT(1)
  78. PRINT(2)
  79. PRINT(3)
  80. PRINT(4)
  81. PRINT(5)
  82. PRINT(6)
  83. PRINT(7)
  84. PRINT(8)
  85. PRINT(9)
  86. if (now < mins)
  87. {
  88. mins = now;
  89. strcpy(p_result, result);
  90. }
  91. else if (now == mins && strcmp(result, p_result) < 0)
  92. strcpy(p_result, result);
  93. }
  94. ITER_END(9)
  95. ITER_END(8)
  96. ITER_END(7)
  97. ITER_END(6)
  98. ITER_END(5)
  99. ITER_END(4)
  100. ITER_END(3)
  101. ITER_END(2)
  102. ITER_END(1)
  103. p_result[strlen(p_result) - 1] = '\0';
  104. fprintf(fout, "%s\n", p_result);
  105.  
  106. fclose(fin);
  107. fclose(fout);
  108.  
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement