У чудовій і захоплюючій книзі Вернора Вінге « Глибокість у небі» (яку, до речі, настійно рекомендую 1 ), Кенг Хо , культура, яка охоплює різні зіркові системи, не має поняття «дні», «місяці», « років "і т. д., а отже, існує унікальна система хронометражу, яка цілком вимірює час у секундах. Найчастіше використовуються одиниці - Ksec (кілосекунда), Msec (мегасекунда) та Gsec (гігасекунда). Ось зручна діаграма з моєї власної копії книги (оскільки я не можу знайти її в Інтернеті):
Ви зараз летите на Фам Нувен , і ви щойно отримали повідомлення від чужої, невідомої планети під назвою " Земля ". 2 Вони використовують різні часові одиниці, ніж ви, і ваші комп'ютери не розпізнають їх. Як програміст-археолог-резидент корабля, ваше завдання полягає в виправлення коду обробки часу, щоб він розпізнавав одиниці часу Землі .
Природно, оскільки вам не вистачає холоду ще протягом декількох Ksec, ви хочете зробити свій код якомога коротшим, щоб його можна було швидко записати. На щастя, як міжзоряна культура торгівлі, Qeng Ho має доступ до всіх придуманих мов програмування.
Вхідні дані
Вхід буде представляти собою один рядок, що містить один або кілька розділених пробілом
компонентів . Компонент визначається як ціле число> 0 і ≤ 255, то простір, а потім один з second
, minute
, hour
, day
, week
, month
,
year
, decade
, або century
, можливо , множина (з додатковим s
, або
centuries
для останнього випадку).
Ось кілька дійсних прикладів даних:
10 days 12 hours
1 year
184 centuries 1 second
9 weeks 6 days 2 hours 1 minute 20 seconds
Ви можете припустити наступне про вхід:
Плюралізація одиниць завжди буде відповідати відповідній кількості.
Якщо на вході є кілька компонентів , вони завжди будуть у порядку зменшення довжини.
Ось що означають різні одиниці введення для цілей цього виклику:
unit relative absolute
---------------------------------------
second 1 second 1 second
minute 60 seconds 60 seconds
hour 60 minutes 3600 seconds
day 24 hours 86400 seconds
week 7 days 604800 seconds
month 30 days 2592000 seconds
year 365 days 31536000 seconds
decade 10 years 315360000 seconds
century 10 decades 3153600000 seconds
Вихідні дані
Ось підрозділи Qeng Ho, які повинен підтримувати ваш код:
unit relative absolute
----------------------------------------
second 1 second 1 second
Ksec 1000 seconds 1000 seconds
Msec 1000 Ksecs 1000000 seconds
Gsec 1000 Msecs 1000000000 seconds
Використовуйте наступний алгоритм, щоб визначити вихід коду:
По-перше, складіть загальну кількість часу, яку представляє вхід.
Знайдіть найбільшу одиницю Qeng Ho, яка коротша або стільки ж часу, що і вхід, по суті, знайдіть найбільшу одиницю, з якої є хоча б одна.
Перетворіть загальну кількість часу, введеного на вході, в цей блок, і виведіть результат, округлений до трьох знаків після коми.
Ви можете обрати один із наступних методів: округлення, округлення вниз, округлення від нуля або округлення до towards або -∞. Якщо округлий результат закінчується 0
, ви можете або видалити кінцеві нулі, або зберегти стільки, скільки вам потрібно (або зробити обидва, залежно від введення).
Якщо округлений результат точно 1.000
, ви повинні використовувати особливу форму ( second
, Ksec
, Msec
, Gsec
); в іншому випадку використовувати форму множини ( seconds
,
Ksecs
, Msecs
, Gsecs
).
У певних крайніх випадках ви можете використовувати одиницю, наприклад, Ksec, але отримаєте округлий результат у 1000 000 Ksec. У цьому випадку ви можете просто вивести
1000.000 Ksecs
замість цього 1 Msec
.
Ви завжди можете припустити, що вхід знаходиться у порядку зменшення одиниць (століття, десятиліття, рік тощо); крім того, компонент, який з’являється після будь-якого даного блоку, завжди буде коротшим (тобто 1 decade 20 years
недійсним введенням).
Тестові справи
Примітка: результати, позначені зірочкою ( *
), можуть змінюватися на незначну кількість через різницю округлення.
input output
-------------------------------------------------------------
1 hour 3.600 Ksecs
1 day 86.400 Ksecs
2 weeks 1.210 Msecs
1 year 31.536 Msecs
32 years 1.009 Gsecs *
1 second 1.000 second
1 century 6 decades 5.046 Gsecs *
255 centuries 804.168 Gsecs
2 weeks 6 days 1 hour 19 minutes 4 seconds 1.733 Msecs
1 week 3 days 3 hours 7 minutes 875.220 Ksecs
1 week 4 days 13 hours 46 minutes 40 seconds 1.000 Msec
2 months 2 hours 5.191 Msecs *
16 minutes 39 seconds 999.000 seconds
Правила
- Це код-гольф , тому виграє найкоротший код у байтах.
1: тільки якщо вам подобається жорсткий scifi, звичайно. У такому випадку я рекомендую прочитати спочатку A Fire Upon the Deep , що (на мій погляд) ще більш фантастичне.
2: ну, технічно "Стара Земля" згадується кілька разів у "Глибині в небі" , але ...
2 months 2 hours
як "2 місяці * 2 години".