pastebin - collaborative debugging

pastebin is a collaborative debugging tool allowing you to share and modify code snippets while chatting on IRC, IM or a message board.

This site is developed to XHTML and CSS2 W3C standards. If you see this paragraph, your browser does not support those standards and you need to upgrade. Visit WaSP for a variety of options.

C++ pastebin - collaborative debugging tool View Help


Posted by EnDleSs_DaRk on Fri 4 Sep 19:21
report abuse | download | new post

  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. //Colores de las celdas
  7. enum TipoCelda
  8. {Azul,Negro,Amarillo,Naranja,Rojo,Verde,Nada};
  9.  
  10. //Clase celda
  11. class celda {
  12.         private:
  13.            TipoCelda tipocelda;
  14.            int valor;
  15.         public:
  16.  
  17. //Set tipo de celda
  18.  void setTipo(int tipo) {
  19.    switch(tipo)
  20.         {case 1:
  21.          tipocelda = Azul;
  22.          break;
  23.          case 2:
  24.          tipocelda = Negro;
  25.          break;
  26.          case 3:
  27.          tipocelda = Amarillo;
  28.          break;
  29.          case 4:
  30.          tipocelda = Naranja;
  31.          break;
  32.          case 5:
  33.          tipocelda = Rojo;
  34.          break;
  35.          case 6:
  36.          tipocelda = Verde;
  37.          break;
  38.  
  39.          default:
  40.          tipocelda = Nada;
  41.          break;}
  42.  }
  43.  
  44. //Get tipo de celda
  45.  int getTipo() {
  46.    switch(tipocelda)
  47.         {case Azul:
  48.          return(1);
  49.          break;
  50.          case Negro:
  51.          return(2);
  52.          break;
  53.          case Amarillo:
  54.          return(3);
  55.          break;
  56.          case Naranja:
  57.          return(4);
  58.          break;
  59.          case Rojo:
  60.          return(5);
  61.          break;
  62.          case Verde:
  63.          return(6);
  64.          break;
  65.  
  66.          default:
  67.          return(0);
  68.          break;}
  69.  }
  70.  
  71. //Constructor de la clase celda
  72.  celda(int mivalor=0) : valor(mivalor) {
  73.  
  74.    setTipo(valor);
  75.  
  76.  }
  77.  
  78. };
  79.  
  80. //Clase Columna
  81. class columna { 
  82.         private:
  83.            celda celdas[5];
  84.            int num1;
  85.            int num2;
  86.            int num3;
  87.            int num4;
  88.            int num5;
  89.            int num6;
  90.         public:
  91.  
  92. //Comprueba si está resuelta
  93.  bool esta_resuelta(){
  94.  
  95.    if ((celdas[0].getTipo()==0) && (celdas[5].getTipo()==0)) {
  96.    if (celdas[1].getTipo()==celdas[2].getTipo()==celdas[3].getTipo()==celdas[4].getTipo()) return (true);
  97.    else return(false);}
  98.  
  99.    else if (celdas[0].getTipo()==0) {
  100.    if (celdas[1].getTipo()==celdas[2].getTipo()==celdas[3].getTipo()==celdas[4].getTipo()==celdas[5].getTipo()) return (true);
  101.    else return(false);}
  102.  
  103.    else if (celdas[5].getTipo()==0) {
  104.    if (celdas[0].getTipo()==celdas[1].getTipo()==celdas[2].getTipo()==celdas[3].getTipo()==celdas[4].getTipo()) return (true);
  105.    else return(false);}
  106.  }
  107.  
  108.  int get_superior1() {
  109.  
  110.    return(celdas[1].getTipo());
  111.  
  112.  }
  113.  
  114.  int get_superior2() {
  115.  
  116.    return(celdas[2].getTipo());
  117.  
  118.  }
  119.  
  120.  int get_inferior1() {
  121.  
  122.    return(celdas[3].getTipo());
  123.  
  124.  }
  125.  
  126.  int get_inferior2() {
  127.  
  128.    return(celdas[4].getTipo());
  129.  
  130.  }
  131.  
  132.  void set_par_superior(int valores[1]) {
  133.  
  134.    celdas[1].setTipo(valores[0]);
  135.    celdas[2].setTipo(valores[1]);
  136.  
  137.  }
  138.  
  139.  void set_par_inferior(int valores[1]) {
  140.  
  141.   celdas[3].setTipo(valores[0]);
  142.   celdas[4].setTipo(valores[1]);
  143.  
  144.  }
  145.  
  146. //Constructor de la clase Columna
  147.  columna(int valor1=0,int valor2=0,int valor3=0,int valor4=0,int valor5=0,int valor6=0) : num1(valor1),num2(valor2),num3(valor3),num4(valor4),num5(valor5),num6(valor6) {
  148.  
  149.    celdas[0]=num1;
  150.    celdas[1]=num2;
  151.    celdas[2]=num3;
  152.    celdas[3]=num4;
  153.    celdas[4]=num5;
  154.    celdas[5]=num6;
  155.  }
  156.  
  157. //Desplazar la columna
  158.  void desplazar(bool direccion) {
  159.    int aux1,aux2;
  160.  
  161.    if (not direccion) {
  162.                      aux1 = celdas[0].getTipo();
  163.                      celdas[0].setTipo(0);
  164.                      aux2 = celdas[1].getTipo();
  165.                      celdas[1].setTipo(aux1);
  166.                      aux1 = celdas[2].getTipo();
  167.                      celdas[2].setTipo(aux2);
  168.                      aux2=celdas[3].getTipo();
  169.                      celdas[3].setTipo(aux1);
  170.                      aux1=celdas[4].getTipo();
  171.                      celdas[4].setTipo(aux2);
  172.                      celdas[5].setTipo(aux1);
  173.                    }
  174.  
  175.               else {
  176.                      aux1 = celdas[5].getTipo();
  177.                      celdas[5].setTipo(0);
  178.                      aux2 = celdas[4].getTipo();
  179.                      celdas[4].setTipo(aux1);
  180.                      aux1 = celdas[3].getTipo();
  181.                      celdas[3].setTipo(aux2);
  182.                      aux2=celdas[2].getTipo();
  183.                      celdas[2].setTipo(aux1);
  184.                      aux1=celdas[1].getTipo();
  185.                      celdas[1].setTipo(aux2);
  186.                      celdas[0].setTipo(aux1);
  187.                    }
  188.  
  189.  }
  190. };
  191.  
  192. //Clase YoLocoLoco
  193. class yolocoloco{
  194.         private:
  195.            columna columnas[5];
  196.            bool soporte_vertical;
  197.            string solucion;
  198.            string anteriores;
  199.            char codificacion[23];
  200.         public:
  201.  
  202. //Comprueba si está resuelto
  203.  bool esta_resuelto(){
  204.    if (columnas[0].esta_resuelta() && columnas[1].esta_resuelta() && columnas[2].esta_resuelta() && columnas[3].esta_resuelta() && columnas[4].esta_resuelta()) return (true);
  205.    else return (false);
  206.  }
  207.  
  208. //Constructor de la clase YoLocoLoco
  209.  yolocoloco (int inicial[22]) {
  210.  
  211.    int columna_actual[5];
  212.    int i;
  213.  
  214.    codificacion[0]='*';
  215.    for (i=0;i<23;i++) {sprintf(&codificacion[i+1],"%d",inicial[i]);}
  216.  
  217.    soporte_vertical = false;
  218.    columna_actual[5]=0;
  219.    for (i=0;i<5;i++){
  220.       columna_actual[i]=inicial[i];
  221.    }
  222.    columnas[0] = columna(columna_actual[0],columna_actual[1],columna_actual[2],columna_actual[3],columna_actual[4],columna_actual[5]);
  223.  
  224.    columna_actual[0]=0;
  225.    columna_actual[5]=0;
  226.    for (i=1;i<4;i++){
  227.        columna_actual[i]=inicial[i+5];
  228.    }
  229.    columnas[1] = columna(columna_actual[0],columna_actual[1],columna_actual[2],columna_actual[3],columna_actual[4],columna_actual[5]);
  230.  
  231.    columna_actual[5]=0;
  232.    for (i=0;i<5;i++){
  233.        columna_actual[i]=inicial[i+9];
  234.    }
  235.    columnas[2] = columna(columna_actual[0],columna_actual[1],columna_actual[2],columna_actual[3],columna_actual[4],columna_actual[5]);
  236.  
  237.    columna_actual[5]=0;
  238.    for (i=0;i<5;i++){
  239.        columna_actual[i]=inicial[i+14];
  240.    }
  241.    columnas[3] = columna(columna_actual[0],columna_actual[1],columna_actual[2],columna_actual[3],columna_actual[4],columna_actual[5]);
  242.  
  243.    columna_actual[0]=0;
  244.    columna_actual[5]=0;
  245.    for (i=1;i<4;i++){
  246.        columna_actual[i]=inicial[i+19];
  247.    }
  248.    columnas[4] = columna(columna_actual[0],columna_actual[1],columna_actual[2],columna_actual[3],columna_actual[4],columna_actual[5]);
  249.    printf("inicializado!\n");
  250.  }
  251.  
  252. //Comprueba si es un ciclo
  253.  bool es_ciclo(){
  254.   string::size_type encontrado = anteriores.find(codificacion,0);
  255.      if( encontrado != string::npos) {
  256.        cout<<"Anteriores:"<<anteriores<<"\n";
  257.        return (true);
  258.      }
  259.      else {
  260.        anteriores.append(codificacion,23);
  261.        return (false);
  262.      }
  263.  }
  264.  
  265. //Movimiento del soporte vertical
  266.  void mover_soporte_vertical() {
  267.    columnas[0].desplazar(soporte_vertical);
  268.    columnas[2].desplazar(soporte_vertical);
  269.    columnas[3].desplazar(soporte_vertical);
  270.    soporte_vertical = not soporte_vertical;
  271.    solucion.append("1",1);
  272.    printf("movido soporte vertical!\n");
  273.  }
  274.  
  275. //Movimiento del cilindro superior
  276.  void mover_cilindro_superior(){
  277.  
  278.    int aux1[2],aux2[2];
  279.  
  280.    aux1[0] = columnas[0].get_superior1();
  281.    aux1[1] = columnas[0].get_superior2();
  282.  
  283.    aux2[0] = columnas[1].get_superior1();
  284.    aux2[1] = columnas[1].get_superior2();
  285.  
  286.    columnas[1].set_par_superior(aux1);
  287.  
  288.    aux1[0] = columnas[2].get_superior1();
  289.    aux1[1] = columnas[2].get_superior2();
  290.  
  291.    columnas[2].set_par_superior(aux2);
  292.  
  293.    aux2[0] = columnas[3].get_superior1();
  294.    aux2[1] = columnas[3].get_superior2();
  295.  
  296.    columnas[3].set_par_superior(aux1);
  297.  
  298.    aux1[0] = columnas[4].get_superior1();
  299.    aux1[1] = columnas[4].get_superior2();
  300.  
  301.    columnas[4].set_par_superior(aux2);
  302.    columnas[0].set_par_superior(aux1);
  303.    solucion.append("2",4);
  304.    //printf("movido cilindro superior!\n");
  305.  }
  306.  
  307. //Imprimir solución
  308. void imprimir_solucion(){
  309. cout<<"Solucion:"<<solucion<<"\n";
  310. }
  311.  
  312. //Movimiento del cilindro inferior
  313.  void mover_cilindro_inferior(){
  314.  
  315.    int aux1[1],aux2[1];
  316.  
  317.    aux1[0] = columnas[0].get_inferior1();
  318.    aux1[1] = columnas[0].get_inferior2();
  319.  
  320.    aux2[0] = columnas[1].get_inferior1();
  321.    aux2[1] = columnas[1].get_inferior2();
  322.  
  323.    columnas[1].set_par_inferior(aux1);
  324.  
  325.    aux1[0] = columnas[2].get_inferior1();
  326.    aux1[1] = columnas[2].get_inferior2();
  327.  
  328.    columnas[2].set_par_inferior(aux2);
  329.  
  330.    aux2[0] = columnas[3].get_inferior1();
  331.    aux2[1] = columnas[3].get_inferior2();
  332.  
  333.    columnas[3].set_par_inferior(aux1);
  334.  
  335.    aux1[0] = columnas[4].get_inferior1();
  336.    aux1[1] = columnas[4].get_inferior2();
  337.  
  338.    columnas[4].set_par_inferior(aux2);
  339.    columnas[0].set_par_inferior(aux1);
  340.    solucion.append("3",4);
  341.  }
  342. };
  343.  
  344. //Funcion chunga y recursiva!
  345. void resolver(yolocoloco actual){
  346.  
  347. if (actual.esta_resuelto()) printf("resuelto!!\n");
  348. else {
  349.  
  350.  if (not actual.es_ciclo()) {
  351.  
  352.  
  353.         printf("creo el aux1!\n");
  354.         yolocoloco aux1(actual);
  355.         aux1.mover_cilindro_superior();
  356.         resolver(aux1);
  357.  
  358.         printf("creo el aux2!\n");        
  359.         yolocoloco aux2(actual);
  360.         aux2.mover_cilindro_inferior();
  361.         resolver(aux2);
  362.        
  363.         printf("creo el aux3!\n");
  364.         yolocoloco aux3(actual);
  365.         aux3.mover_soporte_vertical();
  366.         resolver(aux3);
  367.      }
  368.   }
  369. }
  370.  
  371. //Clase Main
  372. int main() {
  373. printf("YoLocoLoco resolver 1.0\n");
  374. printf("=======================\n\n");
  375. printf("Sitúe el YoLocoLoco en posición vertical sobre la base\n");
  376. printf("antes de comenzar a introducir los datos, tome como\n");
  377. printf("referencia la columna de bolas que tiene cinco elementos\n");
  378. printf("con columnas de cuatro elementos a ambos lados.\n\n");
  379. printf("Las casillas van ordenadas de arriba hacia abajo y\n");
  380. printf("las columnas de izquierda a derecha.\n\n");
  381.  
  382. int inicial[22];
  383. int indice = 0;
  384. int columna = 1;
  385. int casilla = 1;
  386.  
  387. while (indice<23) {
  388.  
  389. int valor = 0;
  390.  
  391.     while (valor<1 || valor>6) {
  392.  
  393.       printf("\n(1)Azul(2)Negro(3)Amarillo(4)Naranja(5)Rojo(6)Verde\n");
  394.       printf("Introduce el color de la casilla %d, columna %d:",casilla,columna);
  395.  
  396.       scanf("%d",&valor);
  397.       if (valor<1 || valor>6) printf ("Error: Código de color introducido inválido\n");
  398.       }
  399.  
  400.    inicial[indice] = valor;
  401.    indice++;
  402.    casilla++;
  403.  
  404.    if ((indice==5) || (indice==9) || (indice==14) || (indice == 19)) {
  405.                                                                         casilla = 1;
  406.                                                                         columna++;
  407.                                                                      }
  408. }
  409.  
  410. printf("=======================\n\n");
  411. printf("Inicialización completada, calculando la solución...\n");
  412.  
  413. yolocoloco juego(inicial);
  414. resolver(juego);
  415. return 0;}

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with @@


Remember me so that I can delete my post