def something_about_bases( number, bonus= False ) :
assert isinstance ( number, str )
a = -ord ( 'a' ) + 10
nums = [ ord ( n) + a if n.isalpha ( ) else int ( n) for n in number]
smallest_base = max ( nums) + 1
top_base = 16 if bonus else smallest_base
for base in range ( smallest_base, top_base + 1 ) :
val = sum ( n * base ** ( len ( nums) - i - 1 ) for i, n in enumerate ( nums) )
print ( "base %i => %i" % ( base, val) )
inputs = [ '1' , '21' , 'ab3' , 'ff' ]
for i in inputs:
something_about_bases( i)
# bonus 1
print ( '' )
something_about_bases( '21' , bonus= True )
# bonus 2
print ( '' )
something_about_bases( '0' )
ZGVmIHNvbWV0aGluZ19hYm91dF9iYXNlcyhudW1iZXIsIGJvbnVzPUZhbHNlKToKICAgIGFzc2VydCBpc2luc3RhbmNlKG51bWJlciwgc3RyKQoKICAgIGEgPSAtb3JkKCdhJykgKyAxMAogICAgbnVtcyA9IFtvcmQobikgKyBhIGlmIG4uaXNhbHBoYSgpIGVsc2UgaW50KG4pIGZvciBuIGluIG51bWJlcl0KCiAgICBzbWFsbGVzdF9iYXNlID0gbWF4KG51bXMpICsgMQogICAgdG9wX2Jhc2UgPSAxNiBpZiBib251cyBlbHNlIHNtYWxsZXN0X2Jhc2UKCiAgICBmb3IgYmFzZSBpbiByYW5nZShzbWFsbGVzdF9iYXNlLCB0b3BfYmFzZSArIDEpOgogICAgICAgIHZhbCA9IHN1bShuICogYmFzZSAqKiAobGVuKG51bXMpIC0gaSAtIDEpIGZvciBpLCBuIGluIGVudW1lcmF0ZShudW1zKSkKICAgICAgICBwcmludCgiYmFzZSAlaSA9PiAlaSIgJSAoYmFzZSwgdmFsKSkKCmlucHV0cyA9IFsnMScsICcyMScsICdhYjMnLCAnZmYnXQpmb3IgaSBpbiBpbnB1dHM6CiAgICBzb21ldGhpbmdfYWJvdXRfYmFzZXMoaSkKCiMgYm9udXMgMQpwcmludCgnJykKc29tZXRoaW5nX2Fib3V0X2Jhc2VzKCcyMScsIGJvbnVzPVRydWUpCgojIGJvbnVzIDIKcHJpbnQoJycpCnNvbWV0aGluZ19hYm91dF9iYXNlcygnMCcp