Introducción
Este es un registro de longitud 5:
#####
Quiero apilar un montón de estos registros uno encima del otro. Cómo hago esto es que deslizo un nuevo registro en el superior desde la derecha, y dejo de deslizar cuando sus extremos izquierdo o derecho se alinean (no pregunte por qué). Si el nuevo registro es más largo, se desliza hasta el extremo izquierdo del registro superior:
######## <-
#####
Si es más corto, solo se desliza hasta que sus extremos derechos se alineen:
###### <-
########
#####
A medida que deslizo más registros en la pila, sus posiciones están determinadas por el registro más alto actual:
##
######
###
####
##
######
########
#####
Esto parece físicamente imposible, pero imaginemos que funciona.
La tarea
Su entrada será una lista no vacía de enteros positivos, que representa la longitud de mis registros. El número que está más a la izquierda es el primer registro que puse en la pila, por lo que termina en la parte inferior. En el ejemplo anterior, la entrada sería [5,8,6,2,4,3,6,2]
. Su salida será, para cada columna de la pila resultante, el número de registros que cruzan esa columna. En el ejemplo anterior, la salida correcta sería [2,2,3,3,3,2,4,6,3,3,1,2,2]
.
Reglas y puntaje
La entrada y salida pueden estar en cualquier formato razonable. La salida solo puede contener enteros positivos, es decir, no debe tener 0
s iniciales o finales . Se aplican las reglas normales de código de golf: puede escribir un programa completo o una función, gana el conteo de bytes más bajo y las lagunas estándar están prohibidas.
Casos de prueba
[1] -> [1]
[4] -> [1,1,1,1]
[3,2] -> [1,2,2]
[2,3] -> [2,2,1]
[2,2,2] -> [3,3]
[2,3,2] -> [2,3,2]
[3,2,3] -> [1,3,3,1]
[1,3,2,2,1,3,1] -> [2,3,5,1,2]
[4,3,4,2,4,3,4,2] -> [1,3,3,5,5,3,4,2]
[5,8,6,2,4,3,6,2] -> [2,2,3,3,3,2,4,6,3,3,1,2,2]
[5,10,15,1,1,1,1,1,2] -> [3,3,3,3,3,2,2,2,2,2,1,1,1,1,7,1]
[13,12,2,10,14,12] -> [1,2,2,2,2,2,2,2,2,2,2,5,5,3,3,3,3,3,3,3,3,2,2,2,2]
[12,14,3,6,13,1,1] -> [2,2,2,2,2,2,2,2,2,2,2,5,4,4,2,2,2,1,1,1,1,1,1,3]
[7,5,12,5,1,10,14,5] -> [1,1,3,3,3,3,3,1,1,2,2,2,2,5,2,2,2,2,2,2,2,2,3,2,2,2,2]
[14,5,1,3,12,6,2,2,1,7,9,15] -> [1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,2,1,1,1,2,2,2,2,4,8,3,3,3,3,3,3,2,2,1,1,1,1,1,1]
Respuestas:
Jalea ,
1816 bytes-2 bytes solicitados por la ayuda de millas
¿Quizás haya una forma más rápida de usar las matemáticas en lugar de la construcción como esta?
Pruébalo en línea! o ver el conjunto de pruebas .
¿Cómo?
fuente
IN»0+\0;;"x@€0,1S
Jalea ,
1913 bytesPruébalo en línea!
Guardado 2 bytes gracias a @Jonathan Allan.
Explicación
fuente
Python 3 ,
114109 bytesEditar: Guardado 5 bytes gracias a @ Mr.Xcoder
Pruébalo en línea!
fuente
Casco , 16 bytes
Pruébalo en línea!
Explicación
fuente
Perl 5 , 64 + 1 (
-a
) = 65 bytesPruébalo en línea!
fuente
Mathematica,
76605857 bytesPruébalo en Wolfram Sandbox
fuente
Kotlin 1.1,
113103bytesEmbellecido
Prueba
fuente