aboutsummaryrefslogtreecommitdiff
path: root/examples/rot13.bf
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2024-12-03 00:02:12 +0000
committerAryadev Chavali <aryadev@aryadevchavali.com>2024-12-03 00:02:12 +0000
commit623b3acc1f8b719b15523982ff5ed04eb85b19d5 (patch)
tree5aee01714fd4bcf60971356889f1192f797c5690 /examples/rot13.bf
parentc2a4eb3985de412b548a713ed72ee752f4ee8e3b (diff)
downloadobf-623b3acc1f8b719b15523982ff5ed04eb85b19d5.tar.gz
obf-623b3acc1f8b719b15523982ff5ed04eb85b19d5.tar.bz2
obf-623b3acc1f8b719b15523982ff5ed04eb85b19d5.zip
Added some examples to test the interpreter
Diffstat (limited to 'examples/rot13.bf')
-rw-r--r--examples/rot13.bf28
1 files changed, 28 insertions, 0 deletions
diff --git a/examples/rot13.bf b/examples/rot13.bf
new file mode 100644
index 0000000..7be1cc7
--- /dev/null
+++ b/examples/rot13.bf
@@ -0,0 +1,28 @@
+-,+[ 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 \ No newline at end of file