Емилия обнови решението на 10.10.2015 23:33 (преди около 10 години)
+def convert_to_bgn(price, currency)
+ case currency
+ when :usd
+ (new_price = price * 1.7408).round(2)
+ when :eur
+ (new_price = price * 1.9557).round(2)
+ else
+ (new_price = price * 2.6415).round(2)
+ end
+end
+
+def compare_prices(price_one, currency_one, price_two, currency_two)
+ price_in_bgn_one = convert_to_bgn(price_one, currency_one)
+ price_in_bgn_two = convert_to_bgn(price_two, currency_two)
+ if(price_in_bgn_one > price_in_bgn_two)
+ 1 end
+ if(price_in_bgn_one == price_in_bgn_two)
+ 0 end
+ if(price_in_bgn_one < price_in_bgn_two)
+ -1 end
+end
Здравей :)
Имам някои коментари:
- По принцип използвай
elsifиelseвместо повтарящи сеif-ове. Така няма да ти се налага да слагашendнавсякъде. :) - Нямаш нужда от проверката в
compare_prices. Прочети за оператора<=>. :) - Защо ти е
new_price? Присвояваш стойност на променлива, която не използваш никога. - Сигурна ли си, че решението ти ще работи с всички валути?
- В Ruby всичко е израз и връща стойност - дори
case. Тоест можеш да присвоиш резултата отcaseна променлива и после да го използваш. Можеш ли да използваш това знание, за да премахнеш малко дублиране на код? :)
Напомням, че до крайния срок остават цели 23 часа и половина, и можеш да ни изпратиш ново решение :)
