Advertisement
Guest User

Untitled

a guest
Dec 4th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.49 KB | None | 0 0
  1. // Tema2.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include <iostream>
  5. #include <fstream>
  6. #include "t2.h"
  7.  
  8. struct sf {
  9. int contor=0;
  10. char cate[100];
  11. int drum[100];
  12.  
  13. }matrice[16][16];
  14.  
  15. lista mutarii=new mutare;
  16. lista prim = mutarii;
  17. void codificareADN(long long nrIntreg, char sirADN[MAX_ADN])
  18. {
  19. long long x = nrIntreg;
  20. char limneg[35]="TGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  21.  
  22. if (nrIntreg == 0)
  23. {
  24. sirADN[0] = 'A';
  25. sirADN[1] = NULL;
  26. }
  27. else
  28. if (nrIntreg == -1)
  29. {
  30. sirADN[0] = 'T';
  31. sirADN[1] = NULL;
  32. }
  33. else
  34. if (nrIntreg == 1)
  35. {
  36. sirADN[0] = 'C';
  37. sirADN[1] = NULL;
  38. }
  39. else
  40. if (nrIntreg == 2)
  41. {
  42. sirADN[0] = 'G';
  43. sirADN[1] = NULL;
  44. }
  45. else
  46. {
  47. if (nrIntreg > 2)
  48. {
  49. int contor = 0;
  50. while (nrIntreg != 0)
  51. {
  52. sirADN[contor] = nrIntreg % 4;
  53. nrIntreg = nrIntreg / 4;
  54. contor++;
  55. }
  56. bool numarinplus = false;
  57. for (int i = 0; i < contor; i++)
  58. {
  59. if (sirADN[i] == 3 && numarinplus == false)
  60. {
  61. numarinplus = true;
  62. }
  63. else
  64. if (sirADN[i] == 3 && numarinplus == true)
  65. {
  66. sirADN[i] = 0;
  67. }
  68. else
  69. if (numarinplus == true)
  70. {
  71. sirADN[i]++;
  72. if (sirADN[i] != 3)
  73. numarinplus = false;
  74. }
  75. }
  76. if (numarinplus == 1)
  77. {
  78. contor++;
  79. sirADN[contor - 1] = 'C';
  80. }
  81. for (int i = 0; i < contor; i++)
  82. if (sirADN[i] == 1)
  83. sirADN[i] = 'C';
  84. else
  85. if (sirADN[i] == 0)
  86. sirADN[i] = 'A';
  87. else
  88. if (sirADN[i] == 3)
  89. sirADN[i] = 'T';
  90. else
  91. if (sirADN[i] == 2)
  92. sirADN[i] = 'G';
  93. sirADN[contor] = NULL;
  94. char copie[MAX_ADN];
  95. for (int i = 0; i < contor; i++)
  96. copie[i] = sirADN[contor - i - 1];
  97. for (int i = 0; i < contor; i++)
  98. sirADN[i] = copie[i];
  99. }
  100. else
  101. {
  102. nrIntreg = nrIntreg - nrIntreg - nrIntreg;
  103.  
  104. int contor = 0;
  105. while (nrIntreg != 0)
  106. {
  107. sirADN[contor] = nrIntreg % 4;
  108. nrIntreg = nrIntreg / 4;
  109. contor++;
  110. }
  111. bool numarinplus = false;
  112. for (int i = 0; i < contor; i++)
  113. {
  114.  
  115. if (sirADN[i] == 2 && numarinplus == false)
  116. {
  117. numarinplus = true;
  118. }
  119. else
  120. if (sirADN[i] == 1 && numarinplus == false)
  121. {
  122.  
  123. sirADN[i] = 3;
  124. }
  125. else
  126. if (sirADN[i] ==0 && numarinplus == false)
  127. {
  128.  
  129. sirADN[i] = 0;
  130. }
  131. else
  132. if (sirADN[i] == 3 && numarinplus == false)
  133. {
  134. sirADN[i] = 1; numarinplus = true;
  135.  
  136. }
  137. else
  138. if (sirADN[i] == 2 && numarinplus == true)
  139. {
  140. sirADN[i] = 1;
  141. numarinplus = true;
  142. }
  143. else
  144. if (sirADN[i] == 1 && numarinplus == true)
  145. {
  146. sirADN[i] = 2;
  147. numarinplus = true;
  148. }
  149. else
  150. if (sirADN[i] == 0 && numarinplus == true)
  151. {
  152. sirADN[i] = 3;
  153. numarinplus = false;
  154. }
  155. else
  156. if (sirADN[i] == 3 && numarinplus == true)
  157. {
  158.  
  159. sirADN[i] = 0;
  160.  
  161. }
  162.  
  163.  
  164. }
  165. if (numarinplus == true)
  166. {
  167. contor++;
  168. sirADN[contor - 1] = 'T';
  169.  
  170. }
  171. for (int i = 0; i < contor; i++)
  172. if (sirADN[i] == 1)
  173. sirADN[i] = 'C';
  174. else
  175. if (sirADN[i] == 0)
  176. sirADN[i] = 'A';
  177. else
  178. if (sirADN[i] == 3)
  179. sirADN[i] = 'T';
  180. else
  181. if (sirADN[i] == 2)
  182. sirADN[i] = 'G';
  183. if(x==-9223372036854775808)
  184. {for(int k1=0;k1<33;k1++)
  185. sirADN[k1]=limneg[k1];
  186. sirADN[33]=NULL;}
  187. else
  188. {sirADN[contor] = NULL;
  189. char copie[MAX_ADN];
  190. for (int i = 0; i < contor; i++)
  191. copie[i] = sirADN[contor - i - 1];
  192. for (int i = 0; i < contor; i++)
  193. sirADN[i] = copie[i];}
  194.  
  195.  
  196. }
  197.  
  198.  
  199. }
  200. }
  201. long long puterela(long long nr)
  202. {
  203. long long k = 4;
  204. long long k2 = 1;
  205. for (long long i = 0; i < nr; i++)
  206. k2 = k2*k;
  207. return k2;
  208. }
  209. long long decodificareADN(char sirADN[MAX_ADN])
  210. {
  211. long long suma = 0;
  212. int poz = 0;
  213. while (sirADN[poz] == 'T' || sirADN[poz] == 'A' || sirADN[poz] == 'C' || sirADN[poz] == 'G')
  214. poz++;
  215. for (int i = 0; i < poz; i++)
  216. {
  217.  
  218. if (sirADN[i] == 'T')
  219. suma = suma + (puterela(poz-1-i)*(-1));
  220. else
  221. if (sirADN[i] == 'A')
  222. suma = suma + (puterela(poz - 1 - i) * 0);
  223. else
  224. if (sirADN[i] == 'C')
  225. suma = suma + (puterela(poz - 1 - i) * 1);
  226. else
  227. if (sirADN[i] == 'G')
  228. suma = suma + (puterela(poz - 1 - i) * 2);
  229.  
  230. }
  231. return suma;
  232. }
  233. void adunareADN(char primulSir[MAX_ADN], char alDoileaSir[MAX_ADN], char suma[MAX_ADN])
  234. {
  235. long long sumacelordoua = decodificareADN(primulSir) + decodificareADN(alDoileaSir);
  236. codificareADN(sumacelordoua, suma);
  237. }
  238. void scadereADN(char primulSir[MAX_ADN], char alDoileaSir[MAX_ADN], char diferenta[MAX_ADN])
  239. {
  240. long long diffcelordoua = decodificareADN(primulSir) - decodificareADN(alDoileaSir);
  241. codificareADN(diffcelordoua, diferenta);
  242.  
  243. }
  244.  
  245.  
  246.  
  247. typedef struct {
  248. char galben;
  249. union {
  250. char verde;
  251. char portocaliu[3];
  252. };
  253. int drum = 1;
  254. } cartonasnou;
  255. rezultat mutariJoc(cartonas vecCartonase[MAX_CARTONASE], unsigned int nCartonase, char literaStart, char sirFinal[MAX_SIR])
  256. {
  257. int k1=0;
  258.  
  259.  
  260.  
  261. cartonasnou cartonase2[MAX_CARTONASE+MAX_CARTONASE];
  262. int cartonasenoi = 0;
  263. rezultat rez;
  264. rez.nrMutari = 5;
  265. int i = 0;
  266.  
  267.  
  268. for (i = 0; i < nCartonase; i++)
  269. {
  270.  
  271. int ok = 0;
  272. if (vecCartonase[i].portocaliu[0] >= 'A'&&vecCartonase[i].portocaliu[0] <= 'Z')
  273. if (vecCartonase[i].portocaliu[1] < 'A' || vecCartonase[i].portocaliu[1] > 'Z')
  274. for (int j = 0; j < nCartonase; j++)
  275. if (vecCartonase[i].portocaliu[0] == vecCartonase[j].galben)
  276. {
  277.  
  278. cartonase2[cartonasenoi].galben = vecCartonase[i].galben;
  279. cartonase2[cartonasenoi].portocaliu[0] = vecCartonase[j].portocaliu[0];
  280. cartonase2[cartonasenoi].portocaliu[1] = vecCartonase[j].portocaliu[1];
  281. cartonase2[cartonasenoi].drum++;
  282. cartonasenoi++;
  283.  
  284. ok = 1;
  285. }
  286. if (ok == 0)
  287. {
  288.  
  289. cartonase2[cartonasenoi].galben = vecCartonase[i].galben;
  290. cartonase2[cartonasenoi].portocaliu[0] = vecCartonase[i].portocaliu[0];
  291. cartonase2[cartonasenoi].portocaliu[1] = vecCartonase[i].portocaliu[1];
  292. cartonasenoi++;
  293.  
  294. }
  295.  
  296. }
  297.  
  298.  
  299. int numarinitial = cartonasenoi;
  300. int gasit=0;
  301. int gasit2 = 3;
  302. while (gasit == 0)
  303. {
  304. for (i = 0; i < numarinitial; i++)
  305. {
  306.  
  307.  
  308. int ok = 0;
  309. if (cartonase2[i].portocaliu[0] >= 'A'&&cartonase2[i].portocaliu[0] <= 'Z')
  310. if (cartonase2[i].portocaliu[1] < 'A' || cartonase2[i].portocaliu[1] > 'Z')
  311. for (int j = 0; j < numarinitial; j++)
  312.  
  313. if (cartonase2[i].portocaliu[0] == cartonase2[j].galben&&i != j)
  314. {
  315.  
  316.  
  317. cartonase2[cartonasenoi].galben = cartonase2[i].galben;
  318. cartonase2[cartonasenoi].portocaliu[0] = cartonase2[j].portocaliu[0];
  319. cartonase2[cartonasenoi].portocaliu[1] = cartonase2[j].portocaliu[1];
  320. cartonase2[cartonasenoi].drum = cartonase2[cartonasenoi].drum + cartonase2[j].drum + 1;
  321. cartonasenoi++;
  322.  
  323. ok = 1;
  324. }
  325.  
  326.  
  327. if (ok == 0)
  328. {
  329. gasit = 1;
  330. int bun = 0;
  331. for (int k1 = 0; k1 < cartonasenoi; k1++)
  332. if (cartonase2[k1].galben == cartonase2[i].galben&&cartonase2[k1].portocaliu[0] == cartonase2[i].portocaliu[0] && cartonase2[k1].portocaliu[1] == cartonase2[i].portocaliu[1])
  333.  
  334. bun = 1;
  335.  
  336.  
  337. if (bun == 0)
  338. {
  339. cartonase2[cartonasenoi].galben = cartonase2[i].galben;
  340. cartonase2[cartonasenoi].portocaliu[0] = cartonase2[i].portocaliu[0];
  341. cartonase2[cartonasenoi].portocaliu[1] = cartonase2[i].portocaliu[1];
  342. cartonasenoi++;
  343. }
  344.  
  345. }
  346.  
  347. }
  348. gasit2--;
  349. if (gasit2 == 0||gasit==1)
  350. gasit = 1;
  351. numarinitial = cartonasenoi;
  352.  
  353. }
  354.  
  355. i = 0; int poz = 0;
  356. while (sirFinal[i] >= '0'&&sirFinal[i] <= '9')
  357. {
  358. for (int j = 0; j < cartonasenoi; j++)
  359.  
  360. {
  361.  
  362. if (cartonase2[j].verde == sirFinal[i])
  363. {
  364.  
  365. matrice[poz][i].cate[matrice[poz][i].contor] = cartonase2[j].galben;
  366. matrice[poz][i].drum[matrice[poz][i].contor] = cartonase2[j].drum;
  367. matrice[poz][i].contor++;
  368.  
  369. }
  370. }
  371.  
  372. i++;
  373. }
  374.  
  375. int maxpereche = i;
  376. int limita = i-1;
  377.  
  378. i = 1;
  379. int j = 0;
  380.  
  381. for( i=1;i<=limita;i++)
  382. {
  383. for( j=0;j<limita - i + 1;j++)
  384. {
  385.  
  386.  
  387. for (int virgula = 1; virgula <= i; virgula++)
  388.  
  389.  
  390. {
  391.  
  392. for (int k1 = 0; k1 < matrice[virgula-1][j].contor; k1++)
  393. {
  394.  
  395. for (int k2 = 0; k2 < matrice[i - virgula][j + virgula].contor; k2++)
  396. {
  397.  
  398.  
  399. char cuvant[3];
  400.  
  401. cuvant[0] = matrice[virgula-1][j].cate[k1];
  402. cuvant[1] = matrice[i-virgula][j+virgula].cate[k2];
  403. int drumul = matrice[virgula - 1][j].drum[k1] + matrice[i - virgula][j + virgula].drum[k2] + 1;
  404. for (int k3 = 0; k3 < cartonasenoi; k3++)
  405. if (cartonase2[k3].portocaliu[0] == cuvant[0] && cartonase2[k3].portocaliu[1] == cuvant[1])
  406. {
  407.  
  408. matrice[i][j].cate[matrice[i][j].contor] = cartonase2[k3].galben;
  409. matrice[i][j].drum[matrice[i][j].contor] = drumul;
  410. matrice[i][j].contor++;
  411. }
  412.  
  413. }
  414. }
  415.  
  416.  
  417.  
  418.  
  419.  
  420. }
  421. }
  422.  
  423.  
  424. }
  425.  
  426. int suma = 9999999;
  427.  
  428. for (int k1 = 0; k1 < matrice[i - 1][0].contor; k1++)
  429. if (matrice[i - 1][0].cate[k1] == literaStart)
  430. if (suma > matrice[i - 1][0].drum[k1])
  431. suma = matrice[i - 1][0].drum[k1];
  432. if (suma == 9999999)
  433. {
  434. rez.sePoate = false;
  435. rez.nrMutari = 0;
  436. }
  437. else
  438. {
  439. rez.nrMutari = suma;
  440. rez.sePoate = true;
  441. }
  442. cout<<rez.nrMutari;
  443. return rez;
  444.  
  445. }
  446.  
  447.  
  448.  
  449. int main()
  450. {
  451. /*cartonas a[MAX_CARTONASE];
  452. a[0].galben = 'D';
  453. a[0].portocaliu[0] = 'C';
  454. a[1].galben = 'D';
  455. a[1].portocaliu[0] = 'T';
  456. a[2].galben = 'C';
  457. a[2].portocaliu[0] = 'B';
  458. a[3].galben = 'T';
  459. a[3].portocaliu[0] = 'A';
  460. a[4].galben = 'A';
  461. a[4].verde = '1';
  462. char b[20];
  463. b[0] = '1';
  464. cartonas a[MAX_CARTONASE];
  465. a[0].galben = 'S';
  466. a[0].portocaliu[0] = 'N';
  467. a[0].portocaliu[1] = 'V';
  468. a[1].galben = 'N';
  469. a[1].portocaliu[0] = 'Z';
  470. a[2].galben = 'V';
  471. a[2].portocaliu[0] = 'W';
  472. a[2].portocaliu[1] = 'N';
  473. a[3].galben = 'V';
  474. a[3].portocaliu[0] = 'W';
  475. a[4].galben = 'N';
  476. a[4].portocaliu[0] = 'D';
  477. a[4].portocaliu[1] = 'Z';
  478. a[5].galben = 'D';
  479. a[5].verde = '2';
  480. a[6].galben = 'D';
  481. a[6].verde = '1';
  482. a[7].galben = 'Z';
  483. a[7].verde = '0';
  484. a[8].galben = 'Z';
  485. a[8].verde = '4';
  486. a[9].galben = 'W';
  487. a[9].verde = '5';
  488.  
  489. char b[20];
  490. b[0] = '1';
  491. b[1] = '0';
  492. b[2] = '5';
  493. b[3] = '2';
  494. b[4] = '4';
  495. b[5] = NULL;
  496. time_t start = time(0);
  497. for(int k1=0;k1<5;k1++)
  498. mutariJoc(a, 10, 'S', b);
  499. time_t end = time(0);
  500. double time = difftime(end, start) ;
  501. cout << endl;
  502. cout << time;
  503. */
  504.  
  505. ifstream fin("date.in");
  506. int nr;
  507. fin>>nr;
  508.  
  509. cartonas v[MAX_CARTONASE];
  510. for(int i=0;i<nr;i++)
  511. fin>>v[i].galben>>v[i].portocaliu;
  512. char start;
  513. fin>>start;
  514. char sirfin[MAX_SIR];
  515. fin>>sirfin;
  516. //mutariJoc(v,nr,start,sirfin);
  517. char sir[MAX_ADN]="TGATGATGATGATGATGATGATG";
  518. char sir2[MAX_ADN]="GAAAAAAAAAAAAAAT";
  519. char sir3[MAX_ADN];
  520. adunareADN(sir,sir2,sir3);
  521. cout<<sir3<<endl;
  522.  
  523. return 0;
  524. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement