Tengo esta idea dando vueltas en mi cabeza, para generar y evaluar expresiones matemáticas aleatorias. Entonces, decidí darle una oportunidad y elaborar un algoritmo, antes de codificarlo para probarlo.
Ejemplo:
Aquí hay algunas expresiones de ejemplo que quiero generar al azar:
4 + 2 [easy]
3 * 6 - 7 + 2 [medium]
6 * 2 + (5 - 3) * 3 - 8 [hard]
(3 + 4) + 7 * 2 - 1 - 9 [hard]
5 - 2 + 4 * (8 - (5 + 1)) + 9 [harder]
(8 - 1 + 3) * 6 - ((3 + 7) * 2) [harder]
Las fáciles y medianas son bastante sencillas. Aleatorios intseparados por operadores aleatorios, nada loco aquí. Pero estoy teniendo algunos problemas para empezar con algo que podría crear uno de los duros y difíciles ejemplos. Ni siquiera estoy seguro de que un solo algoritmo pueda darme los dos últimos.
Lo que estoy considerando:
No puedo decir que probé esas ideas, porque realmente no quería perder mucho tiempo yendo en una dirección que no tenía ninguna posibilidad de trabajar en primer lugar. Pero aún así, pensé en un par de soluciones:
- Usando árboles
- Usando expresiones regulares
- Usando un loco "for-type" loop (seguramente el peor)
Lo que estoy buscando:
Me gustaría saber qué camino crees que es el mejor, entre las soluciones que consideré y tus propias ideas.
Si ve una buena manera de comenzar, le agradecería una pista en la dirección correcta, por ejemplo, con el comienzo del algoritmo, o una estructura general del mismo.
También tenga en cuenta que tendré que evaluar esas expresiones. Esto se puede hacer después de que se genera la expresión o durante su creación. Si toma eso en consideración en su respuesta, eso es genial.
No busco nada relacionado con el lenguaje, pero para el registro, estoy pensando en implementarlo en Objective-C, ya que ese es el lenguaje con el que estoy trabajando más recientemente.
Esos ejemplos no incluyeron el :operador, ya que solo quiero manipular ints, y este operador agrega muchas verificaciones. Si su respuesta le da una solución para manejar este, eso es genial.
Si mi pregunta necesita alguna aclaración, por favor pregunte en los comentarios. Gracias por tu ayuda.