Seperti judul - meskipun secara rahasia - mengisyaratkan, saya hanya membayar dengan dolar.
Tantangan
Tulis fungsi / program yang mengambil string sebagai input, yang merupakan nilai moneter yang didahului oleh simbol. ex) £4.99
. Kemudian, kembalikan jumlah yang sama dikonversi ke USD.
Memasukkan
Anda akan mendapatkan string sebagai input. Ini akan memiliki simbol mata uang diikuti oleh angka dengan dua tempat desimal (yang bisa jadi .00
). Akan ada titik desimal .
dan / atau koma yang ,
memisahkan angka. Simbol mata uang berikut akan muncul pada input:
Euro: €
Pound Sterling: £
Yuan Renminbi: ¥
Juga, akan ada koma atau titik desimal tergantung pada mata uang untuk memisahkan 'dolar' dari 'sen':
Euro: #. ###, ##
Pound Sterling: #, ###. ##
Yuan Renminbi: #, ###. ##
Keluaran
Anda akan mengonversi input dari mata uang yang ditentukan oleh simbol ke USD, membulatkan ke dua tempat desimal. Output akan berada dalam format $#,###.##
, dan tentu saja akan ada lebih banyak angka di sebelah kiri output jika perlu ( EDIT: ini berarti bahwa ada jumlah koma yang berubah-ubah dalam output, sama seperti pada input ). Nilai tukar mata uang yang akan kami gunakan adalah di bawah ini.
Anda dapat mengasumsikan bahwa input berisi simbol yang hanya salah satu di atas ( € £ ¥ . ,
) - yang selalu valid.
Nilai tukar
€1 : $1.10
£1 : $1.37
¥1 : $0.15
Contohnya
Input:
€1,37
£4.00
¥2,782,122.78
Respective output:
$1.51
$5.48
$417,318.42
Kata-kata terakhir
- Jika Anda menggunakan salah satu simbol di atas (€, £, ¥), Anda dapat menghitungnya sebagai 1 byte
- Ini kode golf, jadi kode terpendek dalam byte menang!
10,0000.15
)£1 : $1.51
xD1.37 * 1.10 = 1,507 = 1,51
(tidak1.52
) dan4.00 * 1.37 = 5.48
(tidak5.50
) dan2782122.78 * 0.15 = 417318.417 = 417318.42
(tidak420165.06
) ...: SJawaban:
Pyth -
54534847 byteLupa tentang aplikasi bersyarat
W
.Test Suite .
sumber
Python 3.6 (pra-rilis), 87
Menggunakan f-string untuk mengevaluasi hasil dan memformatnya .
s.translate({46:'',44:''})
menghilangkan titik dan komas
, sehingga menjadikannyaint
literal yang valid , laluint(...)
mengubahnya menjadiint
objek yang sebenarnya .sumber
Cembung,
565554 byteNah, ini pasti bisa dipersingkat. Cobalah online!
Menyimpan satu byte berkat Lynn!
Penjelasan yang akan datang ketika saya bisa mendapatkan akses ke komputer.
sumber
[1.1_.27+.15]
?Python 3.5,
137131121120117 byte:(Terima kasih kepada Maltysen untuk petunjuk menghemat 6 byte
(137 -> 131)
!)Cobalah secara Online! (Ideone)
sumber
.format()
melakukannya untuk Anda jika Anda melakukannya${:,.2f}
46:0
mengganti titik dengan karakter NUL.JavaScript (ES6), 107
Sederhana dan mudah
, mungkin lebih golfCatatan: diuji dalam FireFox. Banyak browser (terutama yang bergerak) memiliki dukungan buggy
toLocaleString
UJI
sumber
Java 7,
240227215211207202199196 byte(201 - 2 byte karena aturan " Jika Anda menggunakan salah satu simbol di atas (€, £, ¥), Anda dapat menghitungnya sebagai 1 byte ")
Terima kasih kepada @Frozn untuk menyimpan banyak byte.
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
char c=a.charAt(0)
(semuanya Anda tidak perluc
sama sekali, lihat jawaban saya)d *
keluar terner, Anda menyimpan duplikasi. Looks seperti ini:d*(c=='€'?1.1:c=='£'?1.37:.15)/100
./100
dan*.01
jumlah byte yang sama, danc=='€'?.011:c=='£'?.0137:.0015
juga sama persis dengan/100
.'£' < '¥' < '€'
. Dengan demikian Anda dapat menulisc<'¥'?1.37:c>'¥'?1.1:.15
yang lebih pendek 2 karakter.d
lagi karena hanya digunakan sekali.F #, 198 byte
Tidak Golf:
Saya masih mencoba mencari tahu F #, jadi berurusan dengan ribuan separator membutuhkan banyak byte.
Menurut aturan tantangan, simbol Euro, Yen, dan Pound dihitung sebagai masing-masing satu byte, terlepas dari bagaimana Unicode menyimpannya secara internal.
sumber
Python 3.5,
10198Simbol Euro, Pound, dan Yen masing-masing dihitung sebagai 1 byte / karakter, sesuai aturan tantangan.
Alih-alih menerjemahkan di antara atau menafsirkan ribuan dan pemisah desimal, ini hanya dilucuti untuk memberikan string digit sederhana.
Digit string (setelah simbol mata uang) dikonversi ke integer.
Simbol mata uang digunakan sebagai indeks ke kamus tingkat konversi; konversi dilakukan dengan mengalikan dengan tingkat konversi dan membaginya dengan 10.000.
Hasilnya diformat dengan tanda dolar terkemuka, dua tempat desimal presisi, dan koma untuk pengelompokan.
sumber
Python 3, 112 byte TIDAK BERSAING
Ini tidak bersaing karena saya pikir saya tidak diperbolehkan menjawab pertanyaan saya sendiri.
Juga, saya belum memiliki kesempatan untuk menjalankan ini di komputer, tetapi sepertinya saya harus bekerja. Saya akan menjalankannya di komputer segera setelah saya punya kesempatan.
sumber
PHP, 117 byte
Ini memanfaatkan fungsi yang sudah usang; ganti
ereg_replace('[^0-9]'
denganpreg_replace('%[^\d]%'
untuk membuat kode sepenuhnya modern; menambahkan 1 byte.sumber
CJam, 54 byte
Coba di sini!
sumber