এক্স-বিলিয়নকে স্ট্যান্ডার্ড আকারে রূপান্তর করুন


14

একটি উপসর্গ দেওয়া হয়েছে, একটি উপসর্গ এবং তারপরে "illion" সমন্বিত, এই সংখ্যাটিকে স্ট্যান্ডার্ড আকারে রূপান্তর করুন।

উদাহরণ স্বরূপ:

"million" -> 10^6
"trillion" -> 10^12
"quattuordecillion" -> 10^45

প্রোগ্রামটি সেন্টিলিয়ন যা 10 ^ 303 এর উপরে গিয়ে ইনপুট পরিচালনা করতে সক্ষম হতে হবে। নামগুলির তালিকা এবং তাদের মানক ফর্মের মানগুলি এখানে পাওয়া যাবে - নোট করুন যে এটি প্রতি 10 ^ 3 ইনক্রিমেন্টের জন্য 10 ^ 63 পর্যন্ত মান দেয় তবে তারপরে তাদের 10 ments 30 ইনক্রিমেন্টে দেয় তবে প্যাটার্নটি মোটামুটি সোজা।

প্রোগ্রামটি সমস্ত 100 টি কেস পরিচালনা করতে হবে (এমনকি ওয়েবসাইটগুলি প্রদত্তভাবে প্রদত্ত নয়) - এর কয়েকটি উদাহরণ এখানে দেওয়া হয়েছে:

"sexvigintillion" -> 10^81
"unnonagintillion" -> 10^276
"octotrigintillion" -> 10^117

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

এটি কোড-গল্ফ, তাই সংক্ষিপ্ততম কোড জয়!


10 ^ 70 কি হবে?
সিমোনস্টার

3
10 ^ 70 এর একটি প্রতিনিধিত্ব নেই কারণ 3 3 70 এর ফ্যাক্টর নয় - তবে 10 ^ 69 হবে সেক্সভিগিন্টিলিয়ন। 10 ^ 70 হবে 10 সেক্সভিগিন্টিলিয়ন।
জেমস উইলিয়ামস

প্রকৃতপক্ষে, ডোজিগিন্টিলিওন = 10 ^ 69, এবং সেক্সভিগিন্টিলিওন = 10 ^ 81।
রেমি

@ রেমি আমি অনুমান করব যে আপনি দীর্ঘ স্কেল ব্যবহার করেন (যদি তা ঠিক থাকে)? মনে হচ্ছে এই প্রশ্নটি স্বল্প স্কেল ব্যবহার করে।
কোল জনসন

@ কোল জনসন: প্রশ্নের প্রদত্ত তালিকার নামটি ভিজিটিলিওন = 10 ^ 63 বলে, এবং দেখায় যে অ শক্তিগুলিতে 3 যোগ করে, do-- যোগ করে 6, লিঙ্গ যোগ করে 18, ইত্যাদি
রেমি

উত্তর:


11

পাইথন 2 ( 384 368 365 348 347 বাইট)

def c(s):
 s=s[:-6].replace('int','');k=0;d=dict(un=1,doe=2,tre=3,quattuor=4,quin=5,sex=6,septen=7,octo=8,novem=9,b=3,tr=4,quadr=5,qu=6,sext=7,sept=8,oct=9,non=10,dec=11,vig=21,trig=31,quadrag=41,quinquag=51,sexag=61,septuag=71,octog=81,nonag=91,cent=101)
 for p in(s!='m')*list(d)*2:
    if s.endswith(p):s=s[:-len(p)];k+=3*d[p]
 return 10**(k or 6)

(দ্য if লাইনটি একটি একক ট্যাবে এবং অন্যটি একক স্পেসের সাথে যুক্ত থাকে))

এখানে c('million') == 10**6একটি বিশেষ কেস হতে হবে কারণ 'novem'এটি শেষ হয় 'm'

উদাহরণ:

c('million') == 10**6
c('trillion') == 10**12
c('quattuordecillion') == 10**45
c('novemnonagintillion') == 10**300
c('centillion') == 10**303

ফালকোকে এটি 350 বাইটে নামিয়ে দেওয়ার জন্য ধন্যবাদ।


অনুশীলনের জন্য আমি ল্যাম্বডাস ব্যবহার করে এটি ওয়ান-লাইনার হিসাবে পুনরায় লেখার চেষ্টা করেছি। এটি 404 398 390 384 380 379 বাইট:

c=lambda s:(lambda t=[s[:-5].replace('gint',''),0],**d:([t.__setslice__(0,2,[t[0][:-len(p)],t[1]+3*d[p]])for p in 2*list(d)if t[0].endswith(p)],10**t[1])[1])(un=1,doe=2,tre=3,quattuor=4,quin=5,sex=6,septen=7,octo=8,novem=9,mi=2,bi=3,tri=4,quadri=5,qui=6,sexti=7,septi=8,octi=9,noni=10,deci=11,vii=21,trii=31,quadrai=41,quinquai=51,sexai=61,septuai=71,octoi=81,nonai=91,centi=101)

2
ওপিকে "10 ^ x" প্রিন্ট করা উচিত কিনা বা সুনির্দিষ্ট সংখ্যাটি ফিরিয়ে দেওয়া যথেষ্ট কিনা সে সম্পর্কে স্পষ্টকরণের অভাবকে অপব্যবহারের জন্য +1 ।
ইনগো বার্ক

1
ধন্যবাদ, যদিও return'10^'+str(3*k)আরও 4 বাইট বেশি হবে।
রেমি

1
যেহেতু এটি অজগর 2, আপনি প্রথম স্তরের জন্য একটি স্পেস ইন্ডেন্ট এবং দ্বিতীয়টির জন্য ট্যাব ব্যবহার করতে পারেন। আপনি কীওয়ার্ড আর্গুমেন্ট হিসাবে উভয় aএবং ফাংশনটিতে স্থানান্তর করতে পারেন b
FryAmTheEggman

2
1000**kতুলনায় খাটো 10**(3*k)kদ্বারা বৃদ্ধিও 3*d[p]সমানভাবে ছোট।
xnor

2
if'm'==s:k=6;d=[]দ্বিতীয় দীর্ঘ returnবিবৃতি ব্যবহার না করে আপনি প্রারম্ভিক প্রস্থানটি এড়িয়ে কয়েকটি অক্ষর সংরক্ষণ করতে পারেন ।
ফালকো

9

জেএস (ইএস 6), 292 270

প্রদত্ত তালিকায় কেবল লিখিত সংখ্যাগুলি বোঝে। অপেরা অন্যদের সম্পর্কে পরিষ্কার নয়।

z=b=>{a="M0B0Tr0Quadr0Quint0Sext0Sept0Oct0Non0Dec0Undec0Doedec0Tredec0Quattuordec0Quindec0Sexdec0Septendec0Octodec0Novemdec0Vigint0Trigint0Quadragint0Quinquagint0Sexagint0Septuagint0Octogint0Nonagint0Cent".split(0);for(i in a)if(~b.indexOf(a[i]))return"10^"+(20>i?3*i+6:93+30*(i-20))}

উদাহরণ:

z("Billion") // "10^9"
z("Centillion") // "10^303"

আপনি স্ট্রিং শূণ্যসমূহ মুছে ফেলুন এবং প্রতিস্থাপন করতে পারেন split(0)সঙ্গে match(/[A-Z][a-z]*/g)ব্যবহার প্রতিটি পংক্তি মেলে regexes করতে।
নিনজাবিয়ারমনেকি

এটি কেবলমাত্র "আন, ডো, ট্রে ইত্যাদি" ডিলিয়ন এর উপসর্গ পরিচালনা করে। এটি আনভিগিন্টিলিওন = 10 ^ 66 এবং নভেমোনাগিন্টিলিওন = 10 like 300
রেমি

আপনি ES6 ফাংশন ব্যবহার করে এটি সংক্ষিপ্ত করতে পারেন =>
soktinpk

টিপস জন্য ধন্যবাদ। @ রেমি আপনি কি নিশ্চিত? ওপিকে এটি জিজ্ঞাসা করা হবে বলে মনে হচ্ছে না
x

আমার কাছে স্পষ্ট বলে মনে হচ্ছে যে 3 এর সমস্ত গুণকগুলি প্রয়োজনীয়: "... এটি প্রতি 10 ^ 3 ইনক্রিমেন্টের জন্য 10 to 63 পর্যন্ত মান দেয় তবে তারপরে 10 ^ 30 ইনক্রিমেন্টে দেয়, তবে প্যাটার্নটি মোটামুটি সরল" ওপি। এছাড়াও ওপি একটি মন্তব্যে "সেক্সভিগিন্টিলিওন" এর উদাহরণ দেয়।
ফেস্টাম

9

সি, 235

সমস্ত 100 কেস পরিচালনা করে। প্রোগ্রাম স্টিডিন এবং স্টডআউট ব্যবহার করে।

উটের কেস বিভাজনের জন্য কার রেজিেক্সস দরকার?

char*Z="UUUi+W<)E(<7-7-++*)('&%$,*$&%$",u[999]="\0MBRilDriPtiNiUnOeReTtUiXTeCtVeCiGRigRaUagInquiXaXsexPtuOgOoNaCeCeK1",s[99],*U=u+67;
main(n){
for(gets(s);*--U;)
*U<95?
*U|=32,
n+=!!strstr(s,U)*(*Z++-35),
*U=0:
3;puts(memset(u+68,48,3*n)-1);
}

উদাহরণ

octoseptuagintillion
1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

1
এই জিনিসটি আর সি এর মতো দেখাচ্ছে না ... আমি অবাক হয়েছি।
কোয়ান্টিন

স্থান ( *U<95 ?) এবং সমস্ত নতুনলাইন কেন?
টেমসডিং

@ টমসমিডিং জায়গাটি ছিল একটি তদারকি। নতুনরেখাগুলি কোডটি "পঠনযোগ্য" করে তোলে এবং গণিতে অন্তর্ভুক্ত হয় না।
ফেয়ারসাম

2

ক্লোজার, 381 377 বাইট

(defn c[x](let[l{"M"6"B"9"Tr"12"Quadr"15"Quint"18"Sext"21"Sept"24"Oct"27"Non"30"Dec"33"Undec"36"Doedec"39"Tredec"42"Quattuordec"45"Quindec"48"Sexdec"51"Septendec"54"Octodec"57"Novemdec"60"Vigint"63"Trigint"93"Googol"100"Quadragint"123"Quinquagint"153"Sexagint"183"Septuagint"213"Octogint"243"Nonagint"273"Cent"303}v(l(clojure.string/replace x #"illion$" ""))](Math/pow 10 v)))

উদাহরণ:

(c "Septuagintillion") ;; 1.0E213


2

হাস্কেল, 204 বাইট (ফর্ম্যাট স্ট্রিংয়ের জন্য +9)

import Data.List
x s=10^(f$[a|k<-tails s,i<-inits k,(b,a)<-zip["ce","ad","un","do","b","mi","vi","tr","at","ui","x","p","oc","no","ec","g"]$100:4:1:2:2:[1..],b==i])
f[]=3
f(x:11:r)=30*x+f r
f(x:r)=3*x+f r

জিএইচসিতে:

*Main> x "decillion"
1000000000000000000000000000000000

প্রতিস্থাপন করা হচ্ছে 10^(সঙ্গে "10^"++(show.যোগ আরেকটি 9 বাইট:

import Data.List
x s="10^"++(show.f$[a|k<-tails s,i<-inits k,(b,a)<-zip["ce","ad","un","do","b","mi","vi","tr","at","ui","x","p","oc","no","ec","g"]$100:4:1:2:2:[1..],b==i])
f[]=3
f(x:11:r)=30*x+f r
f(x:r)=3*x+f r

জিএইচসিতে:

*Main> x "decillion"
"10^33"

সম্পাদনা করুন:"quinquagintillion" যা রয়েছে তার জন্য আমাকে সংশোধন করতে হয়েছিল "qua"

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.