In questa sfida, è necessario analizzare un elenco di elenchi, in un formato elenco più semplice.
Questa sfida si basa sul mio parser sadflak. Nel mio parser sadflak, è stato rimosso tutto (), sostituito con la somma dei () s all'inizio dell'elenco, per rendere il programma più veloce.
Per analizzare una lista triste, devi fare questo (cosa di implementazione di Python, usa una tupla di tuple):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
Questa è una funzione ricorsiva. Per un elenco, avvia un nuovo elenco, iniziando con il numero di () dall'input dell'elenco, quindi il resto di questo elenco contiene le versioni dell'elenco triste di ogni elenco che non era un () dall'input dell'elenco, in ordine. ritorna alla lista.
Ingresso:
puoi inserire input in diversi formati:
- puoi prenderlo come un elenco
- potresti prenderlo come una tupla
- puoi prenderlo come una stringa
se lo prendi come una stringa, dovresti usare una serie di parentesi, come appare nel cervello-flak. non puoi usare i caratteri 1 e 2
sii ragionevole
L'input sarà sempre all'interno di un elenco, ma il programma potrebbe assumere un livello elenco implicito al di fuori dell'input, ovvero () () () = (() () ()), oppure potrebbe scegliere di non farlo. Gli esempi saranno con un elenco esterno esplicito
produzione:
può essere elenco o tupla o stringa o altro. è possibile utilizzare qualsiasi formato di output ragionevole, come è il meta consenso.
Esempio:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
si noti che l'input non è rigoroso. questi input potrebbero essere:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
o qualche altro formato ragionevole
caso di prova spiegato:
(()()((())())())
per "sadificare" questo, prima contiamo il numero di ()
()() ()
( ((())()) )
3. quindi li rimuoviamo e aggiungiamo un 3 all'inizio
(3,((())()))
c'è un elenco in questo elenco. lo rattristiamo
((())())
quanti ()?
()
((()) )
1. rimuoviamo e aggiungiamo un 1 all'inizio
(1,(()))
questo ha un elenco al suo interno
(())
contare
()
( )
rimuovere e aggiungere il conteggio
(1)
quindi lo rimettiamo nel suo elenco
(1,(1))
quindi lo rimettiamo nel suo elenco
(3,(1,(1)))
fatto
Questo è code-golf , quindi più breve è meglio
((((())())())(())()) = [1, [1, [1, [1]], [1]]
dovrebbe essere ((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.