Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Tema2.cpp : Defines the entry point for the console application.
- //
- #include <iostream>
- #include <fstream>
- #include "t2.h"
- struct sf {
- int contor=0;
- char cate[100];
- int drum[100];
- }matrice[16][16];
- lista mutarii=new mutare;
- lista prim = mutarii;
- void codificareADN(long long nrIntreg, char sirADN[MAX_ADN])
- {
- long long x = nrIntreg;
- char limneg[35]="TGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
- if (nrIntreg == 0)
- {
- sirADN[0] = 'A';
- sirADN[1] = NULL;
- }
- else
- if (nrIntreg == -1)
- {
- sirADN[0] = 'T';
- sirADN[1] = NULL;
- }
- else
- if (nrIntreg == 1)
- {
- sirADN[0] = 'C';
- sirADN[1] = NULL;
- }
- else
- if (nrIntreg == 2)
- {
- sirADN[0] = 'G';
- sirADN[1] = NULL;
- }
- else
- {
- if (nrIntreg > 2)
- {
- int contor = 0;
- while (nrIntreg != 0)
- {
- sirADN[contor] = nrIntreg % 4;
- nrIntreg = nrIntreg / 4;
- contor++;
- }
- bool numarinplus = false;
- for (int i = 0; i < contor; i++)
- {
- if (sirADN[i] == 3 && numarinplus == false)
- {
- numarinplus = true;
- }
- else
- if (sirADN[i] == 3 && numarinplus == true)
- {
- sirADN[i] = 0;
- }
- else
- if (numarinplus == true)
- {
- sirADN[i]++;
- if (sirADN[i] != 3)
- numarinplus = false;
- }
- }
- if (numarinplus == 1)
- {
- contor++;
- sirADN[contor - 1] = 'C';
- }
- for (int i = 0; i < contor; i++)
- if (sirADN[i] == 1)
- sirADN[i] = 'C';
- else
- if (sirADN[i] == 0)
- sirADN[i] = 'A';
- else
- if (sirADN[i] == 3)
- sirADN[i] = 'T';
- else
- if (sirADN[i] == 2)
- sirADN[i] = 'G';
- sirADN[contor] = NULL;
- char copie[MAX_ADN];
- for (int i = 0; i < contor; i++)
- copie[i] = sirADN[contor - i - 1];
- for (int i = 0; i < contor; i++)
- sirADN[i] = copie[i];
- }
- else
- {
- nrIntreg = nrIntreg - nrIntreg - nrIntreg;
- int contor = 0;
- while (nrIntreg != 0)
- {
- sirADN[contor] = nrIntreg % 4;
- nrIntreg = nrIntreg / 4;
- contor++;
- }
- bool numarinplus = false;
- for (int i = 0; i < contor; i++)
- {
- if (sirADN[i] == 2 && numarinplus == false)
- {
- numarinplus = true;
- }
- else
- if (sirADN[i] == 1 && numarinplus == false)
- {
- sirADN[i] = 3;
- }
- else
- if (sirADN[i] ==0 && numarinplus == false)
- {
- sirADN[i] = 0;
- }
- else
- if (sirADN[i] == 3 && numarinplus == false)
- {
- sirADN[i] = 1; numarinplus = true;
- }
- else
- if (sirADN[i] == 2 && numarinplus == true)
- {
- sirADN[i] = 1;
- numarinplus = true;
- }
- else
- if (sirADN[i] == 1 && numarinplus == true)
- {
- sirADN[i] = 2;
- numarinplus = true;
- }
- else
- if (sirADN[i] == 0 && numarinplus == true)
- {
- sirADN[i] = 3;
- numarinplus = false;
- }
- else
- if (sirADN[i] == 3 && numarinplus == true)
- {
- sirADN[i] = 0;
- }
- }
- if (numarinplus == true)
- {
- contor++;
- sirADN[contor - 1] = 'T';
- }
- for (int i = 0; i < contor; i++)
- if (sirADN[i] == 1)
- sirADN[i] = 'C';
- else
- if (sirADN[i] == 0)
- sirADN[i] = 'A';
- else
- if (sirADN[i] == 3)
- sirADN[i] = 'T';
- else
- if (sirADN[i] == 2)
- sirADN[i] = 'G';
- if(x==-9223372036854775808)
- {for(int k1=0;k1<33;k1++)
- sirADN[k1]=limneg[k1];
- sirADN[33]=NULL;}
- else
- {sirADN[contor] = NULL;
- char copie[MAX_ADN];
- for (int i = 0; i < contor; i++)
- copie[i] = sirADN[contor - i - 1];
- for (int i = 0; i < contor; i++)
- sirADN[i] = copie[i];}
- }
- }
- }
- long long puterela(long long nr)
- {
- long long k = 4;
- long long k2 = 1;
- for (long long i = 0; i < nr; i++)
- k2 = k2*k;
- return k2;
- }
- long long decodificareADN(char sirADN[MAX_ADN])
- {
- long long suma = 0;
- int poz = 0;
- while (sirADN[poz] == 'T' || sirADN[poz] == 'A' || sirADN[poz] == 'C' || sirADN[poz] == 'G')
- poz++;
- for (int i = 0; i < poz; i++)
- {
- if (sirADN[i] == 'T')
- suma = suma + (puterela(poz-1-i)*(-1));
- else
- if (sirADN[i] == 'A')
- suma = suma + (puterela(poz - 1 - i) * 0);
- else
- if (sirADN[i] == 'C')
- suma = suma + (puterela(poz - 1 - i) * 1);
- else
- if (sirADN[i] == 'G')
- suma = suma + (puterela(poz - 1 - i) * 2);
- }
- return suma;
- }
- void adunareADN(char primulSir[MAX_ADN], char alDoileaSir[MAX_ADN], char suma[MAX_ADN])
- {
- long long sumacelordoua = decodificareADN(primulSir) + decodificareADN(alDoileaSir);
- codificareADN(sumacelordoua, suma);
- }
- void scadereADN(char primulSir[MAX_ADN], char alDoileaSir[MAX_ADN], char diferenta[MAX_ADN])
- {
- long long diffcelordoua = decodificareADN(primulSir) - decodificareADN(alDoileaSir);
- codificareADN(diffcelordoua, diferenta);
- }
- typedef struct {
- char galben;
- union {
- char verde;
- char portocaliu[3];
- };
- int drum = 1;
- } cartonasnou;
- rezultat mutariJoc(cartonas vecCartonase[MAX_CARTONASE], unsigned int nCartonase, char literaStart, char sirFinal[MAX_SIR])
- {
- int k1=0;
- cartonasnou cartonase2[MAX_CARTONASE+MAX_CARTONASE];
- int cartonasenoi = 0;
- rezultat rez;
- rez.nrMutari = 5;
- int i = 0;
- for (i = 0; i < nCartonase; i++)
- {
- int ok = 0;
- if (vecCartonase[i].portocaliu[0] >= 'A'&&vecCartonase[i].portocaliu[0] <= 'Z')
- if (vecCartonase[i].portocaliu[1] < 'A' || vecCartonase[i].portocaliu[1] > 'Z')
- for (int j = 0; j < nCartonase; j++)
- if (vecCartonase[i].portocaliu[0] == vecCartonase[j].galben)
- {
- cartonase2[cartonasenoi].galben = vecCartonase[i].galben;
- cartonase2[cartonasenoi].portocaliu[0] = vecCartonase[j].portocaliu[0];
- cartonase2[cartonasenoi].portocaliu[1] = vecCartonase[j].portocaliu[1];
- cartonase2[cartonasenoi].drum++;
- cartonasenoi++;
- ok = 1;
- }
- if (ok == 0)
- {
- cartonase2[cartonasenoi].galben = vecCartonase[i].galben;
- cartonase2[cartonasenoi].portocaliu[0] = vecCartonase[i].portocaliu[0];
- cartonase2[cartonasenoi].portocaliu[1] = vecCartonase[i].portocaliu[1];
- cartonasenoi++;
- }
- }
- int numarinitial = cartonasenoi;
- int gasit=0;
- int gasit2 = 3;
- while (gasit == 0)
- {
- for (i = 0; i < numarinitial; i++)
- {
- int ok = 0;
- if (cartonase2[i].portocaliu[0] >= 'A'&&cartonase2[i].portocaliu[0] <= 'Z')
- if (cartonase2[i].portocaliu[1] < 'A' || cartonase2[i].portocaliu[1] > 'Z')
- for (int j = 0; j < numarinitial; j++)
- if (cartonase2[i].portocaliu[0] == cartonase2[j].galben&&i != j)
- {
- cartonase2[cartonasenoi].galben = cartonase2[i].galben;
- cartonase2[cartonasenoi].portocaliu[0] = cartonase2[j].portocaliu[0];
- cartonase2[cartonasenoi].portocaliu[1] = cartonase2[j].portocaliu[1];
- cartonase2[cartonasenoi].drum = cartonase2[cartonasenoi].drum + cartonase2[j].drum + 1;
- cartonasenoi++;
- ok = 1;
- }
- if (ok == 0)
- {
- gasit = 1;
- int bun = 0;
- for (int k1 = 0; k1 < cartonasenoi; k1++)
- if (cartonase2[k1].galben == cartonase2[i].galben&&cartonase2[k1].portocaliu[0] == cartonase2[i].portocaliu[0] && cartonase2[k1].portocaliu[1] == cartonase2[i].portocaliu[1])
- bun = 1;
- if (bun == 0)
- {
- cartonase2[cartonasenoi].galben = cartonase2[i].galben;
- cartonase2[cartonasenoi].portocaliu[0] = cartonase2[i].portocaliu[0];
- cartonase2[cartonasenoi].portocaliu[1] = cartonase2[i].portocaliu[1];
- cartonasenoi++;
- }
- }
- }
- gasit2--;
- if (gasit2 == 0||gasit==1)
- gasit = 1;
- numarinitial = cartonasenoi;
- }
- i = 0; int poz = 0;
- while (sirFinal[i] >= '0'&&sirFinal[i] <= '9')
- {
- for (int j = 0; j < cartonasenoi; j++)
- {
- if (cartonase2[j].verde == sirFinal[i])
- {
- matrice[poz][i].cate[matrice[poz][i].contor] = cartonase2[j].galben;
- matrice[poz][i].drum[matrice[poz][i].contor] = cartonase2[j].drum;
- matrice[poz][i].contor++;
- }
- }
- i++;
- }
- int maxpereche = i;
- int limita = i-1;
- i = 1;
- int j = 0;
- for( i=1;i<=limita;i++)
- {
- for( j=0;j<limita - i + 1;j++)
- {
- for (int virgula = 1; virgula <= i; virgula++)
- {
- for (int k1 = 0; k1 < matrice[virgula-1][j].contor; k1++)
- {
- for (int k2 = 0; k2 < matrice[i - virgula][j + virgula].contor; k2++)
- {
- char cuvant[3];
- cuvant[0] = matrice[virgula-1][j].cate[k1];
- cuvant[1] = matrice[i-virgula][j+virgula].cate[k2];
- int drumul = matrice[virgula - 1][j].drum[k1] + matrice[i - virgula][j + virgula].drum[k2] + 1;
- for (int k3 = 0; k3 < cartonasenoi; k3++)
- if (cartonase2[k3].portocaliu[0] == cuvant[0] && cartonase2[k3].portocaliu[1] == cuvant[1])
- {
- matrice[i][j].cate[matrice[i][j].contor] = cartonase2[k3].galben;
- matrice[i][j].drum[matrice[i][j].contor] = drumul;
- matrice[i][j].contor++;
- }
- }
- }
- }
- }
- }
- int suma = 9999999;
- for (int k1 = 0; k1 < matrice[i - 1][0].contor; k1++)
- if (matrice[i - 1][0].cate[k1] == literaStart)
- if (suma > matrice[i - 1][0].drum[k1])
- suma = matrice[i - 1][0].drum[k1];
- if (suma == 9999999)
- {
- rez.sePoate = false;
- rez.nrMutari = 0;
- }
- else
- {
- rez.nrMutari = suma;
- rez.sePoate = true;
- }
- cout<<rez.nrMutari;
- return rez;
- }
- int main()
- {
- /*cartonas a[MAX_CARTONASE];
- a[0].galben = 'D';
- a[0].portocaliu[0] = 'C';
- a[1].galben = 'D';
- a[1].portocaliu[0] = 'T';
- a[2].galben = 'C';
- a[2].portocaliu[0] = 'B';
- a[3].galben = 'T';
- a[3].portocaliu[0] = 'A';
- a[4].galben = 'A';
- a[4].verde = '1';
- char b[20];
- b[0] = '1';
- cartonas a[MAX_CARTONASE];
- a[0].galben = 'S';
- a[0].portocaliu[0] = 'N';
- a[0].portocaliu[1] = 'V';
- a[1].galben = 'N';
- a[1].portocaliu[0] = 'Z';
- a[2].galben = 'V';
- a[2].portocaliu[0] = 'W';
- a[2].portocaliu[1] = 'N';
- a[3].galben = 'V';
- a[3].portocaliu[0] = 'W';
- a[4].galben = 'N';
- a[4].portocaliu[0] = 'D';
- a[4].portocaliu[1] = 'Z';
- a[5].galben = 'D';
- a[5].verde = '2';
- a[6].galben = 'D';
- a[6].verde = '1';
- a[7].galben = 'Z';
- a[7].verde = '0';
- a[8].galben = 'Z';
- a[8].verde = '4';
- a[9].galben = 'W';
- a[9].verde = '5';
- char b[20];
- b[0] = '1';
- b[1] = '0';
- b[2] = '5';
- b[3] = '2';
- b[4] = '4';
- b[5] = NULL;
- time_t start = time(0);
- for(int k1=0;k1<5;k1++)
- mutariJoc(a, 10, 'S', b);
- time_t end = time(0);
- double time = difftime(end, start) ;
- cout << endl;
- cout << time;
- */
- ifstream fin("date.in");
- int nr;
- fin>>nr;
- cartonas v[MAX_CARTONASE];
- for(int i=0;i<nr;i++)
- fin>>v[i].galben>>v[i].portocaliu;
- char start;
- fin>>start;
- char sirfin[MAX_SIR];
- fin>>sirfin;
- //mutariJoc(v,nr,start,sirfin);
- char sir[MAX_ADN]="TGATGATGATGATGATGATGATG";
- char sir2[MAX_ADN]="GAAAAAAAAAAAAAAT";
- char sir3[MAX_ADN];
- adunareADN(sir,sir2,sir3);
- cout<<sir3<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement