Dans ce défi, vous devez analyser une liste de listes, dans un format de liste plus simple.
Ce défi est basé sur mon analyseur sadflak. Dans mon analyseur sadflak, tous les () ont été supprimés, remplacés par la somme des () au début de la liste, pour accélérer le programme.
Pour analyser dans une Sad-List, vous devez faire ceci (chose d'implémentation python, utilise un tuple de tuples):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
Il s'agit d'une fonction récursive. Pour une liste, commencez une nouvelle liste, en commençant par le nombre de () de l'entrée de liste, puis le reste de cette liste est des versions de liste triste de chaque liste qui n'était pas un () de l'entrée de liste, dans l'ordre. retourner la liste.
Contribution:
vous pouvez prendre des entrées dans plusieurs formats différents:
- vous pouvez le prendre comme une liste
- vous pouvez le prendre comme un tuple
- vous pouvez le prendre comme une chaîne
si vous le prenez comme une chaîne, vous devez utiliser un ensemble de crochets, comme indiqué dans brain-flak. vous ne pouvez pas utiliser les caractères 1 et 2
soyez juste raisonnable
L'entrée sera toujours dans une liste, mais votre programme peut supposer une couche de liste implicite en dehors de l'entrée, c'est-à-dire () () () = (() () ()), ou il peut choisir de ne pas le faire. Les exemples seront avec une liste extérieure explicite
production:
peut être une liste ou un tuple ou une chaîne, ou autre. vous pouvez utiliser n'importe quel format de sortie raisonnable, tout comme le méta consensus.
Exemple:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
notez que la saisie n'est pas stricte. ces entrées pourraient être:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
ou un autre format raisonnable
cas de test expliqué:
(()()((())())())
pour "sadifier" cela, on compte d'abord le nombre de ()
()() ()
( ((())()) )
3. ensuite nous les supprimons et ajoutons un 3 au début
(3,((())()))
il y a une liste dans cette liste. nous sadifions cela
((())())
combien ()?
()
((()) )
1. nous supprimons et ajoutons un 1 au début
(1,(()))
cela contient une liste
(())
compter
()
( )
supprimer et ajouter le nombre
(1)
puis nous avons remis cela dans sa liste
(1,(1))
puis nous avons remis cela dans sa liste
(3,(1,(1)))
terminé
C'est du golf de code , donc plus c'est court, mieux c'est
((((())())())(())()) = [1, [1, [1, [1]], [1]]
devrait être ((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.