> Of course I'm interested in alternate solutions.
> 
> Regards,
> Gregor
> 

Mine is not especially different.  I'm sure this could be streamlined.

def getmaxroot(n):
    for i in range(9,0,-1):
        if i*i <= n:
            return i

def getpairs(n):
    sn = str(n)
    if len(sn)%2:
       yield sn[0:1]
       sn = sn[1:] + '00'
    while True:          
       yield sn[0:2]
       sn = sn[2:] + '00'       
           
def root2(n):
    g = getpairs(n)
    pair = g.next()
    root = getmaxroot(int(pair))
    newval = int(str(int(pair)-root*root) + g.next())
    ans = str(root)
    while True:    
       yield ans
       prefix = str(2*int(ans))
       for i in range(9,-1,-1):
            value = int(prefix + str(i)) * i
            if value <= newval:
               break
       ans += str(i)
       newval = int(str(int(newval)-value) + g.next())


Kirby


_______________________________________________
Edu-sig mailing list
[email protected]
http://mail.python.org/mailman/listinfo/edu-sig

Reply via email to