เขียน Quine Suite


30

เราได้มีจำนวนมากของท้าทาย แต่มากของควินรูปแบบจะคล้ายกันช่วยสร้างความแปรปรวนบางอย่างใน quines ของเรา

งานของคุณคือการสร้างโปรแกรมที่เลือกในภาษาเดียวกัน (อย่างน้อย 2) ซึ่งทั้งหมดส่งออกซอร์สโค้ดของตัวเองอย่างไรก็ตามไม่มีโปรแกรมเหล่านี้ที่สามารถแชร์อักขระใด ๆ ได้

ตัวอย่างเช่นหากคุณสร้างโปรแกรมโดยใช้:

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

โปรแกรมถัดไปของคุณไม่สามารถรวมใด ๆ ของ:

%()+2finpqrstwx

และอื่น ๆ

กฎระเบียบ

  • คุณสามารถใช้อักขระ Unicode ได้ แต่คุณต้องยังคงให้คะแนนเป็นไบต์
  • โปรแกรมทั้งหมดต้องเป็นไปตามความหมายของชุมชนควินที่เหมาะสม ซึ่งหมายความว่าสตริงว่างไม่นับเป็น quine ที่ถูกต้องเหนือสิ่งอื่นใด
  • ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
  • อนุญาตให้ใช้ฟังก์ชั่นหรือโปรแกรมเต็มรูปแบบตราบเท่าที่ตรงตามข้อกำหนดข้างต้น
  • สัญลักษณ์ภาษาอิสระ (รวมถึง Lenguage และ Headsecks) ไม่ได้รับอนุญาต
  • โปรแกรมส่วนใหญ่ชนะโดยมีรหัสรวมที่สั้นที่สุดเป็นตัวแบ่งไทม์

เนื่องจากมีคะแนนเสียงใกล้ฉันจะยกเลิกการลบโพสต์แซนด์บ็อกซ์สำหรับการสนทนา: codegolf.meta.stackexchange.com/a/16053/9365
Dom Hastings

ฉันสังเกตเห็นว่าความคิดเห็นของแซนด์บ็อกซ์พูดถึงว่าอนุญาตให้ส่งฟังก์ชั่นได้ แต่ความท้าทายไม่ได้พูดอะไรเลย - ฉันถือว่าตรงกันข้ามว่าเป็นค่าเริ่มต้นสำหรับควินิน
Ørjan Johansen

2
ที่เกี่ยวข้อง (ชนิดของการสนทนาที่ท้าทาย - ควายของคุณต้องเอาท์พุทซึ่งกันและกัน)
นาธาเนียล

1
สิ่งที่เกี่ยวกับการขึ้นบรรทัดใหม่ หากหนึ่งในผลการทดสอบของฉันพิมพ์ออกมาหนึ่งภาพอื่นจะต้องหลีกเลี่ยงการทำเช่นนั้นหรือไม่? (ฉันสงสัยว่าคำตอบส่วนใหญ่จะไม่ทำเช่นนี้)
นาธาเนียล

2
@DomHastings ฉันไม่สามารถหาคำถามที่เมตาดังนั้นฉันคนหนึ่งถาม
นาธาเนียล

คำตอบ:


27

V , 3 , 5 quines, 46 bytes

2A2A

ลองออนไลน์!

hexdump:

00000000: 3241 3241                                2A2A

คำอธิบาย:

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

5­­­a5­­­a

ลองออนไลน์!

hexdump:

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

ลองออนไลน์!

hexdump:

00000000: 31ab 4931 ab49                           1.I1.I

คำอธิบาย:

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

ที่นี่พวกเขาเริ่มได้รับขี้ขลาด ...

ñi34x@-qPÉÑ~ÿ

ลองออนไลน์!

hexdump:

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

ลองออนไลน์!

hexdump:

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 Quines ไม่เคยพบมาก่อนดังนั้นมากกว่าครึ่งหนึ่งของ Quines เหล่านี้จึงถูกค้นพบในวันนี้


8
โปรแกรมที่สามกำลังหมุนรอบ "คุณเป็นnormie :p"
mbomb007

4
@ mbomb007 พันธะREEEEEE--
Magic Octopus Urn

17

เยลลี่ , 2 3 4 5 quines, 14 18 81 65 59 56 326 265 247 229 216 ไบต์

3 ไบต์

”ṘṘ

ลองออนไลน์!

ควินมาตรฐาน เป็นตัวอักษรตัวละครตัวหนึ่งสำหรับ”Ṙ พิมพ์การแทนค่าสตริงของสิ่งนี้จากนั้นสตริงจะถูกพิมพ์โดยปริยาย

4 ไบต์

⁾⁾ḤḤ

ลองออนไลน์!

เริ่มต้นตัวอักษรสองสายอักขระตามตัวอักษรและมันเป็นอาร์กิวเมนต์คู่ ด้วยอินพุตสตริงรับการแม็พเข้ากับอักขระแต่ละตัว ดังนั้นการกระทำกับ⁾Ḥผลตอบแทนสตริง⁾⁾ḤḤซอร์สโค้ด

11 ไบต์

ȮṾṖƊ}“ȮṾṖƊ}

ลองออนไลน์!

ในด้านขวามือเป็นตัวอักษรสตริง“ȮṾṖƊ} ȮṾṖƊ}อักขระการปิดสตริงถูกเพิ่มโดยอัตโนมัติที่ EOF

ทางด้านซ้ายของสตริงตัวอักษรให้Ɗล้อมȮṾṖด้วย monad เดี่ยวและ}เปลี่ยนเป็น dyad ซึ่งใช้อาร์กิวเมนต์ที่ถูกต้องสตริงตัวอักษร Ȯพิมพ์สตริง ( ȮṾṖƊ}) สร้างสตริงที่เป็นตัวแทนของสตริง ( “ȮṾṖƊ}”) และลบตัวละคร สตริง“ȮṾṖƊ}ถูกทิ้งไว้หลังจาก monad และถูกพิมพ์โดยปริยาย

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Ọ$,Ọ

270 198 180 162 ไบต์

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

ลองออนไลน์!

ใช้ตัวเลขฐาน 250 และดัชนีในหน้ารหัสวุ้น บันทึก 72 ไบต์โดยการเปลี่ยนอัลกอริทึม ใช้ตัวเลขแต่ละตัวเพื่อจัดทำดัชนีในหน้ารหัสของเยลลี่ แต่ตอนนี้ฉันกำลังแปลงจำนวนเต็มกลับไปเป็นฐาน 250 จากนั้นทำดัชนีในหน้ารหัสของเยลลี่โดยทั่วไปจะลดจำนวนตัวอักษรที่ฉันต้องการในบรรทัดแรก สิ่งนี้ยังช่วยลดจำนวนอักขระที่ไม่ซ้ำกันที่ต้องการ แต่ฉันไม่สามารถคิดวิธีที่จะทำให้ได้ผลอีกต่อไป

ฉันใช้หมดแล้ว⁾“”ซึ่งสร้างตัวอักษรสตริงและØJที่สร้างสตริงจากตัวเลข ฉันไม่สามารถคิดถึงวิธีอื่น ๆ ในการสร้างสาย ฉันยังมีตัวเลข9และ‘’มีอยู่ดังนั้นหากมีวิธีอื่นในการสร้างสตริงจากตัวเลขอาจเป็นไปได้ที่จะสร้างควินอื่น


13

Haskell , 3 quines, 1119 bytes

Quine 1, 51 ไบต์

การIOดำเนินการที่ไม่ระบุชื่อพิมพ์โดยตรงไปยัง stdout

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

ลองออนไลน์!

Quine 2, 265 bytes

ฟังก์ชั่น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 bytes

ทุกอย่างหลังจากLANGUAGEpragma เป็นฟังก์ชั่น anymous รับอาร์กิวเมนต์หุ่นและกลับสตริง

{-#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ล่าสุดของฉันคุณคำตอบที่ quine (พร้อมการปรับปรุงโดย H.PWiz):

  • เนื่องจากไม่จำเป็นต้องใช้โปรแกรมแบบเต็มmain=จึงถูกลบออก
  • <>และ$ได้ถูกแทนที่ด้วยคำพ้องความหมายที่อยู่ใกล้กับพวกเขาและmappendid

สิ่งนี้จะทำให้อักขระที่สำคัญ=<>และผู้ให้บริการที่เป็นประโยชน์$สำหรับ quines อื่นเพิ่มขึ้น

ควิน 2

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

ควิน 2 ใช้วิธีการค่อนข้างคล้ายกับโปรแกรมที่ 2 ของล่าสุดของฉันร่วมกันเฉพาะ Quinesคำตอบ แต่ปรับให้เข้ากับควินเองโดยตรงและโดยเฉพาะอย่างยิ่งที่จะหลีกเลี่ยงการใช้ตัวอักษรตัวอักษรซึ่งมีความจำเป็นสำหรับควิน 3. ทั้งสองคนนี้จะประสบความสำเร็จด้วยความช่วยเหลือของshowฟังก์ชั่น ซึ่งโชคยังไม่ได้มีตัวละครใด ๆ ที่ใช้

ควินนี้ใช้แท็บแทนช่องว่าง แต่ฉันใช้ช่องว่างด้านล่างเพื่อให้อ่านง่าย

  • 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 gให้การแทนค่าสตริงของgรายการและ++เชื่อมสตริงเข้าด้วยกัน
    • เนื่องจาก=<<มีลำดับความสำคัญต่ำกว่า++จึงจำเป็นต้องใช้การถ่ายคร่อม เพื่อหลีกเลี่ยงการใช้()(สงวนไว้สำหรับ quine 3) ให้[...]!!0จัดทำดัชนีไว้ในรายการที่มีองค์ประกอบเดียว

ควิน 3

โดยการออกแบบของ quines อื่น ๆ ควิน 3 ยังคงมีการเข้าถึงวงเล็บแสดงออกแลมบ์ดาอักษรตัวอักษรและสตริง / :คอนสตรัครายการ นี้จะเพียงพอที่จะสร้างฟังก์ชั่นที่prependsรหัสควินที่จะสตริง

น่าเสียดายที่yมีการใช้สระตัวพิมพ์เล็กทั้งหมด (ยกเว้นบางครั้ง) ทำให้ไม่มีฟังก์ชันตัวอักษรและตัวเลขที่มีประโยชน์ นอกจากนี้[]""จะหายไป สิ่งนี้ทำให้วิธีการปกติในการสร้างสตริงที่ว่างเปล่าเพื่อเริ่มทำท่ารหัส

อย่างไรก็ตามตัวอักษรตัวพิมพ์ใหญ่เกือบทั้งหมดยังคงใช้ได้ดังนั้นLANGUAGEpragma เพื่อรับส่วนขยายภาษาจึงเป็นไปได้ โชคอีกครั้งCPP(เปิดใช้งานตัวประมวลผลล่วงหน้า C) เป็นนามสกุลภาษาเดียวที่ตั้งชื่อด้วยตัวอักษรตัวพิมพ์ใหญ่เท่านั้น และมาโคร CPP มักจะมีชื่อตัวพิมพ์ใหญ่

ดังนั้นเพื่อให้ได้สตริงว่างที่สำคัญ quine จะช่วยให้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)แลมบ์ดา combinator ใช้เพื่อช่วยในการแปลงข้อมูลควินจากซ้ายที่เกี่ยวข้อง ("foldl") ไปทางขวาที่เกี่ยวข้อง ("foldr") แบบฟอร์ม;
  • ผู้ประกอบการ(#)ผูกพันกับ\(&)(%)v->v&'{'&'-'&...ข้อมูลควินเอง

(&)(%)vข้อมูลควินจะได้รับในรูปแบบของการเข้ารหัสโบสถ์แสดงออกแลมบ์ดากับพารามิเตอร์

  • โดยใช้การแสดงออกเป็นค่าโดยเฉพาะอินสแตนซ์(&), (%)และvการเข้ารหัสนี้สามารถนำมาใช้อย่างใดอย่างหนึ่งในการสร้างรหัสหลักของควินหรือการสร้างการแสดงข้อมูลแบบควินเอง
  • โดยกฎเริ่มต้น fixity ของ Haskell &และ%กลายเป็นตัวดำเนินการเชื่อมโยงด้านซ้ายภายในแลมบ์ดา ดังนั้นพารามิเตอร์อักขระจะรวมกับการเริ่มvต้นเริ่มต้นจากด้านซ้าย
  • สำหรับตัวละครส่วนใหญ่มีความสอดคล้องกันk&'k'
  • เมื่อkเป็น'หรือ\ซึ่งจะต้องมีการหลบหนีอยู่ภายในตัวอักษรตัวอักษร, %'\k'การเข้ารหัสเป็นแทน

เนื่องจากการเข้ารหัสข้อมูลนั้นยังคงอยู่แบบเชื่อมโยง แต่สายอักขระถูกสร้างขึ้นในลักษณะการเชื่อมโยงที่ถูกต้อง Combinator y = (\(?)v k x->v$k?x)จึงถูกนำมาใช้เพื่อเชื่อมสะพานที่ไม่ตรงกัน

  • y(...)มีวัตถุประสงค์เพื่อสร้างฟังก์ชั่นที่เหมาะสมสำหรับใช้เป็นข้อมูลควิน(&)และ(%)ผู้ประกอบการ
  • 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)))

การใช้ฟังก์ชั่นควินข้อมูลที่มี(&)=y(f1)และ(%)=y(f2)และการใช้นี้กำหนดไว้f1และf2จะรวมตัวอักษรข้อมูลควินที่มีแล้วผ่านสตริงผลให้xv

เนื้อหาของการแสดงออกแลมบ์ดาหลักทำให้สิ่งนี้เข้าด้วยกัน:

(y(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:x)$y(:)#y(:)$ \x->x)z
  • '&':q:k:q:xสำหรับตัวละครkprepends &'k'สตริงxขณะ'%':q:'\\':k:q:xprepends %'\k'ซึ่งเป็นรูปแบบข้อมูลที่ควินเดิมของพวกเขา
  • ดังนั้นจึงy(\k x->'&':q:k:q:x)#y(\k x->'%':q:'\\':k:q:xเป็นพารามิเตอร์ที่เหมาะสมสำหรับการสร้างการแสดงข้อมูลควินอีกครั้งซึ่งรวมอยู่ในขั้นสุดท้ายz(สตริงว่าง) แล้วส่งต่อไปยังฟังก์ชันต่อไปนี้
  • y(:)#y(:) เป็นพารามิเตอร์ที่ถูกต้องในการเติมรหัสหลักของ quine ให้กับสตริงโดยไม่มีการดัดแปลงอื่น ๆ
  • ในที่สุด\x->xก็จะไม่ทำอะไรกับควินินที่สร้างขึ้น

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

ลองออนไลน์!

การตรวจสอบชุดไบต์ที่แตกต่างกัน

มีการหลบหลีกอย่างมากในการได้รับควินินที่สาม Perl 6 มี 4 วิธีการของการส่งออก (ที่ฉันรู้) say, put, และprint printfทั้งขึ้นบรรทัดใหม่sayและputส่งออกเนื่องจากฉันใช้ทั้งสองไม่ได้ 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:

นี่คือควินในรูปแบบprintf |(q[printf q[%s]]xx 2)คือมันจัดรูปแบบสำเนาของสตริงลงในตัวมันเอง แต่เราไม่สามารถใช้ตั้งแต่ที่ใช้ในควินก่อนหน้านี้s sayดังนั้นเราจึงใช้สตริงหรือโอเปอเรเตอร์ ( ~|) เปิด@และ!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ตลอดจนค่อนข้างน้อยlcและucการแปลงระหว่างกรณี

<...>.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 ไบต์

ฉันไม่สามารถเชื่อมโยงไปยังอันนี้ได้ดังนั้นนี่คือโปรแกรม Perl 6 ที่สร้างควินจริงขึ้นมา

ตรวจสอบความชัดเจน

ฉันสามารถบีบควินอื่นออกมาจากที่นี่ได้อีกแม้ว่าฉันคิดว่าฉันหมดทางที่จะดันสตริงตรงไปยังสแต็คดังนั้นฉันจะต้องหันไปใช้วิธีแปลก ๆ แม้กระทั่งคนแปลกหน้าเข้ามาในขณะที่ฉันพยายามควินินที่หก ในบางกรณี quines อาจสั้นลง แต่ฉันลดจำนวนไบต์ที่ใช้ในการเตรียมการ

โอเคฉันอาจใช้เทคนิคในการทำควินินอีกครั้งหนึ่งเนื่องจากฉันยังมีผู้ให้บริการไม่กี่คนที่ฉันต้องการ (สตริงการกด, สตริงการเพิ่ม, การทำซ้ำ, การทำแผนที่, การ popping) มันเป็นการวนรอบที่ จำกัด เรา {}เป็นผู้ประกอบการเท่านั้นที่สามารถสามารถบ่งบอกถึงการป้องกันรหัสของความยาวโดยพลการและฉันต้องการจริงๆพวกเขาในควินที่ 6 ฉันสามารถใช้บล็อคโค้ดอื่น ๆ ได้บ้าง แต่ก็มีข้อ จำกัด และฉันสงสัยว่าส่วนลูปที่วนจะสั้นนั้นเนื่องจากเราไม่มีตัวดำเนินการที่ง่าย

โอเคคำอธิบายล่าช้าบางอย่าง:

quines ทั้งหมดมีโครงสร้างเกือบจะเหมือนกัน:

  • กดสตริงหรือรายการสตริงหรือรายการของอักขระไปยังสแต็ก
  • รวมทุกอย่างไว้ในรายการเดียว
  • ทำซ้ำรายการ
  • แม็พกับการคัดลอกพิมพ์ / ดันอักขระที่ใช้เพื่อรับอักขระดั้งเดิม
  • พิมพ์รายการอักขระดั้งเดิมเป็นสตริง

ควิน 1:

โดยทั่วไปจะเหมือนกับที่ฉันโพสต์ในคำถามควินเซตามปกติ

ÿ'ÿ⌐_'ÿ⌐_
ÿ            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:

เหตุผลที่ควินนี่คือเพื่อให้นานกว่าคนอื่น ๆ ก็คือการเพิ่มสายใช้การแสดง Unicode ซึ่งจริงๆครับสำหรับบางส่วนของตัวอักษรในรหัสโดยเฉพาะอย่างยิ่งเมื่อเรากำลังพยายามที่จะสร้างตัวละครในรหัสซึ่งพองรหัส โดยอักขระมากกว่า 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

Quine สุดท้ายนี้จะลดลงอย่างมีนัยสำคัญหาก MathGolf สอดคล้องกับว่าสตริงใช้หน้ารหัสเนทีฟหรือไม่


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

@ max ฉันกำลังทำงานใน quine ที่หกและฉันจะโพสต์คำอธิบายเมื่อฉันโพสต์นั้นหรือให้มัน btw คำสั่ง chr / ord และอักขระที่เพิ่มขึ้นดูเหมือนไม่สอดคล้องกัน ครั้งแรกที่ใช้หน้ารหัสที่สองใช้ยูนิโค้ดทั่วไป (ซึ่งเป็นสิ่งที่ทำให้ควินินที่ 6 ดังนั้นยาว)
Jo King

ฉันรู้ว่าหลังจากใช้ไปไม่นานฉันเพิ่งใช้chr/ordหนึ่งในนั้นฉันควรทำให้ทั้งคู่ใช้โค้ดเพจแทนฉันคิดว่า
maxb

6

Python 2, 2 quines, 434 353 349 446 bytes

นี่เป็นเพียงเพื่อดูว่าฉันสามารถทำได้ใน Python

30 ไบต์ (รวมถึงบรรทัดใหม่ต่อท้าย):

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

และ 416 ไบต์โดยไม่มีการขึ้นบรรทัดใหม่:

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

(Golfed 81 ไบต์ต้องขอบคุณ Lynn แต่เพิ่มการโหลดเนื่องจากการดูแลเกี่ยวกับการขึ้นบรรทัดใหม่)

คำอธิบาย

คนแรกเป็นเพียงมาตรฐานสั้นหลามควิน_แต่การแก้ไขไม่ได้ที่จะใช้งาน ตั้งแต่นี้เป็นงูหลาม 2 ก็ยังไม่ได้ใช้หรือ()

อย่างที่สองเอาความคิดบางอย่าง สตริงที่ยาวถูกเข้ารหัสโดยใช้hexตัวแปลงสัญญาณ (ดังนั้นรับรองได้ว่ามันจะมี0- 9และa- 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เพื่อหลีกเลี่ยงการพิมพ์บรรทัดใหม่ การเรียกใช้รหัสนี้จะให้ผลลัพธ์ที่สองซึ่งเป็นวิธีที่ฉันสร้างขึ้น

ฉันสงสัยว่ามากกว่าสองเป็นไปไม่ได้ใน Python แม้ว่าฉันต้องการจะดูว่าฉันผิดหรือเปล่า!

หากคุณไม่สนใจคำถาม

Ørjan Johansen แนะนำสิ่งต่อไปนี้สำหรับควินินที่สองที่เข้ารหัสล่วงหน้า

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 ที่เหมาะสมแต่มันค่อนข้างจะโกงฉัน (ฉลาดและฉลาด แต่ยังโกง) เพราะตัวละครบางตัวถูกใช้เป็นทั้งรหัสและข้อมูล (แม้ว่าเวอร์ชั่นของฉันจะใช้execรหัสและข้อมูลแยกจากกัน) ดังนั้นฉันจะเก็บคะแนนไว้ที่ 446


1
"hex"ทำงานแทน"hex_codec"ซึ่งควรช่วยคุณไม่กี่ไบต์!
Lynn

1
ทำไมคุณไม่เพิ่มบรรทัดว่างตอนท้ายของควินินแรกหากการขึ้นบรรทัดใหม่มีความสำคัญ ... ?
mbomb007

1
เช่นนี้ ฉันเข้าใจว่านี่เป็นเคล็ดลับ quine มาตรฐานในภาษาที่มี exec / eval
Ørjan Johansen

1
ทำไมไม่นำรูปแบบเดียวกันกลับมาใช้ซ้ำอีกครั้ง ชอบไหม
Jo King

2
print '<tab>',ไม่ได้เพิ่มช่องว่างในท้ายที่สุด ใช้นี้คุณสามารถ 85 ไบต์ออกจากข้อเสนอแนะของโจคิงส์: tio.run/...
OVS

5

Japt , 2 3 ควาย, 106 172 ไบต์

คนแรกคือคำตอบที่ไม่เป็นทางการของฉัน

[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¹¬]¬

ลองได้ที่นี่

ควินที่สองคือควินที่ดีกว่าของ ETHProductionซึ่งเป็นควินมาตรฐานที่ดีสำหรับ Japt

"iQ ²"iQ ²

ลองได้ที่นี่

อันที่สามใช้``และรหัสถ่าน XORing เพื่อเก็บข้อมูล

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

ลองได้ที่นี่

เนื่องจาก()'ยังคงมีอยู่จึงอาจเป็นไปได้ที่จะบีบควินอีกหนึ่ง


1
ฉันอยากลองเล่นกอล์ฟตัวแรกจริงๆแต่ฉันรู้ว่ามีเบียร์อยู่ไม่กี่ตัวทันทีที่ฉันพยายามเปลี่ยนตัวละครตัวเดียวสมองของฉันจะระเบิด! ควายพิลึก!
Shaggy

@Shaggy การใช้บรรทัดล่างสุดและเรียกใช้งานผ่าน"'[+U+']+R+(Umd)¬"q mcจะช่วยให้คุณได้รับการอัปเดตด่วนหากคุณต้องการความช่วยเหลือ
น.ต.

ฉันได้ปรับโครงสร้างโซลูชันแรกให้มีสัญลักษณ์หลักเพิ่มเติมซึ่งอาจเป็นไปได้ในทางปฏิบัติเมื่อต้องการเพิ่มควินินอีกหนึ่งตอนนี้
นิด

รอตอนนี้คะแนนของคุณสูงขึ้น!
ปุย

@Shaggy โดยเจตนาดังนั้นฉันพยายามหาที่ว่างสำหรับควินินอีกอย่าทำให้มันสั้นลง
นิตย์

4

Gol> <> , 2 3 quines, 17 28 27 26 ไบต์

6 ไบต์

"r2ssH

ลองออนไลน์!

11 10 9 ไบต์

'3d*Wo{|;

ลองออนไลน์!

11 ไบต์

Eh`#Ma0piS0

ลองออนไลน์!

Gol> <> มีสามวิธีในการพิมพ์อักขระ:

  • o แสดงค่าหนึ่งและพิมพ์เป็นอักขระ
  • H เปิดทุกอย่างพิมพ์เป็นตัวอักษรและหยุด
  • S"..." พิมพ์สตริงตัวอักษรโดยไม่ส่งผลกระทบต่อสแต็คเลย

แต่ฉันไม่สามารถหาวิธีเขียน quine ที่ใช้S"..."เป็นวิธีการแสดงผลเพียงอย่างเดียวได้ดังนั้นฉันจึงใช้สองวิธีข้างต้นเพื่อใช้ตัวอักษรสตริงสองชนิด

หนึ่งในสาม (โดยโจคิง) ใช้pคำสั่งในการสร้าง"ในS"ทันทีซึ่งจะพิมพ์ทุกอย่างยกเว้นศูนย์ที่สิ้นสุด จากนั้นEhพิมพ์ศูนย์และออก

ตอนนี้เราใช้คำสั่งเอาต์พุตและpคำสั่งทั้งหมดหมดแล้วฉันเชื่อว่ามันเป็นไปไม่ได้ที่จะสร้างควินินอื่น (เว้นแต่มีบางคนมาด้วยS"ควินโดยที่ไม่มีp)


วิธีการเกี่ยวกับเรื่องนี้สำหรับS"..."?
Jo King

3

Ruby , 2 quines, 27 + 44 = 71 bytes

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

ลองออนไลน์!

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

ลองออนไลน์!

ฉันถูก จำกัด ด้วยวิธีการส่งออกส่วนใหญ่ที่นี่ มีวิธีการจัดการสตริงค่อนข้างน้อย แต่นอกเหนือจาก$><<วิธีการส่งออกที่ใช้งานได้ทั้งหมดดูเหมือนจะตัดกันมากเกินไป ฉันคิดว่าอาจจะมีวิธีการออกไปด้วยevalแต่มันก็เป็นเรื่องยากที่จะซ้อนการจัดการสตริงหลาย ๆ แบบที่แตกต่างกัน


3

Javascript ES6, 2 quines, 43 + 22 = 65 bytes

ควิน 1:

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

ควิน 2:

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

คุณสามารถบันทึกสองสามไบต์โดยไม่เรียกใช้ฟังก์ชันจากนั้นใช้เทมเพลตตัวอักษรในตัวที่สอง
ปุย

2
ดังนั้น JavaScript จึง outgolfs japt
dylnan

@ dylnan ไม่จนกว่ามันจะเพิ่ม quine ที่สาม
นิตย์

@Shaggy เฮ้ขอบคุณสำหรับการป้อนข้อมูลของคุณ แต่ฉันสับสน - quine ไม่ควรเป็นโปรแกรมแบบเต็มหรือไม่ หากเป็นฟังก์ชั่นจะต้องพิมพ์ด้วยตัวเองเท่านั้นหรือไม่ ดังนั้นจะg=z=>"g="+gเป็น quine JS ที่ถูกต้อง?
เปโดร A

1
@Nit ฉันจะเห็นสิ่งที่ฉันสามารถทำได้: P เมื่อ dylnan แสดงความคิดเห็น japt มีเพียง 2 quines เช่นกัน
Pedro A

3

> <> , 2 ผล, 8 + 16 = 24 ไบต์

8 ไบต์

#o<}-1:"

ลองออนไลน์!

นำมาจากคำตอบนี้


16 ไบต์

'r3d*d8*7+e0p>>|

ลองออนไลน์!

นี้จะขึ้นอยู่กับ'r3d*>o<ควินยกเว้นoและ<ไม่สามารถนำมาใช้เพื่อให้ฉันแทนที่<ด้วย|และสร้างขึ้นแบบไดนามิกo(111 = 8 * 13 + 7) และวางมันที่ 2 >คือ


2 ควินเป็นขีด จำกัด

น่าเสียดายที่เราถูก จำกัด ด้วยจำนวนคำสั่งเอาต์พุต nไม่มีประโยชน์เพราะมันจะแสดงเฉพาะตัวเลขดังนั้นoจะต้องดำเนินการในควินใด ๆ วิธีเดียวที่จะสร้างแบบไดนามิกอยู่กับo pดังนั้นควินินหนึ่งอันสามารถใช้ได้oและอีกอันสามารถสร้างมันpขึ้นมาได้ แต่จะไม่มีควินที่สาม

อาจเป็นไปได้ที่จะให้ quine ที่สามปล่อยซอร์สโค้ดไว้ในสแต็กหากนับ


2

Java 10, 2 quines, 1448 1248 bytes

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เมื่อไม่มีให้ดังนั้นTIO จะส่งกลับNullPointerExceptionในกรณีนี้

หากต้องการพิสูจน์ว่าเป็นควินินที่ใช้งานได้ให้แทนที่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

คำอธิบายทั่วไป:

ในจาวามักจะทำเช่นนี้

  • String sมีรหัสที่มาที่ยังไม่ฟอร์แมต
  • %sจะใช้ในการป้อนข้อมูล String s.format(...)นี้ลงในตัวเองด้วย
  • %c, %1$cและ34จะใช้ในการจัดรูปแบบราคาสองครั้ง
  • s.format(s,34,s) ทำให้มันเข้าด้วยกัน

ในกรณีนี้ฟังก์ชั่นแลมบ์ดาควินที่สั้นที่สุดใน Java 10 น่าจะเป็นสิ่งนี้ ( 82 ไบต์ ):

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

ลองออนไลน์

เนื่องจากวิธีเดียวที่มีสอง quines ใน Java คือการใช้รุ่น unicode ด้วย\uHEXAซึ่งถูกแปลงเป็นอักขระระหว่างการคอมไพล์ฉันไม่สามารถใช้อักขระ0123456789ABCDEF\uในรุ่นที่ไม่ใช่ Unicode ได้ ดังนั้นรุ่นที่ไม่ใช่ Unicode ที่มีขนาดเล็กจะใช้System.console()แทนreturnหรือSystem.out(ทั้งที่มี 'U') และจะใช้'}'-'['และครั้งที่สอง%cแทนและ34%1$c

บางสิ่งที่ควรทราบเกี่ยวกับรุ่น Unicode:

  • ฉันตั้งใจจะใช้%04Xแทน%04x(สำหรับเลขฐานสิบหกตัวพิมพ์ใหญ่แทนที่จะเป็นตัวพิมพ์เล็ก)
  • ฉันใช้92, %cและ%3$cการจัดรูปแบบทับ
  • ใช้ทุน\Uแทนการพิมพ์เล็ก\uไม่ได้รับอนุญาตที่เห็นได้ชัดอย่างอื่นผมจะได้ใช้เพียงแค่returnในรุ่นที่ไม่ใช่ Unicode สั้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.