Как подсказывает название - хотя и дискретно - я плачу только долларами.
Соревнование
Напишите функцию / программу, которая принимает строку в качестве входных данных, которая является денежным значением, которому предшествует символ. ex) £4.99
, Затем верните ту же сумму в долларах США.
вход
Вы получите строку в качестве ввода. Он будет иметь символ валюты, за которым следует число с двумя десятичными знаками (что может быть .00
). Там будут либо десятичные точки .
и / или запятые, ,
разделяющие число. Следующие символы валюты появятся на входе:
Евро: €
Фунт стерлингов: £
Юань Ренминби: ¥
Кроме того, будет запятая или десятичная точка в зависимости от валюты, чтобы отделить «доллары» от «центов»:
Евро: #. ###, ##
Фунт стерлингов: #, ###. ##
Юань Юань: #, ###. ##
Выход
Вы конвертируете входные данные из валюты, определяемой символом, в доллары США с округлением до двух десятичных знаков Выходные данные будут иметь формат $#,###.##
, и, конечно, слева от выходных данных будет больше чисел, если это необходимо ( РЕДАКТИРОВАТЬ: это означает, что в выходных данных есть произвольное количество запятых, как во входных данных ). Курс обмена валюты, который мы будем использовать, ниже.
Вы можете предположить, что вход содержит символ, который является только одним из вышеуказанных ( € £ ¥ . ,
) - что он всегда действителен.
Курсы валют
€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 байт
- Это код гольф, поэтому выигрывает самый короткий код в байтах!
10,0000.15
)£1 : $1.51
xD1.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
) ...: SОтветы:
Pyth -
54534847 байтЗабыли про условное приложение
W
.Тестовый пакет .
источник
Python 3.6 (предварительная версия), 87
Использует f-строки, чтобы оценить результат и отформатировать его .
s.translate({46:'',44:''})
удаляет точки и запятыеs
, тем самым делая его действительнымint
литералом, а затемint(...)
преобразует его в реальныйint
объект.источник
Выпуклый,
565554 байтовНу, это определенно можно сократить. Попробуйте онлайн!
Сэкономили байт благодаря Линн!
Объяснение придет, когда я смогу получить доступ к компьютеру.
источник
[1.1_.27+.15]
?Python 3.5,
137131121120117 байт:(Спасибо Maltysen за подсказку о сохранении 6 байтов
(137 -> 131)
!)Попробуйте онлайн! (Ideone)
источник
.format()
делает это за вас, если вы это делаете${:,.2f}
46:0
заменяет точки символами NUL.JavaScript (ES6), 107
Простой и
понятный, возможно, более пригодный для игры в гольфПримечание: проверено в FireFox. Многие браузеры (особенно мобильные) имеют глючную поддержку
toLocaleString
ТЕСТОВОЕ ЗАДАНИЕ
источник
Java 7,
240227215211207202199196 байт(201 - 2 байта из-за правила « Если вы используете один из вышеуказанных символов (€, £, ¥), вы можете считать их как 1 байт »)
Спасибо @Frozn за сохранение большого количества байтов.
Ungolfed & тестовый код:
Попробуй это здесь.
Выход:
источник
char c=a.charAt(0)
(в общем, вам вообще не нужноc
, смотрите мой ответ)d *
тройку, вы сохраняете некоторое дублирование. Выглядит следующим образом :d*(c=='€'?1.1:c=='£'?1.37:.15)/100
./100
и*.01
такое же количество байтов, аc=='€'?.011:c=='£'?.0137:.0015
также точно так же, как с/100
.'£' < '¥' < '€'
. Таким образом, вы можете написатьc<'¥'?1.37:c>'¥'?1.1:.15
что на 2 символа короче.d
, так как он используется только один раз.F #, 198 байт
Un-Golfed:
Я все еще пытаюсь понять F #, поэтому работа с разделителями тысяч занимает много байтов.
Согласно правилам испытаний, символы евро, иены и фунта считаются по одному байту каждый, несмотря на то, что Unicode хранит их внутри.
источник
Python 3.5,
10198Символы евро, фунта и иены учитываются как 1 байт / символ каждый, согласно правилам испытания.
Вместо того, чтобы переводить или интерпретировать тысячи и десятичные разделители, они просто убираются, чтобы получить строку в виде простой цифры.
Цифровая строка (после символа валюты) преобразуется в целое число.
Символ валюты используется как указатель в словарь курсов валют; преобразование выполняется путем умножения на коэффициент преобразования и деления на 10000.
Результат форматируется лидирующим знаком доллара, двумя десятичными разрядами точности и запятыми для группировки.
источник
Python 3, 112 байтов, не конкурирующих
Это не соревнование, потому что я не думаю, что мне позволено отвечать на мой собственный вопрос.
Кроме того, у меня еще не было возможности запустить это на компьютере, но мне кажется, что это должно работать. Я буду запускать его на компьютере, как только у меня будет шанс.
источник
PHP, 117 байт
Это использует устаревшую функцию; заменить
ereg_replace('[^0-9]'
на,preg_replace('%[^\d]%'
чтобы сделать код полностью современным; добавляет 1 байт.источник
CJam, 54 байта
Попробуй это здесь!
источник