Gracias a la comunidad PPCG, Santa ha logrado refabricar todos sus regalos y, después de la línea de montaje, ¡los regalos ya están listos para ser trasladados a los muelles de transporte!
Cada uno de los muelles de transporte de Santa solo tiene una gama de tamaños actuales porque los trineos de transporte están especializados para un tamaño específico (cualquier encendedor y sería un desperdicio, más pesado y el trineo no podría manejar la carga). Por lo tanto, necesita que lo ayudes a tomar sus regalos y ordenarlos en los muelles de transporte correctos.
Desafío
Dada una lista y los rangos del muelle de transporte, organice los regalos de manera estable en el orden correcto.
Tomemos esto por ejemplo: los regalos son [5, 3, 8, 6, 2, 7]
y los rangos de acoplamiento son [[1, 5] and [6, 10]]
.
Los regalos 5
, 3
y 2
entran en el primer muelle y los regalos 8
, 6
y 7
entran en el segundo muelle. Esto se puede mostrar como [[5, 3, 2], [8, 6, 7]]
. Esta lista estará más cerca de ser ordenada que la entrada, pero stably
significa que dentro de cada muelle, el orden de los regalos debe ser el mismo que el orden de la entrada (de lo contrario, podría ordenar toda la lista).
Su salida final para este caso sería [5, 3, 2, 8, 6, 7]
(como una lista plana).
Especificaciones de formato
Se le dará entrada como una lista plana de números enteros y una lista de rangos en cualquier formato razonable (por ejemplo, el rango para el caso anterior podría ser dado como [[1, 5], [6, 10]]
, [1, 5, 6, 10]
, o [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
). Su salida debe ser una lista plana de enteros en cualquier formato razonable.
La entrada puede contener valores duplicados; en este caso, debe devolver todas las instancias de ellos. Todos los tamaños actuales estarán exactamente en un rango de tamaño, y puede suponer que los rangos nunca se superpondrán. Puede haber huecos en los rangos siempre que se cubran todos los tamaños actuales.
Reglas
- Se aplican lagunas estándar
- Este es el código de golf , por lo que gana la respuesta más corta en bytes
- No se aceptarán respuestas.
- Puede suponer que no habrá rangos vacíos (
[7, 4]
no sería válido porque los rangos aumentan)
Casos de prueba
[1, 2, 3, 4, 5, 6, 7] ; [[1, 3], [4, 7]] => [1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7] ; [[4, 7], [1, 3]] => [4, 5, 6, 7, 1, 2, 3]
[7, 3, 5, 4, 6, 1, 2] ; [[1, 3], [4, 5], [6, 7]] => [3, 1, 2, 5, 4, 7, 6]
[4, 7, 6, 3, 5, 2, 1] ; [[1, 4], [5, 7]] => [4, 3, 2, 1, 7, 6, 5]
[1, 1, 3, 3, 6, 4, 7] ; [[1, 4], [6, 7]] => [1, 1, 3, 3, 4, 6, 7]
Nota: Me inspiré para esta serie de desafíos de Advent Of Code . No estoy afiliado a este sitio
Puede ver una lista de todos los desafíos de la serie mirando la sección 'Vinculados' del primer desafío aquí .
fuente
Respuestas:
Haskell , 26 bytes
Pruébalo en línea! Ejemplo de uso:
[1,2,3,4,5,6,7] # [[1,2,3],[4,5,6,7]]
rendimientos[1,2,3,4,5,6,7]
.fuente
Jalea , 4 bytes
Pruébalo en línea!
Toma la entrada como lista actual, rangos completos.
fuente
fþF
funciona en Jelly, por 3 bytes . El crédito va a Adnan .Mathematica, 39 bytes
-22 bytes de JungHwan Min
-4 bytes de Martin
Pruébalo en línea!
fuente
Range
simplemente tomando los rangos expandidos como entrada.Pyth , 5 bytes
Pruébalo aquí!
Pyth , 10 bytes
Pruébalo aquí!
Cómo trabajan ellos
Primero toma los muelles, con todos los enteros en los rangos, y luego los regalos en una nueva línea.
fuente
Python 2 ,
4946 bytesgracias a @HyperNeutrino por -3 bytes
Pruébalo en línea!
Sin golf
Pruébalo en línea!
fuente
05AB1E , 3 bytes
Pruébalo en línea! (gracias a Adnan por informarme que
δ
existe, -1 byte)Cómo funciona
fuente
€Ã˜
no parece funcionar.€Ã˜
falla porqueÃ
toma dos argumentos y€
espera una función con un argumento, por lo que regresa en su[[]]
lugar (creo que es un error), por lo que˜
se aplanará y regresará[]
.ε
Sin embargo, funciona de manera diferente. Para cada elemento del elemento superior, crea una nueva pila y luego devuelve la parte superior de cada nueva pila, por lo que cuando no hay suficientes elementos para una función, toma una entrada implícita.δØ
¿ es lo que estás buscando?Retina ,
3736 bytesPruébalo en línea! Toma información como una lista de regalos en la primera línea y una lista de rangos en la segunda línea; el enlace incluye un encabezado para dividir los casos de prueba en el formato deseado. Editar: Guardado 1 byte gracias a @MartinEnder. Explicación: La primera etapa coincide con los regalos y encuentra el muelle correspondiente. Los regalos se ordenan por la subcadena desde el inicio de la línea hasta el
[
, agrupando los regalos por muelle. La segunda etapa luego elimina los muelles.fuente
Aliste , 3 bytes
Pruébalo en línea!
Cómo funciona
fuente
APL + WIN, 29 bytes
Solicita la entrada de pantalla para los enteros y rangos. Los enteros como una lista plana y los rangos como un vector anidado, por ejemplo, el caso 3:
Explicación:
fuente
C ++, 127 bytes
Tome la entrada como dos matrices representadas por pares de punteros
[start, end)
.Pruébalo en línea!
fuente
[&](int a)->int{a=a>=
lugar de[&](int a){return a>=
no guarda ningún byte. /#import<algorithm>
puede ser#import<regex>
, al menos en TIO. Descubrí que después de buscar exhaustivamente ("búsqueda binaria manual") todos los encabezados enumerados en esta página y esta es la más corta. / Además, +1 de mi parte.J, 15 bytes
Toma la entrada como argumento izquierdo y los rangos como argumento derecho . Los rangos son listas en recuadro de los rangos completos.
Por ejemplo, para el primer rango:
Pruébalo en línea!
Explicación
fuente
J ,
2624 bytes2 bytes gracias a cole
Cómo funciona:
El argumento izquierdo contiene los rangos.
-&1 0"1@[
disminuye el límite inferior de cada rango en 1I."1]
comprueba en qué rango se ajusta cada presente1=
¿Está en el rango correcto?]<@#~
copia y encajona los regalos que están en el rango actual;
- raze (unboxing)Pruébalo en línea!
fuente
(0 4,:_3 _1) f _2 _1 0 1 2
)R ,
113485541 bytesUna versión anterior no ordenaba correctamente los objetos cuando los muelles no estaban en orden creciente.
Pruébalo en línea!
Toma
D
como una lista de vectores de rangos, es decir,list(4:7,1:3)
sería[[4, 7], [1, 3]]
.Probablemente la ingenua respuesta a la que debería haber llegado hace años; imprime en stdout.
fuente
Japt , 6 bytes
Intentalo
Explicación
Entrada implícita de array
U
(presentes) y 2d-arrayV
(rangos completos). Ordena (ñ
) los regalos pasándolos a través de una función (@
) que obtiene el índice del primer elemento (b
)V
que contiene (ø
) el presente actual (X
).fuente
Python 2,
9785 bytes-11 bytes de ovs
-1 byte del Sr. Xcoder
Pruébalo en línea!
Ordena la lista usando una lambda recursiva como clave. Explicación
próximamente ™ acontinuación.Explicación:
fuente
Javascript ES6,
534745 bytesPruébalo en línea!
fuente
PowerShell , 37 bytes
Pruébalo en línea!
Toma
$a
como una matriz literal de los presentes y$b
como una matriz de matrices, cada una de las cuales es el rango completo (por ejemplo, en@(1,2,3,4,5)
lugar de@(1,5)
). Luego hacemos un ciclo sobre cada elemento$b
con|%{...}
. En el interior, necesitamos establecer un asistente$i
para que sea el elemento actual, luego usar unaWhere-Object
cláusula en contra$a
para extraer solo aquellos elementos que son-in
la$b
matriz actual .Esos quedan en la tubería y la salida es implícita. Dado que el comportamiento predeterminado de
Write-Output
inserta una nueva línea entre los elementos de la matriz, eso es lo que obtenemos. Aquí hay una versión ligeramente modificada que se-join
edita mediante comas en lugar de una nueva línea, solo para mostrar las diferencias.fuente
Rojo , 73 bytes
Pruébalo en línea!
fuente
C # (.NET Core) , 50 + 18 bytes
+18 bytes desde
Se necesita una colección para regalos y una colección de matrices para muelles.
Pruébalo en línea!
fuente
Lote de Windows (CMD),
9079 bytesUtilice el formato de fin de línea LF. Cada carácter de fin de línea se puede contar como 1 byte.
Sin TIO (porque TIO usa Linux)
Tome la lista de los argumentos de la línea de comandos, y los rangos de
stdin
.Por ejemplo, si se ejecuta el programa (suponga que el archivo se llama
r1.cmd
)y con
stdin
entrada, el programa saldrá a
stderr
formato(corresponde a la secuencia de salida
3 1 2 5 4 7 6
)Explicación:
Código no protegido (con la interacción habilitada si
true
se pasa como argumento 1; solicite la listastdin
, usegoto
para evitar el desbordamiento de la pila; en realidad, acabo de intentar ejecutar un script que se llama a sí mismo más de 70000 veces sin ver ningún problema, así que supongo que debería ser bastante seguro):fuente
(%*)
. Una vez hecho esto, puede usarlo%0 %*
para reiniciar el script después de procesar cada rango. (En realidad acabé con una cuenta de bytes más grande porque he usado la versión interactiva con los detalles agradables&&
,exit/b
yecho
como punto de partida.)%1
pero las comillas"
hacen que el espacio no funcione como separadores, así que terminé usandoset /p
.$~1
...Limpio , 59 bytes
Pruébalo en línea!
Toma dos listas, devuelve una lista.
fuente
Wolfram Language (Mathematica) , 34 bytes
Pruébalo en línea!
es elFunction
operadorEsta es una función curry sin nombre que debe llamarse primero con la lista de rangos de acoplamiento (expandidos) y luego con la lista de regalos. Por ejemplo, si asigna la función a
f
:La lista de regalos simplemente ordenada por la posición de primer nivel del valor en la lista de rangos de acoplamiento. Necesitamos ajustar la
SortBy
función en una lista para que el ordenamiento sea estable.fuente
Julia 0.6 ,
3130 bytesPruébalo en línea!
Redefine al
%
operador y mapea la intersección establecida∩()
sobre los muellesd
manteniendo el orden y la multiplicidad del primer ingreso, la lista de regalosp
.vcat
con la entrada expandida a múltiples argumentos a través de...
aplana la matriz anidada resultante.Editar, -1Byte: Lista de comprensión en lugar de
map()
.fuente