Mamy już problem z meta-regex-golfem zainspirowany komiksem xkcd
Ale ten regex golf też wygląda zabawnie! Chcę rozróżnić stany USA i regiony Włoch. Czemu? Jestem obywatelem obu krajów i zawsze mam z tym problem * .
Regiony Włoch to
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
i stany USA są
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
Twoim zadaniem jest napisanie programu, który odróżnia te listy wyrażeniem regularnym. To jest nowa gra, więc oto
Zasady
- Rozróżnienia między listami należy dokonać za pomocą jednego pasującego wyrażenia regularnego.
- Twój wynik to długość tego wyrażenia regularnego, im mniej, tym lepiej.
Żeby było jasne: wszystkie prace muszą być wykonywane przez wyrażenie regularne - bez filtrowania, bez zamian, bez niczego ... nawet jeśli są one również wykonywane przy użyciu wyrażeń regularnych. Oznacza to, że dane wejściowe powinny być przekazywane bezpośrednio do wyrażenia regularnego, a tylko odpowiedź binarna (dopasowanie / brak dopasowania) może być wykorzystana w późniejszych częściach kodu. Dane wejściowe nigdy nie powinny być sprawdzane ani zmieniane za pomocą pasującego wyrażenia. Wyjątek : jedzenie nowej linii z czymś podobnym do Ruby chomp
jest w porządku.
Twój program powinien pobrać pojedynczy wpis (opcjonalnie po nim \n
lub EOF
jeśli to ułatwia) z dowolnej listy ze standardowego wejścia i wypisać na standardowe wyjście nazwę tej listy. W takim przypadku nasze listy mają nazwy Italy
i USA
.
Aby przetestować kod, po prostu uruchom obie listy. Zachowanie może być niezdefiniowane dla ciągów, które nie występują na liście.
Problemy z punktowaniem
Może być to konieczne w zależności od języka. W Perlu
m/foobarbaz/
jest pasującym wyrażeniem regularnym. Jednak w Pythonie
import re
re.compile('foobarbaz')
robi to samo. Nie liczymy cytatów dla Pythona, więc mówię, że nie liczymy m/
ostatecznego wyniku /
w Perlu. W obu językach powyższe powinny otrzymać wynik 9.
Aby wyjaśnić punkt podniesiony przez Abhijita , rzeczywista długość pasującego wyrażenia jest wynikiem, nawet jeśli wygenerujesz go dynamicznie. Na przykład, jeśli znalazłeś magiczne wyrażenie m
,
n="foo(bar|baz)"
m=n+n
to nie powinieneś zgłaszać wyniku 12: m
ma długość 24. I dla jasności, wygenerowane wyrażenie regularne nie może zależeć od danych wejściowych. To byłoby odczytanie danych wejściowych przed przekazaniem ich do wyrażenia regularnego.
Przykładowa sesja
input> Calabria
Italy
input> New Hampshire
USA
input> Washington
USA
input> Puglia
Italy
* Właściwie to kłamstwo. Nigdy nie miałem z tym żadnych problemów.
USA
w przypadku takiego ciągu, dlatego musiałbyś po prostu sprawdzić regiony włoskie i zwrócić USA
inaczej.