Quine สองช่อง


11

วัตถุประสงค์:

โค้ดสองโปรแกรมที่แต่ละโปรแกรมแสดงโค้ดต้นฉบับทั้งสองอินเทอร์เรซต่ออักขระเช่นซิปซึ่งเป็น Double-Slit Quine เอาต์พุตจาก Double-slit Quine เริ่มต้นด้วยอักขระตัวแรกจากซอร์สโค้ดของโปรแกรมแรก หากซอร์สโค้ดของโปรแกรมใดโปรแกรมหนึ่งมีความยาวสั้นกว่าโปรแกรมอื่นดังนั้นเอาต์พุตที่เหลือจะต้องถูกเติมด้วยซอร์สโค้ดที่เหลือ

กฎ:

  1. คุณสามารถใช้ภาษาการเขียนโปรแกรมสำหรับทั้งสองโปรแกรมโดยไม่จำเป็นต้องใช้ภาษาการเขียนโปรแกรมเดียวกันสำหรับทั้งสองโปรแกรม
  2. โปรแกรมของคุณไม่ควรรับอินพุตใด ๆ จากไฟล์ชื่อไฟล์เครือข่ายโปรแกรมอื่นหรืออะไรก็ตาม

เกณฑ์ที่บังคับ:

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

ตัวอย่าง:

มีรหัสนี้ตัวอย่างเช่นแหล่งที่มาของโปรแกรมหนึ่ง :

"QIE"

มีตัวอย่างซอร์สโค้ดของโปรแกรมที่สอง :

"UN"

ดังนั้นเอาต์พุต Quine Double-slit ที่ถูกต้องจากทั้งสองโปรแกรมจะต้อง:

""QUINE""

นี่คือโค้ดกอล์ฟอย่างน้อยไบต์เมื่อรวมความยาวของรหัสที่มาทั้งสองและเห็นได้ชัดว่าความยาวของแต่ละโปรแกรมออกชนะ!


แต่ละโปรแกรมไม่จำเป็นต้องเป็น quine ด้วยใช่ไหม? และแต่ละโปรแกรมต้องมีอักขระอย่างน้อยหนึ่งตัว
mbomb007

@ mbomb007 นั่นถูกต้อง แต่ละโปรแกรมควรส่งออกทั้งตัวละครซอร์สโค้ดเช่นซิปตั้งแต่ต้นจนจบ ฉันคิดว่าคุณต้องมีอย่างน้อย 1 ไบต์ในภาษาการเขียนโปรแกรมเพื่อออก QUINE ผลลัพธ์จากทั้งสองโปรแกรมจะต้องเหมือนกัน
Plarsen

ฉันไม่แน่ใจว่าฉันเข้าใจว่าส่วนที่เหลือของการส่งออกจะต้องเต็มไปด้วยส่วนที่เหลือของรหัสที่มาอีกต่อไปอย่างถูกต้อง จะเป็นอย่างไรAและXYZถูก interleaved? AXYZ?
เดนนิส

@Dennis เหมือนกับ.+หรือzทำงาน
เครื่องมือเพิ่มประสิทธิภาพ

@Dennis ถูกต้อง สิ่งที่เหลืออยู่จากซอร์สโค้ดที่ยาวขึ้นเมื่อจำนวนไบต์ที่สั้นกว่านั้นต้องผนวกเข้ากับเอาท์พุทจากทั้งสองโปรแกรม
Plarsen

คำตอบ:


9

CJam, 49 47 ไบต์

{`:_"__~~e#QUINE"}_~

และ

{`:_"__~~e#QUINE"}_~e#QUINE

ทั้งพิมพ์

{{``""__~~""++::__""ee##QQUUIINNEE""}}__~~e#QUINE

ลองออนไลน์: โปรแกรม 1 , โปรแกรม 2 , หลักฐานการใช้งาน

พวกเขาทำงานอย่างไร

{                }   e# Push a code block.
                  _~ e# Execute a copy.
 `                   e# Convert the code block into a string.
  :_                 e# Duplicate each character of the resulting string.
    "__~~e#QUINE"    e# Push this string.

โปรแกรม 1 เสร็จสิ้นที่นี่และมีการแสดงสตริงของรหัสต้นฉบับทั้งหมด (ซึ่งอักขระแต่ละตัวซ้ำสองครั้ง) รวมถึงสตริงe # QUINEบนสแต็ก

โปรแกรม 2 จะแยกวิเคราะห์เพิ่มเติมe#QUINEซึ่งเป็นความคิดเห็น

ในทั้งสองกรณี CJam พิมพ์ทั้งสองสายโดยอัตโนมัติทำให้เกิดผลลัพธ์ดังกล่าว


4

อย่างจริงจัง46 56 42 ไบต์

QUNX;RZtdXεj.ƒ£REIQ

ฐานสิบหก:

51554e583b525a746458ee6a2e7f9f9c524549510a

โปรแกรมที่สองคือโปรแกรมที่ตรงกันข้ามนี้ มันมีตัวละครที่มองไม่เห็น แต่นับไบต์ถูกต้อง ทั้งสองโปรแกรมแสดงผลสตริง palindromic นี้:


QQUINEXR;£RƒZ⌂t.djXεεXjd.t⌂ZƒR£;RXENIUQQ

(ด้วยเหตุผลบางอย่างมันจะแสดงตัวละครที่มองไม่เห็นเมื่อมันออกมาในเทอร์มินัลของฉันฉันไม่เข้าใจว่าไบต์ 7F จริง ๆ )

มันทำงานอย่างไร:

Q                     Push the source to the stack
 U                    Nop
  NX                  Push and pop lyrics to 99 bottles of beer
    ;R                Make a copy of the source reversed.
      Z               Zip them together.
       t              Completely flatten the list.
        dX            Delete the trailing newline
          εj          Join it into a string.
            .         Print it with a trailing newline.
             ⌂        (This is that 7F byte that won't show up. It halts.)

ส่วนที่เหลือของโปรแกรมจะไม่ถูกดำเนินการ

จากนั้นอีกทิศทางหนึ่ง:

\n                   Nop
  Q                  Push the source code.
   IE                Nops
     R               Reverse source code to get source of first program
      £              Eval it into a function
       ƒ             Call it.

ณ จุดนี้เรากำลังเรียกใช้โปรแกรมแรกข้างต้นดังนั้นการดำเนินการต่อไปตามที่อธิบายไว้ที่นั่น

ฉันใช้ประโยชน์จากความจริงที่ว่าหลายคำสั่งไม่ทำอะไรกับสตริงหรือสแต็คที่ว่างเปล่าที่นี่ ฉันยังใช้ประโยชน์จากพฤติกรรมที่ไม่คาดคิดtเมื่อมีเพียงหนึ่งรายการในกองซ้อน อย่าคาดหวังว่าโปรแกรมนี้จะทำงานอย่างจริงจังในเวอร์ชันอนาคต

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


@Dennis คุณทดสอบบนคอมพิวเตอร์ของคุณหรือไม่ นั่นอาจเป็นสิ่งประดิษฐ์ของสภาพแวดล้อมการสร้างของฉันเอง
quintopia

@Dennis nvm คุณพูดถูก วิธีการส่งออกทั้งหมดอย่างจริงจังเพิ่ม linefeed ฉันสามารถแก้ไขได้ที่ราคา 8 ไบต์ ดูเหมือนว่าวิธีการของคุณจะสั้นกว่า (ซึ่งน่าเศร้าเพราะวิธีนี้คือ IMO ที่เย็นกว่า)
quintopia

1

GolfScript ขนาด 46 ไบต์

{`{.}%"..~~QUINE"}.~

และ

{`{.}%"..~~QUINE"}.~QUINE

ทั้งพิมพ์

{{``{{..}}%%""....~~~~QQUUIINNEE""}}..~~QUINE

ลองออนไลน์: โปรแกรม 1 , โปรแกรม 2 , หลักฐานการใช้งาน

มันทำงานอย่างไร

{`{.}%"..~~QUINE"}.~

{                }    # Push a code block.
                  .~  # Execute a copy.
 `                    # Convert the code block into a string.
  {.}%                # Duplicate each character of the resulting string.
      "..~~QUINE"     # Push that string.

ซอร์สโค้ดของโปรแกรม 2 แยกวิเคราะห์เพิ่มเติมQUINE\nซึ่งเป็นโทเค็นที่ไม่ได้กำหนดสองชุด


1

Perl, 61 + 60 = 121 ไบต์

โปรแกรม 1:

$x=q<print"\$x=q<$x>;eval\$x#"=~s/./$&$&/gr,QUINE>;eval$x#QIE

โปรแกรม 2:

$x=q<print"\$x=q<$x>;eval\$x#"=~s/./$&$&/gr,QUINE>;eval$x#UN

ฉันคิดว่าฉันจะให้มันเป็นภาษาที่ไม่ใช่กอล์ฟ นี่เป็นเพียงตัวสร้าง quine สากลใน Perl ที่ดัดแปลงเพื่อเพิ่มตัวละครทุกตัวก่อนที่จะพิมพ์และผนวกQUINEเข้ากับท้าย จากนั้นเราก็ต้องติดความคิดเห็นที่ท้ายรหัสเพื่อชดเชยข้อความที่เพิ่มเข้ามา

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.