Първа задача

Предадени решения

Краен срок:
12.10.2015 17:30
Точки:
6

Срокът за предаване на решения е отминал

Преобразуване на валути

Веселка решава да си купи нов лаптоп, защото старият ѝ се развалил. Тя вече си е избрала модел, но все още не е решила от къде да си го поръча. За да вземе най-доброто решение, тя трябва да сравни цените в различни онлайн магазини - включително и в чуждестранни такива.

Вашата задача е да напишете две функции, които да помогнат на Веселка да избере откъде да си купи лаптоп.

Преобразуване на цена към левове

Първата функция се нарича convert_to_bgn. Тя трябва да получава като аргументи цена и валута. Както името подсказва, резултатът от функцията трябва да е цената в левове.

Например:

convert_to_bgn(1000, :usd) # => 1740.8
convert_to_bgn(32, :usd) # => 55.71

Резултатът от функцията трябва да е закръглен до втория знак след запетаята.

Сравнение на цени в различни валути

Втората функция се казва compare_prices и има за цел да сравнява две цени, взимайки под внимание валутите им. Аргументите, които приема, са:

  • Първа цена
  • Валута на първата цена
  • Втора цена
  • Валута на втората цена

Резултатът от функцията трябва да е едно от следните:

  • Отрицателно число, ако първата цена е по-малка
  • Нула, ако цените са равни
  • Положително число, ако втората цена е по-малка

Пример:

compare_prices(100, :usd, 100, :bgn) # => число, по-голямо от нула

Валути

Валутите, с които трябва да работят функциите, са bgn, eur, usd и gbp. Функциите трябва да приемат имената на валутите като символи (не низове). Тъй като ще тестваме решенията ви автоматично, фиксираме курсовете на валутите на следните:

  • 1 USD = 1.7408 BGN
  • 1 EUR = 1.9557 BGN
  • 1 GBP = 2.6415 BGN

Ако използвате различни от посочените курсове е възможно да имате по-малко точки заради различни резултати.

Стилови конвенции

Много държим да спазвате стиловите конвенции. Все пак, понеже това ви е първа задача, няма да отнемаме точки за стил.

Примерни тестове

Написали сме примерни тестове, които може да намерите в хранилището с домашните. Как да си ги пуснете може да видите в ръководството. Когато проверяваме предадените решения, ще включим и допълнителни тестове.

Преди да предадете решение се уверете, че тестовете ви се изпълняват без грешки. Това ще ви гарантира, че не сте сбъркали нещо тривиално. Например да използвате низове вместо символи за валутите.

Забележка: Няма да ви бъдат подавани грешни данни. Няма нужда да правите допълнителни проверки за некоректни аргументи или да връщате специални стойности в случай на грешка.

Ограничения

Тази задача има следните ограничения:

  • Най-много 80 символа на ред
  • Най-много 10 реда на метод
  • Най-много 2 нива на влагане

Ако искате да проверите дали задачата ви спазва ограниченията, следвайте инструкциите в описанието на хранилището за домашните.

Няма да приемаме решения, които не спазват ограниченията. Изпълнявайте rubocop редовно, докато пишете кода. Ако смятате, че rubocop греши по някакъв начин, пишете ни на fmi@ruby.bg, заедно с прикачен код или линк към такъв като private gist. Ако пуснете кода си публично (например във форумите), ще смятаме това за преписване.