mu chance or much chance ?

日々の戯れ言

Project Euler 17

  • 問題

Problem 17:Number letter counts
If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.

If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?

  • 解答例
figure = {  0:"",
            1:"one",
            2:"two",
            3:"three",
            4:"four",
            5:"five", 
            6:"six",
            7:"seven",
            8:"eight",
            9:"nine",
            10:"ten",
            11:"eleven",
            12:"twelve",
            13:"thirteen",
            14:"fourteen",
            15:"fifteen",
            16:"sixteen",
            17:"seventeen",
            18:"eighteen",
            19:"nineteen",
            20:"twenty",
            30:"thirty",
            40:"forty",
            50:"fifty",
            60:"sixty",
            70:"seventy",
            80:"eighty",
            90:"ninety",
            100:"hundred",
            1000:"onethousand"}

def num2wordLen(num):
    l = 0
    # 1000の処理
    if num == 1000:
        l += len(figure[1000])
        return l
    # 100〜999の処理
    q100 = num // 100
    r100 = num % 100
    if(q100 > 0):
        l += (len(figure[100]) + len(figure[q100]))
        # and処理
        if(r100 != 0):
            l += 3
    # 1〜99の処理
    if(r100 < 20):
        l += len(figure[r100])
    else:
        q10 = r100 // 10
        r10 = r100 % 10
        l += (len(figure[q10 * 10]) + len(figure[r10]))       
    return l

count = 0
for i in range(1, 1001):
    count += num2wordLen(i)

print(count)