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

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

Към профила на Петър Иванов

Резултати

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

Код

EXCHANGE_RATE = {usd: 1.7408, eur: 1.9557, gbp: 2.6415, bgn: 1}
def convert_to_bgn(price, currency)
(EXCHANGE_RATE[currency] * price).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.00754 seconds
8 examples, 0 failures

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

Петър обнови решението на 09.10.2015 22:35 (преди около 9 години)

+CURRENCY = {:usd => 1.7408, :eur => 1.9557, :gbp => 2.6515, :bgn => 1}
+
+def get_currency_value(item)
+ CURRENCY[item]
+end
+
+def convert_to_bgn(price, currency)
+ result = get_currency_value(currency) * price
+ result.round(2)
+end
+
+def compare_prices(price_1, currency_1, price_2, currency_2)
+ price_bgn_1 = convert_to_bgn(price_1, currency_1)
+ price_bgn_2 = convert_to_bgn(price_2, currency_2)
+
+ price_bgn_1 <=> price_bgn_2
+end

Като цяло много правилно си се ориентирал с употребата на hash

  • Беше ли нужно get_currency_value?
  • Има малко по-красив синтаксис, когато ключовете са символи ({:foo => 1, :bar => 2} vs {foo: 1, bar: 2})

Можеш да поработиш малко над имената си

  • Като видя price_bgn_1 чета "цена лева едно". Защо не "първа цена в лева"?
  • result за име на променлива не говори много. Всичко е някакъв вид result. Тук можеш или да го именуваш спрямо семантиката в контекста на проблема (цена в лева) или изцяло да го пропуснеш (convert_to_bgn да стане oneliner)
  • Какво всъщност е този hash? ВАЛУТА? Или ОБМЕНЕН КУРС?

Петър обнови решението на 10.10.2015 00:52 (преди около 9 години)

-CURRENCY = {:usd => 1.7408, :eur => 1.9557, :gbp => 2.6515, :bgn => 1}
+EXCHANGE_RATE = {usd: 1.7408, eur: 1.9557, gbp: 2.6515, bgn: 1}
-def get_currency_value(item)
- CURRENCY[item]
-end
-
def convert_to_bgn(price, currency)
- result = get_currency_value(currency) * price
- result.round(2)
+ (EXCHANGE_RATE[currency] * price).round(2)
end
def compare_prices(price_1, currency_1, price_2, currency_2)
- price_bgn_1 = convert_to_bgn(price_1, currency_1)
- price_bgn_2 = convert_to_bgn(price_2, currency_2)
+ first_price_bgn = convert_to_bgn(price_1, currency_1)
+ second_price_bgn = convert_to_bgn(price_2, currency_2)
- price_bgn_1 <=> price_bgn_2
+ first_price_bgn <=> second_price_bgn
end

Почти перфектно :)

  • Смени 1/2 с first/second и на другите места. Ще бъде по-консистентно, а и числата са малко по-криптични
  • Един дребен трик, който подобрява естетиката на кода е да подравняваш срещанията на едни и същи конструкции на съседни редове. Добави един space, така че двете =-та в compare_prices да са едно под друго, и виж дали ще ти хареса повече

Петър обнови решението на 10.10.2015 10:33 (преди около 9 години)

EXCHANGE_RATE = {usd: 1.7408, eur: 1.9557, gbp: 2.6515, bgn: 1}
def convert_to_bgn(price, currency)
(EXCHANGE_RATE[currency] * price).round(2)
end
-def compare_prices(price_1, currency_1, price_2, currency_2)
- first_price_bgn = convert_to_bgn(price_1, currency_1)
- second_price_bgn = convert_to_bgn(price_2, currency_2)
+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

Петър обнови решението на 11.10.2015 21:56 (преди около 9 години)

-EXCHANGE_RATE = {usd: 1.7408, eur: 1.9557, gbp: 2.6515, bgn: 1}
+EXCHANGE_RATE = {usd: 1.7408, eur: 1.9557, gbp: 2.6415, bgn: 1}
def convert_to_bgn(price, currency)
(EXCHANGE_RATE[currency] * price).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