इस शब्द में कितने अक्षर हैं?


12

प्रोजेक्ट यूलर # 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

1
ऐसा क्यों है एक सौ और एक है, लेकिन फिर एक लाख, छह हजार, एक सौ एक के बिना और ?
जियोबिट्स


1
@FryAmTheEggman अपनी अजगर लिपि का उपयोग करते हुए, 1100 -> एक हजार और एक सौ; 1200 -> एक हजार दो सौ, 1000100 -> एक लाख और एक सौ, 1000200 -> एक मिलियन दो सौ। मुझे लगता है कि या तो ए) डीजे मैकगेटहेम को अपने प्रश्न में 1100 और 1000100 विशेष मामलों को संबोधित करना चाहिए, या बी) अपने परीक्षण मामलों को सही करना चाहिए
TheNumberOne

4
क्यों "और"? संख्याओं के लिए उचित नाम कभी भी इसका उपयोग नहीं करते हैं: 123 = "एक सौ तेईस"
रिक्सी

1
@ricdesi मैं सहमत हूं। संबंधित । लोग "एक हजार एक, एक हजार दो, ...", और के बिना गिनते हैं ।
mbomb007

जवाबों:


1

पायथन 2, 266 259 236 229 228 बाइट्स

यह एक अरब से नीचे के सभी इनपुट के लिए काम करता है। यह सभी परीक्षण मामलों के लिए काम करता है।

def l(n):b=[6,3,2][(n<1000)+(n<10**6)];c=10**b;return int("0335443554"[n%10])+int("0366555766"[n/10])+(n-10in[4,6,7,9])if n<100else l(n/c)+(l(n%c)or-3*(b<3))+7+(b<6)+2*(b<3)+3*(b>2)*(0<n%c<101)
print sum(map(l,range(input()+1)))

जैसा कि कहा गया है कि प्रश्न को फिट करने के लिए इसे संशोधित करने के लिए (जैसे कि 100 विशेष के साथ समाप्त होने वाली संख्याओं का इलाज न करें) बस 101 नंबर को 100 के साथ पहली पंक्ति के अंत में बदलें।

स्पष्टीकरण:

def l(n):
    b=[6, 3, 2][(n < 1000) + (n < 10**6)] # b = 2 if n < 1000 else 3 if n < 1000000 else 6
    c=10**b
    return (                            # Parenthesis added for readability.
            int("0335443554"[n % 10]) + # Compute length of last digit. one -> 3, seven -> 5, etc.
            int("0366555766"[n / 10]) + # Compute length of second to last digit. ten -> 3, eighty -> 6, etc.
            (n - 10 in[4, 6, 7, 9])     # Add one to length if the number is 14, 16, 17, or 19.

            if n < 100 else             # Use above procedure if the number is under 100.
                                        # If otherwise, use below procedure.

            l(n / c) +                  # Compute length of the top portion of number.
                (l(n % c) or            # Compute length of bottom portion of number.
                -3 * (b < 3)) +         # If the number < 1000 and is a multiple of 100,
                                        # subtract 3 from the length because of missing and.
            7 +                         # Add 7 to the length for "million"
            (b < 6) +                   # Add 8 to the length for "thousand"
            2 * (b < 3) +               # Add 10 to the length for "hundred and"
                3 *                     # Add 3 to the length for another "and"
                (b > 2) *               # if the number >= 1000
                (0 < n % c < 101)       # and the bottom portion > 0 and <= 100
    )
print sum(map(l,range(input()+1)))      # For the reader to figure out.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.