আমি শুধুমাত্র ডলার দিয়ে দিতে পারি


14

শিরোনাম হিসাবে - যদিও বিচ্ছিন্নভাবে - ইঙ্গিতগুলি, আমি কেবল ডলার দিয়ে অর্থ প্রদান করি।

চ্যালেঞ্জ

কোনও ফাংশন / প্রোগ্রাম লিখুন যা স্ট্রিংটিকে ইনপুট হিসাবে গ্রহণ করে, যা প্রতীক অনুসারে একটি আর্থিক মূল্য। ex) £4.99। তারপরে, একই পরিমাণ মার্কিন ডলারে রূপান্তরিত করুন।

ইনপুট

আপনি ইনপুট হিসাবে একটি স্ট্রিং পাবেন। এটিতে মুদ্রার চিহ্ন থাকবে যার পরে দুটি দশমিক স্থান (যা হতে পারে .00) সহ একটি সংখ্যা থাকবে । হয় দশমিক পয়েন্ট .এবং / অথবা কমাগুলি ,সংখ্যা পৃথক করে। নিম্নলিখিত মুদ্রার চিহ্নগুলি ইনপুটগুলিতে আসবে:

ইউরো: ound
পাউন্ড স্টার্লিং: £
ইউয়ান রেনমিনবি: ¥

এছাড়াও, 'সেন্ট' থেকে 'ডলার' আলাদা করার জন্য মুদ্রার উপর নির্ভর করে একটি কমা বা দশমিক পয়েন্ট থাকবে:

ইউরো: #। ###, ##
পাউন্ড স্টার্লিং: #, ###। ##
ইউয়ান রেনমিনবি: #, ###। ##

আউটপুট

আপনি প্রতীক দ্বারা নির্ধারিত মুদ্রা থেকে ইনপুটটিকে দুটি দশমিক স্থানে গোল করে মার্কিন ডলারে রূপান্তর করবেন। আউটপুটটি ফর্ম্যাটে $#,###.##থাকবে এবং প্রয়োজনে আউটপুটটির বামে অবশ্যই আরও সংখ্যক সংখ্যা থাকবে ( 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.51এক্সডি হত
কেভিন ক্রুইজসেন

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
@ কেভিন ক্রুজসেন, আমি ঠিক বুঝতে পেরেছি, গুগলকে রূপান্তর করতে ব্যবহার করার সময়, এক্সচেঞ্জের হারটি ইতিমধ্যে পরিবর্তিত হয়েছিল। ঠিক কর.
ড্যানিয়েল

উত্তর:


1

পাইথ - 54 53 48 47 বাইট

শর্তসাপেক্ষ প্রয়োগ সম্পর্কে ভুলে গেছেন W

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

টেস্ট স্যুট


হুম .. এটা কি আমি নাকি বাইটের দিক থেকে পাইথের পক্ষে এটি বেশ বড় উত্তর? o.Ô এটি আমার জাভা উত্তরের প্রায় 1/4 তম ! (সাধারণত এটি
1/50

1
@ কেভিন ক্রুজসেন হ্যাঁ, স্ট্রিং ফর্ম্যাটিং এবং কাঁচা মুদ্রার ডেটা প্রায় অর্ধেক আকারের।
মাল্টেসেন

5

পাইথন 3.6 (প্রাক রিলিজ), 87

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

ফলাফলটি মূল্যায়নের জন্য এবং এটিকে ফর্ম্যাট করতে এফ স্ট্রিং ব্যবহার করে

s.translate({46:'',44:''})এর থেকে বিন্দু এবং কমাগুলি সরিয়ে দেয় s, এটি এটিকে একটি বৈধ intআক্ষরিক করে তোলে , তারপরে int(...)এটিকে প্রকৃত intবস্তুতে রূপান্তর করে ।


4

উত্তল, 56 55 54 বাইট

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

ঠিক আছে, এটি অবশ্যই সংক্ষিপ্ত করা যেতে পারে। এটি অনলাইন চেষ্টা করুন!

লিনকে একটি বাইট সংরক্ষণ করে!

যখন আমি কোনও কম্পিউটারে অ্যাক্সেস পেতে পারি তখন ব্যাখ্যা আসবে।


কীভাবে [1.1_.27+.15]?
লিন

@ লিন প্রতিভা বুদ্ধিমান! ধন্যবাদ!
GamrCorps

"আমি যখন কম্পিউটারে অ্যাক্সেস পেতে পারি তখন ব্যাখ্যা আসবে," বোঝায় যে অসাধারণ অপরিশোধনের ছোট্ট নাগেটটি কোনও মোবাইল ডিভাইসে লেখা হয়েছিল । ভাল কাজ, বিদ্বান পণ্ডিত। সাবাশ.
strugee

1
@ মাসজি হ্যাঁ, আমি সারাদিন বাইরে ছিলাম কিন্তু এই উদ্দেশ্যে আমি আমার আইফোনের জন্য একটি সিপি-1252 কীবোর্ড তৈরি করেছি।
GamrCorps

সর্বশেষ 55 বাইট চিহ্নটি কেন ছড়িয়ে দেওয়া হয়েছে? এছাড়াও, সংজ্ঞায়িতভাবে টাইপ করুন - অবশ্যই
ব্যবহারকারী48538

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}
মাল্টেসেন

@ মালটিসেন ধন্যবাদ! আমি জানতাম না যে আমি তা করতে পারি! :)
আর কাপ,

46:0NUL অক্ষরের সাথে বিন্দুগুলি প্রতিস্থাপন করে।
ভোল্টাহ

@vaultah তাহলে কি? এটি ইউরো ইনপুটগুলির জন্য কাজ করে।
আর কাপ,

@ ভালাতাহ ভাল, আইডিয়ন এবং আমার কম্পিউটারে এটি পুরোপুরি সূক্ষ্মভাবে কাজ করে ।
আর কাপ,

3

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

সহজ এবং সোজা , সম্ভবত আরও গল্ফযোগ্য

দ্রষ্টব্য: ফায়ারফক্সে পরীক্ষিত। অনেক ব্রাউজার (বিশেষত মোবাইল) এর বগি সমর্থন রয়েছে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>


আমি এটি কেবল ফায়ারফক্সে পরীক্ষা করতে পারি। আপনি কি আমাকে ফায়ারফক্সের একটি লিঙ্ক দিতে পারেন?
NoOneIsHere

@ ননওআইনি এখানে গুগল "ফায়ারফক্স", এটি ভুল
লিখিতভাবে

3

জাভা 7, 240 227 215 211 207 202 199 196 বাইট

(201 - 2 বাইট নিয়মের কারণে " যদি আপনি উপরের চিহ্নগুলির মধ্যে একটি (€, £, ¥) ব্যবহার করেন তবে আপনি সেগুলিকে 1 বাইট হিসাবে গণনা করতে পারেন ") প্রচুর বাইট সংরক্ষণ
করার জন্য @ ফ্রোজেনকে ধন্যবাদ

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);}

অবরুদ্ধ এবং পরীক্ষার কোড:

এখানে চেষ্টা করুন।

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একবার ব্যবহার করা হয়েছে বলে আমাদের আর প্রয়োজন নেই don't
হিমশিমতি

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")

আমি এখনও এফ # বের করার চেষ্টা করছি, তাই হাজার বিচ্ছেদকারীদের সাথে ডিল করা অনেকগুলি বাইট নিচ্ছে।

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


1

পাইথন 3.5, 101 98

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

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

হাজার এবং দশমিক বিভাজকের মধ্যে অনুবাদ বা ব্যাখ্যার পরিবর্তে এগুলি কেবল একটি সরল অঙ্কের স্ট্রিং দেওয়ার জন্য ছড়িয়ে দেওয়া হয়।

অঙ্কের স্ট্রিং (মুদ্রা প্রতীকের পরে) একটি পূর্ণসংখ্যায় রূপান্তরিত হয়।

মুদ্রার প্রতীক রূপান্তর হারের অভিধানে সূচক হিসাবে ব্যবহৃত হয়; রূপান্তরটি রূপান্তর হার দ্বারা গুণিত এবং 10000 দ্বারা ভাগ করে সম্পাদিত হয়।

ফলাফলটি একটি শীর্ষস্থানীয় ডলারের সাইন, যথাক্রমে দুটি দশমিক স্থান এবং গ্রুপিংয়ের জন্য কমা দিয়ে ফর্ম্যাট করা হয়েছে।


1 বাইট সংরক্ষণ করতে আপনি কেন 1.10 থেকে 0 টি মুছবেন না?
ড্যানিয়েল

সম্ভবত আপনি এড়িয়ে যেতে পারেন। অনুপাত এবং 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)

এটি প্রতিযোগিতা করছে না কারণ আমি মনে করি না যে আমাকে নিজের প্রশ্নের উত্তর দেওয়ার অনুমতি দেওয়া হচ্ছে।

এছাড়াও, আমি এখনও এটি কম্পিউটারে চালানোর কোনও সুযোগ পাইনি, তবে মনে হয় এটির কাজ করা উচিত। আমি সুযোগ পাওয়ার সাথে সাথে এটি একটি কম্পিউটারে চালাব will


4
আপনার নিজের প্রশ্নের উত্তর দেওয়ার জন্য আপনি পুরোপুরি ভাল। কিছু লোক এমনকি প্রশ্নটি নিজেই তৈরি করার আগে একটি উত্তর নিয়ে আসে। যদিও তারা এখনও জেলি, পাইথ, পাইকে এবং একই মত গল্ফ ভাষা দ্বারা পরাজিত হয়। ;)
কেভিন ক্রুইজসেন

0

পিএইচপি, 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

সিজেম, 54 বাইট

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

এখানে চেষ্টা করুন!


সুন্দর উত্তর, এবং সাইটে আপনাকে স্বাগতম! যাতে আপনি কি জানেন, সেখানে একটি অনলাইন CJam দোভাষী এখানে আপনি যে আপনার পোস্টে চালানোর জন্য / লিঙ্কটি এটা পাঠকদের জন্য সহজ করতে পারে আপনার উত্তর পরীক্ষা।
জেমস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.