Te dan un árbol que, en la tradición de la informática, tiene la raíz en la parte superior y las hojas en la parte inferior. Los nodos de hoja están etiquetados con números. Su objetivo es tomar la hoja especial marcada -1
y moverla hacia arriba para que sea la nueva raíz.
[3, [[16], -1], [4]] --> [[[[4], 3], [16]]]
Puedes imaginar rotar la hoja especial hacia la parte superior y dejar que el resto del árbol cuelgue de ella. Mantener el árbol en el plano mientras lo gira para obtener el orden correcto de izquierda a derecha de todas las ramas.
El nuevo árbol tiene todas las hojas del árbol original, excepto -1
.
Entrada:
Un árbol cuyas hojas son enteros positivos distintos, a excepción de una hoja de -1
. La raíz del árbol tendrá al menos dos ramas saliendo.
La entrada se proporciona como una lista anidada [3, [[16], -1], [[4]]]
o como su representación de cadena. Los delimitadores son opcionales y dependen de usted, pero los números adyacentes deben separarse.
Salida:
Imprima o imprima el árbol invertido en el mismo formato que su entrada. El orden de las entradas de la lista debe ser correcto. La modificación en el lugar está bien.
Si su entrada / salida es un tipo de datos, debe ser uno que imprima en el formato requerido de forma predeterminada. Las funciones integradas que básicamente hacen la tarea por usted no están permitidas.
Casos de prueba:
>> [3, [[16], -1], [4]]
[[[[4], 3], [16]]]
>> [2, -1]
[[2]]
>> [44, -1, 12]
[[12, 44]]
>> [[[[-1]]], [[[[4]]]]]
[[[[[[[[[4]]]]]]]]]
>> [[1, 2, 3], [4, -1, 6], [7, 8, 9]]
[[6, [[7, 8, 9], [1, 2, 3]], 4]]
>> [9, [8, [7, [6, -1, 4], 3], 2], 1]
[[4, [3, [2, [1, 9], 8], 7], 6]]
4
tiene dos corchetes más a su alrededor que el3
, pero está diagramado solo 1 capa más profundo.Respuestas:
CJam,
242422 bytesPruébalo en línea .
Gracias Dennis por eliminar 2 bytes.
Explicación
fuente
{s$}$
, con el orden de inversión invertido. Además, una función anónima ahorraría un byte sobre un programa completo.[
.Pyth,
26252423 bytesDemostración. Arnés de prueba.
Esto define una función,
y
que toma una lista anidada de Pyth como entrada.Hay tres casos para explorar en esta función recursiva, debido a la ternaria,
?
y la oportunidad - a excepción de la función,.x
. En la función, la entrada esb
.El primer caso ocurre cuando
}\-`Jtb
es verdad. Esto prueba si hay una-
representación en la cadena detb
, la "cola" deb
, que es todob
excepto su primer elemento.tb
también se almacena enJ
. Dado que todas las etiquetas son positivas, excepto-1
, esto será cierto si y solo si-1
no está en el primer elemento de la lista.En este caso, desplazamos cíclicamente a la derecha
b
por 1 con.>b1
, y luego llamamos a la función de forma recursiva. Esto asegura que avanzaremos al siguiente paso con el elemento que contiene-1
como encabezado (primer elemento) de la lista.En los siguientes dos casos, lo anterior es falso, por lo que
-1
está en el encabezado de la lista.En el segundo caso,
ahbJ
no arroja un error. Se generará un error si y solo sihb
es un número entero. Si este no es el caso, entonceshb
es una lista, y necesitamos rotar el árbol para que la-1
hoja esté más cerca de la raíz.ahbJ
logra esto agregandoJ
como un elemento único al final dehb
, que efectivamente mueve la raíz del árbolb
ahb
.En el tercer y último caso, se produce un error. Por lo tanto,
hb
es un elemento único. Debido a la prueba en el primer caso,hb
debe ser-1
. Por lo tanto, podemos devolver el resto deb
, es decirJ
, envuelto en una lista, es decir]J
.fuente