সুনাম বিন্যাস করুন


13

আপনি সম্ভবত জানেন যে স্ট্যাক এক্সচেঞ্জের বিভিন্ন খ্যাতি স্তরগুলি প্রশ্ন পৃষ্ঠা / একটি পোস্ট থেকে দেখলে আলাদাভাবে ফর্ম্যাট হয়। পুনরায় ফর্ম্যাটিংয়ের সমস্ত নিয়ম রয়েছে:

  • যদি কোনও ব্যবহারকারীর 1 থেকে 999 (এক থেকে তিন অঙ্ক) রিপ থাকে তবে এটি যেমন রয়েছে তেমনই রয়েছে।
  • যদি কোনও ব্যবহারকারীর 1000 থেকে 9999 রেপ থাকে (চার অঙ্ক), এটি বিভাজক হিসাবে কমাটি গ্রহণ করে: 9,999
  • যদি কোনও ব্যবহারকারীর 10000 থেকে 99999 রেপ থাকে (পাঁচ অঙ্ক), এটি সংক্ষিপ্ত এবং বৃত্তাকার। অর্থাত্, 16741 প্রতিনিধি হিসাবে ফর্ম্যাট করা হয়েছে 16.7k, নিম্ন প্রতিনিধি (পূর্ববর্তী পয়েন্ট) এর জন্য কমা বিপরীতে ডট বিভাজকটি লক্ষ্য করুন।

    1. 16750 ইতিমধ্যে ফলাফল হবে 16.8k(যেহেতু এটি স্থির বলে মনে হচ্ছে )

    2. 16941 এর ফলাফল 16.9k, 16950 পর্যন্ত চূড়ান্ত হয় 17k, পাশাপাশি 17014 হয়, উদাহরণস্বরূপ।

    3. 99941 রাউন্ড টু 99.9k, 99950 রাউন্ডগুলি 100k(এটি এসই-তে রিপ-রাউন্ডিংয়ের সাথে আসলে আমি ঘৃণা করি কারণ 100,000 এমন মাইলফলক, এবং 99950 এর কোথাও নেই)।

  • যদি কোনও ব্যবহারকারীর 100000 থেকে 999999 প্রতিনিধি থাকে তবে এটি এইভাবে গোলাকার হবে:

    1. 100100 রাউন্ড ডাউন ডাউন 100k, 100500 রাউন্ড অবধি 101k। জিনিসটি হ'ল, রাউন্ডিংটি সম্পন্ন হয়েছে তবে দশমিক অংশটি ছিটকে গেছে (চার-অঙ্কের রেপির বিপরীতে)।

    2. 100450 রাউন্ড ডাউন ডাউন 100k, 450 থেকে 500 গোল করার কোনও পদক্ষেপ নেই Nor 100499ও করে না - এটি এখনও রয়েছে 100k

    3. 279843 পর্যন্ত রাউন্ড 280kএবং 399999 রাউন্ডে যেতে 400k

ইনপুট হিসাবে, আপনি কাঁচা খ্যাতি দেওয়া হয়েছে, এবং এটি ফর্ম্যাট হিসাবে আউটপুট।

আপনি বিবেচনা করতে পারেন যে ইনপুটটি কোনও অবৈধ নম্বর / নন-সংখ্যা, বা শীর্ষস্থানীয় শূন্যগুলির সাথে সংখ্যাগুলি পাবে না , অর্থাত্ 0001234

যেহেতু জন স্কিটি শীঘ্রই এক হাজারে পৌঁছেছে বলে মনে হচ্ছে না, আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত হতে হবে আপনার দশ মিলিয়নের বেশি রেপ পরিচালনা করার প্রয়োজন নেই (অর্থাত্ 999500 বা তদুর্ধের কোনও বিশেষ ক্ষেত্রে নেই)।


7
"কারণ জন স্কিটি খুব শীঘ্রই এক হাজারে পৌঁছেছে বলে মনে হচ্ছে না" [উদ্ধৃতি আবশ্যক]
মিলো ব্র্যান্ডেট

@ মিলো ইজি - তিনি ২০১৫ সালে 93k আয় করেছেন He তাঁর ১,৩৩,685৫ বাকি রয়েছে ১,০০,০০০ অবধি, সুতরাং এইভাবে তাকে ১,৫ বছরেরও বেশি সময় লাগবে (প্রায় ২, আমি বলব)। এর সাথে, আপনার এও বিবেচনায় নেওয়া উচিত যে তার বার্ষিক প্রতিনিধি প্রতি বছরের সাথে হ্রাস পাচ্ছে 2011 সাল থেকে 2011 2011: 134.7k, 2012: 131.8k, 2013: 116.8k, 2014: 104.3k, 2015: 94.3k।
নিকেল

একটি দীর্ঘ ব্যাখ্যা, তবে সর্বোপরি, এটি কেবলমাত্র রাউন্ডিংটি
সাধারণতভাবে

@ এডিসি পিটার টেলরের এই উত্তরটি দেখুন ।
নিকেল

2
আমি মনে করি " যদি সংবাদটি 10000 থেকে 994999 (উভয়ই অন্তর্ভুক্ত) এর সীমার মধ্যে থাকে, তবে এটি 1000 দ্বারা বিভক্ত অর্ধ-আপ নিয়মটি ব্যবহার করে 3 টি উল্লেখযোগ্য পরিসংখ্যানকে বৃত্তাকারে পরিণত করা হয় এবং .দশমিক পয়েন্ট সহ প্রদর্শিত হয়" এবং একটি প্রত্যয়যুক্ত সহ k; সতর্কতার সাথে সাপেক্ষ যে তৃতীয় উল্লেখযোগ্য চিত্রটি যদি 0দশমিক বিন্দুর ডানদিকে হয় তবে মানটি কেবল 2 টি গুরুত্বপূর্ণ ব্যক্তির কাছে প্রদর্শিত হয়। "নির্দিষ্ট কাটঅফগুলি তখন পরীক্ষার একক তালিকায় স্থানান্তরিত হতে পারে পোস্টের শেষে কেসগুলি, যা পরীক্ষার কাঠামোয় অনুলিপি করার জন্য আরও সুবিধাজনক।
পিটার টেলর

উত্তর:


4

জাপট, 50 48 বাইট

প্রথম প্রচেষ্টা; আরও ভাল পদ্ধতি থাকতে পারে।

U<A³?U:U<L²?Us i1', :(U<1e5?Ue2n)r /A:Ue3n)r)+'k

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

কিভাবে এটা কাজ করে

          // Implicit: U = input integer, A = 10, L = 100
U<A³?U    // If U is less than A³ (10³ = 1000), return U.
:U<L²?    // Else, if U is less than L² (100² = 10000), return:
Us i1',   //  U.toString, with a comma inserted at position 1.
:(        // Else, return:
U<1e5?    //  If U is less than 1e5:
Ue2n)     //   U * (10 to the power of -2), 
r /A      //   rounded and divided by 10.
:Ue3n)r)  //  Else: U * (10 to the power of -3), rounded.
+'k       //  Either way, add a "k" to the end.
          // Implicit: output last expression

7

জাভাস্ক্রিপ্ট (ES6), 76 68 বাইট

x=>x<1e4?x.toLocaleString():(x<1e5?(x/1e2+.5|0)/10:(x/1e3+.5|0))+"k"

আরেকটি প্রথম প্রচেষ্টা। এই হ্যান্ডিটির জন্য ধার্মিকতার জন্য ধন্যবাদ .toLocaleString(), আমি খুঁজে পেতে সবচেয়ে সংক্ষিপ্ত বিকল্পটি 21 বাইট দীর্ঘ ...

এটি হাজার হাজারকে আলাদা করে দেয় ,বা .আপনি কোন দেশে থাকেন তার উপর নির্ভর করে five আরও পাঁচটি বাইটের জন্য আপনি এটিকে সর্বদা কমা ব্যবহার করতে পারেন:

x=>x<1e4?x.toLocaleString`en`:(x<1e5?(x/1e2+.5|0)/10:(x/1e3+.5|0))+"k"

আপনার স্থানীয় অবস্থান আপনার জন্য ভাল কাজ করে তবে এখানে ইতালিতে আমি 1.234 (কমা পরিবর্তে বিন্দু)
পেয়েছি

@ edc65 এখন এটি এমন একটি সমস্যা যা আমি কখনও ভাবিনি যে আমি একটি কোড গল্ফ নিয়ে প্রবেশ করব। এটা কি এখন কাজ করে?
ETH প্রোডাকশনগুলি

পারফেক্ট। সত্যিই আমি তা করণীয় মনে করিনি। এবং আমি ঠিক 'এন' চেষ্টা করেছি এবং এটি খুব কার্যকর হবে বলে মনে হচ্ছে
21c 01

আমি মনে করি না আপনাকে লোকেলের জন্য সামঞ্জস্য করতে হবে, কারণ এটি পোর্টেবল হওয়ার দরকার নেই।
জিওকাভেল

1
মূলত, যদি এটি আপনার কম্পিউটারে কাজ করে তবে আমি মনে করি এটি যথেষ্ট ভাল।
জিওকাভেল

3

জাভাস্ক্রিপ্ট (ES6), 71

তিনি আমার ইঙ্গিতটি দেখতে না পেয়ে @ETHProductions কে মারছে। সে তা দেখেছিল।

x=>x<1e3?x:x<1e4?(x+='')[0]+','+x.slice(1):(x/1e3).toFixed(x<99950)+'k'

পরীক্ষা

f=x=>x<1e3?x:x<1e4?(x+='')[0]+','+x.slice(1):(x/1e3).toFixed(x<99950)+'k'

function test() { n=+I.value, O.textContent = n + ' -> ' + f(n) }

test()
<input id=I type=number value=19557 oninput=test()>
<pre id=O></pre>

পরীক্ষা


1
সম্ভবত আপনার নিজের "প্রহারকারী ইটিএইচ প্রডাকশনগুলি" লাইনটি আপডেট করা উচিত ...?
কনর ও'ব্রায়ান

@ CᴏɴᴏʀO'Bʀɪᴇɴ সম্পন্ন হয়েছে।
edc65

2

ES6, 68 62 বাইট

x=>x<1e4?`${x}`.split(/(?=...)/)+"":x.toPrecision(3)/1e3+"k"

সম্পাদনা: 6 টি বাইট সংরক্ষণ করা যখন আমি বুঝতে পারি যে এতে ["1", "001"]স্ট্রিংফাইস হয় "1,001"

সম্পাদনা করুন: @ এমআরআর 247 এর মন্তব্য ঠিক করতে 2 বাইট সংরক্ষিত!


16950এর 16.9kপরিবর্তে দেয়17k
Mwr247

@ এমডব্লিউ 247 ধন্যবাদ, ফিক্সটি আমাকে আরও দুটি বাইট সংরক্ষণ করেছে!
নিল

1

পাইথন 2.7, 58 বাইট

lambda x:['%.3g'%((x+.5)/1e3)+'k','{:,}'.format(x)][x<1e4]

মামলা (x+.5)মোকাবেলা করতে আমাকে ব্যবহার করতে হয়েছিল 16950->17k..

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