> <> (Ikan), 145 107 byte
Jawaban ini menggunakan> <> instruksi lompatan untuk memperbaiki masalah.
!<0078*+00~..>0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.0f<>0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.0+*a58
Quine ini sebenarnya mengandung dua generator quine yang berbeda. Dimulai dengan beberapa logika jumping dan secara default menggunakan quine kiri. Jika sebuah karakter dihapus dari logika lompat atau dari quine kiri, program melompat ke quine kanan.
Anda bisa mencobanya di sini
Penjelasan
Kode dapat dibedah menjadi beberapa bagian:
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
Penjelasan dari berbagai bagian:
- A: Melompat ke kanan C. Jika ada karakter yang dihapus dari A, ini melompat ke kiri D atau kanan E, memicu quine kedua. Jika ada karakter yang dihapus dari B atau C, kode tersebut digeser 1 karakter ke kiri, menyebabkan ini melompat ke kiri D.
- C: Kode ini melompat ke kiri B.
- B: Quine # 1
- D: Quine # 2
- E: Melompat ke kiri D
Penjelasan quine (dengan # 1 sebagai contoh):
Setelah penunjuk instruksi mencapai salah satu quine, Anda yakin quine itu benar-benar utuh.
>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.