Newsgroup: it.hobby.enigmi
Titolo: un programmino on-line per creare criptaritmi

Se qualcuno e' interessato a questo tipo di puzzle, ho messo on line
su
http://www.iread.it/criptaritmi.php
un piccolo tool on-line per risolvere e creare criptaritmi (con
soluzione unica).
In pratica gli date due parole (possibilmente di
lunghezza simile, tipo sarah+palin o barack+obama
etc.etc. e lui mostra quali parole (in italiano o inglese)
possono essere usate per completare l'operazione
in modo che il risultato sia un enigma con soluzione
unica (c'e' anche un solutore per controllare).
Naturalmente per creare un buon enigma bisogna poi andare
a controllare che il puzzle ottenuto sia umanamente risolvibile,
ma questo chiaramente lo lascio a voi...
ciao,
g.,

 soluzione unica).
.
.
Grande ! Subito mi messo all'opera:
NAPOLI+
TORINO=
------------
CORSARO
Io Tifo Napoli ! Tie' !
Massimo 

 ma questo chiaramente lo lascio a voi...
.
.
Sono interessato all'algoritmo di generazione/soluzione
impiegato, puoi dirmi almeno che linguaggio e' usato ?
Mi sembra davvero veloce ed efficace... ;-)
Grazie ! Molto carino...
Massimo 

 impiegato, puoi dirmi almeno che linguaggio e' usato ?
Dunque, a parte un minimo di PHP per una prima fase di
pulitura dell'input, i due programmi (generazione/soluzione)
sono in linguaggio C.
Per risolvere i criptaritmi in generale uso piu' o meno
la stessa routine che avevo realizzato svariati anni fa
per il mio programmino free EnCalc (che risolve criptaritmi generali
e in piu risolve/genera schemi tipo quelli del Calcolo Enigmatico).
Il sistema che avevo usato allora non sono riuscito a capirlo nei
dettagli,
(non c'era nemmeno un commento nel codice), ma sostanzialmente si
provano
ricorsivamente le varie associazioni lettera-numero, usando
per primi i criteri in cui compaiono meno lettere per evitare
di esplorare tutto l'albero di ricerca.
Un trucchetto che usavo e' quello (quando possibile)
di estrarre delle relazioni dalle ultime cifre (modulo 10).
In pratica se ho la relazione ABC*DE=GHL non devo aspettare
di aver fatto gli assegnamenti ad A,B,C,D,E,G,H e L per verificare
se sono ragionevoli, ma una volta assegnate C, E ed L posso
gia' verificare se C*E == L (modulo 10). Questo
trucchetto lo impiegavo sistematicamente.
Naturalmente con i computer di oggi probabilmente
non c'e' bisogno di fare cose particolarmente sofisticate,
basterebbe generare tutte le permutazioni necessarie
e provarle,
ma tenete conto che io il codice l'ho scritto mi sembra nel
natale del 2001. Inoltre avevo bisogno di qualcosa di molto
veloce, perche' nella generazione pseudo-casuale degli
schemi del Calcolo Enigmatico dovevo controllare
rapidamente centinaia di schemi per determinarne
uno con soluzione unica.
Preliminarmente alla risoluzione c'e' una fase in cui
leggo le formule e le converto in una specie di
notazione polacca inversa, quindi
AB+CD*EF=GGG diventa AB CD EF * + GGG =
o qualcosa di simile, questo per velocizzare
la fase in cui vado a valutare una formula
per vedere se e' verificata.
Per quanto riguarda la creazione di nuovi criptaritmi,
il sistema e' piu' semplice, perche' mi sono
limitato a somme e sottrazioni, ovvero solo alle
somme.
In pratica, date due parole X e Y, scandisco
le parole Z di lunghezza opportuna ciclicamente a partire da un punto
casuale (per efficienza evito di caricarle tutte e poi di mischiarle,
tanto molte volte il numero di parole trovate e' inferiore a 500) e
poi vado a verificare se la somma X+Y=Z (o X=Z+Y se cercavo X-Y)
ha soluzione unica (chiaramente mi basta arrivare alla 2a soluzione
per scartare la Z corrente).
Per verificare una somma X+Y=Z, diciamo ABC+DEF=GHL,
parto dalla cifre delle unita', e procedo ricorsivamente con gli
assegnamenti.
Al primo passo ho C+F=(0/1)L piu riporto nullo.
Quindi vado ad assegnare valori a C e F e il valore di L viene
assegnato
di conseguenza. A quel punto so il riporto che devo usare per B+E=(0/1)
H
e procedo con tutti i possibili assegnamenti di B ed E.
Chiaramente se ci sono cifre ripetute tipo BAA+DBA=ABB la cosa procede
piu' celermente, perche' al primo passo devo solo provare
tutti i valori per la lettera A e non per una coppia di lettere,
etc.etc.
Spero di averti dato una idea del metodo.
Ciao,
g.

 wrote:
.
Spero di averti dato una idea del metodo.
.
.
Ottima spiegazione, in effetti e' abbastanza complessa
ma mi serve per altre cose che ho in pentola... ;)
M 

 soluzione unica).
Ciao Giovanni,
curiosamente proprio in questi giorni sto scrivendo un articolo su H. E.
Dudeney (sempre per Focus Brain Trainer), considerato il padre dei
Cryptarithms (che vengono chiamati anche "aritmetica verbale").
E' stato lui il primo a quanto pare a pubblicare su Strand Magazine nel 1924
il noto SEND+MORE=MONEY.
Poi credo che come al solito il gioco fu rilanciato da Martin Gardner.
Cercando materiale in Rete (non c'� molto n� su Dudeney n� sui criptaritmi
in italiano) ho trovato interessante la pagina in francese di wikipedia:
http://fr.wikipedia.org/wiki/Cryptarithme
nella quale viene citata una fonte di tal Naoyuki Tamura di Kobe in
Giappone:
http://bach.istc.kobe-u.ac.jp/llp/crypt.html
con un solver per criptaritmi e una divertente sezione per argomenti (p. es.
HAIKU + SUSHI = KIMONO oppure CRASH+HACKER = REBOOT)
Interessanti anche gli "autoreferenziali" cio� p. es. TRE + CINQUE + CINQUE
= TREDICI (184+913054+913054=1846292)
A presto e complimenti,
Francesco

 ...............
Si, in italiano c'e' proprio poco. La pagina di Tamura l'avevo vista
e proprio vedendola mi ero convinto che fosse possibile fare
un solutore abbastanza veloce da controllare migliaia di parole in
un secondo. Di fatto uso lo stesso metodo di Tamura ma
il mio codice e' un po' piu' veloce perche' so gia' in partenza che
usero'
solo 2 addendi e ho preso qualche scorciatoia.
ciao,
g.