Pregunta

Creé un programa usando dev-cpp y wxwidgets que resuelve un acertijo.
El usuario debe completar los bloques de operaciones y los bloques de resultados, y el programa lo resolverá.
Lo estoy resolviendo usando fuerza bruta, genero todas las combinaciones de números de 9 longitudes no repetidas usando un algoritmo recursivo.Lo hace bastante rápido.
¡Hasta aquí todo genial!
Pero el problema es cuando mi programa opera dependiendo del carácter de los bloques.Es extremadamente lento (nunca obtiene la respuesta), debido a la comparación de caracteres con +, -, *, etc.Estoy haciendo un CASO.
¿Existe alguna forma o algún lenguaje de programación que permita la creación dinámica de operadores?Entonces puedo definir el operador ROW1COL2 como un +, y de la misma manera para todas las demás operaciones.
Dejo una captura de pantalla de la aplicación, para que sea más fácil entender cómo funciona el rompecabezas.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD:El algoritmo funciona, lo probé con un acertijo trivial y lo resolví en un segundo.

¿Fue útil?

Solución

No estoy seguro de que esto sea realmente lo que estás buscando, pero...
Cualquier lenguaje orientado a objetos como C++ o C# le permitirá crear una clase base "Operador" y luego derivar de esta clase base un "PlusOperator" o un "MinusOperator", etc.esta es la forma estándar de evitar tales declaraciones de casos.

Sin embargo, no estoy seguro de que esto resuelva su problema de rendimiento.
Usar fuerza bruta simple para un problema de este tipo le dará como resultado una solución exponencial.Esto parecerá funcionar rápidamente para entradas pequeñas, por ejemplo, completar todos los números.Pero si quieres completar las operaciones, es un problema mucho mayor con muchas más posibilidades.
Por lo tanto, es probable que incluso sin el CASE su programa no pueda resolverlo.

La forma correcta de intentar resolver este tipo de problemas es utilizando algunos métodos de búsqueda avanzada que utilizan alguna función heurística.Ver el Algoritmo A* (estrella A) Por ejemplo.

¡Buena suerte!

Otros consejos

Puede representar los números y operadores como objetos, por lo que el análisis se realiza solo una vez al comienzo de la resolución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top