Eu tenho essa idéia circulando na minha cabeça, para gerar e avaliar expressões matemáticas aleatórias. Então, decidi tentar e elaborar um algoritmo, antes de codificá-lo para testá-lo.
Exemplo:
Aqui estão alguns exemplos de expressões que eu quero gerar aleatoriamente:
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]
Os fáceis e médios são bem diretos. Random int
é separado por operadores aleatórios, nada de louco aqui. Mas eu estou tendo alguns problemas para começar com algo que poderia criar uma das duras e mais duras exemplos. Não tenho certeza de que um único algoritmo possa me dar os dois últimos.
O que estou considerando:
Não posso dizer que tentei essas idéias, porque realmente não queria perder muito tempo indo em uma direção que não tinha chance de trabalhar em primeiro lugar. Mas ainda assim, pensei em algumas soluções:
- Usando árvores
- Usando expressões regulares
- Usando um loop "for-type" louco (certamente o pior)
O que estou olhando:
Gostaria de saber qual o melhor caminho a seguir, entre as soluções que considerei e suas próprias idéias.
Se você vir uma boa maneira de começar, eu apreciaria uma vantagem na direção certa, por exemplo, com o início do algoritmo ou com uma estrutura geral dele.
Observe também que terei que avaliar essas expressões. Isso pode ser feito após a expressão ser gerada ou durante sua criação. Se você levar isso em consideração na sua resposta, isso é ótimo.
Não estou procurando nada relacionado à linguagem, mas, para o registro, estou pensando em implementá-la no Objective-C, pois é a linguagem com a qual mais estou trabalhando recentemente.
Esses exemplos não incluíram o :
operador, já que eu quero apenas manipular int
s, e esse operador adiciona muitas verificações. Se sua resposta fornecer uma solução para lidar com essa, isso é ótimo.
Se minha pergunta precisar de algum esclarecimento, pergunte nos comentários. Obrigado pela ajuda.