No excelente e fascinante livro de Vernor Vinge, A Deepness in the Sky (que, a propósito, eu recomendo muito 1 ), o Qeng Ho , uma cultura que abrange vários sistemas estelares, não tem noção de "dias", "meses" ". anos ", etc., e, portanto, possui um sistema exclusivo de cronometragem que mede o tempo inteiramente em segundos. As unidades mais usadas são o Ksec (kilosegundo), Msec (megasegundo) e Gsec (gigasegundo). Aqui está um gráfico útil da minha própria cópia do livro (já que não consigo encontrá-lo online):
Você está voando no Pham Nuwen e acabou de receber uma mensagem de um planeta estranho e desconhecido chamado " Terra ". 2 Eles usam unidades de tempo diferentes das que você usa e seus computadores não os reconhecem. Como programador-arqueólogo residente da nave, seu trabalho é corrigir o código de manipulação do tempo para que ele reconheça as unidades de tempo da Terra .
Naturalmente, como você não consegue dormir por mais alguns Ksecs, você deseja tornar seu código o mais curto possível para que ele possa ser escrito rapidamente. Felizmente, como uma cultura comercial interestelar, o Qeng Ho tem acesso a todas as linguagens de programação inventadas.
Entrada
A entrada será uma única sequência contendo um ou mais componentes separados por espaço
. Um componente é definido como um número inteiro> 0 e ≤ 255, em seguida, um espaço, e, em seguida, uma de second
, minute
, hour
, day
, week
, month
,
year
, decade
, ou century
, possivelmente, no plural (com um adicional s
, ou
centuries
para o último caso).
Aqui estão algumas entradas de exemplo válidas:
10 days 12 hours
1 year
184 centuries 1 second
9 weeks 6 days 2 hours 1 minute 20 seconds
Você pode assumir o seguinte sobre a entrada:
A pluralização de unidades sempre estará de acordo com o número relevante.
Se houver vários componentes na entrada, eles sempre estarão em ordem decrescente de comprimento.
Aqui está o que as várias unidades de entrada significam, para os propósitos deste desafio:
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
Saída
Aqui estão as unidades Qeng Ho que seu código precisa oferecer suporte:
unit relative absolute
----------------------------------------
second 1 second 1 second
Ksec 1000 seconds 1000 seconds
Msec 1000 Ksecs 1000000 seconds
Gsec 1000 Msecs 1000000000 seconds
Use o seguinte algoritmo para determinar a saída do seu código:
Primeiro, adicione a quantidade total de tempo que a entrada representa.
Encontre a maior unidade Qeng Ho que seja mais curta ou a mesma quantidade de tempo que a entrada - essencialmente, encontre a maior unidade da qual exista pelo menos uma delas.
Converta a quantidade total de tempo fornecida na entrada nesta unidade e produza o resultado, arredondado para três casas decimais.
Você pode escolher qual dos seguintes métodos usar: arredondar para cima, arredondar para baixo, arredondar para longe de zero ou arredondar para ∞ ou -∞. Se o resultado arredondado terminar 0
, você poderá remover os zeros à direita ou manter quantos quiser (ou fazer os dois, dependendo da entrada).
Se o resultado arredondado é exatamente 1.000
, você deve usar a forma singular ( second
, Ksec
, Msec
, Gsec
); de outro modo, utilizar a forma plural ( seconds
,
Ksecs
, Msecs
, Gsecs
).
Em certos casos extremos, você pode estar usando a unidade de, por exemplo, Ksec, mas obtém um resultado arredondado de 1000.000 Ksecs. Nesse caso, você pode simplesmente emitir em
1000.000 Ksecs
vez de 1 Msec
.
Você sempre pode assumir que a entrada está em ordem decrescente de unidades (século, década, ano etc.); além disso, o componente que vem depois de qualquer unidade sempre será mais curto (ou seja, 1 decade 20 years
é uma entrada inválida).
Casos de teste
Nota: os resultados marcados com um asterisco ( *
) podem variar em uma quantidade desprezível devido a diferenças de arredondamento.
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
Regras
- Isso é código-golfe , então o código mais curto em bytes vence.
1: somente se você gosta de ficção científica, é claro. Nesse caso, recomendo ler A Fire Upon the Deep primeiro, o que é (na minha opinião) ainda mais fantástico.
2: bem, tecnicamente, "Old Earth" é mencionada várias vezes em A Deepness in the Sky , mas ...
2 months 2 hours
como "2 meses * 2 horas".