denis_andrei10

Untitled

Dec 13th, 2023
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.37 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "sah.h"
  4. int main()
  5. {
  6. char a[8][8], cols[64], c;
  7. char* fen=calloc(100, sizeof(char));
  8. char* f=calloc(100, sizeof(char));
  9. int rows[64];
  10. // printf("Introduceti piesa cautata: ");
  11. //scanf("%c", &c);
  12. //getchar();
  13. printf("\n");
  14. printf("Introduceti sirul generator: ");
  15. scanf("%s", fen);
  16. printf("\n");
  17. // init(a);
  18. // // print(a);
  19. // int nr=find(a, c, cols, rows);
  20. // // printf("%d\n", nr);
  21. // for(int i=0; i<nr; i++)
  22. // {
  23. // printf("%c %d\n", cols[i], rows[i]);
  24. // }
  25. // encode(a, f);
  26. // printf("%s\n", f);
  27. decode(a, fen);
  28. c='b';
  29. move* x=all_moves(a, 'b');
  30. int l=0;
  31. while(x[l].r1!=0)
  32. {
  33. if(l>0 &&(x[l].c1!=x[l-1].c1 || x[l].r1!=x[l-1].r1) )
  34. {
  35. printf("\n");
  36. }
  37. printf("%c%d-%c%d, ", x[l].c1, x[l].r1, x[l].c2, x[l].r2);
  38. l++;
  39. }
  40. free(x);
  41. return 0;
  42. }
  43.  
  44.  
  45.  
  46.  
  47.  
  48. sah.c
  49. #include<stdio.h>
  50. #include "sah.h"
  51. #include <ctype.h>
  52. #include<stdlib.h>
  53. void init(char table[][8])
  54. {
  55. char s[]= {'r', 'n', 'b'};
  56. for(int j=0; j<3; j++)
  57. {
  58. table[0][j]=table[0][7-j]=s[j];
  59. table[7][j]=table[7][7-j]=s[j]-('a'-'A');
  60. }
  61. for(int j=0; j<8; j++)
  62. {
  63. table[1][j]='p';
  64. table[6][j]='P';
  65. }
  66. table[0][3]='k';
  67. table[0][4]='q';
  68. table[7][3]='K';
  69. table[7][4]='Q';
  70. for(int i=2; i<6; i++)
  71. {
  72. for(int j=0; j<8; j++)
  73. {
  74. table[i][j]=' ';
  75. }
  76. }
  77. }
  78. void print(char table[][8])
  79. {
  80. for(int i=0; i<8; i++)
  81. {
  82. for(int j=0; j<8; j++)
  83. {
  84. printf("%c ", table[i][j]);
  85. }
  86. printf("\n");
  87. }
  88. }
  89. int find(char table[][8], char piece, char cols[], int rows[])
  90. {
  91. int ap=0;
  92. for(int i=0; i<8; i++)
  93. {
  94. for(int j=0; j<8; j++)
  95. {
  96. if(table[i][j]==piece)
  97. {
  98. cols[ap]='a'+j;
  99. rows[ap]=8-i;
  100. ap++;
  101. }
  102. }
  103. }
  104. return ap;
  105. }
  106. void encode(char table[][8], char* fen)
  107. {
  108. int c, l=0;
  109. for(int i=0; i<8; i++)
  110. {
  111. c=0;
  112. for(int j=0; j<8; j++)
  113. {
  114. if(isalpha(table[i][j]))
  115. {
  116. if(c!=0)
  117. {
  118. *(fen+l++)=c+48;
  119. c=0;
  120. }
  121. *(fen+l++)=table[i][j];
  122. }
  123. else
  124. {
  125. c++;
  126.  
  127. }
  128. }
  129. if(c!=0)
  130. {
  131. *(fen+l++)=c+48;
  132. }
  133. if(i!=7)
  134. {
  135. *(fen+l++)='/';
  136. }
  137. }
  138. }
  139. void decode(char table[][8], char* fen)
  140. {
  141. int c, l=0;
  142. for(int i=0; i<8; i++)
  143. {
  144. c=0;
  145. for(int j=0; j<8; j++)
  146. {
  147. if(c==0)
  148. {
  149. if(isalpha(*(fen+l)))
  150. {
  151.  
  152. table[i][j]=*(fen+l);
  153. l++;
  154. }
  155. else
  156. {
  157. if(isdigit(*(fen+l)))
  158. {
  159. c=*(fen+l)-'1';
  160. table[i][j]=' ';
  161. l++;
  162. }
  163. }
  164. }
  165. else
  166. {
  167. table[i][j]=' ';
  168. c--;
  169. }
  170. }
  171. l++;
  172. }
  173. print(table);
  174. }
  175. move* all_moves(char table[][8], char tomove)
  176. {
  177. int a, ok1, ok2, ok3, ok4, z=0, n=5;
  178. move* x=calloc(5, sizeof(move));
  179. if(tomove=='b')
  180. {
  181. for(int j=0; j<8; j++)
  182. {
  183. for(int i=0; i<8; i++)
  184. {
  185. if(table[i][j]=='b')
  186. {
  187. ok1=1;
  188. ok2=1;
  189. ok3=1;
  190. ok4=1;
  191. a=1;
  192. while(ok1 || ok2 || ok3 || ok4)
  193. {
  194. if(ok1==1 && (table[i+a][j+a]<'a' || table[i+a][j+a]>'z') && i+a<8 && j+a<8)
  195. {
  196. if(z+3>n)
  197. {
  198. n+=5;
  199. x=realloc(x, n*sizeof(move));
  200. }
  201. x[z].r1=8-i;
  202. x[z].c1=j+'a';
  203. x[z].r2=8-(i+a);
  204. x[z].c2=j+a+'a';
  205. if(table[i+a][j+a]!=' ')
  206. {
  207. ok1=0;
  208. }
  209. z++;
  210. }
  211. else
  212. {
  213. ok1=0;
  214. }
  215. if(ok2==1 && (table[i+a][j-a]<'a' || table[i+a][j-a]>'z') && i+a<8 && j-a>=0)
  216. {
  217. if(z+3>n)
  218. {
  219. n+=5;
  220. x=realloc(x, n*sizeof(move));
  221. }
  222. x[z].r1=8-i;
  223. x[z].c1=j+'a';
  224. x[z].r2=8-(i+a);
  225. x[z].c2=j-a+'a';
  226. if(table[i+a][j-a]!=' ')
  227. {
  228. ok2=0;
  229. }
  230. z++;
  231. }
  232. else
  233. {
  234. ok2=0;
  235. }
  236. if(ok3==1 && (table[i-a][j+a]<'a' || table[i-a][j+a]>'z') && i-a>=0 && j+a<8)
  237. {
  238. if(z+3>n)
  239. {
  240. n+=5;
  241. x=realloc(x, n*sizeof(move));
  242. }
  243. x[z].r1=8-i;
  244. x[z].c1=j+'a';
  245. x[z].r2=8-(i-a);
  246. x[z].c2=j+a+'a';
  247. if(table[i-a][j+a]!=' ')
  248. {
  249. ok3=0;
  250. }
  251. z++;
  252. }
  253. else
  254. {
  255. ok3=0;
  256. }
  257. if(ok4==1 && (table[i-a][j-a]<'a' || table[i-a][j-a]>'z') && i-a>=0 && j-a>=0)
  258. {
  259. if(z+3>n)
  260. {
  261. n+=5;
  262. x=realloc(x, n*sizeof(move));
  263. }
  264. x[z].r1=8-i;
  265. x[z].c1=j+'a';
  266. x[z].r2=8-(i-a);
  267. x[z].c2=j-a+'a';
  268. if(table[i-a][j-a]!=' ')
  269. {
  270. ok4=0;
  271. }
  272. z++;
  273. }
  274. else
  275. {
  276. ok4=0;
  277. }
  278. a++;
  279. }
  280. }
  281. if(table[i][j]=='r')
  282. {
  283. a=1;
  284. ok1=1;
  285. ok2=1;
  286. ok3=1;
  287. ok4=1;
  288. while(ok1 || ok2 || ok3 || ok4)
  289. {
  290. // printf("%d\n", z);
  291. if(ok1==1 && (table[i+a][j]<'a' || table[i+a][j]>'z') && i+a<8)
  292. {
  293. //printf("1\n");
  294. if(z+3>n)
  295. {
  296. n+=5;
  297. x=realloc(x, n*sizeof(move));
  298. }
  299. x[z].r1=8-i;
  300. x[z].c1=j+'a';
  301. x[z].r2=8-i-a;
  302. x[z].c2=j+'a';
  303. if(table[i+a][j]!=' ')
  304. {
  305. ok1=0;
  306. }
  307. z++;
  308. }
  309. else
  310. {
  311. ok1=0;
  312. }
  313. if(ok2==1 && (table[i][j-a]<'a' || table[i][j-a]>'z') && j-a>=0)
  314. {
  315. //printf("2\n");
  316. if(z+3>n)
  317. {
  318. n+=5;
  319. x=realloc(x, n*sizeof(move));
  320. }
  321. x[z].r1=8-i;
  322. x[z].c1=j+'a';
  323. x[z].r2=8-i;
  324. x[z].c2=j-a+'a';
  325. if(table[i][j-a]!=' ')
  326. {
  327. ok2=0;
  328. }
  329. z++;
  330. }
  331. else
  332. {
  333. ok2=0;
  334. }
  335. if(ok3==1 && (table[i][j+a]<'a' || table[i][j+a]>'z') && j+a<8)
  336. {
  337. //printf("3\n");
  338. if(z+3>n)
  339. {
  340. n+=5;
  341. x=realloc(x, n*sizeof(move));
  342. }
  343. x[z].r1=8-i;
  344. x[z].c1=j+'a';
  345. x[z].r2=8-i;
  346. x[z].c2=j+a+'a';
  347. if(table[i][j+a]!=' ')
  348. {
  349. ok3=0;
  350. }
  351. z++;
  352. }
  353. else
  354. {
  355. ok3=0;
  356. }
  357. if(ok4==1 && (table[i-a][j]<'a' || table[i-a][j]>'z') && i-a>=0)
  358. {
  359. // printf("4\n");
  360. if(z+3>n)
  361. {
  362. n+=5;
  363. x=realloc(x, n*sizeof(move));
  364. }
  365. x[z].r1=8-i;
  366. x[z].c1=j+'a';
  367. x[z].r2=8-(i-a);
  368. x[z].c2=j+'a';
  369. if(table[i-a][j]!=' ')
  370. {
  371. ok4=0;
  372. }
  373. z++;
  374. }
  375. else
  376. {
  377. ok4=0;
  378. }
  379. a++;
  380. // printf("%d %d %d %d %d\n", ok1, ok2, ok3, ok4, a);
  381. // printf("%d %d %d %d\n", i-a, i+a, j-a, j+a);
  382. }
  383. }
  384. if(table[i][j]=='q')
  385. {
  386. ok1=1;
  387. ok2=1;
  388. ok3=1;
  389. ok4=1;
  390. a=1;
  391. while(ok1 || ok2 || ok3 || ok4)
  392. {
  393. if(ok1==1 && (table[i+a][j+a]<'a' || table[i+a][j+a]>'z') && i+a<8 && j+a<8)
  394. {
  395. if(z+3>n)
  396. {
  397. n+=5;
  398. x=realloc(x, n*sizeof(move));
  399. }
  400. x[z].r1=8-i;
  401. x[z].c1=j+'a';
  402. x[z].r2=8-(i+a);
  403. x[z].c2=j+a+'a';
  404. if(table[i+a][j+a]!=' ')
  405. {
  406. ok1=0;
  407. }
  408. z++;
  409. }
  410. else
  411. {
  412. ok1=0;
  413. }
  414. printf("nu %d %d\n", i+a, j-a);
  415. if(ok2==1 && (table[i+a][j-a]<'a' || table[i+a][j-a]>'z') && i+a<8 && j-a>=0)
  416. {
  417. printf("da\n");
  418. if(z+3>n)
  419. {
  420. n+=5;
  421. x=realloc(x, n*sizeof(move));
  422. }
  423. x[z].r1=8-i;
  424. x[z].c1=j+'a';
  425. x[z].r2=8-(i+a);
  426. x[z].c2=j-a+'a';
  427. if(table[i+a][j-a]!=' ')
  428. {
  429. ok2=0;
  430. }
  431. z++;
  432. }
  433. else
  434. {
  435. ok2=0;
  436. }
  437. if(ok3==1 && (table[i-a][j+a]<'a' || table[i-a][j+a]>'z') && i-a>=0 && j+a<8)
  438. {
  439. if(z+3>n)
  440. {
  441. n+=5;
  442. x=realloc(x, n*sizeof(move));
  443. }
  444. x[z].r1=8-i;
  445. x[z].c1=j+'a';
  446. x[z].r2=8-(i-a);
  447. x[z].c2=j+a+'a';
  448. if(table[i-a][j+a]!=' ')
  449. {
  450. ok3=0;
  451. }
  452. z++;
  453. }
  454. else
  455. {
  456. ok3=0;
  457. }
  458. if(ok4==1 && (table[i-a][j-a]<'a' || table[i-a][j-a]>'z') && i-a>0 && j-a>=0)
  459. {
  460. if(z+3>n)
  461. {
  462. n+=5;
  463. x=realloc(x, n*sizeof(move));
  464. }
  465. x[z].r1=8-i;
  466. x[z].c1=j+'a';
  467. x[z].r2=8-(i-a);
  468. x[z].c2=j-a+'a';
  469. if(table[i-a][j-a]!=' ')
  470. {
  471. ok4=0;
  472. }
  473. z++;
  474. }
  475. else
  476. {
  477. ok4=0;
  478. }
  479. // printf("%d %d %d %d %c\n", z, ok2, i+a, j-a, table[i+a][j-a]);
  480. a++;
  481. }
  482. a=1;
  483. ok1=1;
  484. ok2=1;
  485. ok3=1;
  486. ok4=1;
  487. while(ok1 || ok2 || ok3 || ok4)
  488. {
  489. // printf("%d\n", z);
  490. if(ok1==1 && (table[i+a][j]<'a' || table[i+a][j]>'z') && i+a<8)
  491. {
  492. //printf("1\n");
  493. if(z+3>n)
  494. {
  495. n+=5;
  496. x=realloc(x, n*sizeof(move));
  497. }
  498. x[z].r1=8-i;
  499. x[z].c1=j+'a';
  500. x[z].r2=8-i-a;
  501. x[z].c2=j+'a';
  502. if(table[i+a][j]!=' ')
  503. {
  504. ok1=0;
  505. }
  506. z++;
  507. }
  508. else
  509. {
  510. ok1=0;
  511. }
  512. if(ok2==1 && (table[i][j-a]<'a' || table[i][j-a]>'z') && j-a>=0)
  513. {
  514. //printf("2\n");
  515. if(z+3>n)
  516. {
  517. n+=5;
  518. x=realloc(x, n*sizeof(move));
  519. }
  520. x[z].r1=8-i;
  521. x[z].c1=j+'a';
  522. x[z].r2=8-i;
  523. x[z].c2=j-a+'a';
  524. if(table[i][j-a]!=' ')
  525. {
  526. ok2=0;
  527. }
  528. z++;
  529. }
  530. else
  531. {
  532. ok2=0;
  533. }
  534. if(ok3==1 && (table[i][j+a]<'a' || table[i][j+a]>'z') && j+a<8)
  535. {
  536. //printf("3\n");
  537. if(z+3>n)
  538. {
  539. n+=5;
  540. x=realloc(x, n*sizeof(move));
  541. }
  542. x[z].r1=8-i;
  543. x[z].c1=j+'a';
  544. x[z].r2=8-i;
  545. x[z].c2=j+a+'a';
  546. if(table[i][j+a]!=' ')
  547. {
  548. ok3=0;
  549. }
  550. z++;
  551. }
  552. else
  553. {
  554. ok3=0;
  555. }
  556. if(ok4==1 && (table[i-a][j]<'a' || table[i-a][j]>'z') && i-a>=0)
  557. {
  558. // printf("4\n");
  559. if(z+3>n)
  560. {
  561. n+=5;
  562. x=realloc(x, n*sizeof(move));
  563. }
  564. x[z].r1=8-i;
  565. x[z].c1=j+'a';
  566. x[z].r2=8-(i-a);
  567. x[z].c2=j+'a';
  568. if(table[i-a][j]!=' ')
  569. {
  570. ok4=0;
  571. }
  572. z++;
  573. }
  574. else
  575. {
  576. ok4=0;
  577. }
  578. a++;
  579. }
  580. }
  581. }
  582. }
  583. }
  584.  
  585. x[z].c1='0';
  586. x[z].c2='0';
  587. x[z].r1=0;
  588. x[z].r2=0;
  589. return x;
  590. }
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598. sah.h
  599. #ifndef SAH_H_INCLUDED
  600. #define SAH_H_INCLUDED
  601.  
  602. void init(char table[][8]);
  603. void print(char table[][8]);
  604. int find(char table[][8], char piece, char cols[], int rows[]);
  605. void encode(char table[][8], char* fen);
  606. void decode(char table[][8], char* fen);
  607. typedef struct
  608. {
  609. char c1, c2;
  610. int r1, r2;
  611. }move;
  612. move* all_moves(char table[][8], char tomove);
  613.  
  614. #endif // SAH_H_INCLUDED
  615.  
Advertisement
Add Comment
Please, Sign In to add comment