আসুন সংখ্যার সংক্ষেপে দিন! এখন বিপরীত?


11

পরিচিতি:

টুইটার এবং Instagram এবং অন্যদের ভালো লেগেছে, আমি সংখ্যার মত প্রদর্শন করতে চেয়েছিলেন 1.2Kএবং 3.8 Mপরিবর্তে 1,222বা 3,823,456

কিন্তু এখানেই শেষ নয়! যেমনটি আমরা সবাই জানি, এমন কিছু মানুষ থাকতে পারে যা নিঃসন্দেহে এই সংক্ষেপগুলি পছন্দ করবে না এবং তাদের বিপরীত করার চেষ্টা করবে to সুতরাং, 1.2kহয়ে যাবে 1,200এবং 3.8 Mহয়ে যাবে 3,800,000

কাজটি:

  • আপনার কাজ হ'ল একটি প্রোগ্রাম বা একটি ফাংশন লিখুন যা সংখ্যার একটি তালিকা ( যা স্ট্রিং হিসাবে দেওয়া হয় ) তাদের সংক্ষিপ্ত জোড়া এবং তদ্বিপরীত রূপান্তর করে।

উদাহরণস্বরূপ, যদি ইনপুট তালিকা (বা যে কোনও STDIN) ছিল ['1.4k', '1,234,567', '7.99M'], তবে আপনার আউটপুট করা উচিত:

['1,400', '1.2M', '7,990,000']

সংক্ষিপ্তসারগুলির জন্য আপনি পরবর্তী স্কিমা অনুসরণ করতে পারেন:

  • 10 3 -> এক কিলো -> কে
  • 10 6 -> এক মিলিয়ন -> এম
  • 10 9 -> এক বিলিয়ন -> বি

আপনার কোড ইনপুটটির জন্য সমস্ত ছোট হাতের অক্ষর, সমস্ত বড় হাতের মিশ্রণ, মিশ্র কেস বা অপরিজ্ঞাত কেস ধরে নিতে পারে এবং এগুলির যে কোনও একটি আউটপুটের জন্য ব্যবহার করতে পারে তবে এটি সামঞ্জস্যপূর্ণ হওয়া উচিত।

বিধি এবং বিধিনিষেধসমূহ:

  • আপনি কোনও প্রোগ্রাম বা ফাংশন লিখতে পারেন STDIN(অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন যুক্তি এবং ফলাফল আউটপুট STDOUT(বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে input
  • ইনপুট কোনও সুবিধাজনক তালিকা বা স্ট্রিং ফর্ম্যাটে থাকতে পারে। আপনি ধরে নিতে পারেন যে প্রতিটির চেয়ে কম এবং তালিকায় অন্তত একটি উপাদান রয়েছে।ai231
  • প্রতিটি সংক্ষিপ্ত সংখ্যা উপস্থিত থাকবে কেবল এক . সময় একটি স্বাভাবিক সংখ্যা উপস্থিত থাকবে অনেক হিসাবে , প্রয়োজনীয় হিসাবে (আপনি অনুমান হতে পারে যে এই সংখ্যা পরিবর্তন করা হবে)।
  • আপনি নাও হতে পারে হিসাবে একটি নম্বর লিখুন '123456'বরং123,456
  • মানক বিধি প্রযোজ্য।

পরীক্ষার কেস:

Input: ['1.5M', '77.6k', '123,456,789']         Output: ['1,500,000', '77,600', '123.4M']
Input: ['3,000,000,000', '581k', '2b']          Output: ['3B', '581,000', '2,000,000,000']
Input: ['0.1k']                                 Output: ['100']
Input: ['888', '33']                            Output: ['0.888k', '0.033k']

ব্যাখ্যা:

  • সংক্ষিপ্ত আউটপুটে দশমিক পয়েন্টের পরে <1000 সংখ্যার জন্য সঠিক ফলাফল পেতে আপনার যতগুলি সংখ্যা থাকা উচিত। (যেমন: 2-> হয়ে যাবে 0.002k) - এর অর্থ সর্বাধিক 3 দশমিক ; সংখ্যাগুলির জন্য> 1000 আপনার সর্বোচ্চ 1 দশমিক থাকতে পারে
  • সংক্ষিপ্তসার নিম্ন বা উচ্চতর উভয় ক্ষেত্রে হতে পারে
  • আমি মন্তব্যে প্রস্তাবিত বিল্ট-ইনস সীমাবদ্ধতা সরিয়েছি

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতেছে!


1
স্পষ্টতার জন্য অনুরোধগুলি: সংক্ষিপ্ত আউটপুটে দশমিক পয়েন্টের পরে কতগুলি অঙ্ক? সংক্ষেপে <1000? বড় হাতের বা ছোট হাতের বা উভয় ইনপুট এবং আউটপুট?
edc65

1
করা উচিত নয় '123,456,789' -> '123.4M'? এছাড়াও, এটি কত দশমিক ব্যবহার করবে তা স্পষ্ট করে না। অবশ্যই 1000 এর নীচের যে কোনও কিছুতে যাই হোক সংক্ষেপে বর্ণিত হওয়া উচিত নয়।
কেদে

1
@ বেনাম 2 তৃতীয় নিয়ম পড়ুন।
গ্রেজডানু অ্যালেক্স।

4
"আপনাকে কোনও বিল্ট-ইন মডিউল / ফাংশন ব্যবহার করার অনুমতি নেই" কোনও বিল্ট-ইন ফাংশন?
অ্যালেক্স হাওয়ানস্কি

1
আপনার "কিলো" ব্যবহারটি এসআই উপসর্গগুলির পরামর্শ দেয় এবং সেগুলি হবে ["k", "M", "G"]। "যখন একটি সাধারণ সংখ্যার মধ্যে অনেকগুলি অন্তর্ভুক্ত থাকবে, প্রয়োজন হিসাবে " কী বোঝায়, আমার দেশে এটি কোনও ব্যবহার করা ভুল হবে be
অ্যাঙ্গস

উত্তর:


2

পিএইচপি, 234 224 213 201 205 বাইট

for(;$x=$argv[++$n];){$y=str_replace(",","",$x)/1e3;for($i=0;$y>999;$i++)$y=($y|0)/1e3;echo(A<$c=substr($x,strlen($x)-1))?number_format($x*[k=>1e3,m=>1e6,b=>1e9][$c]):($i?($y*10|0)/10:$y).kmb[$i]," ";}

সন্নিবেশকারী নাম দ্বারা 6 বাইট সংরক্ষণ করা হয়েছে, এর দ্বারা অনুপ্রাণিত 4 বাইট।


  • কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়, ফলাফল অনুসরণ করে একটি পৃথক বিভাজক দিয়ে স্থান-বিচ্ছিন্ন করে
  • লোয়ার কেসের সংক্ষিপ্তসার আশা করে
  • সাথে চালানো -r

-2 বাইট যদি বিভাজক হিসেবে আন্ডারস্কোর ঠিক আছে: প্রতিস্থাপন " "সঙ্গে _
-1 বাইট যদি সঠিক রাউন্ডইং ঠিক আছে: প্রতিস্থাপন ($y*10|0)/10সঙ্গে round($y,1)
পিএইচপি 7.1 জন্য -17 বাইট: প্রতিস্থাপন substr($x,strlen($x)-1)সঙ্গে $x[-1]


শুধুমাত্র একটি যুক্তি প্রসারিত করার জন্য 80 (63) বাইট:

<?=number_format(($x=$argv[1])*[K=>1e3,M=>1e6,B=>1e9][substr($x,strlen($x)-1)]);

, ফাইল সংরক্ষণ তারপর চালানো (অথবা প্রতিস্থাপন <?=সঙ্গে echo+ Space এবং রান -r


আপনার দ্বিতীয় উদাহরণটি সংকলন করে না।
অ্যালেক্স হাওয়ানস্কি

1
আপনার ভারসাম্যহীন ভারসাম্য রয়েছে।
অ্যালেক্স হাওয়ানস্কি

1
-4 বাইট: for($j=1;$x=$argv[$j++];) - পরিবর্তেforeach($argv as$i=>$x)if($i)
insertusernamehere

1
-2 বাইট: kmb[$i] - পরিবর্তে "kmb"[$i]
সন্নিবেশকারী নামটি এখানে

1
@ insertusernamehere নেতিবাচক স্ট্রিং সূচকগুলি পিএইচপি 7.1 এ আসছে; এবং এটি´সা আরসি (এখনও)। অন্যান্য বাইট জন্য ধন্যবাদ!
তিতাস

2

জাভাস্ক্রিপ্ট, 545 524 522 518 514 508 504 498 494 214 বাইট

180 বাইট সংরক্ষণের জন্য @ETH প্রডাকশনগুলিকে ধন্যবাদ!

d=F=>F.map(f=>1/f.slice(-1)?f=(f=f.replace(/,/g,""))[9]?(f/1e8|0)/10+"B":f[6]?(f/1e5|0)/10+"M":f/1e3+"k":R(R(f.slice(0,-1)+"e"+' kMB'.indexOf(f.substr(-1))*3-0+"").match(/.{1,3}/g)+""),R=x=>[...x].reverse().join``)

ফাংশনটি কল করতে:

d(["1.5M","1,500,000"]) //["1,500,500","1.5M"]

আউটপুট হিসাবে alert, যেখানে প্রতিটি ইনপুটটির alertআলাদা উপাদান থাকে

পঠনযোগ্য সংস্করণ:

d = F => F.map(f => 1 / f.slice(-1) ? f = (f = f.replace(/,/g, ""))[9] ? (f / 1e8 | 0) / 10 + "B" : f[6] ? (f / 1e5 | 0) / 10 + "M" : f / 1e3 + "k" : R(R(f.slice(0, -1) + "e" + ' kMB'.indexOf(f.substr(-1)) * 3 - 0 + "").match(/.{1,3}/g) + ""), R = x => [...x].reverse().join ``)

সম্পাদনার সংক্ষিপ্তসার: একটি তীর ফাংশনে রূপান্তরিত ফাংশন

  • আধা-কলোন সরানো ';'
  • অপসারিত var
  • একটি তীর ফাংশনে রূপান্তরিত
  • অ্যারের পৃথক উপাদানগুলির মাধ্যমে পুনরাবৃত্তি করতে মানচিত্র ব্যবহৃত
  • |0মেঝে পরিবর্তে ব্যবহৃত
  • পরীক্ষার জন্য ব্যবহৃত regex
  • যদি-অন্য বিবৃতিগুলির পরিবর্তে টার্নারি অপারেটর ব্যবহার করা হয়
  • জন্য একটি পৃথক ফাংশন অন্তর্ভুক্ত .reverse().join''

3
এটি নিচে গল্ফ করার কিছু উপায় রয়েছে। আপনার কাছে যে প্রশ্ন থাকতে পারে তা নির্দ্বিধায় জিজ্ঞাসা করুন :-)
ETH প্রোডাকশনগুলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.