# 1041699 commands with 1000 as starting number
# Used to detect when to stop loop
INCREASE L
# Create a big number (180) to loop many times (number 871 takes the most steps: 178)
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q
# Print the initial value
PRINT X
# Stop if X is 1 initially
REPEAT X TIMES (
CLEAR L
REPEAT D TIMES (
INCREASE L
CLEAR D
)
INCREASE D
)
# Start the main loop
REPEAT Q TIMES (
REPEAT L TIMES (
# Clear variables before re-use
CLEAR A CLEAR B CLEAR C CLEAR V CLEAR Y
# This needs to be 1 for the odd-even loop to work
INCREASE B
# Make a copy of X and store it in Y
# TODO: optimize because it copies the value so many times each step
REPEAT X TIMES (
INCREASE Y
)
# Check if X is odd or even, and save the halved value of X in V
REPEAT Y TIMES (
REPEAT A TIMES (
INCREASE V
INCREASE C
CLEAR A
)
REPEAT B TIMES (
INCREASE A
CLEAR B
)
REPEAT C TIMES (
INCREASE B
CLEAR C
)
)
# This only runs if X was odd because in that case A is 1 instead of 0
REPEAT A TIMES (
# Multiply X by 3 and add 1
REPEAT Y TIMES (
INCREASE X INCREASE X
)
INCREASE X
)
# Set X to the halved value (stored in V) if X was even
REPEAT B TIMES (
CLEAR X
REPEAT V TIMES (
INCREASE X
)
)
# Print the resulting value
PRINT X
# Stop if X is 1 (also only do the check if X was odd to save computations)
REPEAT B TIMES (
REPEAT X TIMES (
CLEAR L
REPEAT C TIMES (
INCREASE L
CLEAR C
)
INCREASE C
)
)
)
)