> <> (ปลา), 145 107 ไบต์
คำตอบนี้ใช้> <> คำสั่งการกระโดดเพื่อแก้ไขปัญหา
!<0078*+00~..>0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.0f<>0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.0+*a58
Quine นี้มีเครื่องกำเนิดไฟฟ้าควินสองตัวที่ต่างกันจริงๆ มันเริ่มต้นด้วยตรรกะการกระโดดและโดยค่าเริ่มต้นใช้ควินซ้าย หากตัวละครถูกลบออกจากตรรกะการกระโดดหรือจากควินซีซ้ายโปรแกรมจะกระโดดไปที่ควินขวา
คุณสามารถลองได้ที่นี่
คำอธิบาย
รหัสสามารถแบ่งออกเป็นสองสามส่วน:
A: !<0078*+00~..>0[!.
B: >0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.
C: .0f<
D: >0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.
E: .0+*a58
คำอธิบายของส่วนต่าง ๆ :
- A: ข้ามไปทางขวาของ C หากตัวละครใด ๆ ถูกลบออกจาก A สิ่งนี้จะกระโดดไปทางซ้ายของ D หรือทางขวาของ E เพื่อเรียกควินที่สอง หากตัวละครใด ๆ ถูกลบออกจาก B หรือ C รหัสจะถูกย้าย 1 ตัวไปทางซ้ายทำให้สิ่งนี้กระโดดข้ามไปทางซ้ายของ D
- C: รหัสนี้กระโดดไปทางซ้ายของ B.
- B: Quine # 1
- D: Quine # 2
- E: ข้ามไปทางซ้ายของ D
คำอธิบายของควิน (พร้อม # 1 เป็นตัวอย่าง):
เมื่อตัวชี้การเรียนการสอนมาถึง quines อย่างใดอย่างหนึ่งคุณมั่นใจว่าควินินสมบูรณ์
>0[!. //Fix the instruction pointer's direction and empty the stack (The '!.' is a leftover from codepart A)
"r43a*+ //Start reading all of the code and add the '"' character to the stack
8a+& //Because the quine started reading at the 19th character instead of the first, the stack has to move 18 characters.
//This part saves the number 18 to the register.
{ee+00&1-:&(?. //Move the stack one to the left, decrease the stack by 1. If the stack is not empty yet, jump back to the start of this section.
~~ //Clean the temporary variables from the stack. It should now contain the whole quine.
ol?!;4b*0. //Print the first character from the stack. As long as the stack isn't empty, jump back to the start of this section.