# Powers: B=2 C=4, D=8, E=16, F=32, G=64, H=128, I=256, J=512, K=1024
INCREASE B INCREASE B
REPEAT B TIMES ( INCREASE C INCREASE C )
REPEAT C TIMES ( INCREASE D INCREASE D )
REPEAT D TIMES ( INCREASE E INCREASE E )
REPEAT E TIMES ( INCREASE F INCREASE F )
REPEAT F TIMES ( INCREASE G INCREASE G )
REPEAT G TIMES ( INCREASE H INCREASE H )
REPEAT H TIMES ( INCREASE I INCREASE I )
REPEAT I TIMES ( INCREASE J INCREASE J )
REPEAT J TIMES ( INCREASE K INCREASE K )
# Setting A
REPEAT h TIMES ( INCREASE A )
# Gate C := 1
CLEAR C
INCREASE C
REPEAT A TIMES (
# D := parity(X)
CLEAR D
REPEAT X TIMES (
CLEAR E
INCREASE E
REPEAT D TIMES ( CLEAR E )
CLEAR D
REPEAT E TIMES ( INCREASE D )
)
# I := floor(X/2) using toggler G
CLEAR I
CLEAR G
REPEAT X TIMES (
CLEAR E
INCREASE E
REPEAT G TIMES ( CLEAR E )
CLEAR G
REPEAT E TIMES ( INCREASE G )
CLEAR H
INCREASE H
REPEAT G TIMES ( CLEAR H )
REPEAT H TIMES ( INCREASE I )
)
# L := 1 if I==0 else 0
INCREASE L
REPEAT I TIMES ( CLEAR L )
# M := (X==1) = L AND D
REPEAT L TIMES ( REPEAT D TIMES ( INCREASE M ) )
# Gated print + latch: C := 1 - M
REPEAT C TIMES (
PRINT X
CLEAR C
INCREASE C
REPEAT M TIMES ( CLEAR C )
)
# If still active, update X
REPEAT C TIMES (
# N := 1 - D
INCREASE N
REPEAT D TIMES ( CLEAR N )
# K := 3*X + 1
CLEAR K
REPEAT X TIMES ( INCREASE K INCREASE K INCREASE K )
INCREASE K
# J := I
CLEAR J
REPEAT I TIMES ( INCREASE J )
# X := if even then J else K
CLEAR X
REPEAT N TIMES ( REPEAT J TIMES ( INCREASE X ) )
REPEAT D TIMES ( REPEAT K TIMES ( INCREASE X ) )
)
# reset temps used in this iteration
CLEAR M
CLEAR N
)