Vernor Vinge'nin mükemmel ve büyüleyici kitabında Gökyüzündeki A Deepness (bu arada, 1'i şiddetle tavsiye ediyorum ), çeşitli yıldız sistemlerini kapsayan bir kültür olan Qeng Ho , "gün", "" ay "" kavramına sahip değil. yıllar, "vb. ve böylece zamanı tamamen saniye cinsinden ölçen benzersiz bir zaman işleyişi sistemi vardır. En yaygın olarak kullanılan birimler Ksec (kilosecond), Msec (megasecond) ve GSEC (gigasecond). İşte kitabın kendi kopyasından gelen kullanışlı bir grafik (çevrimiçi olarak bulamadığım için):
Halen Pham Nuwen'e uçuyorsunuz ve “ Dünya ” denilen garip, bilinmeyen bir gezegenden bir mesaj aldınız . 2 Sizden farklı zaman birimleri kullanıyorlar ve bilgisayarlarınız onlarınkileri tanımıyor. Geminin yerleşik Programcı-Arkeoloğu olarak işiniz, zaman işleme kodunu Dünya zaman birimlerini tanıması için yamalamaktır .
Doğal olarak, bir kaç Ksec için sadece soğuk uyku dışında olduğunuz için, kodunuzu olabildiğince kısa yapmak istersiniz, böylece çabucak yazılabilir. Neyse ki, yıldızlar arası bir ticaret kültürü olarak, Qeng Ho icat edilen her programlama diline erişebiliyor.
Giriş
Giriş, bir veya daha fazla boşlukla ayrılmış bileşen içeren tek bir dize olacaktır
. Bir bileşen, daha sonra bir tam sayı> 0 ve ≤ 255, bir boşluk olarak tanımlanır ve daha sonra bir bir second
, minute
, hour
, day
, week
, month
,
year
, decade
, ya da century
muhtemelen (bir ilave ile çoğul s
veya
centuries
son durum için).
İşte bazı geçerli örnek girişler:
10 days 12 hours
1 year
184 centuries 1 second
9 weeks 6 days 2 hours 1 minute 20 seconds
Girdi hakkında aşağıdakileri varsayabilirsiniz:
Birimlerin çoğullaştırılması her zaman ilgili sayıya katılacaktır.
Girdide birden fazla bileşen varsa , bunlar her zaman azalan uzunluk düzeninde olacaktır.
İşte bu zorluğun amaçları için çeşitli girdi birimlerinin ne anlama geldiği:
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
Çıktı
İşte kodunuzun desteklemesi gereken Qeng Ho birimleri:
unit relative absolute
----------------------------------------
second 1 second 1 second
Ksec 1000 seconds 1000 seconds
Msec 1000 Ksecs 1000000 seconds
Gsec 1000 Msecs 1000000000 seconds
Kodunuzun çıktısını belirlemek için aşağıdaki algoritmayı kullanın:
İlk olarak, girişin temsil ettiği toplam süreyi toplayın.
Girdiyle aynı olan veya daha kısa olan en büyük Qeng Ho birimini bulun - temelde en az bir tane olan en büyük birimi bulun.
Girişte verilen toplam süreyi bu birime dönüştürün ve sonucu üç ondalık basamağa yuvarlayarak çıkarın.
Aşağıdaki yöntemlerden hangisini kullanmak istediğinizi seçebilirsiniz: yukarı yuvarlama, aşağı yuvarlama, sıfırdan yuvarlama veya ∞ veya -∞ yönüne yuvarlama. Yuvarlak sonuç sona ererse 0
, sondaki sıfırları kaldırabilir veya istediğiniz kadar tutabilirsiniz (ya da girişe bağlı olarak her ikisini de yapabilirsiniz).
Yuvarlak sonuç tam olarak ise 1.000
, sen tekil formu kullanılmalıdır ( second
, Ksec
, Msec
, Gsec
); aksi halde, çoğul kullanımı ( seconds
,
Ksecs
, Msecs
, Gsecs
).
Bazı kenar durumlarda, örneğin Ksec birimini kullanıyor olabilirsiniz, ancak 1000.000 Ksec'lik yuvarlatılmış bir sonuç elde edebilirsiniz. Bu durumda, 1000.000 Ksecs
bunun yerine basitçe çıktı alabilirsiniz
1 Msec
.
Her zaman, girdilerin azalan birimler sırasına sahip olduğunu varsayabilirsiniz (yüzyıl, on yıl, yıl vb.); ayrıca, herhangi bir birimden sonra gelen bileşen her zaman daha kısa olacaktır (yani 1 decade 20 years
, geçersiz girdidir).
Test durumları
Not: Yıldızla ( *
) işaretli sonuçlar , yuvarlama farkları nedeniyle göz ardı edilebilir miktarda değişebilir.
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
kurallar
- Bu kod golf , yani bayt cinsinden en kısa kod kazanır.
1: Tabii ki, sadece sert bilimlerden hoşlanıyorsanız. Bu durumda , önce Derinlerde Bir Ateşi okumanızı tavsiye ederim , ki bence bu daha harika.
2: Eh, teknik olarak "Eski Dünya", Gökteki Bir Derinlikte defalarca bahsedilir , ama ...
2 months 2 hours
“2 ay * 2 saat” olarak yorumluyor .