문제
일부 코드에서 사용해야하는 정규식이 많이 있지만 정규식을 지원하지 않는 프로그래밍 언어를 사용하고 있습니다! 운 좋게도 테스트 문자열의 길이는 최대 길이이며 인쇄 가능한 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. 연결과 변경이 얼마나 강력하게 묶이는가에 대한 표준 설명을 사용하면 무엇이 문제입니까? (그리고 당신 은 샌드 박스를 사용하지 않은 것에 대한 변명의 여지가 없습니다)