Como el título, aunque discretamente, sugiere, solo pago con dólares.
El reto
Escriba una función / programa que tome una cadena como entrada, que es un valor monetario precedido por un símbolo. ex) £4.99
. Luego, devuelva la misma cantidad convertida a USD.
Entrada
Obtendrá una cadena como entrada. Tendrá el símbolo de moneda seguido de un número con dos decimales (que podría ser .00
). Habrá puntos decimales .
y / o comas que ,
separan el número. Los siguientes símbolos de moneda vendrán en las entradas:
Euro: €
Libra esterlina: £
Yuan Renminbi: ¥
Además, habrá una coma o un punto decimal dependiendo de la moneda para separar los 'dólares' de los 'centavos':
Euro: #. ###, ##
Libra esterlina: #, ###. ##
Yuan Renminbi: #, ###. ##
Salida
Convertirá la entrada de la moneda determinada por el símbolo a USD, redondeando a dos decimales. La salida estará en el formato $#,###.##
y, por supuesto, habrá más números a la izquierda de la salida si es necesario ( EDITAR: esto significa que hay un número arbitrario de comas en la salida, al igual que en la entrada ). La tasa de cambio de moneda que usaremos se encuentra a continuación.
Puede suponer que la entrada contiene un símbolo que es solo uno de los anteriores ( € £ ¥ . ,
), que siempre es válido.
Los tipos de cambio
€1 : $1.10
£1 : $1.37
¥1 : $0.15
Ejemplos
Input:
€1,37
£4.00
¥2,782,122.78
Respective output:
$1.51
$5.48
$417,318.42
Ultimas palabras
- Si usa uno de los símbolos anteriores (€, £, ¥), puede contarlos como 1 byte
- Este es el código de golf, por lo que gana el código más corto en bytes.
10,0000.15
)£1 : $1.51
xD1.37 * 1.10 = 1,507 = 1,51
(así que no1.52
) y4.00 * 1.37 = 5.48
(no5.50
) y2782122.78 * 0.15 = 417318.417 = 417318.42
(no420165.06
) ...: SRespuestas:
Pyth -
54534847 bytesOlvidé la aplicación condicional
W
.Test Suite .
fuente
Python 3.6 (prelanzamiento), 87
Utiliza cadenas f para evaluar el resultado y formatearlo .
s.translate({46:'',44:''})
elimina puntos y comass
, lo que lo convierte en unint
literal válido y luego loint(...)
convierte en elint
objeto real .fuente
Convexo,
565554 bytesBueno, esto definitivamente se puede acortar. Pruébalo en línea!
¡Ahorré un byte gracias a Lynn!
Explicación que vendrá cuando pueda acceder a una computadora.
fuente
[1.1_.27+.15]
?Python 3.5,
137131121120117 bytes:(¡Gracias a Maltysen por una pista sobre cómo guardar 6 bytes
(137 -> 131)
!)¡Pruébelo en línea! (Ideona)
fuente
.format()
hace por usted si lo hace${:,.2f}
46:0
reemplaza puntos con caracteres NUL.JavaScript (ES6), 107
Simple y directo
, probablemente más golfableNota: probado en Firefox. Muchos navegadores (especialmente móviles) tienen soporte de errores de
toLocaleString
PRUEBA
fuente
Java 7,
240227215211207202199196 bytes(201 - 2 bytes debido a la regla " Si usa uno de los símbolos anteriores (€, £, ¥), puede contarlos como 1 byte ")
Gracias a @Frozn por guardar muchos bytes.
Sin codificar y código de prueba:
Pruébalo aquí.
Salida:
fuente
char c=a.charAt(0)
(en general, no necesitac
nada, vea mi respuesta)d *
ternario, guarda algunas duplicaciones. Se parece a esto:d*(c=='€'?1.1:c=='£'?1.37:.15)/100
./100
y*.01
es la misma cantidad de bytes, yc=='€'?.011:c=='£'?.0137:.0015
también es exactamente lo mismo que con el/100
.'£' < '¥' < '€'
. Por lo tanto, puede escribirc<'¥'?1.37:c>'¥'?1.1:.15
cuál es 2 caracteres más corto.d
más, ya que solo se usa una vez.F #, 198 bytes
Sin golf:
Todavía estoy tratando de descubrir F #, por lo que lidiar con los separadores de miles ocupa muchos bytes.
De acuerdo con las reglas de desafío, los símbolos Euro, Yen y Libra cuentan como un byte cada uno, a pesar de cómo Unicode los almacena internamente.
fuente
Python 3.5,
10198Los símbolos Euro, Libra y Yen se cuentan como 1 byte / carácter cada uno, según las reglas del desafío.
En lugar de traducir o interpretar miles y separadores decimales, estos simplemente se eliminan para dar una cadena de dígitos sin formato.
La cadena de dígitos (después del símbolo de moneda) se convierte en un entero.
El símbolo de moneda se usa como índice en un diccionario de tasas de conversión; la conversión se realiza multiplicando por la tasa de conversión y dividiendo por 10000.
El resultado está formateado con un signo de dólar inicial, dos decimales de precisión y comas para agrupar.
fuente
Python 3, 112 bytes NO COMPETIR
Esto no está compitiendo porque no creo que se me permita responder a mi propia pregunta.
Además, todavía no he tenido la oportunidad de ejecutar esto en una computadora, pero me parece que debería funcionar. Lo ejecutaré en una computadora tan pronto como tenga la oportunidad.
fuente
PHP, 117 bytes
Esto hace uso de una función obsoleta; reemplace
ereg_replace('[^0-9]'
conpreg_replace('%[^\d]%'
para hacer que el código sea completamente moderno; agrega 1 byte.fuente
CJam, 54 bytes
Pruébalo aquí!
fuente