Учитывая неплоский список целых чисел, выведите список списков, содержащих целые числа на каждом уровне вложенности, начиная с уровня с наименьшим вложением, со значениями в их исходном порядке в списке ввода при чтении слева направо. Если два или более списков находятся на одном уровне вложенности во входном списке, они должны быть объединены в один список в выходных данных. Вывод не должен содержать пустых списков - уровни вложенности, содержащие только списки, должны быть полностью пропущены.
Вы можете предположить, что целые числа находятся в (включительно) диапазоне [-100, 100]
. Для списков нет максимальной длины или глубины вложенности. На входе не будет пустых списков - каждый уровень вложенности будет содержать хотя бы одно целое число или список.
Входные и выходные данные должны быть в собственном списке / массиве / перечислимом / итерируемом / вашего языка. формат или в любом разумном, однозначном формате, если в вашем языке отсутствует тип последовательности.
Примеры
[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 байта корочеPython 2, 78 байт
источник
Сетчатка , 79
Я знаю, что эксперты Retina будут играть в гольф больше, но вот начало:
Попробуйте онлайн.
источник
Mathematica
55 6462 байтаисточник
JavaScript,
11280 байтСпасибо Нейлу за помощь, чтобы сбрить 32 байта.
источник
!=null
какnull
это falsy в любом случае. Этоb=
также не нужно. Удалив его, вы можете затем переместить.filter(a=>x)
его в,&&b
который затем уменьшает внешнюю функцию до вызова внутренней функции, которую вы можете затем встроить. Я остался с этимf=(a,b=[],c=0)=>a.map(d=>d[0]?f(d,b,c+1):b[c]=[...b[c]||[],d])&&b.filter(d=>d)
.d[0]?
будет оценивать,false
если он равен0
, что находится в пределах диапазона[-100,100]
. И так будетd=>d
d===+d
тем, хотя, так как это экономит 2 байта на нулевой проверке.[...,[[...]]]
) должным образомd=>d
- это нормально, такd
как в этой точке всегда массив или ноль , но это справедливоd[0]
, хотя всегда естьd.map
что-то правдивое для массива, но ложное для числа.Желе, 24 байта
Попробуйте онлайн!
Если бы разрешались разделенные новой строкой списки, это могло бы быть уменьшено до 14 байтов .
Попробуйте онлайн!
источник
Python,
10899 байтЭто кажется мне немного длинным, но я не смог бы сделать одну строчку короче, и если я попытаюсь использовать
or
вместоif
, я получу пустые списки в результатах.Попробуйте онлайн
Редактировать: 9 байтов сохранено благодаря переполнению стека
источник
filter(None,o)
для удаления пустых списков, которые находятся на самом внешнем уровне вложенностиo
.Python 3, 109 байт
Как всегда, глупые возможности Python 2, такие как сравнение
int
s иlist
s, означают, что Python 3 выходит позади. Ну что ж...источник
Perl, 63 байта
Ввод ожидается в
@i
, выход производится в@o
. (Надеюсь это приемлемо).Пример:
Выход:
источник
Clojure, 119 байт
(116 с последовательностью и вводом в виде списков, тривиальная модификация)
Лучше задумано:
При вызове с двумя аргументами (текущий уровень и коллекция) он либо создает одноэлементную неупорядоченную карту, например
{level: value}
, либо вызываетf
рекурсивно, если виден не номер (предположительно, коллекция).Эти мини-карты затем объединяются в одну,
sorted-map
а столкновения клавиш обрабатываютсяconcat
функцией.vals
возвращает значения карты от первого уровня до последнего.Если число является единственным на своем уровне, то оно остается
vec
, остальные преобразуются в списки с помощьюconcat
.Если бы вход был
list
вместо,vec
тоnumber?
мог бы быть заменен наseq?
, странным образом, вектор -seq?
это не такsequential?
. Но мне лень внедрять эту версию, пересматривать примеры и т. Д.источник
Ракетка 259 байт
Ungolfed:
Тестирование:
Выход:
источник
MATL , 37 байт
Попробуйте онлайн!
Работает с текущей версией (13.0.0) языка / компилятора.
Это создает выходные данные в виде строк с разделенными пробелами значениями, где каждая строка соответствует одному и тому же уровню вложения, а разные уровни вложения разделяются символами новой строки.
источник