CJam, ( 58 56 54 48 46 x 2) * 48% = 44.16
{`"_~"+{_,94\m2/S*a_+\*
N/23f/Wf%N*}_`'"#)!*}_~
ซึ่งพิมพ์
{`"_~"+{_,94\m2/S*a_+\*
N/23f/Wf%N*}_`'"#)!*}_~
อักขระที่ไม่ใช่ช่องว่างในแต่ละบรรทัดจะยังคงเหมือนเดิมระหว่างสอง quines ร่วมกัน
แต่ตอนนี้เป็นส่วนที่หวานจริงๆ:
{`"_~"+{_,94\m2/S*a_+\*{`"_~"+{_,94\m2/S*a_+\*
N/23f/Wf%N*}_`'"#)!*}_~N/23f/Wf%N*}_`'"#)!*}_~
เป็นควิน! :)
ทดสอบที่นี่
มันทำงานอย่างไร
ฉันขอแนะนำให้คุณอ่านคำอธิบายเกี่ยวกับการส่งอื่น ๆ ของฉันก่อนเพราะอธิบายพื้นฐานของการเขียนข้อความใน CJam โดยทั่วไป
อันนี้ค่อนข้างหลอกลวง สำหรับ quine ร่วมกันในกรณีอื่นฉันจะแก้ไขการแทนค่าสตริงของบล็อกโดยการเพิ่มช่องว่างก่อนหรือหลังแต่ละบรรทัดและทำการสลับ 0 กับ 2 เพื่อให้โปรแกรมที่ได้นั้นวางช่องว่างไว้ที่ด้านตรงข้าม
โปรดทราบว่าช่องว่างจะไม่ส่งผลกระทบต่อข้อตกลงร่วมกันเลย ในครั้งแรกพวกเขาอยู่ในบล็อกซึ่งไม่ได้ใช้จริงและในวินาทีที่พวกเขาอยู่รอบรหัสทั้งหมด
เพื่อให้ได้ควินปกติเมื่อรวมเข้าด้วยกันเราต้องหาวิธีที่จะหลีกเลี่ยงการแก้ไขทั้งหมด โปรดสังเกตว่าโครงสร้างของช่องว่างและรหัสหมายความว่าเมื่อรวมทั้งสองอย่างเข้าด้วยกันเราจะแทรกทั้ง quine หนึ่งเข้าไปในอีก quine ดังนั้นหากเราใส่รหัสการปรับเปลี่ยนทั้งหมดลงในบล็อกเราสามารถเรียกใช้บล็อกนั้นขึ้นอยู่กับเนื้อหาจริง
ดังนั้นตอนนี้ฉันมีบล็อกนี้ ... สำหรับ quines ร่วมมันมีเฉพาะรหัสที่ฉันต้องการเรียกใช้จริง ๆ สำหรับ quine ที่รวมกันมันยังมี quine ทั้งหมดอีกครั้งในตำแหน่งสุ่มซึ่งไม่สมเหตุสมผลใด ๆ ... แต่เนื่องจากเป็นบล็อกจึงไม่ทำงานโดยอัตโนมัติ ดังนั้นเราสามารถตรวจสอบว่าจะแก้ไขสตริงตามเนื้อหาของบล็อกนั้นหรือไม่ นั่นคือสิ่งที่_`'"#)!
มีไว้เพื่อ มันทำซ้ำบล็อกแปลงเป็นสตริงค้นหาอักขระ"
(ซึ่งใน quines ร่วมกันจะปรากฏเฉพาะนอกบล็อก) - การค้นหาส่งคืน-1
หากไม่พบอักขระและจำนวนเต็มบวก - เพิ่มผลลัพธ์ และปฏิเสธมันอย่างมีเหตุมีผล ดังนั้นหาก"
พบว่าสิ่งนี้ให้ผลเป็น0
อย่างอื่น1
มิฉะนั้นอัตราผลตอบแทนตอนนี้เราแค่ทำ*
ซึ่งจะดำเนินการบล็อกครั้งเดียวหากผลลัพธ์เป็น 1 และไม่เป็นอย่างอื่น
ในที่สุดนี่คือวิธีการปรับเปลี่ยนรหัสการทำงาน:
_,94\m2/S*a_+\*N/23f/Wf%N*
_, "Duplicate the quine string and get its length.";
94\m "Subtract from 94.";
2/ "Divide by two.";
S* "Create a string with that many spaces. This will be
an empty string for the first mutual quine, and contain
23 spaces for the second mutual quine.";
a_+ "Create an array that contains this string twice.";
\* "Join the two copies together with the quine string.";
N/ "Split into lines.";
23f/ "Split each line into halves (23 bytes each).";
Wf% "Reverse the two halves of each line.";
N* "Join with a newline.";
รับเงินรางวัล (12 x 10) * 48% = 57.6
ปรากฎว่ารหัสนี้สามารถแบ่งมากกว่าบรรทัดได้ง่ายขึ้นด้วยการแก้ไขบางอย่าง เราเพิ่ม 2 ตัวอักษรเพื่อให้ได้ 48 แถวติดต่อกันซึ่งเราสามารถหารด้วย 8 ได้อย่างสะดวกดังนั้นเราจึงมี 8 บรรทัดพร้อมรหัส 6 ตัวและ 6 ช่องว่าง ในการทำเช่นนั้นเราต้องเปลี่ยนตัวเลขสองสามตัวและจัดเรียงตัวดำเนินการใหม่หรือสองตัวดังนั้นพวกเขาจึงไม่แยกทั้งสองบรรทัด นั่นทำให้เรามีเวอร์ชั่นใช้งานด้วยขนาด12 x 8 ... อีกหนึ่งความต้องการ ดังนั้นเราแค่เพิ่มสองบรรทัดที่ไม่ทำอะไรเลย (กด 1, กด 1, กด 1, กด 1, เลื่อน 1 ... ), ไปที่12 x 10 :
{`"_~"
+{129X
$,m2/S
*a_+\*
N/6f/1
;1;1;1
;1;1;1
;Wf%N*
}_`'"#
)!*}_~
เช่นเดียวกับก่อนหน้านี้ผลิต
{`"_~"
+{129X
$,m2/S
*a_+\*
N/6f/1
;1;1;1
;1;1;1
;Wf%N*
}_`'"#
)!*}_~
(หมายเหตุด้าน: ไม่จำเป็นต้องสลับซ้ายและขวาบนเส้นกลางเพียงตำแหน่งของบรรทัดแรกและบรรทัดสุดท้ายเท่านั้นที่มีความสำคัญคุณสามารถเลือกซ้ายและขวาได้โดยอิสระสำหรับบรรทัดอื่น ๆ )
และด้วยความบังเอิญที่บริสุทธิ์ควินเต็มก็ยังใช้งานได้:
{`"_~"{`"_~"
+{129X+{129X
$,m2/S$,m2/S
*a_+\**a_+\*
N/6f/1N/6f/1
;1;1;1;1;1;1
;1;1;1;1;1;1
;Wf%N*;Wf%N*
}_`'"#}_`'"#
)!*}_~)!*}_~
(ฉันบอกว่าบังเอิญเพราะส่วนที่ดูแลไม่ดำเนินการโค้ดภายในตอนนี้ได้รับการสลับกับควินอื่น ๆ แปลก ๆ แต่มันก็ยังเกิดขึ้นในการทำงานได้ดี)
ที่ถูกกล่าวว่าฉันจะได้เพิ่ม 44 บรรทัดของ1;
การส่งต้นฉบับของฉันเพื่อตอบสนองความต้องการความโปรดปราน แต่12 x 10
ดู neater มาก ;)
แก้ไข:ฮ่าฮ่าเมื่อฉันพูดว่า "บังเอิญแท้ๆ" ฉันไม่สามารถทำอะไรได้มากกว่านี้ ฉันดูว่าตอนนี้ควินินสุดท้ายใช้งานได้จริงอย่างไรและมันไร้สาระอย่างแน่นอน มีสามบล็อกซ้อนกัน (4 อันที่จริงแล้ว แต่ส่วนในสุดนั้นไม่เกี่ยวข้อง) ส่วนที่สำคัญที่สุดของส่วนท้ายสุดของบล็อกทั้งสามนั้นคือมันมี"
(และไม่ใช่ส่วนที่อยู่ในการส่งดั้งเดิม แต่ส่วนมาก'"
ที่ใช้ในตอนท้ายเพื่อตรวจสอบอักขระเดียวกันนี้) ดังนั้นโครงสร้างพื้นฐานของควินคือ:
{`"_~"{`"_~"+{___'"___}_`'"#)!*}_~)!*}_~
ลองผ่าว่า:
{`"_~" }_~ "The standard CJam quine.";
{`"_~"+ }_~ "Another CJam quine. Provided it doesn't do
anything in the rest of that block, this
will leave this inner block as a string on
the stack.";
) "Slice the last character off the string.";
! "Negate... this yields 0.";
* "Repeat the string zero times.";
ดังนั้นสิ่งนี้จึงทำเวทมนตร์ตลก ๆ แต่เนื่องจากบล็อกด้านในออกจากสายอักขระเดียวบนสแต็กจึง)!*
เกิดเป็นสายอักขระว่างเปล่า เงื่อนไขเดียวคือสิ่งของในบล็อกด้านในหลังจาก+
ไม่ได้ทำอะไรกับสแต็คดังนั้นให้ดูที่:
{___'"___} "Push a block which happens to contain
quotes.";
_`'"#)!* "This is from the original code and just
removes the block if it does contain
quotes.";