# J = 6 INCREASE J INCREASE J INCREASE J INCREASE J INCREASE J INCREASE J # I = 216 (maximum needed is 178) REPEAT J TIMES ( REPEAT J TIMES ( REPEAT J TIMES ( INCREASE I ) ) ) # V = 3 for the times function (3*X) INCREASE V INCREASE V INCREASE V REPEAT I TIMES ( # Set Q to 1 to enable printing of X CLEAR Q INCREASE Q # Print current X unless P is set (sequence ended) REPEAT P TIMES ( CLEAR Q ) # Print X if Q is 1 REPEAT Q TIMES ( PRINT X ) # Clear variables for calculation CLEAR A CLEAR B CLEAR C CLEAR T CLEAR D # B = 1 for parity check INCREASE B # Parity check loop determines if X is even or odd # After X iterations: # A = 1 if X is odd, 0 if X is even # C = X // 2 REPEAT X TIMES ( # Swap A and B using T CLEAR T REPEAT A TIMES ( INCREASE T ) # T = A CLEAR A REPEAT B TIMES ( INCREASE A ) # A = B CLEAR B REPEAT T TIMES ( INCREASE B ) # B = T # Check if A is zero: D = 1 if A = 0, else D = 0 CLEAR D INCREASE D # Clear D if A > 0 REPEAT A TIMES ( CLEAR D ) # Increment C if A was zero (D = 1) REPEAT D TIMES ( INCREASE C ) ) # Check if X = 1: E = 1 only if X = 1 CLEAR E INCREASE E REPEAT C TIMES ( CLEAR E ) # For X = 1, C = 0 so E = 1 | for X > 1, C > 0 so E = 0 # F = 1 if X is even, 0 if X is odd CLEAR F INCREASE F REPEAT A TIMES ( CLEAR F ) # Clear F if A > 0 (X odd) REPEAT F TIMES ( CLEAR E ) # If X even, ensure E = 0 REPEAT E TIMES ( INCREASE P ) # If X = 1, set P = 1 to stop future printing # Decide whether to update X: Q = 1 unless X = 1 CLEAR Q INCREASE Q REPEAT E 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 ( CLEAR Z # even X: Z = C = X // 2 REPEAT C TIMES ( INCREASE Z ) # odd X: Z = 3 * X + 1 # (V = 3) REPEAT A TIMES ( CLEAR Z # Z = 3 * X REPEAT X TIMES ( REPEAT V TIMES ( INCREASE Z ) ) INCREASE Z # Add 1 to make 3 * X + 1 ) # Set X to Z for next iteration CLEAR X REPEAT Z TIMES ( INCREASE X ) ) )