प्रतिष्ठा को प्रारूपित करें


13

आप शायद जानते हैं कि स्टैक एक्सचेंज पर विभिन्न प्रतिष्ठा स्तर अलग-अलग स्वरूपित होते हैं, जब प्रश्न पृष्ठ / एक पोस्ट से देखा जाता है। सभी प्रतिनिधि प्रारूपण नियम हैं:

  • यदि किसी उपयोगकर्ता के पास 1 से 999 (एक से तीन अंक) प्रतिनिधि है, तो इसे छोड़ दिया जाता है।
  • यदि किसी उपयोगकर्ता के पास 1000 से 9999 प्रतिनिधि (चार अंक) हैं, तो वह विभाजक के रूप में अल्पविराम प्राप्त करता है: 9,999
  • यदि किसी उपयोगकर्ता के पास 10000 से 99999 प्रतिनिधि (पांच अंक) हैं, तो इसे छोटा और गोल किया जाता है। Ie, 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 राउंड का कोई चरण नहीं। न ही 100499 - यह अभी भी है 100k

    3. 279843 राउंड अप 280k, और 399999 राउंड टू 400k

इनपुट के रूप में, आपको कच्ची प्रतिष्ठा दी गई है, और इसे स्वरूपित किया गया है।

आप इस बात पर विचार कर सकते हैं कि इनपुट को किसी भी अमान्य संख्या / गैर-संख्या या अग्रणी शून्य के साथ संख्या प्राप्त नहीं होगी , अर्थात 0001234

क्योंकि जॉन स्कीट जल्द ही 1,000,000 तक नहीं पहुंच पा रहे हैं, इसलिए आपका कोड जितना संभव हो उतना छोटा होना चाहिए क्योंकि आपको प्रतिनिधि को एक मिलियन से अधिक (यानी 999500 और उससे अधिक के लिए कोई विशेष मामले) को संभालने की आवश्यकता नहीं है।


7
"क्योंकि जॉन स्कीट जल्द ही 1,000,000 तक पहुँच नहीं लगता है" [उद्धरण वांछित]
मिलो ब्रांट

@Milo Easy - उन्होंने 2015 के लिए 93k कमाया। उनके पास 1,000,000 तक 163,685 बचे हैं, इसलिए इस तरह उन्हें 1,5 साल (लगभग 2 से अधिक, मैं कहूंगा) ले जाएगा। इसके साथ, आपको यह भी ध्यान रखना चाहिए कि 2011 के बाद से प्रत्येक वर्ष के साथ उसका वार्षिक रेप घट रहा है। 2011: 134.7k, 2012: 131.8k, 2013: 116.8k, 2014: 104.3k, 2015: 94.3k।
निकेल

एक लंबी व्याख्या, लेकिन सभी में, यह सिर्फ तरीका है जिस तरह से गोल किया जाता है
edc65

@Edc पीटर टेलर का यह जवाब देखें ।
निकेल

2
मुझे लगता है कि स्पष्टीकरण को छोटा करके कहा जा सकता है " यदि प्रतिनिधि 10000 से 994999 (दोनों समावेशी) की सीमा में है, तो इसे आधे-ऊपर नियम का उपयोग करके 3 महत्वपूर्ण आंकड़ों के लिए गोल किया गया है, 1000 से विभाजित किया गया है, और .एक दशमलव बिंदु के लिए प्रदर्शित किया गया है और प्रत्यय के साथ 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

जावास्क्रिप्ट (ईएस 6), 76 68 बाइट्स

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

एक और पहला प्रयास। उस आसान के लिए धन्यवाद .toLocaleString(), सबसे छोटा विकल्प जो मुझे मिल सकता है वह है 21 बाइट्स लंबा ...

यह हजारों ,या तो अलग .करता है या आप किस देश में रहते हैं इसके आधार पर। पांच दो बाइट्स के लिए, आप इसे हमेशा कॉमा का उपयोग कर सकते हैं:

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

आपका लोकेल आपके लिए ठीक काम करता है, लेकिन यहाँ इटली में मुझे 1.234 (अल्पविराम के बजाय डॉट) मिलता है
edc65

@ edc65 अब यह एक समस्या है जो मैंने कभी नहीं सोचा था कि मैं एक कोड गोल्फ के साथ दौड़ूंगा। क्या अब यह काम करता है?
ETHproductions

उत्तम। वास्तव में मुझे नहीं लगा कि यह उचित था। और मैंने सिर्फ 'एन' की कोशिश की और यह भी काम करने लगता है
edc65

मुझे नहीं लगता कि आपको लोकेल के लिए समायोजित करने की आवश्यकता है, क्योंकि यह पोर्टेबल होने की आवश्यकता नहीं है।
जियोकॉवेल

1
असल में, अगर यह आपके कंप्यूटर पर काम करता है, तो मुझे लगता है कि यह काफी अच्छा है।
जियोकॉवेल

3

जावास्क्रिप्ट (ईएस 6), 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
शायद आपको अपनी "पिटाई ETHproductions" लाइन को अपडेट करना चाहिए ...?
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ किया।
edc65

2

ईएस 6, 68 62 बाइट्स

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

संपादित करें: जब मैंने महसूस किया कि 6 बाइट्स सहेजे ["1", "001"]गए हैं "1,001"

संपादित करें: @ Mwr247 की टिप्पणी को ठीक करने के लिए 2 बाइट्स सहेजे गए!


16950के 16.9kबजाय देता है17k
Mwr247

@ Mwr247 धन्यवाद, फिक्स मुझे दो और बाइट्स बचाता है!
नील

1

पायथन 2.7, 58 बाइट्स

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

मुझे मामले (x+.5)से निपटने के लिए उपयोग करना था 16950->17k

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.