Lấy cảm hứng từ câu hỏi StackOverflow này .
Đầu vào:
Chúng tôi sẽ có ba đầu vào:
- Một ký tự phân cách
D
để phân chia - Một nhân vật
I
giữa hai trong số chúng ta bỏ qua nhân vật phân cách (tôi biết, điều đó nghe có vẻ mơ hồ, nhưng tôi sẽ giải thích nó bên dưới) - Một chuỗi
S
Đầu ra:
Một danh sách / mảng chứa các chuỗi con sau khi tách.
Thí dụ:
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', ',-,']
Tại sao? Tách trên dấu phẩy sẽ thường cũng chia 98,00
, 12,000,000
và ,-,
trong hai / ba mảnh. Nhưng vì chúng nằm trong I
ký tự đầu vào, chúng tôi bỏ qua việc bỏ qua phần tách ở đây.
Quy tắc thử thách:
- Bạn có thể giả sử sẽ luôn có một lượng
I
ký tự chẵn trong chuỗi đầu vào. - Bạn có thể giả sử nhân vật
I
sẽ luôn có một ký tựD
bên cạnh (trừ khi đó là ký tự đầu tiên hoặc cuối cùng của đầu vào) vẫn có thể được phân chia chính xác. Vì vậy, bạn sẽ không có cái gì đó như thếD = ','; I = '"'; S = 'a,b"c,d"e,f'
, cũng không có gì như thế nàyD=','; I='"'; S='a",b,"c'
. - Chuỗi đầu vào
S
có thể không chứa một trong haiD
hoặcI
. Nếu nó không chứaD
, chúng tôi xuất ra một danh sách với toàn bộ chuỗi đầu vào dưới dạng chỉ mục. - Danh sách đầu ra sẽ không chứa ký tự
I
nữa, ngay cả khi nó không chứaD
(như bạn có thể thấy khi"Abc "
trở thành'Abc '
trong ví dụ trên). - Có thể là chuỗi con bên trong
I
chỉ chứaD
. Ví dụ:D = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'
sẽ dẫn đến['a', ',', 'b', 'c', 'd,e,,', 'f']
. - Bạn có thể cho rằng
D
sẽ không bao giờ bắt đầu hoặc kết thúcS
, vì vậy bạn sẽ không phải đối phó với các mục trống / dẫn đầu. - Khi một đầu vào có hai liền kề
D
, chúng ta sẽ có một mục trống. Tức làD = ','; I = '"'; S = 'a,"b,c",d,,e,"",f'
sẽ có kết quả['a', 'b,c', 'd', '', 'e', '', 'f']
. - Bạn có thể giả sử đầu vào và đầu ra sẽ chỉ chứa ASCII có thể in trong phạm vi
[32, 126]
(vì vậy không bao gồm các tab và dòng mới). - Bạn cũng được phép xuất tất cả các mục được phân tách bằng dòng mới thay vì trả về / xuất ra một danh sách / mảng (đặc biệt đối với các ngôn ngữ không có danh sách / mảng; ví dụ như Retina).
- Bạn được phép xuất danh sách theo thứ tự đảo ngược nếu nó lưu byte. Mặc dù vậy, bạn không được phép xuất nó theo thứ tự được sắp xếp hoặc 'xáo trộn'. Vì vậy,
D = ','; I = 'n'; S = 'a,2,b,3,c'
có thể là đầu ra như[a,2,b,3,c]
hoặc[c,3,b,2,a]
, nhưng không phải là[2,3,a,b,c,]
hoặc[a,3,b,c,2]
ví dụ.
Quy tắc chung:
- Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte thắng.
Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'. - Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp và kiểu trả về, các chương trình đầy đủ. Cuộc gọi của bạn.
- Lỗ hổng mặc định bị cấm.
- Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn (ví dụ TIO ).
- Ngoài ra, thêm một lời giải thích cho câu trả lời của bạn rất được khuyến khích.
Các trường hợp thử nghiệm:
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,""'
tôi chỉ cần chú ý. Tôi sẽ sửa đổi thử thách một chút để các mục trống sẽ không thể thực hiện được khi bắt đầu hoặc kết thúc. Dựa trên kinh nghiệm trong cả Java và 05AB1E trong quá khứ, tôi biết các mục trống sau khi chia tách có thể khắc phục thủ công như thế nào khi ngôn ngữ không làm đúng theo mặc định. Một trường hợp thử nghiệm như thế này vẫn nên được hỗ trợ: D = ','; I = '"'; S = 'a,"b,c",d,,e
→ ['a', 'b,c', 'd', '', 'e']
với một mục trống ở giữa.
'1,"2,3"' -> ['2,3','1']
[a,b,c]
và [c,b,a]
được phép đầu ra, nhưng [a,c,b]
hoặc [b,a,c]
không ví dụ.
D=','; I='"'; S='a",b,"c'
hoặc thậm chí là một đầu vào hợp lệ?
"", "'ll remove all ", ""
)