# DAD TEST
INCREASE F # F = 1 to print 1 once at the end
INCREASE I # Number of iterations to fake recursion
INCREASE I
INCREASE I
INCREASE J
INCREASE J
REPEAT I TIMES (
REPEAT J TIMES (
REPEAT I TIMES (
INCREASE I
)
)
)
# I = 192 (~>180 max length)
REPEAT I TIMES (
# Repeat enough times for X to reach 1, but not too many
# Goal: Do if X does not equal 1
# via E = 1
CLEAR B
CLEAR C
CLEAR D
CLEAR E
INCREASE D
INCREASE B
# E = 0, will set to 1 if X > 1
# D = 1, will set to 0 if X > 1, remains 1 if X = 1
REPEAT X TIMES (
REPEAT C TIMES (
CLEAR C # Avoid repeating this loop again
CLEAR D # X != 1 and we set D = 0
INCREASE E
)
REPEAT B TIMES (
INCREASE C
CLEAR B # Avoid repeating this loop again
)
)
# Now: E = 1 if X > 1
# D = 1 if X = 1
# Goal: print 1 if X == 1 but only once
REPEAT F TIMES (
PRINT X # Print current X
REPEAT D TIMES (
CLEAR F # Clear F to avoid printing X = 1 again
)
)
# Goal: Execute the following part only when X > 1
REPEAT E TIMES (
# Goal: implement "IF X IS ODD"
CLEAR B # B = 0 # Redundant, might remove
CLEAR C # C = 0
CLEAR T
INCREASE B # B = 1
REPEAT X TIMES (
REPEAT C TIMES (
INCREASE T # Increasing T instead of B to skip next block
CLEAR C
)
REPEAT B TIMES (
INCREASE C
CLEAR B
)
REPEAT T TIMES (
INCREASE B # Now we increase B we postponed earlier
CLEAR T
)
)
# Now: B = 1 if X is even, else B = 0
# C = 1 if X is odd, else C = 0
CLEAR A # Pre-clear A
# goal: A = X / 2
REPEAT B TIMES (
# Optimized values by now:
# B = 1 and C = 0
# CLEAR B
# CLEAR C
CLEAR T
# INCREASE B
REPEAT X TIMES (
REPEAT C TIMES (
INCREASE A # A + 1 for odd X
INCREASE T # Increasing T instead of B to skip next block
CLEAR C
)
REPEAT B TIMES (
INCREASE C
CLEAR B
)
REPEAT T TIMES (
INCREASE B # Now we increase B we postponed earlier
CLEAR T
)
)
# Optimized values by now:
# B = 1, C = 0
)
# now A is X / 2 if X was even
# goal: A = X * 3 + 1
REPEAT C TIMES (
# Optimized values by now:
# B = 0 and C = 1
# CLEAR B
INCREASE B
INCREASE B
INCREASE B
REPEAT B TIMES (
REPEAT X TIMES (
INCREASE A
)
)
INCREASE A
)
# now A is X * 3 + 1 if X was odd
# Update X
CLEAR X
REPEAT A TIMES (
INCREASE X
)
# now X = A
)
)