Ispirato da questa domanda StackOverflow .
Ingresso:
Prenderemo tre input:
- Un carattere delimitatore su cui
Ddividere - Un personaggio
Itra due dei quali ignoriamo il carattere delimitatore (lo so, sembra vago, ma lo spiegherò di seguito) - Una stringa
S
Produzione:
Un elenco / array contenente le sottostringhe dopo la divisione.
Esempio:
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', ',-,']
Perché? Splitting sulla virgola normalmente anche dividere 98,00, 12,000,000e ,-,in due / tre pezzi. Ma poiché sono all'interno del Icarattere di input, ignoriamo ignorare la divisione qui.
Regole della sfida:
- Puoi presumere che ci sarà sempre una quantità pari di
Icaratteri nella stringa di input. - Puoi presumere che il personaggio
Iavrà sempre unDaccanto (tranne quando è il primo o l'ultimo carattere dell'input) che può ancora essere diviso correttamente. Quindi non avrai qualcosa del genereD = ','; I = '"'; S = 'a,b"c,d"e,f', né niente del genereD=','; I='"'; S='a",b,"c'. - La stringa di input non
Spuò contenere nessuno dei dueDoI. Se contiene noD, viene visualizzato un elenco con l'intera stringa di input come unico elemento. - L'elenco di output non conterrà più il carattere
I, anche quando non conteneva noD(come puoi vedere al"Abc "divenire'Abc 'nell'esempio sopra). - È possibile che la sottostringa all'interno
Icontenga soloD. Ad esempio:D = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'si tradurrebbe in['a', ',', 'b', 'c', 'd,e,,', 'f']. - Puoi presumere che
Dnon sarà mai all'inizio o alla fine diS, quindi non dovrai occuparti di trascinare / portare oggetti vuoti. - Quando un input ha due adiacenti
D, avremo un oggetto vuoto. IeD = ','; I = '"'; S = 'a,"b,c",d,,e,"",f'comporterebbe['a', 'b,c', 'd', '', 'e', '', 'f']. - Puoi presumere che gli ingressi e le uscite conterranno solo ASCII stampabili nell'intervallo
[32, 126](quindi escludendo le schede e le nuove righe). - È anche consentito produrre tutti gli elementi delimitati da nuova riga anziché restituire / generare un elenco / matrice (specialmente per quelle lingue che non hanno liste / matrici; ad esempio Retina).
- Puoi salvare l'elenco in ordine inverso se salva byte. Tuttavia, non è consentito emetterlo in ordine ordinato o 'mischiato'. Quindi
D = ','; I = 'n'; S = 'a,2,b,3,c'può essere emesso come[a,2,b,3,c]o[c,3,b,2,a], ma non come[2,3,a,b,c,]o[a,3,b,c,2]per esempio.
Regole generali:
- Questo è code-golf , quindi vince la risposta più breve in byte.
Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione. - Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
- Le scappatoie predefinite sono vietate.
- Se possibile, aggiungi un link con un test per il tuo codice (ad es. TIO ).
- Inoltre, si consiglia vivamente di aggiungere una spiegazione per la risposta.
Casi 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,""'ho appena notato. Modificherò un po 'la sfida in modo che gli oggetti vuoti non siano possibili all'inizio o alla fine. In base all'esperienza maturata sia in Java che in 05AB1E in passato, so quanto possano essere frustranti gli oggetti vuoti dopo la divisione da correggere manualmente quando la lingua non lo fa correttamente per impostazione predefinita. Un caso di test come questo dovrebbe essere comunque supportato: D = ','; I = '"'; S = 'a,"b,c",d,,e→ ['a', 'b,c', 'd', '', 'e']con un oggetto vuoto in mezzo.
'1,"2,3"' -> ['2,3','1']
[a,b,c]e [c,b,a]sono consentiti output, ma ad esempio [a,c,b]o [b,a,c]no.
D=','; I='"'; S='a",b,"c'o è anche un input valido?
"", "'ll remove all ", "")