예열 : 정규식, 용지, 가위
이것은 매우 짧은 해결책이 있다는 것을 깨닫기 전에 원래 게시하고 싶었던 과제입니다. 그럼에도 불구하고 아래의 실제 도전에 대비하여 생각하는 것은 흥미로운 문제가 될 수 있습니다.
주기적 록, 페이퍼, 가위 방식으로 서로 일치하도록 세 개의 정규 표현식 R , P 및 S를 작성하십시오 . 특히, R은 일치 S를 , S는 일치 P 와 P가 일치 R을 하지만, R은 하지 않습니다 일치 P를 , S는 하지 않습니다 일치 R을 하고 P는 일치하지 않는 S를 . 다음은 편리한 테이블입니다.
Regex Matches Doesn't match
R S P
P R S
S P R
R , P 및 S 가 자신을 포함하여 다른 입력에서 수행하는 작업은 중요하지 않습니다 .
여기서 match 는 입력의 일부 (비어있는) 부분 문자열이 일치한다는 의미입니다. 경기는 전체 입력을 포함하지 않아도됩니다.
도전 과제 : Regex, Paper, Scissors, Lizard, Spock
이 문제를 해결하기 위해 RPS 변형 Rock, Paper, Scissors, Lizard, Spock ( The Big Bang Theory에 의해 대중화 됨)을 기반으로 위의 문제의 더 강력한 버전을 해결합니다 . RPSLV에는 두 가지 주기로 서로를이기는 다섯 가지 심볼이 있습니다.
- 바위 → 가위 → 도마뱀 → 종이 → Spock → 바위
- 바위 → 도마뱀 → Spock → 가위 → 종이 → 바위
입력으로 서로에게 주어질 때이 구조를 모방 한 5 개의 정규 표현식 R , P , S , L 및 V 를 작성해야 합니다. 해당 테이블은 다음과 같습니다.
Regex Matches Doesn't match
R L, S V, P
L V, P S, R
V S, R P, L
S P, L R, V
P R, V L, S
그냥 명확하게하기 위해, 당신은해야 하지 문자열과 일치 R
, P
등, 그러나 다른 정규 표현식에. 예 를 들어 정규 표현식 R 이 ^\w$
예이면 P 와 V 는 문자열과 일치 해야 ^\w$
하지만 S 와 L 은 일치 하지 않아야합니다.
다시 말하지만, match 는 입력의 적어도 하나의 (비어있는) 부분 문자열이 일치한다는 것을 의미합니다. 경기는 전체 입력을 포함하지 않아도됩니다. 예를 들어 \b
(단어 경계)는 hello
(시작과 끝에) 일치하지만 일치하지 않습니다 (^,^)
.
정규식 풍미를 사용할 수 있지만 답에 선택 사항을 명시하고 가능한 경우 선택한 풍미에 대한 온라인 테스터 링크를 제공하십시오. 풍미의 호스트 언어로 코드를 호출 할 수있는 정규식 기능을 사용할 수 없습니다 (Perl 풍미의 e
수정 자 등).
다른 구분자 (예 :)는 다른 문자에 /regex/
입력 할 때 정규식에 포함되지 않으며 정규식 외부에있는 수정자를 사용할 수 없습니다. 일부 맛은 여전히 같은 인라인 구문으로 수정자를 사용할 수 있습니다 (?s)
.
점수는 5 개 정규 표현식의 길이를 바이트 단위로 합한 것입니다. 낮을수록 좋습니다.
그것은 찾기 위해 많은 간단 것으로 판명 처음에 보이는 것보다이 문제에 대한 작업 솔루션을,하지만 난 최적의 솔루션을 찾는 것은 상당히 까다 롭습니다 바랍니다.
\b
(단어 경계) 일치는 hello
(시작과 끝에서 ) 일치 하지만 일치하지 않습니다 (^,^)
. "