Ο τρόπος που μετράμε τον χρόνο είναι λίγο μπερδεμένος. Έχουμε 60 δευτερόλεπτα στο λεπτό και 60 λεπτά στην ώρα. Αυτό προέρχεται από την αρχαία Βαβυλώνα, όπου χρησιμοποιούσαν το 60 ως βάση του αριθμητικού τους συστήματος. Μια μέρα έχει 24 ώρες, μια εβδομάδα έχει 7 μέρες, και πόσες μέρες έχει ένας μήνας; Λοιπόν, ο αριθμός των ημερών σε έναν μήνα δεν εξαρτάται μόνο από το ποιος μήνας είναι, αλλά και από το είδος του ημερολογίου που χρησιμοποιείται στη χώρα όπου ζεις.
Τι θα γινόταν όμως αν χρησιμοποιούσαμε μόνο δευτερόλεπτα για να εκφράζουμε χρονικά διαστήματα; Τότε θα μπορούσαμε να χρησιμοποιήσουμε τα προθέματα του μετρικού συστήματος για να γράφουμε μεγάλους αριθμούς δευτερολέπτων σε ποσότητες πιο εύκολα κατανοητές.
Αν ποτέ αποικίσουμε τον Άρη ή κάποιον άλλο πλανήτη, η μέτρηση του χρόνου θα γίνει ακόμα πιο μπερδεμένη. Αν κάποιος πει "έτος", εννοεί ένα έτος στη Γη ή ένα έτος στον Άρη;
Η ιδέα για αυτή την άσκηση προήλθε από το μυθιστόρημα επιστημονικής φαντασίας "A Deepness in the Sky" του συγγραφέα Vernor Vinge. Σε αυτό, ο συγγραφέας χρησιμοποιεί το μετρικό σύστημα ως βάση για τις μετρήσεις του χρόνου.
Η αποστολή σου είναι να προσδιορίσεις την ημερομηνία και την ώρα ένα γιγαδευτερόλεπτο μετά από μια δεδομένη ημερομηνία.
Ένα γιγαδευτερόλεπτο είναι ένα δισεκατομμύριο δευτερόλεπτα. Δηλαδή ένα 1 με εννέα μηδενικά μετά.
Αν γεννήθηκες στις 24 Ιανουαρίου 2015 στις 22:00 (10:00:00 μ.μ.), τότε θα είχες ζήσει ένα γιγαδευτερόλεπτο στις 2 Οκτωβρίου 2046 στις 23:46:40 (11:46:40 μ.μ.).
Η ενσωματωμένη υποστήριξη της Prolog για ημερομηνίες είναι αρκετά στοιχειώδης. Ενώ μπορείς να λύσεις αυτή την άσκηση με ό,τι είναι ενσωματωμένο στην Prolog, ένας πολύ πιο βολικός τρόπος για να δουλέψεις με ημερομηνίες είναι μέσω του πακέτου date_time.
Αν η εγκατεστημένη έκδοση του Swipl είναι αρκετά ενημερωμένη, μπορείς να εγκαταστήσεις το πακέτο τρέχοντας:
swipl pack install date_time
Αν αυτό δεν δουλέψει, μπορείς να τρέξεις:
swipl -g 'pack_install(date_time)'
Αν χρησιμοποιείς τον διαδικτυακό επεξεργαστή κώδικα, δεν χρειάζεται να εγκαταστήσεις τίποτα χειροκίνητα.
Πρόσθεσε τον παρακάτω κώδικα στην αρχή του αρχείου της λύσης σου για να χρησιμοποιήσεις το πακέτο date_time:
:- use_module(library(date_time)).
Συμβουλή: η πηγή του πακέτου date_time είναι καλά τεκμηριωμένη και μπορεί να σου φανεί πολύ χρήσιμη!
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Prolog με 109 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.