Inspirado en esta pregunta de StackOverflow .
Entrada:
Tomaremos tres entradas:
- Un carácter delimitador
Dpara dividir - Un personaje
Ientre dos de los cuales ignoramos el carácter delimitador (lo sé, eso suena vago, pero lo explicaré a continuación) - Una cuerda
S
Salida:
Una lista / matriz que contiene las subcadenas después de la división.
Ejemplo:
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é? Dividir en coma normalmente también se dividiría 98,00, 12,000,000y ,-,en dos / tres piezas. Pero debido a que están dentro del Icarácter de entrada, ignoramos ignoramos la división aquí.
Reglas de desafío:
- Puede suponer que siempre habrá una cantidad par de
Icaracteres en la cadena de entrada. - Puede suponer que el carácter
Isiempre tendrá unDlado (excepto cuando es el primer o el último carácter de la entrada) que aún se puede dividir correctamente. Entonces no tendrás algo como estoD = ','; I = '"'; S = 'a,b"c,d"e,f', ni nada como estoD=','; I='"'; S='a",b,"c'. - La entrada de la cadena
Spodría contener ninguno de cualquieraDoI. Si no contieneD, mostramos una lista con toda la cadena de entrada como único elemento. - La lista de salida ya no contendrá el carácter
I, incluso cuando no contenía ningúnD(como se puede ver en el"Abc "futuro'Abc 'en el ejemplo anterior). - Es posible que la subcadena
Icontenga soloD. Por ejemplo:D = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'resultaría en['a', ',', 'b', 'c', 'd,e,,', 'f']. - Puede suponer que
Dnunca estará al principio o al finalS, por lo que no tendrá que lidiar con los elementos vacíos finales / iniciales . - Cuando una entrada tiene dos adyacentes
D, tendremos un elemento vacío. Es decirD = ','; I = '"'; S = 'a,"b,c",d,,e,"",f', resultaría en['a', 'b,c', 'd', '', 'e', '', 'f']. - Puede suponer que las entradas y salidas solo contendrán ASCII imprimibles en el rango
[32, 126](excluyendo pestañas y nuevas líneas). - También se le permite generar todos los elementos delimitados por una nueva línea en lugar de devolver / generar una lista / matriz (especialmente para aquellos idiomas que no tienen listas / matrices; es decir, Retina).
- Se le permite generar la lista en orden inverso si guarda bytes. Sin embargo, no está permitido enviarlo en orden ordenado o 'barajado'. Por
D = ','; I = 'n'; S = 'a,2,b,3,c'lo tanto, se puede generar como[a,2,b,3,c]o[c,3,b,2,a], pero no como[2,3,a,b,c,]o[a,3,b,c,2]por ejemplo.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código (es decir, TIO ).
- Además, se recomienda agregar una explicación para su respuesta.
Casos de prueba:
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,""'me acabo de dar cuenta. Modificaré el desafío un poco para que los elementos vacíos no sean posibles al principio o al final. Basado en la experiencia en Java y 05AB1E en el pasado, sé lo frustrante que puede ser arreglar los elementos vacíos después de dividirlos manualmente cuando el idioma no lo hace correctamente de manera predeterminada. Aún se deben admitir casos de prueba como este: D = ','; I = '"'; S = 'a,"b,c",d,,e→ ['a', 'b,c', 'd', '', 'e']con un elemento vacío en el medio.
'1,"2,3"' -> ['2,3','1']
[a,b,c]y [c,b,a]son salidas permitidas, pero [a,c,b]o [b,a,c]no, por ejemplo.
D=','; I='"'; S='a",b,"c'o es una entrada válida?
"", "'ll remove all ", "")