(phixonline)--> with javascript_semantics function hail(integer n) if remainder(n,2)=0 then n /= 2 else n = 3*n+1 end if return n end function function step(integer edx) integer n = getd("hail",edx) if n=1 then return 0 end if n = hail(n) setd("hail",n,edx) setd("count",getd("count",edx)+1,edx) setd("results",deep_copy(getd("results",edx))&n,edx) return 1 end function sequence dicts = {} procedure main() for i=1 to 12 do integer d = new_dict() setd("hail",i,d) setd("count",0,d) setd("results",{i},d) dicts &= d end for bool done = false while not done do done = true for i=1 to 12 do if step(dicts[i]) then done = false end if end for end while done = false integer i = 1 while not done do done = true for j=1 to 12 do sequence res = getd("results",dicts[j]) if i<length(res) then done = false end if puts(1,iff(i<=length(res)?sprintf("%4d",{res[i]}):" ")) end for puts(1,"\n") i += 1 end while printf(1," %s\n",{join(repeat("===",12))}) for j=1 to 12 do integer count = getd("count",dicts[j]) printf(1,"%4d",{count}) end for puts(1,"\n") end procedure main()