Треки
/
Cairo
Cairo
/
Вправи
/
Космічний вік
Космічний вік

Космічний вік

Легка

Вступ

Зараз 2525 рік, і ми щойно вирушили в подорож, щоб відвідати всі планети Сонячної системи (Меркурій, Венеру, Землю, Марс, Юпітер, Сатурн, Уран і Нептун). Перша зупинка - Меркурій, де митні правила вимагають заповнити форму (бюрократія, вочевидь, не є особливістю самої лише Землі). Коли ми передаємо форму митнику, він уважно її вивчає і хмуриться. Невже ми справді сподіваємося, що він повірить, ніби нам лише 50 років? Нам, мабуть, ближче до 200!

Розвеселені, ми чекаємо, що митник ось-ось засміється, але він, схоже, цілком серйозний. Ми розуміємо, що вписали свій вік у земних роках, а митник чекав на нього в меркуріанських роках! Оскільки орбітальний період Меркурія навколо Сонця значно коротший за земний, у меркуріанських роках ми насправді значно старші. Після кількох швидких обчислень ми можемо назвати свій вік у меркуріанських роках. Митник задоволено всміхається і пропускає нас. Подумки ми занотовуємо собі розрахувати свій вік для конкретної планети перед майбутніми митними перевірками, щоб уникати таких плутанин.

Note

Якщо нам цікаво, чому Плутон не потрапив до списку, подивімося це відео на 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
Note

Насправді один повний оберт Землі навколо Сонця триває ближче до 365.256 діб (1 сидеричний рік). У григоріанському календарі в середньому 365.2425 діб. Хоча це не цілком точно, у цій вправі використовується значення 365.25. Про інші способи вимірювання року можна дізнатися зі статті Рік у Вікіпедії.

Реалізація

У Cairo, де немає вбудованої підтримки чисел з плаваючою комою, дробові значення ми подаємо як цілі числа.

Такий підхід необхідний у розробці блокчейнів, щоб зберігати точність обчислень.

У цій вправі ми використовуємо арифметику з фіксованою комою, перетворюючи орбітальні періоди в мікросекунди.

Наприклад, орбітальний період Меркурія, що становить 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

Застосовуючи цей метод, ми гарантуємо, що дробові значення точно представлені цілими числами, зберігаючи потрібну точність до двох десяткових знаків, що критично важливо для проходження тестів.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Cairo Exercism

Час розпочати Космічний вік?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Cairo, а також 25 концепцій68 вправ та справжнє наставництво від людей, і все це безкоштовно.