Ad Code

Responsive Advertisement

Ticker

6/recent/ticker-posts

Σπαζοκεφαλιά και Prolog

Υπάρχει μία παρέα από φίλους, κάποιοι από τους οποίους λένε πάντα ψέματα, ενώ οι υπόλοιποι λένε πάντα την αλήθεια. Όλοι τους γνωρίζουν για τον καθένα άλλο, αν είναι ψεύτης ή όχι. Κάποια ημέρα, για να περάσουν την ώρα τους, παίζουν το εξής παιγνίδι. Το κάθε άτομο κάνει μία δήλωση της μορφής “στην παρέα υπάρχουν τουλάχιστον K ψεύτες”. Για παράδειγμα, έστω ότι υπάρχουν 5 άτομα και οι δηλώσεις τους είναι οι εξής:

•           Ο 1οςδηλώνει: “Υπάρχουν τουλάχιστον 3 ψεύτες μεταξύ μας
•           Ο 2οςδηλώνει: “Υπάρχουν τουλάχιστον 2 ψεύτες μεταξύ μας
•           Ο 3οςδηλώνει: “Υπάρχει τουλάχιστον 1 ψεύτης μεταξύ μας
•           Ο 4οςδηλώνει: “Υπάρχουν τουλάχιστον 4 ψεύτες μεταξύ μας
•           Ο 5οςδηλώνει: “Υπάρχουν τουλάχιστον 2 ψεύτες μεταξύ μας

Σχετικά εύκολα μπορούμε να διαπιστώσουμε ότι με βάση τα παραπάνω δεδομένα, στην παρέα πρέπει το 1ο και το 4ο άτομο να είναι ψεύτες και μόνο αυτοί.

Υλοποιήστε σε Prolog ένα κατηγόρημα liars/2, το οποίο όταν καλείται με πρώτο όρισμα τη λίστα των αριθμών που δηλώνονται από κάθε άτομο ως ελάχιστο πλήθος ψευτών στην παρέα, να επιστρέφει στο δεύτερο όρισμα μία λίστα που να δείχνει τι είναι το κάθε άτομο της παρέας, ψεύτης ή όχι, μέσω κατάλληλης τιμής, 1 ή 0. Κάποια παραδείγματα εκτέλεσης είναι τα εξής:

?- liars([2,3,3,4], Liars).
no

?- liars([3,2,1,4,2], Liars).
Liars = [1,0,0,1,0]

?- liars([9,1,7,1,8,3,8,9,1,3], Liars).
Liars = [1,0,1,0,1,0,1,1,0,0]

?- liars([12,3,9,15,8,9,0,15,9,6,14,6,3,3,9], Liars).
Liars = [1,0,1,1,0,1,0,1,1,0,1,0,0,0,1]

?- liars([4,9,1,12,14,8,1,17,3,6,5,6,18,20,0,8,7,9,4,16],Liars).
Liars = [0,1,0,1,1,0,0,1,0,0,0,0,1,1,0,0,0,1,0,1]

?- liars([13,2,2,14,24,7,25,19,10,14,16,3,24,12,9,16,16,0,15,16,5,19,2,3,16], Liars).
Liars = [0,0,0,1,1,0,1,1,0,1,1,0,1,0,0,1,1,0,1,1,0,1,0,0,1]

?- liars([11,15,29,17,20,30,25,15,14,24,26,21,8,21,28,8,5,28,9,6,28,8,20,18,10,29,28,16,0,5], Liars).
Liars = [0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0,0,0]


Δημοσίευση σχολίου

0 Σχόλια