Ο Γρίφος της Ζέβρας είναι ένας διάσημος γρίφος λογικής, στον οποίο υπάρχουν πέντε σπίτια, καθένα βαμμένο με διαφορετικό χρώμα. Τα σπίτια έχουν διαφορετικούς κατοίκους, οι οποίοι έχουν διαφορετικές εθνικότητες, διαφορετικά κατοικίδια, πίνουν διαφορετικά ποτά και απολαμβάνουν διαφορετικά χόμπι.
Για να σε βοηθήσουμε να λύσεις τον γρίφο, σου δίνονται 15 προτάσεις που περιγράφουν τη λύση. Ωστόσο, μόνο αν συνδυάσεις τις πληροφορίες από όλες τις προτάσεις θα μπορέσεις να βρεις τη λύση του γρίφου.
Ο Γρίφος της Ζέβρας είναι ένα πρόβλημα ικανοποίησης περιορισμών (CSP). Σε ένα τέτοιο πρόβλημα, έχεις ένα σύνολο από πιθανές τιμές και ένα σύνολο από περιορισμούς που καθορίζουν ποιες τιμές είναι έγκυρες. Ένα άλλο γνωστό CSP είναι το Sudoku.
Ο στόχος σου είναι να λύσεις το Παζλ της Ζέβρας, για να βρεις τις απαντήσεις σε αυτές τις δύο ερωτήσεις:
Για τις παρακάτω 15 προτάσεις γνωρίζουμε πως είναι όλες αληθείς:
Επιπλέον, καθένα από τα πέντε σπίτια είναι βαμμένο με διαφορετικό χρώμα, και οι κάτοικοί τους έχουν διαφορετική εθνικότητα, έχουν διαφορετικά κατοικίδια, πίνουν διαφορετικά ροφήματα και ασχολούνται με διαφορετικά χόμπι.
Υπάρχουν 24 δισεκατομμύρια (5!⁵ = 24.883.200.000) πιθανές λύσεις, οπότε προσπάθησε να αποκλείσεις όσο το δυνατόν περισσότερες λύσεις.
Όρισε μία μόνο συνάρτηση, τη SolvePuzzle, η οποία επιστρέφει μια λύση που περιέχει δύο συμβολοσειρές, των οποίων οι τιμές είναι οι απαντήσεις στις ερωτήσεις του γρίφου της ζέβρας "Ποιος πίνει νερό;" και "Ποιος έχει τη ζέβρα;". Κάθε απάντηση θα είναι μία από τις εθνικότητες των κατοίκων: Englishman, Spaniard, Ukrainian, Norwegian ή Japanese.
Προφανώς, θα μπορούσες απλώς να γράψεις μια συνάρτηση μιας γραμμής, αν κρυφοκοιτάξεις το πρόγραμμα των τεστ για να δεις την αναμενόμενη λύση. Όμως ο στόχος είναι να αναπτύξεις έναν αλγόριθμο που χρησιμοποιεί τα δεδομένα στοιχεία και τους περιορισμούς του γρίφου και προσδιορίζει τις δύο σωστές απαντήσεις.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Go με 34 έννοιες165 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.
Εξερεύνησε 8 διαφορετικούς τρόπους για να βρεις τη λύση του Γρίφου της Ζέβρας ανάμεσα σε 24 δισεκατομμύρια πιθανές λύσεις, όπως το να αγνοείς τις άκυρες μεταθέσεις όσο το δυνατόν νωρίτερα, τον αλγόριθμο AC-3, μια ιδιαίτερα συνοπτική λύση βασισμένη στη λογική και ακόμη και έναν γενετικό αλγόριθμο!