Lo Zebra Puzzle è un famoso puzzle logico in cui ci sono cinque case, ognuna dipinta di un colore diverso. Le case hanno abitanti diversi, di nazionalità diverse, che possiedono animali domestici diversi, bevono bevande diverse e hanno hobby diversi.
Per aiutarti a risolvere il puzzle, riceverai 15 affermazioni che descrivono la soluzione. Tuttavia, solo combinando le informazioni di tutte le affermazioni riuscirai a trovare la soluzione del puzzle.
Lo Zebra Puzzle è un problema di soddisfacimento di vincoli (CSP). In un problema di questo tipo, hai a disposizione un insieme di valori possibili e un insieme di vincoli che limitano quali valori sono validi. Un altro CSP ben noto è il Sudoku.
Il tuo compito è risolvere il puzzle della zebra per trovare la risposta a queste due domande:
Le seguenti 15 affermazioni sono tutte vere:
Inoltre, ognuna delle cinque case è dipinta di un colore diverso, e i loro abitanti hanno nazionalità diverse, possiedono animali diversi, bevono bevande diverse e hanno hobby diversi.
Ci sono 24 miliardi (5!⁵ = 24.883.200.000) di soluzioni possibili, quindi prova a scartarne il maggior numero possibile.
Definisci un'unica funzione, SolvePuzzle, che restituisce una soluzione contenente due stringhe, i cui valori sono le risposte alle domande del puzzle della zebra «Chi beve l'acqua?» e «Chi possiede la Zebra?». Ogni risposta sarà una delle nazionalità dei residenti: Englishman, Spaniard, Ukrainian, Norwegian o Japanese.
Ovviamente potresti semplicemente scrivere una funzione di una riga sola, sbirciando il programma di test per vedere la soluzione attesa. Ma l'obiettivo è sviluppare un algoritmo che usi i fatti e i vincoli dati per il puzzle e determini le due risposte corrette.
Iscriviti a Exercism per imparare e padroneggiare Go con 34 concetti165 esercizi e il mentoring di persone reali, tutto gratis.
Esplora 8 modi diversi di trovare la soluzione del puzzle della zebra fra 24 miliardi di soluzioni possibili, tra cui ignorare le permutazioni non valide il prima possibile, l'algoritmo AC-3, una soluzione molto concisa basata sulla logica e persino un algoritmo genetico!