এই শব্দে কতটি অক্ষর?


12

প্রকল্পের ইউরার # 17 দ্বারা অনুপ্রাণিত , এটি আপনার চ্যালেঞ্জ। একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন লিখুন যা কোনও সংখ্যাকে ইনপুট হিসাবে গ্রহণ করে, তারপরে ইংরেজিতে এই সংখ্যাটি অন্তর্ভুক্ত করতে এবং এতে অন্তর্ভুক্ত করতে কতগুলি অক্ষর লাগবে তা মুদ্রণ করুন বা ফিরে আসুন (এক থেকে শুরু করে)। আপনি স্পেস, কমা বা হাইফেন অন্তর্ভুক্ত করবেন না তবে আপনার এই শব্দটি অন্তর্ভুক্ত করা উচিত and। উদাহরণ স্বরূপ. 342 বানান হয়: Three Hundred and Forty-Two। এটি 23 অক্ষর দীর্ঘ।

আপনার ইনপুটটি ইতিবাচক পূর্ণসংখ্যা হবে। আপনাকে অবৈধ ইনপুটগুলি পরিচালনা করতে হবে না। বিল্ট-ইন বা লাইব্রেরিগুলি যা ইংরেজিতে নম্বর রূপান্তর করে তা অনুমোদিত নয়।

সংখ্যার বানান কীভাবে করা যায় তার জন্য এখানে সমস্ত বিধি রয়েছে। (দ্রষ্টব্য: আমি বুঝতে পেরেছি যে কিছু সংখ্যক কীভাবে সংখ্যার বানান করতে হয় তার জন্য বিভিন্ন বিধি বিধি ব্যবহার করে This এই চ্যালেঞ্জের উদ্দেশ্যে এটি কেবল সরকারী নিয়ম হবে))

1 থেকে 20

এক, দুই, তিন, চার, পাঁচ, ছয়, সাত, আট, নয়, দশ, এগারো, বারো, তের, চৌদ্দ, পনের, ষোল, সতের, আঠারো, উনিশ, বিশ

21 থেকে 99

এগুলিতে যোগদান করুন:

বিশ, তিরিশ, চল্লিশ, পঞ্চাশ, ষাট, সত্তর, আশি, নব্বই

এগুলোর প্রতি:

-অন, -তুই, -তীত,-চার, ফাইভ, -সিক্স, -সেভেন, -উইট, -নাইন,

নোট করুন যে চারজনের একটি ইউ আছে তবে চল্লিশটি নেই!

উদাহরণ:

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

নোটবক্স ভাষাতাত্ত্বিক পাঠাগারটি নম্বরে ইংরেজিতে রূপান্তর করতে নোট করুন। (হ্যাঁ, আমি কেবল নিজের নিয়মটি ভঙ্গ করেছি, তবে এটি কোনও প্রতিযোগিতামূলক উত্তর নয়) এটি এখানে নিখরচায় পাওয়া যায়

নমুনা I / O

7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174

1
কেন এটি একশো এক , কিন্তু তারপরে দশ মিলিয়ন, ছয় হাজার, একশ এক ছাড়া আর ?
জিওবিটস


1
@ ফ্রাইআম দ্য এজিগম্যান তার অজগর লিপিটি ব্যবহার করে ১১০০ -> এক হাজার একশত; 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 টি বিশেষ দিয়ে শেষ হওয়া সংখ্যার সাথে আচরণ করবেন না) কেবল প্রথম লাইনের শেষে 100 এর সাথে 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.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.