Abbiamo già un problema con il meta-regex-golf ispirato al fumetto di xkcd
Ma anche questo golf regex sembra divertente! Voglio distinguere tra gli stati degli Stati Uniti e le regioni d'Italia. Perché? Sono cittadino di entrambi i paesi e ho sempre problemi con questo * .
Le regioni d'Italia sono
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
e gli stati degli Stati Uniti lo sono
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
Il tuo compito è scrivere un programma che distingua questi elenchi con un'espressione regolare. Questo è un nuovo gioco, quindi ecco il
Regole
- La distinzione tra liste deve essere fatta con una singola espressione regolare corrispondente.
- Il tuo punteggio è la lunghezza di quell'espressione regolare, più piccolo è meglio.
Per essere chiari: tutto il lavoro deve essere fatto dall'espressione regolare - nessun filtro, nessun rimpiazzo, niente di niente ... anche se quelli sono fatti anche con espressioni regolari. Cioè, l'input deve essere passato direttamente in un'espressione regolare e solo le risposte binarie (match / no match) possono essere utilizzate da parti successive del codice. L'input non deve mai essere ispezionato o modificato da nient'altro che dall'espressione corrispondente. Eccezione : mangiare una newline con qualcosa di simile a Ruby chomp
va bene.
Il tuo programma dovrebbe prendere una sola voce (facoltativamente seguita da \n
o EOF
se rende le cose più facili) da entrambi gli elenchi di stdin e stampare su stdout il nome di quell'elenco. In questo caso, i nostri elenchi sono denominati Italy
e USA
.
Per testare il tuo codice, esegui semplicemente entrambi gli elenchi. Il comportamento potrebbe non essere definito per le stringhe che non si verificano nell'elenco.
Problemi di punteggio
Questo potrebbe essere fatto su una base lingua per lingua. In Perl,
m/foobarbaz/
è un'espressione regolare corrispondente. Tuttavia, in Python,
import re
re.compile('foobarbaz')
fa la stessa cosa. Non contiamo le virgolette per Python, quindi dico che non contiamo il m/
e il finale /
in Perl. In entrambe le lingue, quanto sopra dovrebbe ricevere un punteggio di 9.
Per chiarire un punto sollevato da Abhijit , la lunghezza effettiva dell'espressione corrispondente è il punteggio, anche se lo si genera dinamicamente. Ad esempio, se hai trovato un'espressione magica m
,
n="foo(bar|baz)"
m=n+n
quindi non dovresti riportare un punteggio di 12: m
ha lunghezza 24. E solo per essere più chiaro, l'espressione regolare generata non può dipendere dall'input. Quello sarebbe leggere l'input prima di passarlo nell'espressione regolare.
Sessione di esempio
input> Calabria
Italy
input> New Hampshire
USA
input> Washington
USA
input> Puglia
Italy
* In realtà, è una bugia. Non ho mai avuto problemi con questo.
USA
in caso di tale stringa, quindi dovresti solo controllare le regioni italiane e restituireUSA
altrimenti.