Dado un número entero entre 0 y 141 (inclusive), enumere todas las horas de 24 horas cuyas unidades de hora, minuto y segundo se suman a ese número entero.
Reglas de adición
Los números se agregan por sus unidades de tiempo, no por un solo dígito.
Por ejemplo, tome 17:43:59
17 + 43 + 59 = 119
Recuerde, ese es un ejemplo de dígitos agregados. En realidad, ingresaría 119, y 17:43:59 sería uno de los resultados. La salida debe darse como HH: MM: SS o H: MM: SS.
También tenga en cuenta que el número más alto posible es 141, que es 23:59:59. Este es el código de golf, por lo que gana la cantidad más baja. Se permite la prueba y el error, pero puede haber una mejor manera de hacerlo.
Editar: especifique en qué parte de su código se encuentra el valor de entrada.
Respuestas:
Jalea ,
16302920 bytes¡Ahora con el formato de salida correcto! Muchas gracias a Dennis por su ayuda en la depuración de esta respuesta. Sugerencias de golf bienvenidas. Pruébalo en línea!
Editar: +14 bytes del uso del formato de salida correcto. -1 byte al eliminar un espacio extra. -3 de cambiar de
24,60,60
a“ð<<‘
. -6 bytes de cambiar+100DḊ€€
ad⁵
.Explicación
fuente
Bash, 71
Pruébalo en línea .
fuente
printf
Es costoso aquí. Alt
acercarse al formato correcto y arreglarlo para que((t-$1))
funcione, puedefor t in {0..23}+{00..59}+{00..59};{((${t//+0/+}-$1))||echo ${t//+/:};}
Perl 6 ,
6256 bytesSimplemente verifica todas las combinaciones posibles en el producto cruzado de todas las horas, minutos y segundos.
fuente
Python 3 , 91 bytes
Hay soluciones más cortas que usan
exec
(Python 2) o recursividad (Python 3), pero ambas requieren una cantidad de memoria irracional.Pruébalo en línea!
fuente
PowerShell ,
8777 bytesGuardado 10 bytes gracias a John L. Bevan
Pruébalo en línea! (esto expirará, es muy lento)
Explicación
Bastante simple, comenzando con el actual
[datetime]
, agregue 1 segundo 86,399 veces, formatee como una cadena, luego mantenga solo los que suman.fuente
10000000
con1e7l
para guardar 4 bytes ... o incluso1e7
para un byte adicional (creo; tuve que incluir elL
para el beneficio del parámetro; pero sospecha que su enfoque evita esa necesidad.1e7
durante al menos 30 minutos, y fue elL
postfix el que me perdí; Lo olvidé y no pude encontrar una manera de llegar a int que fuera más corta que la constante. ¿Quién decidió que a[timespan]
interprete un[int]
as como ticks y un[double]
as days de todos modos? Eliex
bit es bastante brillante, aunque hace que todo esto sea demasiado lento.iex
truco fue adaptado de un consejo aquí: codegolf.stackexchange.com/a/746/6776Haskell, 77 bytes
fuente
Haskell, 90 bytes
Devuelve una lista de cadenas HH: MM: SS, por ejemplo,
f 140
->["22:59:59","23:58:59","23:59:58"]
.Son tres bucles simples a través de las horas, minutos y segundos. Mantenga y formatee todos los valores donde la suma es el número de entrada
x
.fuente
Pyth - 30 bytes
Toma todos los tiempos posibles y luego los filtros.
Test Suite .
fuente
Julia 0.5 , 69 bytes
Pruébalo en línea!
fuente
Lote, 168 bytes
Produce horas de un solo dígito.
fuente
Mathematica, 79 bytes
fuente
Octava,
83, 87 bytesPruébalo en línea!
fuente
QBIC ,
8272 bytesEsto llega a un punto desafortunado en QBasic, con la conversión de números, recortar y pretender
0
cuando es necesario es realmente costoso.Salida de muestra:
ExplicaciónEscribí una novela al respecto:fuente
PowerShell , 67
79Bytes (versión desagradable)Dado que las reglas no dicen nada acerca de completar en un tiempo determinado (o nada), y nada acerca de ningún duplicado, aquí hay una solución horrible:
fuente
Raqueta 39 bytes
Sin golf:
fuente
MATL , 29 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript
122120 bytesToma una cadena vacía adicional como entrada,
que supongo no cuenta para el tamaño. Bytecount actualizado (incluido histórico) para agregar dos bytes para la inicialización de la cadena.fuente
JavaScript (ES6), 110
Menos golf
Prueba
fuente
JavaScript, 96 bytes
Vista ampliada:
Recorre todos los tiempos posibles haciendo un bucle de 86399 a 1,
Reste los 3 números del valor de entrada para devolver un valor falsey si los tres números se suman al valor de entrada. Si el valor es falsey, envíe el valor.
fuente
bash, 78 bytes (usando una utilidad BSD) o 79 bytes (también no BSD)
Esto es un poco más largo que @DigitalTrauma y la agradable solución bash de 71 bytes de @ hvd, pero me gustó la idea de usar números en la base 60; Tengo curiosidad por saber si alguien puede jugar golf un poco más.
Con la utilidad jot estándar BSD:
Con la utilidad seq más universalmente disponible:
La idea es generar los números del 0 al 83699 y usar dc para convertirlos en base 60. Los "dígitos" en la salida base-60 de dc son números de 2 dígitos del 00 al 59, con espacios que separan los "dígitos", por lo que esto enumera todos los tiempos deseados de 00 00 00 a 23 59 59 en casi el formato necesario.
Sin embargo, si literalmente lleva a cabo eso, los números por debajo de 60 ^ 2 no son números de 3 dígitos en la base 60, por lo que falta el 00 o 00 00 inicial. Por esa razón, en realidad estoy generando los números de 60 ^ 3 a 60 ^ 3 + 83699; esto asegura que todos los números generados tengan exactamente 4 dígitos de largo en la base 60. Esto está bien siempre y cuando eventualmente elimine el primer dígito adicional (01) que no es necesario.
Entonces, una vez que se generan los tiempos deseados, simplemente tomo cada cuádruple de 01 00 00 00 a 01 23 59 59, sumo los últimos tres números y resto el argumento $ 1. Si eso es 0, entonces tomo todo en el cuádruple desde el tercer personaje (tirando el "01"), uso tr para convertir espacios en dos puntos e imprimo el resultado.
fuente
PowerShell , 91
97bytes (incluida la entrada)param($x)0..23|%{$h=$_;0..59|%{$m=$_;0..59|?{$h+$m+$_-eq$x}|%{"{0:0}:{1:00}:{2:00}"-f$h,$m,$_}}}
o
param($x)0..23|%{$h=$_;0..59|?{($s=$x-$h-$_)-le59-and$s-ge0}|%{"{0:0}:{1:00}:{2:00}"-f$h,$_,$s}}
<\ s>Ampliado y comentado
NB: Superado por la versión de @ Briantist: /codegolf//a/105163/6776
fuente