# --- 1. SETUP CONSTANTS --- # O = 1 INCREASE O # M = 512 ( Loop Limit ) # 457 stops in 114 steps, so 512 is plenty. INCREASE M REPEAT M TIMES ( INCREASE M ) REPEAT M TIMES ( INCREASE M ) REPEAT M TIMES ( INCREASE M ) REPEAT M TIMES ( INCREASE M ) REPEAT M TIMES ( INCREASE M ) REPEAT M TIMES ( INCREASE M ) REPEAT M TIMES ( INCREASE M ) REPEAT M TIMES ( INCREASE M ) REPEAT M TIMES ( INCREASE M ) # F = 1 ( Run Flag ) CLEAR F INCREASE F # --- 2. MAIN LOOP --- REPEAT M TIMES ( # --- STEP A: PRINT CURRENT X --- REPEAT F TIMES ( PRINT X ) # --- STEP B: PING-PONG DIVISION & STOP CHECK --- # We calculate Q ( Quotient ), R ( Remainder ) # We also update Z ( KeepGoing Flag ) inside the loop for free. REPEAT F TIMES ( CLEAR Q CLEAR R CLEAR T CLEAR Z # Loop X times REPEAT X TIMES ( # T starts at 0. Set to 1. INCREASE T # If R=1: We found a pair ( 2 items ). # Action: Q++, R=0, T=0. # Optimization: If we increase Q, we know X >= 2. Set Z=1. REPEAT R TIMES ( INCREASE Q CLEAR R CLEAR T # Set Z to 1 to indicate we are not at 1 yet. CLEAR Z INCREASE Z ) # If R=0: No pair yet. # Action: R=1, T=0. REPEAT T TIMES ( INCREASE R CLEAR T ) ) # Update Run Flag F based on Z # If Z is 0 ( Q was never incremented ), X was 1. Stop. CLEAR F REPEAT Z TIMES ( INCREASE F ) # --- STEP C: PARALLEL DOUBLE JUMP --- # Only run if we are still going ( F=1 ) REPEAT F TIMES ( # Create Even Flag ( E ) CLEAR E INCREASE E REPEAT R TIMES ( CLEAR E ) # --- CASE 1: ODD ( R=1 ) --- # Logic: X -> 3X+1 -> ( 3X+1 )/2 # We want to PRINT ( 3X+1 ) and set X to ( 3X+1 )/2 # Math: New X = 3Q + 2. Intermediate V = 6Q + 4. REPEAT R TIMES ( CLEAR X CLEAR V # PARALLEL CONSTRUCTION OPTIMIZATION # We build X and V inside the Q loop together. # This avoids looping 'REPEAT X' later. REPEAT Q TIMES ( # Add 3 to X INCREASE X INCREASE X INCREASE X # Add 6 to V INCREASE V INCREASE V INCREASE V INCREASE V INCREASE V INCREASE V ) # Add the constants ( +2 to X, +4 to V ) INCREASE X INCREASE X INCREASE V INCREASE V INCREASE V INCREASE V # Print the intermediate value PRINT V ) # --- CASE 2: EVEN ( R=0 ) --- # Logic: X -> X / 2 # X is simply Q. REPEAT E TIMES ( CLEAR X REPEAT Q TIMES ( INCREASE X ) ) ) ) )