Quinean 정규식 테스터


13

이 도전은 매우 간단합니다. 입력으로 정규식을 사용합니다.

그런 다음 소스 코드가 정규식과 일치하는지 여부에 대한 진실 / 거짓을 출력합니다. 그렇게 간단합니다! 두 가지만 더 :

  • quine 내장 없음; 그러나 파일 IO 등으로 코드의 소스 코드에 액세스 할 수 있습니다.
  • 이것은 이므로 바이트 단위의 가장 짧은 코드가 이깁니다!

소스 코드는 말이었다 경우 abc의 입력은 a\wc진정한 반환과의 입력은 a\dcfalse를 반환합니다.


예를 들어주세요?
Mama Fun Roll

1
@ CᴏɴᴏʀO'Bʀɪᴇɴ 아니오, 괜찮습니다.
Maltysen

2
1. 나는 단순한 문자 클래스를 가진 BRE가 충분히 구체적 이라고 생각하지 않습니다 . 어떤 BRE 기능을 지원해야합니까? 2. \dBRE에서 특별하지 않다; 문자와 일치합니다 d. 3. 특정 정규 표현식을 선택하면 해당 언어를 지원하는 언어로 문제를 제한 할 수 있으며 BRE를 지원하는 언어는 거의 없습니다. 의도적인가요?
Dennis

2
응답자에게 맡기는 것이 좋습니다. 언어 x 가 기본적으로 정규 표현식 풍미 y 를 사용하는 경우,이 과제에서 해당 풍미를 사용하도록하십시오.
Dennis

6
@Maltysen 왜 질문 본문에 하위 문자열 예제를 추가하지 않습니까?
feersum

답변:


14

Z 쉘, 12 바이트

grep "$@"<$0

Zsh 조건은 종료 코드 만 이해하며 스크립트는 0 또는 1로 종료됩니다.

또한, 검색이 인쇄되지 않은 빈 문자열 (소스 코드)와 함께 조합하여 truthy / falsy 값으로 될 수있는 불일치의 빈 하나 test/ [.

프로그램은 자체 파일을 읽지 만 OP의 주석 에 따르면 허용됩니다.


3
Aaand Dennis가 이겼습니다. ¯ \ _ (ツ) _ / ¯
코너 오브라이언

작동하지 않습니다. 공백이있는 패턴이 깨집니다.
feersum

트윗 담아 가기 지적 해 주셔서 감사합니다. 내 답변을 편집했습니다.
Dennis

2
이름에 공백이있는 파일에 쓰면 중단됩니다. 또는이라는 파일 -v입니다. 또는 ...
벤 밀우드

@ BenMillwood 나는 보통 그런 파일 이름으로 저장하지 않는다고 말하지만 zsh로 전환하면 바이트 수를 늘리지 않고 방탄을합니다.
Dennis


9

파이썬 3, 119 바이트

이것은 더 차갑게 보입니다 .IMO (그리고 파일을 읽지 않습니다).

(lambda i:print(bool(__import__('re').search(input(),i))))("(lambda i:print(bool(__import__('re').search(input(),i))))")

파이썬 3, 67 바이트

print(bool(__import__('re').search(input(),open(__file__).read())))

이 의견 을 읽은 후 추가되었습니다 .


int보다 짧습니다 bool.
고양이

7

줄리아, 64 54 바이트

r=readline;show(ismatch(Regex(r()),open(r,@__FILE__)))

Julia 정규식은 PCRE를 사용합니다. 파일의 소스 코드를 읽는 것이 quines의 표준 허점이지만,이 경우 명시 적으로 허용되었습니다. 후행 줄 바꿈없이 입력을받습니다.



2

Mathematica, 63 바이트

StringMatchQ[ToString[#0, InputForm], RegularExpression[#1]] & 

후행 공백에 유의하십시오. 표준 Mma quine 메커니즘을 사용하고 정규식과 일치하는지 테스트합니다.


2

펄, 21 바이트

open 0;$_=<0>=~$_

17 바이트 + 4 바이트 -pl0. 다음과 같이 실행하십시오.

echo open | perl -pl0 quinean

소스 파일에는 위의 코드 만 포함해야합니다 (shebang 없음, 후행 줄 바꿈 없음). 1정규식이 일치하면 출력 하고 일치하지 않으면 빈 문자열을 출력 합니다 (빈 문자열은 Perl에서 거짓).


입력이 개행으로 끝나지 않는 경우 4 바이트를 저장할 수 있습니다.

open 0;say<0>=~<>

다음과 같이 실행하십시오.

echo -n open | perl -M5.010 quinean

sayPerl 5.10+가 필요하고로 활성화해야합니다 -M5.010. Meta 에 따르면 " -M5.010필요한 경우 무료입니다"라는 점수는 17 바이트입니다.

작동 원리

이것은 표준 "속임수"퀘인에 대한 간단한 변형입니다.

open 0;print<0>

그러면 이름이 지정된 파일이 열리고로 $0내용을 읽습니다 <0>.

$_=<0>=~$_소스 파일에서 한 줄을 읽고 $_( -p플래그 가 읽은) 내용과 정규 표현식을 일치 시키고 결과를에 할당합니다 $_. 마지막에 자동으로 -p인쇄 $_됩니다.


2

줄프, 18 15 바이트

RegEx의 JS 풍미를 지원합니다. 여기 사용해보십시오! .

 h$code.value#i

댓글 :

  $code.value#      the document's element "code" (the program container)
_h            i     and output if it has (matches) the input string (i.e. regex)

어떤 브라우저에서 작동합니까? Chrome과 Firefox 모두 x.step기능이 아니라고 불평합니다 .
Dennis

@ 데니스 허. 어젯밤에 통역사를 깨뜨 렸어 야했는데 또 무엇이 잘못 되었나요? 나는 현재 디버깅 할 수 없으며 학교에 있습니다.
코너 O'Brien

좋은. 이제 문서의 요소 "code"에 바로 가기를 추가하여 더 짧게 만들 수 있습니다.
user48538

@ CᴏɴᴏʀO'Bʀɪᴇɴ 또한에 대한 참조 오류를 제공합니다 math.
Dennis

@ 데니스 아, 그 이유입니다. HTML을 업데이트하는 것을 잊었습니다. math.js를 추가했습니다. 너무 늦지 않으면 집에 도착하면 수정하겠습니다. (약 4 시간 후)
Conor O'Brien

1

𝔼𝕊𝕄𝕚𝕟, 14 자 / 26 바이트 (비경쟁)

⟮‼(ⒸⅩ222+ᶈ0)đï

Try it here (Firefox only).

챌린지 후 작성된 버그 수정 버전을 사용합니다.

설명

⟮‼(ⒸⅩ222+ᶈ0)đï // implicit: ï=input
⟮               // copy block: copy following code for later use
 (ⒸⅩ222+ᶈ0)   // take convert 10222 to char, add stuff inside copy block
‼           đï // check if input matches resulting string
               // implicit output

참고 : 복사 블록은 퀴네 연산자가 아닙니다. 변수 선언에 대한보다 다양한 대안이 될 것입니다.


1
10 으로 변경하면 바이트를 절약 할 수 있다고 생각합니다 .
lirtosiast
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.