Lấy cảm hứng từ Project Euler # 17 , đây là thử thách của bạn. Viết một chương trình hoặc hàm đầy đủ lấy một số làm đầu vào, sau đó in hoặc trả về số lượng chữ cái cần thiết để đếm và bao gồm số đó bằng tiếng Anh (bắt đầu từ một). Bạn không bao gồm dấu cách, dấu phẩy hoặc dấu gạch nối, nhưng bạn nên bao gồm từ and
. Ví dụ. 342 được đánh vần : Three Hundred and Forty-Two
. Đây là 23 chữ cái dài.
Đầu vào của bạn sẽ là một số nguyên dương. Bạn không phải xử lý các đầu vào không hợp lệ. Không được phép xây dựng hoặc thư viện chuyển đổi số sang tiếng Anh.
Dưới đây là tất cả các quy tắc về cách đánh vần số. (Lưu ý: Tôi nhận thấy rằng một số người sử dụng một bộ quy tắc khác cho cách đánh vần số. Đây sẽ chỉ là quy tắc chính thức cho mục đích của thử thách này)
1 đến 20
một, hai, ba, bốn, năm, sáu, bảy, tám, chín, mười, mười một, mười hai, mười ba, mười bốn, mười lăm, mười sáu, mười bảy, mười tám, mười chín, hai mươi, hai mươi
21 đến 99
Tham gia
Hai mươi, ba mươi, bốn mươi, năm mươi, sáu mươi, bảy mươi, tám mươi, chín mươi
với những điều này:
-one, -two, -three, -four, -five, -six, -seven, -eight, -nine,
Lưu ý rằng bốn có một u nhưng bốn mươi thì không!
Ví dụ:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100 đến 999
Viết ra có bao nhiêu trăm (một trăm, hai trăm, ba trăm, v.v.), một " và " và phần còn lại của số như trên. Các và không tính vào điểm số thư của bạn.
Ví dụ:
101: One hundred and one
116: One hundred and sixteen
144: One hundred and forty-four
212: Two hundred and twelve
621: Six Hundred and twenty-one
1.000 đến 999.999
Viết có bao nhiêu nghìn (một nghìn, hai nghìn, v.v.), một dấu phẩy, sau đó phần còn lại của số như trên. Lưu ý rằng nếu bạn không có hàng trăm, bạn vẫn cần và .
Ví dụ:
1,101: One thousand, one hundred and one
15,016: Fifteen thousand and sixteen
362,928: Three hundred and sixty-two thousand, nine hundred and twenty-eight
Hàng triệu
Viết ra bao nhiêu triệu, phần còn lại của số như trên. Lưu ý rằng "Một triệu" là 6 số không "1.000.000".
Ví dụ:
191,232,891: One hundred and ninety-one million, two hundred and thirty-two thousand, eight hundred and ninety-one
1,006,101: One million, six thousand, one hundred and one
Quy tắc tương tự áp dụng cho hàng tỷ, hàng nghìn tỷ, bốn tỷ trở lên, nhưng với mục đích của thử thách này, bạn không phải xử lý bất kỳ số nào trên 999.999.999 (Chín trăm chín mươi chín triệu, chín trăm chín mươi chín nghìn, 999.)
Người giải Python
Đây là một đoạn script python ngắn để xác minh câu trả lời:
import en
def get_letter_num(s):
count = 0
for c in s:
if c.isalpha():
count += 1
return count
number = input()
count = 0
for i in xrange(1, number + 1):
count += get_letter_num(en.number.spoken(i))
print count
Lưu ý rằng thư viện này sử dụng thư viện ngôn ngữ NodeBox để chuyển đổi số sang tiếng Anh. (vâng, tôi vừa phá vỡ quy tắc của riêng mình, nhưng đây không phải là câu trả lời cạnh tranh) Điều này có sẵn miễn phí ở đây .
Mẫu I / O
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174