回答
#59800 No.164 ちっちゃくないよ!! - yukicoder
元ネタはWORKING!!の種島ぽぷらちゃんのセリフですかね(たまには元ネタの推測をする)
各数について最小となるような進数を考え,最小となる進数での表記→10進数での表記,という形に変えて,最小値を更新し続けて答えを求める.
最小となるような進数の求め方だが,たとえば,2進数ならば0,1が出現するので,1が出た時に2を記録するようにする….つまり出てくる文字の中で,最大+1になるときが,最小となる真数になる.
a..zも出てくるので,数字でなければ,アスキーコードを使い,計算する.(対象となる文字のアスキーコード - "A"のアスキーコード + 11 で合うはず… alphabetのアスキーコードが連番になっていることが前提ではあるが)
n進数から10進数への変換は,python3の場合,int(num, n) で実現可能なので楽ですね….
res = -1 for _ in range(int(input())): inp = input() while inp[0] == "0" and len(inp) > 1: inp = inp[1:] decimal = 2 for c in inp: tdec = 0 if c.isdigit(): tdec = int(c) + 1 else: tdec = ord(c) - ord('A') + 11 decimal = max(tdec, decimal) res = min(res, int(inp, decimal)) if res != -1 else int(inp, decimal) print(res)