Inspiré par cette question StackOverflow .
Contribution:
Nous prendrons trois entrées:
- Un délimiteur
Dsur lequel se diviser - Un caractère
Ientre 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,000et ,-,en deux / trois morceaux. Mais parce qu'ils sont dans le Icaractè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
Icaractères dans la chaîne d'entrée. - Vous pouvez supposer que le personnage
Iaura toujours unDcô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
Sne peut contenir ni l'unDni 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
Icontienne uniquementD. Par exemple:D = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'entraînerait['a', ',', 'b', 'c', 'd,e,,', 'f']. - Vous pouvez supposer que
Dcela 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 ", "")