Instructions[edit]
Strategy[edit]
This problem is pretty straight-forward. Start by copying the 0 to two other boxes to count occurencies of 100 / 10. Grab the inbox and copy it to a third box. Now repeatedly substract 100 from that box and bump up the 100 counter box. If the substraction is negative, switch over to 10 substraction / up-bumping. Finally, put the required numbers into the outbox:
a: COPYFROM 9 COPYTO 0 COPYTO 1 INBOX COPYTO 2 b: SUB 11 JUMPN c COPYTO 2 BUMPUP 0 COPYFROM 2 JUMP b c: ADD 11 d: SUB 10 JUMPN e COPYTO 2 BUMPUP 1 COPYFROM 2 JUMP d e: COPYFROM 0 JUMPZ h OUTBOX COPYFROM 1 f: OUTBOX g: COPYFROM 2 OUTBOX JUMP a h: COPYFROM 1 JUMPZ g JUMP f
Optimizing[edit]
The above program satisfies the size challenge but misses the mark on the speed challenge (Size 29, 209 Steps). An optimization on step size is to unroll the loops (b,d )like this:
b: SUB 11 JUMPN c COPYTO 2 BUMPUP 0 COPYFROM 2 SUB 11 JUMPN c COPYTO 2 BUMPUP 0 COPYFROM 2 JUMP b
Doing this on both loops, one can get down to 196 steps. As further steps net less, this is not sufficient.
In order to meet the speed challenge, you can fully unroll the loop for each digit to avoid the COPYFROM commands, like so:
b: SUB 11 JUMPN ba COPYTO 2 SUB 11 JUMPN bb COPYTO 2 SUB 11 JUMPN bc COPYTO 2 SUB 11 JUMPN bd COPYTO 2 SUB 11 JUMPN be COPYTO 2 SUB 11 JUMPN bf COPYTO 2 SUB 11 JUMPN bg COPYTO 2 SUB 11 JUMPN bh COPYTO 2 SUB 11 JUMPN bi COPYTO 2 BUMPUP 0 bh: BUMPUP 0 bg: BUMPUP 0 bf: BUMPUP 0 be: BUMPUP 0 bd: BUMPUP 0 bc: BUMPUP 0 bb: BUMPUP 0 ba: BUMPUP 0 OUTBOX
Optimizing Further[edit]
Fully unrolling both loops and reordering some blocks to capitalistically take fewer JUMPS provides you with a solution that's 91 commands long but takes only 148 steps to complete:
JUMP m a: b: BUMPUP 1 c: BUMPUP 1 d: BUMPUP 1 e: BUMPUP 1 f: BUMPUP 1 g: BUMPUP 1 h: BUMPUP 1 i: BUMPUP 1 j: BUMPUP 1 k: OUTBOX l: COPYFROM 0 OUTBOX m: COPYFROM 9 COPYTO 2 COPYTO 1 INBOX COPYTO 0 SUB 11 JUMPN v COPYTO 0 SUB 11 JUMPN u COPYTO 0 SUB 11 JUMPN t COPYTO 0 SUB 11 JUMPN s COPYTO 0 SUB 11 JUMPN r COPYTO 0 SUB 11 JUMPN q COPYTO 0 SUB 11 JUMPN p COPYTO 0 SUB 11 JUMPN o COPYTO 0 SUB 11 JUMPN n COPYTO 0 BUMPUP 2 n: BUMPUP 2 o: BUMPUP 2 p: BUMPUP 2 q: BUMPUP 2 r: BUMPUP 2 s: BUMPUP 2 t: BUMPUP 2 u: BUMPUP 2 OUTBOX v: COPYFROM 0 SUB 10 JUMPN w COPYTO 0 SUB 10 JUMPN j COPYTO 0 SUB 10 JUMPN i COPYTO 0 SUB 10 JUMPN h COPYTO 0 SUB 10 JUMPN g COPYTO 0 SUB 10 JUMPN f COPYTO 0 SUB 10 JUMPN e COPYTO 0 SUB 10 JUMPN d COPYTO 0 SUB 10 JUMPN c COPYTO 0 SUB 10 JUMPN a BUMPUP 1 JUMP b w: COPYFROM 2 JUMPZ l COPYFROM 9 JUMP k