User:Jan jelo/My fourth BF quine
The following is a Quine by User:Jan jelo in Brainfuck,requires negative indexes:
>++++>++>+>++>+>+>++++>++++>+>++>+++>+>++++>++>+>++++>++>+>+>+>+>++>+>+>++>+>+>+>+>+++>++>+>+>+>+>+++>++>+++>+>++>+++>+>++>+++>+>++++>++++>+>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>++++>++>+>+>+>+>++>+>+>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>++>+++>+>++++>++++>+>++>+>+>+>+>+>+>++>+>++>+++>+>+>+>+++>+>+>+++>+>+>+++>+>+>+++>++++>++>+>+>+>+>++>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>++>+++>+>++++>++++>+>++>+>+>+>+>+++>++>+>+>++++>++>+>+>+>+>++>+++>+>+>++>+>++>+>+>++++>++++>+>++>+++>+>++++>++>+>+>+>+>++++>++++>+>++>+++>+>++>+++>+>++++>++++>+>++>+>+>++>+>+>++>+>+>++>+>+>++++>++>+>++>+>+>++++>++++>+>++>+++>+>++++>++>+>++>+++>+>++>+++>+>++++>++>+>+>+>+>++>+>+>+>+>+>++>+++>+>++++>++++>+>++>+>+>++>+>+>+>+>+++>+>+>+++>++++>++>+>+>+>+>++>+++>+>++>+++>+>+>+>+++>+>+>+++>+>+>+++>++++>++>+>+>+>+>++>+>+>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>++>+++>+>++++>++++>+>++>+>+>++>+>+>++++>++++>+>++>+++>+>+>++>+>++++>++>+>+>+>+>++++>++++>+>++>+++>+>++>+++>+>++++>++++>+[<]>[[-<<+<+>>>]+++++++[-<+++++++++>]<-.>++++[-<----->]<+<[->.<]>[-]>>]<<<<[<]>[>>[-<->]<<++[->>+++[-<+++++>]<<]>.[-]>>]
It totals 1123 bytes.
It consists of two parts,the first part encodes the ASCII values of the second part into memory.the second part decodes and prints both the first and second parts from memory.
Every 3 cells store one ASCII value:
First cell stores (closest multiple of 15 to the ASCII value)/15-2.(Brainfuck's 8 command symbols have ASCII values close to multiples of 15.For example,the smallest is +
(ASCII 43),whose closest multiple is 45.Thus,45/15-2=1.)
Second cell and third cell:The difference between these two cells gives the offset of the ASCII value from its nearest multiple of 15. (Due to modulo 256, this offset may wrap around, but adding it to the corresponding multiple of 15 recovers the correct value.)
All data cells are initialized to values greater than zero,serving as flags to indicate processing completion.
---
First Part (encodes the second part into memory):
>++++>++>+>++>+>+>++++>++++>+>++>+++>+>++++>++>+>++++>++>+>+>+>+>++>+>+>++>+>+>+>+>+++>++>+>+>+>+>+++>++>+++>+>++>+++>+>++>+++>+>++++>++++>+>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>++++>++>+>+>+>+>++>+>+>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>++>+++>+>++++>++++>+>++>+>+>+>+>+>+>++>+>++>+++>+>+>+>+++>+>+>+++>+>+>+++>+>+>+++>++++>++>+>+>+>+>++>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>+>++>+++>+>++++>++++>+>++>+>+>+>+>+++>++>+>+>++++>++>+>+>+>+>++>+++>+>+>++>+>++>+>+>++++>++++>+>++>+++>+>++++>++>+>+>+>+>++++>++++>+>++>+++>+>++>+++>+>++++>++++>+>++>+>+>++>+>+>++>+>+>++>+>+>++++>++>+>++>+>+>++++>++++>+>++>+++>+>++++>++>+>++>+++>+>++>+++>+>++++>++>+>+>+>+>++>+>+>+>+>+>++>+++>+>++++>++++>+>++>+>+>++>+>+>+>+>+++>+>+>+++>++++>++>+>+>+>+>++>+++>+>++>+++>+>+>+>+++>+>+>+++>+>+>+++>++++>++>+>+>+>+>++>+>+>+>+>+++>+>+>+++>+>+>+++>+>+>+++>+>+>+++>++>+++>+>++++>++++>+>++>+>+>++>+>+>++++>++++>+>++>+++>+>+>++>+>++++>++>+>+>+>+>++++>++++>+>++>+++>+>++>+++>+>++++>++++>+
Second Part (decodes and prints the data):
[<]> [ [-<<+<+>>>] Duplicate the value +++++++[-<+++++++++>]<-. Print >(ASCII 62) >++++[-<----->]<+ Convert 62 to 43 (➕) <[->.<]>[-]>> Print ➕s and reset ] Data shifts forward during processing,requiring negative index <<<<[<]> Reset pointer to start [ >>[-<->] Calculate offset (cell2➖cell3) <<++ Restore cell1 by adding 2 [->>+++[-<+++++>]<<] Multiply cell1 by 15 and add to offset >.[-]>> Print the ASCII char and reset ]