Entrada
Una matriz que puede contener matrices o enteros positivos, consecutivos y ascendentes. Las matrices pueden tener cualquier cantidad de matrices dentro de ellas, y así sucesivamente. Ninguna matriz estará vacía.
Salida
Esta matriz simplificada
Cómo simplificar una matriz
Usaremos la matriz, [1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]]
como nuestro ejemplo.
Primero, verificamos qué tan profundos están anidados los valores. Aquí están las profundidades y los números a esas profundidades:
0 1
1 2 3 9
2 4 7
3 5 6
5 8
Construimos la matriz de salida tomando los números en la matriz original, agrupándolos por la profundidad en que están anidados, y luego anidando los grupos a profundidades de las profundidades originales de sus elementos. Organice los números en orden ascendente y profundidad ascendente.
Entonces, nuestra salida es [1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
Ejemplos
[1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]] -> [1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
[[[1]], [2, [3]], 4, [5, [6, [7, [8], [9, [[10]]]]]]] -> [4, [2, 5], [[1, 3, 6]], [[[7]]], [[[[8, 9]]]], [[[[[[10]]]]]]]
[1] -> [1]
[1, [2], [[3]], [[[4]]], [[[[5]]]]] -> [1, [2], [[3]], [[[4]]], [[[[5]]]]]
[1, [[[[2], 3]]] [[4]]] -> [1, [[4]], [[[3]]], [[[[2]]]]]
fuente
8
en la líneaSo, our output is.....
. Sin embargo, lo arregló en el fragmento de ejemplos.[1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[]]]], [[[[[8]]]]]]
?Respuestas:
Jalea , 8 bytes
La salida es de un nivel por línea, con líneas vacías para niveles sin elementos. Pruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6),
139109 bytesExplicación usando el ejemplo de entrada:
v
es un método auxiliar que devuelve los arreglos (con parámetro1
) o valores (sin parámetro). Comenzamos cona = [1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]]
, que no es vacío. Filtramos las matrices, dando[1]
. Luego, recursivamente, nos llamamos a nosotros mismos en las matrices concatenadas juntas, es decir[2, 3, [4], [[5, 6], 7, [[[8]]]], 9]
, el resultado es[2, 3, 9, [4, 7], [[5, 6]], [[[[8]]]]]
. Nuevamente filtramos las matrices, lo que nos da el segundo término de nuestra salida[2, 3, 9]
, sin embargo, debemos tener cuidado de no insertar una matriz vacía aquí. Les queda para envolver las matrices[4, 7], [[5, 6]], [[[[8]]]]
dentro de las matrices y agregarlas a la salida, lo que resulta en[1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
.fuente
filter
. Tal vez comience conF=(x,y)=>x.filter(y)
[].concat(...v(1))
con seguridadv(1)
para ahorrar 14 bytes. Probablemente hay algunas otras cosas también, pero me está costando mucho seguir los paréntesis anidados en mi cabeza.[].concat(...v(1))
es una bestia muy diferente av(1)
, de lo contrario no lo haría. Para un ejemplo simple, considerea = [2, [3], [[4]]]
entoncesv(1) = [[3], [[4]]]
pero[].concat(...v(1)) = [3, [4]]
.05AB1E ,
27262521 bytesPruébalo en línea! (ligeramente modificado ya que
.g
aún no está en TIO)Explicación
La estrategia principal es recorrer cada nivel posible de la matriz anidada e imprimir cualquier dígito en una fila, mientras se mantienen los no dígitos (listas) en una lista de un nivel menos anidado.
fuente
Perl, 52 bytes
Solo una subrutina recursiva. (Inusual para una respuesta de Perl, lo sé ...)
Llámalo así:
Cada línea de la salida corresponde a un nivel de profundidad de la matriz (de ahí la línea vacía en el ejemplo anterior).
Se puede convertir en un programa completo por solo unos pocos bytes más: agregue un
-n
indicador y uneval
(dentro@{ }
para transformar la entrada en una matriz y no una matrizref) para transformar la entrada en una matriz Perl:Mi enfoque anterior fue un poco más largo (65 bytes), pero aún interesante, así que lo dejaré aquí:
fuente
JavaScript (ES6) 121
144 152Editar Revisado mucho, 1 byte guardado gracias a Patrick Roberts y 21 más solo revisando el código
Función recursiva que trabaja en matrices de entrada y salida. No me gusta la petición de tener elementos en profundidad 1 como elementos individuales en matriz de salida (mientras que mayores niveles se agrupan como un elemento):
[l1,l1, [l2...], [[l3...]] ]
. Si bien esto sería más directo:[ [l1...], [[l2...]], [[[l3...]]] ]
Nueva línea agregada para facilitar la lectura.
Algunas notas: la línea 2 se evalúa una y otra vez en cada llamada recursiva, pero solo es útil la última iteración al final de la recursividad.
El manejo especial
d==0
en la línea 2 se ocupa de la anomalía de los elementos de nivel 1.La
n
función recursiva maneja la matriz de anidamiento en la salidaPrueba
fuente
v[0]
lugar dev.map
. Ahorra 1 byte.JavaScript (ES6) 168 bytes
Manifestación
fuente
PHP, 145 bytes
Descompostura
fuente
Pyth
1916 bytesPruébalo en línea. Banco de pruebas.
Tenga en cuenta el espacio inicial. Produce niveles en filas como la respuesta de Perl.
Explicación
Q
.f
artículos ilterT
deQ
:s
um esI
denticiónT
.p
rintT
más un espacio+
...d
.s
um los artículos. Esto elimina una capa de matrices de cada elemento. Si no queda ninguno, rinde0
.=
el resultado aQ
.W
Mientras el resultado no sea vacío, imprima la cadena vacíak
y una nueva línea.fuente
Haskell,
124123 bytesComo Haskell no admite listas mixtas (enteros y lista de enteros) de forma predeterminada, defino un tipo de lista personalizada
L
. Ejemplo de uso:Nota: lleva un tiempo ejecutarlo, porque recorre todos los Ints positivos (32 o 64 bits) para buscar un nivel de nido tan profundo. Además: el tipo de lista personalizada no se puede imprimir de forma predeterminada, por lo que si desea ver el resultado como en el ejemplo anterior, debe agregarlo
deriving Show
a ladata
declaración (->data L=I Int|R[L] deriving Show
). Como no es necesario para devolver una lista L de una función, no cuento los bytes.Cómo funciona:
Editar @BlackCap guardó un byte al cambiar de
>>=
ado
notación. ¡Gracias!fuente
h l=R$do d<-[1..];[i|(e,i)<-0#l,d==e]!d
JavaScript (ES6),
127137134 bytesToma una matriz como entrada y devuelve una cadena.
Casos de prueba
Mostrar fragmento de código
fuente