สองหน้าที่ควิน: quine! dlroW, olleH


13

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

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

นี่คือโค้ดกอล์ฟดังนั้นจำนวนไบต์ที่น้อยที่สุดจึงชนะ

แก้ไข : ควินของคุณจะต้องเป็นควินที่เหมาะสม



4
@ ดูเหมือนจะยุติธรรมนี่ไม่ใช่ลักษณะทั่วไปที่ฉันพูดถึงเพราะนี่ไม่ใช่ "ฟังก์ชั่นการพิมพ์ X ของซอร์สโค้ดของคุณ" ที่กล่าวว่าอาจจะไม่เล่นแตกต่างจาก "เมื่อคุณกลับรายการ ... " ความท้าทายที่เรามี
Martin Ender

1
@ MartinBüttnerมันคล้ายกับความท้าทายที่คุณอธิบายว่าฉันรู้สึกว่าใช้เหตุผลเดียวกัน
Mego

คำตอบ:


8

Y, 19 ไบต์

Upxp"!dlroW ,olleH"

Uจับสตริงด้วยUที่จุดเริ่มต้นจนกว่าUจะพบต่อไปในกรณีนี้รหัสแหล่งที่มา pพิมพ์รายการและxเป็นลิงค์การเลิกจ้าง เมื่อกลับด้านนี่ดูเหมือนว่า:

"Hello, World!"pxpU

นี้รวบรวมสตริงและพิมพ์ด้วยอีกครั้งการยกเลิกโปรแกรมที่มีpx

ลองที่นี่!


4
UผลักUโดยปริยาย? ಠ_ಠ
SP3000

1
@ Sp3000 มันถูกสร้างขึ้นเพื่อให้โปรแกรมสามารถแก้ไขได้ ในทางเทคนิคแล้วUคำสั่งคือ "คำสั่งจับการเชื่อมโยงโซ่" มันไม่ได้ถูกสร้างขึ้นมาเพื่อการปลุก แต่มันจะไม่ทำให้ฉันไม่สามารถใช้มันเพื่อการทดสอบได้ : P
Conor O'Brien

1
ฉันไม่แน่ใจว่านี่ถือว่าเป็นควินที่เหมาะสม ความหมายของเราต้องมีส่วนของโปรแกรมที่เข้ารหัสส่วนที่แตกต่างกันของโปรแกรมแต่เพียงถอดรหัสU... U...
เดนนิส

@Dennis กำหนดตัวเข้ารหัสหรือไม่ ฉันคิดว่าpบิตทำเอาท์พุตซึ่งเป็นส่วนหนึ่งของการเข้ารหัส
Conor O'Brien

1
ฉันเข้ารหัสเป็นสิ่งที่สร้างผลลัพธ์ดังนั้นpและxจะไม่นับ ตัวอย่างเช่น Quine SMBF ที่สั้นที่สุดยังถือว่าเป็น quine quine แม้ว่ารหัสจะต้องพิมพ์ อาจจะคุ้มค่าที่ขอให้มาร์ตินชี้แจง
เดนนิส

20

JavaScript (ES6), 42 38 ไบต์

f=_=>/\//g&&"f="+f||"!dlroW ,olleH">=_

ย้อนกลับ

_=>"Hello, World!"||f+"=f"&&g//\/>=_=f

คำอธิบาย

Hello, World!เมื่อกลับมันจะกลายเป็นฟังก์ชั่นที่ไม่ระบุชื่อที่ส่งกลับสตริง

regex /\//gจะกลายเป็นความคิดเห็นเมื่อมีการย้อนกลับซึ่งจะช่วยให้ความไม่ถูกต้อง syntactically >=_=fที่จะแสดงความคิดเห็นในรหัสที่กลับรายการ


มันฉลาดมาก :) ฉันจะไม่คิดเรื่องนี้
ericw31415

3
+1 เพื่อดวงตาที่สวยงาม: =_=.
Darrel Hoffman

6

JavaScript (ES6), 71 ไบต์

trela=a=>alert("trela="+trela+"\ntrela\n``")//
`!dlroW ,olleH`
trela
``

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

บรรทัดที่ 1 กำหนดฟังก์ชั่นtrelaเมื่อรันเอาต์พุตรหัสต้นฉบับของโปรแกรม บรรทัดที่ 2 เป็นสตริงที่ไม่ได้กำหนดไม่ทำอะไรเลย บรรทัดที่ 3 และ 4 การเรียกที่ไม่trelaถูกต้องใช้ไวยากรณ์สตริงแม่แบบ

ย้อนกลับ

``
alert
`Hello, World!`
//)"``n\alertn\"+alert+"=alert"(trela>=a=alert

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

บรรทัดที่ 1 เป็นสตริงที่ไม่ได้กำหนดไม่ทำอะไรเลย เส้นที่ 2 และ 3 Hello, World!ละเมิดไวยากรณ์สตริงแม่แบบในการพิมพ์ บรรทัด 4 คือความคิดเห็น


ฉันเห็นว่าจาวาสคริปต์ดูเหมือนว่าจะมีบางส่วนที่มีไวยากรณ์ อย่างน้อยก็มากกว่า Python เยี่ยมมาก
R. Kap

ว่างเปล่า``ไม่จำเป็นหรือไม่?
Rɪᴋᴇʀ

@EasterlyIrk ไม่จำเป็นต้องเรียกใช้trelaฟังก์ชัน (ซึ่งพิมพ์ควินิน) ในเวอร์ชันส่งต่อ
jrich

@ jrich โอ้ฉันไม่ได้ตระหนักว่า``เป็นข้อโต้แย้ง เย็น.
Rɪᴋᴇʀ

2
ฉันรู้สึกเหมือนฉันควรจะคุ้นเคยกับการดูtrelaรอบ ๆ ที่นี่ ... > _>
Conor O'Brien



2

ผลตอบแทน 94 ไบต์

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'

ย้อนกลับ

'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"

Try it here.

ส่งออกไปยัง STDOUT จนกว่าฉันจะพบกรอบที่ดีกว่า quine นี้จะต้องทำตอนนี้

คำอธิบาย

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"

สิ่งนี้มีสตริง quine ในทางกลับกันสิ่งนี้จะถูกส่งไปยังสแต็ก แต่ไม่มีเอาต์พุต

34¤¤,,,,,,,,,,,,,

สิ่งนี้จะผลักเครื่องหมายอัญประกาศไปที่สแต็กและส่งออกผลลัพธ์สองครั้งจนกว่าจะไม่มีอะไรเหลือที่จะส่งออก ในทางกลับกันสิ่งนี้จะพิมพ์อักขระ charcodes ที่มีอยู่แล้วในสแต็ก

% 'H'e'l'l'o',' 'w'o'r'l'd'!'

อันนี้ปรากฏไอเท็มสแต็กด้านบน (ในทางกลับกัน, จะป็อปอัพ space char) และผลักชุดของ charcodes ไปที่สแต็ก (ในทางกลับกัน, charcodes เหล่านี้จะถูกพิมพ์โดยชุดของในภายหลัง,)


ฉันไม่สามารถบอกได้ว่านี่เป็นรหัส RETURN ที่บ้าคลั่งจริง ๆ หรือเพียงแค่รหัส RETURN ปกติ ._
Downgoat

ทั้งสอง; _; ฉันร้องไห้ everytiem
Mama Fun Roll

2

ฟิชชัน 2, 42 ไบต์

การดัดแปลงที่ไร้ยางอายของ quine ที่ยอดเยี่ยมโดย @ MartinBüttnerในคำตอบนี้

'!+O!'!d'!l'!r'!o'!W'! '!,'!o'!!l'!e'!H'R"

ลองออนไลน์

และกลับด้าน

"R'H!'e!'l!!'o!',!' !'W!'o!'r!'l!'d!'!O+!'

ลองออนไลน์

ในรุ่น quine อะตอมเริ่มต้นที่ส่วนRหัวขวา "โหมดเริ่มต้นการพิมพ์ซึ่ง wraps ต่อไป"(เอง) "พิมพ์นี้ทุกอย่างยกเว้น ตั้งอะตอมเพื่อถ่าน '!+ พิมพ์ออกมาและทำลายอะตอมที่สิ้นสุดโปรแกรม"O

เวอร์ชันที่กลับด้านเริ่มต้นที่Rอีกครั้งและสำหรับตัวละครแต่ละตัวในHello, Worldชุดอะตอมและพิมพ์!ออกมาโดยไม่ทำลายอะตอม สำหรับอักขระตัวสุดท้าย!การพิมพ์Oจะทำลายอะตอม



0

Python 2, 131 ไบต์

ส่งต่อ:

print(lambda x:x+repr(x)+")#'!dlroW ,olleH' tnirp")('print(lambda x:x+repr(x)+")#\'!dlroW ,olleH\' tnirp")(')#'!dlroW ,olleH' tnirp

ย้อนกลับ:

print 'Hello, World!'#)'()"print '\Hello, World!'\#)"+)x(rper+x:x adbmal(tnirp'()"print 'Hello, World!'#)"+)x(rper+x:x adbmal(tnirp

ครึ่งแรกเป็นควินบรรทัดเดียวตามด้วย a #เพื่อแสดงความคิดเห็นโดยแยกครึ่งแรกออกจากครึ่งหลังที่ง่ายกว่า


การปรับ_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Quine


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