¡Todos aman las listas anidadas! Sin embargo, a veces es difícil hacer una lista anidada. Tienes que decidir si quieres anidar más profundo o si necesitas anidar menos profundo. Entonces, para su desafío, debe "Autonest" una lista. Para autonestizar una lista, compare cada par de elementos en la lista.
Si el segundo elemento es más pequeño, separe los dos elementos insertando corchetes de cierre y apertura entre ellos, de esta manera:
} { {2 , 1}
Por ejemplo, se
{2, 1}
convierte{2}, {1}
y se{3, 2, 1}
convierte en{3}, {2}, {1}
Si el segundo elemento es el mismo, no cambie nada. Por ejemplo,
{1, 1, 1}
permanece igual y{2, 1, 1, 1}
se volvería{2}, {1, 1, 1}
.Si el segundo elemento es más grande, anide cada elemento siguiente un nivel más profundo. Por ejemplo,
{1, 2}
se convertiría{1, {2}}
y{1, 2, 3}
se convertiría en{1, {2, {3}}}
El reto
Debe escribir un programa o función que tome una lista de números y devuelva la misma lista después de que se haya autoajustado. Tome esta entrada en el formato de lista nativa de su idioma (o la alternativa más cercana) o como una cadena. No tiene que usar llaves como lo hice en mis ejemplos. Puede usar cualquier tipo de paréntesis que sea más natural en su idioma, siempre que sea coherente. Puede asumir con seguridad que la lista solo contendrá enteros. También puede suponer que la lista tendrá al menos 2 números. Aquí hay una muestra de IO:
{1, 3, 2} --> {1, {3}, {2}}
{1, 2, 3, 4, 5, 6} --> {1, {2, {3, {4, {5, {6}}}}}}
{6, 5, 4, 3, 2, 1} --> {6}, {5}, {4}, {3}, {2}, {1}
{7, 3, 3, 2, 6, 4} --> {7}, {3, 3}, {2, {6}, {4}}
{7, 3, 1, -8, 4, 8, 2, -9, 2, 8} --> {7}, {3}, {1}, {-8, {4, {8}, {2}, {-9, {2, {8}}}}}
Se aplican las lagunas estándar, ¡y gana la respuesta más corta en bytes!
[-100, 100]
pero no planeo dar entradas gigantes.{2, 1}
convierte en{2}, {1}
" ¿Cómo es ese nivel más alto? ? Un nivel más alto sería{2}, 1
. Lo que tienes es el mismo nivel.Respuestas:
MATL ,
4843 bytesEsto usa corchetes en entrada y salida. La salida tiene comas sin espacios como separadores.
Tenga en cuenta que la salida no se interpretará como una lista anidada en MATL. Lo haría en otros idiomas, y satisface la especificación de salida en el desafío.
Pruébalo en línea!
Explicación
fuente
Haskell, 96 bytes
Ejemplo de uso:
('{':).f $ [7,3,3,2,6,4]
->"{7},{3,3},{2,{6},{4}}"
.Como Haskell no tiene listas anidadas, devuelvo el resultado como una cadena. El algoritmo de anidación es fácil: a) imprimir número, b) si el siguiente número es mayor (menor, igual), imprimir
,{
(},{
,,
), c) hacer una llamada recursiva con el resto de la lista, d) imprimir}
si el número es menos que el siguiente, e) incluir todo en{
y}
.fuente
Python 3, 98 bytes
Ejemplo:
fuente
Java 8
197 187 193192 bytesGracias a todos los comentaristas que trabajaron conmigo en esta monstruosidad. Se redujo a 187 bytes hasta que encontré un error costoso. Sin embargo, debido al poder de
Black Magic,el "recuento de" operador "->" el recuento de bytes es de 192 bytes.fuente
length,
C,
145138 bytes¡Gracias a Giacomo por 7 bytes!
La entrada se toma a través de argumentos de línea de comando y la salida se da a través de stdout.
ejecución de muestra:
fuente
t=atoi(*v);
lugar desscanf(*v,"%d",&t);
Sourcefor(;*++v;)
para guardar los primeros 4 y luegoif(t<p)P"}{");if(t>p)P"{",n++);
uset>p?P"}{"):P"{",n++);
10 más.CJam,
51494846 bytesExplota el hecho de que el número del último paréntesis es uno más que el número de pares adyacentes que aumenta en matriz.
Y no se
ew
operador antes que tuve que reimplementar.La entrada es una lista separada por espacios delimitada por corchetes.
Explicación
Descubriré cómo hacer esto con una matriz anidada real en lugar de confiar en prettyprinting.
Finalmente,
a la par conla respuesta vencida de MATL.fuente
Retina,
7170 bytesLas listas se espacio separado, con llaves:
{1 2 3}
. Los números negativos no son compatibles, por lo que si eso es un problema, simplemente eliminaré mi respuesta. Retina + números negativos = no vale la pena.Pruébalo en línea
fuente
JavaScript (ES6), 73 bytes
Explicación: El caso de elementos iguales consecutivos es fácil; el elemento se acaba de agregar a la matriz más interna (aquí representada por la
m
variable;n
es la matriz que contienem
como último elemento, mientras queo
es la salida). Para el caso de diferentes elementos, el elemento siempre va en una nueva matriz más interna, la única diferencia es si esa matriz es un hermano o un hijo de la matriz más interna anterior. Para golfiness adicional configuré los arreglos para que el elemento inicial cuente como un elemento igual consecutivo.fuente