# A=8*20 INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A INCREASE A # C=1 INCREASE C # init I=floor(X/2), F=parity(I), D=parity(X) REPEAT X TIMES ( INCREASE T REPEAT G TIMES ( CLEAR T ) CLEAR G REPEAT T TIMES ( INCREASE G ) INCREASE U REPEAT G TIMES ( CLEAR U ) REPEAT U TIMES ( INCREASE I INCREASE W REPEAT F TIMES ( CLEAR W ) CLEAR F REPEAT W TIMES ( INCREASE F ) CLEAR W ) CLEAR U CLEAR T ) CLEAR D REPEAT G TIMES ( INCREASE D ) # main (≤128 steps) REPEAT A TIMES ( # stop flag M = [X==1] = (I==0 AND D==1) INCREASE L REPEAT I TIMES ( CLEAR L ) CLEAR M REPEAT L TIMES ( REPEAT D TIMES ( INCREASE M ) ) # print and latch C := 1 - M REPEAT C TIMES ( PRINT X CLEAR C INCREASE C REPEAT M TIMES ( CLEAR C ) ) # step if active REPEAT C TIMES ( # snapshot S := D, choose branch by S only CLEAR S REPEAT D TIMES ( INCREASE S ) # N := 1 - S (even?) CLEAR N INCREASE N REPEAT S TIMES ( CLEAR N ) # even: X := I; D := F; then I := floor(I/2) and F := parity(I) REPEAT N TIMES ( CLEAR X REPEAT I TIMES ( INCREASE X ) CLEAR D REPEAT F TIMES ( INCREASE D ) CLEAR J CLEAR R CLEAR Y REPEAT I TIMES ( INCREASE T REPEAT R TIMES ( CLEAR T ) CLEAR R REPEAT T TIMES ( INCREASE R ) INCREASE U REPEAT R TIMES ( CLEAR U ) REPEAT U TIMES ( INCREASE J INCREASE W REPEAT Y TIMES ( CLEAR W ) CLEAR Y REPEAT W TIMES ( INCREASE Y ) CLEAR W ) CLEAR U CLEAR T ) CLEAR I REPEAT J TIMES ( INCREASE I ) CLEAR F REPEAT Y TIMES ( INCREASE F ) CLEAR J CLEAR Y ) # odd: X := 3X+1; I := oldX + I + 1; D := 0; F unchanged REPEAT S TIMES ( CLEAR G REPEAT X TIMES ( INCREASE G ) CLEAR K REPEAT X TIMES ( INCREASE K INCREASE K INCREASE K ) INCREASE K CLEAR X REPEAT K TIMES ( INCREASE X ) CLEAR J REPEAT G TIMES ( INCREASE J ) REPEAT I TIMES ( INCREASE J ) INCREASE J CLEAR I REPEAT J TIMES ( INCREASE I ) CLEAR J CLEAR G CLEAR K CLEAR D ) CLEAR N CLEAR S ) )