جواب سوال 17 ProjectEuler: شمارش تعداد حروف

پروژه اویلر

چالش هفدهم سایت پروژه اویلر رو دوست داشتم!

اگر اعداد یک تا 5 را بصورت حروف انگلیسی بنویسیم: 

one, two, three, four, five

که داریم:

3 + 3 + 5 + 4 + 4 = 19حرف کلا نوشته شده است. اگر کل اعداد یک تا 1000 را بصورت حروفی بنویسیم، چند حرف استفاده خواهد شد؟

نکته: فاصله و خط فاصله محاسبه نگردد. برای مثال 342 بصورت three hundred and forty-two نوشته می شود که 23 حرف دارد.

خوب! به نظرتون چکار باید بکنیم؟ یک تا هزار رو بصورت حروفی بنویسیم و شمارش کنیم!؟

def number_to_english(n: int) -> str:
    ones = ["zero", "one", "two", "three", "four", "five",
            "six", "seven", "eight", "nine", "ten", "eleven", "twelve",
            "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
    tens = [None, None, "twenty", "thirty", "forty",
            "fifty", "sixty", "seventy", "eighty", "ninety"]
    if 0 <= n < 20:
        return ones[n]
    elif 20 <= n <= 90 and n % 10 == 0:
        return tens[n // 10]
    elif 20 < n < 100:
        return tens[n // 10] + "-" + ones[n % 10]
    elif 100 <= n <= 900 and n % 100 == 0:
        return ones[n // 100] + " hundred"
    elif 100 < n < 1000:
        return ones[n // 100] + " hundred and " + number_to_english(n % 100)
    elif 1000 < n < 10000:
        pass
    elif n == 1000:
        return "one thousand"
    else:
        raise ValueError("unexpected input")


target = 1000
answer = 0
for i in range(target):
    words = number_to_english(i + 1).replace(" ", "").replace("-", "")
    answer += len(words)
print(answer)

تحلیل کدهای نوشته شده رو به شما واگذار می کنم اما اگر سوالی داشتید در همینجا بفرمایید تا پاسخ داده شود. یادآوری کنم که راه حل های خودتان را در بخش نظرات به اشتراک بگذارید تا دیگران نیز به آنها دسترسی داشته و از آنها استفاده نمایند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.