# 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 ) ) )