Domanda

Ho creato un programma usando dev-cpp e wxwidgets che risolve un puzzle.
L'utente deve riempire i blocchi operativi e i blocchi dei risultati e il programma lo risolverà.
Lo sto risolvendo usando bruteforce, generando tutte le 9 combinazioni di numeri di lunghezza non ripetute usando un algoritmo ricorsivo. Lo fa abbastanza velocemente.
Fino a qui tutto è fantastico!
Ma il problema è quando il mio programma funziona a seconda del carattere sui blocchi. È estremamente lento (non ottiene mai la risposta), a causa del confronto dei caratteri con +, -, *, ecc. Sto facendo un CASO.
Esiste un modo o un linguaggio di programmazione che consente la creazione dinamica di operatori? Quindi posso definire l'operatore ROW1COL2 come +, e allo stesso modo per tutte le altre operazioni.
Lascio uno screenshot dell'app, quindi è più facile capire come funziona il puzzle.
http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png


PD: l'algoritmo funziona, l'ho provato con un enigma banale e l'ho risolto in un secondo.

È stato utile?

Soluzione

Non sono sicuro che questo sia davvero quello che stai cercando, ma ...
Qualsiasi linguaggio orientato agli oggetti come C ++ o C # ti consentirà di creare un "Operatore" classe base e quindi derivare da questa classe base a "PlusOperator" o " MinusOperator " eccetera'. questo è il modo standard per evitare tali dichiarazioni di casi.

Tuttavia non sono sicuro che questo risolverà il tuo problema di prestazioni.
L'uso di una semplice forza bruta per un tale problema ti porterà a una soluzione esponenziale. questo sembrerà funzionare velocemente per piccoli input - diciamo completando tutti i numeri. Ma se vuoi completare le operazioni è un problema molto più grande con molte più possibilità.
Quindi è probabile che anche senza CASE il tuo programma non sarà in grado di risolverlo.

Il modo giusto per cercare di risolvere questo tipo di problemi sta usando alcuni metodi di ricerca avanzata che usano alcune funzioni euristiche. Vedi l'algoritmo A * (A-star) per esempio.

Buona fortuna!

Altri suggerimenti

Puoi rappresentare i numeri e gli operatori come oggetti, quindi l'analisi viene eseguita una sola volta all'inizio della risoluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top