ปัญหา
ฉันมีสำนวนปกติที่ต้องใช้ในบางโค้ด แต่ฉันใช้ภาษาการเขียนโปรแกรมที่ไม่รองรับ regex! โชคดีที่ฉันรู้ว่าสตริงทดสอบจะมีความยาวสูงสุดและจะประกอบด้วย ASCII ที่พิมพ์ได้เท่านั้น
ความท้าทาย
คุณต้องป้อน regex และตัวเลขnและส่งออกทุกสตริงที่ประกอบด้วย ASCII ที่พิมพ์ได้ (รหัส ASCII 32 ถึง 126 รวมถึง~ไม่มีแท็บหรือบรรทัดใหม่) ที่มีความยาวน้อยกว่าหรือเท่ากับnที่ตรงกับ regex นั้น คุณไม่สามารถใช้นิพจน์ทั่วไปหรือฟังก์ชันจับคู่ regex ในรหัสของคุณได้เลย นิพจน์ทั่วไปจะถูก จำกัด ดังต่อไปนี้:
- ตัวอักษรตัวอักษร (และหนีออกมาซึ่งบังคับให้ตัวละครที่จะเป็นตัวอักษรเพื่อให้
\.เป็นตัวอักษร.,\nเป็นตัวอักษรn(เทียบเท่าเพียงn) และ\wเทียบเท่ากับw. คุณไม่จำเป็นต้องลำดับการสนับสนุนการหลบหนี.) .- อักขระตัวแทน (อักขระใด ๆ )- คลาสอักขระ
[abc]หมายถึง "a หรือ b หรือ c" และ[d-f]หมายถึงอะไรตั้งแต่ d ถึง f (เช่น d หรือ e หรือ f) ตัวละครเดียวที่มีความหมายพิเศษในคลาสตัวละครคือ[และ](ซึ่งจะถูกหลบหนีอยู่เสมอดังนั้นไม่ต้องกังวลเกี่ยวกับสิ่งเหล่านั้น),\(ตัวหนีของหลักสูตร)^ที่จุดเริ่มต้นของคลาสตัวละคร (ซึ่งเป็นการปฏิเสธ ) และ-(ซึ่งเป็นช่วง) |- ตัวดำเนินการ OR การสลับfoo|barวิธีการอย่างใดอย่างหนึ่งfooหรือbarและ(ab|cd)eการแข่งขันอย่างใดอย่างหนึ่งหรือabecde*- จับคู่โทเค็นก่อนหน้านี้ซ้ำเป็นศูนย์หรือมากกว่านั้นโลภ (พยายามทำซ้ำหลาย ๆ ครั้งเท่าที่จะทำได้)+- ทำซ้ำอย่างน้อยหนึ่งครั้งโลภ?- ศูนย์หรือหนึ่งครั้ง- การจัดกลุ่มที่มีวงเล็บเพื่อราชสกุลกลุ่ม,
|, หรือ*+?
อินพุต regex นั้นจะถูกต้องเสมอ (เช่นคุณไม่ต้องจัดการกับอินพุต?abcหรือ(fooหรืออินพุตที่ไม่ถูกต้อง) คุณสามารถส่งออกสตริงในลำดับใดก็ได้ที่คุณต้องการ แต่แต่ละสตริงจะต้องปรากฏเพียงครั้งเดียว (ไม่ส่งออกรายการที่ซ้ำกัน)
กรณีทดสอบ
การป้อนข้อมูล: .*, 1
เอาท์พุท: (สตริงว่าง) , !, ", ... },~
อินพุต: w\w+, 3
เอาต์พุต: ww,www
การป้อนข้อมูล: [abx-z][^ -}][\\], 3
เอาท์พุท: a~\, b~\, x~\, y~\,z~\
การป้อนข้อมูล: ab*a|c[de]*, 3
เอาท์พุท: c, cd, ce, aa, cde, ced, cdd, cee,aba
การป้อนข้อมูล: (foo)+(bar)?!?, 6
เอาท์พุท: foo, foo!, foofoo,foobar
การป้อนข้อมูล: (a+|b*c)d, 4
เอาท์พุท: ad, cd, aad, bcd, aaad,bbcd
อินพุต: p+cg, 4
เอาต์พุต: pcg,ppcg
อินพุต: a{3}, 4
เอาต์พุต:a{3}
ผู้ชนะ
นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ!
|สมเหตุสมผลน้อยมาก a|b|cมันดูเหมือนจะไม่จัดการกับกลุ่มที่ซ้อนกันหรือ มีอะไรผิดปกติกับการใช้คำอธิบายมาตรฐานในแง่ของวิธีการเรียงต่อกันอย่างมากและการผูกสลับ (และคุณไม่มีข้อแก้ตัวที่ไม่ได้ใช้กล่องทราย)