# Collatz with even-run collapsing
# ONE=1
CLEAR O
INCREASE O
# print initial X
PRINT X
# ---- helpers (пояснение к именам)
# B = floor(X/2)
# T = 1, если X чётное; 0, если нечётное
# S = 3X+1
# E = временная (обычно берём "1 - что-то")
# Макро-переключатель: T := 1 - T (через E=1, гасим E при T=1)
# и прибавка к B, если T==1 (то есть раз в два шага)
CLEAR A # A=0
CLEAR P
INCREASE P # P=1
INCREASE P # 2
INCREASE P # 3
INCREASE P # 4
CLEAR Q
INCREASE Q # Q=1
INCREASE Q # 2
INCREASE Q # 3
INCREASE Q # 4
INCREASE Q # 5
# P=4, Q=5; R=20
CLEAR R
REPEAT Q TIMES ( REPEAT P TIMES ( INCREASE R ) )
# A=400
REPEAT R TIMES ( REPEAT R TIMES ( INCREASE A ) )
REPEAT A TIMES (
CLEAR B
CLEAR T
INCREASE T
REPEAT X TIMES (
CLEAR E
INCREASE E
REPEAT T TIMES ( CLEAR E )
CLEAR T
REPEAT E TIMES ( INCREASE T )
# если T==1 -> B++
REPEAT T TIMES ( INCREASE B )
)
CLEAR L
REPEAT B TIMES ( INCREASE L )
REPEAT L TIMES ( CLEAR L ; INCREASE L )
CLEAR W
REPEAT Q TIMES ( INCREASE W ) # W=5
REPEAT Q TIMES ( REPEAT W TIMES ( INCREASE W ) ) # W=25
REPEAT W TIMES (
REPEAT L TIMES (
REPEAT T TIMES (
CLEAR X
REPEAT B TIMES ( INCREASE X )
PRINT X
CLEAR B
CLEAR T
INCREASE T
REPEAT X TIMES (
CLEAR E
INCREASE E
REPEAT T TIMES ( CLEAR E )
CLEAR T
REPEAT E TIMES ( INCREASE T )
REPEAT T TIMES ( INCREASE B )
)
CLEAR L
REPEAT B TIMES ( INCREASE L )
REPEAT L TIMES ( CLEAR L ; INCREASE L )
)
)
)
CLEAR C
INCREASE C
REPEAT T TIMES ( CLEAR C )
REPEAT L TIMES (
REPEAT C TIMES (
# S = 3X + 1
CLEAR S
INCREASE S
REPEAT X TIMES ( INCREASE S ; INCREASE S ; INCREASE S )
# X := S
CLEAR X
REPEAT S TIMES ( INCREASE X )
PRINT X
)
)
)