บทนำ
ฉันไม่เห็นความท้าทายของ regex มากมายในที่นี้ดังนั้นฉันจึงขอเสนอวิธีง่าย ๆ ที่หลอกลวงซึ่งสามารถทำได้หลายวิธีโดยใช้รสชาติที่หลากหลายของ regex ฉันหวังว่ามันจะมอบความสนุกให้กับผู้ที่ชื่นชอบการเล่นกอล์ฟ regex
ท้าทาย
ความท้าทายคือการจับคู่สิ่งที่ฉันได้ขนานนามอย่างซีรี่ส์ "คุ้มทุน" อย่างหลวม ๆ : ชุดของตัวละครที่แตกต่างกันจำนวนเท่ากัน นี่คือตัวอย่างที่อธิบายได้ดีที่สุด
การจับคู่:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
ไม่ตรงกัน:
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
ที่จะพูดคุยเราต้องการเพื่อให้ตรงกับเรื่องของรูปแบบ ( สำหรับรายชื่อใด ๆ ของตัวละครเพื่อที่ทั้งหมดc1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
ชี้แจง:
อินพุตจะไม่ว่างเปล่า
อักขระอาจซ้ำตัวเองในภายหลังในสตริง (เช่น "Banana")
k > 1
ดังนั้นจะมีอักขระที่แตกต่างกันอย่างน้อย 2 ตัวในสตริงคุณสามารถสันนิษฐานได้ว่ามีเพียงอักขระ ASCII เท่านั้นที่ถูกส่งผ่านเป็นอินพุตและไม่มีอักขระใด ๆ ที่จะเป็นตัวยุติบรรทัด
กฎระเบียบ
(ขอบคุณ Martin Ender สำหรับบล็อกกฎที่ระบุไว้อย่างยอดเยี่ยมนี้)
คำตอบของคุณควรประกอบด้วย regex เพียงหนึ่งเดียวโดยไม่มีรหัสเพิ่มเติมใด ๆ (ยกเว้นเป็นทางเลือกรายการของตัวดัดแปลง regex ที่จำเป็นสำหรับการแก้ปัญหาของคุณ) คุณต้องไม่ใช้คุณสมบัติของรสชาติ regex ของภาษาที่อนุญาตให้คุณเรียกใช้โค้ดในภาษาโฮสติ้ง (เช่นe
ตัวดัดแปลงของ Perl )
คุณสามารถใช้รสชาติของ regex ใด ๆ ที่มีอยู่ก่อนความท้าทายนี้ แต่โปรดระบุรสชาติ
อย่าสันนิษฐานว่า regex นั้นถูกยึดโดยปริยายเช่นถ้าคุณใช้ Python ให้ถือว่า regex ของคุณถูกใช้กับ re.search และไม่ใช่กับ re.match regex ของคุณจะต้องตรงกับสตริงทั้งหมดสำหรับสตริงที่ถูกต้องและไม่ได้ผลสำหรับสตริงที่ไม่ถูกต้อง คุณสามารถใช้กลุ่มจับภาพได้มากเท่าที่คุณต้องการ
คุณอาจสันนิษฐานว่าการป้อนข้อมูลจะเป็นสตริงที่มีอักขระ ASCII ตั้งแต่สองตัวขึ้นไปเสมอโดยไม่มีตัวคั่นบรรทัด
นี่คือสนามกอล์ฟ regex ดังนั้น regex ที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ หากภาษาของคุณต้องการตัวคั่น (โดยปกติ/.../
) เพื่อแสดงถึงนิพจน์ทั่วไปอย่านับตัวคั่นด้วยตนเอง หากโซลูชันของคุณต้องการตัวดัดแปลงให้เพิ่มหนึ่งไบต์ต่อตัวดัดแปลง
เกณฑ์
นี่เป็นสนามกอล์ฟที่ดีดังนั้นจงลืมประสิทธิภาพและลอง regex ของคุณให้เล็กที่สุดเท่าที่จะทำได้
โปรดระบุถึงรสชาติที่คุณใช้ใน regex และถ้าเป็นไปได้ให้ใส่ลิงค์ที่แสดงตัวอย่างการแสดงออกทางออนไลน์ของคุณ
banana
คือคุ้ม