# I = 60
INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I
INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I
INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I
INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I
INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I
INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I INCREASE I
REPEAT I TIMES (
# Set Q to 1 to enable calculating
CLEAR Q
INCREASE Q
REPEAT P TIMES ( CLEAR Q )
# Stop calculating if Q = 0
REPEAT Q TIMES (
PRINT X
# Clear variables for calculation
CLEAR A
CLEAR T
CLEAR C
# Parity check loop determines if X is even or odd
# After X iterations:
# A = 1 if X is odd, 0 if even
# T = A (Helper variable)
# C = X // 2
REPEAT X TIMES (
INCREASE T
# Increase C if A = 1 and set T to 0
REPEAT A TIMES (
CLEAR T
CLEAR A
INCREASE C
)
# Increase A if T = 1
REPEAT T TIMES (
INCREASE A
)
)
REPEAT A TIMES (
CLEAR P
INCREASE P
REPEAT C TIMES ( CLEAR P ) # If X = 1, P = 0
# Decide whether to update X: Q = 1 unless X = 1
REPEAT P TIMES ( CLEAR Q ) # Decide whether to update X: Q = 1 unless X = 1
# if Q = 1 update X to next Collatz number
REPEAT Q TIMES (
# odd X: 3 * X + 1 & C = X * 1.5
REPEAT X TIMES
(
INCREASE C
INCREASE X
INCREASE X
)
INCREASE X
INCREASE C
PRINT X
)
)
#___________________
REPEAT Q TIMES (
PRINT C
# Clear variables for calculation
CLEAR A
CLEAR T
CLEAR X
# Parity check loop determines if X is even or odd
# After X iterations:
# A = 1 if X is odd, 0 if even
# T = A (Helper variable)
# X = C // 2
REPEAT C TIMES (
INCREASE T
# Increase X if A = 1 and set T to 0
REPEAT A TIMES (
CLEAR T
CLEAR A
INCREASE X
)
# Increase A if T = 1
REPEAT T TIMES (
INCREASE A
)
)
REPEAT A TIMES (
CLEAR P
INCREASE P
REPEAT X TIMES ( CLEAR P ) # If X = 1, P = 0
# Decide whether to update X: Q = 1 unless C = 1
REPEAT P TIMES ( CLEAR Q ) # Decide whether to update X: Q = 1 unless C = 1
# if Q = 1 update C to next Collatz number
REPEAT Q TIMES (
# odd C: 3 * C + 1 & X = C * 1.5
REPEAT C TIMES
(
INCREASE X
INCREASE C
INCREASE C
)
INCREASE C
INCREASE X
PRINT C
)
)
)
)
)