입력 값이 포함 된 퀴네 인쇄


15

직무

에서 a~ 까지의 문자로만 구성된 입력에 문자열이 제공 됩니다 z. 즉, 입력이 정규식과 일치합니다 /^[a-z]*$/.

출력은 동일한 언어로 된 완전한 프로그램이어야하며, 소스 코드에는 입력이 포함되어 있으며 적절한 퀴네입니다.

프로그램은 입력 abc과 출력을 받습니다 :

...abc...

위의 내용은 입력 및 출력이없는 동일한 언어의 완전한 프로그램이어야합니다.

...abc...

즉 자체 출력됩니다.

채점

이것은 입니다. 바이트 단위의 최단 답변이 이깁니다.

참고 문헌


3
흠 .. 'quat'(퀸 + 고양이)처럼?
Matthew Roh

답변:


7

파이썬 3, 57 61 바이트

lambda x:"s='s=%r;print(s%%s)';print(s%s)".replace('s',x+'x')

여기 에서 기본 Python 3 quine을 가져 와서 변수 이름을 입력으로 바꿉니다.

참고 : As이 같은 예약 된 키워드에 대한 작업을하지 않는, 의견 하이퍼 중성미자에 의해 지적 for, if

예약 키워드 'x'중 아무 숫자 나 끝나지 않는 문자를 추가하면 이 문제가 해결됩니다. (Ørjan Johansen).


변수 이름을 사용하는 것이 매우 독창적입니다.
Leaky Nun

3
"for"파이썬에서 input 또는 다른 예약어 에는 작동하지 않습니다 .
HyperNeutrino

확인할 수 있습니다. 가능한 모든 입력에 대해 작동하지는 않습니다. 온라인으로 사용해보십시오
mbomb007

@HyperNeutrino는 또한이 문제를 해결하는 방법을 모릅니다
c ..

과 같이 키워드 끝에없는 추가 문자를 추가 할 수 'x'있습니다.
Ørjan Johansen 님이

6

젤리 , 9 바이트

발전기

;“¶Øv”ṾØv

온라인으로 사용해보십시오!

작동 원리

;“¶Øv”ṾØv  Main link. Argument: s (string of letters)

;“¶Øv”     Concatenate s and the string "\nØv".
      Ṿ    Uneval; get its string representation.
           (implicit) Print the previous return value since the next link is an
           otherwise unparsable nilad.
       Øv  Set the return value to "Ṙv".

입력이 quine인 경우 다음 프로그램이 생성됩니다.

“quine
Øv”Ṙv

온라인으로 사용해보십시오!

작동 원리

이것은 표준 Jelly quine입니다. 먼저,

“quine
Øv”

왼쪽 인수와 반환 값을 문자열로 설정합니다 "quine\nØv".

그런 다음 문자열 표현 (이전 블록의 코드)을 인쇄하고 변경되지 않은 문자열을 반환합니다.

그런 v다음 왼쪽 인수를 사용하여 Jelly 프로그램에 입력으로 전달합니다.

quine
Øv

모든 Jelly 프로그램 에서 마지막 링크에 정의 된 기본 링크 만 실행되므로 첫 번째 라인은 완전히 무시됩니다.

마지막으로 Øv반환 값을로 설정합니다.이 값 "Ṙv"은 외부 프로그램이 완료 될 때 암시 적으로 인쇄됩니다.



4

하스켈 , 51 바이트

q 문자열을 받아서 문자열을 반환합니다.

q s|t<-"main=putStr$fst`mappend`show$"=t++show(t,s)

온라인으로 사용해보십시오!

의 출력 예 putStr$q"test":

main=putStr$fst`mappend`show$("main=putStr$fst`mappend`show$","test")

온라인으로 사용해보십시오!

  • 메인 quine 텍스트와 원하는 문자열을 튜플에 넣습니다.
  • fst본문을 추출하는 데 사용 합니다.
  • 용도는 show문자열로 전체 튜플을 켭니다.
  • mappend이전의 두 기능을 결합하는 데 사용 합니다. 편리하게 mappend두 함수에서 각 함수를 인수에 적용 mappend하고 결과 유형 (여기서는 문자열 연결)에 대한 결과를 결합하는 함수를 제공합니다 .

4

언더로드 , 14 바이트

(~aSaS(:^)S):^

온라인으로 사용해보십시오!

(test)(~aSaS(:^)S):^– 그 자체는 퀴네 로 사용하십시오 .

작동 원리

  • 언더로드는 연결형 (스택 기반) 난해한 언어입니다. 입력 읽기를 지원하지 않으므로 인수는 처음에 스택에 배치됩니다.
  • (test)그리고 (~aSaS(:^)S)이렇게 위에 후자, 스택에 자신을 배치, 문자열 리터럴입니다.
  • :(~aSaS(:^)S)스택의 맨 위에 문자열을 복제 한 다음 ^해당 내용을 서브 프로그램으로 실행합니다.
  • ~스택의 상위 2 개 요소를 (test)교체 하므로 최상위입니다.
  • a(test)여분의 괄호.
  • S((test))스택의 맨 위에 문자열 을 가져 와서 외부 괄호 (문자 그대로 구문)없이 인쇄합니다.
  • 이제 스택 aS의 나머지 (~aSaS(:^)S)를 괄호로 유사하게 인쇄합니다 .
  • 마지막으로 (:^)Sfinal을 인쇄합니다 :^.

실제로 )(입력으로 작동하지 않는다고 생각합니다.
Rɪᴋᴇʀ

@Riker True, Underload는 불행히도 불일치 괄호를 지원하지 않습니다. 그러나 질문은 a-를 지정합니다 z.
Ørjan Johansen 님이

아, 알았어요 눈치 채지 못했습니다.
Rɪᴋᴇʀ

4

언더로드 , 14 바이트

a(aS(:^)S)~*:^

온라인으로 사용해보십시오!

다른 Underload 답변과 다른 접근 방식. 그 자체가 퀴인 것이 아니라 퀴인을 구성합니다. 흥미롭게도 동일한 바이트 수로 나옵니다. 스택에서 인수를 가져 와서 표준 출력으로 출력하는 함수입니다.

설명

a(aS(:^)S)~*:^
a               Generate a string literal containing the input
 (aS(:^)S)~*    Prepend "aS(:^)S"
            :^  Mockingbird: run the resulting function with itself as argument

결과 함수는 다음과 같습니다.

aS(:^)S(input)
aS              Print a string literal containing the argument
  (:^)S         Print ":^"
       (input)  Push "input" onto the stack

즉, 자체를 포함하고 그 뒤에 문자열 리터럴을 인쇄합니다 :^. 이것은 방금 인쇄 된 것입니다 (방금 인쇄 된 것이 처음에 실행하기 위해 실행 한 코드와 동일하기 때문에).


a입력에가 포함되어있을 때 stderr에 인쇄 된 세그먼테이션 오류 오류를 염두에 두지 않으면 TIO 에서처럼 초기 값을 삭제할 수 있습니다 a.
Ørjan Johansen 님이

나는 프로그램의 작업이 이미 그 시점에서 완료되었고 (입력에 나타나는 문자 가 아니라면 모든 프로그램이 반드시 아무것도하지 않거나 충돌하지 않는다는 사실에 기초하여 사용자가 제공하는 문자열 리터럴을 실행한다고 생각조차하지 않았습니다 . 나는 그것이 TIO에만 해당되는 것이라고 생각하지도 않습니다. 프로그램이 유효하지 않지만 충돌시 원하는 출력이 이미 생성되었습니다.

2

V , 9 바이트

ñ"qPxÉÑ~j

온라인으로 사용해보십시오!

이것은 표준 V quine 의 수정입니다. 이것이 1 바이트 더 길다는 것을 자랑스럽게 생각합니다.

16 진 덤프 :

00000000: f122 7150 78c9 d17e 6a                   ."qPx..~j

설명:

ñ           " Record the following commands into register 'q'
 "qP        " Paste register 'q' before all input
    x       " Delete the last character of what we just pasted (this will be a 'ÿ')
     ÉÑ     " Insert 'Ñ' at the beginning of this line
       ~    " Toggle the case of this character
        j   " Move down a line. During playback, this will cancel playback of the current macro,
            " So everything after here is a NOOP

그런 다음 녹음이 암시 적으로 중지되고 재생됩니다. 다음과 같은 출력이 생성됩니다.

ñ"qPxÉÑ~jHello

j매크로 재생이 중단 되므로 아무 것도 Hello실행 되지 않습니다 .




1

레티 나 , 14 바이트

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

\(\`^
¶\(*S1`|

온라인으로 사용해보십시오!

input의 x경우 다음을 출력합니다.


\(*S1`|x
\(*S1`|x

설명

출력은 표준 quine 의 작은 수정입니다 . |x빈 정규식 대신 정규식을 사용합니다 . 때문에 |여전히 허용 (그리고 우선시) 빈 일치, 기능 자체가 있기 때문에 영향을받지되지 않으며,x 문자 만 포함하므로 유효한 정규 표현식 구문이 보장됩니다.

이것을 인쇄하는 것은 실제로 quine 자체와 유사한 기술을 사용합니다. quine의 중복을 피하기 위해 ¶\(*S1`|문자열의 시작 부분에 한 번만 삽입 합니다. 정확히 소스 코드의 절반입니다. 줄 바꿈없이 두 번 인쇄하려면 구성을 사용합니다 \(\. 이는 구성을 사용하여 전체 프로그램을 그룹으로 묶고 스테이지 자체와 그룹을 둘 다 줄 바꿈없이 결과를 인쇄합니다.


1

apt , 14 바이트

"\"iQ ²ª`"+U ²

온라인으로 테스트하십시오! 의 입력에 대한 abc출력

"iQ ²ª`abc"iQ ²ª`abc

자체 출력합니다. 온라인으로 테스트하십시오!

설명

이것은 표준 페이로드 가능 Japt quine의 확장입니다.

"iQ ²"iQ ²

"iQ ²"      // Take this string.  iQ ²
      iQ    // Insert a quote.    "iQ ²
         ²  // Repeat this twice. "iQ ²"iQ ²
            // Implicit: output result of last expression

유일한 차이점은 ª`abc끝에 우리가 추가한다는 것 ||"abc"입니다. JavaScript는 기본적으로 입니다. 첫 번째 부분의 결과는 항상 비어 있지 않은 문자열 (거친)이므로 ||결코 실행되지 않습니다.

길이가 같은 여러 가지 대체 버전이 있습니다.

"iQ ²ª`abc"iQ ²ª`abc   quine||"abc"
"iQ ²ª$abc"iQ ²ª$abc   quine||abc
"iQ ²ª{abc"iQ ²ª{abc   quine||function(){ ... }
"iQ ²ªXabc"iQ ²ªXabc   quine||X.a(...) (X could be any uppercase letter or digit)
"iQ ²//abc"iQ ²//abc   quine//abc      (// is a comment in JS/Japt)
"iQ ²;[abc"iQ ²;[abc   quine;          (unmatched [ causes a parsing error)

0

CJam , 16 14 바이트

"`_~"q`';++`_~

온라인으로 사용해보십시오!

작동 원리

"`_~"           e# Push "`_~"
     q`         e# Push a string representation of the input (input wrapped in quotes)
       ';       e# Push a semicolon
         ++     e# Concatenate all this together
           `    e# Get the string representation of the resulting string
            _~  e# Duplicate it and eval it (pushing the original string on the stack again)

다음과 같은 결과가 나옵니다 "`_~\"test\";"`_~"test";.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.