Натхненний цим запитом 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](за винятком вкладок та нових рядків). - Вам також дозволяється виводити всі елементи з новим рядком, а не повертати / виводити список / масив (особливо для тих мов, які не мають списків / масивів; тобто сітчатка).
- Ви можете виводити список у зворотному порядку, якщо він зберігає байти. Ти не можеш виводити його в упорядкованому або "перетасованому" порядку. Так
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, функції / метод із відповідними параметрами та повним програмами типу return. Твій дзвінок.
- Лазівки за замовчуванням заборонені.
- Якщо можливо, додайте посилання з тестом для вашого коду (тобто 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 ", "")