(phixonline)--> with javascript_semantics atom t0 = time() function bump(sequence half) -- (exactly the same as above) -- add a digit to valid halves -- eg {0} --> {1..9} (no zeroes) -- --> {11..99} ("") -- --> {111..999}, etc sequence res = {} for i=1 to length(half) do integer hi = half[i]*10 for digit=1 to 9 do res &= hi+digit end for end for return res end function sequence half = {0} -- valid digits, see bump() integer hlen = 1, cpow = 10 -- cyclops power (of 10) integer n = 1_000_000_000 atom hlen2 = 1 while n>hlen2 do n -= hlen2 half = bump(half) hlen = length(half) hlen2 = power(hlen,2) cpow *= 10 end while integer left = floor(n/hlen)+1, -- half[] before the 0 right = remainder(n,hlen)+1 -- half[] after the 0 string fmt = "The 1,000,000,000th cyclops number is %d (%s)\n", e = elapsed(time()-t0) printf(1,fmt,{half[left]*cpow+half[right],e})