Comme le titre - bien que discrètement - l'indique, je ne paie qu'avec des dollars.
Le défi
Écrivez une fonction / un programme qui prend une chaîne en entrée, qui est une valeur monétaire précédée d'un symbole. ex) £4.99
. Ensuite, retournez le même montant converti en USD.
Contribution
Vous obtiendrez une chaîne en entrée. Il aura le symbole monétaire suivi d'un nombre avec deux décimales (ce qui pourrait être .00
). Il y aura soit des décimales .
et / ou des virgules ,
séparant le nombre. Les symboles monétaires suivants viendront dans les entrées:
Euro: €
Livre sterling: £
Yuan Renminbi: ¥
En outre, il y aura une virgule ou un point décimal en fonction de la devise pour séparer les «dollars» des «cents»:
Euro: #. ###, ##
Livre sterling: #, ###. ##
Yuan Renminbi: #, ###. ##
Production
Vous convertirez l'entrée de la devise déterminée par le symbole en USD, arrondie à deux décimales. La sortie sera au format $#,###.##
, et il y aura bien sûr plus de nombres à gauche de la sortie si besoin est ( EDIT: cela signifie qu'il y a un nombre arbitraire de virgules dans la sortie, tout comme dans l'entrée ). Les taux de change que nous utiliserons sont ci-dessous.
Vous pouvez supposer que l'entrée contient un symbole qui n'est que l'un des éléments ci-dessus ( € £ ¥ . ,
) - qu'il est toujours valide.
Taux d'échange
€1 : $1.10
£1 : $1.37
¥1 : $0.15
Exemples
Input:
€1,37
£4.00
¥2,782,122.78
Respective output:
$1.51
$5.48
$417,318.42
Les derniers mots
- Si vous utilisez l'un des symboles ci-dessus (€, £, ¥), vous pouvez les compter comme 1 octet
- C'est le golf de code, donc le code le plus court en octets gagne!
10,0000.15
)£1 : $1.51
xD1.37 * 1.10 = 1,507 = 1,51
(donc pas1.52
) et4.00 * 1.37 = 5.48
(pas5.50
) et2782122.78 * 0.15 = 417318.417 = 417318.42
(pas420165.06
) ...: SRéponses:
Pyth -
54534847 octetsJ'ai oublié l'application conditionnelle
W
.Suite de tests .
la source
Python 3.6 (pré-version), 87
Utilise des chaînes f pour évaluer le résultat et formater .
s.translate({46:'',44:''})
supprime les points et virguless
, ce qui en fait unint
littéral valide , puis leint(...)
convertit enint
objet réel .la source
Convexe,
565554 octetsEh bien, cela peut certainement être raccourci. Essayez-le en ligne!
Un octet enregistré grâce à Lynn!
Explication à venir lorsque je pourrai accéder à un ordinateur.
la source
[1.1_.27+.15]
?Python 3.5,
137131121120 120117 octets:(Merci à Maltysen pour une astuce pour économiser 6 octets
(137 -> 131)
!)Essayez-le en ligne! (Ideone)
la source
.format()
faites pour vous si vous le faites${:,.2f}
46:0
remplace les points par des caractères NUL.JavaScript (ES6), 107
Simple et direct
, probablement plus jouable au golfRemarque: testé dans FireFox. De nombreux navigateurs (notamment mobiles) prennent en charge
toLocaleString
TESTER
la source
Java 7,
240227215211207202 202199196 octets(201 - 2 octets en raison de la règle " Si vous utilisez l'un des symboles ci-dessus (€, £, ¥), vous pouvez les compter comme 1 octet ")
Merci à @Frozn d' avoir économisé beaucoup d'octets.
Code non testé et testé:
Essayez-le ici.
Production:
la source
char c=a.charAt(0)
(dans l'ensemble, vous n'avez pas besoinc
du tout, voir ma réponse)d *
sur le ternaire, vous économisez une certaine duplication. On dirait ceci:d*(c=='€'?1.1:c=='£'?1.37:.15)/100
./100
,*.01
c'est la même quantité d'octets, etc=='€'?.011:c=='£'?.0137:.0015
c'est exactement la même chose qu'avec le/100
.'£' < '¥' < '€'
. Ainsi, vous pouvez écrirec<'¥'?1.37:c>'¥'?1.1:.15
qui est plus court de 2 caractères.d
car il n'est utilisé qu'une seule fois.F #, 198 octets
Non-golfé:
J'essaie toujours de comprendre F #, donc traiter les milliers de séparateurs prend beaucoup d'octets.
Selon les règles du défi, les symboles Euro, Yen et Livre comptent pour un octet chacun, malgré la façon dont Unicode les stocke en interne.
la source
Python 3.5,
10198Les symboles Euro, Livre et Yen sont comptés comme 1 octet / caractère chacun, selon les règles du défi.
Au lieu de traduire ou d'interpréter des milliers et des séparateurs décimaux, ceux-ci sont simplement supprimés pour donner une chaîne de chiffres simples.
La chaîne de chiffres (après le symbole monétaire) est convertie en entier.
Le symbole monétaire est utilisé comme indice dans un dictionnaire de taux de conversion; la conversion est effectuée en multipliant par le taux de conversion et en divisant par 10000.
Le résultat est formaté avec un signe dollar de tête, deux décimales de précision et des virgules pour le regroupement.
la source
Python 3, 112 octets PAS EN CONCURRENCE
Ce n'est pas en compétition parce que je ne pense pas que je suis autorisé à répondre à ma propre question.
De plus, je n'ai pas encore eu la chance de faire fonctionner cela sur un ordinateur, mais il me semble que cela devrait fonctionner. Je l'exécuterai sur un ordinateur dès que j'en aurai l'occasion.
la source
PHP, 117 octets
Cela utilise une fonction obsolète; remplacer
ereg_replace('[^0-9]'
parpreg_replace('%[^\d]%'
pour rendre le code entièrement moderne; ajoute 1 octet.la source
CJam, 54 octets
Essayez-le ici!
la source