# A=128
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
)
)