Dada una lista de trabajos, que deben hacerse en orden, cada uno de los cuales tiene que hacer un espacio, cuánto tiempo llevará realizarlos si, después de hacer un trabajo, no se puede hacer el mismo trabajo para los siguientes dos espacios (enfriamiento de espacios )? Sin embargo, se puede asignar un trabajo diferente en estas ranuras de enfriamiento.
Por ejemplo,
[9,10,9,8] => output: 5
Porque los trabajos se asignarán como [9 10 _ 9 8]
.
1. Primero, 9 necesita dos puntos de enfriamiento _ _. Entonces comenzamos con 9 _ _
.
2. El siguiente trabajo 10 es diferente del trabajo anterior 9, por lo que podemos asignar uno de _ _. Entonces lo haremos 9 10 _
.
3. En tercer lugar, 9 no se puede asignar ahora, ya que el primer trabajo 9 es el mismo trabajo y necesita tiempo de enfriamiento. 9 10 _ 9
.
4. Por último, 8 no es igual a los otros dos trabajos anteriores, por lo que puede asignarse inmediatamente después de 9 y, dado que este es el último trabajo, no necesita tiempo de enfriamiento. La lista final es 9 10 _ 9 8
y la salida esperada es 5, que es el número de puntos (o número de espacios)
Casos de prueba:
[1,2,3,4,5,6,7,8,9,10] => output : 10 ([1 2 3 4 5 6 7 8 9 10])
[1,1,1] => output: 7 ([1 _ _ 1 _ _ 1])
[3,4,4,3] => output: 6 ([3 4 _ _ 4 3])
[3,4,5,3] => output: 4 ([3 4 5 3])
[3,4,3,4] => output : 5 ([3 4 _ 3 4])
[3,3,4,4] => output : 8 ([3 _ _ 3 4 _ _ 4])
[3,3,4,3] => output : 7 ([3 _ _ 3 4 _ 3])
[3,2,1,3,-4] => output : 5 ([3 2 1 3 -4])
[] => output : 0 ([])
[-1,-1] => output : 4 ([-1 _ _ -1])
El valor de entrada puede ser cualquier número entero (negativo, 0, positivo). La longitud de la lista de trabajos es 0 <= longitud <= 1,000,000.
La salida será un número entero, el número total de ranuras, que se indica en el caso de prueba como salida. La lista dentro del paréntesis es cómo se generaría la salida.
Criterio ganador
código-golf
fuente
[]
?Respuestas:
Jalea , 14 bytes
Pruébalo en línea!
fuente
05AB1E , 22 bytes
Pruébalo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Brachylog , 10 bytes
Siempre es agradable ver un problema en el que Brachylog se desempeña mejor
Explicación
Pruébalo en línea!
fuente
R , 123 bytes
Pruébelo en línea: ¡programa único!
Pruébelo en línea: ¡múltiples ejemplos!
Un programa completo que lee una lista de enteros separados por comas como entrada, y genera las ranuras necesarias. Estoy seguro de que esto podría desarrollarse un poco más, y la implementación de esta solución basada en expresiones regulares en algunos otros idiomas sería más eficiente en bytes.
Tenga en cuenta que en el segundo TIO lo he incluido en una función para permitir que se muestren múltiples ejemplos. Esta función también muestra la lista final, pero esto no se muestra en el programa principal si se ejecuta de forma aislada.
fuente
Consulta TSQL, 158 bytes
Datos de entrada como una tabla.
La consulta es recursiva, así que
es necesario, porque la lista de números puede exceder 100 aunque solo puede manejar 32,767 recursiones. ¿Es realmente necesaria esta limitación en esta tarea?
Pruébalo en línea
fuente
R ,
8170 bytesPruébalo en línea!
Después de varios intentos fallidos, el código se volvió bastante feo y no tan corto, pero al menos funciona ahora ...
Primero, evaluamos las duraciones de ejecuciones consecutivas del mismo trabajo. Por ejemplo, para
3, 3, 4, 3
esto da:Cada una de estas ejecuciones produce
(len - 1) * 3 + 1
pasos (+ 1
se maneja por separado).A continuación, procesamos las ocurrencias del mismo trabajo con 2 lugares separados, como:
x, y, x
mediante el usodiff(s, lag=2)
. El vector resultante también se divide en ejecuciones consecutivas (r
) porrle
función. Ahora, debido a varias alternancias intercaladas, necesitamos agregarceiling(r$len/2)
pasos para todas las ejecuciones de ceros. P.ej:x y x
(longitud 1) yx y x y
(longitud 2) ambos necesitan 1 paso adicional:x y _ x (y)
x y x y x
(longitud 3) yx y x y x y
(longitud 4) ambos necesitan 2 pasos adicionales:x y _ x y _ x (y)
Finalmente, necesitamos compensar las ocurrencias de estas alternancias en el medio de una larga ejecución del mismo trabajo: por lo
x, x, x, x...
tanto, en1-l%/%6
lugar de simplemente1
.fuente
diff(s,lag=2)
para detectar la proximidad! Ahora eres un byte más corto que mi solución ...Python 2 , 67 bytes
Pruébalo en línea!
Implementa el desafío literalmente. Utiliza copias de la lista como "espacios en blanco", ya que no pueden ser iguales a ningún número.
fuente
Carbón ,
2723 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Recorrer los trabajos.
Agregue puntos de enfriamiento mientras el trabajo es uno de los dos últimos en el resultado.
Agregue el trabajo actual al resultado.
Imprime el número de puntos.
fuente
R ,
7468 bytesPruébalo en línea!
Construye la matriz de trabajo (en reversa), luego toma la longitud. Solo un poco
más cortoque la respuesta de Kirill L. , así que a veces, el enfoque ingenuo es bastante bueno. EDITAR: más corto de nuevo! También tomé prestada la plantilla de prueba de Kirill.-6 bytes reemplazando
max(0,which(y==x[2:1]))
conmatch(y,x,0)
.fuente
c
función?c
significacombine
, aunqueconcatenate
podría ser mejor; que combina sus argumentos en una sola lista.Perl 6 , 98 bytes
Pruébalo en línea!
Blergh, tiene que haber una mejor manera de hacer esto. No estoy 100% seguro de que esto sea completamente correcto, aunque supera todos los casos límite que se me ocurren.
Básicamente, esto comienza agrupando todos los tripletes de la lista de entrada, con relleno a cada lado. Por ejemplo, se
[1,2,1,2]
convierte(Any,1,2), (1,2,1), (2,1,2), (1,2,Nil)
. Obtenemos losrepeated
elementos en cada triplete, convirtiéndose(), (1), (2), ()
.Luego
squish
es elementos consecutivos que no son la misma lista, pero son del mismo tamaño (para no aplastar algo así[1,1,1]
), y el primer elemento no es igual al elemento anterior (porque no podemos fusionar las horas[1,1,2,2]
), y Finalmente, el elemento anterior tampoco ha sido aplastado ([1,2,1,2,1,2]
). Entonces,(1), (2)
en el ejemplo anterior, se aplastarían juntos.Finalmente, obtenemos
sum
todas las longitudes de esta lista, que representan nuestras horas insertadas, y agregamos la longitud de la lista original.Por ejemplo:
fuente
JavaScript (ES6), 57 bytes
Pruébalo en línea!
Comentado
fuente
C (gcc) , 69 bytes
Pruébalo en línea!
Recurrencia directa.
fuente
Perl 6 , 48 bytes
Pruébalo en línea!
45 bytes si la lista tiene al menos dos elementos:
Pruébalo en línea!
fuente
Smalltalk, 125 bytes
Explicación
fuente
Perl 5
-pl
,4240 bytesPruébalo en línea!
fuente
-p
y reelaborando la sustitución: ¡ Pruébelo en línea!Lote, 184 bytes
La entrada es a través de argumentos de línea de comandos y la salida es a través del código de salida. Explicación:
Rastrea los últimos dos trabajos.
Inicializar el recuento.
Procesar cada trabajo.
Salida de la cuenta final.
Para cada trabajo:
Si procesamos el trabajo recientemente, agregue un número apropiado de puntos de enfriamiento. Además, borre el último trabajo para que el siguiente solo active el enfriamiento si es el mismo que este.
Actualice los dos últimos trabajos y asigne un lugar a este trabajo.
fuente
Rápido, 114 bytes
Pruébalo en línea!
fuente
3,4,3,4
, debería apostar 5, no 6.s = a
puede sers=a
y puede hacer ens+=
lugar de múltipless=s+...
y eliminar espacios después de?
:for i in 1...a.count-1{s+=a[i-1]==a[i] ?3:i>1&&a[i-2]==a[i] ?2:1}
para guardar 9 bytes.Python 3 ,
7975 bytes-3 bytes gracias a mypetlion
-1 byte gracias a Sara J
Pruébalo en línea!
fuente
a[0]in b[:2]and f(a,['']+b)or f(a[1:],[a[0]]+b)
puede convertirsef(*[a[1:],a,[a[0]]+b,['']+b][a[0]in b[:2]::2])
en guardar 2 bytes.[a[0]]+b
puede convertirsea[:1]+b
en guardar 1 byte.['']+b
con[b]+b
guardar un byte -b
es una lista, por lo que nunca será igual a ninguno de los valores ena
Java (JDK) , 110 bytes
Pruébalo en línea!
Código comentado sin golf:
fuente
3,4,3,4,3,4
, devuelve 7 en lugar de 8Jalea , 20 bytes
Pruébalo en línea!
Aunque esto es bastante similar a la respuesta más corta de @ EriktheOutgolfer , la escribí sin ver la suya. En cualquier caso el suyo es mejor!
Explicación
Enlace diádico auxiliar, toma la lista actual como elemento izquierdo y el siguiente elemento como derecho
Enlace monádico principal, toma la lista de enteros como entrada
fuente
Python 2 , 75 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) , 52 bytes
Pruébalo en línea!
fuente
APL (Dyalog Classic) , 22 bytes
Pruébalo en línea!
fuente
JavaScript (V8), 101 bytes
Pruébalo en línea!
El código desempaquetado tiene el siguiente aspecto:
Mi primer intento de código de golf probablemente puede optimizarse mucho reduciendo la matriz y pasándola recursivamente.
fuente
Zsh ,
6660 bytes-6 bytes desde implícito
"$@"
Pruébalo en línea! Recomiendo agregar
set -x
al inicio para que pueda seguir.a
siempre contiene los dos últimos trabajos, por lo que si la búsqueda encuentra un trabajo coincidente ena[2]
, incrementamos en tres (ya que los espacios de trabajo lo estarán[... 3 _ _ 3 ...]
).Si
a
está configurado, la búsqueda fallará y la expansión aritmética devolverá un error, pero eso solo ocurre en el primer trabajo y no es fatal.Podemos guardar un byte más si usamos en su
$[x+=i+1]
lugar, y no hay comandos en el sistema de usuarios compuestos completamente por dígitos.fuente
K (ngn / k) , 27 bytes
Pruébalo en línea!
fuente