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
la source
for... in
, me rappelant pourquoi tu ne l'utilises jamais: Fiddle((((())())())(())()) = [1, [1, [1, [1]], [1]]
devrait être((((())())())(())()) = [1, [1, [1, [1]]], [1]]
.Réponses:
Pyth , 13 octets
Suite de tests .
Comment ça fonctionne
la source
]
.CommonLisp, 49 octets
prendre l'entrée comme liste de listes.
Essayez-le en ligne!
la source
Brachylog , 21 octets
Essayez-le en ligne!
la source
Mathematica, 42 octets
Évite la récursivité explicite en utilisant
//@
(MapAll
) qui mappe une fonction sur chaque nœud dans une arborescence. Cela signifie également que les fonctions sont exécutées à partir des feuilles vers le haut. Cependant, elle sera également appliquée à{}
laquelle se transformera dans{0}
le processus. C'est pourquoi nous comptons et supprimons à la{0}
place{}
.la source
Rétine , 42 octets
Essayez-le en ligne!
la source
Clojure, 59 octets
Pas très différent de la réponse CommonLisp . Son
count
etremove
semblent accepter une construction un peu plus agréable, ici j'ai dû utiliser des ensembles.la source
En fait , 12 octets
Essayez-le en ligne!
Prend l'entrée comme une liste de crochets séparés par des virgules avec des crochets externes explicites.
Explication:
la source
Python 2 ,
694645 octetsEssayez-le en ligne!
la source
f=
à votre bytecount, puisque vous utilisez la fonction f, et le nommer autrement casserait votre solutionGelée , 10 octets
Essayez-le en ligne!
Prend la saisie sous forme de liste de listes de listes ...
Bien sûr, il utilise l'algorithme utilisé par les autres réponses. ;)
la source
Haskell , 102 octets
Essayez-le en ligne!
Étant donné que Haskell est strictement typé, il n'existe aucune liste imbriquée arbitrairement. En guise de remède,
data L=I Int|T[L]deriving Show
des listes imbriquées arborescentes sont déclarées avec Ints ou des listes vides comme feuilles.L' entrée est comme dans le deuxième exemple de format, avec un constructeur supplémentaire
T
avant chaque entretoise d'ouverture:T[T[T[]],T[],T[T[]]]
. Il en va de même pour la sortie, chaque numéro étant précédé d'un constructeurI
. La fonctionf
exécute le chagrin .Sorties pour les cas de test:
la source
Javascript (ES6), 77 octets
Golfé:
Non golfé:
Démo
Afficher l'extrait de code
la source