เราพบปัญหาเกี่ยวกับmeta-regex-golfซึ่งได้รับแรงบันดาลใจจากการ์ตูน xkcd
แต่สนามกอล์ฟ Regex นี้ก็ดูสนุกเช่นกัน! ฉันต้องการแยกความแตกต่างระหว่างรัฐของสหรัฐอเมริกาและภูมิภาคของอิตาลี ทำไม? ฉันเป็นพลเมืองของทั้งสองประเทศและฉันมักจะมีปัญหากับเรื่องนี้*
ภูมิภาคของประเทศอิตาลีนั้น
Abruzzo, Valle d'Aosta, Puglia, Basilicata, Calabria, Campania, Emilia-Romagna, Friuli-Venezia Giulia, Lazio, Liguria, Lombardia, Marche, Molise, Piemonte, Sardegna, Sicilia, Trentino-Alto Adige/Südtirol, Toscana, Umbria, Veneto
และสหรัฐอเมริกาเป็น
Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia, Wisconsin, Wyoming
งานของคุณคือการเขียนโปรแกรมที่แยกรายการเหล่านี้ด้วยนิพจน์ทั่วไป นี่คือเกมใหม่ดังนั้นนี่คือ
กฎระเบียบ
- การแยกความแตกต่างระหว่างรายการจะต้องทำด้วยนิพจน์ทั่วไปที่ตรงกันเดียว
- คะแนนของคุณคือความยาวของนิพจน์ทั่วไปนั้นเล็กกว่าดีกว่า
เพื่อให้ชัดเจน: งานทั้งหมดจะต้องทำโดยการแสดงออกปกติ - ไม่มีการกรองไม่มีการแทนที่ไม่มีอะไร ... แม้ว่าพวกเขาจะทำด้วยการแสดงออกปกติ นั่นคืออินพุตควรถูกส่งโดยตรงไปยังนิพจน์ทั่วไปและสามารถใช้คำตอบแบบไบนารีเท่านั้น (จับคู่ / ไม่ตรงกัน) ในส่วนต่อมาของรหัส อินพุตไม่ควรถูกตรวจสอบหรือเปลี่ยนแปลงโดยสิ่งใดนอกจากนิพจน์ที่ตรงกัน ข้อยกเว้น : การกินอาหารขึ้นบรรทัดใหม่ด้วยบางสิ่งที่คล้ายกับรูบี้chomp
ก็ดี
โปรแกรมของคุณควรมีรายการเดียว (ตามด้วยตัวเลือก\n
หรือEOF
ถ้าทำให้ง่ายขึ้น) จากรายการใดรายการหนึ่งจาก stdin และพิมพ์เพื่อ stdout ชื่อของรายการนั้น ในกรณีนี้รายการของเรามีการตั้งชื่อและItaly
USA
ในการทดสอบรหัสของคุณเพียงแค่เรียกใช้ทั้งสองรายการ พฤติกรรมอาจไม่ได้กำหนดสำหรับสตริงที่ไม่ได้เกิดขึ้นในรายการ
เกณฑ์การให้คะแนน
สิ่งนี้อาจจะต้องทำในแต่ละภาษา ในภาษา Perl
m/foobarbaz/
เป็นนิพจน์ทั่วไปที่ตรงกัน อย่างไรก็ตามใน Python
import re
re.compile('foobarbaz')
ทำสิ่งเดียวกัน เราจะไม่นับคำพูดของ Python ดังนั้นฉันบอกว่าเราไม่นับm/
และสุดท้าย/
ใน Perl ในทั้งสองภาษาข้างต้นควรได้รับคะแนน 9
เพื่อชี้แจงจุดที่ยกขึ้นโดยอภิสิทธิ์ความยาวที่แท้จริงของนิพจน์การจับคู่คือคะแนนแม้ว่าคุณจะสร้างมันแบบไดนามิก ตัวอย่างเช่นถ้าคุณพบว่ามีการแสดงออกที่มีมนต์ขลังm
,
n="foo(bar|baz)"
m=n+n
จากนั้นคุณไม่ควรรายงานคะแนน 12: m
มีความยาว 24 และเพื่อให้ชัดเจนยิ่งขึ้นนิพจน์ทั่วไปที่สร้างขึ้นไม่สามารถพึ่งพาอินพุตได้ นั่นจะเป็นการอ่านอินพุตก่อนที่จะส่งผ่านไปยังนิพจน์ทั่วไป
ตัวอย่างเซสชัน
input> Calabria
Italy
input> New Hampshire
USA
input> Washington
USA
input> Puglia
Italy
*อันที่จริงมันเป็นเรื่องโกหก ฉันไม่เคยมีปัญหาใด ๆ กับเรื่องนี้เลย
USA
ในกรณีที่มีสตริงดังกล่าวดังนั้นคุณจะต้องตรวจสอบภูมิภาคอิตาลีและกลับมาเป็นUSA
อย่างอื่น