পূর্ণসংখ্যার ইংরেজি শব্দগুলিতে রূপান্তর করা


21

এই কোড গল্ফের লক্ষ্য হ'ল পূর্ণসংখ্যাকে ইংরেজি শব্দের সাথে রূপান্তর করা।

প্রোগ্রামটি ইনপুটটির জন্য অনুরোধ করে। যদি এই ইনপুটটি পূর্ণসংখ্যা না হয়, মুদ্রণ করুন NaN। যদি এটি একটি পূর্ণসংখ্যা হয় তবে এটিকে ইংরেজী শব্দগুলিতে রূপান্তর করুন এবং এই শব্দগুলি মুদ্রণ করুন। সর্বনিম্ন ইনপুট: 0 (শূন্য)। সর্বাধিক ইনপুট: 9000 (নয় হাজার)।
সুতরাং, 5রিটার্নগুলি five(কেস কোনও ব্যাপার নয়), এবং 500ফিরে আসে five hundredবা five-hundred(ড্যাশগুলি কিছু যায় আসে না)।

কিছু অন্যান্য নিয়ম:

এর oneআগে hundredবা thousandalচ্ছিক: one hundredসঠিক, তবে hundredখুব (যদি ইনপুট 100অবশ্যই থাকে)।

andউদাহরণস্বরূপ শব্দটিও one hundred and forty fivealচ্ছিক।

হোয়াইটস্পেস বিষয়। সুতরাং, জন্য 500, five-hundredবা five hundredসঠিক, কিন্তু fivehundredনয়।

শুভকামনা!


এখানে একটি অসমাপ্ত উত্তর রয়েছে rgagnon.com/javadetails/java-0426.html

এই উত্তরটি একই রকম কাজ করে তবে কোড-গল্ফ নয় isn't
এসটি 3

উত্তর:


7

পার্ল 281 বাইট

print+0eq($_=<>)?Zero:"@{[((@0=($z,One,Two,Three,Four,Five,@2=(Six,Seven),
Eight,Nine,Ten,Eleven,Twelve,map$_.teen,Thir,Four,@1=(Fif,@2,Eigh,Nine)))
[$_/1e3],Thousand)x($_>999),($0[($_%=1e3)/100],Hundred)x($_>99),
($_%=100)>19?((Twen,Thir,For,@1)[$_/10-2].ty,$0[$_%10]):$0[$_]]}"||NaN

অনুভূমিক বিগ্রহের জন্য নিউলাইনগুলি যুক্ত হয়েছে। উপরেরটি ইন্টারেক্টিভভাবে ব্যবহার করা যেতে পারে, বা স্টিডিনের মাধ্যমে একটি মান পাইপ করে।

[0, 19999] রেঞ্জের সমস্ত পূর্ণসংখ্যার মানগুলির জন্য সঠিকভাবে কাজ করে , এই ব্যাপ্তির বাইরের মানগুলি অপরিজ্ঞাত আচরণ প্রদর্শন করে। অ পূর্ণসংখ্যা মান শূন্য প্রতি ছেঁটে ফেলা হবে এবং এই ধরনের মাত্র মান যা সত্যিই অ সাংখ্যিক ইচ্ছা রিপোর্ট হিসাবে NaN

নমুনা ব্যবহার:

for $n (14, 42, 762, 2000, 6012, 19791, 1e9, foobar, 17.2, -3) {
  print "$n: ", `echo $n | perl spoken-numbers.pl`, $/;
}

নমুনা আউটপুট:

14: Fourteen
42: Forty Two
762: Seven Hundred Sixty Two
2000: Two Thousand 
6012: Six Thousand Twelve
19791: Nineteen Thousand Seven Hundred Ninety One
1000000000: Thousand 
foobar: NaN
17.2: Seventeen
-3: Nine Hundred Ninety Seven

"1000000000: হাজার"? এবং 17.2 "NAN" মুদ্রণ করা উচিত নয়?
ডেভিডসি

5
@ ডেভিডকারারহর "... এই সীমার বাইরে মানগুলিNaN
primo

আমি পার্ল বিশেষজ্ঞ নই, তাই আমি এই প্রশ্নটি জিজ্ঞাসা করছি: এই প্রোগ্রামটি কি ইনপুট দেওয়ার জন্য অনুরোধ করে?
ProgramFOX

@ প্রোগ্রামআমএফএক্স আমি স্টাডিনের কোনও মান পড়ার জন্য এটি আপডেট করেছি (যদি ইন্টারেক্টিভভাবে চালানো হয় তবে এটি ব্যবহারকারীর কোনও মান হিসাবে অনুরোধ করবে), কোনও ফাংশন হিসাবে না।
primo

13

জাভাস্ক্রিপ্ট (375)

সম্ভবত একটি ভয়ানক প্রচেষ্টা, তবে যাইহোক, এখানে ...

alert(function N(s,z){return O="zero,one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thir,,fif,,,eigh,,,,twen,,for".split(","),(z?O[s]||O[s-10]||O[s-20]:s<13?N(s,1):s<20?N(s,1)+"teen":s<100?N(a=20+(s/10|0),1)+"ty"+(s%10?" "+N(s%10):""):s<1e3?N(s/100|0)+" hundred"+(s%100?" "+N(s%100):""):s<1e5?N(s/1e3|0)+" thousand"+(s%1e3?" "+N(s%1e3):""):0)||NaN}(prompt()))

সুন্দর-মুদ্রিত (একটি ফাংশন হিসাবে):

function N(s,z) {
  return O = "zero,one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thir,,fif,,,eigh,,,,twen,,for".split(","),
      (z? O[s] || O[s-10] || O[s-20]
       : s < 13?  N(s,1)
       : s < 20?  N(s,1) + "teen"
       : s < 100? N(a=20+(s/10|0),1) + "ty" + (s%10?" "+N(s%10):"")
       : s < 1e3?  N(s/100|0) +  " hundred" + (s%100?" "+N(s%100):"")
       : s < 1e5?  N(s/1e3|0) + " thousand" + (s%1e3?" "+N(s%1e3):"") : 0) || NaN
}

নমুনা রূপান্তর (নোট করুন যে এটি NaNসীমা ছাড়িয়ে গেলেও আউটপুট দেয় , অর্থাত্ অবৈধ ইনপুট):

540: five hundred forty
4711: four thousand seven hundred eleven
7382: seven thousand three hundred eighty two
1992: one thousand nine hundred ninety two
hutenosa: NaN
1000000000: NaN
-3: NaN

+1জাভাস্ক্রিপ্টের মতো ভাষায় আরও ভাল করা বেশ কঠিন। (আপনি N(s,z) {return1 টি সংরক্ষণের জন্য স্থান সরাতে পারেন )
ম্যাথ চিলার

ওহ, হ্যাঁ, এটা অবশ্যই মিস করেছি। আমি মনে করি Oস্ট্রিংয়ের মধ্যে একগুচ্ছ অক্ষর মিস করেছেন missed আমি এটি ঠিক করব ..
ফায়ারফ্লাই

11

গণিত 60 57

f = ToString@#~WolframAlpha~{{"NumberName", 1}, "Plaintext"} &

ব্যবহার:

f[500]

পাঁচশ

সম্পাদনা:

InputString[]~WolframAlpha~{{"NumberName", 1}, "Plaintext"}

3
এটি আসলে প্রশ্নের উত্তর দেয় না। আমি বলেছিলাম যে ব্যবহারকারীর একটি নম্বর ইনপুট করতে হবে (উদাহরণস্বরূপ কমান্ড লাইন, বা একটি প্রম্পট বাক্স ব্যবহার করে), এবং তারপরে আপনার প্রোগ্রামটি শব্দের আউটপুট করা উচিত (কমান্ড লাইনে বা উদাহরণস্বরূপ কোনও বার্তা বাক্সে)। আপনার কোড এটিকে রূপান্তর করার জন্য কেবল একটি ফাংশন, এবং আপনার প্রোগ্রামটি ইনপুট চায় না।
প্রোগ্রামফক্স

@ প্রোগ্রামএফএক্স এটি বলে যে 'ব্যবহারকারী কিছু উপস্থাপন করে'। এর অর্থ এই নয় যে 'প্রোগ্রামটি ইনপুটটির জন্য অনুরোধ জানায়'।
মিঃজান্ডার

@ মিঃজান্ডার: ঠিক আছে, 'প্রোগ্রামটি ইনপুটটির জন্য অনুরোধ জানায়' আসলে আমার অর্থ ছিল। আমি আমার প্রশ্ন আপডেট করেছিলাম, তবে অবশ্যই আমি যদি আলিফালফের উত্তরটিকে উপেক্ষা না করি তবে তা অন্যায় হবে, সুতরাং সে আমার +1 পেয়েছে
প্রোগ্রামএফক্স

8

লিস্প, 72 56 টি অক্ষর

আমি বুঝতে পারি) 1) এটি পুরানো, এবং 2) এটি পুরোপুরি স্ট্যান্ডার্ড লাইব্রেরিতে কাজ করতে নির্ভর করে তবে আপনি সি-লিস্প প্রিন্টিং সিস্টেমটিকে এই জাতীয় জিনিসটি পেতে সর্বদা আমাকে মুগ্ধ করেছেন। এছাড়াও, এটি প্রকৃতপক্ষে কোনও ব্যবহারকারীর কাছ থেকে ইনপুট নেয়, রূপান্তর করে এটি মুদ্রণ করে।

(format t "~:[NaN~;~:*~r~]" (parse-integer (read-line) :junk-allowed t))

এটি মোট 72 টি অক্ষর।

  • :junk-allowed পার্স-পূর্ণসংখ্যার কারণে ত্রুটি বাড়ানোর পরিবর্তে ব্যর্থতার শূন্যতায় ফিরে আসে।
  • ~:[if-nil~;if-non-nill] শর্তসাপেক্ষে শূন্যের উপর পূর্বাভাস দেওয়া হয়, যেখানে প্রয়োজন হয় NaN পরিচালনা করে
  • ~:* ইনপুটটি পুনরায় গ্রাহ্য করার জন্য যুক্তির ব্যাখ্যাকে ব্যাক আপ করে
  • ~r সম্পূর্ণ সংশোধন বিরামচিহ্ন বাদে অনুরোধ হিসাবে একটি ইংরেজী শব্দের স্ট্রিং হিসাবে নম্বরটি মুদ্রণ করে

নমুনা:

17823658
seventeen million, eight hundred and twenty-three thousand, six hundred and fifty-eight

192hqfwoelkqhwef9812ho1289hg18hoif3h1o98g3hgq
NaN

প্রাথমিকভাবে ব্যবহারিক কমন লিস্পের থেকে লিস্প সম্পর্কিত তথ্য ।

সম্পাদনা করুন, 56 টি অক্ষর পর্যন্ত সঠিকভাবে গল্ফ করেছেন

(format t "~:[NaN~;~:*~r~]"(ignore-errors(floor(read))))

এই সংস্করণটি বরং ভিন্নভাবে কাজ করে। একটি লাইন পড়ার পরিবর্তে এবং রূপান্তরিত করার পরিবর্তে, এটি লিস্প পাঠককে ইনপুটটিকে একটি লিস্প এস-এক্সপ্রেশন হিসাবে ব্যাখ্যা করার জন্য অনুরোধ করে, এটি একটি সংখ্যা হিসাবে ব্যবহারের চেষ্টা করে এবং যদি কোনও ত্রুটি উত্পন্ন হয় তবে শর্তসাপেক্ষে স্ট্রিম্যাট ফর্মিংয়ের জন্য শূন্যকে উত্পাদন উপেক্ষা করে। এটি সম্ভবত প্রথম ঘটনাটি দেখা গেল যে আমি লিস্পকে সত্যিকার অর্থেই একটি উত্সাহী অনুষ্ঠান তৈরি করলাম ... মজাদার!

  • (read) লিস্প রিডার / পার্সারকে স্ট্যান্ডার্ড ইনপুট থেকে একটি এক্সপ্রেশন পড়তে এবং এটি একটি উপযুক্ত অবজেক্টে রূপান্তরিত করার আহ্বান জানায়
  • (floor) যে কোনও সংখ্যার প্রকারকে নিকটতম নিম্নতম পূর্ণসংখ্যায় রূপান্তরিত করার চেষ্টা করা হয়, অ-সংখ্যাগত প্রকারের ফলে এটি ত্রুটি বাড়াতে পারে
  • (ignore-errors ...) এটি টিনে যা বলে তা করে, এটি বদ্ধ প্রকাশের কোনও ত্রুটি ধরা এবং উপেক্ষা করে, ফর্ম্যাট স্ট্রিংয়ের এনএএন শাখাকে খাওয়ানোর জন্য শূন্যস্থান ফিরে আসে

এটি অবশ্যই কোনও সমস্যা নয় যে প্রশ্নটি পুরানো :) আমি একটি উত্তর শিরোনামে ভাষার নাম এবং চরিত্রের সংখ্যা অন্তর্ভুক্ত করার জন্য আপনার উত্তরটি সম্পাদনা করেছি।
প্রোগ্রামফক্স

সম্পাদনার জন্য আপনাকে ধন্যবাদ, এই জিনিসগুলির জন্য আমি স্ট্যাক * সিনট্যাক্সটি এখনও পাইনি। ফিরে গিয়েছিলাম এবং ফর্ম্যাট স্ট্রিংয়ের শর্তাধীন শর্তাবলীর বর্ণনায় আমি একটি ভুলও ঠিক করেছি।
টম স্কোগল্যান্ড

3

পিএইচপি, 327 310 308 বাইট

<?$a=['',one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thir,0,fif,0,0,eigh];echo($n=$argv[1])>999?$a[$n/1000].' thousand ':'',$n%1000>99?$a[$n/100%10].' hundred ':'',$n?($k=$n%100)<20?($a[$k]?:$a[$k%10]).[teen][$k<13]:[2=>twen,thir,'for',fif,six,seven,eigh,nine][$k/10].'ty '.$a[$k%10]:zero;

প্যারামিটার হিসাবে নম্বরটি নেয়, 0 <= n <= 12999 এর জন্য কাজ করে

ভাঙ্গন

// define names
$a=['',one,two,three,four,five,six,seven,eight,nine,
    ten,eleven,twelve,thir,0,fif,0,0,eigh];
// print ...
echo
    ($n=$argv[1])>999?$a[$n/1000].' thousand ':'',                  // thousands
    $n%1000>99?$a[$n/100%10].' hundred ':'',                        // hundreds
    $n?
        // if remains <20:
        ($k=$n%100)<20?
            ($a[$k]?:$a[$k%10]) // no value at index (0,14,16,17,19)? value from index%10
            .[teen][$k<13]      // append "teen" for $k>12
        // else:
        :[2=>twen,thir,'for',fif,six,seven,eigh,nine][$k/10].'ty '  // tens
        .$a[$k%10]                                                  // ones
    // "zero" for $n==0
    :zero
;

2

এসএএস, 70 টি অক্ষর

data;window w n;display w;if n=. then put 'NaN';else put n words.;run;

windowএবং displayবিবৃতি খুলুন এসএএস প্রম্পট য়েতে বল। ' ইনপুট nলাইন 1 এ চলে যায় This এটি এসএএস ফর্ম্যাটটির সুবিধা নেয় words.যা "এবং", "", এবং "-" যথাযথ হিসাবে একটি শব্দ বা শব্দের সিরিজ হিসাবে সংখ্যাটি মুদ্রণ করবে।


2

পিএইচপি

777 টি অক্ষর

এটি অবশ্যই একটি ভয়াবহ প্রয়াস, তবে আপনি যে কোনও ফাঁকফোকর সুবিধা নিয়ে আমাকে অভিযুক্ত করতে পারবেন না, এটি খুব ভাগ্যবান সংখ্যা। টিপটির জন্য প্রোগ্রামফক্সকে ধন্যবাদ।

<?php $i=9212;$b = array('zero','one','two','three','four','five','six','seven','eight','nine');$t='teen';$c = array('ten','eleven','tweleve','thir'.$t,$b[4].$t,'fif'.$t,$b[6].$t,$b[7].$t,$b[8].$t,$b[9].$t);$d = array('','','twenty','thirty','fourty','fifty','sixty','seventy','eighty','ninety');$e='hundred';$f='thousand';$j=str_split($i);if (strlen($i)===1){$a=$b[$i];}elseif (strlen($i)===3){$k=1;$a=$b[$j[0]].' '.$e.' '.x($j,$k);}elseif (strlen($i)===4){$k=2;$a=$b[$j[0]].' '.$f.' '.$b[$j[1]].' '.$e.' '.x($j,$k);}elseif (substr($i, -2, 1)==='1'){$a=$c[$j[1]];}else{$a=$d[$j[0]].' '.$b[$j[1]];}$a = str_replace('zero hundred','',$a);echo $a;function x($j,$k){global $i, $b, $c, $d;if (substr($i, -2, 1)==='1'){return $c[$j[$k+1]];}else{return $d[$j[$k]].' '.$b[$j[$k+1]];}}

লম্বা হাত

<?php
// Input
$i=9212;
// 0-9
$b = array('zero','one','two','three','four','five','six','seven','eight','nine');
// 10-19 (Very tricky)
$t='teen';
$c = array('ten','eleven','tweleve','thir'.$t,$b[4].$t,'fif'.$t,$b[6].$t,$b[7].$t,$b[8].$t,$b[9].$t); 
// Left digit of 20-99
$d = array('','','twenty','thirty','fourty','fifty','sixty','seventy','eighty','ninety');
// Hundreds
$e='hundred';
// Thousands
$f='thousand';
// Split input
$j=str_split($i);
// 1 digit inputs
if (strlen($i)===1){$a=$b[$i];}
// 3 digit input
elseif (strlen($i)===3){$k=1;$a=$b[$j[0]].' '.$e.' '.x($j,$k);}
// 4 digit input
elseif (strlen($i)===4){$k=2;$a=$b[$j[0]].' '.$f.' '.$b[$j[1]].' '.$e.' '.x($j,$k);}
// 10-19
elseif (substr($i, -2, 1)==='1'){$a=$c[$j[1]];}
// 20-99
else{$a=$d[$j[0]].' '.$b[$j[1]];}
// Fix for thousand numbers
$a = str_replace('zero hundred','',$a);
// Result
echo $a;
// Abstracted function last 2 digits for 3 and 4 digit numbers
function x($j,$k){
    global $i, $b, $c, $d;
    // 10-19
    if (substr($i, -2, 1)==='1'){return $c[$j[$k+1]];}
    // 20-99
    else{return $d[$j[$k]].' '.$b[$j[$k+1]];}
}

1
আমি মনে করি আপনি ভালো অ্যারে তৈরি করে আপনার কোড কমান পারেন: array('zero','one','two')
প্রোগ্রামফক্স

@ প্রোগ্রামফক্স বা এমনকি ['zero','one','two'](পিএইচপি 5.4+)। এবং আপনি যদি আপত্তি না করেন E_NOTICE, [zero,one,two]পাশাপাশি কাজ করবে।
প্রিমো

আমার এটি আপডেট করা উচিত, তবে 777 এমন ভাগ্যবান সংখ্যা।
গুজ

আপনার প্রচেষ্টার জন্য +1। পিএইচপি করুণভাবে কোড গল্ফে উপস্থাপিত হয়।
প্রিমো

1

পাইথন 2.x - 378

ফায়ারফ্লাইসের উত্তরগুলির ডেরাইভেটিভ, যদিও Pমিলিয়ন বা ট্রিলিয়ন ইত্যাদি অন্তর্ভুক্ত করে পরিবর্তন করে .. এটি যে কোনও ধরণের ইতিবাচক সংখ্যার জন্য পুনরাবৃত্তভাবে ব্যবহার করা যেতে পারে। এটি 999,999 পর্যন্ত মানগুলিকে সমর্থন করে

O=",one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thir,,fif,,,eigh,,,,twen,thir,for,fif,,,eigh,".split(",")
P=",thousand".split(',')
def N(s,p=0):
 h,s=divmod(s,1000);x=N(h,p+1)if h>0 else" "
 if s<20:x+=O[s]or O[s-10]+["","teen"][s>12]
 elif s<100:x+=(O[s/10+20]or O[s/10])+"ty"+N(s%10)
 else:x+=N(s/100)+"hundred"+N(s%100)
 return x+" "+P[p]
print N(input())

নমুনা পরীক্ষা (ইনপুটটি হ'ল <<<, আউটপুট হয় >>>):

<<< 1234
>>> one thousand two hundred thirty four

<<< 999999
>>>  nine hundred ninety nine   thousand nine hundred ninety nine

যদিও, কেউ যদি আমার কাছে এই "বেফার আন্ডারফ্লো" সমস্যাটি ব্যাখ্যা করতে পারে তবে তা ফুলে উঠবে ...

<<< -1
>>>  nine hundred ninety nine

<<< -2
>>>  nine hundred ninety eight

print divmod(-2,1000) #-> (-1, 998)
প্রিমো

ওহ অবশ্যই. আমি ভাবছিলাম এটি একটি নিখুঁত মান বা কিছু নিতে পারে। তবে এর -1*1000একটি "বাকী" রয়েছে 998

1

স্মাইলব্যাসিক, 365 থ্রি হান্ড্রেড ফোর্টিটি সেভেন বাইট

DIM N$[22]D$="OneTwoThreeFourFiveSixSevenEightNineTenElevenTwelveThirFourFifSixSevenEighNineTwenFor
WHILE LEN(D$)INC I,D$[0]<"_
INC N$[I],SHIFT(D$)WEND
INPUT N
W=N MOD 100C%=N/100MOD 10M%=N/1E3T=W<20X=W/10>>0?(N$[M%]+" Thousand ")*!!M%+(N$[C%]+" Hundred ")*!!C%+(N$[X+10+(X==2)*8+(X==4)*7]+"ty "+N$[N MOD 10])*!T+N$[W*T]+"teen"*(T&&W>12)+"Zero"*!N

শেষ এক বা দুটি সংখ্যা 0 হলে এখানে একটি পিছনের স্থান রয়েছে।


0

এমওইউ - 55 টি অক্ষর

player:tell($string_utils:english_number(read(player)))

অথবা, যদি আমাকে "স্টডআউট" - 42 অক্ষরে মুদ্রণের প্রয়োজন না হয়: $string_utils:english_number(read(player))

দ্রষ্টব্য: এই কোডটি স্ট্যান্ডার্ড আউটপুটে কোনও প্রম্পট মুদ্রণ করে না এবং ইনপুটটি কোনও নম্বর না হওয়ার zeroপরিবর্তে প্রিন্ট করে NaN

বোনাস হিসাবে, এই কোডটি মু ভাষা ( 2147483647- -2147483648) এর সীমানা সহ যে কোনও সংখ্যা পরিচালনা করতে পারে ।


0

ওল্ফ্রাম ভাষা 27 40 বাইট

নেটিভ ফাংশনটি ব্যবহার করা IntegerName,

 Check[Input[]~IntegerName~"Words","NaN"]

উপরের ব্যবহারকারীদের ইনপুট জন্য অনুরোধ জানানো হয়। ব্যবহারকারী যদি পূর্ণসংখ্যা ব্যতীত অন্য কোনও কিছু প্রবেশ করে তবে "বাস্তবায়ন" NaN প্রদান করে।


কয়েকটি উদাহরণ (প্রাক-সেট ইনপুট সহ) :

 Check[243~IntegerName~"Words","NaN"]

দুইশ তেতাল্লিশ


 Check[1234567890~IntegerName~"Words","NaN"]   

এক বিলিয়ন, দু'শো চৌত্রিশ লক্ষ, পাঁচশো সাতষট্টি হাজার, আটশো নব্বই?


 Check["abc"~IntegerName~"Words","NaN"]  

NaN


0

পাইথন 2 , 333 বাইট

def f(n):S=str.split;D=S('z one two three four five six seven eight nine');K=' fif six seven eigh nine';k=n/1000;n,m=n/100%10,n%100;e,d=m/10,m%10;return' '.join([k and f(k),'thousand']*(k>0)+[D[n],'hundred']*(n>0)+([S('ten eleven twelve thir four'+K)[d]+'teen'*(d>2)]if 9<m<20else[S('twen thir for'+K)[e-2]+'ty']*(e>0)+[D[d]]*(d>0)))

এটি অনলাইন চেষ্টা করুন!

অন্তর্ভুক্ত সহ এটি 1 থেকে 999,999 এর জন্য ভাল।


0

পাইথ, 239 242 বাইট

L:rjdb6"  +"dAm+cd;"nine"," one two three four five six seven eight""  twen thir for fif six seven eigh"|y_.ey+Wk.e?Y?thZjd,?hZ+@HhZ"ty"""@GeZ@+c"ten eleven twelve"d+R"teen"+c"thir four"d>H5eZ?hZ+@GhZ" hundred"""c.[03_b]1"thousand"c_jQT3"zero

ইনপুটটি পরিসীমা [0-999,999] এর মধ্যে একটি পূর্ণসংখ্যা। এটি এখানে অনলাইনে চেষ্টা করুন । ব্যাখ্যা মুলতুবি রয়েছে।

পূর্ববর্তী সংস্করণ, খুব অনুরূপ ক্রিয়াকলাপ, কিন্তু 0 সমর্থন করে না:

L:rjdb6"  +"dJc" one two three four five six seven eight nine"dKc"  twen thir for fif six seven eigh nine"dy_.ey+Wk.e?Y?thZjd,?hZ+@KhZ"ty"""@JeZ@+c"ten eleven twelve"d+R"teen"+c"thir four"d>K5eZ?hZ+@JhZ" hundred"""c.[03_b]1"thousand"c_jQT3

পূর্ববর্তী সংস্করণটির ব্যাখ্যা:

Implicit: Q=eval(input()), d=" "

Step 1: output formatting helper function
L:rjdb6"  +"d   
L               Define a function, y(b):
   jdb          Join b on spaces
  r   6         Strip whitespace from beginning and end
 :              In the above, replace...
       "  +"    ... strings of more than one space...
            d   ... with a single space

Step 2: Define number lookup lists
Jc"..."dKc"..."d   
  "..."            Lookup string
 c     d           Split the above on spaces
J                  Store in J - this is list of unit names
        Kc"..."d   As above, but storing in K - this is list of tens names, without "ty"

Step 3: Bringing it all together
y_.ey+Wk.e?Y?thZjd,?hZ+@KhZ"ty"""@JeZ@+c"ten eleven twelve"d+R"teen"+c"thir four"d>K5eZ?hZ+@JhZ" hundred"""c.[03_b]1"thousand"c_jQT3   
                                                                                                                                jQT    Get digits of Q
                                                                                                                               _       Reverse
                                                                                                                              c    3   Split into groups of 3
  .e                                                                                                                                   Map the above, element as b, index as k, using:
                                                                                                                _b                       Reverse the digits in the group
                                                                                                            .[03                         Pad the above on the left with 0 to length 3
                                                                                                           c      ]1                     Chop at index 1 - [1,2,3] => [[1],[2,3]]
        .e                                                                                                                               Map the above, element as Z, index as Y, using:
          ?Y                                                                                                                               If second element in the group (i.e. tens and units):
            ?thZ                                                                                                                             If (tens - 1) is non-zero (i.e. 0 or >=2):
                   ?hZ                                                                                                                         If tens is non-zero:
                       @KhZ                                                                                                                      Lookup in tens names
                      +    "ty"                                                                                                                  Append "ty"
                                                                                                                                               Else:
                               ""                                                                                                                Empty string
                  ,                                                                                                                            Create two-element list of the above with...
                                 @JeZ                                                                                                          ... lookup units name
                jd                                                                                                                             Join the above on a space - this covers [0-9] and [20-99]
                                                                                                                                             Else:
                                                                     c"thir four"d                                                             ["thir", "four"]
                                                                    +             >K5                                                          Append last 5 element of tens names ("fif" onwards)
                                                            +R"teen"                                                                           Append "teen" to each string in the above
                                      +c"ten eleven twelve"d                                                                                   Prepend ["ten", "eleven", "twelve"]
                                     @                                               eZ                                                        Take string at index of units column - this covers [10-19]
                                                                                                                                           Else: (i.e. hundreds column)
                                                                                       ?hZ                                                   If hundreds column is non-zero:
                                                                                           @JhZ                                                Lookup units name
                                                                                          +    " hundred"                                      Append " hundred"
                                                                                                         ""                                  Else: empty string
                                                                                                                                         Result of map is two element list of [hundreds name, tens and units name]
      Wk                                                                                                                                 If k is nonzero (i.e. dealing with thousands group)...
     +                                                                                                              "thousand"           ... Append "thousand"
    y                                                                                                                                    Apply output formatting (join on spaces, strip, deduplicate spaces)
                                                                                                                                       Result of map is [units group string, thousands group string]
 _                                                                                                                                     Reverse group ordering to put thousands back in front
y                                                                                                                                      Apply output formatting again, implicit print
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.