Sie erhalten einen Baum, der in der Tradition der Informatik die Wurzel oben und die Blätter unten hat. Die Blattknoten sind mit Zahlen beschriftet. Ihr Ziel ist es, das markierte Spezialblatt zu nehmen -1
und es als neue Wurzel nach oben zu bewegen.
[3, [[16], -1], [4]] --> [[[[4], 3], [16]]]
Sie können sich vorstellen, das Spezialblatt nach oben zu drehen und den Rest des Baumes hängen zu lassen. Halten Sie den Baum in der Ebene, während Sie ihn drehen, um die richtige Reihenfolge aller Zweige von links nach rechts zu erhalten.
Der neue Baum hat bis auf alle Blätter des ursprünglichen Baumes -1
.
Eingang:
Ein Baum, dessen Blätter eindeutige positive ganze Zahlen sind, mit Ausnahme eines Blattes von -1
. Die Wurzel des Baumes wird mindestens zwei Äste haben.
Die Eingabe wird als verschachtelte Liste [3, [[16], -1], [[4]]]
oder als Zeichenfolgendarstellung angegeben. Trennzeichen sind optional und stehen Ihnen frei, aber benachbarte Zahlen müssen getrennt werden.
Ausgabe:
Geben Sie den gespiegelten Baum im gleichen Format wie Ihre Eingabe aus oder drucken Sie ihn aus. Die Reihenfolge der Listeneinträge muss korrekt sein. Die direkte Änderung ist in Ordnung.
Wenn es sich bei Ihrer Eingabe / Ausgabe um einen Datentyp handelt, muss dieser standardmäßig im erforderlichen Format gedruckt werden. Built-Ins, die im Grunde genommen die Aufgabe für Sie erledigen, sind nicht erlaubt.
Testfälle:
>> [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
hat zwei Klammern mehr als die3
, ist aber nur 1 Schicht tiefer dargestellt.Antworten:
CJam,
242422 BytesProbieren Sie es online aus .
Danke Dennis für das Entfernen von 2 Bytes.
Erläuterung
quelle
{s$}$
mit umgekehrter Sortierreihenfolge verwenden. Außerdem würde eine anonyme Funktion ein Byte über ein volles Programm speichern.[
.Pyth,
26252423 BytesDemonstration. Testgeschirr.
Dies definiert eine Funktion,
y
die eine verschachtelte Pyth-Liste als Eingabe verwendet.Aufgrund der ternären
?
Funktion und der try - except - Funktion sind in dieser rekursiven Funktion drei Fälle zu untersuchen.x
. In der Funktion ist die Eingabeb
.Der erste Fall tritt auf, wenn
}\-`Jtb
es wahr ist. Dies testet, ob es-
in der Zeichenfolgendarstellung einentb
"Schwanz" von gibtb
, der allesb
andere als sein erstes Element ist.tb
ist auch gespeichert inJ
. Da alle Bezeichnungen mit Ausnahme von positiv sind-1
, gilt dies genau dann, wenn sich das-1
nicht im ersten Element der Liste befindet.In diesem Fall verschieben wir uns mit zyklisch nach rechts
b
um 1.>b1
und rufen die Funktion dann rekursiv auf. Dies stellt sicher, dass wir mit dem Element-1
als Kopf (erstes Element) der Liste zum nächsten Schritt übergehen.In den nächsten beiden Fällen ist das oben Gesagte falsch, ebenso
-1
wie im Kopf der Liste.Im zweiten Fall
ahbJ
wird kein Fehler ausgelöst. Ein Fehler wird nur dann ausgelöst, wennhb
es sich um eine Ganzzahl handelt. Wenn dies nicht der Fall ist,hb
handelt es sich um eine Liste, und wir müssen den Baum so drehen, dass das-1
Blatt näher an der Wurzel liegt.ahbJ
erreicht dies durch AnhängeJ
am Ende als ein einziges Elementhb
, das effektiv die Wurzel des Baumes aus bewegtb
zuhb
.Im dritten und letzten Fall wird ein Fehler ausgelöst. Somit
hb
ist ein einzelnes Element. Da muss der Test im ersten Fallhb
sein-1
. So können wir den Restb
nämlichJ
in einer Liste verpackt zurückgeben, nämlich]J
.quelle