부울 또는 음이 아닌 정수 입력을 사용하는 완전한 프로그램을 작성하십시오. 다음과 같아야합니다.
- 입력 값이 잘못된 경우 자체 소스 코드 출력
- 입력 값이 정확한 경우 자체 소스 코드를 반대로 출력
프로그램은 palindromic 일 수 없으며 어떤 방식으로도 자체 소스 코드를 읽을 수 없습니다.
이것은 코드 골프입니다-가장 짧은 코드는 바이트 단위입니다.
부울 또는 음이 아닌 정수 입력을 사용하는 완전한 프로그램을 작성하십시오. 다음과 같아야합니다.
프로그램은 palindromic 일 수 없으며 어떤 방식으로도 자체 소스 코드를 읽을 수 없습니다.
이것은 코드 골프입니다-가장 짧은 코드는 바이트 단위입니다.
답변:
'rd3*I?rH
우리가 이미> <>, Vitsy와 Minkolang 답변을 가지고 있기 때문에 이것을 게시하는 것이 조금 어색합니다. 표준 quine에 유일하게 추가 된 것은 I
(정수 입력 읽기), ?
(진실한 경우 다음에 실행) 및 r
(역 스택)입니다.
{`"_~"+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.
}_~
g
.
_WQjN*2]"_WQjN*2]
표준 Pyth quine의 간단한 수정.
입력을 스택으로 푸시하거나 온라인 인터프리터에서 미리 스택에 입력을 넣으려면 -v 플래그 (+1 바이트)가 필요합니다.
'rd3*$?rol?!;70.
정수 입력 만 허용 된 경우 (예 : 거짓은 0, 진실은 1) 동일한 양의 바이트 (플래그 없음)에 대해 아래를 수행 할 수 있습니다.
'rd3*ic%?rol?!;80.
> <>에 대한 진실 / 거짓은 각각 0과 0이 아닙니다.
... 나는 CJam을 때리고 있어요! (이상 소리로) 엄마! 봐, 엄마, 내가 했어요!
'rd3 * i86 *-) rl \ O
설명:
'rd3 * i86 *-(rl \ O 표준 quine, 그러나 뒤틀림 : '소스 코드를 문자열로 캡처 rd3 * ASCII로 '문자 만들기 i86 *-입력 문자를 ASCII로 가져온 다음 48을 뺍니다. 0이면 if 문은 다음 명령어를 건너 뜁니다. (r 스택의 맨 위 항목이 0이면 다음 항목을 수행하지 마십시오. 다음 항목은 역순입니다. l \ O 스택을 인쇄합니다.
v'rd3 *} v) rZ v 입력을 변수로 캡처하십시오. '다른 것을 만날 때까지 소스를 캡처' r 스택을 뒤집습니다. d3 * '를 스택으로 밉니다. } 스택을 오른쪽으로 회전시킵니다. v) 변수 (입력)를 스택에 넣고 0이 아닌지 테스트합니다. r 그렇다면 스택을 뒤집으십시오. Z 스택의 모든 것을 출력합니다.
$=_=>'$='+(_?$:[...''+$].reverse().join``)
이것은 내 Bling Quine 의 수정입니다 . 길이도 두 배입니다.
prompt()
Node.JS로 전환하지 않는 한 그 수단 이 필요하다고 생각합니다. $=_=>(A=`$=${$};$(prompt())`,alert(_?A:[...A].reverse().join``));$(prompt())
골프를 더 많이 할 수는 있지만 제대로 작동 한다고 생각 합니다.
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
"66*2-n,?r$O.
이것은 다음 네 문자를 제외하고 표준 퀴인과 정확히 같습니다 n,?r
. n
입력에서 정수를 가져 와서 ,
반전 시키므로 입력이 사실이면 ?
건너 뜁니다 r
. 그렇지 않으면 r
스택을 반대로하여 스택이 역순으로 출력되도록합니다.
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);}}
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$c
및 34
큰 따옴표의 형식을 지정하는 데 사용됩니다s.format(s,34,s)
다 합쳐그런 다음 new StringBuffer(s).reverse()
필요한 경우 입력 부울을 기반으로 quine-String을 되 돌리는 데 사용됩니다.
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è?
온라인으로 사용해보십시오. ( 개행이없는?
명시적인 인쇄입니다 )