Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <sstream>
- typedef struct maillon {
- int indice;
- int couleur;
- struct maillon* suiv;
- struct maillon* circ;
- } maillon;
- typedef maillon* liste;
- int cube[54]={1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6};
- using namespace std;
- maillon melanger( maillon *l,int cube[], int cpt, char melange[]);
- void display(void);
- maillon permu_A( maillon *l,int cube[]);
- maillon permu_B( maillon *l,int cube[]);
- maillon permu_C( maillon *l,int cube[]);
- maillon permu_D( maillon *l,int cube[]);
- maillon permu_E( maillon *l,int cube[]);
- maillon permu_F( maillon *l,int cube[]);
- maillon permu_G ( maillon *l , int cube[]);
- maillon permu_H ( maillon *l , int cube[]);
- maillon permu_I ( maillon *l , int cube[]);
- maillon permu_J ( maillon *l , int cube[]);
- maillon permu_K ( maillon *l , int cube[]);
- maillon permu_L ( maillon *l , int cube[]);
- maillon permu_M ( maillon *l , int cube[]);
- maillon permu_N ( maillon *l , int cube[]);
- maillon permu_O ( maillon *l , int cube[]);
- maillon permu_P ( maillon *l , int cube[]);
- maillon permu_Q ( maillon *l , int cube[]);
- maillon permu_R ( maillon *l , int cube[]);
- maillon permu_S ( maillon *l , int cube[]);
- maillon permu_T ( maillon *l , int cube[]);
- maillon permu_U ( maillon *l , int cube[]);
- maillon permu_V ( maillon *l , int cube[]);
- maillon permu_W ( maillon *l , int cube[]);
- maillon permu_X ( maillon *l , int cube[]);
- maillon permu_Y ( maillon *l , int cube[]);
- maillon permu_Z ( maillon *l , int cube[]);
- maillon permu_at ( maillon *l , int cube[]);
- //void draw_cube(int cube[54]);
- //void display(void);
- //void draw_face(float vertex[4][3],char color[3]);
- void displayCube(int* cube) {
- ostringstream command("");
- command << "rubik-viewer.exe ";
- for (int i = 0; i < 54; i++) command << cube[i];
- system(command.str().c_str());
- }
- int main()
- {
- FILE * stream = fopen("I:\\Documents and Settings\\Piednoir\\Bureau\\input.txt","r");
- int nbchar=0;
- if(stream != NULL)
- {
- int cpt2=0;
- char caractereactuel=0;
- caractereactuel = fgetc(stream);
- while(caractereactuel != EOF)
- {
- //cout << caractereactuel; // on l'affiche
- caractereactuel = fgetc(stream); // on lit un caractère et on le stocke dans caractere
- nbchar++;
- }
- fseek(stream, 0, SEEK_SET);
- char melange[nbchar];
- caractereactuel = fgetc(stream);
- while(caractereactuel != EOF)
- {
- melange[cpt2]=caractereactuel;
- cout << caractereactuel;
- caractereactuel = fgetc(stream); // on lit un caractère et on le stocke dans caractere
- cpt2++;
- }
- fclose(stream);
- int permutation[30][4]={{3,30,46,19},{6,33,47,20},{9,36,48,21},{39,37,43,45},{38,40,44,42},{16,7,37,46},{17,8,40,49},{18,9,43,52},{35,31,29,33},{34,28,30,36},{25,16,36,45},{22,13,35,44},{19,10,34,43},{54,52,46,48},{51,53,49,47},{1,28,52,25},{4,31,53,26},{7,34,54,27},{12,18,16,10},{15,17,13,11},{10,1,39,48},{11,2,42,51},{12,3,45,54},{26,24,20,22},{27,21,19,25},{27,18,30,39},{24,15,29,38},{21,12,28,37},{1,7,9,3},{4,8,6,2}};
- /** De 0 à 4 c'est rotation en X // 5->9 Y // 10->14 Z // 15->19 -X // 20->24 -Y // 25->29 -Z**/
- int indice=0,val=0;
- maillon* m = new maillon;
- m->suiv = NULL;
- m->circ=NULL;
- maillon* l =m;
- for ( int cpt = 0 ; cpt <= 5 ; cpt++)
- {
- maillon *temp = new maillon;
- temp->suiv = NULL; /**LISTE CHAINEE ICI**/
- maillon *cycl= new maillon;
- temp->circ = cycl;
- maillon * tmp =cycl;
- indice = 0;
- for ( int cpt2 = 0 ; cpt2 <= 4 ; cpt2 ++)
- {
- val=0;
- maillon *temp2 = new maillon;
- cycl->circ = temp2;
- maillon *permu =new maillon; /**LISTE CIRCULAIRE POUR AVOIR ACCES AUX CYCLES DE PERMUTATION**/
- maillon *tmp=permu; /** On garde l'adresse de notre maillon du début**/
- cycl->suiv = permu;
- permu->indice = permutation[indice][val]-1;
- permu->couleur = cube[permu->indice];
- //cout <<endl<< "couleur : " << permu->couleur;
- //cout <<endl<< "indice : " <<permu->indice+1;
- val++;
- for ( int cpt3 = 0 ; cpt3 <= 2 ; cpt3++) /**ON CREE NOTRE LISTE CIRCULAIRE DE PERMUTATION ICI**/ //à remplir manuellement
- {
- maillon *temp3 = new maillon;
- temp3->indice = permutation[indice][val]-1;
- temp3->couleur = cube[temp3->indice];
- //cout <<endl<< "couleur : " << temp3->couleur;
- //cout <<endl<< "indice : " <<temp3->indice+1;
- // system("pause");
- permu->circ = temp3;
- permu = temp3;
- val++;
- }
- indice++;
- permu->circ = tmp; /**On ferme ici la liste circulaire**/
- cycl= cycl->circ;
- }
- cycl->circ = tmp; /** pareil ici **/
- m->suiv = temp;
- m=m->suiv;
- }
- displayCube(cube);
- permu_B(l,cube);
- cout << endl;
- //system("pause");
- //melanger(l,cube,nbchar,melange);
- displayCube(cube);
- }
- else
- {
- system("pause");
- cerr << "Impossible d'ouvrir le fichier !" << endl;
- }
- system("pause");
- //displayCube(cube);
- }
- maillon melanger( maillon *l,int cube[], int nbchar, char melange[])
- {
- for ( int pp = 0 ; pp < nbchar ; pp ++)
- {
- cout << melange[pp];
- }
- cout << endl;
- for ( int cmpt = 0 ; cmpt < nbchar ; cmpt++)
- {
- switch ( melange[cmpt])
- {
- case 'A':
- *l = permu_A( l, cube);
- break;
- case 'B':
- *l = permu_B( l, cube);
- break;
- case 'C':
- *l = permu_C( l, cube);
- break;
- case 'D':
- *l = permu_D( l, cube);
- break;
- case 'E':
- *l = permu_E( l, cube);
- break;
- case 'F':
- *l = permu_F( l, cube);
- break;
- case 'G':
- *l = permu_G( l, cube);
- break;
- case 'H':
- *l = permu_H( l, cube);
- break;
- case 'I':
- *l = permu_I( l, cube);
- break;
- case 'J':
- *l = permu_J( l, cube);
- break;
- case 'K':
- *l = permu_K( l, cube);
- break;
- case 'L':
- *l = permu_L( l, cube);
- break;
- case 'M':
- *l = permu_M( l, cube);
- break;
- case 'N':
- *l = permu_N( l, cube);
- break;
- case 'O':
- *l = permu_O( l, cube);
- break;
- case 'P':
- *l = permu_P( l, cube);
- break;
- case 'Q':
- *l = permu_Q( l, cube);
- break;
- case 'R':
- *l = permu_R( l, cube);
- break;
- case 'S':
- *l = permu_S( l, cube);
- break;
- case 'T':
- *l = permu_T( l, cube);
- break;
- case 'U':
- *l = permu_U( l, cube);
- break;
- case 'V':
- *l = permu_V( l, cube);
- break;
- case 'W':
- *l = permu_W( l, cube);
- break;
- case 'X':
- *l = permu_X( l, cube);
- break;
- case 'Y':
- *l = permu_Y( l, cube);
- break;
- case 'Z':
- *l = permu_Z( l, cube);
- break;
- case '@':
- *l = permu_at( l, cube);
- break;
- default:
- cout << endl << "Caractere non reconnu"<< endl;
- break;
- }
- }
- return *l;
- }
- maillon permu_A( maillon *l ,int cube[])
- {
- maillon *cour1,*cour;
- cour1 = l->suiv->circ;
- int tmp;
- for ( int cpt = 0 ; cpt <= 4; cpt ++ )
- {
- cour = cour1->suiv;
- tmp=cube[cour->circ->circ->circ->indice];/** YOU WIN!!!!**/
- cube[cour->circ->circ->circ->indice]= cube[cour->circ->circ->indice];
- cube[cour->circ->circ->indice]= cube[cour->circ->indice];
- cube[cour->circ->indice]= cube[cour->indice];
- cube[cour->indice]= tmp;
- cour1 =cour1->circ;
- }
- //displayCube(cube);
- return *l ;
- }
- maillon permu_B( maillon *l,int cube[])
- {
- maillon *cour1,*cour;
- cour1 = l->suiv->suiv->circ;
- int tmp;
- for ( int cpt = 0 ; cpt <= 4; cpt ++ )
- {
- cour = cour1->suiv;
- tmp=cube[cour->circ->circ->circ->indice];/** YOU WIN!!!!**/
- cube[cour->circ->circ->circ->indice]= cube[cour->circ->circ->indice];
- cube[cour->circ->circ->indice]= cube[cour->circ->indice];
- cube[cour->circ->indice]= cube[cour->indice];
- cube[cour->indice]= tmp;
- cour1 =cour1->circ;
- }
- //displayCube(cube);
- return *l ;
- }
- maillon permu_C( maillon *l,int cube[])
- {
- maillon *cour1,*cour;
- cour1 = l->suiv->suiv->suiv->circ;
- int tmp;
- for ( int cpt = 0 ; cpt <= 4; cpt ++ )
- {
- cour = cour1->suiv;
- tmp=cube[cour->circ->circ->circ->indice];/** YOU WIN!!!!**/
- cube[cour->circ->circ->circ->indice]= cube[cour->circ->circ->indice];
- cube[cour->circ->circ->indice]= cube[cour->circ->indice];
- cube[cour->circ->indice]= cube[cour->indice];
- cube[cour->indice]= tmp;
- cour1 =cour1->circ;
- }
- //displayCube(cube);
- return *l ;
- }
- maillon permu_D( maillon *l,int cube[])
- {
- maillon *cour1,*cour;
- cour1 = l->suiv->suiv->suiv->suiv->circ;
- int tmp;
- for ( int cpt = 0 ; cpt <= 4; cpt ++ )
- {
- cour = cour1->suiv;
- tmp=cube[cour->circ->circ->circ->indice];/** YOU WIN!!!!**/
- cube[cour->circ->circ->circ->indice]= cube[cour->circ->circ->indice];
- cube[cour->circ->circ->indice]= cube[cour->circ->indice];
- cube[cour->circ->indice]= cube[cour->indice];
- cube[cour->indice]= tmp;
- cour1 =cour1->circ;
- }
- //displayCube(cube);
- return *l ;
- }
- maillon permu_E( maillon *l,int cube[])
- {
- maillon *cour1,*cour;
- cour1 = l->suiv->suiv->suiv->suiv->suiv->circ;
- int tmp;
- for ( int cpt = 0 ; cpt <= 4; cpt ++ )
- {
- cour = cour1->suiv;
- tmp=cube[cour->circ->circ->circ->indice];/** YOU WIN!!!!**/
- cube[cour->circ->circ->circ->indice]= cube[cour->circ->circ->indice];
- cube[cour->circ->circ->indice]= cube[cour->circ->indice];
- cube[cour->circ->indice]= cube[cour->indice];
- cube[cour->indice]= tmp;
- cour1 =cour1->circ;
- }
- //displayCube(cube);
- return *l ;
- }
- maillon permu_F( maillon *l,int cube[])
- {
- maillon *cour1,*cour;
- cour1 = l->suiv->suiv->suiv->suiv->suiv->suiv->circ;
- int tmp;
- for ( int cpt = 0 ; cpt <= 4; cpt ++ )
- {
- cour = cour1->suiv;
- tmp=cube[cour->circ->circ->circ->indice];/** YOU WIN!!!!**/
- cube[cour->circ->circ->circ->indice]= cube[cour->circ->circ->indice];
- cube[cour->circ->circ->indice]= cube[cour->circ->indice];
- cube[cour->circ->indice]= cube[cour->indice];
- cube[cour->indice]= tmp;
- cour1 =cour1->circ;
- }
- displayCube(cube);
- return *l ;
- }
- maillon permu_G ( maillon *l , int cube[])
- {
- *l=permu_A(l,cube);
- *l=permu_A(l,cube);
- *l=permu_A(l,cube);
- return *l;
- }
- maillon permu_H ( maillon *l , int cube[])
- {
- *l=permu_B(l,cube);
- *l=permu_B(l,cube);
- *l=permu_B(l,cube);
- return *l;
- }
- maillon permu_I ( maillon *l , int cube[])
- {
- *l=permu_C(l,cube);
- *l=permu_C(l,cube);
- *l=permu_C(l,cube);
- return *l;
- }
- maillon permu_J ( maillon *l , int cube[])
- {
- *l=permu_D(l,cube);
- *l=permu_D(l,cube);
- *l=permu_D(l,cube);
- return *l;
- }
- maillon permu_K ( maillon *l , int cube[])
- {
- *l=permu_E(l,cube);
- *l=permu_E(l,cube);
- *l=permu_E(l,cube);
- return *l;
- }
- maillon permu_L ( maillon *l , int cube[])
- {
- *l=permu_F(l,cube);
- *l=permu_F(l,cube);
- *l=permu_F(l,cube);
- return *l;
- }
- maillon permu_M ( maillon *l , int cube[])
- {
- *l=permu_A(l,cube);
- *l=permu_A(l,cube);
- return *l;
- }
- maillon permu_N ( maillon *l , int cube[])
- {
- *l=permu_B(l,cube);
- *l=permu_B(l,cube);
- return *l;
- }
- maillon permu_O ( maillon *l , int cube[])
- {
- *l=permu_C(l,cube);
- *l=permu_C(l,cube);
- return *l;
- }
- maillon permu_P ( maillon *l , int cube[])
- {
- *l=permu_D(l,cube);
- *l=permu_D(l,cube);
- return *l;
- }
- maillon permu_Q ( maillon *l , int cube[])
- {
- *l=permu_E(l,cube);
- *l=permu_E(l,cube);
- return *l;
- }
- maillon permu_R ( maillon *l , int cube[])
- {
- *l=permu_F(l,cube);
- *l=permu_F(l,cube);
- return *l;
- }
- maillon permu_S ( maillon *l , int cube[])
- {
- *l=permu_G(l,cube);
- *l=permu_D(l,cube);
- return *l;
- }
- maillon permu_T ( maillon *l , int cube[])
- {
- *l=permu_H(l,cube);
- *l=permu_E(l,cube);
- return *l;
- }
- maillon permu_U ( maillon *l , int cube[])
- {
- *l=permu_I(l,cube);
- *l=permu_F(l,cube);
- return *l;
- }
- maillon permu_V ( maillon *l , int cube[])
- {
- *l=permu_J(l,cube);
- *l=permu_A(l,cube);
- return *l;
- }
- maillon permu_W ( maillon *l , int cube[])
- {
- *l=permu_K(l,cube);
- *l=permu_B(l,cube);
- return *l;
- }
- maillon permu_X ( maillon *l , int cube[])
- {
- *l=permu_L(l,cube);
- *l=permu_C(l,cube);
- return *l;
- }
- maillon permu_Y ( maillon *l , int cube[])
- {
- *l=permu_S(l,cube);
- *l=permu_S(l,cube);
- return *l;
- }
- maillon permu_Z ( maillon *l , int cube[])
- {
- *l=permu_T(l,cube);
- *l=permu_T(l,cube);
- return *l;
- }
- maillon permu_at ( maillon *l , int cube[])
- {
- *l=permu_U(l,cube);
- *l=permu_U(l,cube);
- return *l;
- }
Add Comment
Please, Sign In to add comment