En este desafío, debe analizar una lista de listas en un formato de lista más simple.
Este desafío se basa en mi analizador sadflak. En mi analizador sadflak, tiene todo el () eliminado, reemplazado por la suma de los () s al comienzo de la lista, para que el programa se ejecute más rápido.
Para analizar en una Lista triste, debe hacer esto (lo de la implementación de Python, usa una 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 es una función recursiva. Para una lista, comience una nueva lista, comenzando con el número de () de la entrada de la lista, luego el resto de esta lista son versiones de lista triste de cada lista que no era un () de la entrada de la lista, en orden. devolver la lista
Entrada:
Puede tomar la entrada en algunos formatos diferentes:
- puedes tomarlo como una lista
- puedes tomarlo como una tupla
- puedes tomarlo como una cuerda
Si lo toma como una cuerda, debe usar un conjunto de corchetes, como aparece en el cerebro-flak. no puedes usar los caracteres 1 y 2
solo se razonable
La entrada siempre estará dentro de una lista, pero su programa puede asumir una capa de lista implícita fuera de la entrada, es decir () () () = (() () ()), o puede elegir no hacerlo. Los ejemplos serán con lista externa explícita
salida:
puede ser list o tuple o string, o lo que sea. puede usar cualquier formato de salida razonable, como es el meta consenso.
Ejemplo:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
Tenga en cuenta que la entrada no es estricta. Estas entradas podrían ser:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
o algún otro formato razonable
caso de prueba explicado:
(()()((())())())
para "entristecer" esto, primero contamos el número de ()
()() ()
( ((())()) )
3. luego los eliminamos y agregamos un 3 al comienzo
(3,((())()))
Hay una lista en esta lista. lamentamos esto
((())())
cuántos ()?
()
((()) )
1. eliminamos y agregamos un 1 al comienzo
(1,(()))
esto tiene una lista
(())
contar
()
( )
eliminar y agregar recuento
(1)
luego volvemos a poner esto en su lista
(1,(1))
luego volvemos a poner esto en su lista
(3,(1,(1)))
hecho
Este es el código de golf , así que más corto es mejor
fuente
for... in
, haciéndome recordar por qué nunca lo usas: Fiddle((((())())())(())()) = [1, [1, [1, [1]], [1]]
debería ser((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.Respuestas:
Pyth , 13 bytes
Banco de pruebas .
Cómo funciona
fuente
]
.CommonLisp, 49 bytes
tomar entrada como lista de listas.
Pruébalo en línea!
fuente
Brachylog , 21 bytes
Pruébalo en línea!
fuente
Mathematica, 42 bytes
Evita la recursividad explícita al usar
//@
(MapAll
), que asigna una función sobre cada nodo en un árbol. Esto también significa que las funciones se ejecutan desde las hojas hacia arriba. Sin embargo, también se aplicará a los{}
que se convierten{0}
en el proceso. Es por eso que contamos y eliminamos en su{0}
lugar{}
.fuente
Retina , 42 bytes
Pruébalo en línea!
fuente
Clojure, 59 bytes
No es muy diferente de la respuesta CommonLisp . Es
count
yremove
parece aceptar una construcción un poco más agradable, aquí tuve que usar conjuntos.fuente
En realidad , 12 bytes
Pruébalo en línea!
Toma datos como una lista de corchetes separados por comas con paréntesis externos explícitos.
Explicación:
fuente
Python 2 ,
694645 bytesPruébalo en línea!
fuente
f=
a su bytecount, ya que está utilizando la función f, y nombrarla de otra manera interrumpiría su soluciónJalea , 10 bytes
Pruébalo en línea!
Toma entrada como lista de listas de listas ...
Por supuesto, usa el algoritmo que usan las otras respuestas. ;)
fuente
Haskell , 102 bytes
Pruébalo en línea!
Debido a que Haskell está estrictamente escrito, no hay listas anidadas arbitrariamente. Como remedio, se
data L=I Int|T[L]deriving Show
declaran listas anidadas en forma de árbol con Ints o listas vacías como hojas.De entrada es igual que en el segundo formato de ejemplo, con un constructor adicional
T
antes de cada llave de apertura:T[T[T[]],T[],T[T[]]]
. Lo mismo ocurre con la salida, con cada número precedido por un constructorI
. La funciónf
realiza el entristecimiento .Salidas para los casos de prueba:
fuente
Javascript (ES6), 77 bytes
Golfizado:
Sin golf:
Manifestación
Mostrar fragmento de código
fuente