Ya tenemos un problema de meta-regex-golf inspirado en el cómic xkcd
Pero, este golf regex también se ve divertido Quiero distinguir entre los estados de los EE. UU. Y las regiones de Italia. ¿Por qué? Soy ciudadano de ambos países y siempre tengo problemas con esto * .
Las regiones de Italia son
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
y los estados de los Estados Unidos son
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
Su trabajo es escribir un programa que distinga estas listas con una expresión regular. Este es un juego nuevo, así que aquí está el
Reglas
- La distinción entre listas debe hacerse con una sola expresión regular coincidente.
- Su puntaje es la longitud de esa expresión regular, más pequeño es mejor.
Para ser claros: todo el trabajo debe hacerse mediante la expresión regular: sin filtros, sin reemplazos, sin nada ... incluso si también se realizan con expresiones regulares. Es decir, la entrada debe pasar directamente a una expresión regular, y solo la respuesta binaria (coincidencia / no coincidencia) puede ser utilizada por partes posteriores del código. La entrada nunca debe ser inspeccionada o modificada por otra cosa que no sea la expresión coincidente. Excepción : comer una nueva línea con algo parecido a Ruby's chomp
está bien.
Su programa debe tomar una sola entrada (opcionalmente seguida de \n
o EOF
si facilita las cosas) de cualquiera de las listas desde stdin e imprimir para stdout el nombre de esa lista. En este caso, nuestras listas se nombran Italy
y USA
.
Para probar su código, simplemente ejecute ambas listas a través de él. El comportamiento puede ser indefinido para cadenas que no aparecen en la lista.
Problemas de puntuación
Esto podría tener que hacerse idioma por idioma. En perl
m/foobarbaz/
es una expresión regular coincidente Sin embargo, en Python,
import re
re.compile('foobarbaz')
hace lo mismo No contaríamos las citas para Python, por lo que digo que no contamos el m/
y final /
en Perl. En ambos idiomas, lo anterior debería recibir una puntuación de 9.
Para aclarar un punto planteado por Abhijit , la longitud real de la expresión coincidente es la puntuación, incluso si la genera dinámicamente. Por ejemplo, si encontraste una expresión mágica m
,
n="foo(bar|baz)"
m=n+n
entonces no debe informar una puntuación de 12: m
tiene una longitud 24. Y para ser más claro, la expresión regular generada no puede depender de la entrada. Eso sería leer la entrada antes de pasarla a la expresión regular.
Sesión de ejemplo
input> Calabria
Italy
input> New Hampshire
USA
input> Washington
USA
input> Puglia
Italy
* En realidad, eso es mentira. Nunca he tenido ningún problema con esto en absoluto.
USA
en caso de una cadena de este tipo, por lo tanto, solo tendría que verificar las regiones italianas y regresar de lo USA
contrario.