import time chars = ['1', '0', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B'] targetbase = 7 startnums = [] # bases = [] def int2base(x,b,alphabet='0123456789abcdefghijklmnopqrstuvwxyz'): 'convert an integer to its string representation in a given base' if b<2 or b>len(alphabet): if b==64: # assume base64 rather than raise error alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" else: raise AssertionError("int2base base out of range") if isinstance(x,complex): # return a tuple return ( int2base(x.real,b,alphabet) , int2base(x.imag,b,alphabet) ) if x<=0: if x==0: return alphabet[0] else: return '-' + int2base(-x,b,alphabet) # else x is non-negative real rets='' while x>0: x,idx = divmod(x,b) rets = alphabet[idx] + rets return rets def superpan(num, base): pans = [None] * (base - 1) while 1: num = pan(num, base) pans[base - 2] = num for b in reversed(range(2, base)): res = checkpan(num, b) if res: pans[b - 2] = num else: num += 1 break if all(pans): break else: num += 1 # pause() return num def pan(num, base): while 1: ispan = checkpan(num, base) if ispan: break else: num += 1 return num def pause(): programPause = input("Press the <ENTER> key to continue...") def ismember(A, B): c=[] for i in range(0, len(A)): if A[i] in B: c.append(1) else: c.append(0) return c def checkpan(num, base): basenum = int2base(num, base) members = ismember(chars[0:base], list(str(basenum))) if sum(members) is members.__len__(): res = 1 else: res = 0 return res if __name__ == '__main__': for i in range(2, targetbase + 1): startnums.append(int(''.join(chars[0:i]), i)) startnums.reverse() superpans = [None] * (targetbase - 1) print(startnums) bases = list(range(2, targetbase + 1)) bases.reverse() start = time.time() for base in range(1, targetbase): base1 = bases[base - 1] num = startnums[base - 1] superpans[base - 1] = superpan(num, base1) print('Superpandigital number of rank', base1, 'is', superpans[base - 1], 'from', num, '(', int2base(superpans[base - 1], base1), 'from', int2base(num, base1), ')') end = time.time() print(end - start)
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question