มหาพีระมิดแห่งควิน


11

งานนี้เป็นความท้าทายที่ค่อนข้างง่ายด้วยการบิดคุณต้องเอาท์พุทซอร์สโค้ดของคุณในรูปของปิรามิด รูปร่างของปิรามิดมีการกำหนดไว้ด้านล่าง:

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

ข้อ จำกัด หลักของความท้าทายนี้คือควินของคุณต้องมีจำนวนไบต์เพียงพอที่จะไม่ขัดขวางรูปแบบของปิรามิด ตัวอย่างเช่นความยาวของโปรแกรมต่อไปนี้จะใช้ได้:

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 ของคุณเพื่อ "แผ่น" ขนาดที่ถูกต้อง
    • เห็นได้ชัดว่าสิ่งเหล่านี้จะต้องส่งออกเป็นส่วนหนึ่งของควิน
  • หากโปรแกรมมีบรรทัดใหม่ / แท็บรายการเหล่านั้นจะไม่เป็นส่วนหนึ่งของควินและควรละเว้นในผลลัพธ์
  • รูปร่างถูกนับเป็นอักขระไม่ใช่ไบต์ ถ้ารูปร่างผิดรูปคุณไม่ได้ทำถูกต้อง

คะแนนต่ำสุดที่เป็นไปได้ที่นี่ควรเป็น 4


ควินดั้งเดิมจะต้องอยู่ในรูปของปิรามิดหรือไม่เพียงแค่เอาท์พุทจะต้องมี?
KrystosTheOverlord

@ KrystosTheOverlord เอาท์พุทต้นฉบับไม่สำคัญ หากต้นฉบับมีแท็บหรือการขึ้นบรรทัดใหม่คุณควรละเว้นสิ่งเหล่านี้ในเอาต์พุตเช่นกันเพื่อรักษารูปร่างของเอาต์พุต
Magic Octopus Urn

มันถูกต้องหรือไม่ถ้าผลลัพธ์มีช่องว่างต่อท้าย / ขึ้นบรรทัดใหม่
Emigna

@Emigna มันควรจะเป็นอย่างไร ฉันไม่เห็นปัญหากับมันเว้นแต่ว่าคนอื่นจะทำในจุดนี้ นอกจากนี้ให้นิยาม "กลุ่ม" โดยทั่วไปฉันทามติจะไม่ "ยอมรับบรรทัดใหม่ต่อท้ายเดียว"
Magic Octopus Urn

1
คุณควรทำสิ่งที่ท้าทายซึ่งคุณต้องมีควินินในรูปแบบของปิรามิด :)
KrystosTheOverlord

คำตอบ:


4

05AB1E , 36 ไบต์

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

ลองออนไลน์!

หากtrailing characters are allowedยังหมายถึงในตอนท้ายของการส่งออก0"D34çýā·<£.c"D34çýā·<£.cเป็นชั้นที่สั้นกว่าที่ 25 ไบต์


34çพื้นฐานของทั้งหมด 05AB1E quines ใช่มั้ยฮ่าฮ่า นอกจากนี้ไม่แน่ใจว่าฉันรู้สึกอย่างไรกับจำนวนการสุ่มขึ้นบรรทัดใหม่ ... ฉันต้องการให้คนอื่นโทรหากัน
Magic Octopus Urn

@MagicOctopusUrn: ใช่มันค่อนข้างน่าสงสัย ฉันถือว่ารุ่นที่สั้นกว่าของฉันไม่เป็นไรซึ่งเป็นเหตุผลว่าทำไมฉันไม่ใช้มันเป็นโปรแกรมหลัก แต่ฉันรู้สึกว่าฉันควรถามเพราะจะช่วยฉันได้ทั้งเลเยอร์
Emigna

แดงคุณชนะฉันไปแล้ว และแทนที่จะā·<ใช้9ÅÉ(ใน 25 byter ไม่ได้คิดเกี่ยวกับบรรทัดใหม่ที่ตามมา .. )
Kevin Cruijssen

@MagicOctopusUrn Btw คำตอบอื่น ๆ ทั้งหมดมีการขึ้นบรรทัดใหม่ดังนั้นทั้งหมดจะไม่ถูกต้องยกเว้น 36 byter นี้ ..
Kevin Cruijssen

4

Java 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));}//

-29 ไบต์ขอบคุณที่@JoKing

เอาต์พุตพร้อมช่องว่างนำหน้าเพื่อสร้างสามเหลี่ยม (โปรดทราบว่าช่องว่างระหว่างvar sและint iเป็นแท็บไม่ใช่ช่องว่าง)

ลองออนไลน์

คำอธิบาย:

:

  • var s มีสตริงโค้ดต้นฉบับที่ยังไม่ฟอร์แมต
  • %s จะใช้ในการใส่สายนี้เป็นของตัวเองด้วย s.format(...)
  • %c, %1$cและ34จะใช้ในการจัดรูปแบบราคาสองครั้ง ( ")
  • %% ใช้ในการฟอร์แมต %
  • 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

@ โจกิ้งอ่าแน่นอน ขอบคุณ น่าเสียดายที่ฉันต้องลดโปรแกรมพื้นฐานโดยไม่ต้องแสดงความคิดเห็นอย่างน้อย 196 (14 2) เพื่อบันทึกไบต์ (หรือเล่นกอล์ฟเป็น 225 (15 2)) และหาวิธีแก้ปัญหาเพื่อให้มีจำนวนไบต์เป็นจำนวนคี่) ขณะนี้มี 228 ที่ไม่มีความคิดเห็น
Kevin Cruijssen

1
พยายามใช้วิธีที่แตกต่างและจบลงเพียงสองไบต์เท่านั้นและเนื่องจากเป็นเลขคี่ ... วิธีแก้ปัญหาสำหรับความยาวคี่คือ%%ในสตริงและมีเพียงหนึ่งเดียว%ในรหัสจริง แต่นี่หมายความว่าความคิดเห็นเป็นสิ่งจำเป็น
Jo กษัตริย์

1
@JoKing วิธีการที่ดีด้วยการเว้นวรรคแทนที่ด้วยแท็บเพื่อให้เราสามารถมีช่องว่างนำหน้า (และละเว้นแท็บออกจากผลลัพธ์เนื่องจากกฎการท้าทาย) ฉันได้รับสามารถที่จะทำงานซ้ำรหัสของคุณด้วย///ในสตริงเพื่อสตริงเป็นพอนานให้มันไปที่คาดว่าจะพิมพ์ซ้ำทุกอย่างก่อนที่จะหยุดด้วยสำหรับStringIndexOutOfBoundsException .substringและมีเพียงสองต่อท้าย//ที่ส่วนท้ายของโปรแกรมจริงเพราะมันพิมพ์เพียงสองต่อท้าย//เช่นกัน :)
Kevin Cruijssen

โอ้วววฉันไม่คาดหวังคำตอบ Java! ทำได้ดีนี่!!!
Magic Octopus Urn

4

Python 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)

ลองออนไลน์!

Eval Quine ที่ใช้ช่องว่างเป็นอักขระตัวเติม




หรือ ... อย่างชัดเจน ... ด้วยการขยายที่มากคุณสามารถใส่ลายเซ็น (เช่นสตริงที่น่าสนใจกว่านั้น aaaaaaaaa) ในนั้น: P
ASCII เท่านั้นเท่านั้น

@ ;)
Jo King

3

Perl 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

Python 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))

ลองออนไลน์!


Python 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!

ฉันรู้สึกใกล้ที่จะทำให้มันสั้นลงหนึ่งบรรทัด grrrr ....

ลองออนไลน์!

รุ่นที่อายุน้อยกว่า 36 ไบต์

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

รหัสนี้มีขนาดเล็กลง แต่ก็ยังออกมาในปริมาณที่เท่ากันเศร้าความคิดเห็นใช้เวลาที่เหลือของพื้นที่

ลองออนไลน์!

รุ่นที่อายุน้อยกว่าเล็กน้อย 36 ไบต์

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

Wowza! เฮ้ฉันเพิ่งใช้มันเพื่อเติมพื้นที่บางส่วน แต่โปรแกรมทำงานเพื่อลงสนามฉันใช้ค่าที่เตรียมไว้สองสามอันแทนที่จะใช้ตัวแปร!

ลองออนไลน์!

รุ่นเก่ากว่า 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="

ลองออนไลน์!

ค่อนข้างมาตรฐาน quine อย่างสะดวกนอกจากนี้แม่แบบลูกวัวด้วยฟังก์ชั่นการจัดรูปแบบที่เพิ่มเข้ามา


1
แม้ว่าจะเป็นรหัสกอล์ฟฉันรักคำตอบที่ยาวกว่านี้ วัวศักดิ์สิทธิ์ที่น่าประทับใจ
Magic Octopus Urn

2

R , 169 144 ไบต์

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))

จัดการให้สั้นลงโดยการย้ายไปยังสตริงที่แยกวิเคราะห์มากกว่านิพจน์ที่จากไป ต้องใช้นิยามใหม่ของโอเปอเรเตอร์ unary เพื่อให้อยู่ภายใต้ 144 แม้ว่า


1

C # (Visual C # Interactive Compiler) , 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.