Project Euler # 17'den esinlenerek , bu sizin meydan okuma. Bir sayıyı girdi olarak alan tam bir program veya işlev yazın, ardından sayıyı saymak için İngilizce'ye (birinden başlayarak) kadar sayı yazıp döndürün. Boşluk, virgül veya kısa çizgi eklemezsiniz, ancak sözcüğü eklemeniz gerekir and
. Örneğin. 342 yazıldığından: Three Hundred and Forty-Two
. Bu 23 harf uzunluğunda.
Girişiniz pozitif bir tamsayı olacaktır. Geçersiz girişleri işlemeniz gerekmez. Sayıları İngilizceye dönüştüren yerleşik veya kitaplıklara izin verilmez.
İşte sayıları hecelemek için tüm kurallar. (Not: Bazı kişilerin sayıları hecelemek için farklı kurallar kullandığını anlıyorum. Bu sadece bu zorluğun resmi kuralları olacaktır)
1 ila 20
bir, iki, üç, dört, beş, altı, yedi, sekiz, dokuz, on, onbir, on iki, on üç, on dört, on beş, on altı, on yedi, on sekiz, on dokuz, yirmi
21 ila 99
Bunlara katılın:
Yirmi, otuz, kırk, elli, altmış, yetmiş, seksen, doksan
Bunlara:
-bir, -iki, -üç, -beş, -beş, -six, -seven, -sekiz, -nine,
Dörtte bir u olduğunu unutmayın ama kırk yok!
Örnekler:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100 ila 999
Kaç yüz (yüz, iki yüz, üç yüz, vb.), Bir " ve " ve yukarıdaki sayının geri kalanını yazın. Ve mektubunuz puanı doğru sayarmısın.
Örnekler:
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 - 999.999
Kaç bin (bin, iki bin vb.), Virgül, sonra sayının geri kalanını yukarıdaki gibi yazın. Yüzlerce bilginiz yoksa, ve öğelerine ihtiyacınız olduğunu unutmayın .
Örnekler:
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
Milyonlarca
Kaç milyon, sonra sayının geri kalanını yukarıdaki gibi yazın. "Bir milyon" un 6 sıfır "1,000,000" olduğunu unutmayın.
Örnekler:
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
Aynı kural milyarlar, trilyonlar, katrilyonlar ve üstü için de geçerlidir, ancak bu meydan okuma amacıyla 999,999,999 (Dokuz Yüz doksan dokuz milyon, dokuz yüz doksan dokuz bin, dokuz yüz doksan dokuz.)
Python çözücü
Yanıtları doğrulamak için kısa bir python betiğ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
Bu sayıları İngilizceye dönüştürmek için NodeBox dilbilim kütüphanesini kullanır. (evet, kendi kuralımı kırdım, ama bu rakip bir cevap değil) Bu, burada serbestçe mevcuttur .
Örnek G / Ç
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174