Μια εταιρεία που ονομάζεται 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, είτε γράφοντας unit tests και τρέχοντάς τα με bal test. Η υπηρεσία backend θα ξεκινήσει αυτόματα στο http://localhost:8080
Υποθέτοντας ότι το εξωτερικό ανταλλακτήριο νομισμάτων επέστρεψε την ακόλουθη απάντηση με ισοτιμίες μετατροπής (παραλείπεται):
{
"base": "USD",
"rates": {
// omitted
"GBP": 0.73584,
// omitted
}
}
Η συνάρτηση πρέπει να επιστρέψει 735.84000
Υποθέτοντας ότι το εξωτερικό ανταλλακτήριο νομισμάτων επέστρεψε την ακόλουθη απάντηση με ισοτιμίες μετατροπής (παραλείπεται):
{
"base": "GBP",
"rates": {
// omitted
"USD": 1.35898,
// omitted
}
}
Η συνάρτηση πρέπει να επιστρέψει 1358.9800
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ballerina με 60 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.