Nous avons déjà un problème de méta-regex-golf inspiré par la bande dessinée xkcd
Mais ce golf regex a aussi l'air amusant! Je veux faire la distinction entre les États des États-Unis et les régions d'Italie. Pourquoi? Je suis citoyen des deux pays et j'ai toujours du mal avec ça * .
Les régions d'Italie sont
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
et les États des États-Unis sont
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
Votre travail consiste à écrire un programme qui distingue ces listes avec une expression régulière. Ceci est un nouveau jeu, voici donc le
Règles
- La distinction entre les listes doit être effectuée avec une seule expression régulière correspondante.
- Votre score est la longueur de cette expression régulière, plus c'est petit, mieux c'est.
Pour être clair: tout le travail doit être fait par l'expression régulière - pas de filtrage, pas de remplacements, pas rien ... même si ceux-ci se font aussi avec des expressions régulières. Autrement dit, l'entrée doit être passée directement dans une expression régulière, et seule la réponse binaire (correspondance / aucune correspondance) peut être utilisée par des parties ultérieures du code. L'entrée ne doit jamais être inspectée ou modifiée par autre chose que l'expression correspondante. Exception : manger une nouvelle ligne avec quelque chose qui ressemble à Ruby, chomp
c'est bien.
Votre programme doit prendre une seule entrée (éventuellement suivie \n
ou EOF
si cela facilite les choses) de l'une ou l'autre liste de stdin, et imprimer pour stdout le nom de cette liste. Dans ce cas, nos listes sont nommées Italy
et USA
.
Pour tester votre code, parcourez simplement les deux listes. Le comportement peut être indéfini pour les chaînes qui n'apparaissent pas dans la liste.
Problèmes de notation
Cela pourrait devoir être fait langue par langue. En Perl,
m/foobarbaz/
est une expression régulière correspondante. Cependant, en Python,
import re
re.compile('foobarbaz')
fait la même chose. Nous ne compterions pas les citations pour Python, donc je dis que nous ne comptons pas le m/
et final /
en Perl. Dans les deux langues, ce qui précède devrait recevoir un score de 9.
Pour clarifier un point soulevé par Abhijit , la longueur réelle de l'expression correspondante est le score, même si vous le générez dynamiquement. Par exemple, si vous avez trouvé une expression magique m
,
n="foo(bar|baz)"
m=n+n
alors vous ne devriez pas rapporter un score de 12: m
a une longueur de 24. Et juste pour être très clair, l'expression régulière générée ne peut pas dépendre de l'entrée. Ce serait lire l'entrée avant de la passer dans l'expression régulière.
Exemple de session
input> Calabria
Italy
input> New Hampshire
USA
input> Washington
USA
input> Puglia
Italy
* En fait, c'est un mensonge. Je n'ai jamais eu aucun problème avec ça.
USA
dans le cas d'une telle chaîne, il vous suffira donc de vérifier les régions italiennes, et de revenir USA
autrement.