Kami sudah memiliki masalah meta-regex-golf yang terinspirasi oleh komik xkcd
Tapi, golf regex ini terlihat menyenangkan juga! Saya ingin membedakan antara negara bagian AS dan wilayah Italia. Mengapa? Saya warga negara dari kedua negara, dan saya selalu mengalami masalah * ini .
Wilayah Italia adalah
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
dan negara bagian AS adalah
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
Tugas Anda adalah menulis program yang membedakan daftar ini dengan ekspresi reguler. Ini adalah permainan baru, jadi inilah
Aturan
- Membedakan antara daftar harus dilakukan dengan satu ekspresi reguler yang cocok.
- Skor Anda adalah panjang dari ekspresi reguler itu, lebih kecil lebih baik.
Untuk menjadi jelas: semua pekerjaan harus dilakukan dengan ekspresi reguler - tanpa filter, tanpa penggantian, tidak ada apa-apa ... bahkan jika itu juga dilakukan dengan ekspresi reguler. Artinya, input harus diteruskan langsung ke ekspresi reguler, dan hanya jawaban biner (kecocokan / tidak ada kecocokan) yang dapat digunakan oleh bagian kode selanjutnya. Masukan tidak boleh diinspeksi atau diubah dengan apa pun kecuali ekspresi yang cocok. Pengecualian : makan baris baru dengan sesuatu yang mirip dengan Ruby chomp
baik-baik saja.
Program Anda harus mengambil satu entri (opsional diikuti oleh \n
atau EOF
jika itu membuat segalanya lebih mudah) dari salah satu daftar dari stdin, dan cetak untuk stdout nama daftar itu. Dalam hal ini, daftar kami diberi nama Italy
dan USA
.
Untuk menguji kode Anda, cukup jalankan kedua daftar itu. Perilaku mungkin tidak ditentukan untuk string yang tidak muncul dalam daftar.
Masalah Penilaian
Ini mungkin harus dilakukan berdasarkan bahasa-per-bahasa. Di Perl,
m/foobarbaz/
adalah ekspresi reguler yang cocok. Namun, dengan Python,
import re
re.compile('foobarbaz')
melakukan hal yang sama. Kami tidak akan menghitung tanda kutip untuk Python, jadi saya katakan kami tidak menghitung m/
dan terakhir /
dalam Perl. Dalam kedua bahasa, yang di atas harus menerima skor 9.
Untuk memperjelas poin yang diajukan oleh Abhijit , panjang sebenarnya dari persamaan yang cocok adalah skor, bahkan jika Anda menghasilkannya secara dinamis. Misalnya, jika Anda menemukan ekspresi magis m
,
n="foo(bar|baz)"
m=n+n
maka Anda tidak boleh melaporkan skor 12: m
memiliki panjang 24. Dan hanya untuk lebih jelas, ekspresi reguler yang dihasilkan tidak dapat bergantung pada input. Itu akan membaca input sebelum meneruskannya ke ekspresi reguler.
Contoh Sesi
input> Calabria
Italy
input> New Hampshire
USA
input> Washington
USA
input> Puglia
Italy
* Sebenarnya, itu bohong. Saya tidak pernah memiliki masalah dengan ini sama sekali.
USA
jika string seperti itu, maka Anda hanya perlu memeriksa wilayah Italia, dan mengembalikan USA
sebaliknya.