Κάθε μήνα, ο σύντροφός σου συναντιέται με τον καλύτερό του φίλο. Και οι δύο έχουν πολύ φορτωμένο πρόγραμμα, κι έτσι είναι δύσκολο να βρουν μια κατάλληλη ημερομηνία! Επειδή κι εσύ έχεις φορτωμένο πρόγραμμα, ο σύντροφός σου τσεκάρει πάντα μαζί σου τις πιθανές ημερομηνίες για τη συνάντηση:
Στην κλήση αυτού του μήνα, ο σύντροφός σου σου έκανε αυτή την ερώτηση:
Μπερδεμένος, ρωτάς τι είναι μια ημέρα "teenth". Ο σύντροφός σου εξηγεί ότι μια ημέρα teenth, μια έννοια που επινόησε ο ίδιος, αναφέρεται στις ημέρες του μήνα που τελειώνουν σε '-teenth':
Καθώς υπάρχουν επίσης επτά ημέρες της εβδομάδας, είναι εγγυημένο ότι κάθε ημέρα της εβδομάδας έχει ακριβώς μία ημέρα teenth κάθε μήνα.
Τώρα που κατάλαβες την έννοια της ημέρας teenth, κοιτάς το ημερολόγιό σου. Δεν έχεις τίποτα προγραμματισμένο την teenth Πέμπτη, οπότε επιβεβαιώνεις με χαρά την ημερομηνία με τον σύντροφό σου.
Το καθήκον σου είναι να βρεις την ακριβή ημερομηνία μιας συνάντησης, όταν σου δίνονται ένας μήνας, ένα έτος, μια ημέρα της εβδομάδας και μια εβδομάδα.
Υπάρχουν έξι τιμές εβδομάδας που πρέπει να λάβεις υπόψη: first, second, third, fourth, last, teenth.
Για παράδειγμα, μπορεί να σου ζητηθεί να βρεις την ημερομηνία της συνάντησης την πρώτη Δευτέρα του Ιανουαρίου 2018 (1 Ιανουαρίου 2018).
Παρομοίως, μπορεί να σου ζητηθεί να βρεις:
Η εβδομάδα teenth αναφέρεται στις επτά ημέρες ενός μήνα που καταλήγουν σε '-teenth' (13th, 14th, 15th, 16th, 17th, 18th και 19th).
Αν σου ζητηθεί να βρεις το teenth Σάββατο του Αυγούστου 1953, κοιτάμε το ημερολόγιό του:
August 1953
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Από αυτό βρίσκουμε ότι το teenth Σάββατο είναι η 15η Αυγούστου 1953.
Η ενσωματωμένη υποστήριξη της Prolog για ημερομηνίες είναι αρκετά στοιχειώδης. Ένας πολύ πιο βολικός τρόπος για να δουλέψεις με ημερομηνίες είναι μέσω του [πακέτου date_time][date_time-package].
Αν η έκδοση του Swipl που έχεις εγκαταστήσει είναι αρκετά πρόσφατη, μπορείς να εγκαταστήσεις το πακέτο τρέχοντας:
swipl pack install date_time
Αν αυτό δεν δουλέψει, μπορείς να τρέξεις:
swipl -g 'pack_install(date_time)'
Αν χρησιμοποιείς τον διαδικτυακό επεξεργαστή κώδικα, δεν χρειάζεται να εγκαταστήσεις τίποτα χειροκίνητα.
Πρόσθεσε τον παρακάτω κώδικα στην αρχή του αρχείου της λύσης σου για να χρησιμοποιήσεις το πακέτο date_time:
:- use_module(library(date_time)).
Συμβουλή: ο [πηγαίος κώδικας του πακέτου date_time][https://www.swi-prolog.org/pack/file_details/date_time/prolog/date_time.pl?show=src] είναι καλά τεκμηριωμένος και θα σου φανεί πολύ χρήσιμος!
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Prolog με 109 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.