Newsgroup: it.hobby.enigmi
Titolo: Eccoci di nuovo alla frutta

Dopo le ferie, i nostri sei eroi, amanti della frutta, si ritrovano di bel
nuovo al bancone della tavola calda e sono, ovviamente, arrivati alla
frutta.
Ecco i loro dati ed una serie di indizi che dovrebbero consentire di
stabilire le loro posizione e la giusta attribuzione dei loro dati
personali.
Nomi: Aldo, Bruno, Carlo, Dario, Elio e Franco.
Cognomi: Agassi, Berio, Cecchi, Dotti, Elce e Fossa.
Nati a: Asti, Bari, Como, Dolo (VE), Enna e Forlì.
Età: 31, 32, 33, 34, 35 e 36 anni.
Professione: autista, benzinaio, ceramista, dentista, elettricista e
falegname.
Mangiano: arancia, banana, ciliegie, fragole, mela e pera.
      1) Il barese è il 1° da sinistra
      2) L'astigiano è l'ultimo da sinistra
      3) Bruno ha 32 anni
      4) Elio mangia la pera
      5) Elio fa il benzinaio
      6) Il barese ha 36 anni
      7) Il forlivese mangia la mela
      8) Il 31enne mangia la banana
      9) Fossa mangia le fragole
      10) Agassi fa il ceramista
      11) Cecchi fa l'elettricista
      12) Carlo è nel posto tra il 36enne ed il comasco
      13) Chi mangia le ciliegie è nel posto tra Franco ed il barese
      14) Il dentista è nel posto tra Aldo ed il forlivese
      15) Cecchi è nel posto tra il ceramista ed il dentista
      16) Il comasco è più a sinistra dell'autista
      17) Aldo è accanto al 33enne
      18) Il nativo di Dolo è accanto ad Elce
      19) Dotti è accanto a chi mangia la mela
      20) Dotti *non* è accanto al 34enne
Ciao
Gianni

 ha scritto nel messaggio 
news:48c2f9f0$0$26143$5fc...@news.tiscali.it...

S
P
O
I
L
E
R
<
<
<
<
<
<
posizione 1   2   3   4   5   6
nome      E   C   F   B   D   A
cognome   E   B   A   C   D   F
città     B   D   C   F   E   A
età      36  34  31  32  33  35
lavoro    B   F   C   E   D   A
frutta    P   C   B   M   A   F
Ciao,
plinius:-) 

 Gianni
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
Soluzione:
posti              1 2 3 4 5 6
nomi              E C F B D A
cognomi        E B A C D F
città                B D C F E A
30+                 6 4 1 2 3 5
prof                 B F C E D A


 ha scritto nel messaggio 
news:jjQwk.145215$FR.4...@twister1.libero.it...


 ha scritto nel messaggio 
news:48c3d344$0$26142$5fc...@news.tiscali.it...


Mi togli una curiosità? Come si fa a produrre degli indovinelli simili
(sempre se l'hai ideato te)? Esiste una tecnica ad esempio per dare un
numero di indizi tale da essere sufficiente e necessario (cioè non
sovrabbondante)?

sufficiente e >necessario (cioè non sovrabbondante)?
Con molta pazienza.
Inizio col preparare, con un generatore di numeri psedo-casuali, la matrice 
6x6 con i nomi e gli attributi, poi sempre con lo stesso generatore 
stabilisco via via il tipo di indizio (=, vicino a, tra) e chi o che cosa 
coinvolge e, dopo una quindicina di indizi controllo la loro congruenza e le 
loro implicazioni logiche (p.e.: se A è tra B e C, posso escludere A dal 1° 
e dall'ultimo posto).
Aggiungo ancora altri indizi casuali eseguendo gli stessi controlli e 
concludo con alcuni necessari indizi ad hoc.
Per controllare che non vi sia sovrabbondanza eseguo una serie di controlli 
finali escludendo un indizio per volta.
Come vedi, occore veramente molta pazienza.
Ciao
Gianni

 Il dentista è nel posto tra Aldo ed il forlivese
Infatti non equivale banalmente ad imporre che il dentista non occupi
i posti estremi (cosa che potrei formalizzare facilmente).

i posti estremi (cosa che potrei formalizzare facilmente).
Mi sembra che quell'affermazione possa essere suddivisa in tre altre 
affermazioni piů semplici.
1) Il dentista č accanto ad Aldo
2) Il dentista č accanto al forlivese
3) Aldo non č nato a Forlě
Ciao
Gianni
PS: I tipi di affermazioni che uso (e che usava Sherlock) sono, oltre che 
"=", "vicino a" e "tra", anche "non =", "non tra", "a sinistra di (in modo 
indefinito)" e "altro commensale tra", infine, una o piů posizioni possono 
essere assegnate preventivamente.
PPS: Avrei piacere di avere il tuo algoritmo, se tu riescissi a realizzarlo. 

 1) Il barese è il 1° da sinistra
producendo una riga della nostra tabella nel seguente modo.
Stiamo parlando di città e di posto a sedere, che quindi sono la
quarta e la settima colonna. Dunque poniamo a zero tutte le
sottocolonne della quarta colonna tranne la seconda (che coincide con
il valore "barese") che porremo ad uno, ed analogamente poniamo a zero
tutte le sottocolonne della settima colonna tranne la sesta (che
coincide col valore di posto numero 6, cioè il primo da sinistra) che
porremo anch'essa ad uno. Tutti gli altri valori che non sono stati
posti a zero od a uno non vengono toccati e rimangono vuoti.
Faccio un altro caso per spiegarmi meglio. Supponiamo che la frase da
formalizzare sia: "Aldo non è il primo da destra"
allora la riga sarà formata esclusivamente da:
Prima colonna: tutti zeri tranne la prima sottocolonna che vale 1 (il
valore "Aldo")
Settima colonna: UN SOLO zero: nella prima sottocolonna (traduce
l'affermazione "NON è il primo da destra") E BASTA!
Si procede in questo modo con ognuna delle venti frasi (in realtà
alcune, come già detto, non sono formalizzabili) arivando ad avere
quindi, nel nostro caso, venti righe del genere.
Adesso, se tirando la verticale su una sottocolonna, si trovano due 1
(in due o più righe diverse), vuol dire che quelle righe parlano della
stessa persona, e possono essere sommate (1 + 1 = 1 + ? = 1; 0 + 0 = 0
+ ? = 0; 1 + 0 = 0 + 1 = CONTRADDIZIONE) ottenendo una sola riga che
descrive la situazione.
Questa non è l'unica operazione possibile. Infatti, se tirando la
verticale, si trovano due righe che hanno dei valori di sottocolonna
DIVERSI tra loro (ovvero se troviamo uno zero ed un uno) questo
significa che le due righe stanno parlando di due DIVERSI personaggi e
quindi tutti gli ALTRI 1 della prima riga si tramutano
obbligatoriamente in zeri per la seconda riga (ovviamente lungo la
stessa sottocolonna), e viceversa, tutti gli altri 1 della seconda
riga impongono altrettanti zeri alla prima.
Usando questi due criteri, si può ad esempio partire dalla prima
sottocolonna della prima riga e confrontarla man mano con gli altri
valori in verticale, ecc. ma il procedimento è lungo e sarebbe meglio
farlo fare al computer tramite un mini-programmino (facile da
realizzare).
Si noti infine che in questo modo saltano fuori tutte le eventuali
incongruenze del quesito. Se cioè le affermazioni risultano essere
contraddittorie, arrivati ad un certo punto ci si troverà ad avere due
righe che hanno una stessa sottocolonna al valore uno (parlano della
stessa persona), con qualche altra sottocolonna con valori diversi tra
loro (incongruenza). All'eventuale mini-programmino si può chiedere
una verifica durante le operazioni tra le righe, per evidenziare la
contraddittorietà del sistema di frasi.
Forse non è il modo più semplice per formalizzare il problema ma a me
è venuto in mente questo. Se qualcuno ha altre idee si faccia
avanti...
Per ogni dubbio chiedi pure.
Ciao