名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

No.164 ちっちゃくないよ!!

回答

#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)