Insure Everyoneという会社は、従業員に外貨で給与を支払っています。しかし、法律の要件により、給与は現地通貨に換算しなければなりません。従業員は世界中にいます。 Insure Everyoneの人事部は、各従業員の給与をそれぞれの現地通貨に換算するプログラムを作るため、優秀なエンジニアの助けを求めています。Insure Everyoneは、外部APIが提供する為替レートを利用しています。
外部の為替レートAPIが与えられたとき、source currency、salary(ソース通貨での金額)、従業員のlocal currencyを受け取り、現地通貨での給与を返す関数を書く必要があります。
外部の為替レートAPIからのレスポンスは次のとおりです。
注記:
ratesは、問題文を短く保つために省略されています
{
"base": "EUR",
"rates": {
"AED": 4.167972,
"AFN": 118.91123,
"ALL": 121.353306,
"AMD": 546.175542,
"ANG": 2.035384,
"AOA": 629.106987,
"ARS": 116.624363,
"AUD": 1.580224,
"AWG": 2.042846,
"AZN": 1.92923,
"BAM": 1.95468,
"BBD": 2.26981,
"BDT": 97.024176,
"BGN": 1.956957,
"BHD": 0.428175,
"BIF": 2257.462616,
"BMD": 1.134504,
"BND": 1.534691,
"BOB": 7.773946,
"BRL": 6.394753,
"BSD": 1.134916,
"BTC": 0.000027,
"BTN": 83.896824,
"BWP": 13.167125,
}
}
USDの為替レートを取得するリクエストの例:
GET http://localhost:8080/rates/USD
{
"base": "USD",
"rates": {
"AED": 3.672477643818380310171368756063197,
"AFN": 104.7748962262571579872079201988508,
"ALL": 106.9266548068103418652047146893925,
"AMD": 481.2454276553169780099231576470961,
"ANG": 1.793414695824643301163693331958788,
"AOA": 554.3178661774696212335484143830275,
"ARS": 102.7598951821316197338845611280433,
"AUD": 1.392364754903645275750470737610812,
"AWG": 1.799989602800547350872880138793802,
"AZN": 1.699880432206294535038121596128717,
"BAM": 1.722304900517304728699178180683942,
"BBD": 1.999971804204874171858658003508614,
"BDT": 85.48980589838411660371074286227852,
"BGN": 1.724311207564226937381544618524109,
"BHD": 0.3772729555625457630971671155965922,
"BIF": 1989.092294529751410010035940827599,
"BMD": 0.9996325735447665520331371082216295
// omitted
}
}
salary <= 10000sourceCurrencyとtargetCurrencyはISO通貨コード(アルファベット)です。テスト入力には無効な通貨コードが含まれることがあります。5桁まで測定されます。次の関数の中にコードを書きます。
# The exchange rate API base URL
configurable string apiUrl = "http://localhost:8080";
# Convert provided salary to local currency.
#
# + salary - Salary in source currency
# + sourceCurrency - Soruce currency
# + localCurrency - Employee's local currency
# + return - Salary in local currency or error
public function convertSalary(decimal salary, string sourceCurrency, string localCurrency) returns decimal|error {
// TODO: Write your code here
return 0;
}
bal runでプロジェクトを実行して手動でテストするか、単体テストを書いてbal testで実行するかのどちらでもかまいません。バックエンドサービスはhttp://localhost:8080で自動的に起動します。外部の為替レートAPIが次の為替レートのレスポンスを返したとします(省略):
{
"base": "USD",
"rates": {
// omitted
"GBP": 0.73584,
// omitted
}
}
このとき、関数は735.84000を返す必要があります。
外部の為替レートAPIが次の為替レートのレスポンスを返したとします(省略):
{
"base": "GBP",
"rates": {
// omitted
"USD": 1.35898,
// omitted
}
}
このとき、関数は1358.9800を返す必要があります。