Dado um número inteiro entre 0 e 141 (inclusive), liste todos os horários de 24 horas cujas unidades de hora, minuto e segunda são adicionadas a esse número inteiro.
Regras de adição
Os números são adicionados por suas unidades de tempo, não por um dígito.
Por exemplo, pegue 17:43:59
17 + 43 + 59 = 119
Lembre-se, este é um exemplo de dígitos sendo adicionados.Na realidade, você digitaria 119 e 17:43:59 seria um dos resultados. A saída deve ser dada como HH: MM: SS ou H: MM: SS.
Lembre-se também de que o número mais alto possível é 141, sendo 23:59:59. Isso é código de golfe, então a menor quantidade vence. Tentativa e erro são permitidos, mas pode haver uma maneira melhor de fazer isso.
Editar: Especifique onde está no seu código o valor de entrada.
Respostas:
Gelatina ,
16302920 bytesAgora com o formato de saída correto! Muito obrigado a Dennis por sua ajuda na depuração desta resposta. Sugestões de golfe são bem-vindas. Experimente online!
Editar: +14 bytes usando o formato de saída correto. -1 byte de remover um espaço extra. -3 de mudar de
24,60,60
para“ð<<‘
. -6 bytes de mudar+100DḊ€€
parad⁵
.Explicação
fonte
Bash, 71
Experimente online .
fonte
printf
é caro aqui. Aot
aproximar-se do formato correto e corrigi-lo para fazer o((t-$1))
trabalho, você pode baixá-lo para 71: #for t in {0..23}+{00..59}+{00..59};{((${t//+0/+}-$1))||echo ${t//+/:};}
Perl 6 ,
6256 bytesApenas verifica todas as combinações possíveis no produto cruzado de todas as horas, minutos e segundos.
fonte
Python 3 , 91 bytes
Existem soluções mais curtas usando
exec
(Python 2) ou recursão (Python 3), mas ambas requerem uma quantidade razoável de memória.Experimente online!
fonte
PowerShell ,
8777 bytesGuardado 10 bytes graças a John L. Bevan
Experimente online!(isso expirará, é muito lento)
Explicação
Muito simples, começando com o atual
[datetime]
, adicione 1 segundo 86.399 vezes, formate como uma sequência e mantenha apenas os que soma somam.fonte
10000000
por1e7l
para salvar 4 bytes ... ou mesmo1e7
para um byte extra (eu acho; eu tive que incluirL
o benefício do parâmetro; mas suspeite que sua abordagem evite essa necessidade.1e7
por pelo menos 30 minutos, e foi oL
postfix que eu perdi; Eu esqueci e não consegui descobrir uma maneira de fazê-lo ser mais curto que a constante. Quem decidiu que a[timespan]
interpreta um[int]
como carrapatos e um[double]
como dias de qualquer maneira? A parteiex
é bastante brilhante, embora torne tudo muito mais lento.iex
truque foi adaptado a partir de uma ponta aqui: codegolf.stackexchange.com/a/746/6776Haskell, 77 bytes
fonte
Haskell, 90 bytes
Retorna uma lista de cadeias HH: MM: SS, por exemplo
f 140
- ->["22:59:59","23:58:59","23:59:58"]
.São três voltas simples através das horas, minutos e segundos. Mantenha e formate todos os valores em que a soma é o número de entrada
x
.fonte
Pitão - 30 bytes
Leva todos os tempos possíveis e depois filtra.
Conjunto de Teste .
fonte
Julia 0,5 , 69 bytes
Experimente online!
fonte
Lote, 168 bytes
Produz horas de um dígito.
fonte
Mathematica, 79 bytes
fonte
Oitava,
83, 87 bytesExperimente Online!
fonte
QBIC ,
8272 bytesIsso atinge um ponto infeliz no QBasic, com conversão para número, aparando e precedido de um
0
quando necessário é realmente caro.Saída de amostra:
ExplicaçãoEu escrevi um romance sobre isso:fonte
PowerShell , 67
79bytes (versão desagradável)Como as regras não dizem nada sobre a conclusão em um determinado período de tempo (ou nada) e nada sobre duplicatas, aqui está uma solução horrível:
fonte
Raquete 39 bytes
Ungolfed:
fonte
MATL , 29 bytes
Experimente online!
Explicação
fonte
JavaScript,
122120 bytesToma uma string vazia adicional como entrada,
que eu presumo que não conta para o tamanho. Bytecount atualizado (incluindo histórico) para adicionar dois bytes para a inicialização da string.fonte
JavaScript (ES6), 110
Menos golfe
Teste
fonte
JavaScript, 96 bytes
Visualização expandida:
Faça um loop em todos os momentos possíveis, fazendo um loop de 86399 a 1,
Subtraia todos os 3 números do valor de entrada para retornar um valor de falsey se os três números somarem o valor de entrada. Se o valor for falsey, produza o valor.
fonte
bash, 78 bytes (usando um utilitário BSD) ou 79 bytes (também não BSD)
Isso é um pouco mais longo do que a @DigitalTrauma e a boa solução de 71 bytes do @ hvd, mas eu meio que gostei da idéia aqui de usar números na base 60; Estou curioso para saber se alguém pode jogar golfe um pouco mais.
Com o utilitário jot padrão BSD:
Com o utilitário seq mais universalmente disponível:
A idéia é gerar os números de 0 a 83699 e usar dc para convertê-los na base 60. Os "dígitos" na saída base-dc de 60 são números de 2 dígitos de 00 a 59, com espaços separando os "dígitos", portanto isso lista todos os horários desejados de 00 00 00 a 23 59 59 quase no formato necessário.
Se você literalmente fizer isso, números abaixo de 60 ^ 2 não são números de 3 dígitos na base 60, então os 00 ou 00 00 iniciais estão ausentes. Por esse motivo, estou gerando os números de 60 ^ 3 a 60 ^ 3 + 83699; isso garante que todos os números gerados tenham exatamente 4 dígitos na base 60. Tudo bem, desde que eu jogue fora o primeiro dígito extra (01) que não for necessário.
Assim, uma vez que os tempos desejados são gerados, eu pego cada quádruplo de 01 00 00 00 a 01 23 59 59, adiciono os últimos três números e subtraio o argumento $ 1. Se for 0, então pego tudo no quádruplo do terceiro caractere (jogando fora o "01"), use tr para converter espaços em dois pontos e imprima o resultado.
fonte
PowerShell , 91
97bytes (incluindo entrada)param($x)0..23|%{$h=$_;0..59|%{$m=$_;0..59|?{$h+$m+$_-eq$x}|%{"{0:0}:{1:00}:{2:00}"-f$h,$m,$_}}}
ou
param($x)0..23|%{$h=$_;0..59|?{($s=$x-$h-$_)-le59-and$s-ge0}|%{"{0:0}:{1:00}:{2:00}"-f$h,$_,$s}}
<\ s>Expandido e comentado
Nota: Superado pela versão do @ Briantist: /codegolf//a/105163/6776
fonte