Newsgroup: it.hobby.enigmi
Titolo: Generare un "calcolo enigmatico"

Esiste da  qualche parte una  base teorica per creare  e/o risolvere
ultrarapidamente il  calcolo enigmatico tipo quello  della settimana
enigmistica?  Ho  visto  che  c'è un  programmino  creato  dal  sig.
Giovanni Resta sul suo  sito presso il cnr, ma è  closed source ed a
me interessa *solo* l'algoritmo, non un programma già pronto.
Mi piacerebbe, ad  esempio, estendere le cifre  utilizzabili da meno
di 11  scelte da un  insieme di 10 ('0'..'9')  a 8-10 scelte  da 256
(0x00..0xFF)...
-- 
........This message is best viewed with fixed spaced font..........
 
http://digilander.libero.it/fantoibed
 -=SpP=-

 (0x00..0xFF)...
Be', poteva chiederlo a me. Se non ha troppa fretta (perche' non le
posso rispondere prima di qualche giorno), mi puo' scrivere
a g.resta "CHIOCCIOLA" 
iit.cnr.it
nel frattenpo puo' guardare Encalc 2 (che permette di
risolvere anche problemi a schema libero) a questo indirizzo.
http://www.imc.pi.cnr.it/resta/encalc/
saluti,
giovanni resta

 enigmistica?  
Una base teorica potrebbe essere utilizzare le tecniche sviluppate
nei problemi di soddisfacimento di vincoli (un ambito dell'Intelligenza 
Artificiale). Per esempio, puoi guardare questi lucidi:
http://www.ing.unife.it/elettr/IntelligenzaArtificiale/Lucidi/03-
Vincoli.pdf
oppure puoi fare una ricerca con Google con chiave "Constraint 
Satisfaction Problems".
Ci sono anche linguaggi di programmazione, chiamati di Constraint 
Programming, che hanno gia` questi algoritmi al loro interno.
Ciao ciao,
Marco
-- 
http://www.ing.unife.it/docenti/MarcoGavanelli/

 Programming, che hanno gia` questi algoritmi al loro interno.
Avevo già letto questo articolo:
groups.google.com/groups?selm=3C23301F.D2668357%40see.below.uk
...che mi ha  lasciato basito! Non sapevo  che esistessero linguaggi
che consentissero queste cose. Mi  sono subito scaricato il gprolog,
perchè l'Eclipse non è gratuito, ma non sono riuscito a compilare il
programma.
fanto@xx:~$ gprolog
GNU Prolog 1.2.9
By Daniel Diaz
Copyright (C) 1999-2001 Daniel Diaz
| ?- [encalc].
compiling /home/fanto/
encalc.pl
 for byte code...
/home/fanto/
encalc.pl:3
 warning: unknown directive lib/1 - maybe use
initialization/1 - directive ignored
/home/fanto/
encalc.pl:4
 warning: unknown directive lib/1 - maybe use
initialization/1 - directive ignored
/home/fanto/
encalc.pl:14
 error: syntax error: . or operator expected
after expression (char:8)
        1 error(s)
	compilation failed
no
| ?-
Le righe 3 e 4 sono:
:- lib(fd).
:- lib(fd_global).
La riga 14 è:
Lvar::0..9999,
che fa' parte di:
enigmatico(Lop) :-
   length(Lvar,9),
   Lvar::0..9999,
   imponi_vincoli(Lop,Lvar),
   fd_global:alldifferent(Lvar),
   labeling(Lvar).
Non so nulla di Prolog, ma da quel poco che ho visto da altri esempi
in internet, la sintassi sembra corretta...


 programma.
Scusa per il ritardo con cui rispondo, sono stato un po' in vacanza...
Purtroppo la sintassi di Prolog e` standard, ma non lo e` quella della 
libreria FD (che e` proprio quella che serve), per cui ogni compilatore 
la definisce un po' come gli pare :-(
Ho cambiato il programma per usare la sintassi di GNU-Prolog; l'ho 
provato un po' e mi sembra che funzioni, ma non si sa mai... Fammi sapere 
se da` altri problemi.
Ciao ciao,
Marco
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% A Op1 B = C
% Op2  Op3= Op4
% D Op5 E = F
% -------------
% G Op6 H = I
enigmatico(Lop) :-
    fd_set_vector_max(10000),
    length(Lvar,9),
    fd_domain(Lvar,0,9999),
    imponi_vincoli(Lop,Lvar),
    fd_all_different(Lvar),
    fd_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) :-
    Operation =.. [Op,A,B],
    Operation #= C.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- 
http://www.ing.unife.it/docenti/MarcoGavanelli/

 sapere se da` altri problemi.
Ora funziona benissimo, ma se non è troppo disturbo vorrei chiedere
due cose (domandare è lecito, rispondere è cortesia):
1) Come si fa' a stampare il risultato?
2) Si  riesce, con  piccole modifiche,  a fare  in modo  che vengano
   usate le cifre esadecimali invece che quelle decimali? Al limite,
   si riescono ad usare le 26 lettere (dove A=0, B=1, C=2,....Z=25)?
Grazie, comunque!


    si riescono ad usare le 26 lettere (dove A=0, B=1, C=2,....Z=25)?
Forse non ho capito il problema; il programma trova una soluzione 
numerica, indipendente dalla rappresentazione.
Ciao,
Marco

 numerica, indipendente dalla rappresentazione.
Sě, ora inizio a capire come funziona...
