diff options
| author | jakob <jakob@memeware.net> | 2017-03-18 18:07:39 -0400 |
|---|---|---|
| committer | jakob <jakob@memeware.net> | 2017-03-18 18:07:39 -0400 |
| commit | d45dbeb48a9da2ccfc1dd3fc0f3baea4c365e086 (patch) | |
| tree | d1107185a1b722ee65b2c8f9b5f70376dd39057a /test/rot13_commented.bf | |
| parent | 9b5abf3e3859e54d4bc48db0792b2686eb7bd16a (diff) | |
The compilation process now includes *very* minimal code optimization.
Diffstat (limited to 'test/rot13_commented.bf')
| -rw-r--r-- | test/rot13_commented.bf | 28 |
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 |