Inspirado por esta pergunta StackOverflow .
Entrada:
Tomaremos três entradas:
- Um caractere delimitador
Dno qual dividir - Um caractere
Ientre dois dos quais ignoramos o caractere delimitador (eu sei, isso parece vago, mas explicarei abaixo) - Uma linha
S
Resultado:
Uma lista / matriz que contém as substrings após a divisão.
Exemplo:
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', ',-,']
Por quê? Dividindo em vírgula normalmente também dividir 98,00, 12,000,000e ,-,em dois / três peças. Mas como eles estão dentro do Icaractere de entrada, ignoramos a divisão aqui.
Regras do desafio:
- Você pode assumir que sempre haverá uma quantidade uniforme de
Icaracteres na string de entrada. - Você pode assumir que o caractere
Isempre terá umDpróximo a ele (exceto quando for o primeiro ou o último caractere da entrada) que ainda pode ser dividido corretamente. Então você não terá algo parecidoD = ','; I = '"'; S = 'a,b"c,d"e,f', nem nada dissoD=','; I='"'; S='a",b,"c'. - A entrada de cordas
Spode conter nenhum dos sejaDouI. Se não contiverD, produzimos uma lista com toda a string de entrada como único item. - A lista de saída não conterá mais o caractere
I, mesmo quando não continhaD(como você pode ver no"Abc "devir'Abc 'no exemplo acima). - É possível que a subcadeia
Icontenha apenasD. Por exemplo:D = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'resultaria em['a', ',', 'b', 'c', 'd,e,,', 'f']. - Você pode assumir que
Dnunca estará no início ou no final deS, portanto não precisará lidar com itens vazios à direita / à direita. - Quando uma entrada tem duas adjacentes
D, teremos um item vazio. Ou sejaD = ','; I = '"'; S = 'a,"b,c",d,,e,"",f', resultaria em['a', 'b,c', 'd', '', 'e', '', 'f']. - Você pode assumir que as entradas e saídas conterão apenas ASCII imprimível no intervalo
[32, 126](excluindo guias e novas linhas). - Você também pode gerar todos os itens delimitados por nova linha em vez de retornar / produzir uma lista / matriz (especialmente para os idiomas que não possuem listas / matrizes; por exemplo, Retina).
- Você tem permissão para gerar a lista na ordem inversa, se ela salvar bytes. Você não tem permissão para produzi-lo na ordem classificada ou 'aleatória'. Portanto,
D = ','; I = 'n'; S = 'a,2,b,3,c'pode ser produzido como[a,2,b,3,c]ou[c,3,b,2,a], mas não como[2,3,a,b,c,]ou[a,3,b,c,2]por exemplo.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
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,""'acabei de perceber. Modificarei um pouco o desafio para que itens vazios não sejam possíveis no início ou no final. Com base na experiência em Java e 05AB1E no passado, sei como os itens vazios frustrantes após a divisão podem ser corrigidos manualmente quando o idioma não o faz corretamente por padrão. Um caso de teste como esse ainda deve ser suportado: D = ','; I = '"'; S = 'a,"b,c",d,,e→ ['a', 'b,c', 'd', '', 'e']com um item vazio no meio.
'1,"2,3"' -> ['2,3','1']
[a,b,c]e [c,b,a]são permitidas saídas, mas [a,c,b]ou [b,a,c]não, por exemplo.
D=','; I='"'; S='a",b,"c'ou é mesmo uma entrada válida?
"", "'ll remove all ", "")