Ho questa idea che corre nella mia testa, per generare e valutare espressioni matematiche casuali. Così, ho deciso di fare un tentativo ed 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 facili e medie sono piuttosto semplici. Casuale int
s separati da operatori casuali, niente di pazzo qui. Ma ho qualche problema a iniziare con qualcosa che potrebbe creare uno degli esempi difficile e più difficile . Non sono nemmeno sicuro che un singolo algoritmo potrebbe darmi gli ultimi due.
Cosa sto considerando:
Non posso dire di aver provato quelle idee, perché non volevo davvero perdere molto tempo andando in una direzione che non aveva alcuna possibilità di lavorare in primo luogo. Ma ancora, ho pensato a un paio di soluzioni:
- Utilizzo degli alberi
- Uso delle espressioni regolari
- Uso di un loop "for-type" pazzesco (sicuramente il peggiore)
Cosa sto cercando:
Mi piacerebbe sapere in che modo credi sia il migliore, tra le soluzioni che ho considerato e le tue idee.
Se vedi un buon modo per iniziare, apprezzerei un vantaggio nella giusta direzione, ad es. con l'inizio dell'algoritmo, o una sua struttura generale.
Nota anche che dovrò valutare quelle espressioni. Questo può essere fatto dopo che l'espressione è stata generata o durante la sua creazione. Se lo prendi in considerazione nella tua risposta, è grandioso.
Non sto cercando nulla di relativo alla lingua, ma per la cronaca, sto pensando di implementarlo in Objective-C, poiché quella è la lingua con cui lavoro di recente.
Questi 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, è grandiosa.
Se la mia domanda ha bisogno di chiarimenti, si prega di chiedere nei commenti. Grazie per il tuo aiuto.