मैं केवल डॉलर के साथ भुगतान करता हूं


14

शीर्षक के रूप में - हालांकि विवेक से - संकेत, मैं केवल डॉलर के साथ भुगतान करता हूं।

चुनौती

एक फ़ंक्शन / प्रोग्राम लिखें जो एक स्ट्रिंग को इनपुट के रूप में लेता है, जो एक प्रतीक द्वारा पूर्ववर्ती मौद्रिक मूल्य है। ex) £4.99। फिर, उसी राशि को USD में बदला।

इनपुट

आपको इनपुट के रूप में एक स्ट्रिंग मिलेगी। यह दो दशमलव स्थानों (जो हो सकता है .00) के साथ एक नंबर के बाद मुद्रा प्रतीक होगा । संख्या को अलग करने वाले दशमलव बिंदु .और / या अल्पविराम होंगे ,। निम्नलिखित मुद्रा प्रतीक इनपुट में आएंगे:

यूरो: €
पाउंड स्टर्लिंग: £
युआन रेनमिनबी: ling

इसके अलावा, 'सेंट' से 'डॉलर' को अलग करने के लिए मुद्रा के आधार पर एक अल्पविराम या दशमलव बिंदु होगा:

यूरो: #। ###, ##
पाउंड स्टर्लिंग: #, ###। ##
युआन रेनमिनबी: #, ###। ##

उत्पादन

आप प्रतीक द्वारा निर्धारित मुद्रा से इनपुट को अमरीकी डालर में बदल देंगे, दो दशमलव स्थानों तक ले जाएंगे। आउटपुट प्रारूप में होगा $#,###.##, और यदि आवश्यक हो तो आउटपुट के बाईं ओर अधिक संख्या होगी ( EDIT: इसका मतलब है कि आउटपुट में अल्पविरामों की मनमानी संख्या है, जैसे इनपुट में )। हमारे द्वारा उपयोग की जाने वाली मुद्रा विनिमय दर नीचे दी गई है।

आप मान सकते हैं कि इनपुट में एक प्रतीक है जो उपरोक्त में से केवल एक है ( € £ ¥ . ,) - यह हमेशा मान्य होता है।

विनिमय दरें

€1 : $1.10
£1 : $1.37
¥1 : $0.15

उदाहरण

Input:
€1,37
£4.00
¥2,782,122.78

Respective output:
$1.51
$5.48
$417,318.42

अंतिम शब्द

  1. यदि आप उपरोक्त प्रतीकों (€, £,,) में से एक का उपयोग करते हैं, तो आप उन्हें 1 बाइट के रूप में गिन सकते हैं
  2. यह कोड गोल्फ है, इसलिए बाइट्स जीत में सबसे छोटा कोड है!

1
यदि आप सच्चे l10n का उपयोग करना चाहते हैं, तो रॅन्मिन्बी को 10k अंक पर अल्पविराम सीमांकक होना चाहिए, न कि 1k अंक पर। (जैसे, 10,0000.15)
नहीं कि चार्ल्स

24
यह मजेदार है कि यदि आपने कल यह प्रश्न पोस्ट किया है, तो अंग्रेजी पाउंड की विनिमय दर £1 : $1.51xD होगी
केविन क्रूज़सेन

1
ओके @ अदनान, मैं ऐसा करूंगा। किया हुआ।
डैनियल

2
हम्म, क्या यह आउटपुट सही है? 1.37 * 1.10 = 1,507 = 1,51(तो नहीं 1.52) और 4.00 * 1.37 = 5.48(नहीं 5.50) और 2782122.78 * 0.15 = 417318.417 = 417318.42(नहीं 420165.06) ...: एस
केविन क्रूज़सेन

1
@ केविनक्रूजसेन, मुझे बस एहसास हुआ कि, Google का उपयोग करने के लिए, विनिमय दर पहले ही बदल गई थी। ठीक कर दिया।
डैनियल

जवाबों:


1

पायथ - 54 53 48 47 बाइट्स

सशर्त आवेदन के बारे में भूल गए W

.F"${:,.2f}"*v-tXWqhQ\€Q",.")\,@[1.1.15d1.37)Ch

टेस्ट सूट


हम्म .. क्या यह मेरे लिए है या बाइट के संदर्भ में यह पायथ के लिए एक बहुत बड़ा जवाब है? o. o यह मेरे जावा उत्तर का लगभग 1 / 4th है ! (आमतौर पर यह 1/50 वां या ऐसा है .. xD)
केविन क्रूज़सेन

1
@KevinCruijssen हाँ, स्ट्रिंग स्वरूपण और कच्ची मुद्रा डेटा लगभग आधा आकार बनाते हैं।
माल्टसेन

5

पायथन 3.6 (पूर्व-रिलीज़), 87

lambda s:f"${int(s.translate({46:'',44:''})[1:])*[110,15,0,137][ord(s[0])%4]/1e4:,.2f}"

परिणाम का मूल्यांकन करने और इसे प्रारूपित करने के लिए f-strings का उपयोग करता है

s.translate({46:'',44:''})इससे डॉट्स और कॉमा को हटा दिया जाता है s, इस प्रकार इसे एक वैध intशाब्दिक बना दिया जाता है , फिर int(...)इसे वास्तविक intऑब्जेक्ट में परिवर्तित कर देता है ।


4

उत्तल, 56 55 54 बाइट्स

(\®\.|,"ö)\e_\'.\++~\"€£¥"#[1.1_.27+.15]=*"%,.2f"\Ø'$\

खैर, यह निश्चित रूप से छोटा किया जा सकता है। इसे ऑनलाइन आज़माएं!

लिन को एक बाइट धन्यवाद दिया!

जब मैं किसी कंप्यूटर तक पहुंच प्राप्त कर सकता हूं, तो स्पष्टीकरण।


कैसे के बारे में [1.1_.27+.15]?
लिन

@ लियोन के लिए प्रतिभा! धन्यवाद!
गेमक्रॉप्स

"आने के लिए स्पष्टीकरण जब मैं एक कंप्यूटर तक पहुंच प्राप्त कर सकता हूं," इसका मतलब है कि भयानक अपठनीयता की उस छोटी सी डली को एक मोबाइल डिवाइस पर लिखा गया था । अच्छा किया, विद्वान सीखा। बहुत बढ़िया।
स्ट्रगलर

1
@strugee हाँ, Ive पूरे दिन बाहर रहे हैं लेकिन मैंने इस उद्देश्य के लिए अपने iPhone के लिए CP-1252 कीबोर्ड बनाया है।
गेमक्रॉप्स

अंतिम 55 बाइट्स निशान क्यों मारा जाता है? इसके अलावा, में लेखन भूल definetely - निश्चित रूप से
user48538

3

पायथन 3.5, 137 131 121 120 117 बाइट्स:

( 6 बाइट बचाने पर एक संकेत के लिए माल्टीसेन को धन्यवाद (137 -> 131)!)

lambda u:'${:,.2f}'.format(float(u[1:].translate([{44:''},{44:46,46:''}]['€'in u]))*{'€':1.1,'£':1.37,'¥':.15}[u[0]])

यह ऑनलाइन की कोशिश करो! (Ideone)


2
आपको अपना .format()${:,.2f}
राउंड

@Maltysen धन्यवाद! मुझे नहीं पता था कि मैं ऐसा कर सकता हूं! :)
आर। कप

46:0NUL वर्णों के साथ डॉट्स बदलता है।
वॉल्टह

@vaultah तो क्या? यह यूरो इनपुट के लिए काम करता है।
आर। काप

@vaultah खैर, यह Ideone और मेरे कंप्यूटर पर पूरी तरह से ठीक काम करता है ।
आर। काप

3

जावास्क्रिप्ट (ईएस 6), 107

सरल और सीधा , शायद अधिक गोल्फ

नोट: FireFox में परीक्षण किया गया। कई ब्राउज़रों (विशेषकर मोबाइल) के पास छोटी गाड़ी का समर्थन हैtoLocaleString

a=>(a.replace(/\D/g,'')/1e4*(a<'¥'?137:a>'€'?110:15)).toLocaleString('en',{style:'currency',currency:'USD'})

परीक्षा

function test()
{
  var i=I.value
  var F=a=>(a.replace(/\D/g,'')/1e4*(a<'¥'?137:a>'€'?110:15)).toLocaleString('en',{style:'currency',currency:'USD'})
  O.textContent=F(i)
}

test()
<input id=I value='¥2,782,122.78' oninput='test()'>
<pre id=O></pre>


मैं केवल फ़ायरफ़ॉक्स पर यह परीक्षण कर सकता था। क्या आप मुझे Firefoex का लिंक दे सकते हैं?
NoOneIsHere

@NoOneIsHere Google "Firefoex", यह आपको सही लिंक देगा भले ही यह गलत वर्तनी हो
edc65

3

जावा 7, 240 227 215 211 207 202 199 196 बाइट्स

(201 - 2 बाइट्स नियम के कारण " यदि आप उपरोक्त प्रतीकों (€, £, ¥) में से किसी एक का उपयोग करते हैं, तो आप उन्हें 1 बाइट के रूप में गिन सकते हैं ") बहुत सारे बाइट्स बचाने
के लिए @Frozn का धन्यवाद ।

String c(String a){int c=a.charAt(0);return java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US).format(new Long(a.substring(1).replaceAll(",|\\.",""))*(c<'¥'?1.37:c>'¥'?1.1:.15)/100);}

Ungolfed और परीक्षण कोड:

इसे यहाँ आज़माएँ।

class Main{
  static String c(String a){
    int c = a.charAt(0);
    return java.text.NumberFormat.getCurrencyInstance(java.util.Locale.US)
        .format(new Long(a.substring(1).replaceAll(",|\\.","")) *
                 (c < '¥'
                   ? 1.37
                   : c > '¥'
                     ? 1.1
                     : .15
                  ) / 100);
  }

  public static void main(String[] a){
    System.out.println(c("€1,37"));
    System.out.println(c("£4.00"));
    System.out.println(c("¥2,782,122.78"));
  }
}

आउटपुट:

$1.51
$5.48
$417,318.42

2
char c=a.charAt(0)(सब सब में आप की जरूरत नहीं है c, मेरा जवाब देखें)
edc65

1
d *टर्नरी से बाहर खींचकर आप कुछ दोहराव को बचाते हैं। लगता है कि इस तरह: d*(c=='€'?1.1:c=='£'?1.37:.15)/100
फ्रोज़न

@ फ़रोज़ धन्यवाद। इसके अलावा, दुर्भाग्य से /100और *.01बाइट्स की एक ही राशि है, और c=='€'?.011:c=='£'?.0137:.0015इसके साथ भी बिल्कुल वैसा ही है /100
केविन क्रूज़सेन

1
हाँ यह बुरा है। लेकिन यहाँ अच्छी खबर है: मुद्रा संकेतों के अद्वितीय यूनिकोड मूल्यों के लिए धन्यवाद क्योंकि आप इसे छोटा कर सकते हैं '£' < '¥' < '€'। इस प्रकार आप लिख सकते हैं c<'¥'?1.37:c>'¥'?1.1:.15कि कौन से 2 अक्षर छोटे हैं।
फ्रोज़न

1
बस देखा कि हमें dअब और ज़रूरत नहीं है क्योंकि यह केवल एक बार उपयोग किया जाता है।
Frozn

1

एफ #, 198 बाइट्स

(s:string)="$"+(System.Double.Parse(if s.[0]='€'then s.[1..].Replace(".","").Replace(',','.')else s.[1..].Replace(",",""))*(if s.[0]='€'then 1.1 else if s.[0]='£'then 1.37 else 0.15)).ToString("N2")

संयुक्त राष्ट्र के golfed:

let IOnlyUseDollars(s : string) = 
    let cur = s.[0]
    let str = if cur = '€' then s.[1..].Replace(".","").Replace(',', '.') else s.[1..].Replace(",","")
    let amt = System.Double.Parse(str)
    let dol = amt * (if cur = '€' then 1.1 else if cur = '£' then 1.37 else 0.15)
    "$" + dol.ToString("N2")

मैं अभी भी F # का पता लगाने की कोशिश कर रहा हूं, इसलिए हजारों विभाजकों से निपटने के लिए बहुत सारे बाइट्स हो रहे हैं।

चुनौती के नियमों के अनुसार, यूनिक, पाउंड और पाउंड प्रतीकों को एक-एक बाइट के रूप में गिना जाता है, इसके बावजूद कि यूनिकोड उन्हें आंतरिक रूप से कैसे संग्रहीत करता है।


1

पायथन 3.5, 101 98

lambda x:'${:,.2f}'.format(int(x[1:].translate({44:'',46:''}))*{'€':110,'£':137,'¥':15}[x[0]]/1e4)

यूरो, पाउंड और येन प्रतीकों को चुनौती नियमों के अनुसार 1 बाइट / चरित्र के रूप में गिना जाता है।

हजारों और दशमलव विभाजकों के बीच अनुवाद या व्याख्या करने के बजाय, ये केवल एक सादे अंक स्ट्रिंग देने के लिए छीन लिए जाते हैं।

अंक स्ट्रिंग (मुद्रा प्रतीक के बाद) एक पूर्णांक में परिवर्तित हो जाती है।

मुद्रा प्रतीक का उपयोग रूपांतरण दरों के शब्दकोश में एक सूचकांक के रूप में किया जाता है; रूपांतरण को रूपांतरण दर से गुणा करके और 10000 से विभाजित करके किया जाता है।

परिणाम एक प्रमुख डॉलर चिह्न, सटीक के दो दशमलव स्थानों और समूहन के लिए अल्पविराम से स्वरूपित होता है।


आप 1 बाइट बचाने के लिए 0 को 1.10 से क्यों नहीं हटाते?
डैनियल

शायद आप छोड़ सकते हैं अनुपात और 1E4 द्वारा विभाजित में
agtoever

0

पायथन 3, 112 बाइट्स नहीं संकलन

def c(x):x=x.translate(None,",.");print“$”+‘{:,.2f}’.format([1.1,1.37,0.15][“€£¥”.index(x[0])]*int(x[1:])/100,2)

यह प्रतिस्पर्धा नहीं है क्योंकि मुझे नहीं लगता कि मुझे अपने प्रश्न का उत्तर देने की अनुमति है।

इसके अलावा, मुझे अभी तक इसे कंप्यूटर पर चलाने का मौका नहीं मिला है, लेकिन मुझे ऐसा लगता है कि इसे काम करना चाहिए। मौका लगते ही मैं इसे कंप्यूटर पर चलाऊंगा।


4
आप अपने प्रश्न का उत्तर देने के लिए पूरी तरह से ठीक हैं। कुछ लोग तो सवाल बनाने से पहले ही जवाब दे देते हैं। आमतौर पर वे अभी भी जेली, पायथ, पाइके और एक जैसे गोल्फ भाषाओं से पिटते हैं, हालांकि। ;)
केविन क्रूज़सेन

0

PHP, 117 बाइट्स

function f($s){return'$'.number_format(ereg_replace('[^0-9]','',substr($s,1))*[E=>.011,P=>.0137,Y=>.0015][$s[0]],2);}

यह एक पदावनत समारोह का उपयोग करता है; कोड को पूरी तरह से आधुनिक बनाने के ereg_replace('[^0-9]'साथ बदलें preg_replace('%[^\d]%'; 1 बाइट जोड़ता है।


0

CJam, 54 बाइट्स

'$q(\",."-de-2\"€£¥"#[1.1 1.37 .15]=*2mOs'./~\3/',*'.@

यहाँ यह कोशिश करो!


अच्छा जवाब, और साइट पर आपका स्वागत है! जैसा कि आप जानते हैं, यहाँ एक ऑनलाइन CJam दुभाषिया है आप अपने उत्तर में पाठक के लिए अपने उत्तर को चलाना / परीक्षण करना आसान बना सकते हैं।
जेम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.