퀸의 대 피라미드


11

이 작업은 트위스트와 함께 다소 간단한 문제입니다. 소스 코드를 피라미드 모양으로 출력해야합니다. 피라미드의 모양은 다음과 같이 정의됩니다.

       1
      234
     56789
    ABCDEFG
   HIJKLMNOP
  QRSTUVWXYZa
 bcdefghijklmn
......etc......

이 문제의 주요 제한 사항은 quine이 피라미드의 패턴을 방해하지 않도록 정확히 충분한 바이트를 포함해야한다는 것입니다. 예를 들어 다음과 같은 프로그램 길이가 작동합니다.

1-byter: 1st layer of the pyramid (not allowed by definition of a quine).
4-byter: 1st and 2nd layers of the pyramid.
9-byter: 1st, 2nd and 3rd layers of the pyramid.
etc...

따라서 프로그램이 다음과 같은 경우

QWERTY

다음과 같이 정렬되므로 유효하지 않습니다.

  Q
 WER
TY

그러나 프로그램이 QWERTYUIO라면 괜찮을 것입니다.

  Q
 WER
TYUIO

규칙

  • 표준 허점은 분명히 허용되지 않으며 자신의 소스를 읽을 수 없습니다.
  • 피라미드는 가운데에 있어야하며 후행 문자는 허용되지만 필수는 아닙니다.
    • 또한 피라미드를 중앙에 배치하는 데 어떤 문자도 사용할 수 있습니다 (char)32.
  • 당신의 퀴는 피라미드 모양이 될 수 있어야합니다.
    • 소스 코드의 원래 순서를 유지해야합니다.
    • 소스 코드 에 피라미드 형식을 지정하는 데 사용되는 문자가 포함되어 있지 않을 수 있습니다.
    • EG 소스 코드에 공백이 있으면 형식에 다른 문자가 필요합니다.
  • quine의 주석을 올바른 크기로 "채우기"위해 사용할 수 있습니다.
    • 분명히, 이들은 quine의 일부로 출력되어야합니다.
  • 프로그램에 줄 바꿈 / 탭이 포함되어 있으면 quine의 일부가 아니므로 출력에서 ​​생략해야합니다.
  • 모양은 바이트가 아닌 문자로 계산됩니다. 모양이 잘못되면 제대로 수행되지 않은 것입니다.

여기서 가장 낮은 점수는 4입니다.


원래 퀴네는 피라미드 모양이어야합니까, 아니면 출력 만되어야합니까?
KrystosTheOverlord

@KrystosTheOverlord 출력은 원본이 중요하지 않습니다. 원본에 탭이나 줄 바꿈이 있으면 출력의 모양을 유지하기 위해 출력에서 ​​탭이나 줄 바꿈을 생략해야합니다.
Magic Octopus Urn

출력에 후행 공백 / 줄 바꿈이 있으면 유효합니까?
Emigna 2019

@Emigna해야합니까? 이 시점에서 다른 사람들이하지 않으면 문제가 발생하지 않습니다. 또한 "다발"을 정의하는데, 일반적으로 "하나의 후행 줄 바꿈이 허용 가능"하지 않습니까?
Magic Octopus Urn

1
피라미드 형식으로 quine이 필요한 곳에 도전해야합니다. :).
KrystosTheOverlord

답변:


4

05AB1E , 36 바이트

"34çs«DJā·<£õK.cJ?"34çs«DJā·<£õK.cJ?

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

trailing characters are allowed또한 출력의 끝을 의미하는 경우 0"D34çýā·<£.c"D34çýā·<£.c25 바이트에서 더 짧은 계층입니다.


34ç모든 05AB1E quines의 기초입니까, 하하 아닌가요? 또한 임의의 후행 줄 바꿈에 대해 어떻게 생각하는지 확실하지 않습니다 ... 나는 다른 사람이 그 전화를하는 것을 선호합니다 (표준은 무엇입니까, 후행 / 선행은 허용됩니까?).
Magic Octopus Urn

@MagicOctopusUrn : 그래, 좀 의심 스럽다. 짧은 버전이 좋지 않다고 가정합니다. 이것이 기본 프로그램으로 사용하지 않았지만 전체 레이어를 구할 수 있기 때문에 물어봐야한다고 생각했습니다.
Emigna 2019

댕, 당신이 날 이겼어 그리고 대신 ā·<내가 사용 9ÅÉ(25 byter에 후행 줄 바꿈에 대해 생각하지 않았다 ..)
케빈 Cruijssen에게

모든이 36 byter을 제외하고 유효하지 않은 것 때문에 @MagicOctopusUrn는, BTW 다른 모든 답변은, 뒤에 줄 바꿈이 ..
케빈 Cruijssen

4

자바 11 324 256 227 바이트

v->{var s="v->{vars=%c%s%1$c;for(inti=0;;)System.out.printf(%1$c%%%1$c+(15+i)+%1$cs%%n%1$c,s.format(s,34,s).substring(i*i,++i*i));}///";for(int i=0;;)System.out.printf("%"+(15+i)+"s%n",s.format(s,34,s).substring(i*i,++i*i));}//

@JoKing 덕분에 -29 바이트 .

삼각형을 만들기 위해 선행 공백이있는 출력. 공백 var sint i탭 사이의 공백은 공백이 아니라 탭입니다.

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

설명:

part :

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

도전 과제 :

for(int i=0;;)         // Loop `i` indefinitely upwards from 0
  System.out.printf(   //  Print with format:
    "%"+(15+i)+"s      //   Add leading spaces to make the line length size 15+`i`
                 %n",  //   And include a trailing newline
    s.format(s,34,s).substring(
                       //   And append a substring of the source code-String
       i*i,            //    From index `i` squared
       ++i*i));}       //    To index `i+1` squared

메소드에 대한 java.lang.StringIndexOutOfBoundsException: begin 225, end 256, length 226오류로 중지 String#substring(int,int)되는 결과는 결과를 인쇄 한 후의 반복입니다 ( meta에 따라 괜찮습니다 ).


실제로 아무것도 저장하지는 않지만 s=s.format대신 루프 형식을 지정할 수있을 때 분리 할 필요가 없습니다.
Jo King

물론 @JoKing Ah. 감사. 불행히도 바이트를 절약하기 위해 주석없이 기본 프로그램을 최소 196 (14 2) 로 줄여야합니다 (또는 225 (15 2)로 골프를 치고 어떻게 든 홀수 바이트를 갖는 해결 방법을 찾으십시오). 코멘트가없는 228입니다.
Kevin Cruijssen 님의

1
다른 접근 방식을 시도하고 홀수로 인해 두 바이트 만 종료 되었습니다. 홀수 길이에 대한 해결 방법 %%은 문자열에 하나만 %있고 실제 코드에는 하나이지만 주석은 필수입니다
Jo King

1
@JoKing 공백으로 탭을 대체하여 멋진 접근 방식을 사용하므로 선행 공백을 사용할 수 있습니다 (챌린지 규칙으로 인해 출력에서 ​​탭을 생략 함). 나는 당신의 코드를 재 작업 할 수있었습니다 ///가 함께 중지하기 전에, 모든 것을 인쇄 할 것으로 예상 반복으로 이동하는 문자열이 충분히 그래서 문자열에 StringIndexOutOfBoundsException에 대한 .substring. 그리고 두 후행 //단지 뒤에 두를 출력하기 때문에, 실제 프로그램의 끝에서 //뿐만 아니라. :)
Kevin Cruijssen 's

와우, 나는 자바 답변을 기대하지 않았다! 좋은 하나 !!!
Magic Octopus Urn

4

파이썬 2 , 81 바이트

s='n=0;\nprint(8-n)*chr(32)+("s=%r;exec(s*9)"%s)[n*n:][:n-~n];n+=1;#JK';exec(s*9)

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

공백을 필러 문자로 사용하는 평가판 quine입니다.




또는 ... 글쎄 ... 많은 패딩으로 서명 (즉, 더 흥미로운 문자열)을 넣을 수 있습니다 : P
ASCII-only

@ ASCII 전용 좋은 점, 업데이트 된 대답을 참조;)
조 왕

3

펄 6 , 67 바이트

<say("<$_>~~.EVAL".substr($!++²,$!*2-1).indent(8-$!))xx⁸>~~.EVAL

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

여분의 레이어를 짜기 위해 두 개의 유니 코드 문자를 사용했습니다. 공백을 사용한 출력 :

       <
      say
     ("<$_
    >~~.EVA
   L".substr
  ($!++²,$!*2
 -1).indent(8-
$!))xx⁸>~~.EVAL

설명:

<say("<$_>~~.EVAL"                                  )   >~~.EVAL   # Normal quine
                  .substr($!++²,$!*2-1)              xx⁸  # Split into layered substrings
                                       .indent(8-$!)      # And indent each one

3

파이썬 2 , 169 바이트

0피라미드를 형식화하는 데 사용 합니다.

s='s=%r;k=s%%s;print"\\n".join(`1-1`*(12-n)+k[n*n:][:n-~n]for n in range(13))#######################';k=s%s;print"\n".join(`1-1`*(12-n)+k[n*n:][:n-~n]for n in range(13))

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


파이썬 2 , 147 바이트

이 규칙을 사용합니다 . 프로그램에 줄 바꿈 / 탭이 포함되어 있으면 퀴네에 포함되지 않으므로 출력에서 ​​생략해야합니다.

s='s=%r;k=s%%s;print"\\n".join(`1-1`*(12-n)+k[n*n:][:n-~n]forninrange(13))##';k=s%s;print"\n".join(`1-1`*(12-n)+k[n*n:][:n-~n]for	n	in	range(13))##

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


2

Gol> <> , 36 바이트

":P}r6&56F:M}F0ss|&:P&Roao{|;Nooooo!

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

더 어린 버전, 36 바이트

":P}r6&56F:M}R` &:P&Fo|ao{|;Noooooo!

나는 그것을 한 줄 더 짧게하는 것에 너무 가깝습니다.

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

더 어린 버전, 36 바이트

"r2ss6&56F:M}R` &:P&Fo|ao{|;what????

이 코드는 더 작지만 여전히 슬프게도 같은 양으로 나오고 주석은 나머지 공간을 차지합니다.

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

약간 더 어린 버전, 36 바이트

"r2ss156F:M}F` o|:PP}Fo|ao{{|;Wowza!

와우 자! Heh, 나는 단지 그것을 약간의 공간을 채우기 위해 사용했지만 프로그램은 작동하고 골프를 치기 위해 변수를 사용하는 대신 몇 가지 prepushed 값을 사용했습니다!

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

이전 버전, 42 바이트

"r2ss0V_~6:&F&:M&F` o|_PPV_Fo|ao|;empty...

이것은 후행 줄 바꿈이 있으며 원하는 것보다 많은 문자가 있습니다 ...

나는 이것을 심각하게 골프 할 것입니다 ...

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



2

클린 , 256 바이트

module QQ;import StdEnv,Text;q=dec'#';$n#k=(s<+q<+s<+q)%(n^2,n^2+n*2)=lpad k(16+n)(dec q);Start=join{toChar 10}(map$[0..15]);s="module QQ;import StdEnv,Text;q=dec'#';$n#k=(s<+q<+s<+q)%(n^2,n^2+n*2)=lpad k(16+n)(dec q);Start=join{toChar 10}(map$[0..15]);s="

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

서식 지정 기능이 추가 된 표준 퀴니와 템플릿 퀴니도 편리합니다.


1
코드 골프이지만, 나는 더 긴 대답을 좋아합니다. 인상적인 성소.
Magic Octopus Urn

2

R , 169144 바이트

s='`!`=intToUtf8;cat(sprintf("%*s",11+(i=1:12),substring(paste0("s=",q<-!39,s,q,";eval(parse(t=s))"),(i-1)^2+1,i^2)),sep=!010)';eval(parse(t=s))

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

           s
          ='`
         !`=in
        tToUtf8
       ;cat(spri
      ntf("%*s",1
     1+(i=1:12),su
    bstring(paste0(
   "s=",q<-!39,s,q,"
  ;eval(parse(t=s))")
 ,(i-1)^2+1,i^2)),sep=
!010)';eval(parse(t=s))

출발하는 표현식이 아닌 파싱 된 문자열로 이동하여 단축합니다. 그럼에도 불구하고 단항 연산자의 재정의를 사용하여 144 미만으로 가져야했습니다.


1

C # (Visual C # 대화식 컴파일러) 225 바이트

var s="var s={0}{1}{0};for(int i=0;;)WriteLine(string.Format(s,(char)34,s).Substring(i*i++,2*i-1).PadLeft(i+14,(char)2));//";for(int i=0;;)WriteLine(string.Format(s,(char)34,s).Substring(i*i++,2*i-1).PadLeft(i+14,(char)2));//

STX문자를 패딩으로 사용합니다 . Kevin Cruijssen은 내가 완료 될 때까지 게시하기 전에 이미 Java로 정확한 사본을 제출했다는 것을 알지 못했지만 어쨌든 게시하기로 결정했습니다.

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

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