В этой задаче вы должны разобрать список списков в более простой формат списка.
Этот вызов основан на моем парсере sadflak. В моем анализаторе sadflak все () удалено, заменено суммой () в начале списка, чтобы программа работала быстрее.
Чтобы разобраться в Sad-List, вы должны сделать это (вещь реализации Python, использует кортеж кортежей):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
Это рекурсивная функция. Для списка начните новый список, начиная с номера () из входного списка, затем остальная часть этого списка - это версии всех списков, которые не были () из входного списка, по порядку. вернуть список.
Входные данные:
Вы можете принимать входные данные в нескольких разных форматах:
- Вы можете принять это как список
- Вы можете принять это как кортеж
- вы можете принять это как строку
если вы воспринимаете это как строку, вы должны использовать несколько скобок, как показано в мозговом флаке. Вы не можете использовать символы 1 и 2
просто будь разумным
Ввод всегда будет находиться внутри одного списка, но ваша программа может предполагать наличие неявного слоя списка за пределами ввода, т. Е. () () () = (() () ()), Или она может отказаться. Примеры будут с явным внешним списком
выход:
может быть списком, кортежем или строкой, или чем угодно. Вы можете использовать любой разумный формат вывода, как и мета-консенсус.
Пример:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
обратите внимание, что ввод не является строгим. эти входные данные могут быть:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
или какой-то другой разумный формат
объяснил контрольный пример:
(()()((())())())
чтобы «осквернить» это, сначала посчитаем количество ()
()() ()
( ((())()) )
3. затем мы удалим их и добавим 3 в начале
(3,((())()))
в этом списке есть один список мы опечаливаем это
((())())
Как много ()?
()
((()) )
1. убираем и добавляем 1 в начале
(1,(()))
это один список
(())
подсчитывать
()
( )
удалить и добавить счет
(1)
затем мы помещаем это обратно в свой список
(1,(1))
затем мы помещаем это обратно в свой список
(3,(1,(1)))
сделано
Это код-гольф , поэтому чем короче, тем лучше
источник
for... in
, заставляя меня вспомнить, почему вы никогда не используете его: Fiddle((((())())())(())()) = [1, [1, [1, [1]], [1]]
должно быть((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.Ответы:
Pyth , 13 байт
Тестовый пакет .
Как это устроено
источник
]
.CommonLisp, 49 байт
принять вход как список списков.
Попробуйте онлайн!
источник
Брахилог , 21 байт
Попробуйте онлайн!
источник
Mathematica, 42 байта
Предотвращает явную рекурсию с помощью
//@
(MapAll
), которая отображает функцию на каждый узел дерева. Это также означает, что функции выполняются от листьев вверх. Тем не менее, он также будет применен к тому, в{}
который превращаются в{0}
процессе. Вот почему мы считаем и удаляем{0}
вместо этого{}
.источник
Сетчатка , 42 байта
Попробуйте онлайн!
источник
Clojure, 59 байт
Не сильно отличается от ответа CommonLisp . Его
count
и,remove
кажется, принять немного более приятную конструкцию, здесь я должен был использовать наборы.источник
На самом деле , 12 байтов
Попробуйте онлайн!
Принимает ввод как разделенный запятыми список квадратных скобок с явными внешними скобками.
Объяснение:
источник
Python 2 ,
694645 байтПопробуйте онлайн!
источник
f=
к своему счету bytecount, так как вы используете функцию f, и если ее назвать иначе, это нарушит ваше решениеЖеле , 10 байт
Попробуйте онлайн!
Принимает ввод как список списков списков ...
Конечно, он использует алгоритм, который используют другие ответы. ;)
источник
Haskell , 102 байта
Попробуйте онлайн!
Поскольку Haskell строго типизирован, нет произвольно вложенных списков. В качестве средства защиты
data L=I Int|T[L]deriving Show
объявляются древовидные вложенные списки с целыми или пустыми списками в качестве листьев.Входные данные , как во втором примере формате, с дополнительным конструктором
T
перед каждой открывающей скобкой:T[T[T[]],T[],T[T[]]]
. То же самое относится и к выводу, где каждому числу предшествует конструкторI
. Функцияf
выполняет печаль .Выходы для тестовых случаев:
источник
Javascript (ES6), 77 байт
Golfed:
Ungolfed:
демонстрация
Показать фрагмент кода
источник