แรงบันดาลใจจากคำถาม 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อาจมีไม่มีการอย่างใดอย่างหนึ่งหรือDIหากไม่มีหมายเลขDเราจะแสดงรายการที่มีทั้งสายเข้าเป็นรายการเท่านั้น - รายการที่ส่งออกจะได้มีตัวละคร
Iอีกต่อไปแม้ในขณะที่มันมีไม่มีD(ตามที่คุณสามารถดูที่"Abc "กลายเป็น'Abc 'ในตัวอย่างข้างต้น) - เป็นไปได้ว่าย่อยภายในมีเพียง
IDตัวอย่างเช่นจะส่งผลให้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]ยกตัวอย่างเช่น
กฎทั่วไป:
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
อย่าปล่อยให้ภาษารหัสกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ 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 ", "")