Como o título - embora discretamente - sugere, só pago em dólares.
O desafio
Escreva uma função / programa que aceite uma string como entrada, que é um valor monetário precedido por um símbolo. ex) £4.99
. Em seguida, retorne o mesmo valor convertido para USD.
Entrada
Você receberá uma string como entrada. Ele terá o símbolo da moeda seguido de um número com duas casas decimais (que pode ser .00
). Haverá pontos decimais .
e / ou vírgulas ,
separando o número. Os seguintes símbolos monetários aparecerão nas entradas:
Euro: €
Libra esterlina: £
Yuan Renminbi: ¥
Além disso, haverá vírgula ou ponto decimal, dependendo da moeda para separar os 'dólares' dos 'centavos':
Euro: #. ###, ##
Libra esterlina: #, ###. ##
Yuan Renminbi: #, ###. ##
Resultado
Você converterá a entrada da moeda determinada pelo símbolo para USD, arredondando para duas casas decimais. A saída estará no formato $#,###.##
e, é claro, haverá mais números à esquerda da saída, se necessário ( EDIT: isso significa que há um número arbitrário de vírgulas na saída, assim como na entrada ). A taxa de câmbio que usaremos está abaixo.
Você pode assumir que a entrada contém um símbolo que é apenas um dos itens acima ( € £ ¥ . ,
) - que é sempre válido.
Taxas de câmbio
€1 : $1.10
£1 : $1.37
¥1 : $0.15
Exemplos
Input:
€1,37
£4.00
¥2,782,122.78
Respective output:
$1.51
$5.48
$417,318.42
Palavras finais
- Se você usar um dos símbolos acima (€, £, ¥), poderá contá-los como 1 byte
- Este é o código golf, pelo que o código mais curto em bytes vence!
10,0000.15
)£1 : $1.51
xD1.37 * 1.10 = 1,507 = 1,51
(então não1.52
) e4.00 * 1.37 = 5.48
(não5.50
) e2782122.78 * 0.15 = 417318.417 = 417318.42
(não420165.06
) ...: SRespostas:
Pitão -
54534847 bytesEsqueceu a aplicação condicional
W
.Conjunto de Teste .
fonte
Python 3.6 (pré-lançamento), 87
Usa strings f para avaliar o resultado e formatá-lo .
s.translate({46:'',44:''})
remove pontos e vírgulass
, tornando-o umint
literal válido e , em seguida,int(...)
converte-o noint
objeto real .fonte
Convexo,
565554 bytesBem, isso definitivamente pode ser reduzido. Experimente online!
Guardou um byte graças a Lynn!
Explicação para vir quando eu puder acessar um computador.
fonte
[1.1_.27+.15]
?Python 3.5,
137131121120117 bytes:(Obrigado a Maltysen por uma dica sobre como salvar 6 bytes
(137 -> 131)
!)Experimente Online! (Ideona)
fonte
.format()
faz isso por você, se você fizer${:,.2f}
46:0
substitui pontos por caracteres NUL.JavaScript (ES6), 107
Simples e direto
, provavelmente mais jogávelNota: testado no FireFox. Muitos navegadores (especialmente móveis) têm suporte de buggy para
toLocaleString
TESTE
fonte
Java 7,
240227215211207202199196 bytes(201 - 2 bytes devido à regra " Se você usar um dos símbolos acima (€, £, ¥), poderá contá-los como 1 byte ").
Agradecemos ao @Frozn por salvar muitos bytes.
Ungolfed & código de teste:
Experimente aqui.
Resultado:
fonte
char c=a.charAt(0)
(todos em tudo o que você não precisac
de todo, ver minha resposta)d *
ternário, você economiza alguma duplicação. Parece com isso:d*(c=='€'?1.1:c=='£'?1.37:.15)/100
./100
e*.01
é a mesma quantidade de bytes, ec=='€'?.011:c=='£'?.0137:.0015
também os mesmos como com a/100
.'£' < '¥' < '€'
. Assim, você pode escreverc<'¥'?1.37:c>'¥'?1.1:.15
quais são 2 caracteres mais curtos.d
mais, pois é usado apenas uma vez.F #, 198 bytes
Sem golfe:
Ainda estou tentando descobrir o F #, portanto, lidar com os separadores de milhares está ocupando muitos bytes.
De acordo com as regras do desafio, os símbolos Euro, Iene e Libra contam como um byte cada, apesar de como o Unicode os armazena internamente.
fonte
Python 3.5,
10198Os símbolos Euro, Libra e Iene são contados como 1 byte / caractere cada, de acordo com as regras do desafio.
Em vez de traduzir entre ou interpretar milhares e separadores decimais, eles são removidos para fornecer uma sequência de dígitos simples.
A sequência de dígitos (após o símbolo da moeda) é convertida em um número inteiro.
O símbolo da moeda é usado como um índice em um dicionário de taxas de conversão; a conversão é realizada multiplicando pela taxa de conversão e dividindo por 10000.
O resultado é formatado com um sinal de cifrão à esquerda, duas casas decimais de precisão e vírgulas para agrupamento.
fonte
Python 3, 112 bytes NÃO CONCORDA
Isso não está competindo porque não acho que posso responder minha própria pergunta.
Além disso, ainda não tive a chance de executar isso em um computador, mas parece-me que deve funcionar. Vou executá-lo em um computador assim que tiver uma chance.
fonte
PHP, 117 bytes
Isso faz uso de uma função obsoleta; substitua
ereg_replace('[^0-9]'
porpreg_replace('%[^\d]%'
para tornar o código totalmente moderno; adiciona 1 byte.fonte
CJam, 54 bytes
Experimente aqui!
fonte