From 0a78720644e45bd27c4a57cbddf2d32aacb555c3 Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Wed, 29 Jun 2022 00:59:59 -0500 Subject: Probably version ... whatever the next higher one is --- examples/rot13.bf | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 examples/rot13.bf (limited to 'examples/rot13.bf') diff --git a/examples/rot13.bf b/examples/rot13.bf new file mode 100644 index 0000000..bfcde73 --- /dev/null +++ b/examples/rot13.bf @@ -0,0 +1,32 @@ +[ ROT13 in Brainfuck +from https://en.wikipedia.org/wiki/Brainfuck#ROT13 +] + +-,+[ 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 -- cgit 1.4.1-21-gabe81