Ne détestez-vous pas quand vous voulez copier-coller une liste de nombres (vecteur, tableau ...), d'un programme à un autre, mais le format sur lequel vous avez les chiffres ne correspond pas au format sur lequel vous en avez besoin ?
Par exemple, dans MATLAB, vous pouvez avoir une liste séparée par des espaces comme celle-ci:
[1 2 3 4 5] (you can also have it comma separated, but that's not the point)
En Python, vous devrez insérer des virgules pour faire de cette liste une entrée valide, vous devrez donc la convertir en
[1, 2, 3, 4, 5]
pour le faire fonctionner. En C ++, vous voudrez peut-être quelque chose comme:
{16,2,77,29}
etc.
Pour simplifier la vie de tout le monde, créons un convertisseur de liste, qui prend une liste sur n'importe quel format * et génère une liste sur un autre format spécifié.
Les parenthèses valides sont:
[list]
{list}
(list)
<list>
list (no surrounding brackets)
Les délimiteurs valides sont:
a,b,c
a;b;c
a b c
a, b, c <-- Several spaces. Must only be supported as input.
a; b; c <-- Several spaces. Must only be supported as input.
a b c <-- Several spaces. Must only be supported as input.
Remarque, l'entrée peut avoir n'importe quel nombre d'espaces entre les nombres, mais la sortie peut choisir d'avoir zéro espace (si ,
ou ;
est utilisé comme délimiteur), ou un seul espace (s'il est délimité par un espace).
En plus de la liste d'entrée, il y aura une chaîne (ou deux caractères) qui définit le format de sortie. La chaîne de format sera d' abord le type de support d'ouverture (uniquement), [
, (
, <
, {
ou (le dernier est un espace unique utilisé lorsqu'il n'y a pas de parenthèses autour). Le type de support sera suivi par le type de séparation,
,
, ;
ou (le dernier est un espace unique). Les deux caractères de format d'entrée doivent être pris comme un seul argument (chaîne ou deux caractères consécutifs) dans l'ordre décrit ci-dessus.
Quelques exemples de chaînes de format:
[, <-- Output format: [a,b,c]
{; <-- Output format: {a;b;c}
<-- Two spaces, output list has format: a b c
Règles:
- La sortie ne peut pas avoir d'espaces de début
- La sortie peut avoir des espaces de fin et une nouvelle ligne
- La sortie doit seulement être la liste des numéros, pas
ans =
ou similaires
- La sortie doit seulement être la liste des numéros, pas
- L'entrée sera une liste de nombres entiers ou décimaux (positifs et négatifs (et zéro)) et une chaîne de deux caractères
- Si l'entrée se compose uniquement d' entiers, la liste de sortie doit avoir uniquement des entiers. Si la liste d'entrée se compose d'entiers et de nombres décimaux, tous les numéros de sortie peuvent être des nombres décimaux. (Il est facultatif de conserver les entiers sous forme d'entiers)
- Le nombre maximum de chiffres après la virgule décimale qui doit être pris en charge est de 3.
- L'entrée sera deux arguments. C'est-à-dire que les nombres sont dans un seul argument, et la chaîne de formatage est un seul argument.
- Le code peut être un programme ou une fonction
- L'entrée peut être un argument de fonction ou STDIN
Quelques exemples:
1 2 3 4
[,
[1,2,3,4]
<1; 2; 3>
; <-- Space + semicolon
1;2;3
not valid: 1.000;2.000;3.000 (Input is only integers => Output must be integers)
{-1.3, 3.4, 4, 5.55555555}
[,
[-1.300,3.400,4.000,5.556] (5.555 is also valid. Rounding is optional)
also valid: [-1.3,3.4,4,5.55555555]
Le code le plus court en octets gagne. Comme toujours, le gagnant sera sélectionné une semaine après le jour où le défi a été publié. Les réponses publiées plus tard peuvent toujours gagner si elles sont plus courtes que le gagnant actuel.
Classement
L'extrait de pile au bas de cet article génère le catalogue à partir des réponses a) en tant que liste des solutions les plus courtes par langue et b) en tant que classement général.
Pour vous assurer que votre réponse apparaît, veuillez commencer votre réponse avec un titre, en utilisant le modèle Markdown suivant:
## Language Name, N bytes
où N
est la taille de votre soumission. Si vous améliorez votre score, vous pouvez conserver les anciens scores dans le titre, en les rayant. Par exemple:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si vous souhaitez inclure plusieurs nombres dans votre en-tête (par exemple, parce que votre score est la somme de deux fichiers ou que vous souhaitez répertorier les pénalités de drapeau d'interprète séparément), assurez-vous que le score réel est le dernier numéro de l'en-tête:
## Perl, 43 + 2 (-p flag) = 45 bytes
Vous pouvez également faire du nom de la langue un lien qui apparaîtra ensuite dans l'extrait de code:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
_
pour désigner les éléments négatifs. :(Réponses:
CJam, 27 octets
Essayez-le ici.
Explication
la source
JavaScript (ES6), 75
82En tant que fonction anonyme
Modifier: 2 octets enregistrés thx @ user81655 (et 5 autres en le examinant)
Extrait de test
la source
CJam,
3534 octetsTestez-le ici.
Attend le format sur la première ligne et la liste sur la seconde.
Explication
la source
Pyth, 33 octets
Essayez-le en ligne: démonstration ou suite de tests
Explication:
la source
PowerShell,
1081009585 Octets(voir l'historique des révisions pour les versions précédentes)
Golfed encore 15 octets en retirant
$b
et les$s
variables et le changement des parenthèses sur la chaîne intérieure.Cela prend comme entrée deux chaînes et magasins eux dans
$i
et$z
, nous construisons une nouvelle chaîne de sortie. Les parenthèses internes-split
s$i
avec une expression régulière pour sélectionner uniquement des chiffres numériques, puis-join
s en arrière avec le délimiteur demandé. Nous concaténons cela avec le premier caractère de l'entrée du délimiteur (par exemple,[
) et le fermons avec l'indexation dans une chaîne basée sur la valeur ASCII du premier caractère et quelques ruses de formulation. L'extérieur.Trim()
supprime tous les espaces de début ou de fin.la source
"]})>"["[{(< ".IndexOf($b[0])]
par quelque chose comme' }) >]'[($b[0]-32)%6]
. Le($b[0]-32)%6
vous donne0,2,4,5,1
des caractères de parenthèse ouvrante que vous pouvez utiliser pour indexer dans la chaîne de parenthèse fermante' }) >]'
. Il pourrait y avoir une "formule" plus courte, mais cela semble suffisant.()
étant juste à côté les uns des autres, mais les autres crochets ont un caractère entre, alors j'ai opté pour l'indexation. Merci!String.Replace()
place de l'-replace
opérateur vous achèterait encore 2 octets (pas besoin d'échapper ou de définir une classe de caractère avec[]
).Replace('[]{}()<>;,',' ')
n'attrapera pas les caractères individuels mais essaiera plutôt de faire correspondre l'ensemble symbolique, qui n'existe pas. Nous aurions besoin d'utiliser Regex.Replace , qui implique un[regex]::
appel .NET et allongerait plutôt le code.-ne''
au lieu de|?{$_}
.Python 2, 96 octets
Appelez comme:
Production:
la source
JavaScript (ES6),
829211692 bytesUne fonction anonyme, lancez-la comme ceci
Cela peut probablement être joué beaucoup plus loin.
Non golfé
la source
The input will be a list of integer or decimal numbers (both positive and negative (and zero)), and a string of two characters
. Corrigé, merciMathematica, 108 octets
Mathematica est généralement maladroit avec des entrées de chaîne sauf si la chaîne est destinée à être interprétée comme un texte.
Explication
StringCases[t,NumberString]
renvoie la liste des chaînes de nombres.Riffle
insère les séparateurs entre les nombres./.Thread[c@"[ {<(" -> c@"] }>)"])
remplace le "support" gauche par le support droit.<>
est la forme infixe deStringJoin
. Il colle les sous-chaînes.la source
Matlab, 85 octets
Exemple d'utilisation:
la source
Julia, 95 octets
Il s'agit d'une fonction
f
qui accepte deux chaînes et renvoie une chaîne.Non golfé:
la source
Utilitaires Bash + GNU, 90
la source