Xkcd çizgi romanından esinlenilmiş bir meta-regex-golf problemimiz var .
Ancak, bu regex golf de eğlenceli görünüyor! ABD'nin eyaletleri ile İtalya'nın bölgeleri arasında ayrım yapmak istiyorum. Niye ya? Her iki ülkenin de vatandaşıyım ve bu konuda her zaman sorun yaşıyorum * .
İtalya'nın bölgeleri
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
ABD’nin devletleri
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
İşiniz, bu listeleri düzenli bir ifadeyle ayıran bir program yazmaktır. Bu yeni bir oyun, işte burada
kurallar
- Listeleri birbirinden ayırmak tek bir eşleştirme düzenli ifadesiyle yapılmalıdır.
- Puanınız, normal ifadenin uzunluğudur, daha küçük daha iyidir.
Açık olmak gerekirse, tüm çalışmalar düzenli ifadelerle yapılmalıdır - filtreleme yok, değişiklik yok, hiçbir şey yok ... normal ifadelerle de olsalar. Diğer bir deyişle, girdi doğrudan normal bir ifadeye geçirilmelidir ve yalnızca ikili cevap (eşleşme / eşleşme yok) kodun sonraki bölümlerinde kullanılabilir. Girdi, eşleşen ifade dışında hiçbir şey tarafından incelenmemeli veya değiştirilmemelidir. İstisna : Ruby'ninkine benzer bir şeyle yeni bir çizgi yemek chomp
iyidir.
Programınız , stdin'den bir listeden (isteğe bağlı olarak takip eden \n
veya EOF
işleri kolaylaştırırsa) tek bir giriş yapmalı ve bu listenin adını stdout'a yazdırmalıdır. Bu durumda listelerimiz Italy
ve USA
.
Kodunuzu test etmek için iki listeyi de kolayca çalıştırın. Davranış, listede bulunmayan dizgiler için tanımsız olabilir.
Puanlama Konuları
Bunun dil bazında yapılması gerekebilir. Perl'de
m/foobarbaz/
eşleşen bir düzenli ifadedir. Ancak, Python’da
import re
re.compile('foobarbaz')
aynı şeyi yapar. Python için alıntıları saymazdık, ben de Perl'de m/
final /
ve saymadığımızı söylüyorum . Her iki dilde de yukarıdaki puan 9 olmalıdır.
Abhijit'in yükselttiği bir noktayı netleştirmek için , eşleşen ifadenin gerçek uzunluğu, dinamik olarak oluştursanız bile puandır. Örneğin, sihirli bir ifade bulursanız m
,
n="foo(bar|baz)"
m=n+n
Öyleyse 12 puan almamalısınız: m
uzunluğu 24. Bu, normal ifadeye geçmeden önce girişi okumak olacaktır.
Örnek Oturum
input> Calabria
Italy
input> New Hampshire
USA
input> Washington
USA
input> Puglia
Italy
* Aslında, bu bir yalan. Bununla hiçbir zaman bir sorunum olmadı.
USA
böyle bir dize olması durumunda birinin geri dönmesine izin verir , bu nedenle sadece İtalyan bölgelerini kontrol etmeniz ve USA
aksi takdirde geri dönmeniz gerekir .