> <> (Риба), 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
Ця квіта фактично містить два різних генераторів квіни. Він починається з певної логіки стрибків і за замовчуванням використовує ліву квітку. Якщо символ вилучений із логіки стрибків або з лівої лайки, програма переходить до правої лайки.
Ви можете спробувати тут
Пояснення
Код можна розчленувати на кілька частин:
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.
- Б: Квінка №1
- Д: Квінка №2
- E: Стрибки ліворуч від D
Пояснення квітки (із прикладом №1):
Як тільки вказівник досягне будь-якої лайки, ви впевнені, що ця квітка повністю недоторкана.
>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.