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