Решение на Първа задача от Веселин Стоянов

Обратно към всички решения

Към профила на Веселин Стоянов

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 8 успешни тест(а)
  • 0 неуспешни тест(а)

Код

CURRENCIES = {bgn: 1, usd: 1.7408, eur: 1.9557, gbp: 2.6415}
def convert_to_bgn(price, currency)
(price * CURRENCIES[currency]).round(2)
end
def compare_prices(first_price, first_currency, second_price, second_currency)
first_price_bgn = convert_to_bgn(first_price, first_currency)
second_price_bgn = convert_to_bgn(second_price, second_currency)
first_price_bgn <=> second_price_bgn
end

Лог от изпълнението

........

Finished in 0.00671 seconds
8 examples, 0 failures

История (3 версии и 3 коментара)

Веселин обнови решението на 11.10.2015 12:39 (преди около 9 години)

+def convert_to_bgn(price, currency)
+ currencies = { :bgn => 1, :usd => 1.7408, :eur => 1.9557, :gbp => 2.6415 }
+ (price * currencies[currency]).round(2)
+end
+
+def compare_prices(first_price, first_currency, second_price, second_currency)
+ # Repeating is bad, but global vars are not allowed.
+ currencies = { :bgn => 1, :usd => 1.7408, :eur => 1.9557, :gbp => 2.6415 }
+
+ first_price_bgn = (first_price * currencies[first_currency]).round(2)
+ second_price_bgn = (second_price * currencies[second_currency]).round(2)
+
+ # Was originally done on 1 line, but limits...
+ first_price_bgn <=> second_price_bgn
+end

Здравей :)

Искам да отбележа, че константите не са глобални променливи и можеш да ги използваш :) Също, няма проблем да сравняваш закръглените стойности в compare_prices. Не пишем банков софтуер и няма да има тестове за сравнение, в което да има значение закръгляването.

С това знание можеш ли да подобриш кода? :)

Също, използвай по-краткият синтаксис за хешове с ключове символи - {bgn: 1, usd: 1.7408, ...}. Забележи само къде има празни места :)

Веселин обнови решението на 11.10.2015 19:28 (преди около 9 години)

+CURRENCIES = {bgn: 1, usd: 1.7408, eur: 1.9557, gbp: 2.6415}
+
def convert_to_bgn(price, currency)
- currencies = { :bgn => 1, :usd => 1.7408, :eur => 1.9557, :gbp => 2.6415 }
- (price * currencies[currency]).round(2)
+ (price * CURRENCIES[currency]).round(2)
end
def compare_prices(first_price, first_currency, second_price, second_currency)
- # Repeating is bad, but global vars are not allowed.
- currencies = { :bgn => 1, :usd => 1.7408, :eur => 1.9557, :gbp => 2.6415 }
+ first_price_bgn = (first_price * CURRENCIES[first_currency]).round(2)
+ second_price_bgn = (second_price * CURRENCIES[second_currency]).round(2)
- first_price_bgn = (first_price * currencies[first_currency]).round(2)
- second_price_bgn = (second_price * currencies[second_currency]).round(2)
-
# Was originally done on 1 line, but limits...
first_price_bgn <=> second_price_bgn
-end
+end

Здравей! Благодаря много за полезната информация.

В compare_prices() сравнявам закръглените стойности, тъй като видях, че в темата http://fmi.ruby.bg/topics/73?page=1#reply_145 е дискутирано и Димитър Димитров ни е посъветвал да го направим по този начин.

Да, и аз това казвам :) Щом сравняваш закръглените стойности защо дублираш кода на convert_to_bgn? :)

И махни този коментар за лимита - кода не го интересува особено, пък и аз твърдя, че с променливи е по-добре, дори и да го нямаше ограничението :)

Веселин обнови решението на 11.10.2015 22:21 (преди около 9 години)

CURRENCIES = {bgn: 1, usd: 1.7408, eur: 1.9557, gbp: 2.6415}
def convert_to_bgn(price, currency)
(price * CURRENCIES[currency]).round(2)
end
def compare_prices(first_price, first_currency, second_price, second_currency)
- first_price_bgn = (first_price * CURRENCIES[first_currency]).round(2)
- second_price_bgn = (second_price * CURRENCIES[second_currency]).round(2)
-
- # Was originally done on 1 line, but limits...
+ first_price_bgn = convert_to_bgn(first_price, first_currency)
+ second_price_bgn = convert_to_bgn(second_price, second_currency)
first_price_bgn <=> second_price_bgn
end