Решение на Първа задача от Бони Бонев

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

Към профила на Бони Бонев

Резултати

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

Код

def convert_to_bgn(amount, currency)
currencies = { :bgn => 1, :usd => 1.7408, :eur => 1.9557, :gbp => 2.6415 }
(currencies[currency] * amount).round(2)
end
def compare_prices(first_amount, first_currency, second_amount, second_currency)
first_amount_bgn = convert_to_bgn(first_amount, first_currency)
second_amount_bgn = convert_to_bgn(second_amount, second_currency)
first_amount_bgn - second_amount_bgn
end

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

........

Finished in 0.00641 seconds
8 examples, 0 failures

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

Бони обнови решението на 11.10.2015 21:52 (преди над 9 години)

+def round(value)
+ value.round(2)
+end
+
+def convert_to_bgn(amount, currency)
+ case currency
+ when :usd
+ round(1.7408 * amount)
+ when :eur
+ round(1.9557 * amount)
+ when :gbp
+ round(2.6415 * amount)
+ when :bgn
+ round(amount)
+ end
+end
+
+def compare_prices(amount, currency, second_amount, second_currency)
+ result = convert_to_bgn(amount, currency)
+ second_result = convert_to_bgn(second_amount, second_currency)
+ result - second_result
+end

Като цяло добре. Няколко насоки за подобрение:

  • Какво всъщност печелиш от round? Единственото, което ми хрумва е, че не повтаряш числото 2. Ако това беше целта можеше просто да запазиш резултата от case-a в променлива и да закръглиш нея. Ако искаш наистина да си DRY-неш решението можеш да помислиш как може да използваш hash
  • Избягвай result и value като имена на променливи. Всичко е някакъв result или value. Какво всъщност крият тези променливи в контекста на решавания проблем? Използвай това за име. Например second_result всъщност е втората цена в лева
  • Добре е да се стремиш към консистентност на имената. Ако имаш second_amount би следвало да имаш first_amount, не просто amount

Бони обнови решението на 12.10.2015 00:40 (преди над 9 години)

-def round(value)
- value.round(2)
-end
-
def convert_to_bgn(amount, currency)
- case currency
- when :usd
- round(1.7408 * amount)
- when :eur
- round(1.9557 * amount)
- when :gbp
- round(2.6415 * amount)
- when :bgn
- round(amount)
- end
+ currencies = { :bgn => 1, :usd => 1.7408, :eur => 1.9557, :gbp => 2.6415 }
+ (currencies[currency] * amount).round(2)
end
-def compare_prices(amount, currency, second_amount, second_currency)
- result = convert_to_bgn(amount, currency)
- second_result = convert_to_bgn(second_amount, second_currency)
- result - second_result
+def compare_prices(first_amount, first_currency, second_amount, second_currency)
+ first_amount_bgn = convert_to_bgn(first_amount, first_currency)
+ second_amount_bgn = convert_to_bgn(second_amount, second_currency)
+ first_amount_bgn - second_amount_bgn
end