sabato 3 gennaio 2015

Un quesito con la Susi

Stamattina mi son svegliato e ho visto La Settimana Enigmistica sul tavolo — n. 4319 del primo gennaio 2015. A pagina 35 c'è il 921° Quesito con la Susi. Un classico.

Lo leggo e mi viene in mente quanto sarebbe facile impostare il problema in linguaggi come il Prolog, con il quale sono arrugginito ma, ripassando qua e ripassando là, magari qualcosa riesco ancora a tirar fuori1.

Ma prima, risolviamolo il quesito con la Susi2… Fatto. È facile3. La soluzione4 può servire anche come controllo per il risultato fornito dal programma.

Ora vediamo come farci aiutare dal Prolog5.

Per etichettare i personaggi usiamo il numero scritto sul biglietto che ciascuno ha in mano nella terza immagine (quella in cui i quattro amici esibiscono i biglietti; cfr. una delle note), e usiamo 0 per indicare Gianni. Usiamo una lista per descrivere la posizione dei cinque uomini; p.es. [1, 2, 3, 4, 0]. La procedura vicino/3 ci dice se due personaggi sono vicini in una data “configurazione” di posti (la differenza tra gli indici, rappresentanti la posizione, deve essere 1 in valore assoluto). La procedura chi/3 “modella” i vincoli e le informazioni del problema permette quindi di “trovare” l'associazione tra i numeri e i nomi-variabile Luca, Aldo e Berto. Per i quali vale quanto già descritto in una nota: nella configurazione [4, 0, 2, 1, 3] Luca è vicino ad Aldo ma non (\+) a Berto, mentre nella configurazione [1, 2, 3, 0, 4] della seconda immagine Berto e Aldo sono vicini. Inoltre, sappiamo che né Luca, né Aldo, né Berto sono 0 (infatti l'etichetta 0 è stata usata per Gianni), e che Luca è diverso da Aldo e da Berto, e Aldo è diverso da Berto6.

Non ci resta che “consultare” il file, chiedere chi(Luca, Aldo, Berto). e leggere la soluzione per Luca. Per esclusione sapremo anche chi è Franco7.

È tutto, gente.


  1. Questo genere di cose di solito le scrivo in inglese e le metto sul blog in inglese, dove i miei due lettori ne dovrebbero sapere abbastanza e dove il pubblico ipotetico in grado di apprezzare o disprezzare scientemente ciò che scrivo è senza dubbio più vasto di quello italiano. In questo caso, però, il quesito è nato in italiano su una rivista italiana, e visto che è una quisquilia, lo scrivo così come viene su questo blog.

  2. La Susi (da leggersi alla milanese) va al cinema dove la aspetta Gianni seduto con quattro amici lungo una stessa fila. Gianni, invece di presentarle gli amici come farebbero le persone normali, le pone il quesito: Luca è vicino ad Aldo, ma non a Berto. Poi si cambiano di posto e aggiunge una informazione: ora Berto è vicino ad Aldo. Infine i quattro amici di Gianni mostrano dei biglietti numerati e Gianni chiede a Susi di dirgli quale biglietto ha Luca; il che equivale a chiedere chi sia Luca dei quattro — un espediente per apporre delle etichette. Tramite le informazioni date è possibile associare alle figure (e quindi al numero sui biglietti) tutti i nomi: per completezza ci viene detto che l'amico non citato nella prima immagine si chiama Franco.

  3. Il genere di quesiti è abbastanza facile da invogliare molte persone a giocare (è un concorso a premi), ma sufficientemente “difficile” per tagliarne fuori un po'. Almeno si scartano quelli con capacità di ragionamento logico-matematiche insufficienti (ahimé, mi sembra che in Italia siano in tanti; ma forse nella popolazione di quelli che comprano La Settimana Enigmistica le cose sono un po' migliori?)

  4. Piccolo suggerimento: chi è seduto ai lati ha un solo vicino possibile. Questa considerazione ci permette di scartare uno degli amici e ci lascia con due sole possibilità per la prima configurazione; la seconda ci permette di scartarne un'altra e arriviamo perciò alla soluzione.

  5. Ho usato il GNU Prolog. Va bene anche per SWI Prolog, eccetto per il fatto che la procedura nth/3 va cambiata con nth0/3.

  6. È necessario perché esistono soluzioni possibili con valori ripetuti, p.es. Aldo=1, Berto=2, Luca=2, che dobbiamo scartare. Ci sono tre soluzioni possibili in cui due variabili hanno valore uguale e quindi vanno scartate; invece di farlo “a mano”, aggiungiamo i vincoli per evitare che Berto sia il secondo nome di Luca o viceversa…

  7. Svolgendo a mano il problema la prima associazione che scopriamo è Franco e ciò ci permette di ridurre le possibilità e poter fare un certo ragionamento. Non abbiamo bisogno di risparmiare al calcolatore la considerazione di “rami morti”: non siamo a caccia di efficienza. Ma, se proprio volessimo, potremmo codificare anche questa conoscenza “evidente” su quale numero di biglietto ha Franco. Lo lascio come esercizio a quelli che leggono le note e ne hanno voglia.

Nessun commento:

Posta un commento

Sii educato, costruisci con cura le frasi, rifletti prima di pubblicare, evita parolacce e offese dirette, non uscire dal tema, cerca di non omettere la punteggiatura, evita errori ortografici, rileggi quel che hai scritto.