Introducción:
En casa tenemos un reloj que marca la cantidad indicada a cada hora, pero también marca una vez cada media hora. Entonces, desde las 0:01 hasta las 12:00, incluido en este orden:
1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12
Desafío:
Dado un número entero n
, genera una lista de marcos de tiempo en los que las huelgas totales son iguales n
. Además, siempre comience al menos 1 minuto antes de este período de tiempo y termine al menos 1 minuto después de este período de tiempo (y como máximo 29 minutos).
Por ejemplo, si la entrada es n=8
, la salida podría ser:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Para el cual estos marcos de tiempo tienen las siguientes sumas, todas iguales 8
:
[1+1+2+1+3, 1+2+1+3+1, 3+1+4, 1+6+1, 1+7, 7+1, 8]
Reglas de desafío:
- La salida es flexible. Puede generar como objetos de tiempo (o fecha / fecha y hora), marcas de tiempo, cadenas (con o sin ceros a la izquierda), decimales con
.29
/.31
/.59
/.01
(es decir, en0.29-3.01
lugar de00:29-03:01
), etc. Siempre que esté claro, es antes y después del marco de tiempo .
Además, puede elegir la cantidad usted mismo. En todos mis ejemplos uso 1 minuto, pero también puede elegir 5 minutos, 15 minutos, etc. Esto también significa que puede usar.4
/.6
/.9
/.1
(es decir, en0.4-3.1
lugar de00:24-03:06
) por ejemplo. La lista también es flexible. Puede ser una lista / colección, matriz, cadena separada por delimitador, impresión por línea en STDOUT, etc.
Indique qué opción de salida ha realizado.Nota: No está permitido emitir las sumas de los marcos de tiempo como se indicó anteriormente, esto solo se menciona como aclaración. Debe generar los marcos temporales, incluso un poco antes y después. - Las huelgas se envuelven de
12:00
a00:30
. Entoncesn=14
, si , dos de los marcos de tiempo son11:29-00:31
y11:59-01:01
. - La entrada estará en el rango
1 <= n <= 90
, donde 90 es la suma total de todos los golpes posibles. - Los plazos que devuelva pueden estar en cualquier orden.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de código. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede utilizar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba:
(todo usando 1 minuto antes / después de los marcos de tiempo y ceros iniciales)
Input: 8
Ouput:
[00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01]
Input: 14
Output:
[00:29-04:01, 00:59-04:31, 02:59-05:01, 04:29-06:31, 05:59-07:01, 11:29-00:31, 11:59-01:01]
Input: 90
Output:
[00:29-00:01, 00:59-00:31, 01:29-01:01, 01:59-01:31, 02:29-02:01, 02:59-02:31, 03:29-03:01, 03:59-03:31, 04:29-04:01, 04:59-04:31, 05:29-05:01, 05:59-05:31, 06:29-06:01, 06:59-06:31, 07:29-07:01, 07:59-07:31, 08:29-08:01, 08:59-08:31, 09:29-09:01, 09:59-09:31, 10:29-10:01, 10:59-10:31, 11:29-11:01, 11:59-11:31]
Input: 1
Output:
[00:29-00:31, 00:59-01:01, 01:29-01:31, 02:29-02:31, 03:29-03:31, 04:29-04:31, 05:29-05:31, 06:29-06:31, 07:29-07:31, 08:29-08:31, 09:29-09:31, 10:29-10:31, 11:29-11:31]
Input: 2
Output:
[00:29-01:01, 00:59-01:31, 01:59-02:01]
code-golf
arithmetic
date
clock
Kevin Cruijssen
fuente
fuente
.4
/.6
/.9
/.1
está permitido (son 6 minutos como has dicho::24
/:36
/:54
/:06
).Respuestas:
APL (Dyalog Classic) , SBCS de 34 bytes
Pruébalo en línea!
Esta solución usa
⎕io←1
(indexación basada en 1).De derecha a izquierda:
⍳12
es1 2 3...12
⍪
lo convierte en una matriz alta y delgada de 12x11,
agrega una columna de 1s a la izquierda⍪⍨
concatena la misma matriz verticalmente, por lo que ahora es una matriz 24x2,
aplana la matriz en orden de fila mayor, se convierte en un vector de tamaño 48:1 1 1 2 1 3...1 12 1 1 1 2...1 12
+\
sumas parciales:1 2 3 5 6 9...
∘.-⍨
Las diferencias entre cada par de elementos, una matriz de 48x48⍉
transponer⎕=
una matriz booleana de 48x48 con 1s donde la entrada evaluada (⎕
ocurra la )⍸
los pares de coordenadas de donde están los 1s.5×
reducirlos a la mitad.4 .1∘+¨
agregue 0.4 a la primera y 0.1 a la segunda coordenada en cada par12|
módulo 12∪
únicofuente
.1
en la salida? Además, buena respuesta.<sup>SBCS</sup>
como la respuesta de Adám.⍸
no está en Dyalog Classic. Y sí, sé que está explícitamente permitido, solo quería saber cuántos minutos hay0.1
en la salida;)JavaScript (ES6), 104 bytes
Imprime intervalos de tiempo en
H.MM,H.MM
formato.Pruébalo en línea!
Utiliza esencialmente el mismo algoritmo que la versión no recursiva a continuación.
Versión no recursiva, 117 bytes.
Emite una cadena delimitada por espacios de intervalos de tiempo en
H.MM,H.MM
formato.Casos de prueba
Mostrar fragmento de código
Comentado
fuente
APL (Dyalog Unicode) ,
6259 bytes SBCSPrograma completo del cuerpo. Indicaciones para
n
. Imprime la lista de listas de dos elementos utilizando horas decimales.Pruébalo en línea!
⍳24
ɩ nices 1 ... 2448⍴
cíclicamente r eshape a la longitud 48, es decir, 1 ... 12,1 ... 12.5×
multiplicar la mitad por eso⊂
encierre (para usar esta matriz completa como argumento derecho para cada argumento izquierdo)(
...),/¨
para cada uno de los siguientes, devuelva todas las sublistas de esa longitud:⍳48
ɩ ndices 1 ... 48l←
almacenar enl
(para l engths)Ahora tenemos todas las listas posibles de ejecuciones de tiempos para cada posible duración de ejecución.
,/
concatenar (literalmente, reducción de concatenación) las listas de sublistas⊃
revelar (porque la reducción redujo el rango de 1 a 0)(
...)¨
aplique la siguiente función a cada uno:⊢/
El último elemento (encendido, reducción a la derecha) (el tiempo final)⊃,
anteponer el primer elemento (el tiempo de inicio)¯.1 .1+
agregue décimas negativas y positivas a esas(
...)/
filtre esos pares de inicio y fin con:⍳12
d nices 1 ... 121,¨
anteponer una1
a cada∊
ϵ nlist (aplanar)48⍴
cíclicamente r eshape a la longitud 48, es decir, 1,1,1,2 ... 1,11,1,12⊂
encierre (para usar esta matriz completa como argumento derecho para cada argumento izquierdo)l+/¨
para cada unol
(1 ... 48) devuelva las sumas de todas las sublistas de esa longitud∊
ϵ nlist (aplanar)⎕=
comparar la entrada numérica a eso∪
devuelve solo los elementos únicos (pares principio-fin)fuente
0.1
0.5
puede llegar a ser.1
.5
Python 3 ,
118116bytesPruébalo en línea!
Un marco de tiempo se representa como
(t1, t2)
,t1
yt2
son decimales que representan horas. El desplazamiento es de.1
6 minutos.fuente
Lote, 196 bytes.
Explicación:
t
es el tiempo en la mitad de horas, comenzando en0
para00:30
. El número de huelgas en el tiempo t es entonces1
,1
,1
,2
,1
,3
etc. Restando1
da la secuencia0
,0
,0
,1
,0
,2
etc., que es los enteros intercalados con ceros. Esto puede ser obtenido por la multiplicación término a término de la secuencia0
,0
,1
,1
,2
,2
etc, con la secuencia0
,1
,0
,1
,0
,1
etc. Ambas secuencias están fácilmente calcula utilizando modulo y división (integer).Luego queda recorrer los 23 tiempos de inicio posibles, luego tomar los 24 tiempos de golpe y restar el número de golpes de la entrada, imprimiendo los tiempos cuando el resultado es cero.
El código falla después del bucle, pero no se hace daño ya que la entrada no puede ser superior a 90.
fuente
NARS APL, 559 bytes
h (n) o l (n) devuelve todos los intervalos representativos en 0-24 horas que tienen n huelgas de reloj. h (n) tiene el formato de reloj como 0..11.0..59; en cambio l (n) tiene formato de reloj como prueba 0..23.0..59
fuente