Dada uma lista não plana de números inteiros, produza uma lista de listas contendo os números inteiros em cada nível de aninhamento, começando com o nível menos aninhado, com os valores em sua ordem original na lista de entrada quando lidos da esquerda para a direita. Se duas ou mais listas estiverem no mesmo nível de aninhamento na lista de entrada, elas deverão ser combinadas em uma única lista na saída. A saída não deve conter nenhuma lista vazia - os níveis de aninhamento que contêm apenas listas devem ser ignorados completamente.
Você pode assumir que os números inteiros estão todos no intervalo (inclusive) [-100, 100]
. Não há comprimento máximo ou profundidade de aninhamento para as listas. Não haverá listas vazias na entrada - cada nível de aninhamento conterá pelo menos um número inteiro ou lista.
A entrada e a saída devem estar na lista nativa / array / enumerable / iterable / etc do seu idioma. ou em qualquer formato razoável e inequívoco, se o seu idioma não possuir um tipo de sequência.
Exemplos
[1, 2, [3, [4, 5], 6, [7, [8], 9]]] => [[1, 2], [3, 6], [4, 5, 7, 9], [8]]
[3, 1, [12, [14, [18], 2], 1], [[4]], 5] => [[3, 1, 5], [12, 1], [14, 2, 4], [18]]
[2, 1, [[5]], 6] => [[2, 1, 6], [5]]
[[54, [43, 76, [[[-19]]]], 20], 12] => [[12], [54, 20], [43, 76], [-19]]
[[[50]], [[50]]] => [[50, 50]]
Cases[#,_?AtomQ,{i}]~Table~{i,Depth@#}~DeleteCases~{}&