퀸 / 리버스 퀸


26

부울 또는 음이 아닌 정수 입력을 사용하는 완전한 프로그램을 작성하십시오. 다음과 같아야합니다.

  • 입력 값이 잘못된 경우 자체 소스 코드 출력
  • 입력 값이 정확한 경우 자체 소스 코드를 반대로 출력

프로그램은 palindromic 일 수 없으며 어떤 방식으로도 자체 소스 코드를 읽을 수 없습니다.

이것은 코드 골프입니다-가장 짧은 코드는 바이트 단위입니다.


6
내 언어에 부울이 없으면 그러나 0은 거짓이며 양의 정수는 진실입니다. 입력이 단지 0 또는 1이라고 가정 할 수 있습니까 (부울의 독립형으로-언어는 항상 조건부 연산자의 결과로 항상 두 가지 중 하나를 생성합니다)? 아니면 "실제"부울을 사용할 수 없으므로 정수를 지원해야합니까?
Martin Ender

답변:


9

Gol> <> , 9 바이트

'rd3*I?rH

우리가 이미> <>, Vitsy와 Minkolang 답변을 가지고 있기 때문에 이것을 게시하는 것이 조금 어색합니다. 표준 quine에 유일하게 추가 된 것은 I(정수 입력 읽기), ?(진실한 경우 다음에 실행) 및 r(역 스택)입니다.

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


동아리에 가입하다! : D 어쨌든 이기고있다. +1
Addison Crump

1
8 바이트 :sP#Hr?I"
Jo King

18

CJam, 17 16 바이트

{`"_~"+Wq~g#%}_~

여기에서 테스트하십시오.

표준 quine을 상당히 간단하게 수정했습니다. 17 바이트에 대한 다른 솔루션 :

{`"_~"+q~{W%}&}_~
{`"_~"+q~!2*(%}_~

입력이 0 또는 1이라고 가정 할 수 있다면 (CJam에는 전용 유형이없는 부울의 스탠드 인으로) 다음을 생략하여 15를 얻습니다 g.

{`"_~"+Wq~#%}_~

설명

{`"_~"+  e# Standard generalised quine framework. Leaves the source code on the stack. 
  W      e# Push a -1.
  q~     e# Read and evaluate input.
  g      e# signum, turning truthy values into 1 (leaving 0 unchanged).
  #      e# Power. -1^0 == 1, -1^1 == -1.
  %      e# Select every Nth element: a no-op for 1 and reverses the string for -1.
}_~

0과 1은 CJam의 부울이기 때문에 g.
Dennis

@ 데니스 그래 그래, 난 그것에 대해 확신하지 못했습니다.
Martin Ender

놀랍게도, 나는 어떻게 든 이것을 이겼다. oo 골프를 많이하더라도 놀라지 않을 것입니다. : D
애디슨 크럼

9

Pyth, 17 바이트

_WQjN*2]"_WQjN*2]

표준 Pyth quine의 간단한 수정.


젠장, 샌드 박스 처리 후 1 시간이 지난 후에이 게시물을 게시하기 위해 기다리고있었습니다.
lirtosiast

7

> <>, 17 바이트

입력을 스택으로 푸시하거나 온라인 인터프리터에서 미리 스택에 입력을 넣으려면 -v 플래그 (+1 바이트)가 필요합니다.

'rd3*$?rol?!;70.

정수 입력 만 허용 된 경우 (예 : 거짓은 0, 진실은 1) 동일한 양의 바이트 (플래그 없음)에 대해 아래를 수행 할 수 있습니다.

'rd3*ic%?rol?!;80.

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

> <>에 대한 진실 / 거짓은 각각 0과 0이 아닙니다.


6

Vitsy , 15 바이트

... 나는 CJam을 때리고 있어요! (이상 소리로) 엄마! 봐, 엄마, 내가 했어요!

'rd3 * i86 *-) rl \ O

설명:

'rd3 * i86 *-(rl \ O
표준 quine, 그러나 뒤틀림 :

'소스 코드를 문자열로 캡처
 rd3 * ASCII로 '문자 만들기
     i86 *-입력 문자를 ASCII로 가져온 다음 48을 뺍니다. 
                    0이면 if 문은 다음 명령어를 건너 뜁니다.
          (r 스택의 맨 위 항목이 0이면 다음 항목을 수행하지 마십시오.
                    다음 항목은 역순입니다.
            l \ O 스택을 인쇄합니다.

Vitsy의 최신 버전 , 11 바이트

v'rd3 *} v) rZ
v 입력을 변수로 캡처하십시오.
 '다른 것을 만날 때까지 소스를 캡처'
  r 스택을 뒤집습니다.
   d3 * '를 스택으로 밉니다.
      } 스택을 오른쪽으로 회전시킵니다.
       v) 변수 (입력)를 스택에 넣고 0이 아닌지 테스트합니다.
         r 그렇다면 스택을 뒤집으십시오.
          Z 스택의 모든 것을 출력합니다.

2

자바 스크립트 (ES6), 42 바이트

$=_=>'$='+(_?$:[...''+$].reverse().join``)

이것은 내 Bling Quine 의 수정입니다 . 길이도 두 배입니다.


이것은 실제로 아무것도 출력합니까? REPL에서만 작동하는 답변은 허용되지 않습니다.
feersum

1
@ETHproductions 함수를 호출하지만 여전히 아무 것도 인쇄하지 않습니다. 또한, 더 이상 퀴인은 아닙니다.
Dennis

@ 데니스 맞아. prompt()Node.JS로 전환하지 않는 한 그 수단 이 필요하다고 생각합니다. $=_=>(A=`$=${$};$(prompt())`,alert(_?A:[...A].reverse().join``));$(prompt())골프를 더 많이 할 수는 있지만 제대로 작동 한다고 생각 합니다.
ETHproductions

1
"귀하의 프로그램은 [...] 자체 소스 코드를 읽을 수 없습니다." 이 솔루션이이 범주에 속합니까?
ETHproductions

2

해 학적 인, 40 바이트

ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh

설명:

Burlesque는 고급 스택 및 코드 조작 기능을 내장하고 있습니다. 실제로, 프로그램의 소스 코드에는 액세스 할 수 없지만 나중에 실행될 나머지 코드에는 액세스 할 수 있습니다. 이 방법은 #Q우리가 모든 것을 추가해야 할 이유입니다 그것을 다음 모든 코드를 반환합니다 #Q우리가하고있는 무슨 그 코드를 ri#Q.

blsq ) #Q1 2++
12 -- this is the result of 1 2++
{1 2 ++} -- this is the result of #Q

++1 2스택 기반이기 때문에 기술적으로 잘못된 코드입니다. 그러나 코드를 조작하여 다음과 같이 실행할 수 있습니다 1 2++.

blsq ) #Q<-#q++1 2 
12

이러한 내장 기능을 사용하는 것은 매우 까다 롭고 아무도 quine 관련 항목을 제외하고는 생산적인 용도로 사용하지 않았습니다. 당신이 반대로 ++1 2하면 2 1++생산 21하지 않을 것입니다 얻을 12. 위의 코드가 생성하는 이유는 결국 포함 12하기 때문 입니다. 결국 우리는 단지 : p 이상을 실행하게 됩니다. 우리는 생산 하는 것을 끝내게됩니다 .#Q<-2 1++2 1++#q<-12

우리는 실제로 코드에서 사물을 바꿀 수 있습니다. 예를 들어이 코드는 ?+그 자체로 발생하는 모든 것을?*

blsq ) #Q(?+)(?*)r~5.-#q5 5?+
25

용법:

$ echo "1" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
hs fi sp "-<" j +. /\ "Q#ir" -~ HS 2Q#ir
$ echo "0" | blsq --stdin 'ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh'
ri#Q2 SH ~- "ri#Q" \/ .+ j "<-" ps if sh

2

하스켈, 126 (118) 108 바이트

main=readLn>>=putStr.([t,reverse t]!!);t=s++show s;s="main=readLn>>=putStr.([t,reverse t]!!);t=s++show s;s="

0또는 1입력으로 예상 됩니다.



2

파이썬 2, 51 바이트

s="print('s=%r;exec s'%s)[::1-2*0**input()]";exec s

0

Java 10 (전체 프로그램), 282 바이트

interface N{static void main(String[]a){var s="interface N{static void main(String[]a){var s=%c%s%1$c;s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}";s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}

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

Java 10 (람다 함수), 154 바이트

b->{var s="b->{var s=%c%s%1$c;s=s.format(s,34,s);return b?new StringBuffer(s).reverse():s;}";s=s.format(s,34,s);return b?new StringBuffer(s).reverse():s;}

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

설명:

interface N{                          // Class
  static void main(String[]a){        //  Mandatory main-method
    var s="interface N{static void main(String[]a){var s=%c%s%1$c;s=s.format(s,34,s);System.out.print(new Boolean(a[0])?new StringBuffer(s).reverse():s);}}";
                                      //   Unformatted source code
    s=s.format(s,34,s);               //   Format the source code (the quine-String)
    System.out.print(                 //   Print:
      new Boolean(a[0])?              //    If the input is true:
       new StringBuffer(s).reverse()  //     Print the quine-String reversed
      :                               //    Else:
       s);}}                          //     Print the quine-String as is

설명 :

  • var s포맷되지 않은 소스 코드를 포함
  • %s 이 문자열을 자체에 넣는 데 사용됩니다. s.format(...)
  • %c, %1$c34큰 따옴표의 형식을 지정하는 데 사용됩니다
  • s.format(s,34,s) 다 합쳐

그런 다음 new StringBuffer(s).reverse()필요한 경우 입력 부울을 기반으로 quine-String을 되 돌리는 데 사용됩니다.


0

05AB1E , 21 바이트

0"D34çý‚sè"D34çý‚sè

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

을 추가 하여 기본 수정 .0"D34çý"D34çý‚sè

설명:

0                        # Push 0 to the stack
                         #  STACK: [0]
 "D34çý‚sè"             # Push the string 'D34çý‚sè' to the stack
                         #  STACK: [0, 'D34çý‚sè']
            D            # Duplicate this string
                         #  STACK: [0, 'D34çý‚sè', 'D34çý‚sè']
             34ç         # Push '"' to the stack
                         #  STACK: [0, 'D34çý‚sè', 'D34çý‚sè', '"']
                ý        # Join the stack with '"' delimiter
                         #  STACK: ['0"D34çý‚sè"D34çý‚sè']
                 Â       # Bifurcate (short for Duplicate & Reverse)
                         #  STACK: ['0"D34çý‚sè"D34çý‚sè', 'ès‚Âýç43D"ès‚Âýç43D"0']
                        # Pair them up:
                         #  STACK: [['0"D34çý‚sè"D34çý‚sè','ès‚Âýç43D"ès‚Âýç43D"0']]
                   s     # Swap to get the boolean input (0 or 1)
                         #  STACK: [['0"D34çý‚sè"D34çý‚sè','ès‚Âýç43D"ès‚Âýç43D"0'], 1]
                    è    # Index the input into the list
                         #  STACK: ['ès‚Âýç43D"ès‚Âýç43D"0']
                         # (Output the top of the stack implicitly)

PS : 후행 줄 바꿈을 자동으로 인쇄합니다. 이것도 반대로해야한다면 대신 23 바이트입니다.

0"D34çý‚sè?"D34çý‚sè?

온라인으로 사용해보십시오. ( 개행이없는? 명시적인 인쇄입니다 )

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