> <> (Balık), 145 107 bayt
Bu cevap sorunu çözmek için> <> 'nin atlama talimatını kullanır.
!<0078*+00~..>0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.0f<>0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.0+*a58
Bu quine aslında iki farklı quine üreteci içerir. Bazı atlama mantıklarıyla başlar ve varsayılan olarak soldaki sırayı kullanır. Bir karakter atlama mantığından veya soldaki dizgeden kaldırılırsa, program sağdaki çizgiye atlar.
Burada deneyebilirsiniz
açıklama
Kod birkaç parçaya ayrılabilir:
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
Farklı parçaların açıklaması:
- A: C'nin sağına atlar. Herhangi bir karakter A'dan silinirse, bu D'nin soluna veya E'nin sağına atlayarak ikinci sırayı tetikler. Herhangi bir karakter B veya C'den silinirse, kod 1 karakter sola kaydırılır ve bu, D'nin sola atlamasına neden olur.
- C: Bu kod B'nin soluna atlar.
- B: Quine # 1
- D: Quine # 2
- E: D'nin soluna atlar
Kesenin açıklaması (örnek # 1 ile):
Talimat işaretçisi, herhangi bir sıraya ulaştığında, sıranın tamamen sağlam olduğundan emin olursunuz.
>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.