> <> (Peixe), 145 107 bytes
Esta resposta usa a instrução de salto de> <> para corrigir o problema.
!<0078*+00~..>0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.0f<>0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.0+*a58
Na verdade, esse quine contém dois geradores de quine diferentes. Começa com alguma lógica de salto e, por padrão, usa o quine esquerdo. Se um caractere for removido da lógica de salto ou da margem esquerda, o programa salta para a margem direita.
Você pode tentar aqui
Explicação
O código pode ser dissecado em algumas partes:
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
Explicação das diferentes partes:
- A: Salta para a direita de C. Se algum caractere for excluído de A, ele salta para a esquerda de D ou para a direita de E, acionando o segundo quine. Se algum caractere for excluído de B ou C, o código será deslocado 1 caractere para a esquerda, fazendo com que ele pule para a esquerda de D.
- C: Este código salta para a esquerda de B.
- B: Quine # 1
- D: Quine # 2
- E: Salta para a esquerda de D
Explicação do quine (com # 1 como exemplo):
Uma vez que o ponteiro da instrução chegue a um dos quines, você tem certeza de que o quine está completamente intacto.
>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.