정규식 폴리 글 로트 만들기


19

최소 2 개의 정규 표현식 (또는 버전)에서 작동하는 정규 표현식을 작성하고 실행중인 각 버전 (또는 버전)에서 다른 문자열과 일치시킵니다.

이 챌린지에서 일치시킬 문자열은 아래 나열된 Ubuntu 코드 이름의 첫 단어입니다. 정규식이 목록의 맨 위에서 일치해야합니다. 즉, 3 개 맛에 정규식 작동하는 경우가 일치해야 Warty Hoary하고 Breezy다른 사람을, 그리고.

Warty
Hoary
Breezy
Dapper
Edgy
Feisty
Gutsy
Hardy
Intrepid
Jaunty
Karmic
Lucid
Maverick
Natty
Oneiric
Precise
Quantal
Raring
Saucy
Trusty
Utopic
Vivid
Wily
Xenial
Yakkety
Zesty
17.10
18.04
18.10
19.04
19.10
...

정규식이 26 가지 이상의 맛으로 작동하는 경우 대신 우분투 버전 번호를 일치시킬 수 있습니다. 17.10부터 시작하여 새 맛마다 두 번째 숫자를 04이면 10으로 변경하고 첫 번째 숫자를 늘리고 그렇지 않으면 두 번째 숫자를 04로 변경하십시오.

각 맛에서 정규 표현식은 가정 된 문자열과 일치해야하며 코드 이름에 국한되지 않습니다. 후행 줄 바꿈은 중요하지 않습니다. 즉, 정규식은 후행 줄 바꿈이없는 문자열 만 일치하거나 후행 줄 바꿈이있는 문자열 만 일치하거나 둘 다 일치 할 수 있습니다. 그리고 그것은 다른 풍미에서 일관 될 필요는 없습니다. 입력이 인쇄 가능한 ASCII로되어 있다고 가정 할 수 있습니다 (후행 줄 바꿈이있는 경우 제외).

당신의 점수는 (코드의 길이 +10) / ((향수) ^ 2)입니다. 최저 점수가 이깁니다.


1
"각 맛에서 정규 표현식은 가정 된 문자열과 일치해야하며 다른 문자열과 일치하지 않아야합니다."라는 의미입니다. 이는 각 정규 표현식이 하나의 우분투 버전 이름 만 일치하고 다른 이름은 일치하지 않지만 잠재적으로 다른 비 버전과 일치 할 수 있음을 의미합니까? 이름 문자열이거나 위 목록의 버전 이름이 아니더라도 정규 표현식이 정확한 문자열 만 일치하고 다른 문자열은 일치하지 않는다는 의미입니까?
Sp3000

@ Sp3000 정확한 문자열과 일치해야하며 다른 문자열은 없어야합니다.
jimmy23013

답변:


24

87 바이트, 5 가지 맛, (87 + 10) / 25 = 3.88

^(((?=W)[[:word:]&&]art|Ho(?=a)\ar|Bre(?=ez)[]e]\z|E(?=dg)[[d]]g)y|(?=Da)[D-[E]]apper)$

나는 맛을 테스트하기 쉬운 지금갔습니다.

일반적인 구조는 ^((...)y|...)$ 즉, 후행을 제거하고 y앵커를 추가하는 것입니다.

사마귀 (PCRE)

(?=W)[[:word:]&&]art

PCRE와 Ruby에서 [[:word:]]단어 문자와 일치하는 POSIX 문자 클래스입니다. 다른 특징에서는 [[:word:]문자 클래스를 얻은 다음 리터럴 을 얻습니다 &&].(?=W) 어설 션에 . Ruby를 실패로 만드는 &&것은 POSIX 클래스와 교차하는 데 사용되는 반면 PCRE &&에서는 특별한 의미가 없습니다.

노인 (자바 스크립트)

Ho(?=a)\ar

어떤 이유로 든 Javascript는 여러 가지 중에서 유일한 맛입니다. \a 문자 그대로a 입니다. 다른 풍미에서는 종 특성 (ASCII 7)과 일치합니다.

미풍 (파이썬)

Bre(?=ez)[]e]\z

Python과 Javascript에서 \z리터럴 z은 다른 특징 $에서 문자열 앵커 의 끝과 같습니다 . Javascript가 실패하도록하려면 char 클래스를 사용합니다. char 클래스 []e]는 비어있는 char 클래스 이고 Javascript에서는 []리터럴 e]이고 []e]Python 에서는 2 자 클래스 입니다.

Dapper (.NET)

(?=Da)[D-[E]]apper

에서는 .NET, [D-[E]]세트 제거 세트 차이 [E]에서를 [D]. PCRE, Javascript 및 Python에서 클래스 [D-[E]는 리터럴입니다.] 입니다. 루비는 조금 다르지만 어떤 이유로 든 [D-[E]]일치 하는 클래스로 구문 분석 E하지만 아직 그 이유를 알지 못했습니다 ...

에지 (루비)

E(?=dg)[[d]]g

루비는 char 클래스 안에 char 클래스를 허용하므로 [[d]]실제로는 [d], 또는 just 과 같습니다 d. 다른 풍미에서, 우리는 [[d]리터럴을가 ]집니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.