In Vernor Vinges exzellentem und faszinierendem Buch A Deepness in the Sky (das ich übrigens wärmstens empfehlen kann 1 ) kennt das Qeng Ho , eine Kultur, die verschiedene Sternensysteme umspannt, keine "Tage", "Monate". Jahre usw. und verfügt daher über ein einzigartiges Zeitnehmungssystem, das die Zeit vollständig in Sekunden misst. Die am häufigsten verwendeten Einheiten sind Ksec (Kilosekunde), Msec (Megasekunde) und Gsec (Gigasekunde). Hier ist eine handliche Tabelle aus meinem eigenen Exemplar des Buches (da ich es online nicht finden kann):
Sie fliegen gerade mit der Pham Nuwen und haben gerade eine Nachricht von einem fremden, unbekannten Planeten namens " Erde " erhalten. 2 Sie verwenden andere Zeiteinheiten als Sie und Ihre Computer erkennen ihre nicht. Als Programmierer-Archäologe des Schiffes müssen Sie den Code für die Zeitverarbeitung so ändern, dass er die Zeiteinheiten der Erde erkennt .
Natürlich möchten Sie Ihren Code so kurz wie möglich halten, damit er schnell geschrieben werden kann, da Sie nur für ein paar weitere Ksecs außer Schlaf sind. Glücklicherweise hat der Qeng Ho als interstellare Handelskultur Zugang zu jeder erfundenen Programmiersprache.
Eingang
Die Eingabe ist eine einzelne Zeichenfolge, die eine oder mehrere durch Leerzeichen getrennte
Komponenten enthält . Eine Komponente wird als ganze Zahl definiert> 0 und ≤ 255 ist , dann ein Raum, und dann einem von second
, minute
, hour
, day
, week
, month
,
year
, decade
, oder century
, möglicherweise mehr (mit einer zusätzlichen s
, oder
centuries
für den letzten Fall ist ).
Hier sind einige gültige Beispieleingaben:
10 days 12 hours
1 year
184 centuries 1 second
9 weeks 6 days 2 hours 1 minute 20 seconds
In Bezug auf die Eingabe können Sie Folgendes annehmen:
Die Pluralisierung von Einheiten wird immer mit der entsprechenden Anzahl übereinstimmen.
Wenn die Eingabe mehrere Komponenten enthält , werden diese immer in absteigender Reihenfolge der Länge angezeigt.
Im Folgenden finden Sie die Bedeutung der verschiedenen Eingabeeinheiten für diese Herausforderung:
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
Ausgabe
Hier sind die Qeng Ho-Einheiten, die Ihr Code unterstützen muss:
unit relative absolute
----------------------------------------
second 1 second 1 second
Ksec 1000 seconds 1000 seconds
Msec 1000 Ksecs 1000000 seconds
Gsec 1000 Msecs 1000000000 seconds
Verwenden Sie den folgenden Algorithmus, um die Ausgabe Ihres Codes zu bestimmen:
Addieren Sie zunächst die Gesamtzeit, die die Eingabe darstellt.
Ermitteln Sie die größte Qeng Ho-Einheit, die kürzer oder genauso lang wie die Eingabe ist. Ermitteln Sie im Wesentlichen die größte Einheit, von der es mindestens eine gibt.
Wandeln Sie die in der Eingabe angegebene Gesamtzeit in diese Einheit um und geben Sie das Ergebnis auf drei Dezimalstellen gerundet aus.
Sie haben möglicherweise die Wahl, welche der folgenden Methoden Sie verwenden möchten: Aufrunden, Abrunden, Abrunden von Null oder Runden in Richtung ∞ oder -∞. Wenn das gerundete Ergebnis endet 0
, können Sie entweder nachfolgende Nullen entfernen oder so viele beibehalten, wie Sie möchten (oder je nach Eingabe beides).
Wenn das gerundete Ergebnis genau ist 1.000
, müssen Sie die Singularform verwenden ( second
, Ksec
, Msec
, Gsec
); Andernfalls verwenden , um die Pluralform ( seconds
,
Ksecs
, Msecs
, Gsecs
).
In bestimmten Randfällen verwenden Sie möglicherweise die Einheit Ksec, erhalten jedoch ein gerundetes Ergebnis von 1000.000 Ksecs. In diesem Fall können Sie einfach Ausgabe
1000.000 Ksecs
statt 1 Msec
.
Sie können immer davon ausgehen, dass die Eingabe in absteigender Reihenfolge der Einheiten erfolgt (Jahrhundert, Jahrzehnt, Jahr usw.). Darüber hinaus ist die Komponente, die hinter einer bestimmten Einheit steht, immer kürzer (dh es 1 decade 20 years
handelt sich um eine ungültige Eingabe).
Testfälle
Hinweis: Mit einem Stern ( *
) gekennzeichnete Ergebnisse können aufgrund von Rundungsdifferenzen geringfügig abweichen.
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
Regeln
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
1: natürlich nur, wenn du hard scifi magst. In diesem Fall empfehle ich, zuerst A Fire Upon the Deep zu lesen , was meiner Meinung nach sogar noch fantastischer ist.
2: Nun, technisch gesehen wird "Alte Erde" in A Deepness in the Sky mehrmals erwähnt , aber ...
2 months 2 hours
als "2 Monate * 2 Stunden" interpretiert wird .