Perl 및 PCRE 정규식, 280 바이트
^(?=(.*z){2})(?=(.*\(){43})(?=(.*\)){43})(?=(.*\*){22})(?=(.*\.){23})(?=(.*0){2})(?=(.*1){6})(?=(.*2){16})(?=(.*3){7})(?=(.*4){4})(?=(.*5){1})(?=(.*6){3})(?=(.*7){2})(?=(.*8){2})(?=(.*9){1})(?=(.*=){22})(?=(.*\?){22})(?=(.*\\){11})(?=(.*\^){2})(?=(.*\{){23})(?=(.*\}){23}).{280}\z
(약간) 더 읽기 쉽다 :
^
(?=(.*z){2})
(?=(.*\(){43})
(?=(.*\)){43})
(?=(.*\*){22})
(?=(.*\.){23})
(?=(.*0){2})
(?=(.*1){6})
(?=(.*2){16})
(?=(.*3){7})
(?=(.*4){4})
(?=(.*5){1})
(?=(.*6){3})
(?=(.*7){2})
(?=(.*8){2})
(?=(.*9){1})
(?=(.*=){22})
(?=(.*\?){22})
(?=(.*\\){11})
(?=(.*\^){2})
(?=(.*\{){23})
(?=(.*\}){23})
.{280}\z
이것은 기록 된대로 O (2 ^ n) 시간으로 실행되므로 매우 비효율적입니다. 테스트하는 가장 간단한 방법은 모든 발생을 대체하는 것이다 .*
와 .*?
먼저 확인하는 일치하는 경우가 발생 (이를 선형 시간에 일치 의미하지만 일치하지 않을 경우 여전히 지수 시간 소요).
기본적인 아이디어는 우리가 동일한 280 정규식의 길이를 시행하고, 몇 번 이상, 예를 들어 표시 정규식에서 각 문자를 강제로 내다 주장을 사용하는 것입니다 (?=(.*z){2})
강제로 z
두 배 이상에 표시하는 문자를. 2+43+43+22+23+2+6+16+7+4+1+3+2+2+1+22+22+11+2+23+23
280이므로 어떤 문자도 "추가"로 표현할 수 없습니다.
이것은 오토 그램 의 프로그래밍 예제로, 포함 된 각 문자의 수 (이 경우 총 길이)를 나열하여 자신을 설명하는 문장입니다. 나는 그것을 구성하는 데 상당히 운이 좋았습니다 (일반적으로 당신은 무차별 대입을 사용해야하지만 완전히 작성하기 전에 무차별 대입 프로그램을 테스트하는 동안이 솔루션을 우연히 발견했습니다).
Martin Ender와 공동 작업 한 Perl 및 PCRE 정규식 (253 바이트)
나는 일부 숫자 (대부분 9, 8 또는 7)를 생략하는 더 짧은 솔루션이있을 수 있다고 가정했습니다. Martin Ender가 아래와 같이 발견했습니다.
^(?=(.*z){2})(?=(.*\(){39})(?=(.*\)){39})(?=(.*\*){20})(?=(.*\.){21})(?=(.*0){4})(?=(.*1){6})(?=(.*2){11})(?=(.*3){6})(?=(.*4){3})(?=(.*5){2})(?=(.*6){3})(?=(.*9){4})(?=(.*=){20})(?=(.*\?){20})(?=(.*\\){9})(?=(.*\^){2})(?=(.*{){21})(?=(.*}){21}).{253}\z
읽을 수있는 버전 :
^
(? = (. * z) {2})
(? = (. * \ () {39})
(? = (. * \)) {39})
(? = (. * \ *) {20})
(? = (. * \.) {21})
(? = (. * 0) {4})
(? = (. * 1) {6})
(? = (. * 2) {11})
(? = (. * 3) {6})
(? = (. * 4) {3})
(? = (. * 5) {2})
(? = (. * 6) {3})
(? = (. * 9) {4})
(? = (. * =) {20})
(? = (. * \?) {20})
(? = (. * \\) {9})
(? = (. * \ ^) {2})
(? = (. * {) {21})
(? = (. *}) {21})
. {253} \ z