xkcd 만화에서 영감을 얻은 메타 정규식 골프 문제 가 이미 있습니다.
그러나이 정규식 골프도 재미있어 보입니다! 미국의 상태와 이탈리아의 지역을 구별하고 싶습니다. 왜? 나는 두 나라의 시민이며 항상 이것에 문제가 있습니다 * .
이탈리아의 지역은
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
미국의 주들은
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
당신의 임무는 정규식으로 이러한 목록을 구별하는 프로그램을 작성하는 것입니다. 이것은 새로운 게임이므로 여기
규칙
- 일치하는 단일 정규식을 사용하여 목록을 구별해야합니다.
- 당신의 점수는 정규 표현식의 길이이며, 작을수록 좋습니다.
명확하게 : 모든 작업은 정규 표현식으로 수행해야합니다. 정규 표현식으로도 수행되지만 필터링, 교체, 아무것도하지 않습니다. 즉, 입력을 정규식으로 직접 전달해야하며 코드의 이후 부분에서는 이진 응답 (일치 / 일치 없음) 만 사용할 수 있습니다. 입력은 일치하는 표현식 이외의 것으로 검사하거나 변경해서는 안됩니다. 예외 : Ruby와 비슷한 줄 바꿈을 먹는 것이 chomp
좋습니다.
단일 항목을해야 여러분의 프로그램은 (선택적으로 다음 \n
또는 EOF
표준 입력에서 두 목록에서 쉽게 일을하게 된 경우), 그 목록의 이름을 stdout에 인쇄 할 수 있습니다. 이 경우 목록의 이름은 Italy
및 USA
입니다.
코드를 테스트하려면 두 목록을 모두 실행하십시오. 목록에없는 문자열에 대해서는 동작이 정의되지 않을 수 있습니다.
채점 문제
이 작업은 언어별로 수행해야 할 수도 있습니다. 펄에서
m/foobarbaz/
일치하는 정규식입니다. 그러나 파이썬에서는
import re
re.compile('foobarbaz')
같은 일을합니다. 우리는 파이썬에 대한 따옴표를 세지 않을 것이므로 Perl 에서 m/
and final /
을 세지 않는다고 말합니다 . 두 언어 모두 위의 점수는 9 점입니다.
Abhijit가 제기 한 점을 명확히하기 위해 일치하는 표현식의 실제 길이는 동적으로 생성하더라도 점수입니다. 예를 들어, 마법의 표현을 발견하는 경우 m
,
n="foo(bar|baz)"
m=n+n
12 점을보고해서는 안됩니다 m
. 길이는 24입니다. 그리고 더 명확하게 말하면, 생성 된 정규식은 입력에 의존 할 수 없습니다. 정규식으로 전달하기 전에 입력을 읽습니다.
세션 예
input> Calabria
Italy
input> New Hampshire
USA
input> Washington
USA
input> Puglia
Italy
* 사실, 그것은 거짓말입니다. 나는 이것에 전혀 문제가 없었습니다.
USA
그러한 문자열의 경우 하나를 반환 할 수 있으므로 이탈리아 지역을 확인하고 USA
그렇지 않으면 반환해야 합니다.