Dans Elixir, les listes (liées) sont au format [head | tail]
où tête peut être n'importe quoi et queue est une liste du reste de la liste, et []
- la liste vide - est la seule exception à cela.
Les listes peuvent également être écrites comme [1, 2, 3]
ce qui équivaut à[1 | [2 | [3 | []]]]
Votre tâche consiste à convertir une liste comme décrit. L'entrée sera toujours une liste valide (dans Elixir) contenant uniquement des nombres correspondant à l'expression régulière \[(\d+(, ?\d+)*)?\]
. Vous pouvez prendre l'entrée avec (un espace après chaque virgule) ou sans espaces. La sortie peut être avec (un espace avant et après chacun |
) ou sans espaces.
Pour les entrées avec des zéros non significatifs, vous pouvez sortir sans les zéros ou avec.
L'entrée doit être considérée comme une chaîne (si vous écrivez une fonction), tout comme la sortie.
Exemples
[] -> []
[5] -> [5 | []]
[1, 7] -> [1 | [7 | []]]
[4, 4, 4] -> [4 | [4 | [4 | []]]]
[10, 333] -> [10 | [333 | []]]
liés , pas un doublon car cela implique en partie l'ajout de mode ]
à la fin. De plus, la réponse Haskell ici est très différente de celle là-bas.
Réponses:
Haskell, 50 octets
Essayez-le en ligne!
Le
+0
permet au vérificateur de type Haskell de savoir que nous avons affaire à des listes de nombres, ilread
analysera donc la chaîne d'entrée pour nous.la source
Python 2 , 50 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 50 octets
Essayez-le en ligne!
Version récursive, 51 octets
Essayez-le en ligne!
la source
Rétine ,
39333220 octets13 octets enregistrés grâce à H.PWiz, ovs, ASCII-only et Neil.
Essayez-le en ligne!
Explication
Si nous n'avons pas de liste vide, ajoutez une virgule de fin.
Bien qu'il y ait des virgules, enveloppez les choses avec
|[ thing ]
.la source
\b]
par,]
. (Sinon, j'avais découvert indépendamment la même solution.)\b
c'était une chose pour une raison quelconque> _> 20 octets @MnemonicPerl 5
-pl
,3128 octetsEssayez-le en ligne!
Comment?
la source
Elixir ,
11185 octetsEssayez-le en ligne!
Je n'ai jamais utilisé Elixir auparavant. Définit une fonction qui prend une chaîne et une référence pour elle-même et renvoie une chaîne.
la source
Ceylan , 113 octets
Essayez-le en ligne!
Voici écrit:
Essayez-le en ligne!
Comme indiqué par les ovs dans un commentaire (maintenant supprimé): Si l'on sélectionne les options "sans espaces" pour l'entrée et la sortie indiquées dans la question, on peut sauvegarder 3 octets de plus (les plus évidents avec des espaces).
Si nous n'avons pas besoin d'analyser l'entrée, mais que nous pouvons simplement obtenir une séquence en entrée, elle devient beaucoup plus courte (69 octets).
Essayez-le en ligne!
la source
Python 3 , 65 octets
Essayez-le en ligne!
Si l'entrée peut être une liste à la place, alors:
Python 3 , 53 octets
Essayez-le en ligne!
la source
SNOBOL4 (CSNOBOL4) , 114 octets
Essayez-le en ligne!
la source
Stax , 19 octets
Exécuter et déboguer
Mon premier post Stax, donc probablement pas optimal.
Déballé et commenté:
Exécutez et déboguez celui-ci
la source
Husk , 22 octets
Essayez-le en ligne!
la source
Befunge-98 (PyFunge) ,
2221 octetsEssayez-le en ligne!
S'il n'y avait pas de restrictions étranges sur la sortie, nous pourrions le faire en 18:
Fait amusant, il s'agit techniquement d'un programme qui ne fait rien en Python.
la source
Rubis
-p
, 39 octetsProgramme complet:
Essayez-le en ligne!
Ruby ,
4845 octetsFonction récursive:
Essayez-le en ligne!
la source
R ,
847169 octetsEssayez-le en ligne!
la source
\K
lookbehindProton , 57 octets
Essayez-le en ligne!
la source
Gelée , 19 octets
Essayez-le en ligne!
Une alternative non récursive à la solution d' Erik .
la source
Gelée , 18 octets
Essayez-le en ligne!
la source
Gelée , 18 octets
Un programme complet imprimant le résultat (en tant que lien monadique, il accepte une liste de caractères mais renvoie une liste de caractères et d'entiers).
Essayez-le en ligne!
Comment?
la source
Java 10, 107 octets
Essayez-le en ligne.
Explication:
la source
ML standard , 71 octets
Essayez-le en ligne! Utilise le format sans espaces. Par exemple, les
it "[10,333,4]"
rendements"[10|[333|[4]|[]]]]"
.non golfé
Essayez-le en ligne!
la source
R ,
140136 octetsDown 4 octets selon les bons conseils de Giuseppe.
Essayez-le en ligne!
la source
substr
est plus court et le premierpaste0
peut êtrepaste
d'obtenir ceci à 136 octets.eval
,parse
et ausub
lieu deunlist
,strsplit
etsubstr
, j'ai aussi réussi seulement 136 octets (je pensais que ce serait peut - être plus courte , mais ce ne fut pas)R , 108 octets
Essayez-le en ligne!
Il a fallu près d'un an pour trouver une meilleure solution R que la précédente ... aurait dû savoir que
Reduce
serait la réponse! Sorties sans espaces, les entrées peuvent être avec ou sans espaces.la source
Python 2 , 63 octets
Essayez-le en ligne!
la source
sed +
-E
, 46 octetsUne approche assez simple. La deuxième ligne prend
[\d+, ...]
et change en[\d | [...]]
. La troisième ligne revient à la première ligne si la substitution a réussi. La substitution se répète jusqu'à ce qu'elle échoue, puis le programme se termine. Exécutez avecsed -E -f filename.sed
, en passant l'entrée via stdin.la source
Rouge , 110 octets
Essayez-le en ligne!
Explication de la version non golfée:
Le rouge est si facilement lisible, que je doute que j'avais besoin d'ajouter les commentaires ci-dessus :)
la source
Perl 6 , 38 octets
Essayez-le en ligne!
la source