Το έτος είναι 2525 και μόλις ξεκίνησες ένα ταξίδι για να επισκεφτείς όλους τους πλανήτες του Ηλιακού Συστήματος (Ερμή, Αφροδίτη, Γη, Άρη, Δία, Κρόνο, Ουρανό και Ποσειδώνα). Η πρώτη στάση είναι ο Ερμής, όπου το τελωνείο απαιτεί να συμπληρώσεις ένα έντυπο (η γραφειοκρατία προφανώς δεν είναι γήινη υπόθεση). Καθώς παραδίδεις το έντυπο στον τελωνειακό υπάλληλο, εκείνος το εξετάζει σχολαστικά και συνοφρυώνεται. "Περιμένεις πραγματικά να πιστέψω ότι είσαι μόλις 50 χρονών; Πρέπει να είσαι κοντά στα 200!"
Διασκεδάζοντας, περιμένεις να αρχίσει να γελάει ο τελωνειακός υπάλληλος, αλλά δείχνει απόλυτα σοβαρός. Συνειδητοποιείς ότι έγραψες την ηλικία σου σε γήινα χρόνια, αλλά ο υπάλληλος την περίμενε σε χρόνια του Ερμή! Καθώς η τροχιακή περίοδος του Ερμή γύρω από τον ήλιο είναι σημαντικά μικρότερη από αυτή της Γης, είσαι στην πραγματικότητα πολύ μεγαλύτερος σε χρόνια του Ερμή. Έπειτα από μερικούς γρήγορους υπολογισμούς, καταφέρνεις να δηλώσεις την ηλικία σου σε χρόνια του Ερμή. Ο τελωνειακός υπάλληλος χαμογελάει ικανοποιημένος και σου κάνει νόημα να περάσεις. Σημειώνεις νοερά να προϋπολογίζεις την ηλικία σου για κάθε πλανήτη πριν από τους μελλοντικούς τελωνειακούς ελέγχους, για να αποφεύγεις τέτοιες παρεξηγήσεις.
Αν αναρωτιέσαι γιατί ο Πλούτωνας έμεινε εκτός, δες αυτό το βίντεο στο YouTube.
Με δεδομένη μια ηλικία σε δευτερόλεπτα, υπολόγισε πόσο χρονών θα ήταν κάποιος σε έναν πλανήτη του Ηλιακού μας Συστήματος.
Ένα έτος της Γης ισούται με 365.25 ημέρες της Γης, ή 31,557,600 δευτερόλεπτα. Αν σου έλεγαν ότι κάποιος είναι 1,000,000,000 δευτερόλεπτα, η ηλικία του θα ήταν 31.69 έτη της Γης.
Για τους άλλους πλανήτες, πρέπει να λάβεις υπόψη την τροχιακή τους περίοδο σε έτη της Γης:
| Πλανήτης | Τροχιακή περίοδος σε έτη της Γης |
|---|---|
| Ερμής | 0.2408467 |
| Αφροδίτη | 0.61519726 |
| Γη | 1.0 |
| Άρης | 1.8808158 |
| Δίας | 11.862615 |
| Κρόνος | 29.447498 |
| Ουρανός | 84.016846 |
| Ποσειδώνας | 164.79132 |
Το πραγματικό μήκος μιας πλήρους περιφοράς της Γης γύρω από τον ήλιο είναι πιο κοντά στις 365.256 ημέρες (1 αστρικό έτος). Το Γρηγοριανό ημερολόγιο έχει, κατά μέσο όρο, 365.2425 ημέρες. Αν και όχι απολύτως ακριβής, το 365.25 είναι η τιμή που χρησιμοποιείται σε αυτή την άσκηση. Δες το Έτος στη Βικιπαίδεια για περισσότερους τρόπους μέτρησης ενός έτους.
Στην Cairo, όπου δεν υπάρχει εγγενής υποστήριξη για αριθμούς κινητής υποδιαστολής, αναπαριστούμε τις κλασματικές τιμές χρησιμοποιώντας ακέραιους αριθμούς.
Αυτή η προσέγγιση είναι απαραίτητη στην ανάπτυξη blockchain, ώστε να διατηρείται η ακρίβεια στους υπολογισμούς.
Σε αυτή την άσκηση, χρησιμοποιούμε αριθμητική σταθερής υποδιαστολής μετατρέποντας τις τροχιακές περιόδους σε μικροδευτερόλεπτα.
Για παράδειγμα, η τροχιακή περίοδος του Ερμή, 0.2408467 γήινα έτη, γίνεται 240,846,700 μικροδευτερόλεπτα με πολλαπλασιασμό επί 1,000,000.
Για να ληφθεί υπόψη η δεκαδική ακρίβεια, οι περιπτώσεις δοκιμών υποθέτουν ότι η ηλικία που προκύπτει έχει δύο δεκαδικά ψηφία, αναπαριστάμενα ως ακέραιοι.
Αυτό σημαίνει ότι μια ηλικία 31.69 ετών αποθηκεύεται ως 3169 στον κώδικα.
Για να το πετύχουμε αυτό, πολλαπλασιάζουμε επί 100 πριν εκτελέσουμε τη διαίρεση.
Ακολουθεί ένα παράδειγμα:
let mercury_orbital_period = 240_846_700; // in microseconds
let age_microseconds = age_seconds * 1_000_000;
// multiplying with 100 to retain 2 decimal places
age_microseconds * 100 / mercury_orbital_period
Με αυτή τη μέθοδο, διασφαλίζεις ότι οι κλασματικές τιμές αναπαρίστανται με ακρίβεια ως ακέραιοι, διατηρώντας παράλληλα την απαιτούμενη ακρίβεια των δύο δεκαδικών ψηφίων, κάτι που είναι κρίσιμο για να περάσουν οι δοκιμές.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Cairo με 25 έννοιες68 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.