2017-小米-電話號碼分身

題目描述

繼MIUI8推出手機分身功能以後,MIUI9計劃推出一個電話號碼分身的功能:首先將電話號碼中的每一個數字加上8取個位,而後使用對應的大寫字母代替 ("ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE"), 而後隨機打亂這些字母,所生成的字符串即爲電話號碼對應的分身。

輸入描述:

第一行是一個整數T(1 ≤ T ≤ 100)表示測試樣例數;接下來T行,每行給定一個分身後的電話號碼的分身(長度在3到10000之間)。

輸出描述:

輸出T行,分別對應輸入中每行字符串對應的分身前的最小電話號碼(容許前導0)。
示例1

輸入

4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO

輸出

0
234
345
0345


只有0(ZERO)有字母Z,也就是說,有多少個Z就有多少個0。同理,只有2有字母W,4有字母U,6有字母X,8有字母G。只有6和7有字母S,S的個數減去6的個數爲7的個數。
同理,只有5和7有V等等。計算數字個數以下:
def originalDigits(s):
    result = [0] * 10
    result[0] = s.count("Z")
    result[2] = s.count("W")
    result[4] = s.count("U")
    result[6] = s.count("X")
    result[7] = s.count("S") - result[6]
    result[5] = s.count("V") - result[7]
    result[1] = s.count("O") - result[0] - result[4] - result[2]
    result[9] = (s.count("N") - result[1] - result[7]) // 2
    result[8] = s.count("I") - result[5] - result[6] - result[9]
    result[3] = s.count("H") - result[8]
    t, resStr = "", ""
    for i, r in enumerate(result):
        t += r * str(i)  # 將全部數字排成一排
    for i in t:  # 減8逆推回原數字,resStr爲原數字
        if int(i) >= 8:
            resStr += str(int(i) - 8)
        else:
            resStr += str(int(i) + 10 - 8)
    return ''.join(sorted(resStr))  #原數字排序後(返回列表)jion爲字符串
 
if __name__ == '__main__':
    N = int(input())
    for i in range(N):
        strNumber = input()
        print(originalDigits(strNumber))
相關文章
相關標籤/搜索