Vernor Vingeの素晴らしい魅力的な本A Deepness in the Sky (ちなみに1を強くお勧めします)では、さまざまな星系にまたがる文化であるQeng Hoは、「日」、「月」、「年など」など、独自の計時システムがあり、時間を完全に秒単位で測定します。最も一般的に使用される単位は、Ksec(キロ秒)、Msec (メガ秒)、およびGsec(ギガ秒)です。これは、自分の本のコピーからの便利なチャートです(オンラインで見つけることができないため)。
現在、ファムヌウェンで飛行していますが、「地球」と呼ばれる未知の未知の惑星からメッセージを受信しました。2彼らはあなたとは異なる時間単位を使用し、コンピューターはそれらを認識しません。船の常駐のプログラマー考古学者としてのあなたの仕事は、地球の時間単位を認識するように時間処理コードを修正することです。
当然のことながら、あなたはさらに数キロ秒間コールドスリープ状態になっていないので、コードをできるだけ短くして、迅速に記述できるようにする必要があります。幸いなことに、恒星間の取引文化として、Qeng Hoは発明されたすべてのプログラミング言語にアクセスできます。
入力
入力は、1つ以上のスペースで区切られたコンポーネントを含む単一の文字列になり
ます。成分は、 > 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ユニットを見つけます。基本的に、少なくとも1つある最大のユニットを見つけます。
入力で指定された合計時間をこの単位に変換し、結果を小数点以下3桁に丸めて出力します。
使用する方法は、切り上げ、切り捨て、ゼロからの切り上げ、∞または-∞への丸めのいずれかを選択できます。丸められた結果がで終わる場合、0
末尾のゼロを削除するか、必要な数だけ保持する(または入力に応じて両方を行う)ことができます。
丸められた結果が正確であれば1.000
、あなたは単数形を使用する必要があります(second
、Ksec
、Msec
、Gsec
); そうでなければ、複数形を使用して(seconds
、
Ksecs
、Msecs
、Gsecs
)。
特定のケースでは、たとえばKsecの単位を使用している場合がありますが、1000.000 Ksecの丸められた結果が得られます。この場合、の1000.000 Ksecs
代わりに単純に出力できます
1 Msec
。
入力は、単位の降順(世紀、10年、年など)であると常に仮定できます。さらに、特定のユニットの後に来るコンポーネントは常に短くなります(つまり、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
ルール
- これはcode-golfであるため、バイト単位の最短コードが優先されます。
1:もちろん、ハードフィクションが好きな場合のみ。その場合、最初にA Fire Upon the Deepを読むことをお勧めします。これは(私の意見では)さらに素晴らしいものです。
2:まあ、技術的に「古い地球」は空の深さで数回言及されていますが、...
2 months 2 hours
、「2か月* 2時間」と解釈されます。