Sto cercando di scrivere un programma per la generazione (non la risoluzione
perche' quella mi diverto a farla io... :-) ) di schemi come quelli del Calcolo
Enigmatico della Settimana Enigmistica.
Ho provato con la forza bruta (generazione attraverso numeri casuali), ma dopo
aver girato per varie ore, il programma comunque non tira fuori nulla.
Qualcuno sa se esiste letteratura raggiungibile in Internet sull'algoritmo di
generazione (in qualunque formato), o ancora meglio, qualche matematico e'
disposto a darmi dritte su un possibile algoritmo?
Grazie in anticipo!
Bruno Gentili
(bruno_...@hotmail.com)
--
Posted from [170.252.64.1]
via Mailgate.ORG Server - http://www.Mailgate.ORG
Bruno Gentili wrote in message
<2144951bc6ebabe9895...@mygate.mailgate.org>...
>Salve a tutti!
>
>Sto cercando di scrivere un programma per la generazione (non la
risoluzione
>perche' quella mi diverto a farla io... :-) ) di schemi come quelli del
Calcolo
>Enigmatico della Settimana Enigmistica.
>
>Qualcuno sa se esiste letteratura raggiungibile in Internet sull'algoritmo
di
>generazione (in qualunque formato), o ancora meglio, qualche matematico e'
>disposto a darmi dritte su un possibile algoritmo?
>
Non conosco letteratura e non sono un matematico. Pero' i calcoli enigmatici
li so creare.
Io procedo cosi': innanzitutto creo lo schema delle operazioni chiamando le
cifre in modo simbolico, per esempio (monospace, please...)
A + B = C
- + = +
D * E = F
---------
G - H = I
E quindi procedo a scrivere per esteso le singole equazioni:
A+B=C
DE = F
G-H=I
A-D=G
B+E=H
C+F=I
A questo punto cerco di ridurre il piu' possibile il numero di variabili
facendo delle opportune sostituzioni. naturalmente, avendo 9 incognite ma
solo 6 relazioni, il problema risulta indeterminato. Questo lo risolvi tu
imponendo dall'esterno altre condizioni. Per esempio, D=7 e E=5.
Sostituendo, con un po' di matematica e, se occorre, fantasia, ecco che hai
il tuo schema.
Ciao.
--
--AG
come lo risolvi l'Enigma Matematico della settimana enigm. ?
O meglio, come inizi, quali sono gli step?
Una sera, qualche settimana fa, mi sono divertito a farlo col PC che mi ha
dato la soluzione in fretta, ma non mi sembra sia facile farlo
"manualmente".
Ciao ciao
M.
"Bruno Gentili" <bruno_...@hotmail.com> ha scritto nel messaggio
news:2144951bc6ebabe9895...@mygate.mailgate.org...
Che ne dite di farlo a mente...come faccio io !! :-))))))
Ciao
Ida
Ok,ok, però se vuoi ti basta scaricare Derive, per questi giochetti è
fantastico !
> Non conosco letteratura e non sono un matematico. Pero' i calcoli enigmatici
> li so creare.
>
> Io procedo cosi': ...
Si, cosi' e' perfetto, il problema e' che questo tipo di procedura e' troppo
"umana", ossia non e' applicabile ad un programma per computer!
Quello che sto cercando di trovare e' un algoritmo tale che io possa dare
in input le sei operazioni desiderate, e eventualmente un "seme" random,
e in uscita venga fuori lo schema del Calcolo Enigmatico...
Risolvere il sistema funziona caso per caso, non in generale (o almeno io
non ho un'idea precisa di come farlo funzionare in generale)!
Comunque il fatto di lavorarci sopra mi ha dato un po' di idee, anche se
ancora tutte allo stato embrionale. Grazie!
Saluti a tutti
Bruno
Beh, in generale e' difficile dare dei suggerimenti generali, ma ti posso
riportare quello che ho risolto una o due settimane fa:
Riporto il calcolo enigmatico preso da una delle ultime settimane enigmistiche:
AA x B = CBD
+ + -
DED : F = GC
-------------
FHG + G = FBE
Ho sostituito i simboli grafici con lettere dell'alfabeto, ma e' lo stesso...
Parto dalle cose piu' evidenti; in questo caso, e' facile vedere che la
lettera
G deve essere il numero 9, perche' in una sottrazione, se il risultato ha la
stessa
cifra del minuendo (quella delle decine, B), il sottraendo deve avere in
quella
posizione o 0 o 9. In questo caso poiche' la cifra delle centinaia e' diversa
dal minuendo al risultato, vuol dire che ha "prestato" una unita' (come si
diceva
alle elementari), e quindi G non e' 0. Di conseguenza, e' 9
AA x B = CBD
+ + -
DED : F = 9C
-------------
FH9 + 9 = FBE
Ora e' banale notare che E e' 8 (perche' 9+9=18).
AA x B = CBD
+ + -
D8D : F = 9C
-------------
FH9 + 9 = FB8
Ok! Ora lo schema si puo' ulteriormente risolvere in piu' modi; propongo un
modo relativamente semplice:
dovrebbe essere semplice da vedere che F e' di una unita' piu' grande di D (a
causa
del riporto) e C una unita' piu' grande di C; a sua volta, B+F=9 (operazione
centrale
in verticale)
dunque, B puo' essere un numero che va da 2 a 7 (non puo' essere 1, perche' F
sarebbe 8, e la cifra 8 e' gia' assegnata), F e' il suo complemento a 9, C e'
uno piu' di F e D uno di meno. Di conseguenza i possibili valori del numero
CBD in alto a destra sono:
826 (non possibile perche' 8 e' gia' assegnato)
735
642
553 (non possibile perche' avrebbe due cifre uguali)
462
371
Ora, essendo il numero CBD il risultato di AA x B, deve essere
necessariamente
un multiplo di 11, e il vecchio criterio di divisibilita' per 11 ci dice che
un numero e' divisibile per 11 solo se la somma delle cifre di posto dispari
e' uguale a quella di quelle di posto pari, ossia nel nostro caso, deve
essere
C+D=B. L'unico numero tra quelli possibili con queste caratteristiche e' 462;
di conseguenza, abbiamo:
AA x 6 = 462
+ + -
282 : F = 94
-------------
FH9 + 9 = F68
Naturalmente, a questo punto abbiamo quasi finito, perche' sappiamo che F e'
3,
e dalla prima somma viene che A e' 7 (7+2=9). Quindi:
77 x 6 = 462
+ + -
282 : 3 = 94
-------------
3H9 + 9 = 368
E' rimasto solo H, che e' 5 perche' e' 7+8 (15). Quindi lo schema risolto e':
77 x 6 = 462
+ + -
282 : 3 = 94
-------------
359 + 9 = 368
In questo caso, ho sfruttato questo tipo di proprieta'. In altri casi, capita
ad
esempio una moltiplicazione in cui magari il risultato ha la stessa cifra
delle
unita' di uno dei fattori: in questo caso uno dei fattori finisce per 1 o 0,
oppure finisce per 5 e l'altro e' dispari, oppure per 6 e l'altro e' pari...
Non riesco a mettere giu' una lista completa dei possibili "trucchi"
aritmetici
che uso per risolvere i calcoli enigmatici, ma dovrebbe essere abbastanza
semplice
crearsene una facendoli...
In bocca al lupo!
Saluti
Bruno
Non ho capito bene di che cosa si parla (qui in Inghilterra non trovo la
Settimana Enigmistica). Quali sono le regole del calcolo enigmatico?
Tu cerchi un programma che, dato un insieme di equazioni come quello proposto da
AG:
A+B=C
DE = F
G-H=I
A-D=G
B+E=H
C+F=I
ti fornisca uno schema:
A + B = C
- + = +
D * E = F
---------
G - H = I
che ammetta una ed una sola soluzione, e` cosi`? Sembra un problema simile a
creare uno schema di parole crociate dato un insieme di parole (con qualche
vincolo in piu`).
Le lettere sono cifre o numeri qualsiasi?
Ciao,
Marco
> Quello che sto cercando di trovare e' un algoritmo tale che io possa dare
> in input le sei operazioni desiderate, e eventualmente un "seme" random,
> e in uscita venga fuori lo schema del Calcolo Enigmatico...
> Risolvere il sistema funziona caso per caso, non in generale (o almeno io
> non ho un'idea precisa di come farlo funzionare in generale)!
Lo terro' presente come compitino per le vacanze !
Tipicamente i numeri hanno da 1 a 3 cifre, o possono essere piu' lunghi ?
Ciao,
Giovanni.
>Lo terro' presente come compitino per le vacanze !
>Tipicamente i numeri hanno da 1 a 3 cifre, o possono essere piu' lunghi ?
Ovviamente non c'e' limite ma il buon senso consiglia di non superare
le quattro cifre.
--
ing. Franco Varoli
fva...@tin.it
fva...@libero.it
> Non ho capito bene di che cosa si parla (qui in Inghilterra non trovo la
> Settimana Enigmistica). Quali sono le regole del calcolo enigmatico?
Il Calcolo Enigmatico e' sostanzialmente una crittografia numerica, ossia un
insieme di operazioni in cui a simbolo uguale corrisponde cifra uguale.
(Ho postato un esempio di risoluzione per un'altra persona, quindi se ti serve
un esempio pratico, lo trovi nei vari messaggi di reply...)
>
> Tu cerchi un programma che, dato un insieme di equazioni come quello proposto da
> AG:
>
> A+B=C
> DE = F
> G-H=I
> A-D=G
> B+E=H
> C+F=I
>
> ti fornisca uno schema:
>
> A + B = C
> - + = +
> D * E = F
> ---------
> G - H = I
>
> che ammetta una ed una sola soluzione, e` cosi`? Sembra un problema simile a
> creare uno schema di parole crociate dato un insieme di parole (con qualche
> vincolo in piu`).
>
> Le lettere sono cifre o numeri qualsiasi?
Le lettere sono numeri qualsiasi nell'ambito dei numeri naturali (ossia interi
e positivi), e per ragioni di semplicita' di solito si considerano numeri al
massimo di 4 cifre (cioe' al massimo 9999)...
Il problema, come accennavo, non e' quello di risolvere il sistema in questo
caso, per generare uno schema con queste sei operazioni, ma di risolverlo
in termini generali:
cioe', date 6 operazioni scelte a caso (in questo caso erano -, +, +, +, *, -)
generare uno o piu' schemi (per logica ci dovrebbero essere piu' soluzioni
possibili, dato un set di operazioni), o dichiarare l'impossibilita' di
generare uno schema con numeri interi e positivi, quindi stampare (ma questa
parte e' banale) lo schema da risolvere in cui ad ogni cifra nei numeri e'
sostituito un simbolo.
L'algoritmo che cerco, e' proprio questo, in grado cioe' di risolvere il
sistema SENZA dover esplicitare il set di operazioni aritmetiche.
(Teoricamente, si potrebbe tentare anche un approccio brutale, dato che i
possibili set di operazioni sono "solo" 4^6, e risolverli tutti... ;-) )
Saluti e auguri a tutti di buon solstizio d'inverno!
A dire il vero mi sembra piu` nebbiosa Bologna, dove abito di solito ;-)
Saluti anche a te!
Sembra uno di quei problemi fatti apposta per sfruttare la reversibilita` del
Prolog ;-)
In Prolog (ed in programmazione logica in generale) un programma che risolve un
problema puo` essere usato "al contrario": data una soluzione ti genera il
problema. Se poi usi CLP(FD), che altro non e` che Prolog con aggiunto un
sistema a vincoli sui domini finiti, diventa anche molto efficiente.
Ecco il mio programma in ECLiPSe (un sistema Prolog-CLP); dovrebbe eseguire
quasi inalterato anche in altri sistemi CLP(FD), come SICStus, SWI_Prolog, ecc.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:- lib(fd).
:- lib(fd_global).
% A Op1 B = C
% Op2 Op3= Op4
% D Op5 E = F
% -------------
% G Op6 H = I
enigmatico(Lop) :-
% Dichiaro che ho 9 variabili che spaziano da 0 a 9999
length(Lvar,9),
Lvar :: 0..9999,
% impongo i vincoli del calcolo enigmatico
imponi_vincoli(Lop,Lvar),
% impongo che tutti i numeri siano diversi
fd_global:alldifferent(Lvar),
% Faccio partire la search
labeling(Lvar).
imponi_vincoli([Op1,Op2,Op3,Op4,Op5,Op6],[A,B,C,D,E,F,G,H,I]) :-
operation(A,Op1,B,C),
operation(A,Op2,D,G),
operation(B,Op3,E,H),
operation(C,Op4,F,I),
operation(D,Op5,E,F),
operation(G,Op6,H,I).
operation(A,Op,B,C) :-
% In Prolog dati e programmi sono la stessa cosa, quindi si puo`
% "eseguire" il dato "A+B=C". L'operatore e` generico
Operation =.. [Op,A,B],
Operation #= C.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Ecco come si usa il programma:
Carico il programma:
[eclipse 1]: [calcolo_enigmatico].
fd_domain.eco loaded traceable 0 bytes in 0.05 seconds
fd_arith.eco loaded traceable 0 bytes in 0.20 seconds
fd_util.eco loaded traceable 0 bytes in 0.02 seconds
fd_chip.eco loaded traceable 0 bytes in 0.04 seconds
fd_elipsys.eco loaded traceable 0 bytes in 0.03 seconds
fd.eco loaded traceable 0 bytes in 0.33 seconds
fd_global.eco loaded traceable 0 bytes in 0.10 seconds
calcolo_enigmatico.ecl compiled traceable 1396 bytes in 0.43 seconds
Yes (0.43s cpu)
Verifico se esiste una soluzione per l'esempio fornito:
[eclipse 2]: enigmatico([+, -, +, +, *, -]).
No (6.22s cpu)
(La soluzione non esiste)
Vediamo un'altra possibilita` (banale):
[eclipse 3]: enigmatico([+, +, +, +, +, +]).
More (4.42s cpu) ? ;
More (4.42s cpu) ? ;
More (4.42s cpu) ? ;
More (4.42s cpu) ? ;
More (4.42s cpu) ? ;
More (4.42s cpu) ? ;
More (4.42s cpu) ? ;
More (4.42s cpu) ?
Abbiamo varie soluzioni. Ho strutturato il programma in modo che non dica quali
sono le soluzioni, senno` che gusto c'e` a risolvere il problema? ;-)
Il programma si puo` modificare semplicemente per generare anche le operazioni,
oppure per richiedere che ci sia una soluzione sola; se ti interessa, dimmelo.
Ciao ciao,
Marco
> Sembra uno di quei problemi fatti apposta per sfruttare la reversibilita` del
> Prolog ;-)
Ci avevo anche pensato, ho usato il Prolog in una versione vecchia
(MicroProlog)
qualche anno fa, all'universita'...
Il problema e' che sarebbe sfruttabile solo da chi avesse un motore Prolog
(poche persone, credo); anche un altro mi aveva proposto di usare il Derive
(un programma che fa matematica in simbolico, originariamente scritto in Lisp);
io, personalmente, non ho ne' un motore prolog, ne' il Derive, e cercavo
un sistema di risolvere il problema senza usare motori specializzati...
In realta', il mio obiettivo e' usare il VBScript (o un qualunque derivato
del Basic) per scrivere una pagina HTML liberamente fruibile da chi la voglia
usare...
Saluti e ancora auguri!
BRUNO
--
Posted from adsl-ull-57-69.42-151.net24.it [151.42.69.57]