# Q = 114
# 446 successful iterations
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 10
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 20
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 30
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 40
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 50
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 60
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 70
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 80
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 90
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 100
INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 110
INCREASE Q INCREASE Q INCREASE Q INCREASE Q # 114
#CLEAR S # s <= (x > 0) assume empty
#CLEAR L assume empty
#CLEAR M assume empty
INCREASE M
REPEAT X TIMES (
REPEAT L TIMES ( CLEAR L INCREASE S )
REPEAT M TIMES ( CLEAR M INCREASE L )
)
PRINT X
REPEAT Q TIMES (
# if x > 1
REPEAT S TIMES (
# o: store x / 2
CLEAR O
# p: store x / 4
CLEAR P
# a: even
# b: odd
# c: pass-through
CLEAR A
INCREASE A
CLEAR B
#CLEAR C always clear, used as pass-through
# d: x/2 even
# e: x/2 odd
# f: pass-through
CLEAR D
INCREASE D
CLEAR E
#CLEAR F assume clear
REPEAT X TIMES (
# flip-flop a/b
REPEAT A TIMES ( CLEAR A INCREASE C )
REPEAT B TIMES ( CLEAR B INCREASE A INCREASE O
# x / 2 divisibility loop
REPEAT D TIMES ( CLEAR D INCREASE F )
REPEAT E TIMES ( CLEAR E INCREASE D INCREASE P )
REPEAT F TIMES ( CLEAR F INCREASE E )
)
REPEAT C TIMES ( CLEAR C INCREASE B )
)
# if a
REPEAT A TIMES (
PRINT O # x / 2
# if divisible by 4:
REPEAT D TIMES (
PRINT P # x / 4
# copy x / 4 to x
CLEAR X
REPEAT P TIMES ( INCREASE X )
)
# if divisible by 2, and not by 4:
REPEAT E TIMES (
CLEAR X # copy x/2 to x
REPEAT O TIMES ( INCREASE X )
)
# only needed in this branch!
# other branch always increases value of x
# check x/2 > 1 (for next iteration)
CLEAR S # s <= (x > 0)
#CLEAR L assume empty, if not empty then we shouldnt be inside the loop
#CLEAR M same as above
INCREASE M
REPEAT X TIMES (
REPEAT L TIMES ( CLEAR L INCREASE S )
REPEAT M TIMES ( CLEAR M INCREASE L )
)
)
# else (if b)
REPEAT B TIMES (
# x += 0.5x
# o += o: o = x-1
REPEAT O TIMES ( INCREASE X INCREASE O )
INCREASE O
# o = x
# o = 3x
REPEAT O TIMES ( INCREASE O INCREASE O )
# x += 1
INCREASE X
# o += 1
INCREASE O
# print o: 3x+1
PRINT O
# print 3x+1/2
PRINT X
)
)
)