Quine Suite 작성


30

우리는 많은 도전을 받았지만 많은 quine 형식은 비슷하며 quine에 약간의 차이를 만들 수 있습니다.

귀하의 작업은 동일한 언어 (최소 2 개)로 선택한 프로그램을 작성하는 것입니다.이 프로그램은 모두 자체 소스 코드를 출력하지만이 프로그램 중 어느 것도 문자를 공유 할 수 없습니다.

예를 들어 다음을 사용하여 프로그램을 만드는 경우 :

printf+qw(printf+qw(%s)x2)x2

다음 프로그램은 다음을 포함 할 수 없습니다.

%()+2finpqrstwx

등등.

규칙

  • 유니 코드 문자를 사용할 수 있지만 여전히 바이트 단위로 점수를 매겨 야합니다.
  • 모든 프로그램은 적절한 quine에 대한 커뮤니티 정의를 충족해야합니다 . 이것은 빈 문자열이 무엇보다도 유효한 quine으로 계산되지 않음을 의미합니다.
  • 표준 허점은 금지되어 있습니다.
  • 위의 정의를 충족하는 한 기능 또는 전체 프로그램이 허용됩니다.
  • 기호 독립 언어 (Lengage 및 Headseck 포함)는 허용되지 않습니다.
  • 타이 브레이커로서 총 코드가 가장 짧은 대부분의 프로그램이 승리합니다.

가까운 표가 있기 때문에 나는 토론을위한 샌드 박스 게시물을 취소 할 수 있습니다 : codegolf.meta.stackexchange.com/a/16053/9365
돔 헤이스팅스

샌드 박스 의견에는 함수 제출이 허용된다고 언급되어 있지만 도전 과제는 그것에 대해 아무 말도하지 않습니다.
Ørjan Johansen

2
관련 (대화 도전의 종류-당신의 quines 자신 대신에 서로 출력해야합니다)
Nathaniel

1
줄 바꿈 후행은 어떻습니까? 내 quines 중 하나가 하나를 인쇄하면 다른 하나는 인쇄하지 않아야합니까? (대부분의 답변이이 작업을 수행하지 않는 것 같습니다.)
Nathaniel

2
나는 그래서 @DomHastings 나는, 메타 질문을 찾을 수 없습니다 하나를 물었다 .
Nathaniel

답변:


27

V , 3 , 5 퀴인, 46 바이트

2A2A

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

16 진 덤프 :

00000000: 3241 3241                                2A2A

설명:

2     " 2 times...
 A    " (A)ppend the following text...
  2A  "   '2A'

5­­­a5­­­a

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

16 진 덤프 :

00000000: 35ad adad 6135 adad ad61                 5...a5...a

설명:

5---        " 5 - 3 times...
    a       " (a)ppend the following text...
     5---a  "   '5---a'

1«I1«I

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

16 진 덤프 :

00000000: 31ab 4931 ab49                           1.I1.I

설명:

1«      " 1 + 1 times...
  I     " (I)nsert the following text...
   1«I  "   '1«I'

그들이 펑키하기 시작하는 곳은 여기입니다 ...

ñi34x@-qPÉÑ~ÿ

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

16 진 덤프 :

00000000: f169 1633 341b 7840 2d71 50c9 d17e ff    .i.34.x@-qP..~.

설명:

ñ                       " Wrap all the following in macro '"q':
 i<C-v>34               "   Insert character code 34 `"`
         <esc>          "   Return to normal mode
              x         "   Delete the character we just inserted. Now, running `@-` will be equal to running `"`
                  P     "   Paste...
               @-       "   From Register...
                 q      "   "q
                   ÉÑ   "   Insert 'Ñ' at the beginning of this line
                     ~  "   Toggle the case of the character we just inserted
                      ÿ "   Black magic

:norm é:":p

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

16 진 덤프 :

00000000: 3a6e 6f72 6d20 e93a 223a 70              :norm .:":p

설명:

:norm       " Run the following commands as if typed:
      é:    "   insert ':'. Somehow also does black magic and resets the value of '":`
        ":p "   Paste the last ex command to be run ('norm é:":p')

이 답변은 흑 마법으로 가득 차 있습니다. Quines 1과 4는 새로운 것이 아니지만 다른 3 개는 이전에 발견 된 적이 없으므로 오늘날이 quine 중 절반 이상이 발견되었습니다.


8
세 번째 프로그램은 트롤링입니다. "당신은 normie :p"
mbomb007

4
@ mbomb007 의무REEEEEE--
매직 문어 항아리

17

젤리 , 2 34 5 quines, 14 18 81 65 59 56326265247229 바이트

3 바이트

”ṘṘ

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

표준 퀴네. ”Ṙ의 한 문자 리터럴입니다 . 이 문자열 표현을 인쇄 한 다음 문자열 암시 적으로 인쇄됩니다.

4 바이트

⁾⁾ḤḤ

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

두 개의 문자열 리터럴을 시작하고 인수를 두 배로 늘립니다. 문자열 입력을 사용하면 각 문자에 매핑됩니다. 따라서 현에 작용 ⁾Ḥ하면⁾⁾ḤḤ , 소스 코드.

11 바이트

ȮṾṖƊ}“ȮṾṖƊ}

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

오른쪽에는 “ȮṾṖƊ}에 대한 문자열 리터럴이 ȮṾṖƊ}있습니다. 문자열 닫기 문자는 EOF에서 암묵적으로 추가됩니다.

문자열 리터럴의 왼쪽 에서 단일 모나드로 Ɗ랩핑 ȮṾṖ하여 }올바른 인수 인 문자열 리터럴을 사용하는 다이아 드로 바꿉니다. Ȯ문자열 (인쇄 ȮṾṖƊ}), 스트링의 스트링 표현을 생성한다 ( “ȮṾṖƊ}”) 및 제거 캐릭터. 끈“ȮṾṖƊ} 은 모나드 뒤에 남고 내재적으로 인쇄됩니다.

38 49 36 바이트

32,52,52,7884,106,64,44,7884 44Ọj@,Ọ

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

젤리 골프에서 처음으로 공간을 사용했습니다.

시작 부분의 숫자 목록 ord에는 나머지 문자 중 코드가 포함됩니다. 그 후 :

jṛ44Ọ$,Ọ
j           Join this list with...
 ṛ          right argument. Avoiding using ¤ so I can use it in the next program.
  44Ọ       chr(44)==',': [106, ',', ...]
     $      Causes Ọ to act on 44 before j acts on it.
      ,     Pair this list with...
       Ọ    chr of each number in the list. Yields jṛ44Ọ$,Ọ

27098180162 바이트

⁽¢_;⁽⁽¤;⁽¡_;⁽⁽¡;⁽¡¤;⁽$+;⁽⁽y;⁽Ẹ$;⁽⁺$;⁽AƑ;⁽?€;⁽b⁽;⁽¢¡;⁽_⁽;⁽¡¡;⁽¤ị;⁽ØJ;⁽µṭ;⁽€⁽;⁽¡S;⁽;⁽;⁽¡ʠ;⁽¤ị;⁽ØJ;⁽¤F;⁽ḊṄ;⁽ȧF
¢_⁽¤¡_⁽¡¡¤$+⁽yẸ$⁺$AƑ?€b⁽¢¡_⁽¡¡¤ịØJµṭ€⁽¡S;⁽¡ʠ¤ịØJ¤FḊṄȧF

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

기본 250 개의 숫자와 인덱스를 Jelly 코드 페이지에 사용합니다. 알고리즘을 변경하여 72 바이트를 절약했습니다. 각 숫자를 사용하여 Jelly의 코드 페이지에 색인화했지만 정수를 다시 기본 250으로 변환 한 다음 Jelly의 코드 페이지로 색인화하여 기본적으로 첫 번째 줄에 필요한 리터럴 수를 절반으로 줄였습니다. 이것은 또한 필요한 고유 문자의 수를 줄이지 만 더 이상 quine을 만드는 방법을 생각할 수 없습니다.

나는까지 사용했습니다 ⁾“”문자열 리터럴을 만들고있는 ØJ숫자의 문자열을 만들 수있다. 나는 현을 만드는 다른 방법을 생각할 수 없습니다. 나는 여전히 숫자를 가지고 9있으며 ‘’사용할 수 있으므로 숫자로 문자열을 만드는 또 다른 방법이 있다면 다른 quine을 만들 수 있습니다.


13

Haskell , 3 quines, 1119 바이트

퀸 1, 51 바이트

IOstdout에 직접 익명 작업이 인쇄됩니다.

putStr`mappend`print`id`"putStr`mappend`print`id`"

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

Quine 2, 265 바이트

이 함수 f는 더미 인수를 사용하여 문자열을 반환합니다.

f	c=[b=<<g]!!0++show	g;b	c=[[[show	9!!0,show	1!!0..]!!6..]!!c];g=[93,0,90,52,82,89,52,51,51,94,84,24,24,39,34,34,106,95,102,110,0,94,50,89,0,90,52,82,82,82,106,95,102,110,0,48,24,24,39,35,106,95,102,110,0,40,24,24,39,37,37,84,24,24,45,37,37,84,24,24,90,84,50,94,52]

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

Quine 3, 803 바이트

LANGUAGEpragma 뒤의 모든 것은 더미 인수를 취하고 문자열을 반환하는 임의의 함수입니다.

{-#LANGUAGE CPP#-}(\q(_:_:_:_:_:_:_:_:z)y(#)_->(y(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:x)$y(:)#y(:)$ \x->x)z)'\''__TIME__(\(?)v k x->v$k?x)$ \(&)(%)v->v&'{'&'-'&'#'&'L'&'A'&'N'&'G'&'U'&'A'&'G'&'E'&' '&'C'&'P'&'P'&'#'&'-'&'}'&'('%'\\'&'q'&'('&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'_'&':'&'z'&')'&'y'&'('&'#'&')'&'_'&'-'&'>'&'('&'y'&'('%'\\'&'k'&' '&'x'&'-'&'>'%'\''&'&'%'\''&':'&'q'&':'&'k'&':'&'q'&':'&'x'&')'&'#'&'y'&'('%'\\'&'k'&' '&'x'&'-'&'>'%'\''&'%'%'\''&':'&'q'&':'%'\''%'\\'%'\\'%'\''&':'&'k'&':'&'q'&':'&'x'&')'&'$'&'y'&'('&':'&')'&'#'&'y'&'('&':'&')'&'$'&' '%'\\'&'x'&'-'&'>'&'x'&')'&'z'&')'%'\''%'\\'%'\''%'\''&'_'&'_'&'T'&'I'&'M'&'E'&'_'&'_'&'('%'\\'&'('&'?'&')'&'v'&' '&'k'&' '&'x'&'-'&'>'&'v'&'$'&'k'&'?'&'x'&')'&'$'&' '%'\\'&'('&'&'&')'&'('&'%'&')'&'v'&'-'&'>'&'v'

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

캐릭터

퀸 1 :


"S`adeimnprtu

퀸 2 :

	!+,.0123456789;<=[]bcfghosw

퀸 3 :

 #$%&'()-:>?ACEGILMNPTU\_kqvxyz{}

작동 원리

퀸 1

putStr`mappend`print`id`"putStr`mappend`print`id`"

Quine 1은 최근의 Golf you에 대한 수정 된 답변입니다.

  • 전체 프로그램이 필요하지 않기 때문에 main=제거되었습니다.
  • <>그리고 $그들의 거의 동의어 mappend와 로 대체되었습니다 id.

이것은 중요한 캐릭터들 =<>$다른 quine들을위한 유용한 연산자 를 자유롭게합니다 .

퀸 2

f	c=[b=<<g]!!0++show	g;b	c=[[[show	9!!0,show	1!!0..]!!6..]!!c];g=[93,0,......]

Quine 2는 최근의 Mutually Exclusive Quines 답변 2를 프로그래밍하는 데 다소 유사한 방법을 사용 하지만 직접 quine 하고 특히 quine 3에 필요한 문자 리터럴을 사용하지 않도록 조정되었습니다.show . 깎아 지른 행운에 의해 그 문자 중 아직 사용 된 문자가 없습니다.

이 quine은 공백 대신 탭을 사용하지만 가독성을 위해 아래 공백을 사용했습니다.

  • g코드 끝의 정수 목록으로 quine 데이터입니다. 각 숫자는 나머지 코드의 문자를 나타냅니다.
    • 숫자는로 이동 9하므로 탭은 0입니다. 따라서 함수 및 변수 이름의 소문자를 2 자리로 맞출 수 있으므로 인코딩이 약간 짧아집니다.
  • b c=[[[show 9!!0,show 1!!0..]!!6..]!!c] 숫자를 문자 (실제로 한 문자 문자열)로 변환하는 함수입니다.
    • [[show 9!!0,show 1!!0..]!!6..]로 시작하는 탭 문자로 시작하는 문자 범위입니다 !!c.
    • 탭 문자 자체는 다른 범위로 인덱싱하여 생성되는 [show 9!!0,show 1!!0..]상기 숫자 문자로 시작 '9'하고 '1', 8 단계에서 뛰어 내려.
    • 숫자 문자는 show해당 숫자 의 문자열 로 색인하여 생성됩니다 .
  • f c=[b=<<g]!!0++show g주요 기능입니다. c더미 논쟁이다.
    • b=<<g=<<각 숫자를 g문자 로 변환 하는 데 사용 합니다 . ( =<<예를 들어 , 대신에 사용 하면 리턴 된 문자를 목록에 랩해야하는 map이유 b가 있습니다.)
    • show gg의 목록에 문자열 표현을 제공하고 문자열을 ++연결합니다.
    • =<<보다 우선 순위가 낮 으므로 ++일부 브라케팅이 필요합니다. ()(Quine 3에 예약 됨) 사용을 피하기 위해 [...]!!0하나의 요소가있는 목록으로 색인합니다.

퀸 3

다른 quine을 디자인함으로써 quine 3은 여전히 ​​괄호, 람다 식, 문자 리터럴 및 문자열 / 목록 생성자에 액세스 할 수 :있습니다. 이것은 quine의 코드를 문자열 앞에 추가 하는 함수를 구성하기에 충분 합니다.

불행하게도, 모든 소문자 모음 (때로는을 제외하고 y)이 사용되어 유용한 영숫자 내장 함수가 남지 않았습니다. 또한 []""사라졌습니다. 이 잎없이 정상적인 방법에 빈 문자열을 구성하는 시작 에 코드를 척.

그러나 거의 모든 대문자를 사용할 수 있으므로 LANGUAGE언어 확장을 위한 pragma가 가능합니다. 운 좋게도 CPP(C 전 처리기 사용)는 대문자로만 이름이 지정된 유일한 언어 확장입니다. 그리고 CPP 매크로는 종종 대문자로되어 있습니다.

따라서 필수 빈 문자열을 얻기 위해 quine enable은 매크로를 CPP사용 __TIME__하여 형식의 문자열 상수 "??:??:??"(항상 동일한 길이를 갖도록 편리하게 보장됨)를 가져오고 패턴 일치 를 얻 습니다.

{-#LANGUAGE CPP#-}(\q(_:_:_:_:_:_:_:_:z)y(#)_->(y(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:x)$y(:)#y(:)$ \x->x)z)'\''__TIME__(\(?)v k x->v$k?x)$ \(&)(%)v->v&'{'&'-'&......

언어 pragma 후 quine은 해당 매개 변수를이 네 가지 인수에 바인딩하는 람다 식으로 구성됩니다 (최종 더미 매개 변수 _는 나중에 적용됨).

  • q'\''작은 따옴표 문자를 제공하여에 바인딩됩니다 .
  • _:_:_:_:_:_:_:_:z__TIME__, 일명 같은 문자열에 바인딩되어 빈 문자열 "??:??:??"을 만듭니다 z.
  • y바인딩 (\(?)v k x->v$k?x)오른쪽 ( "foldr") 양식을 연결하는 ( "foldl")에 관련된 왼쪽에서 quine 데이터를 변환하는 데 도움이 람다 콤비;
  • quine 데이터 자체에 (#)바인딩 된 연산자 \(&)(%)v->v&'{'&'-'&...입니다.

퀴네 데이터는 매개 변수가있는 람다 식인 교회 인코딩 형식으로 제공됩니다 (&)(%)v.

  • 인스턴스화 특정 값으로 표현을인가함으로써 (&), (%)그리고 v,이 인코딩은 quine의 코어 코드를 만들거나 quine 데이터 표현 자체를 다시 사용할 수있다.
  • 하스켈의 기본 정착 규칙에 의해, &그리고 %될 람다 내부에 결합 연산자를 떠났다. 따라서 문자 매개 변수 v는 왼쪽부터 시작 하여 결합됩니다 .
  • 대부분의 문자 k에는 해당하는 문자 가 &'k'있습니다.
  • k입니다 '또는\ 문자 리터럴 내부 이스케이프해야하는, 인코딩 대신이다 %'\k'.

데이터 인코딩은 연관되어 있지만 문자열은 올바른 연관 방식으로 작성되므로 결합기 y = (\(?)v k x->v$k?x) 가 도입되어 불일치를 연결합니다.

  • y(...) quine 데이터로 사용하기에 적합한 기능을 구축하기위한 것입니다. (&)(%)연산자 입니다.
  • v 문자열에서 문자열까지의 함수입니다 (퀴네 데이터의 의도 v 예).
  • k문자, x문자열 및? 새 문자열로 결합하는 연산자입니다. (핵심 코드의 (?)=(:)경우 실제로 퀴인 데이터 표현을 재구성하려면 더 복잡합니다.)
  • 그러므로 y(?)v k = \x->v$k?x 문자열에서 문자열로의 또 다른 함수입니다.
  • 다음과 같은 경우 연관성이 어떻게 변경되는지에 대한 예입니다 (&)=y(:).

    (v&k1&k2&k3) x
    = (((v&k1)&k2)&k3) x
    = y(:)(y(:)(y(:)v k1)k2)k3 x
    = y(:)(y(:)v k1)k2 (k3:x)
    = y(:)v k1 (k2:(k3:x))
    = v (k1:(k2:(k3:x)))
    = v (k1:k2:k3:x)

더 일반적으로, (#)quine 데이터 함수는 언제 f1,f2문자를 문자열과 결합하는 함수입니다.

(y(f1)#y(f2)$v) x
= (...(y(f1)(y(f1)v '{') '-')...) x
= v(f1 '{' (f1 '-' (... x)))

quine data 함수를 (&)=y(f1)and로 적용하면 (%)=y(f2)처방 된 f1f2quine data의 문자를와 결합 x하여 결과 문자열을v .

주요 람다 표현의 본문은 이것을 모두 정리합니다.

(y(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:x)$y(:)#y(:)$ \x->x)z
  • '&':q:k:q:x문자 가 문자열 k앞에 추가 &'k'되는 x동안'%':q:'\\':k:q:x 앞에 추가 %'\k'원래 quine 데이터 형태이다.
  • 그러므로 y(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:x quine 데이터 표현을 재구성하고 마지막 z(빈 문자열) 앞에 추가 한 다음 다음 함수로 전달 하는 올바른 매개 변수입니다 .
  • y(:)#y(:) quine의 핵심 코드를 다른 수정없이 문자열 앞에 추가하는 올바른 매개 변수입니다.
  • 마지막으로 \x->xget은 생성 된 quine과는 아무 상관이 없으며 반환됩니다.

9

Perl 6 , 3 quines, 274 바이트

Quine 1, 52 바이트

my&d={S{\d}=$_};say
d
Q{my&d={S{\d}=$_};say
d
Q{4}}

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

Quine 2, 102 바이트

printf	|(q[printf	|(q[@]xx	2	Z~|(q[printf	|(q[!3]]Xx	qw[1	0]))]xx	2	Z~|(q[printf	|(q[!3]]Xx	qw[1	0]))

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

Quine 3, 120 바이트

<'.EVAL'.UC,' GIVEN ',「「PRINT "<'.EVAL'.UC,' GIVEN ',「「".UC,.UC,"」」>.LC",".EVAL.EVAL".UC」」>.lc.EVAL.EVAL

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

고유 한 바이트 세트 확인

그 세 번째 퀴네를 얻는 데에는 많은 기동이있었습니다. 펄 6 (제가 알고 있음) 출력의 4 가지 방법이있다, say, put, printprintf. 모두 sayput출력 줄 바꿈, 나는 모두를 사용할 수있다. put, print, printf모두 포함 p하고 t. EVAL대문자를 사용 하여 부분적으로 해결할 수 있습니다 PRINT. 거기에서 나는 4 quines를 얻는 것이 가능하지 않다고 생각합니다 ... (아마도 같은 shell "echo 'quine'"것이 작동 할 수도 있습니다)

그런 다음 다른 유형의 공백을 사용하여 연산자, 공백, 탭 및 줄 바꿈을 구분하여 간격 문제를 해결할 수 있습니다.

설명 :

퀸 1 :

my&d={        };         # Declare a function d which 
      S{\d}=$_           # Which substitutes a digit with the string again
                say      # Print with a newline
d                        # The function
Q{my&d={S{\d}=$_};say    # Applied to the string with the program
d
Q{4}}                    # With a digit where the it should be inserted again

퀸 2 :

이것은 형식의 quine입니다. printf |(q[printf q[%s]]xx 2)즉, 문자열 사본을 자체 형식으로 지정합니다. 그러나 s이전 quine 's에서 사용되었으므로 사용할 수 없습니다 say. 따라서 문자열 OR 연산자 ( ~|)를 on @!3으로 사용하여 %s부품 을 생성 하지만 형식 문자열과 삽입 할 문자열 모두에 대해서는 수행 할 수 없으므로 수행해야합니다.Z~ 추가 문자열과 빈 문자열과 관련이 있습니다. 그런 다음 ,두 개를 분리하는 데 사용할 수 없으므로 Xx qw[1 0]문자열에 1과 0을 곱합니다.

printf |(                                  )      # Print with formatting
         q[...]       # The string of the program
               xx 2   # Duplicated
                    Z~| (                 )     # String or'd with
                         q[...]                 # A copy to insert the %s
                                Xx              # String multiplied to
                                   qw[1 0]      # itself and an empty string

퀸 3 :

이것은 다른 퀘 인과의 충돌을 피하기 위해 모든 것을 대문자로 만들기 위해 최선을 다하는 EVAL 퀴네입니다. 이것은 관련된 많은EVAL꽤뿐만 아니라들 lcuc사건 사이의 변환합니다.

<...>.lc.EVAL        # Evaluate the lowercase version of the string which results in
.EVAL  given  「print "<'.eval'.uc,' given ',「「".uc,.uc,"」」>.lc",".eval.eval".uc」
             .EVAL   # Evaluate again 

.EVAL  given  「...」   # Set the string to $_ and pass it to .EVAL
print "<'.eval'.uc,' given ',「「".uc       # Print the first half of the quine uppercased
                                   ,.uc   # Print the string uppercased
                                       ,"」」>.lc"  # Print the .lc part lowercased
                                                ,".eval.eval".uc # Print the EVAL part uppercased

9

MathGolf , 4 5 6 quines, 193,535 바이트

9 바이트

ÿ'ÿ⌐_'ÿ⌐_

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

45 바이트

û]∙ûxôû¬ûûûûû╡¬ûô╡û╡xûxxû¬ô]∙xô¬ûûû╡¬ô╡╡xxx¬ô

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

49 바이트

ùa6æù\a\ù+6┼ù\ùùùùù\ù§\+ùΣ\Σa6æ\a\+6┼\ùùùù\§\+Σ\Σ

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

99 바이트

"""▐ ⌠▌ ⌠▌ ⌠▌ ⌠ ⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠ ⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠"`~

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

4488 바이트

♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((♠((((((((((((((((((((((((((((((((((((((((((((DÄß─·ö♠,♦M-$*DÄß─ö7($$$qq$Äq╘

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

188,845 바이트

나는 이것에 실제로 연결할 수 없기 때문에 실제 quine생성 하는 Perl 6 프로그램이 있습니다.

구별 성 검증

문자열을 스택에 똑바로 밀어 넣는 방법이 부족하다고 생각하지만 다른 방법을 사용해야합니다. 심지어 낯선 사람 내가 여섯 번째 quine 노력으로 방법은 들어오는. 어떤 경우에는 quines가 더 짧을 수 있지만 준비 과정에서 사용 된 바이트를 줄입니다.

그래도 기술적 으로 더 많은 작업을 수행 할 수 있습니다. 푸시 문자열, 문자열 증가, 복제, 매핑, 터지는 등 몇 가지 연산자가 여전히 있기 때문에 루프가 반복됩니다. 는 {}임의의 길이의 코드 블록을 표시 할 수 있습니다 할 수있는 유일한 사업자이고, 정말 6 quine에서 그들을 필요합니다. 다른 코드 블록 중 일부를 사용할 수는 있지만 제한적이기 때문에 쉬운 연산자가 부족하기 때문에 루핑 섹션이 짧을 것 같지는 않습니다.

다음과 같은 몇 가지 설명이 있습니다.

모든 quines는 거의 같은 구조를 가지고 있습니다 :

  • 문자열 또는 문자열 목록 또는 문자 목록을 스택으로 푸시하십시오.
  • 모두 하나의 목록으로 결합
  • 목록 복제
  • 원본을 가져 오는 데 사용 된 문자를 인쇄 / 푸시하여 복사본에 매핑
  • 원래 문자 목록을 문자열로 인쇄

퀸 1 :

이것은 기본적으로 일반적인 quine 질문에 게시 한 것과 동일합니다.

ÿ'ÿ⌐_'ÿ⌐_
ÿ            Push the next 4 bytes as a string
 'ÿ⌐_        Stack ["'ÿ⌐_"]
     'ÿ      Push the byte ÿ (I realise I could have used this in a later quine)
       ⌐     Rotate the ÿ to the bottom of the stack : ["ÿ", "'ÿ⌐_"]
        _    Duplicate top of stack: ["ÿ", "'ÿ⌐_", "'ÿ⌐_"]
             Implicitly print stack joined together : ÿ'ÿ⌐_'ÿ⌐_

퀸 2

û                Push the next 2 bytes as a string
 ]∙              Stack: ["]∙û"]
   û  û...      Repeat this for the rest of the code
           ]              Wrap the stack in an array : [["]∙","xô"...]]
            ∙             Triplicate                 : [[..],[..],[..]]
             x            Reverse the top array
              ô           Loop over the array, executing the next 6 instructions
                          Stack: [[..],[..],str]
               ¬          Rotate the stack : [str,[..],[..]]
                ûûû╡      Push the string "ûû" and discard the left character
                    ¬     Rotate the "û" to the bottom : ["û",str,[..],[..]]
                          This produces the initialisation part
                     ô    Loop over the array with the next 6 characters again
                      ╡╡xxx¬      Basically discard the string
                            ô     Flatten the last copy of the array onto the stack
                                  Implicitly output the code

퀸 3 :

ùa6æù\a\ù+6┼ù\ùùùùù\ù§\+ùΣ\Σa6æ\a\+6┼\ùùùù\§\+Σ\Σ
ù...          Push the next 3 bytes as a string
              You know how this goes
    a         Wrap the top element in an array
     6æ       Repeat the next 4 instructions 6 times
       \      Swap the two top items
        a     Wrap the top item in an array
         \    Swap back
          +   Combine the two arrays
              This puts all the strings into a single array
           6            Push a 6
            ┼           Push the element two items down (the array)
             \          Swap with the 6 (this basically duplicates the array)
              ùùùù      Push "ùùù"
                  \§    Swap and get the 6th character (wrapping)
                    \   Swap with array : ["ù", [..]]
                     +  Prepend to array (implicitly mapping)
                      Σ\Σ     Join both the lists to strings and output

퀸 4 :

"""▐ ⌠▌ ⌠▌ ⌠▌ ⌠ ⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠ ⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠⌠"`~
""             Push the empty string
  "..."        Push some code : ['','...']
       `       Copy the top two elements of the stack : ['','...','','...']
        ~      Evaluate the top element as code : ['','...','']
▐              Prepend the empty string to the code
  ⌠            Push a space and increment by 2 to get a quote
   ▌           Prepend to the array
     ⌠▌ ⌠▌ ⌠   Repeat three more times, leaving the last on top : ['', '""...','"']
              ⌠⌠...       Push a space and increment until it reaches a '`'
                    ⌠⌠... Repeat for the '~' : ['','"""...','"','`','~']
                          Implicitly output

퀸 5 :

♠              Push 256
 ((...         Decrement until it reaches the correct byte representing the code
               Repeat for each character of the code
      DÄ       Repeat the next instruction 14 times
        ß      Wrap the top 4 elements in an array
         ─     Flatten the resulting monstrosity
          ·    Triplicate the array
           ö   Map the next 7 instructions over the array
                      Stack : [[..],[..],num]
            ♠         Push 128
             ,        Reverse subtraction : [[..],[..],128-num
              ♦M-$    Push the ( character
                  *   Repeat it 128-num times
                   DÄß─         Gather that up in an array and flatten again
                       ö        Map the next 6 instructions
                        7($$$qq
                    7($$$q    Print a ♠, without newline
                              q   Print the brackets without newline
                                  Stack : [[..],[..]]
                               $     Map the number to their values in the code page
                                Äq   Map print over each element
                                  ╘  Discard the last element of the stack

퀸 6 :

이 quine이 이유 때문에 다른 사람보다 훨씬 더 긴 문자열을 증가하는 것은 정말 우리가 문자를 만들려고하고, 특히 코드에서 문자의 일부 짜증있는 유니 코드 표현을 사용한다는 것입니다 코드를 부 풀리는 코드를, 8000자를 초과하여 표현 부분을 매우 많이 팽창시킵니다.

⌂         Push an * character
 ))...    Increment until we reach the right character + 8
      ♫{ }            Repeat 10000 times
        α             Wrap the top two elements in an array
          ♫{     }    Then repeat 10000 times
            m{{}}     Shallowly flatten the array
                  h∞<     Double the array
                     m{          Map the doubled array to
                       ïí½<¿{    If it is the first half of the array
                             ⌂⌂  Push two asterisks
                               )))...    Increment into a '⌂' (there are something like 8000 )s here, with a couple of ! to help
                                     @   Rotate the top three elements
                                         Stack : ["⌂",char,"*"]
                                      0{     α4<{}=}←  Repeat while the asterisk is not the char
                                        ⌂⌡)   Push a )
                                           @  Rotate it under the char
                                            ) Increment the asterisk
                                                     ;;   Pop the extra copies of the character
                                                       }{  Else
                                                         ⌡⌡⌡⌡}   Subtract 8 from the character
                                                              }{}  End map and flatten array
                                                                   Print implicitly

MathGolf가 문자열이 기본 코드 페이지를 사용하는지 여부에 일관성이 있으면이 마지막 퀴닝이 크게 줄어 듭니다.


나는 당신의 독창성에 놀랐습니다. 나는 당신이 이것들을 어떻게 처리했는지에 대한 설명을 좋아합니다. 최초의 퀴네 도전에서 내가 처음 인식하는 것은, 나머지는 그들이 영원히 생각해내는 것처럼 보입니다.
maxb

@ maxb 나는 여섯 번째 quine에 노력하고 있으며 게시하거나 포기하면 설명을 게시 할 것입니다. btw에서 chr / ord 및 증가 문자 명령이 일치하지 않는 것 같습니다. 첫 번째는 코드 페이지를 사용하고 두 번째는 일반적인 유니 코드를 사용합니다 (6 번째 quine을 너무 길게 만드는 것)
Jo King

나는 그것을 구현 한 후 어느 정도 시간을 보냈다는 것을 깨달았다. chr/ord두 코드 페이지를 대신 사용해야한다고 생각했다.
maxb

6

파이썬 2, 2 quines, 434 353 349 446 바이트

이것은 주로 파이썬에서 할 수 있는지 확인하는 것이 었습니다.

30 바이트 (후행 줄 바꿈 포함) :

z='z=%r;print z%%z';print z%z

후행 줄 바꿈이없는 416 바이트 :

exec"696d706f7274207379730a793d222222696d706f7274207379730a793d7b7d0a7379732e7374646f75742e777269746528276578656322272b792e666f726d6174282722272a332b792b2722272a33292e656e636f6465282268657822292b27222e6465636f64652822686578222927292222220a7379732e7374646f75742e777269746528276578656322272b792e666f726d6174282722272a332b792b2722272a33292e656e636f6465282268657822292b27222e6465636f6465282268657822292729".decode("hex")

Lynn 덕분에 81 바이트가 사용되었지만 줄 바꿈으로 인해 부하가 추가되었습니다.

설명

첫 번째는 표준 짧은 Python quine 이지만 사용하지 않도록 수정되었습니다 _. 이것은 Python 2이므로 (또는을 사용하지 않습니다 ).

두 번째는 약간의 생각을했습니다. 긴 문자열은 hex코덱을 사용하여 인코딩 되므로 다음을 포함합니다.0 - 9a-f ) 다음과 같이 디코딩합니다.

import sys
y="""import sys
y={}
sys.stdout.write('exec"'+y.format('"'*3+y+'"'*3).encode("hex")+'".decode("hex")')"""
sys.stdout.write('exec"'+y.format('"'*3+y+'"'*3).encode("hex")+'".decode("hex")')

이 사용 quine 속임수는 사용하여 인코딩, 자신의 소스 코드를 얻기 위해 hex_codec한 다음에 의해 둘러싸여 인쇄 exec"".decode("hex")사용하여 sys.stdout.write줄 바꿈을 인쇄하지 않도록 할 수 있습니다. 이 코드를 실행하면 두 번째 quine이 출력됩니다.

나는 파이썬에서 두 개 이상이 불가능하다고 생각하지만, 틀렸다면 그것을보고 싶습니다!

eval quines에 신경 쓰지 않는다면

Ørjan Johansen은 사전 인코딩 된 두 번째 quine에 대해 다음을 제안했습니다.

y="""import sys
sys.stdout.write('exec"'+('y='+'"'*3+y+'"'*3+';exec y').encode("hex")+'".decode("hex")')""";exec y

30 + 248 = 278입니다다음 출력에 대해 바이트를 .

exec"793d222222696d706f7274207379730a7379732e7374646f75742e777269746528276578656322272b2827793d272b2722272a332b792b2722272a332b273b65786563207927292e656e636f6465282268657822292b27222e6465636f64652822686578222927292222223b657865632079".decode("hex")

의 사용 exec이 방법은 PPCG에 따라 부정 행위를하지 않는 적절한 quine 규칙 하지만 일부 문자는 코드와 데이터를 모두 사용되기 때문에 그것은 나를 (여전히 우아하고 영리하지만 cheaty)에 다소 cheaty을 느낀다. (내 버전에서는을 사용하지만 exec코드와 데이터는 분리되어 있습니다.) 따라서 점수를 446으로 유지합니다.


1
"hex"대신 작동 "hex_codec"하여 몇 바이트를 절약해야합니다!
Lynn

1
후행 줄 바꿈이 중요한 경우 첫 번째 quine 끝에 빈 줄을 추가하지 않는 이유는 무엇입니까?
mbomb007

1
마찬가지로 . 나는 이것이 exec / eval을 가진 언어에서 꽤 표준적인 퀴니 트릭이라는 것을 이해합니다.
Ørjan Johansen

1
왜 첫 번째 quine과 같은 형식을 다시 사용하지 않습니까? 이렇게요 ?
조 왕

2
print '<tab>',끝에 공백을 추가하지 않습니다. 이것을 사용하면 Jo King의 제안에서 85 바이트를 사용할 수 있습니다 : tio.run/…
ovs

5

apt , 2 3 quines, 106 172 바이트

첫 번째는 내 N char quine answer 의 아주 장황한 버전입니다 .

[91,57,49,100,185,44,85,44,186,57,51,100,185,44,186,49,48,100,185,44,186,85,109,100,185,172,93,172]
[91d¹,U,º93d¹,º10d¹,ºUmd¹¬]¬

여기에서 시도하십시오 .

두 번째 quineETHProduction의 더 큰 quine 이며 Japt에 대한 표준 quine입니다.

"iQ ²"iQ ²

여기에서 시도하십시오 .

세 번째는 ``XORing을 사용하여 데이터를 저장합니다.

T=`f=fR;Zff-R-ReX%`;`T=\``+T+Tc^#

여기에서 시도하십시오 .

()'여전히 사용할 수 있기 때문에 한 번 더 퀴를 짜내 것이 가능할 있습니다.


1
난 정말, 정말 처음 골프를 시도하려는하지만 난 최대한 빨리 단일 문자를 변경하려고으로, 내 머리가 폭발, 보드에 몇 맥주와 함께, 알고! 저주받은 퀘인!
Shaggy

@Shaggy 결론을 내리고 실행하면 "'[+U+']+R+(Umd)¬"q mc빠른 업데이트를위한 첫 번째 줄이 도움이됩니다.
Nit

또한 더 많은 핵심 심볼을 사용할 수 있도록 첫 번째 솔루션을 리팩터링했습니다. 이제 퀴인을 하나 더 추가하는 것이 실제로 가능할 수 있습니다.
Nit

잠깐, 지금 당신의 점수는 더 높습니다!
Shaggy

@Shaggy 의도적으로, 나는 다른 quine을위한 공간을 만들기 위해 노력하고 있습니다.
Nit

4

골> , 2 3 퀴인, 17 28 27 26 바이트

6 바이트

"r2ssH

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

11 10 9 바이트

'3d*Wo{|;

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

11 바이트

Eh`#Ma0piS0

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

Gol> <>에는 모든 문자를 인쇄하는 세 가지 방법이 있습니다.

  • o 하나의 값을 팝하고 문자로 인쇄
  • H 모든 것을 팝하고 숯으로 인쇄하고 정지
  • S"..." 스택에 전혀 영향을 미치지 않고 문자열 리터럴을 인쇄하십시오.

그러나 나는을 사용하여 quine을 쓰는 방법을 찾을 수 없었다 S"..." 유일한 출력 방법으로 두 종류의 문자열 리터럴을 사용하여 위의 두 가지를 생각해 냈습니다.

세 번째 (Jo King의)는 p명령을 사용 하여 즉시 "in 을 작성 S"하고 결국 0을 제외한 모든 것을 인쇄합니다. 그런 다음 Eh0을 인쇄하고 종료합니다.

이제 모든 출력 명령과 명령을 모두 사용 했으므로 p다른 퀴인을 만들 수 없다고 생각합니다 (다른 사람이 S"퀘스트없이 퀘인을 찾지 않는 한 p).


어떻게 약 에 대한 S"..."?
Jo King

3

루비 , 2 quines, 27 + 44 = 71 바이트

$><<<<2*2<<2
$><<<<2*2<<2
2

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

s=%q{s=%q{S};s[?S]=s;puts s};s[?S]=s;puts s

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

나는 주로 출력 방법에 의해 제한됩니다. 문자열을 조작하는 데는 몇 가지 방법이 있지만 $><<사용 가능한 모든 출력 방법을 제외 하면 너무 많이 교차하는 것 같습니다. 나는 방법이있을 것이라고 생각 eval하지만 다른 종류의 여러 문자열 조작을 중첩 해야하는 것은 까다 롭습니다.


3

자바 스크립트 ES6, 2 퀴인, 43 + 22 = 65 바이트

퀸 1 :

(function f(){return[,f,'))'].join('(')}())

퀸 2 :

g=z=>"g="+g+";g``";g``

함수를 호출하지 않고 두 번째에서 템플리트 리터럴을 사용하여 몇 바이트를 절약 할 수 있습니다.
얽히고 설킨

2
따라서 JavaScript outgolfs japt
dylnan

@dylnan 세번째 quine을 추가 할 때까지
Nit

@Shaggy 안녕하세요, 입력 해 주셔서 감사합니다. 혼란 스럽습니다. quine이 전체 프로그램이 아니어야합니까? 기능 일 수있는 경우 자체 만 인쇄해야합니까? 그렇다면 g=z=>"g="+g유효한 JS quine일까요?
Pedro A

1
@Nit 내가 할 수있는 일을 보게 될 것입니다 : P dylnan이 언급했을 때 japt도 2 quines을 가지고있었습니다
Pedro A

3

> <> , 2 quines, 8 + 16 = 24 바이트

8 바이트

#o<}-1:"

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

이 답변 에서 가져 왔습니다 .


16 바이트

'r3d*d8*7+e0p>>|

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

이것은 상기에 기초 'r3d*>o<제외 quine o<사용할 수 없으므로 I 교환 <으로 |그리고 동적으로 생성 o(111 * 8 = 13 + 7) 및 2가 어디에 배치 >된다.


2 quines는 한계입니다

불행히도, 우리는 출력 명령의 수에 의해 제한됩니다. n숫자 만 출력하기 때문에 유용하지 않으므로 o아무 키나로 실행해야합니다. 동적으로 만드는 유일한 방법 o은입니다 p. 한 quine은을 사용할 수 o있고 다른 quine은을 사용할 수 있습니다.p 있지만 세 번째 quine은있을 수 없습니다.

세 번째 quine이 스택에 소스 코드를 남겨 두는 것이 가능할 수 있습니다.


2

Java 10, 2 quines, 1448 1248 바이트

1350 1122 바이트

\u0076\u002D\u003E\u007B\u0076\u0061\u0072\u0020\u0072\u003D\u0022\u0076\u002D\u003E\u007B\u0076\u0061\u0072\u0020\u0072\u003D\u0025\u0063\u0025\u0073\u0025\u0031\u0024\u0063\u003B\u0072\u002E\u0066\u006F\u0072\u006D\u0061\u0074\u0028\u0072\u002C\u0033\u0034\u002C\u0072\u002C\u0039\u0032\u0029\u002E\u0063\u0068\u0061\u0072\u0073\u0028\u0029\u002E\u0066\u006F\u0072\u0045\u0061\u0063\u0068\u0028\u0063\u002D\u003E\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u0066\u0028\u0025\u0031\u0024\u0063\u0025\u0063\u0025\u0033\u0024\u0063\u0075\u0025\u0025\u0030\u0034\u0058\u0025\u0031\u0024\u0063\u002C\u0063\u0029\u0029\u003B\u007D\u0022\u003B\u0072\u002E\u0066\u006F\u0072\u006D\u0061\u0074\u0028\u0072\u002C\u0033\u0034\u002C\u0072\u002C\u0039\u0032\u0029\u002E\u0063\u0068\u0061\u0072\u0073\u0028\u0029\u002E\u0066\u006F\u0072\u0045\u0061\u0063\u0068\u0028\u0063\u002D\u003E\u0053\u0079\u0073\u0074\u0065\u006D\u002E\u006F\u0075\u0074\u002E\u0070\u0072\u0069\u006E\u0074\u0066\u0028\u0022\u005C\u005C\u0075\u0025\u0030\u0034\u0058\u0022\u002C\u0063\u0029\u0029\u003B\u007D

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

다음과 같습니다.

v->{var r="v->{var r=%c%s%1$c;r.format(r,34,r,92).chars().forEach(c->System.out.printf(%1$c%c%3$cu%%04X%1$c,c));}";r.format(r,34,r,92).chars().forEach(c->System.out.printf("\\u%04X",c));}

설명:

v->{                   // Method with empty unused parameter and no return-type
  var r="v->{var r=%c%s%1$c;r.format(r,34,r,92).chars().forEach(c->System.out.printf(%1$c%c%3$cu%%04X%1$c,c));}";
                       //  Unformatted source code
  r.format(r,34,r,92)  //  Formatted quine
   .chars()            //  Loop over the characters as integers
   .forEach(c->System.out.printf("\\u%04X",c));}
                       //   Print "\u" with hexadecimal value of these characters

126 바이트

v->{int i='}'-'[';var s="v->{int i='}'-'[';var s=%c%s%c;System.console().printf(s,i,s,i);}";System.console().printf(s,i,s,i);}

System.console()null아무것도 제공되지 않으면 반환 되므로이 NullPointerException경우 TIO는 .

이 작업 quine의 증명하기 위해, 교체 System.console()System.out: 온라인으로보십시오.

설명:

v->{              // Method with empty unused parameter and no return-type
  int i='}'-'[';  //  Integer `i` = 34 (unicode value for double-quote)
  var s="v->{int i='}'-'[';var s=%c%s%c;System.console().printf(s,i,s,i);}";
                  //  Unformatted source code
  System.console().printf(s,i,s,i);}
                  //  Print formatted quine

일반적인 설명 :

Java에서 은 일반적으로 다음과 같이 수행됩니다.

  • String s포맷되지 않은 소스 코드가 포함되어 있습니다.
  • %s를 사용하여이 문자열을 자체에 입력하는 데 사용됩니다 s.format(...).
  • %c, %1$c그리고 34이중 따옴표를 포맷하는 데 사용됩니다.
  • s.format(s,34,s) 그것을 모두 합치십시오.

어떤 경우 Java 10에서 가장 짧은 quine lambda 함수는 다음과 같습니다 ( 82 bytes ).

v->{var s="v->{var s=%c%s%1$c;return s.format(s,34,s);}";return s.format(s,34,s);}

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

Java에서 두 개의 quine을 갖는 유일한 방법은 \uHEXA컴파일하는 동안 문자로 변환되는 유니 코드 버전을 사용하는 것이므로 유니 코드 0123456789ABCDEF\u가 아닌 버전 에서는 문자를 사용할 수 없습니다 . 그래서, 작은 비 유니 코드 버전을 사용하는 System.console()대신에 return또는 System.out(모두 'U'포함)을 사용합니다 '}'-'['두 번 %c대신 34하고 %1$c.

유니 코드 버전에 대해 유의해야 할 사항 :

  • 내가 사용 목적에있어 %04X대신 %04x(16 진수 대신 소문자 대문자의 경우).
  • 내가 사용하고 92, %c그리고 %3$c슬래시를 포맷 할 수 있습니다.
  • \U소문자 대신 대문자 를 사용하는 \u것은 명백하게 허용되지 않습니다. 그렇지 않으면 return짧은 비 유니 코드 버전에서 방금 사용했을 것 입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.