﻿#Credit to https://en.wikipedia.org/wiki/Brainfuck#ROT13
#memtype=int
#eofvalue=-1
-,+[                         #Read first character and start outer character reading loop
    -[                       #Skip forward if character is 0
        >>++++[>++++++++<-]  #Set up divisor (32) for division loop
                             #  (MEMORY LAYOUT: dividend copy remainder divisor quotient zero zero)
        <+<-[                #Set up dividend (x minus 1) and enter division loop
            >+>+>-[>>>]      #Increase copy and remainder / reduce divisor / Normal case: skip forward
            <[[>+<-]>>+>]    #Special case: move remainder back to divisor and increase quotient
            <<<<<-           #Decrement dividend
        ]                    #End division loop
    ]>>>[-]+                 #End skip loop; zero former divisor and reuse space for a flag
    >--[-[<->+++[-]]]<[      #   Zero that flag unless quotient was 2 or 3; zero quotient; check flag
        ++++++++++++<[       #If flag then set up divisor (13) for second division loop
                             #  (MEMORY LAYOUT: zero copy dividend divisor remainder quotient zero zero)
            >-[>+>>]         #Reduce divisor; Normal case: increase remainder
            >[+[<+>-]>+>>]   #Special case: increase remainder / move it back to divisor / increase quotient
            <<<<<-           #Decrease dividend
        ]                    #End division loop
        >>[<+>-]             #Add remainder back to divisor to get a useful 13
        >[                   #Skip forward if quotient was 0
            -[               #Decrement quotient and skip forward if quotient was 1
                -<<[-]>>     #Zero quotient and divisor if quotient was 2
            ]<<[<<->>-]>>    #Zero divisor and subtract 13 from copy if quotient was 1
        ]<<[<<+>>-]          #Zero divisor and add 13 to copy if quotient was 0
    ]                        #End outer skip loop (jump to here if ((character minus 1)/32) was not 2 or 3)
    <[-]                     #Clear remainder from first division if second division was skipped
    <.[-]                    #Output ROT13ed character from copy and clear it
    <-,+                     #Read next character
]                            #End character reading loop