주어진 문자열이 유효한 정규식인지 또는 StackExchange 네트워크의 사이트에서 제공되는 코드 스 니펫을 사용하지 않는지를 판별하는 프로그램을 작성해야합니다.
이 문제를 해결하기 위해 정규식 방언은 줄이자 대부분의 메타 문자 집합이 ()*?|\
됩니다. 따라서 내장 정규식 구문 분석기를 사용할 수 없습니다.
\
메타 문자를 이스케이프 처리하는 데 사용됩니다. 그 뒤에 메타 문자가 와야합니다.- 이스케이프 처리되지 않은 괄호는 균형을 이루어야합니다
*
및?
비 메타 문자, 괄호 그룹 또는 이스케이프 메타 문자 중 하나가 선행되어야한다.- 인쇄 가능한 다른 모든 ASCII 문자와 줄 바꿈, 탭 및 공백은 메타가 아닌 문자로 지원되어야합니다. 다른 문자를 포함하는 문자열에서 발생하는 일은 정의되지 않았습니다.
- 정규식의 실제 의미는이 문제에 중요하지 않습니다.
예
Truthy:
abc
a?
(a|)*
()
a|b*
\*
\\
\\*
a*b?(cd|e)
+
[
}
(123\))*
\|
(a(b(c|d)*e)*f)*
(|\)*)
(abc)+*
(abc)+
+abc
^ last test case is an actual newline
Falsy:
?abc
*
**
\
(
a*?
a?*
?
a)
(\)
(|\)*
\()
|*
(?:abc)
\\**
\n
채점
전체 점수는 StackExchange 관련 질문과 답변에서 가져온 스 니펫 수입니다.
- 반복 된 스 니펫은 사용 된 횟수만큼 계산됩니다.
- 공백은 Python, Haskell 및 기타 공백에 민감한 언어로 인해 자유롭게 추가 및 제거 할 수 있으며 스 니펫 수에는 포함되지 않습니다.
- 코드가 실제로 공백으로 작성된 경우는 예외입니다 .
- 이 도전 과제보다 오래된 질문, 답변 및 의견 (편집 시간 포함-필요한 경우 이전 개정 사용)에서 나온 한 모든 StackExchange 사이트에서 스 니펫을 사용할 수 있습니다. (2019 년 9 월 24 일 오후 3시 30 분 UTC)
- 스 니펫은 사전 형식화 된 코드 블록에 있는지 여부에 관계없이 질문, 답변 또는 주석 본문의 어느 곳에서나 올 수 있습니다.
- 스 니펫을 다른 스 니펫 중간에 연결하면 외부 스 니펫이 두 스 니펫으로 계산됩니다.
최저 점수가 이깁니다!
1
@RobinRyder 예, 변경됨
—
Beefster
게시물이이 챌린지보다 크거나 같을 수 있습니까? 즉,이 챌린지 본문의 스 니펫을 사용할 수 있습니까?
—
Jo King
"따라서 내장 정규식 파서를 사용할 수 없습니다"라는 말은 간단한 ya / nay에 대한 사용을 방해하도록 설계되었거나 대답에서 정규식을 전혀 사용할 수 없다는 것입니까?
—
user0721090601
@guifa 언어의 정규식 엔진을 가져 와서 주어진 정규식을 컴파일하는지 확인할 수 없도록 설계되었습니다. 내가 아는 모든 언어는 더 큰 메타 문자 집합과 특수 캡처 그룹을 지원하므로 모든 경우에이 문자 집합과 정확하게 일치하지는 않습니다.
—
Beefster
@ JL2210 두 개의 스 니펫을 만들 것입니다. 하나는 시작 부분과 다른 하나는 끝 부분입니다. 모든 테스트 사례를 통과하고이 과제보다 오래된 답변 / 질문 / 게시물에서 나온 한 개의 스 니펫을 사용할 수 있습니다.
—
Beefster