Tout le monde aime les listes imbriquées! Cependant, il est parfois difficile de créer une liste imbriquée. Vous devez décider si vous souhaitez l'imbriquer plus profondément ou si vous devez l'imbriquer moins profondément. Donc, pour votre défi, vous devez "Autonest" une liste. Pour tester automatiquement une liste, comparez chaque paire d'éléments de la liste.
Si le deuxième élément est plus petit, séparez les deux éléments en insérant des crochets de fermeture et d'ouverture entre eux, comme ceci:
} { {2 , 1}
Par exemple,
{2, 1}
devient{2}, {1}
et{3, 2, 1}
devient{3}, {2}, {1}
Si le deuxième élément est le même, ne changez rien. Par exemple,
{1, 1, 1}
reste le même et{2, 1, 1, 1}
deviendrait{2}, {1, 1, 1}
.Si le deuxième élément est plus grand, imbriquez chaque élément suivant d'un niveau plus profond. Par exemple,
{1, 2}
deviendrait{1, {2}}
et{1, 2, 3}
deviendrait{1, {2, {3}}}
Le défi
Vous devez écrire un programme ou une fonction qui accepte une liste de nombres et renvoie la même liste après avoir été auto-testé. Prenez cette entrée dans le format de liste native de votre langue (ou l'alternative la plus proche) ou sous forme de chaîne. Vous n'avez pas besoin d'utiliser des accolades comme je l'ai fait dans mes exemples. Vous pouvez utiliser le type de parenthèses le plus naturel dans votre langue, à condition que cela soit cohérent. Vous pouvez supposer en toute sécurité que la liste ne contiendra que des entiers. Vous pouvez également supposer que la liste contiendra au moins 2 chiffres. Voici quelques exemples d'E / S:
{1, 3, 2} --> {1, {3}, {2}}
{1, 2, 3, 4, 5, 6} --> {1, {2, {3, {4, {5, {6}}}}}}
{6, 5, 4, 3, 2, 1} --> {6}, {5}, {4}, {3}, {2}, {1}
{7, 3, 3, 2, 6, 4} --> {7}, {3, 3}, {2, {6}, {4}}
{7, 3, 1, -8, 4, 8, 2, -9, 2, 8} --> {7}, {3}, {1}, {-8, {4, {8}, {2}, {-9, {2, {8}}}}}
Les failles standard s'appliquent et la réponse la plus courte en octets l'emporte!
[-100, 100]
mais je ne prévois pas de donner des entrées gigantesques.{2, 1}
devient{2}, {1}
" Comment est-ce qu'un niveau plus haut ? Un niveau supérieur serait{2}, 1
. Ce que vous avez est au même niveau.Réponses:
MATL ,
4843 octetsCela utilise des crochets en entrée et en sortie. La sortie comporte des virgules sans espaces comme séparateurs.
Notez que la sortie ne sera pas interprétée comme une liste imbriquée dans MATL. Il le ferait dans d'autres langues, et il satisfait la spécification de sortie du défi.
Essayez-le en ligne!
Explication
la source
Haskell, 96 octets
Exemple d'utilisation:
('{':).f $ [7,3,3,2,6,4]
->"{7},{3,3},{2,{6},{4}}"
.Comme Haskell n'a pas de listes imbriquées, je renvoie le résultat sous forme de chaîne. L'algorithme d'imbrication est simple: a) imprimer le numéro, b) si le nombre suivant est supérieur (inférieur, égal), imprimer
,{
(},{
,,
), c) effectuer un appel récursif avec le reste de la liste, d) imprimer}
si le numéro est moins que le suivant, e) enfermez tout dans{
et}
.la source
Python 3, 98 octets
Exemple:
la source
Java 8
197 187 193192 octetsMerci à tous les commentateurs qui ont travaillé avec moi sur cette monstruosité. Il a été joué à 187 octets jusqu'à ce que je trouve un bug coûteux. Cependant, en raison de la puissance de
Black Magic,le "descend jusqu'à" opérateur "->" le nombre d'octets est à 192 octets.la source
length,
C,
145138 octetsMerci à Giacomo pour 7 octets!
L'entrée est prise via des arguments de ligne de commande et la sortie est donnée via stdout.
échantillon:
la source
t=atoi(*v);
place desscanf(*v,"%d",&t);
Sourcefor(;*++v;)
pour enregistrer les 4 premiers puis insted d'if(t<p)P"}{");if(t>p)P"{",n++);
utilisationt>p?P"}{"):P"{",n++);
pour 10 autres.CJam,
51494846 octetsExploite le fait que le nombre de dernière parenthèse est un de plus que le nombre de paires adjacentes qui augmente dans le tableau.
Et je ne connaissais pas d'
ew
opérateur avant d'avoir dû réimplémenter.L'entrée est une liste séparée par des espaces délimitée par des crochets.
Explication
Je vais découvrir comment faire cela avec un tableau imbriqué réel au lieu de compter sur prettyprinting.
Enfin,
à égalité avecla réponse de MATL battu.la source
Rétine,
7170 octetsLes listes sont séparées par des espaces, avec des accolades:
{1 2 3}
. Les nombres négatifs ne sont pas pris en charge, donc si c'est un problème, je vais juste supprimer ma réponse. Rétine + nombres négatifs = n'en vaut pas la peine.Essayez-le en ligne
la source
JavaScript (ES6), 73 octets
Explication: Le cas d'éléments égaux consécutifs est facile; l'élément est simplement ajouté au tableau le plus interne (ici représenté par la
m
variable;n
est le tableau qui contientm
comme dernier élément, tandis queo
la sortie est). Dans le cas de différents éléments, l'élément va toujours dans un nouveau tableau le plus à l'intérieur, la seule différence étant que ce tableau soit un frère ou un enfant du tableau le plus à l'intérieur précédent. Pour plus de golf, j'ai configuré les tableaux de sorte que l'élément initial compte comme un élément égal consécutif.la source