summaryrefslogtreecommitdiff
path: root/test/rot13_commented.bf
diff options
context:
space:
mode:
authorjakob <jakob@memeware.net>2017-03-18 18:07:39 -0400
committerjakob <jakob@memeware.net>2017-03-18 18:07:39 -0400
commitd45dbeb48a9da2ccfc1dd3fc0f3baea4c365e086 (patch)
treed1107185a1b722ee65b2c8f9b5f70376dd39057a /test/rot13_commented.bf
parent9b5abf3e3859e54d4bc48db0792b2686eb7bd16a (diff)
The compilation process now includes *very* minimal code optimization.
Diffstat (limited to 'test/rot13_commented.bf')
-rw-r--r--test/rot13_commented.bf28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/rot13_commented.bf b/test/rot13_commented.bf
new file mode 100644
index 0000000..85a97fa
--- /dev/null
+++ b/test/rot13_commented.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