Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.09 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define NMAX 1000
  5. #define NMAX2 15
  6.  
  7. void macroboard(char v[][NMAX2], long p, long q, long n_lin_col, double contor[NMAX]) {
  8. long i, j, n, k;
  9. char x;
  10. n = n_lin_col;
  11. contor[1]=0;
  12. contor[2]=0;
  13. // varificare pe linii
  14. for (i = p; i < p + n; i++) {
  15. k = 0;
  16. for (j = q; j < q + n - 1; j++) {
  17. if (v[i][q] == 'X' || v[i][q] == '0')
  18. x = v[i][q];
  19. else
  20. x = 'H';
  21. if (v[i][j + 1] == x)
  22. k++;
  23. if (k == (n - 1)) {
  24. if (x=='X')
  25. contor[1]++;
  26. if (x=='0')
  27. contor[2]++;
  28. }
  29.  
  30. }
  31. }
  32. // verificare pe coloane
  33. for (j = q; j < q + n; j++) {
  34. k = 0;
  35. for (i = p; i < p + n - 1; i++) {
  36. if (v[p][j] == 'X' || v[p][j] == '0')
  37. x = v[p][j];
  38. else
  39. x = 'H';
  40. if (v[i + 1][j] == x)
  41. k++;
  42. if (k == (n - 1)) {
  43. if (x == 'X')
  44. contor[1]++;
  45. if (x == '0')
  46. contor[2]++;
  47. }
  48. }
  49. }
  50. // verificare diagonala principala
  51. k = 0;
  52. if (v[p][q] == 'X' || v[p][q] == '0') {
  53. x = v[p][q];
  54. } else {
  55. x = 'H';
  56. }
  57. for (i = 0; i < n; i++) {
  58. if (v[p + i][q + i] == x)
  59. k++;
  60. if (k == n) {
  61. if (x == 'X')
  62. contor[1]++;
  63. if (x == '0')
  64. contor[2]++;
  65. }
  66. }
  67. // verificare diagonala secundara
  68. k = 0;
  69. if (v[p][q + n - 1] == 'X' || v[p][q + n - 1] == '0')
  70. x = v[p][q + n - 1];
  71. else
  72. x = 'H';
  73. for (i = 0; i < n; i++) {
  74. if (x == v[p + i][q + n - 1 - i]) {
  75. k++;
  76. }
  77. if (k == n) {
  78. if (x == 'X')
  79. contor[1]++;
  80. if (x == '0')
  81. contor[2]++;
  82. }
  83. }
  84.  
  85. }
  86.  
  87. char castigator(char matrice[][NMAX], long p, long q, long n_lin_col) {
  88. long i, j, n, k;
  89. char x;
  90. n = n_lin_col;
  91. // varificare pe linii
  92. for (i = p; i < p + n; i++) {
  93. k = 0;
  94. for (j = q; j < q + n - 1; j++) {
  95. if (matrice[i][q] == 'X' || matrice[i][q] == '0')
  96. x = matrice[i][q];
  97. else
  98. x = 'H';
  99. if (matrice[i][j + 1] == x)
  100. k++;
  101. if (k == (n - 1))
  102. return x;
  103. }
  104. }
  105. // verificare pe coloane
  106. for (j = q; j < q + n; j++) {
  107. k = 0;
  108. for (i = p; i < p + n - 1; i++) {
  109. if (matrice[p][j] == 'X' || matrice[p][j] == '0')
  110. x = matrice[p][j];
  111. else
  112. x = 'H';
  113. if (matrice[i + 1][j] == x)
  114. k++;
  115. if (k == (n - 1))
  116. return x;
  117. }
  118. }
  119. // verificare diagonala principala
  120. k = 0;
  121. if (matrice[p][q] == 'X' || matrice[p][q] == '0') {
  122. x = matrice[p][q];
  123. } else {
  124. x = 'H';
  125. }
  126. for (i = 0; i < n; i++) {
  127. if (matrice[p + i][q + i] == x)
  128. k++;
  129. if (k == n)
  130. return x;
  131. }
  132. // verificare diagonala secundara
  133. k = 0;
  134. if (matrice[p][q + n - 1] == 'X' || matrice[p][q + n - 1] == '0')
  135. x = matrice[p][q + n - 1];
  136. else
  137. x = 'H';
  138. for (i = 0; i < n; i++) {
  139. if (x == matrice[p + i][q + n - 1 - i]) {
  140. k++;
  141. }
  142. if (k == n)
  143. return x;
  144. }
  145. return '-';
  146.  
  147. }
  148.  
  149. void afisare_mini_matrice(char matrice[][NMAX], long p, long q, long n_lin_col) {
  150. long i, j, n;
  151. n = n_lin_col;
  152. for (i = p; i < p + n; i++) {
  153. for (j = q; j < q + n; j++) {
  154. printf(" %c", matrice[i][j]);
  155. }
  156. printf("\n");
  157. }
  158. }
  159.  
  160. void minimatrice(char matrice[][NMAX], long n_lin_col, char v[NMAX2][NMAX2], int ok, double contor[NMAX]) {
  161. long p, q, n, k;
  162. p = 0;
  163. q = 0;
  164. n = n_lin_col;
  165. k = 0;
  166. while (p < (n * n - n + 1)) {
  167. if (v[p / n][q / n] == '-') {
  168. v[p / n][q / n] = castigator(matrice, p, q, n);
  169. if (ok==1)
  170. {
  171. if (castigator(matrice,p,q,n)=='X') {
  172. contor[7]++;
  173. // printf("* X - %f * \n", contor[7]);
  174. }
  175. if (castigator(matrice,p,q,n)=='0') {
  176. contor[8]++;
  177. // printf("^ 0 - %f ^ \n", contor[8]);
  178. }
  179. }
  180. }
  181. q = q + n;
  182. if (q > (n * n - n + 1)) {
  183. q = 0;
  184. p = p + n;
  185. }
  186. }
  187.  
  188. }
  189.  
  190. void verificare(char matrice[][NMAX], long n_lin_col) {
  191. long i, j, p = 0, q = 0, n, eror = 0;
  192. n = n_lin_col;
  193.  
  194. for (i = p; i < (p + n); i++) {
  195. for (j = q; j < (q + n); j++) {
  196. // functie castig
  197. printf("%c ", matrice[i][j]);
  198. // v[p+1/n][(q+1/n)] = functie castig;
  199. if (j == n * n - 1)
  200. eror = 1;
  201. }
  202. printf("\n");
  203. if (i == (p + n - 1) && eror == 0) {
  204. q = q + n;
  205. i = p;
  206. }
  207. if (i == (p + n - 1) && eror == 1) {
  208. p = p + n;
  209. i = p;
  210. q = 0;
  211. eror = 0;
  212. }
  213. if (i == (n * n - 1) && eror == 1)
  214. break;
  215.  
  216. // if (i==n*n-1)
  217. // break;
  218. // if (i==p+n-1)
  219. // p=p+n;
  220.  
  221. }
  222. }
  223.  
  224. void robin(char matrice[][NMAX], char jucator, long n_lin_col) {
  225. long i, control = 0, k;
  226. for (i = 0; i < n_lin_col; i++) {
  227. if ((matrice[i][i] != 'X') && matrice[i][i] != '0') {
  228. matrice[i][i] = jucator;
  229. control = 1;
  230. break;
  231. }
  232. }
  233. k = 1;
  234. while (control == 0) {
  235. for (i = 0; i < n_lin_col - k; i++) {
  236. if ((matrice[i][i + k] != 'X') && matrice[i][i + k] != '0') {
  237. matrice[i][i + k] = jucator;
  238. control = 1;
  239. break;
  240. }
  241. }
  242. if (control != 1) {
  243. for (i = 0; i < n_lin_col - k; i++) {
  244. if ((matrice[i + k][i] != 'X') && matrice[i + k][i] != '0') {
  245. matrice[i + k][i] = jucator;
  246. control = 1;
  247. break;
  248. }
  249. }
  250. }
  251. k++;
  252. }
  253. }
  254.  
  255. void incarcare_matrice(char matrice[][NMAX], long n_lin_col) {
  256. long i, j;
  257. for (i = 0; i < pow(n_lin_col, 2); i++)
  258. for (j = 0; j < pow(n_lin_col, 2); j++)
  259. matrice[i][j] = '*';
  260. }
  261.  
  262. void afisare_matrice(char matrice[][NMAX], long n_lin_col) {
  263. long i, j;
  264. for (i = 0; i < pow(n_lin_col, 2); i++) {
  265. for (j = 0; j < pow(n_lin_col, 2); j++) {
  266. printf("%c ", matrice[i][j]);
  267. }
  268. printf("\n");
  269. }
  270. }
  271.  
  272. void mutari(char matrice[][NMAX], long numar_mutari, long n_lin_col, char v[NMAX2][NMAX2], double contor[NMAX]) {
  273. long n = n_lin_col * n_lin_col, fullboard = 0;
  274. long i, x, y, erorr, k = 1;
  275. char jucator;
  276. int ok;
  277. for (i = 1; i <= numar_mutari; i++) {
  278. ok=0;
  279. if (contor[3]+contor[4] == n * n) {
  280. scanf(" %c %ld %ld", &jucator, &x, &y);
  281. if (x<0 || x>=n)
  282. fullboard=2;
  283. else
  284. fullboard=1;
  285. } else {
  286. erorr = 0;
  287. scanf(" %c %ld %ld", &jucator, &x, &y);
  288. k++;
  289. if (i % 2 == 1 && jucator == 'X') {
  290. if (x >= 0 && x < n && y >= 0 && y < n) {
  291. if (matrice[x][y] == 'X' || matrice[x][y] == '0') {
  292. printf("NOT AN EMPTY CELL\n");
  293. robin(matrice, jucator, n);
  294. contor[3]++;
  295. } else {
  296. matrice[x][y] = 'X';
  297. contor[3]++;
  298. ok=1;
  299. }
  300.  
  301. } else {
  302. printf("INVALID INDEX\n");
  303. robin(matrice, jucator, n);
  304. contor[3]++;
  305. }
  306. }
  307.  
  308.  
  309. if (i % 2 == 1 && jucator != 'X') {
  310. printf("NOT YOUR TURN\n");
  311. erorr = 1;
  312. }
  313.  
  314. if (i % 2 == 0 && jucator == '0') {
  315. if (x >= 0 && x < n && y >= 0 && y < n) {
  316. if (matrice[x][y] == 'X' || matrice[x][y] == '0') {
  317. printf("NOT AN EMPTY CELL\n");
  318. robin(matrice, jucator, n);
  319. contor[4]++;
  320. } else {
  321. matrice[x][y] = '0';
  322. contor[4]++;
  323. ok=1;
  324. }
  325.  
  326. } else {
  327. printf("INVALID INDEX\n");
  328. robin(matrice, jucator, n);
  329. contor[4]++;
  330. }
  331. }
  332.  
  333. if (i % 2 == 0 && jucator != '0') {
  334. printf("NOT YOUR TURN\n");
  335. erorr = 1;
  336. }
  337. if (erorr == 1) {
  338. i++;
  339. numar_mutari++;
  340. }
  341. if (erorr == 0)
  342. minimatrice(matrice, n_lin_col, v, ok, contor);
  343. }
  344. }
  345. if (fullboard == 1){
  346. printf("NOT AN EMPTY CELL\n");
  347. printf("FULL BOARD\n");
  348. }
  349. if (fullboard == 2){
  350. printf("INVALID INDEX\n");
  351. printf("FULL BOARD\n");
  352. }
  353. }
  354.  
  355. int main() {
  356. double contor[NMAX]={0,0,0,0,0,0,0,0};
  357. char c[NMAX][NMAX];
  358. long n, m, k, fullboard = 0;
  359. scanf("%ld", &n);
  360. char v[NMAX2][NMAX2];
  361. scanf("%ld", &m);
  362. for (k = 0; k < n; k++) {
  363. for (long z = 0; z < n; z++) {
  364. v[k][z] = '-';
  365. }
  366. }
  367. incarcare_matrice(c, n);
  368. mutari(c, m, n, v, contor);
  369.  
  370. // printf("################## S U C C E S ################## \n");
  371. for (k = 0; k < n; k++) {
  372. for (long z = 0; z < n; z++) {
  373. printf("%c", v[k][z]);
  374. if (v[k][z]=='X') {
  375. contor[5]++;
  376. }
  377. if (v[k][z]=='0') {
  378. contor[6]++;
  379. }
  380. }
  381. printf("\n");
  382. }
  383. macroboard(v,0,0,n,contor);
  384. if (contor[1]>contor[2]) {
  385. printf("X won\n");
  386. }
  387. if (contor[2]>contor[1]){
  388. printf("0 won\n");
  389. }
  390. long chr=39;
  391. if (contor[1]==contor[2])
  392. printf("Draw again! Let%cs play darts!\n", chr);
  393. if (contor[3]==0.0)
  394. printf("X N/A\n");
  395. else
  396. printf("X %.10lf\n", contor[7]/contor[3]);
  397. if (contor[4]==0.0)
  398. printf("0 N/A\n");
  399. else
  400. printf("0 %.10lf\n", contor[8]/contor[4]);
  401. // printf("jucatorul X a castigat => %f in macroboard, a avut %f mutari si a castigat %f miniboarduri \n", contor[1], contor[3], contor[5]);
  402. //printf("jucatorul 0 a castigat => %f in macroboard, a avut %f mutari si a castigat %f miniboarduri \n", contor[2], contor[4], contor[6]);
  403. //afisare_matrice(c, n);
  404.  
  405. return 0;
  406. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement