# copy 2x iter counter REPEAT X TIMES ( INCREASE Q ) REPEAT Q TIMES ( INCREASE Q ) REPEAT X TIMES ( INCREASE Q ) REPEAT Q TIMES ( INCREASE Q ) PRINT X REPEAT Q TIMES ( CLEAR S # s <= (x > 0) CLEAR L CLEAR M INCREASE M REPEAT X TIMES ( REPEAT L TIMES ( CLEAR L INCREASE S ) REPEAT M TIMES ( CLEAR M INCREASE L ) ) # if x > 1 REPEAT S TIMES ( # o: store x / 2 for quick access CLEAR O # a: even # b: odd CLEAR A INCREASE A CLEAR B REPEAT X TIMES ( CLEAR T # copy t <= b REPEAT B TIMES ( INCREASE T ) # flip-flop a/b # if a, if b REPEAT A TIMES ( CLEAR A INCREASE B ) REPEAT T TIMES ( CLEAR B INCREASE A INCREASE O ) ) # if a REPEAT A TIMES ( # out alrdy has x / 2 # copy x <= out CLEAR X REPEAT O TIMES ( INCREASE X ) ) # else (if b) REPEAT B TIMES ( # out alrdy has x / 2 # add x <= o REPEAT O TIMES ( INCREASE X ) # x *= 2 REPEAT X TIMES ( INCREASE X ) # x += 1 INCREASE X INCREASE X ) PRINT X ) )