Nesse desafio, você deve analisar uma lista de listas em um formato de lista mais simples.
Esse desafio é baseado no meu analisador sadflak. No meu analisador sadflak, todos os () foram removidos, substituídos pela soma dos () s no início da lista, para acelerar a execução do programa.
Para analisar uma Sad-List, você precisa fazer isso (coisa de implementação em python, usa uma tupla de tuplas):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
Esta é uma função recursiva. Para uma lista, inicie uma nova lista, começando com o número de () da entrada da lista e, em seguida, o restante desta lista são versões da lista triste de todas as listas que não eram () da entrada da lista, em ordem. retorne a lista.
Entrada:
você pode receber entradas em alguns formatos diferentes:
- você pode tomá-lo como uma lista
- você pode tomá-lo como uma tupla
- você pode tomá-lo como uma corda
se você a usar como uma corda, use algum conjunto de colchetes, como aparece no cérebro. você não pode usar os caracteres 1 e 2
apenas seja razoável
A entrada sempre estará dentro de uma lista, mas seu programa pode assumir uma camada de lista implícita fora da entrada, ou seja, () () () = (() () ())) ou pode optar por não. Exemplos serão com lista externa explícita
resultado:
pode ser lista ou tupla ou string, ou qualquer outra coisa. você pode usar qualquer formato de saída razoável, como é o meta consenso.
Exemplo:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
note que a entrada não é estrita. essas entradas podem ser:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
ou algum outro formato razoável
caso de teste explicado:
(()()((())())())
para "entristecer" isso, primeiro contamos o número de ()
()() ()
( ((())()) )
3. depois removemos e adicionamos um 3 no início
(3,((())()))
existe uma lista nesta lista. nós entristecemos isso
((())())
quantos ()?
()
((()) )
1. removemos e adicionamos um 1 no início
(1,(()))
isso tem uma lista nele
(())
contagem
()
( )
remover e adicionar contagem
(1)
então colocamos isso de volta em sua lista
(1,(1))
então colocamos isso de volta em sua lista
(3,(1,(1)))
feito
Isso é código-golfe , então quanto menor, melhor
fonte
for... in
, me fazendo lembrar por que você nunca o usa: Fiddle((((())())())(())()) = [1, [1, [1, [1]], [1]]
deveria ser((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.Respostas:
Pitão , 13 bytes
Conjunto de teste .
Como funciona
fonte
]
.CommonLisp, 49 bytes
tome entrada como lista de listas.
Experimente online!
fonte
Braquilog , 21 bytes
Experimente online!
fonte
Mathematica, 42 bytes
Evita recursão explícita usando
//@
(MapAll
) que mapeia uma função sobre cada nó em uma árvore. Isso também significa que as funções são executadas das folhas para cima. No entanto, ele também será aplicado ao{}
qual será transformado{0}
no processo. É por isso que contamos e remover{0}
vez{}
.fonte
Retina , 42 bytes
Experimente online!
fonte
Clojure, 59 bytes
Não é muito diferente da resposta do CommonLisp . É
count
eremove
parece aceitar uma construção um pouco melhor, aqui eu tive que usar conjuntos.fonte
Na verdade , 12 bytes
Experimente online!
Recebe entrada como uma lista de colchetes separados por vírgula com colchetes externos explícitos.
Explicação:
fonte
Python 2 ,
694645 bytesExperimente online!
fonte
f=
ao seu bytecount, já que você está usando a função f, e nomeá-lo de outra forma prejudicaria a sua solução #Gelatina , 10 bytes
Experimente online!
Recebe entrada como lista de listas de listas ...
Obviamente, ele usa o algoritmo usado pelas outras respostas. ;)
fonte
Haskell , 102 bytes
Experimente online!
Como Haskell é estritamente digitado, não há listas aninhadas arbitrariamente. Como remédio,
data L=I Int|T[L]deriving Show
declara listas aninhadas em forma de árvore com Ints ou listas vazias como folhas.Entrada é como no segundo exemplo formato, com um construtor adicional
T
antes de cada chave de abertura:T[T[T[]],T[],T[T[]]]
. O mesmo vale para a saída, com cada número sendo precedido por um construtorI
. Funçãof
executa o entristecimento .Saídas para os casos de teste:
fonte
Javascript (ES6), 77 bytes
Golfe:
Ungolfed:
Demo
Mostrar snippet de código
fonte