Вдохновлен этим вопросом StackOverflow .
Входные данные:
Мы возьмем три входа:
- Символ-
Dразделитель, на который можно разделить - Символ
Iмежду двумя из которых мы игнорируем символ разделителя (я знаю, это звучит расплывчато, но я объясню это ниже) - Строка
S
Выход:
Список / массив, содержащий подстроки после разбиения.
Пример:
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', ',-,']
Зачем? Расщепление на запятой , как правило , также разделены 98,00, 12,000,000и ,-,в двух / трех частей. Но поскольку они находятся внутри Iвходного символа, мы игнорируем игнорирование разделения здесь.
Правила вызова:
- Вы можете предположить, что
Iво входной строке всегда будет четное количество символов. - Вы можете предположить, что символ
Iвсегда будетDрядом с ним (кроме случаев, когда это первый или последний символ ввода), который все еще может быть правильно разделен. Таким образом, у вас не будет ничего подобногоD = ','; I = '"'; S = 'a,b"c,d"e,f'и ничего подобногоD=','; I='"'; S='a",b,"c'. - Ввод-строка
Sне может содержать ни одного либоDилиI. Если в нем нетD, мы выводим список со всей входной строкой как единственным элементом. - Выходной список не будет содержать символ
Iбольше, даже если она не содержалаD(как вы можете видеть на"Abc "становление'Abc 'в примере выше). - Возможно, что подстрока внутри
Iсодержит толькоD. Например:D = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'приведет к['a', ',', 'b', 'c', 'd,e,,', 'f']. - Вы можете предположить, что
Dэтого никогда не будет в начале или в концеS, поэтому вам не придется иметь дело с конечными / ведущими пустыми элементами. - Когда вход имеет два смежных
D, у нас будет пустой элемент. Т.е.D = ','; I = '"'; S = 'a,"b,c",d,,e,"",f'приведет к['a', 'b,c', 'd', '', 'e', '', 'f']. - Можно предположить, что входы и выходы будут содержать только печатный ASCII в диапазоне
[32, 126](исключая вкладки и переводы строк). - Вам также разрешено выводить все элементы с разделителями новой строки вместо возврата / вывода списка / массива (особенно для тех языков, которые не имеют списков / массивов; т.е. Retina).
- Вам разрешено выводить список в обратном порядке, если он сохраняет байты. Вам не разрешено выводить его в отсортированном или «перемешанном» порядке. Так что
D = ','; I = 'n'; S = 'a,2,b,3,c'можно выводить как[a,2,b,3,c]или[c,3,b,2,a], но не как[2,3,a,b,c,]или,[a,3,b,c,2]например.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте найти как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
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,""'я только что заметил. Я немного изменю задачу, чтобы пустые элементы были невозможны в начале или в конце. Основываясь на опыте работы с Java и 05AB1E в прошлом, я знаю, как можно расстроить пустые элементы после разделения, если язык по умолчанию не делает это правильно. Подобные тестовые примеры все еще должны поддерживаться: D = ','; I = '"'; S = 'a,"b,c",d,,e→ ['a', 'b,c', 'd', '', 'e']с пустым элементом между ними.
'1,"2,3"' -> ['2,3','1']
[a,b,c]и [c,b,a]допустимы выходы, но [a,c,b]или [b,a,c]нет например.
D=','; I='"'; S='a",b,"c'или это даже допустимый вклад?
"", "'ll remove all ", "")