Вам дано дерево, которое в традициях информатики имеет корень вверху и листья внизу. Узлы листа обозначены цифрами. Ваша цель - взять специальный лист с пометкой -1
и переместить его вверх, чтобы он стал новым корнем.
[3, [[16], -1], [4]] --> [[[[4], 3], [16]]]
Вы можете представить, как повернуть специальный лист наверх и позволить ему повиснуть на дереве. Держите дерево в плоскости, поворачивая его, чтобы получить правильный порядок слева направо всех ветвей.
У нового дерева есть все листья исходного дерева, кроме -1
.
Входные данные:
Дерево, листы которого являются различными положительными целыми числами, для одного листа за исключением -1
. Корень дерева будет иметь по крайней мере , две ветви отрываясь.
Вход задается в виде вложенного списка , как [3, [[16], -1], [[4]]]
и его строковое представление. Разделители являются необязательными и зависят от вас, но соседние числа должны быть разделены.
Выход:
Выход или распечатать перевернутое дерево в том же формате, что и ваш вклад. Порядок записей в списке должен быть правильным. Модификация на месте в порядке.
Если ваш ввод / вывод относится к типу данных, он должен по умолчанию печататься в требуемом формате. Встроенные модули, которые в основном делают задачу для вас не допускаются.
Тестовые случаи:
>> [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
Имеет еще две скобки вокруг него , чем3
, но только 1 схематически слой глубже.Ответы:
CJam,
242422 байтаПопробуйте онлайн .
Спасибо Денису за удаление 2 байтов.
объяснение
источник
{s$}$
с обратным порядком сортировки. Кроме того , анонимная функция будет сохранить один байт по полной программе.[
.Pyth,
26252423 байтаДемонстрация. Тест Жгут.
Это определяет функцию,
y
которая принимает вложенный список Pyth в качестве входных данных.Есть три случая , чтобы исследовать в этой рекурсивной функции, в связи с тройным,
?
, и попробовать - за исключением функции.x
. В функции, входb
.Первый случай возникает, когда
}\-`Jtb
правдив. Это тесты , имеются ли-
в строковом представленииtb
, в «хвосте»b
, который все ,b
кроме первого элемента.tb
также хранится вJ
. Поскольку все метки положительны , за исключением-1
, это будет справедливо , если и только если-1
не в первом элементе списка.В этом случае мы циклически сдвигаемся вправо
b
на 1 с.>b1
, а затем вызываем функцию рекурсивно. Это гарантирует , что мы будем переходить к следующему шагу с элементом , содержащий в-1
качестве главного (первый элемент) списка.В следующих двух случаях вышеупомянутое ложно, так же
-1
как и в начале списка.Во втором случае
ahbJ
не выдает ошибку. Ошибка будет выдана, если и только еслиhb
является целым числом. Если это не так, тоhb
список, и нам нужно повернуть дерево так , что-1
лист ближе к корню.ahbJ
Это достигается путем добавленияJ
в конце одного элементаhb
, который эффективно перемещает корень дерева изb
вhb
.В третьем и последнем случае выдается ошибка. Таким образом,
hb
это один элемент. Из-за теста в первом случае,hb
должно быть-1
. Таким образом, мы можем вернуть оставшуюся частьb
, а именноJ
, завернутый в списке, а именно]J
.источник