Κάθε μήνα, ο σύντροφός σου συναντιέται με τον καλύτερό του φίλο. Και οι δύο έχουν πολύ φορτωμένο πρόγραμμα, κι έτσι είναι δύσκολο να βρουν μια κατάλληλη ημερομηνία! Επειδή κι εσύ έχεις φορτωμένο πρόγραμμα, ο σύντροφός σου τσεκάρει πάντα μαζί σου τις πιθανές ημερομηνίες για τη συνάντηση:
Στην κλήση αυτού του μήνα, ο σύντροφός σου σου έκανε αυτή την ερώτηση:
Μπερδεμένος, ρωτάς τι είναι μια ημέρα "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.
Θα χρειαστεί να χρησιμοποιήσεις τις ενσωματωμένες συναρτήσεις os.date και os.time της Lua σε αυτήν την άσκηση.
Η os.time(tbl) μετατρέπει έναν πίνακα που περιέχει μια "προδιαγραφή ημερομηνίας και ώρας" σε μια ακέραια τιμή.
Το όρισμα είναι ένας πίνακας που περιέχει τα κλειδιά "year", "month" και "day", και προαιρετικά "hour", "min", "sec" και "isdst".
Η os.date(format, time) μετατρέπει μια ακέραια τιμή χρόνου σε μια μορφοποιημένη συμβολοσειρά.
Η συμβολοσειρά μορφής περιγράφεται στη σελίδα man του strftime(3).
Γράψου στο Exercism για να μάθεις και να κατακτήσεις MoonScript με 126 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.