Inspiré par cette question StackOverflow .
Contribution:
Nous prendrons trois entrées:
- Un délimiteur
D
sur lequel se diviser - Un caractère
I
entre deux dont nous ignorons le caractère délimiteur (je sais, cela semble vague, mais je vais l'expliquer ci-dessous) - Un string
S
Production:
Une liste / tableau contenant les sous-chaînes après la scission.
Exemple:
Input:
D = ','
I = '"'
S = '11020199,"Abc ",aduz,,444,bieb,dc,2 ,2222.00,whatever 5dc,222.22,22.00,"98,00","12,000,000",21-09-2018, 06:00,",-,"'
Output:
['11020199', 'Abc ', 'aduz', '', '444', 'bieb', 'dc', '2 ', '2222.00', 'whatever 5dc', '222.22', '22.00', '98,00', '12,000,000', '21-09-2018', ' 06:00', ',-,']
Pourquoi? Le fractionnement sur une virgule se diviserait normalement également 98,00
, 12,000,000
et ,-,
en deux / trois morceaux. Mais parce qu'ils sont dans le I
caractère d'entrée, nous ignorons ignorer la division ici.
Règles du défi:
- Vous pouvez supposer qu'il y aura toujours un nombre pair de
I
caractères dans la chaîne d'entrée. - Vous pouvez supposer que le personnage
I
aura toujours unD
côté (sauf s'il s'agit du premier ou du dernier caractère de l'entrée) qui peut toujours être correctement divisé. Vous n'aurez donc rien de semblableD = ','; I = '"'; S = 'a,b"c,d"e,f'
, ni rien de semblableD=','; I='"'; S='a",b,"c'
. - La chaîne d'entrée
S
ne peut contenir ni l'unD
ni l' autreI
. S'il ne contient pasD
, nous éditons une liste avec la chaîne d'entrée entière comme seul élément. - La liste de sortie ne contiendra plus le caractère
I
, même s'il n'en contenait pasD
(comme vous pouvez le voir au"Abc "
devenir'Abc '
dans l'exemple ci-dessus). - Il est possible que la sous-chaîne
I
contienne uniquementD
. Par exemple:D = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'
entraînerait['a', ',', 'b', 'c', 'd,e,,', 'f']
. - Vous pouvez supposer que
D
cela ne se fera jamais au début ou à la finS
, vous n'aurez donc pas à gérer les éléments vides de fin / de début . - Lorsqu'une entrée en a deux adjacentes
D
, nous aurons un élément vide. C'est-à-direD = ','; I = '"'; S = 'a,"b,c",d,,e,"",f'
qu'il en résulterait['a', 'b,c', 'd', '', 'e', '', 'f']
. - Vous pouvez supposer que les entrées et sorties ne contiendront que de l'ASCII imprimable dans la plage
[32, 126]
(donc à l'exclusion des tabulations et des sauts de ligne). - Vous êtes également autorisé à sortir tous les éléments délimités par une nouvelle ligne au lieu de renvoyer / sortir une liste / tableau (en particulier pour les langages qui n'ont pas de listes / tableaux; c'est-à-dire Retina).
- Vous êtes autorisé à afficher la liste dans l'ordre inverse si elle enregistre des octets. Cependant, vous n'êtes pas autorisé à le sortir dans l'ordre trié ou «mélangé». Il
D = ','; I = 'n'; S = 'a,2,b,3,c'
peut donc être sorti en tant que[a,2,b,3,c]
ou[c,3,b,2,a]
, mais pas en tant que[2,3,a,b,c,]
ou[a,3,b,c,2]
par exemple.
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues non-golfeur de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de test:
Input:
D = ','; I = '"'; S = 'a,"b,c",d,,e,"",f'
Output:
['a', 'b,c', 'd', '', 'e', '', 'f']
Input:
D = ','; I = '"'; S = '11020199,"Abc ",aduz,,444,bieb,dc,2 ,2222.00,whatever 5dc,222.22,22.00,"98,00","12,000,000",21-09-2018, 06:00,",-,"'
Output:
['11020199', 'Abc ', 'aduz', '', '444', 'bieb', 'dc', '2 ', '2222.00', 'whatever 5dc', '222.22', '22.00', '98,00', '12,000,000', '21-09-2018', ' 06:00', ',-,']
Input:
D = ' '; I = ','; S = 'this is a test , to see if you understand it, or not , hmmm, I think I have too many commas , or not , perhaps..'
Output:
['this', 'is', 'a', 'test', ' to see if you understand it', 'or', 'not', ' hmmm', 'I', 'think', 'I', 'have', 'too', 'many', 'commas', ' or not ', 'perhaps..']
Input:
D = 'x'; I = 'y'; S = 'contains no lowercase X nor Y'
Output:
['contains no lowercase X nor Y']
Input:
D = '1'; I = '3'; S = '3589841973169139975105820974944592078316406286208948254211370679314'
Output: ['58984197', '69', '9975105820974944592078', '64062862089482542', '', '70679', '4']
Input:
D = ' '; I = 'S'; S = 'regular split on spaces'
Output:
['regular', 'split', 'on', 'spaces']
D = ','; I = '"'; S = ',"a,b",c,,d,""'
je viens de le remarquer. Je modifierai un peu le défi afin que les éléments vides ne soient pas possibles au début ou à la fin. Sur la base de mon expérience dans Java et 05AB1E dans le passé, je sais à quel point les éléments vides frustrants peuvent être réparés manuellement lorsque le langage ne le fait pas correctement par défaut. Un cas de test comme celui-ci doit toujours être pris en charge: D = ','; I = '"'; S = 'a,"b,c",d,,e
→ ['a', 'b,c', 'd', '', 'e']
avec un élément vide entre les deux.
'1,"2,3"' -> ['2,3','1']
[a,b,c]
et [c,b,a]
sont autorisés les sorties, mais pas [a,c,b]
ou [b,a,c]
non par exemple.
D=','; I='"'; S='a",b,"c'
ou est-ce même une entrée valide?
"", "'ll remove all ", ""
)