Dada una lista no entera de enteros, genera una lista de listas que contienen los enteros en cada nivel de anidación, comenzando con el nivel menos anidado, con los valores en su orden original en la lista de entrada cuando se leen de izquierda a derecha. Si dos o más listas están en el mismo nivel de anidación en la lista de entrada, deben combinarse en una sola lista en la salida. La salida no debe contener listas vacías; los niveles de anidamiento que contienen solo listas deben omitirse por completo.
Puede suponer que todos los enteros están en el rango (inclusive) [-100, 100]
. No hay una longitud máxima o profundidad de anidamiento para las listas. No habrá listas vacías en la entrada; cada nivel de anidamiento contendrá al menos un número entero o lista.
La entrada y la salida deben estar en la lista / matriz / enumerable / iterable / etc de su idioma nativo. formato, o en cualquier formato razonable e inequívoco si su idioma carece de un tipo de secuencia.
Ejemplos
[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~{}&
Cases[#,_?AtomQ,{i}]~Table~{i,Depth@#}/.{}->Nothing&
, 2 bytes más cortos