Ho questa idea che corre nella mia testa, per generare e valutare espressioni matematiche casuali. Così, ho deciso di provarlo e di elaborare un algoritmo, prima di codificarlo per testarlo.
Esempio:
Ecco alcune espressioni di esempio che voglio generare in modo casuale:
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]
Le semplici e medie quelli sono abbastanza straight-forward. I casuali sono int
separati da operatori casuali, niente di folle qui. Ma sto avendo qualche problema per iniziare con qualcosa che potrebbe creare uno dei duri e più dure esempi. Non sono nemmeno sicuro che un singolo algoritmo possa darmi gli ultimi due.
Quello che sto considerando:
Non posso dire di aver provato queste idee, perché non volevo davvero perdere molto tempo andando in una direzione che non aveva possibilità di lavorare in primo luogo. Tuttavia, ho pensato a un paio di soluzioni:
- Usando gli alberi
- Usando espressioni regolari
- Utilizzando un folle loop "for-type" (sicuramente il peggiore)
Cosa sto cercando:
Mi piacerebbe sapere in che modo ritieni sia il migliore da percorrere, tra le soluzioni che ho preso in considerazione e le tue idee.
Se vedi un buon modo per iniziare, apprezzerei un vantaggio nella giusta direzione, ad esempio con l'inizio dell'algoritmo o una sua struttura generale.
Nota anche che dovrò valutare quelle espressioni. Questo può essere fatto dopo la generazione dell'espressione o durante la sua creazione. Se lo prendi in considerazione nella tua risposta, è fantastico.
Non sto cercando nulla legato al linguaggio, ma per la cronaca, sto pensando di implementarlo in Objective-C, poiché è il linguaggio con cui sto lavorando di più di recente.
Tali esempi non includevano l' :
operatore, poiché desidero solo manipolare int
s, e questo operatore aggiunge molte verifiche. Se la tua risposta fornisce una soluzione per gestirla, va benissimo.
Se la mia domanda necessita di chiarimenti, si prega di chiedere nei commenti. Grazie per l'aiuto.