From StrategyWiki, the video game walkthrough and strategy guide wiki
Jump to navigation Jump to search

Instructions[edit]

Digit Exploder
Grab each number from the INBOX, and send its digits to the OUTBOX. For example, 123 becomes 1, 2, 3.

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