Решение на Първа задача от Марк Андонов

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

Към профила на Марк Андонов

Резултати

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

Код

def convert_to_bgn(price, currency)
new_price = price
if(currency == :usd)
new_price = price * 1.7408
elsif(currency == :eur)
new_price = price * 1.9557
elsif(currency == :gbp)
new_price = price * 2.6415
end
new_price.round(2)
end
def compare_prices(price_1, currency_1, price_2, currency_2)
value_1 = convert_to_bgn(price_1, currency_1)
value_2 = convert_to_bgn(price_2, currency_2)
value_1 <=> value_2
end

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

........

Finished in 0.00631 seconds
8 examples, 0 failures

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

Марк обнови решението на 11.10.2015 20:59 (преди над 8 години)

+def convert_to_bgn(a, b)
+ if(b == :usd)
+ a = a * 1.7408
+ elsif(b == :eur)
+ a = a * 1.9557
+ elsif(b == :gbp)
+ a = a * 2.6415
+ end
+
+ a = a * 1000
+ remainder = a % 10
+ remainder > 5 ? a = a - remainder + 10 : a = a - remainder
+ a / 1000
+end
+
+def compare_prices(a, b, c, d)
+ if(convert_to_bgn(a, b) > convert_to_bgn(c, d))
+ 1
+ elsif(convert_to_bgn(a, b) == convert_to_bgn(c, d))
+ 0
+ else
+ -1
+ end
+
+end
  • Ядрото и стандартната библиотека на Ruby са пълни с utility методи. Закръглянето звучи като да е нещо, което е нужно често. Изглежда почти невъзможно да няма нещо за закръгляне във Float класа
  • Проверките в compare_prices като че ли не бяха нужни. Можеше да използваш обикновено изваждане или магическия оператор ракетка. Така ще избегнеш и викането по два пъти на convert_to_bgn
  • Еднобуквени имена на променливи почти никога не са добра идея (освен за известни математически/физични формули). Опитай се да отговориш на въпроса "Какво всъщност значи тази стойност в контекста на решаваната задача?" и използвай имена, които отразяват отговора. Например тук a може да е цена, b може да е валута
  • Защо беше празният ред на края на compare_prices? :)

Марк обнови решението на 12.10.2015 16:31 (преди над 8 години)

-def convert_to_bgn(a, b)
- if(b == :usd)
- a = a * 1.7408
- elsif(b == :eur)
- a = a * 1.9557
- elsif(b == :gbp)
- a = a * 2.6415
+def convert_to_bgn(price, currency)
+ new_price = price
+
+ if(currency == :usd)
+ new_price = price * 1.7408
+ elsif(currency == :eur)
+ new_price = price * 1.9557
+ elsif(currency == :gbp)
+ new_price = price * 2.6415
end
- a = a * 1000
- remainder = a % 10
- remainder > 5 ? a = a - remainder + 10 : a = a - remainder
- a / 1000
+ new_price.round(2)
end
-def compare_prices(a, b, c, d)
- if(convert_to_bgn(a, b) > convert_to_bgn(c, d))
- 1
- elsif(convert_to_bgn(a, b) == convert_to_bgn(c, d))
- 0
- else
- -1
- end
+def compare_prices(price_1, currency_1, price_2, currency_2)
+ value_1 = convert_to_bgn(price_1, currency_1)
+ value_2 = convert_to_bgn(price_2, currency_2)
+ value_1 <=> value_2
end