# Outputting the initial input
PRINT X
# Remporary values for checking if inital value is 1
CLEAR A CLEAR B
INCREASE A
# Chekcing if X == 1
REPEAT X TIMES (
REPEAT B TIMES ( # More than 1 so L is set
CLEAR B
# Setting up the max loop count of 180
INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L
INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L # L = 18
INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L
REPEAT L TIMES (
INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L INCREASE L # L += 9
)
)
REPEAT A TIMES ( # Equal to 1 so L value is left empty
CLEAR A
INCREASE B
)
)
# Setting the while loop with max iteration count
INCREASE R # The "running" variable of the programm
REPEAT L TIMES (
REPEAT R TIMES (
# Setting temporary variables for mod 2
CLEAR A CLEAR Q
INCREASE A
# Calculating X % 2 and storing result in Q
REPEAT X TIMES (
# Setting B to 1
CLEAR B
INCREASE B
# Checking if odd/even count
REPEAT A TIMES ( # Odd
INCREASE Q
CLEAR A CLEAR B
)
REPEAT B TIMES ( # Even
CLEAR Q
INCREASE A
)
)
# Checking if X is odd or even
CLEAR A INCREASE A
REPEAT Q TIMES ( # Odd
CLEAR A
# Performing 3x + 1
REPEAT X TIMES (
INCREASE X INCREASE X
)
INCREASE X
)
REPEAT A TIMES ( # Even
# Setting temporary variables for division
CLEAR T CLEAR A
INCREASE T INCREASE A
# Performing x / 2
REPEAT X TIMES (
# Resetting X on first iteration
REPEAT T TIMES (
CLEAR X CLEAR T
)
# Setting B to 1
CLEAR B
INCREASE B
# Checking if odd/even count
REPEAT A TIMES ( # Odd
CLEAR A CLEAR B
)
REPEAT B TIMES ( # Even
INCREASE X
INCREASE A
)
)
)
# Outputting current value
PRINT X
# Setting temporary variables for break check
CLEAR A CLEAR B
INCREASE A
# Checking if X == 1
REPEAT X TIMES (
REPEAT B TIMES (
CLEAR B
INCREASE R
)
REPEAT A TIMES (
CLEAR A
INCREASE B
CLEAR R
)
)
)
)