> <> (Pez), 145107 bytes
Esta respuesta utiliza la instrucción de salto de> <> para solucionar el problema.
!<0078*+00~..>0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.0f<>0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.0+*a58
Esta quina en realidad contiene dos generadores de quina diferentes. Comienza con algo de lógica de salto y, por defecto, usa la quine izquierda. Si se elimina un personaje de la lógica de salto o de la línea izquierda, el programa salta a la línea derecha.
Puedes probarlo aquí
Explicación
El código se puede diseccionar en algunas 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
Explicación de las diferentes partes:
- A: Salta a la derecha de C. Si se elimina algún carácter de A, salta a la izquierda de D o a la derecha de E, lo que activa la segunda quine. Si se elimina algún carácter de B o C, el código se desplaza 1 carácter a la izquierda, lo que hace que salte a la izquierda de D.
- C: este código salta a la izquierda de B.
- B: Quine # 1
- D: Quine # 2
- E: salta a la izquierda de D
Explicación de la quine (con # 1 como ejemplo):
Una vez que el puntero de instrucción alcanza cualquiera de las quines, está seguro de que esa quine está completamente intacta.
>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.