Sto pianificando un programma C++ che impiega 3 stringhe che rappresentano un puzzle crittografico. Ad esempio, dato due, due e quattro, il programma avrebbe trovato sostituzioni cifre per ogni lettera in modo tale che l'espressione matematicaCreazione di un risolutore crittografico in C++
TWO
+ TWO
------
FOUR
è vero, con gli ingressi assunti come giustificato a destra. Un modo per ovviare a questo sarebbe naturalmente la forza bruta, assegnando ogni possibile sostituzione per ogni lettera con cicli annidati, provando ripetutamente la somma, ecc., Fino a quando la risposta non viene trovata.
Il mio pensiero è che sebbene questo sia terribilmente inefficiente, la sottostante verifica del ciclo può essere una via percorribile (o addirittura necessaria), dopo che una serie di detrazioni viene eseguita per limitare i domini di ciascuna variabile. Sto trovando un po 'difficile da visualizzare, ma sarebbe ragionevole assumere per prima cosa una struttura generale/imbottita come questa (ogni X rappresenta una cifra non necessariamente distinta, e ogni C è una cifra trasporta, che in questo caso, sarà 0 o 1)? :
CCC.....CCC
XXX.....XXXX
+ XXX.....XXXX
----------------
CXXX.....XXXX
Con questo in mente, alcuni più pensieri di pianificazione:
-Anche se gli zeri non sarà dato nel problema, probabilmente dovuto aggiungere abbastanza di loro, se del caso, anche le cose/partita operandi
-Sto pensando che dovrei iniziare con un insieme di valori possibili 0-9 per ogni lettera, magari memorizzati come vettori in una tabella 'domini' ed eliminare i valori da questo come deduzioni sono fatte. Ad esempio, se vedo alcune lettere allineate come questo
A
C
--
A
, posso dire che C è pari a zero e questo elimino tutti gli altri valori dal suo dominio. Posso pensare ad alcune deduzioni, ma generalizzarle a tutti i tipi di piccole situazioni e metterle in codice sembra un po 'complicato a prima vista.
-Assunzione Ho una buona serie di deduzioni che attraversano le cose e avviano molti valori dalla tabella dei domini, suppongo che continuerei a ripetere tutto e spero che lo spazio degli stati sia abbastanza piccolo da generare un soluzione in un ragionevole lasso di tempo. Ma sembra che ci debba essere più di questo! - Forse qualche equazione intelligente da impostare o qualcosa del genere.
I suggerimenti sono apprezzati!
Si suppone che la risposta è unica? Ad esempio, se qualcuno ti ha dato "AA + BB = CC", vorresti provare a trovare tutte le soluzioni o solo una? – SirGuy
La prima risposta che funziona sarà sufficiente. – nicole
Qual è la tua domanda su C++? –