Desafio
Escreva o código mais curto que possa somar todas as durações de tempo que aparecem no stdin. O programa deve considerar apenas as cadeias que correspondem a um dos seguintes padrões e ignorar o restante.
HH:MM:SS (it will be interpreted as HH hours, MM minutes and SS seconds)
H:MM:SS (it will be interpreted as H hours, MM minutes and SS seconds)
MM:SS (it will be interpreted as MM minutes, SS seconds)
M:SS (it will be interpreted as M minutes, SS seconds)
exemplos de seqüências de caracteres que correspondem aos padrões enumerados:
12:00:01
2:03:22
00:53
9:13
A saída deve ter a forma
HHh MMm SSs (that means HH hours, MM minutes and SS seconds with non-zero-padding)
Exemplo
STDIN
Veja o vídeo de boas-vindas.
Vídeo: 10:37 min.
Veja a introdução em vídeo do curso.
Vídeo: 3:30 min. Veja o vídeo de como usar a Visão geral da lição.
Vídeo: 9:13 min.
Veja a visão geral em vídeo de como usar o sistema Epsilen para compartilhar seu trabalho.
Vídeo: 03:15 min.
Assista ao vídeo para aprender sobre a Avaliação de prontidão acadêmica do estado do Texas (STAAR).
Vídeo: 1:05:26 min.
STDOUT
1h 32m 1s
fonte
10:4:56
? De acordo com a especificação atual, eles devem ser tratados como4m 56s
parte10
que será ignorada. A mesma pergunta sobre10:12:7
isso significa10m 12s
ignorar7
? Ou o manuseio de tais strings pode ser definido como implementação?1h 19m 18s
a saída?37+30+13+15+26==121
,10+3+9+3+5==30
,1==1
, Por isso espero1h 32m 01s
. O que há de errado nessa lógica? Além disso, esse formato de saída é o esperado, não é?Respostas:
Pitão 105
Experimente online.
Isso requer a entrada de STDIN da mesma maneira que a resposta Javascript, como texto citado com novas linhas como
\n
s.Amostra:
Resultado
Exemplo de trabalho com datas mais estranhas:
Resultado
(Somente 10:10 e 1:10 são tempos legítimos)
A principal razão pela qual isso é tão longo é que Pyth não permitirá que você extraia correspondências positivas. Em vez disso, corresponde a tudo que não é um tempo válido e o substitui por um caractere de espaço. A divisão no espaço em branco deixa apenas tempos e alguns números errados. Os números excedentes são removidos verificando os
:
caracteres que serão removidos de horários não válidos. Isso certamente poderia ser ainda mais jogado;)fonte
Javascript ES6, 138 caracteres
Função, 139
Toma string como argumento e grava a saída no console:
Programa, 138
Teste de função
Resultado
fonte
JavaScript, ES6,
208200197 bytesEu sei que isso é muito longo, mas eu queria explorar os recursos mais recentes do ES6, reverter, reduzir mapa, funções de seta e compreensão de array (operador de propagação).
Basta executar o trecho no Firefox mais recente.
Como funciona (um pouco destruído)
fonte
Bash (com grep, sed, awk e date): 124 bytes, 120 bytes
Basta canalizar o texto para isso:
Como funciona
0123456789:
fonte
Perl -
228201É o mesmo algoritmo do Optimizer (grep, split, reverse, add).
Eu não sou especialista em Perl, então talvez a contagem de bytes possa ser reduzida.
Ungolfed
fonte
my
palavras-chave).Rebol - 174
Sem golfe + anotado:
A Rebol vem com seu próprio
time!
tipo de dados. Você pode ver como o código acima utiliza isso no exemplo abaixo (de dentro do console da Rebol):fonte
Groovy - 195
Não consigo descobrir como comprimir mais.
Ungolfed
fonte
Mathematica 300 caracteres
Este pequeno exercício exigiu muito código, mesmo para o Mathematica. Certamente, existem maneiras mais eficientes de fazer isso.
Golfe
Supondo que a entrada esteja armazenada
txt
,Como funciona (usando código não-protegido):
1-Encontre os horários.
2-Break em horas, minutos, segundos
3-Soma os tempos. Objetos de tempo são horários. Subtrair um objeto de tempo de outro retorna uma duração, neste caso 92.0167 minutos.
QuantityMagnitude
derruba a unidade de medida.4-Converter 92,0167 minutos em horas, minutos, segundos.
fonte
Perl, 146
Minha entrada imprime a saída com um espaço à direita - espero que esteja tudo bem
Se pudermos supor que haverá apenas uma vez por linha de entrada, podemos cortar 4 caracteres:
Eles funcionam acumulando o total de segundos decorridos e formatando esse valor posteriormente.
fonte