# 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 R TIMES ( CLEAR T )
CLEAR R
REPEAT T TIMES ( INCREASE R )
INCREASE U
REPEAT R 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
)
REPEAT R TIMES ( INCREASE D )
# main
REPEAT A TIMES (
REPEAT C TIMES (
# 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; C := 1 - M
PRINT X
CLEAR C
INCREASE C
REPEAT M TIMES ( CLEAR C )
# S := D; N := 1 - S
CLEAR S
REPEAT D TIMES ( INCREASE S )
CLEAR N
INCREASE N
REPEAT S TIMES ( CLEAR N )
# even: X := I; D := F; halve I -> (I,F)
REPEAT N TIMES (
CLEAR X
REPEAT I TIMES ( INCREASE X )
CLEAR D
REPEAT F TIMES ( INCREASE D )
CLEAR J
CLEAR R
CLEAR Y
CLEAR T
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 := X_old + I + 1; D := 0; F unchanged
REPEAT S TIMES (
CLEAR J
REPEAT I TIMES ( INCREASE J )
REPEAT X TIMES ( INCREASE J )
INCREASE J
CLEAR I
REPEAT J TIMES ( INCREASE I )
CLEAR J
CLEAR K
REPEAT X TIMES ( INCREASE K INCREASE K INCREASE K )
INCREASE K
CLEAR X
REPEAT K TIMES ( INCREASE X )
CLEAR K
CLEAR D
)
CLEAR N
CLEAR S
)
)