प्रोजेक्ट यूलर # 17 से प्रेरित होकर , यह आपकी चुनौती है। एक पूर्ण प्रोग्राम या फ़ंक्शन लिखें जो एक नंबर को इनपुट के रूप में लेता है, फिर अंग्रेजी में उस नंबर को गिनने और उसमें शामिल करने के लिए कितने अक्षरों को प्रिंट या वापस करेगा। आप रिक्त स्थान, अल्पविराम या हाइफ़न शामिल नहीं करते हैं, लेकिन आपको शब्द शामिल करना चाहिए and। उदाहरण के लिए। 342 वर्तनी है Three Hundred and Forty-Two:। यह 23 अक्षर लंबा है।
आपका इनपुट एक सकारात्मक पूर्णांक होगा। आपको अमान्य इनपुट को संभालने की आवश्यकता नहीं है। बिल्ट-इन या लाइब्रेरी जो संख्याओं को अंग्रेजी में परिवर्तित करते हैं, की अनुमति नहीं है।
संख्याओं को कैसे वर्तनी के नियम यहां दिए गए हैं। (नोट: मुझे पता है कि कुछ लोग संख्याओं को वर्तनी के लिए नियमों के एक अलग सेट का उपयोग करते हैं। यह केवल इस चुनौती के उद्देश्य के लिए आधिकारिक नियम होंगे)
1 से 20
एक, दो, तीन, चार, पांच, छह, सात, आठ, नौ, दस, ग्यारह, बारह, तेरह, चौदह, पंद्रह, सोलह, सत्रह, अठारह, उन्नीस, बीस
21 से 99
इनसे जुड़ें:
बीस, तीस, चालीस, पचास, साठ, सत्तर, अस्सी, नब्बे
इन्हें:
-one, -two, -three, -four, -five, -six, -seven, -eight, -nine,
ध्यान दें कि चार में एक यू है लेकिन चालीस नहीं है!
उदाहरण:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100 से 999 रु
कितने सैकड़ों (एक सौ, दो सौ, तीन सौ, आदि), एक " और ", और बाकी संख्या ऊपर बताएं। और अपने पत्र स्कोर की ओर गिनती नहीं करता है।
उदाहरण:
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
कितने हजारों (एक हजार, दो हजार, आदि), एक अल्पविराम, फिर बाकी संख्या ऊपर बताएं। ध्यान दें कि यदि आपके पास कोई सैकड़ों नहीं हैं, तो आपको अभी भी और की आवश्यकता है ।
उदाहरण:
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
लाखों
कितने लाखों लिखें, फिर बाकी संख्या ऊपर बताई गई। ध्यान दें कि "ए मिलियन" 6 शून्य "1,000,000" है।
उदाहरण:
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
यही नियम अरबों, खरबों, चतुष्कोणों और उससे अधिक के लिए लागू होता है, लेकिन इस चुनौती के लिए, आपको 999,999,999 (नौ सौ और निन्यानबे लाख, नौ-सौ और निन्यानवे हजार) से ऊपर किसी भी संख्या को संभालने की आवश्यकता नहीं है। नौ सौ निन्यानवे।)
पायथन सॉल्वर
उत्तर को सत्यापित करने के लिए एक छोटी अजगर स्क्रिप्ट है:
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
ध्यान दें कि यह usesthe NodeBox भाषाविज्ञान पुस्तकालय संख्याओं को अंग्रेजी में परिवर्तित करने के लिए। (हां, मैंने सिर्फ अपना नियम तोड़ा है, लेकिन यह कोई प्रतिस्पर्धात्मक जवाब नहीं है) यह यहां आसानी से उपलब्ध है ।
नमूना I / O
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174