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

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

Към профила на Стоян Желязков

Резултати

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

Код

def convert_to_bgn(amount, currency)
rate = {
:usd => 1.7408,
:eur => 1.9557,
:gbp => 2.6415,
:bgn => 1 }
(rate[currency] * amount * 100).round / 100.0
end
def compare_prices(amount_left, currency_left, amount_right, currency_right)
to_bgn_left = convert_to_bgn(amount_left, currency_left)
to_bgn_right = convert_to_bgn(amount_right, currency_right)
to_bgn_left <=> to_bgn_right
end

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

........

Finished in 0.00743 seconds
8 examples, 0 failures

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

Стоян обнови решението на 11.10.2015 14:53 (преди над 8 години)

+def convert_to_bgn(amount, currency)
+ case currency
+ when :usd
+ amount * 1.7408
+ when :eur
+ amount * 1.9557
+ when :gbp
+ amount * 2.6415
+ else
+ raise 'Invalid currency'
+ end
+end
+
+def compare_prices(amount_left, currency_left, amount_right, currency_right)
+ to_bgn_left = convert_to_bgn(amount_left, currency_left)
+ to_bgn_right = convert_to_bgn(amount_right, currency_right)
+ (to_bgn_left - to_bgn_right).round
+end

Решението ти е счупено:

  • convert_to_bgn трябва да закръгля резултата, пс. не забравяй, че и суми в :bgn трябва да се закръглят
  • Запази обменния курс в някаква променлива и не дублирай кода за смяната на валутата.
  • Прегледай за <=> също и за Hash-ове в Ruby, могат да ти свършат работа.

Стоян обнови решението на 11.10.2015 20:32 (преди над 8 години)

def convert_to_bgn(amount, currency)
- case currency
- when :usd
- amount * 1.7408
- when :eur
- amount * 1.9557
- when :gbp
- amount * 2.6415
- else
- raise 'Invalid currency'
- end
+ rate = {
+ :usd => 1.7408,
+ :eur => 1.9557,
+ :gbp => 2.6415,
+ :bgn => 1 }
+ rate[currency] * amount
end
def compare_prices(amount_left, currency_left, amount_right, currency_right)
to_bgn_left = convert_to_bgn(amount_left, currency_left)
to_bgn_right = convert_to_bgn(amount_right, currency_right)
- (to_bgn_left - to_bgn_right).round
+ # За да спазя условието за naming не позлвам съкращения в именуването
+ # Целият метод може да е един ред под 80 символа,
+ # не прекалявате ли с условието
+ to_bgn_left <=> to_bgn_right
end

Стоян обнови решението на 11.10.2015 20:33 (преди над 8 години)

def convert_to_bgn(amount, currency)
rate = {
:usd => 1.7408,
- :eur => 1.9557,
- :gbp => 2.6415,
- :bgn => 1 }
+ :eur => 1.9557,
+ :gbp => 2.6415,
+ :bgn => 1 }
rate[currency] * amount
end
def compare_prices(amount_left, currency_left, amount_right, currency_right)
to_bgn_left = convert_to_bgn(amount_left, currency_left)
to_bgn_right = convert_to_bgn(amount_right, currency_right)
# За да спазя условието за naming не позлвам съкращения в именуването
# Целият метод може да е един ред под 80 символа,
# не прекалявате ли с условието
to_bgn_left <=> to_bgn_right
end

Започва да се оформя :)

  • Не закръгляш резултата в convert_to_bgn, т.е. решението ти е още счупено.
  • Има по-кратък синтаксис за hash-овете {foo: 123, bar: 'zxcv'}
  • Коментарът ти няма нищо общо с кода, махни го. Иначе има начин с други променливи да стане на един ред, но не пречи и да е така както ти си го написал. Даже нашето решение е подобно.

Това са примерни тестове. Те главно помагат за това да не объркате името на функцията или подобни неща. Също дават някакъв шаблон, по който да си напишете допълнителни тестове, които да отговарят на условието (в текущия случай в условието пише, че convert_to_bgn закръгля резултата).

Стоян обнови решението на 12.10.2015 15:58 (преди над 8 години)

def convert_to_bgn(amount, currency)
rate = {
:usd => 1.7408,
:eur => 1.9557,
:gbp => 2.6415,
:bgn => 1 }
- rate[currency] * amount
+ (rate[currency] * amount * 100).round / 100.0
end
def compare_prices(amount_left, currency_left, amount_right, currency_right)
to_bgn_left = convert_to_bgn(amount_left, currency_left)
to_bgn_right = convert_to_bgn(amount_right, currency_right)
- # За да спазя условието за naming не позлвам съкращения в именуването
- # Целият метод може да е един ред под 80 символа,
- # не прекалявате ли с условието
to_bgn_left <=> to_bgn_right
end