Advertisement
eduardovp97

PUPILETRAS

Sep 20th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 12
  4.  
  5. void printArray(char matriz[N][N]);
  6. void toUpperArray(char palabra[]);
  7. int buscar(char pupi[N][N],int x,int y, char palabra[], int n);
  8. int isValid(char pupi[N][N], int x, int y, char palabra[], int n, int i);
  9. void toLower(char *letra);
  10. void toUpper(char *letra);
  11. void initMov();
  12. void printPalabra(char palabra[]);
  13.  
  14. int mov[8][2];
  15. int movimiento,congelar;
  16.  
  17. int main(){
  18.     char matriz[N][N];
  19.     int i,j;
  20.     for(i=0; i<N; i++)
  21.         for(j=0; j<N; j++)
  22.             scanf("%c ",&matriz[i][j]);
  23.     //printArray(matriz);
  24.     //printf("\n");
  25.  
  26.     char palabra[] = {'S','t','a','r'};
  27.     toUpperArray(palabra);
  28.     int largo = strlen(palabra);
  29.     //print word    word = palabra in spanish
  30.     for(i=0; i<strlen(palabra); i++)
  31.         printf("%c",palabra[i]);
  32.     printf("\n");
  33.  
  34.     initMov();
  35.     int salir = 0;
  36.    
  37.     for(i=0; i<N; i++){
  38.         //printf("Hola.\n");
  39.         if(salir) break;
  40.         for(j=0; j<N; j++){
  41.             //printf("Hola.\n");
  42.             movimiento = -2;
  43.             if(buscar(matriz,i,j,palabra,0)){
  44.                 //printf("%d %d \n",i,j);
  45.                 printArray(matriz);
  46.                 salir = 1;
  47.                 break;
  48.             }
  49.         }
  50.     }
  51.     /*
  52.     printf("Hola\n");  
  53.     if(buscar(matriz,2,7,palabra,0)){
  54.         printf("%d %d \n",i,j);
  55.         printArray(matriz);
  56.     }
  57.     */
  58.     return 0;
  59. }
  60.  
  61. void printPalabra(char palabra[]){
  62.     int i;
  63.     for(i=0; i<strlen(palabra); i++)
  64.         printf("%c",palabra[i]);
  65.     printf("\n");
  66. }
  67.  
  68. void toUpperArray(char palabra[]){
  69.     int largo = strlen(palabra);
  70.     int i;
  71.     for(i=0; i<largo; i++){
  72.         if(palabra[i] >= 'a' && palabra[i] <= 'z'){
  73.             palabra[i] = palabra[i] - 'a' + 'A';
  74.         }
  75.     }
  76. }
  77.  
  78. void printArray(char matriz[N][N]){
  79.     int i,j;
  80.     printf("\n");
  81.     for(i=0; i<N; i++){
  82.         for(j=0; j<N; j++)
  83.             printf("%c ",matriz[i][j]);
  84.         printf("\n");
  85.     }
  86.     printf("\n");
  87. }
  88.  
  89. int buscar(char pupi[N][N],int x,int y, char palabra[], int n){
  90.     if(n == strlen(palabra)){
  91.         return 1;
  92.     }
  93.     int i,newx,newy;
  94.     for(i=0; i<8; i++){
  95.         if(isValid(pupi,x,y,palabra,n,i)){
  96.             newx = x + mov[i][0];
  97.             newy = y + mov[i][1];
  98.             toLower(&pupi[newx][newy]);
  99.             //printf(" movimiento:%d\n letras:%d\n x:%d\n y:%d\n",movimiento,n+1,newx,newy);
  100.             //printArray(pupi);
  101.             if(buscar(pupi,newx,newy,palabra,n+1)){
  102.                 return 1;
  103.             }else{
  104.                 toUpper(&pupi[newx][newy]);
  105.                 movimiento = -2;
  106.             }
  107.         }
  108.     }
  109.     return 0;
  110. }
  111.  
  112. int isValid(char pupi[N][N], int x, int y, char palabra[], int n, int i){
  113.    
  114.     if(movimiento != -2)
  115.         if(movimiento != i) return 0;
  116.     int newx = x + mov[i][0];
  117.     int newy = y + mov[i][1];
  118.     if(newx>=0 && newx<N && newy>=0 && newy<N){
  119.         if(pupi[newx][newy] == palabra[n]){
  120.             if(n == 1) movimiento = i;
  121.             return 1;
  122.         }
  123.     }
  124.     return 0;
  125. }
  126.  
  127. void toLower(char *letra){
  128.     *letra = *letra - 'A' + 'a';  
  129. }
  130.  
  131. void toUpper(char *letra){
  132.     *letra = *letra - 'a' + 'A';
  133. }
  134.  
  135. void initMov(){
  136.     mov[0][0] = 0; // derecha
  137.     mov[0][1] = 1;
  138.     mov[1][0] = 1; // derecha abajo
  139.     mov[1][1] = 1;
  140.     mov[2][0] = 1; // abajo
  141.     mov[2][1] = 0;
  142.     mov[3][0] = 1; // abajo izquierda
  143.     mov[3][1] = -1;
  144.     mov[4][0] = 0; // izquierda
  145.     mov[4][1] = -1;
  146.     mov[5][0] = -1; // izquierda arriba
  147.     mov[5][1] = -1;
  148.     mov[6][0] = -1; // arriba
  149.     mov[6][1] = 0;
  150.     mov[7][0] = -1; // arriba derecha
  151.     mov[7][1] = 1;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement