estoy atascado, como formo palabras?

Iniciado por risto, 27 Marzo 2012, 09:50 AM

0 Miembros y 1 Visitante están viendo este tema.

risto

Hola! Mirad estoy haciendo un proyecto por puro aburrimiento y por hobby o como querais decirlo. La cuestión es que estaba una noche mirando la tele y apareció un programa de esos que sale una tabla de 6x6 o lo que sea y te piden que saques el nombre de 7 animales por ejemplo.  Bueno pues me iluminé jajaj pensé voy a hacer un programa que me saque las palabras en español de esa tabla.

Me dije a mi mismo que necesitaba C por su velocidad aunque estoy bastante perdido, hacía mucho que no programaba en C. Una vez con el diccionario en español(al cual todavia tengo que quitarle caracteres especiales) ice la parte del programa en el que se comparan una lista de palabras con el diccionario(me costó lo suyo ya que lo hago caracter a caracter y no con strings). Perfecto, ahora solo necesito sacar la lista de palabras de la tabla, y aquí es donde tengo el problema. Atentos por favor:

Esta es la representación de la tabla en el array:

x a g h j
h d h w i
s h j q g
a j j r w
a g h k r

Bien pues me gustaria genererar palabras apartir de este array bidimensional y quedaría así en plan sopa de letras:
xa
xag
xagh
xaghj
ag
agh
aghj
gh
ghj
hj
...
Bueno estas serian las palabras de lo que seria la primera linea horizontal de izquierda a derecha, estoy bastante atascado, es mas difícil de lo que pensé en un principio sacar estas combinaciones, me conformo con sacar las horizontales de izquierda a derecha y de arriba abajo.

Una mano porfavor no quisiera dejar el programa a medias :(

Ahora estoy en el curro haciendo practicas :( despues cuando llegue a casa subo el codigo a ver si así os motiváis mas :P (aunque me da verguenza enseñar esa chapucilla XD)

A por cierto, lo mismo que tengo hecho en C osea la comparación de una lista de palabras con otra(el dic) también la hice en script bash, por probar y porque era un momento, mi experiencia ha sido gratificante ya que comparar el diccionario 10 veces por ejemplo tarda unos 5 segundos mientras que en C es instantáneo.

PD: No pido el programa hecho, solo necesito una mano con el algoritmo a utilizar.

Beakman

CitarHola! Mirad estoy haciendo un proyecto por puro aburrimiento y por hobby o como querais decirlo. La cuestión es que estaba una noche mirando la tele y apareció un programa de esos que sale una tabla de 6x6 o lo que sea y te piden que saques el nombre de 7 animales por ejemplo.  Bueno pues me iluminé jajaj pensé voy a hacer un programa que me saque las palabras en español de esa tabla.
Esos programas son los que están a la media noche y hay que mandar msjs de celular ?, pregunto porque no entendía bien cual era el juego que te proponías.

Para comenzar:
Imaginemos que tenés una tabla de 5x5 ( 25 letras ). Si tuvieras que formar palabras de 25 caracteres, es decir usando todas las letras, la cuenta sería: 25! ( factorial de 25 ) = 15511210043330985984000000 de combinaciones. Un número bastante grande, sin contar palabras con menos de 25 caracteres.
Ahora, si la palabra tuviera que ser formada por letras continuas, el número se reduce bastante pero sigue siendo grande a mi parecer.

Entonces lo primero que deberías hacer es crear funciones para buscar de forma fácil en filas, columnas, diagonales, etc. Yo personalmente, usaría c++ para simplificar un poco el código, y usar POO.
Y tal vez podrías agregar ciertas restricciones, por ejemplo que las palabras sean mayores a 4 letras y menores a 10.
Luego no queda más que recorrer la matriz y combinar las palabras con el diccionario.

risto

No hay que enviar mensajes con el movil, hay que llamar, pero no pienso llamar, eso es una estafa.

Las palabras deben ser consecutivas, en plan sopa de letras.
Como tu dices las palabras que quiero formar tendrian que ser de 3 caracteres mínimo y máximo el tamaño de la linea ya que no habra una tabla de 20X20 tampoco... Ayer conseguí hacer las palabras horizontales de izquierda a derecha(que en una tabla de 10x10 me salian 450 palabras) y las comparé contra un diccionario de letras en español de 1 millon de palabras, la verdad es que en 1 o 2 segundos me sacaba todas las palabras que coincidian.

No soy especialmente experimentado en c, nunca he tocado c++ pero estoy por borrar el programa y volverlo a hacer quizá me plantee hacerlo en c++

Ya que estoy plantearé una duda, puede sonar a locura no se... yo lo que hago con el diccionario es meter las palabras del archivo en un array bidimensional de chars, los meto de 200.000 en 200.000 ya que no me dejaba hacer un array de 1 millon XD Ya sé que pareceré un ignorante xd pero alguien me podría explicar esto? hago bien en pasar los datos del archivo al array?

Sobre lo de formar palabras se puede decir que ya esta solucionado, quizá me precipite al escribir el post.

PD:cuando termine el programa lo subo prometido ;)

Beakman

No parecés un ignorante para nada, tranquilo. Sí,  es muy grande un array de 200.000x200.000, y en este caso tal vez deberías:
- abrir el archivo
- tomar los primeros 100 datos
- analizarlos
- tomar los siguientes 100 datos
- ( ... )
- cerrar el archivo

De esta forma también es mucho más fácil solucionar errores en el programa más rápidamente.

CitarNo soy especialmente experimentado en c, nunca he tocado c++ pero estoy por borrar el programa y volverlo a hacer quizá me plantee hacerlo en c++
Como te decía más arriba, me parece más sencillo escribir el código en C++. Podés usar STL( list, vector, etc ) con strings y tus propias clases. En menos código harías lo mismo y queda más entendible.
Saludo.