Bu StackOverflow sorusundan ilham alındı .
Giriş:
Üç girdi alacağız:
DBölünecek sınırlayıcı karakter- Bir karakter
Iikisi arasında hangi biz (yani sesler belirsiz, biliyorum, ama ben aşağıda açıklayacağım) sınırlayıcı karakteri göz ardı - Dizi
S
Çıktı:
Bölme işleminden sonra alt dizeleri içeren bir liste / dizi.
Misal:
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', ',-,']
Neden? Virgül üzerinde Bölme normalde de bölmek 98,00, 12,000,000ve ,-,iki / üç parça halinde. Ancak Igiriş karakterleri içinde oldukları için buradaki bölünmeyi yok sayıyoruz.
Zorluk kuralları:
IGiriş dizesinde her zaman eşit miktarda karakter olacağını varsayabilirsiniz .- Karakterin
Iher zamanDyanında (girişin ilk veya son karakteri hariç), yine de düzgün bir şekilde bölünebileceğini varsayabilirsiniz . Böylece gibi bir şey olmazD = ','; I = '"'; S = 'a,b"c,d"e,f'böyle, ne de bir şeyD=','; I='"'; S='a",b,"c'. - Girdi-string
Sya hiçbiri içerebilirDveyaI. Hayır içeriyorsaD, girdi dizesinin tamamını yalnızca öğe olarak içeren bir liste çıkarırız. - Çıktı liste karakteri içermez
Ihiçbir içerdiği bile artıkD(en görebileceğiniz gibi"Abc "olma'Abc 'Örneğin yukarıda). - İçindeki alt dizenin
Iyalnızca içerdiği mümkündürD. Örneğin: ileD = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'sonuçlanır['a', ',', 'b', 'c', 'd,e,,', 'f']. - Bunun
Dhiçbir zaman başlangıcında veya sonunda olmayacağını varsayabilirsinizS, böylece boş / sondaki boş öğelerle uğraşmak zorunda kalmazsınız. - Bir girişin bitişik iki yanı olduğunda
D, boş bir öğemiz olur. YaniD = ','; I = '"'; S = 'a,"b,c",d,,e,"",f'sonuçlanır['a', 'b,c', 'd', '', 'e', '', 'f']. - Girişlerin ve çıkışların aralıkta yalnızca yazdırılabilir ASCII içereceğini varsayabilirsiniz
[32, 126](sekmeler ve yeni satırlar hariç). - Ayrıca, bir liste / dizi döndürmek / çıkarmak yerine tüm satırları yeni satırla ayrılmış şekilde yayınlamanıza izin verilir (özellikle liste / dizileri olmayan diller için; örneğin Retina).
- Bayt kaydederse listeyi ters sırayla çıkarmanıza izin verilir. Bununla birlikte, sıralı veya 'karıştırılmış' sırayla çıkmanıza izin verilmez. Yani
D = ','; I = 'n'; S = 'a,2,b,3,c'olarak çıktı olabilir[a,2,b,3,c]veya[c,3,b,2,a]değil olarak[2,3,a,b,c,]veya[a,3,b,c,2]örneğin.
Genel kurallar:
- Bu kod golf , bayt en kısa cevap kazanır.
Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın. - Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyonlar / yöntem uygun parametreler ve dönüş tipi, tam programlar ile kullanılabilir. Çağrınız.
- Varsayılan Loopholes yasaktır.
- Mümkünse, lütfen kodunuz için bir test içeren bir bağlantı ekleyin (örn. TIO ).
- Ayrıca, cevabınız için bir açıklama eklemeniz şiddetle tavsiye edilir.
Test senaryoları:
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,""'çünkü fark ettim. Başlangıçta veya sonunda boş öğeler mümkün olmayacak şekilde meydan okumayı biraz değiştireceğim. Geçmişte hem Java hem de 05AB1E'deki deneyime dayanarak, bölme işleminden sonra boş öğelerin dil varsayılan olarak doğru yapmadığı zaman manuel olarak düzeltmek için ne kadar sinir bozucu olabileceğini biliyorum. Bunun gibi bir test durumu hala desteklenmelidir: D = ','; I = '"'; S = 'a,"b,c",d,,e→ arada ['a', 'b,c', 'd', '', 'e']boş bir öğe var.
'1,"2,3"' -> ['2,3','1']
[a,b,c]ve [c,b,a]çıkışları izin verilir, ancak [a,c,b]ya [b,a,c]değil örneğin.
D=','; I='"'; S='a",b,"c'ya da geçerli bir girdi mi?
"", "'ll remove all ", "")