Inspiriert von dieser StackOverflow-Frage .
Eingang:
Wir nehmen drei Eingaben:
- Ein Trennzeichen
D
zum Teilen - Ein Zeichen
I
zwischen zwei, von denen wir das Trennzeichen ignorieren (ich weiß, das klingt vage, aber ich werde es unten erklären) - Ein Faden
S
Ausgabe:
Eine Liste / ein Array mit den Teilzeichenfolgen nach dem Teilen.
Beispiel:
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', ',-,']
Warum? Splitting auf Komma normalerweise auch gespalten 98,00
, 12,000,000
und ,-,
in zwei / drei Stücken. Da sie sich jedoch innerhalb des I
Eingabezeichens befinden, ignorieren wir die Aufteilung hier und ignorieren sie.
Herausforderungsregeln:
- Sie können davon ausgehen, dass
I
die Eingabezeichenfolge immer eine gerade Anzahl von Zeichen enthält. - Sie können davon ausgehen, dass neben dem Zeichen
I
immer ein Zeichen stehtD
(außer wenn es das erste oder letzte Zeichen der Eingabe ist), das noch ordnungsgemäß aufgeteilt werden kann. Sie werden also weder so etwasD = ','; I = '"'; S = 'a,b"c,d"e,f'
noch so etwas habenD=','; I='"'; S='a",b,"c'
. - Die Eingabezeichenfolge kann
S
weder eines nochD
oder enthaltenI
. Wenn es no enthältD
, geben wir eine Liste mit der gesamten Eingabezeichenfolge als einzigem Element aus. - Die Ausgabeliste wird nicht das Zeichen
I
mehr, auch wenn sie nicht enthalten istD
(wie man an dem sieht"Abc "
immer'Abc '
im Beispiel oben). - Es ist möglich, dass der Teilstring nur
I
enthältD
. Zum Beispiel:D = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'
würde ergeben['a', ',', 'b', 'c', 'd,e,,', 'f']
. - Sie können davon ausgehen, dass dies
D
niemals am Anfang oder Ende von sein wirdS
, sodass Sie sich nicht mit nachfolgenden / führenden leeren Elementen befassen müssen. - Wenn eine Eingabe zwei nebeneinander hat
D
, haben wir ein leeres Element. DhD = ','; I = '"'; S = 'a,"b,c",d,,e,"",f'
würde ergeben['a', 'b,c', 'd', '', 'e', '', 'f']
. - Sie können davon ausgehen, dass die Ein- und Ausgänge nur druckbares ASCII im Bereich enthalten
[32, 126]
(also ohne Tabulatoren und Zeilenumbrüche). - Sie können auch alle durch neue Zeilen getrennten Elemente ausgeben, anstatt eine Liste / ein Array zurückzugeben / auszugeben (insbesondere für Sprachen ohne Listen / Arrays, z. B. Retina).
- Sie können die Liste in umgekehrter Reihenfolge ausgeben, wenn Bytes gespeichert werden. Sie dürfen es jedoch nicht in sortierter oder gemischter Reihenfolge ausgeben. So
D = ','; I = 'n'; S = 'a,2,b,3,c'
lassen sich als sein[a,2,b,3,c]
oder[c,3,b,2,a]
, aber nicht wie[2,3,a,b,c,]
oder[a,3,b,c,2]
zum Beispiel.
Allgemeine Regeln:
- Dies ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich nicht von Code-Golf-Sprachen davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, eine möglichst kurze Antwort für "jede" Programmiersprache zu finden. - Für Ihre Antwort gelten Standardregeln , sodass Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp verwenden dürfen. Ihr Anruf.
- Standardschlupflöcher sind verboten.
- Wenn möglich, fügen Sie bitte einen Link mit einem Test für Ihren Code (dh TIO ) hinzu.
- Es wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
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,""'
ich es gerade bemerkt habe. Ich werde die Herausforderung ein wenig ändern, damit leere Elemente am Anfang oder Ende nicht möglich sind. Aufgrund der Erfahrungen in Java und 05AB1E in der Vergangenheit weiß ich, wie frustrierend es sein kann, leere Elemente nach dem Teilen manuell zu beheben, wenn die Sprache dies standardmäßig nicht richtig macht. Ein solcher Testfall sollte weiterhin unterstützt werden: D = ','; I = '"'; S = 'a,"b,c",d,,e
→ ['a', 'b,c', 'd', '', 'e']
mit einem leeren Element dazwischen.
'1,"2,3"' -> ['2,3','1']
[a,b,c]
und [c,b,a]
sind Ausgaben erlaubt, aber [a,c,b]
oder [b,a,c]
nicht zum Beispiel.
D=','; I='"'; S='a",b,"c'
oder ist es überhaupt eine gültige Eingabe?
"", "'ll remove all ", ""
)