Você recebe uma árvore que, na tradição da ciência da computação, tem a raiz na parte superior e as folhas na parte inferior. Os nós das folhas são rotulados com números. Seu objetivo é pegar a folha especial marcada -1
e movê-la para ser a nova raiz.
[3, [[16], -1], [4]] --> [[[[4], 3], [16]]]
Você pode imaginar girando a folha especial para o topo e deixando o resto da árvore pendurar nela. Mantenha a árvore no plano enquanto a gira para obter a ordem correta da esquerda para a direita de todos os galhos.
A nova árvore possui todas as folhas da árvore original, exceto -1
.
Entrada:
Uma árvore cujas folhas são inteiros positivos distintos, exceto uma folha de -1
. A raiz da árvore terá pelo menos dois galhos saindo.
A entrada é fornecida como uma lista aninhada [3, [[16], -1], [[4]]]
ou como sua representação de string. Os delimitadores são opcionais e dependem de você, mas os números adjacentes precisam ser separados.
Resultado:
Saída ou imprima a árvore invertida no mesmo formato que sua entrada. A ordem das entradas da lista deve estar correta. A modificação no local está correta.
Se sua entrada / saída é um tipo de dados, deve ser aquele que é impresso no formato exigido por padrão. Built-ins que basicamente fazem a tarefa para você não são permitidos.
Casos de teste:
>> [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
possui mais dois suportes ao redor do que o3
, mas é diagramado apenas 1 camada mais a fundo.Respostas:
CJam,
242422 bytesExperimente online .
Obrigado Dennis por remover 2 bytes.
Explicação
fonte
{s$}$
, com a ordem de classificação invertida. Além disso, uma função anônima salvaria um byte em um programa completo.[
.Pitão,
26252423 bytesDemonstração. Equipamento de teste.
Isso define uma função,
y
que recebe uma lista Pyth aninhada como entrada.Há três casos a serem explorados nessa função recursiva, devido à função ternária
?
, e try - except.x
,. Na função, a entrada éb
.O primeiro caso ocorre quando
}\-`Jtb
é verdade. Isso testa se existe uma representação-
na cadeia de caracterestb
, a "cauda" deb
, que é tudob
exceto seu primeiro elemento.tb
também é armazenado emJ
. Como todos os rótulos são positivos, exceto-1
, isso será verdadeiro se e somente se o-1
não estiver no primeiro elemento da lista.Nesse caso, alternamos ciclicamente com a tecla
b
1 e.>b1
, em seguida, chamamos a função recursivamente. Isso garante que avançaremos para a próxima etapa com o elemento que contém-1
como cabeçalho (primeiro elemento) da lista.Nos próximos dois casos, o exposto acima é falso, assim
-1
como o cabeçalho da lista.No segundo caso,
ahbJ
não gera um erro. Um erro será gerado se e somente sehb
for um número inteiro. Se não for esse o caso,hb
é uma lista e precisamos rotacionar a árvore para que a-1
folha fique mais próxima da raiz.ahbJ
realiza isso anexandoJ
como um único elemento no final dehb
, que efetivamente move a raiz da árvore deb
parahb
.No terceiro e último caso, um erro é gerado. Assim,
hb
é um único elemento. Por causa do teste no primeiro caso,hb
deve ser-1
. Assim, podemos retornar o restante deb
, a saberJ
, agrupados em uma lista, a saber]J
.fonte