문제
일부 코드에서 사용해야하는 정규식이 많이 있지만 정규식을 지원하지 않는 프로그래밍 언어를 사용하고 있습니다! 운 좋게도 테스트 문자열의 길이는 최대 길이이며 인쇄 가능한 ASCII로만 구성됨을 알고 있습니다.
도전
사용자 입력해야 정규식과 개수 n
및 출력 인쇄 ASCII (ASCII 코드 (32)를 포함한 126, 구성된 모든 문자열 에
~
에 이하인 길이없이 탭이나 개행) n
정규식과 일치하는. 코드에 내장 정규식이나 정규식 일치 함수를 전혀 사용할 수 없습니다 . 정규식은 다음으로 제한됩니다.
- 리터럴 문자 (문자를 강제 탈출, 그래서, 문자 그대로하는
\.
리터럴.
,\n
리터럴n
단지에 해당 (n
)와\w
동일합니다w
당신은 지원 이스케이프 시퀀스에 필요하지 않습니다.). .
-와일드 카드 (모든 문자)- 문자 클래스
[abc]
는 "a 또는 b 또는 c"를[d-f]
의미하며 d에서 f까지 (즉, d 또는 e 또는 f)를 의미합니다. 문자 클래스에서 특별한 의미를 가지고있는 유일한 문자는[
와]
(항상 탈출 할 것이다, 그래서 그들에 대해 걱정하지 할),\
(이스케이프 문자, 물론),^
부정 인 문자 클래스의 시작 (에 ) 및-
(범위)입니다. |
-OR 연산자, 교대foo|bar
수단 중 하나foo
또는bar
과(ab|cd)e
일치하거나abe
또는cde
.*
-이전 토큰을 0 번 이상 반복, 욕심과 일치시킵니다 (가능한 한 여러 번 반복하려고 함)+
-탐욕스럽고 여러 번 반복?
-0 회 또는 1 회- 대한 그룹 토큰에 괄호로 그룹화
|
,*
.+
또는?
입력 정규식은 항상 유효합니다 (즉, 당신은 같은 입력을 처리 할 필요가 없다 ?abc
거나 (foo
또는 유효하지 않은 입력). 원하는 순서대로 문자열을 출력 할 수 있지만 각 문자열은 한 번만 나타나야합니다 (중복은 출력하지 마십시오).
테스트 사례
입력 : .*
, 1
출력 : (빈 문자열), ,
!
, "
, ..., }
,~
입력 : w\w+
, 3
출력 : ww
,www
입력 : [abx-z][^ -}][\\]
, 3
출력 : a~\
, b~\
, x~\
, y~\
,z~\
입력 : ab*a|c[de]*
, 3
출력 : c
, cd
, ce
, aa
, cde
, ced
, cdd
, cee
,aba
입력 : (foo)+(bar)?!?
, 6
출력 : foo
, foo!
, foofoo
,foobar
입력 : (a+|b*c)d
, 4
출력 : ad
, cd
, aad
, bcd
, aaad
,bbcd
입력 : p+cg
, 4
출력 : pcg
,ppcg
입력 : a{3}
, 4
출력 :a{3}
승자
이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이길 것입니다!
|
거의 이해가되지 않습니다. 중첩 그룹 또는을 처리하지 않는 것 같습니다 a|b|c
. 연결과 변경이 얼마나 강력하게 묶이는가에 대한 표준 설명을 사용하면 무엇이 문제입니까? (그리고 당신 은 샌드 박스를 사용하지 않은 것에 대한 변명의 여지가 없습니다)