चलो उन नंबरों को संक्षिप्त करें! अब रिवर्स?


11

परिचय:

ट्विटर और Instagram और अन्य लोगों की तरह, मैं नंबर की तरह प्रदर्शित करने के लिए करना चाहता था 1.2Kऔर 3.8 Mबजाय 1,222या 3,823,456

लेकिन वह सब नहीं है! जैसा कि हम सभी जानते हैं, कुछ ऐसे मनुष्य भी हो सकते हैं जो निस्संदेह इन संक्षिप्तीकरणों को पसंद नहीं करेंगे और उन्हें उलटने का प्रयास करेंगे। तो, 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(या निकटतम वैकल्पिक), फ़ंक्शन रिटर्न मान या फ़ंक्शन (आउट) पैरामीटर के माध्यम से आउटपुट कर सकते हैं।
  • इनपुट किसी भी सुविधाजनक सूची या स्ट्रिंग प्रारूप में हो सकता है। आप मान सकते हैं कि प्रत्येक से कम हैं और सूची में कम से कम एक तत्व है।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"]। क्या करता है "जबकि एक सामान्य संख्या में आवश्यक के रूप में कई होंगे, " मेरे देश में, यह किसी भी उपयोग करने के लिए एक गलती होगी।
एंग्स

जवाबों:


2

PHP, 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)
PHP 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और साथ चलाएं -r


आपका दूसरा उदाहरण संकलन नहीं है।
एलेक्स हॉवान्स्की

1
आपके पास असंतुलित परिंदे हैं।
बजे एलेक्स हॉवानस्की

1
-4 बाइट्स: for($j=1;$x=$argv[$j++];) - के बजायforeach($argv as$i=>$x)if($i)
इनसर्सेनमेमेयर

1
-2 बाइट्स: kmb[$i] - के बजाय "kmb"[$i]
निवसुर्नमेर्ह

1
@insertusernamehere निगेटिव स्ट्रिंग इंडेक्स PHP 7.1 में आ रहे हैं; और वह आरसी (अभी तक) है। अन्य बाइट्स के लिए धन्यवाद!
टाइटस

2

जावास्क्रिप्ट, 545 524 522 518 514 508 504 498 494 214 बाइट्स

180 बाइट बचाने के लिए @ETHproductions को धन्यवाद!

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फर्श के बजाय इस्तेमाल किया
  • परीक्षण के लिए रेगेक्स का इस्तेमाल किया
  • इफ-स्टेटमेंट के बजाय टर्नरी ऑपरेटर का इस्तेमाल किया
  • के लिए एक अलग कार्य शामिल है .reverse().join''

3
इसे नीचे गोल्फ करने के कुछ तरीके यहां दिए गए हैं। किसी भी प्रश्न को पूछने के लिए स्वतंत्र महसूस करें :-)
ETHproductions 20
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.