O seguinte é inspirado em uma pergunta que surgiu hoje no Stack Overflow .
Dado um número de microssegundos, 0 <= n <= 86400000000
(por exemplo 12345678900
), produza uma string formatada hh:mm:ss:000:000
, por exemplo 03:25:45:678:900
.
0 -> '00:00:00:000:000'
12345678900 -> '03:25:45:678:900'
86400000000 -> '24:00:00:000:000'
Eu tenho uma solução em Python em 209 bytes, mas pode ir mais baixo?
hh:mm:ss.000000
provavelmente teria sido melhor (e mais fácil). Ainda assim, não posso mudar isso agora.Respostas:
Python 2,
8279 bytesConstrói a string, iterando através de uma série de divmods. O único pedaço chique é o
%7/2
, que mapeia1000 -> 3
e60 -> 2
.fonte
Pitão, 31 bytes
Experimente online: Demonstração
Explicação:
fonte
Bash + coreutils, 61
O idioma "mainstream" mais curto até agora ...
Saída de teste:
fonte
CJam,
37 3534 bytesIsso é muito bonito .. Golfing now ..
ATUALIZAÇÃO: 1 byte salvo graças ao @ Sp3000
Experimente online aqui
fonte
C, 97 bytes
Código do teste:
fonte
q (34)
Tenho certeza que pode ser mais curto
por exemplo
fonte
":"sv 0 8 11__[;8]15$2_($)"n"$1e3*
Julia,
1109695 bytesIsso cria uma função sem nome que aceita um número inteiro como entrada e retorna uma string. Para chamá-lo, dê um nome, por exemplo
f=t->...
.Ungolfed + explicação:
Exemplos:
fonte
C #,
179175 bytesQuando você tem embutidos à sua disposição, por que não usá-los?
Com melhor formatação:
fonte
Excel,
6563 caracteresSupondo que seus microssegundos estão em A1 :
Saída:
fonte
Perl,
14178 bytes77 bytes de código, +1 para o
-n
sinalizador. Correr com:Agradeço a Thomas Kwa e à chilemagic por reduzirem meu código quase pela metade.
fonte
3600000000
pode ser36e8
.chomp($n=<STDIN>);
você pode executá-lo como uma linha com a-n
bandeira (que conta como 1 caractere). Você também não precisa deint(..)
cada um$_
. Aplicando a dica de Thomas também, podemos reduzi-laecho 12345678900 | perl -ne'printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3'
e pode até haver uma maneira mais curta também!\n
string de saída. Você também pode substituir a string por"%02d:"x3 ."%03d:%03d"
printf"%02d:%02d:%02d:%03d:%03d\n",$_/36e8,$_/6e7%60,$_/1e6%60,$_/1e3%1e3,$_%1e3
e você adiciona um byte adicional ao-n
sinalizador. Se você usou,-nle
por exemplo, isso contaria como 2 adicionais (paran
oe ol
). Você obtém-
oe oe
(ouE
se precisar usarsay
) gratuitamente.Matlab - 88
89bytesObteve um byte com uma solução sem usar a função interna:
Crie uma função embutida que use um argumento de entrada numérica
t
e retorne uma string.ele usa uma combinação vetorizada de
fix
emod
para separar os elementos de tempo e depois exibir.é um pouco frustrante que a formatação da string de saída leve muito mais do que os próprios cálculos ...
Teste:
Versão de 89 bytes:
Ele divide o número, usa uma função interna para a parte hh: mm: ss, que não pode lidar com microssegundos, para que a sequência seja concluída com a combinação de
fix
emod
operaçõesfonte
JavaScript (ES6),
128118116111 bytesProvavelmente existe algum potencial de golfe nisso.
Demo
É o ES6, portanto, apenas o Firefox, por enquanto, de qualquer maneira:
fonte
C,
113103105 bytesEDIT: empurrado mais alguns bytes
CORRECÇÃO: tipo longo removido, graças a algum usuário
Não é a resposta C mais curta, mas me diverti um pouco com retornos de carro, então senti que alguém poderia gostar disso.
Chame assim:
fonte
CoffeeScript, 127 bytes
Adotou a abordagem na resposta da ASCIIThenANSI . É uma pena que a API do JavaScript Console não tenha espaços reservados de formato para números de preenchimento.
fonte
Powershell, 153
Uso
fonte
F #,
111 92102 bytesPrimeira iteração: ideia base.
Segunda iteração: Constantes menores
Terceira iteração: Formatação correta para partes de um dígito.
Observe que essa função deve receber um int64 para funcionar.
Exemplo de saídas:
fonte
PHP -
115102 bytesUma solução em 155 bytes (agrupada aqui em 3 linhas para facilitar a leitura):
A segunda linha calcula (de dentro para fora) os valores exatos dos componentes começando com os microssegundos.
A versão mais curta (115 bytes, agrupada em duas linhas para facilitar a leitura):
Ele também usa atribuições incorporadas para calcular a conversão do número de microssegundos de entrada em milissegundos, segundos, minutos e horas usando números de ponto flutuante. O operador de módulo (
%
) e o formato do número decimal (%d
) deprintf()
são usados para forçá-los a números inteiros (a parte fracionária é ignorada).Outra solução que usa as funções de data (102 bytes)
A parte hours: minutes: seconds é tratada pelas funções de data do PHP
gmdate()
estrtotime()
, os mil e microssegundos são extraídos como seqüências de caracteres do valor de entrada.Uso:
fonte
Java, 215 bytes
O método
f
faz alguns cálculosn
para calcular as horas, minutos etc. e delega ao métodop
para formatar cada valor corretamente.Formatado:
Uso:
fonte
Ruby - 82 bytes
fonte