> <> (Рыба), 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.
- B: Quine # 1
- D: Quine # 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.