Écrivez un programme qui prend un arbre binaire en entrée et génère le nœud le plus profond et sa profondeur. S'il y a une égalité, imprimez tous les nœuds impliqués ainsi que leurs profondeurs. Chaque nœud est représenté comme:
T(x,x)
T(x)
T
où T
est l'identifiant d'un ou plusieurs caractères alphanumériques et chacun x
est un autre nœud.
Voici une définition simple d'un arbre binaire:
- À la tête d'un arbre binaire se trouve un nœud.
- Un nœud dans un arbre binaire a au plus deux enfants.
Par exemple, l'entrée A(B(C,D(E)))
(ci-dessous) sortira 3:E
.
Alors que l'arbre suivant est un lien à trois entre 5, 11 et 4, et leur profondeur est également de 3 (à partir de 0):
L'entrée 2(7(2,6(5,11)),5(9(4)))
(ci-dessous) sortirait 3:5,11,4
.
Il s'agit du code golf, donc le code le plus court mesuré en octets gagne.
code-golf
binary-tree
Jwosty
la source
la source
Réponses:
CJam,
4947la source
Haskell, 186 octets
Programme complet, prend l'arborescence
stdin
, produit le format de sortie spécifié surstdout
:Guide du code golf (ajouté de meilleurs noms, signatures de type, commentaires et certaines sous-expressions extraites et nommées - mais sinon le même code; une version non golfée ne confondrait pas la rupture en nœuds avec la numérotation, ni la recherche la plus profonde avec formatage de sortie.) :
la source
GolfScript (75 caractères)
Pas particulièrement compétitif, mais suffisamment tordu pour qu'il présente un certain intérêt:
Le code comporte trois phases. Premièrement, nous prétraitons la chaîne d'entrée:
Nous nous sommes par exemple transformés
A(B(C,D(E)))
en'A'^('B'^('C'^'D'^('E'^)''^)''^)
. Si nous affectons un bloc approprié à^
nous pouvons effectuer un traitement utile en utilisant~
pour évaluer la chaîne.Deuxièmement, nous trouvons la profondeur maximale:
Enfin, nous sélectionnons les nœuds les plus profonds et construisons la sortie:
la source
Perl 5 - 85
N'hésitez pas à modifier ce message pour corriger le nombre de caractères. J'utilise la
say
fonctionnalité, mais je ne connais pas les indicateurs pour la faire fonctionner correctement sans déclareruse 5.010;
.Démo sur ideone
La sortie est séparée par des espaces au lieu de séparée par des virgules.
Le code utilise simplement l'expression régulière récursive pour supprimer la racine des arbres dans la forêt, jusqu'à ce qu'il ne soit pas possible de le faire. Ensuite, la chaîne avant le dernier contiendra tous les nœuds feuilles au niveau le plus profond.
Exemples de cycles
la source
VB.net
Hypothèse: valeurs de nœud ne peut pas contenir
,
,(
,)
la source
Javascript (E6) 120
Version itérative
Non golfé et testable
Testez dans la console Firefox:
Production
la source