rot 13 program in branflakes lmfao

Feb 23rd, 2021
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. This program enciphers its input with the ROT13 cipher. To do this, it must map characters A-M (ASCII 65-77) to N-Z (78-90), and vice versa. Also it must map a-m (97-109) to n-z (110-122) and vice versa. It must map all other characters to themselves; it reads characters one at a time and outputs their enciphered equivalents until it reads an EOF (here assumed to be represented as either -1 or "no change"), at which point the program terminates.
  2. The basic approach used is as follows. Calling the input character x, divide x-1 by 32, keeping quotient and remainder. Unless the quotient is 2 or 3, just output x, having kept a copy of it during the division. If the quotient is 2 or 3, divide the remainder ((x-1) modulo 32) by 13; if the quotient here is 0, output x+13; if 1, output x-13; if 2, output x.
  3. Regarding the division algorithm, when dividing y by z to get a quotient q and remainder r, there is an outer loop which sets q and r first to the quotient and remainder of 1/z, then to those of 2/z, and so on; after it has executed y times, this outer loop terminates, leaving q and r set to the quotient and remainder of y/z. (The dividend y is used as a diminishing counter that controls how many times this loop is executed.) Within the loop, there is code to increment r and decrement y, which is usually sufficient; however, every zth time through the outer loop, it is necessary to zero r and increment q. This is done with a diminishing counter set to the divisor z; each time through the outer loop, this counter is decremented, and when it reaches zero, it is refilled by moving the value from r back into it.
  4. -,+[                         Read first character and start outer character reading loop
  5.    -[                       Skip forward if character is 0
  6.        >>++++[>++++++++<-]  Set up divisor (32) for division loop
  7.                               (MEMORY LAYOUT: dividend copy remainder divisor quotient zero zero)
  8.        <+<-[                Set up dividend (x minus 1) and enter division loop
  9.            >+>+>-[>>>]      Increase copy and remainder / reduce divisor / Normal case: skip forward
  10.            <[[>+<-]>>+>]    Special case: move remainder back to divisor and increase quotient
  11.            <<<<<-           Decrement dividend
  12.        ]                    End division loop
  13.    ]>>>[-]+                 End skip loop; zero former divisor and reuse space for a flag
  14.    >--[-[<->+++[-]]]<[         Zero that flag unless quotient was 2 or 3; zero quotient; check flag
  15.        ++++++++++++<[       If flag then set up divisor (13) for second division loop
  16.                               (MEMORY LAYOUT: zero copy dividend divisor remainder quotient zero zero)
  17.            >-[>+>>]         Reduce divisor; Normal case: increase remainder
  18.            >[+[<+>-]>+>>]   Special case: increase remainder / move it back to divisor / increase quotient
  19.            <<<<<-           Decrease dividend
  20.        ]                    End division loop
  21.        >>[<+>-]             Add remainder back to divisor to get a useful 13
  22.        >[                   Skip forward if quotient was 0
  23.            -[               Decrement quotient and skip forward if quotient was 1
  24.                -<<[-]>>     Zero quotient and divisor if quotient was 2
  25.            ]<<[<<->>-]>>    Zero divisor and subtract 13 from copy if quotient was 1
  26.        ]<<[<<+>>-]          Zero divisor and add 13 to copy if quotient was 0
  27.    ]                        End outer skip loop (jump to here if ((character minus 1)/32) was not 2 or 3)
  28.    <[-]                     Clear remainder from first division if second division was skipped
  29.    <.[-]                    Output ROT13ed character from copy and clear it
  30.    <-,+                     Read next character
  31. ]                            End character reading loop
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add to your ad blocker whitelist or disable your adblocking software.