Решение на Първа задача от Калин Христов

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

Към профила на Калин Христов

Резултати

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

Код

def series(sequence_type, number)
fibonacci = 2.upto(number).inject([1, 1]) { |(a, b), _| [b, a + b] }[0]
lucas = 2.upto(number).inject([2, 1]) { |(a, b), _| [b, a + b] }[0]
return fibonacci if sequence_type == 'fibonacci'
return lucas if sequence_type == 'lucas'
return fibonacci + lucas if sequence_type == 'summed'
end

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

............

Finished in 0.01317 seconds
12 examples, 0 failures

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

Калин обнови решението на 12.10.2014 11:29 (преди около 10 години)

+def series(string, number)
+ fibonacci = (0..number).inject([1,0]) {|(a,b), _| [b, a+b]}[0]
+ lucas = (2..number).inject([2,1]) {|(a,b), _| [b, a+b]}[0]
+ return answer = fibonacci if string == 'fibonacci'
+ return answer = lucas if string == 'lucas'
+ return answer = fibonacci + lucas if string == 'summed'
+end

Калин обнови решението на 12.10.2014 17:52 (преди около 10 години)

def series(string, number)
fibonacci = (0..number).inject([1,0]) {|(a,b), _| [b, a+b]}[0]
lucas = (2..number).inject([2,1]) {|(a,b), _| [b, a+b]}[0]
- return answer = fibonacci if string == 'fibonacci'
- return answer = lucas if string == 'lucas'
- return answer = fibonacci + lucas if string == 'summed'
+ return fibonacci if string == 'fibonacci'
+ return lucas if string == 'lucas'
+ return fibonacci + lucas if string == 'summed'
end
  • Имаш известно количество whitespaces проблеми. Погледни style guide-a, за да ги адресираш.
  • Ще стане по-четимо ако изнесеш fibonacci и lucas в отделни методи и използваш case (switch-ът в Ruby) или обикновен if - elsif - else вместо return x if y на всеки ред.
  • Няма смисъл да присвояваш връщаните стойности на answer, просто ги връщай.
  • string е доста generic име. Всеки string може да се казва string. Опитай се да изразиш семантиката от гледна точка на решавания проблем чрез името. Какво значи точно този string за теб, точно тук.
  • Предпочитай reduce пред inject. Когато ги употребяваш се смята, че искаш да вземеш дадения Enumerable и да го компресираш до едно нещо. Съответно ако не се интересуваш от съдържанието на Range-овете и/или искаш да итерираш елементите им само за странични ефекти би следвало да се насочиш към each.
  • Разгледай документацията на Enumerable, убеден съм, че ще намериш по-красива алтернатива за вземане на първия елемент от [0].
  • (x..y) и (x...y) обикновено вървят ръка за ръка с === или when. Тук би трябвало да избереш x.upto(y).
  • В Ruby се смята за прилежно да подравняваш някои подобни конструкции, които се срещат на съседни редове. Сред тях са =, then и стойностите на hash-овете.
  • Разширил си леко дефиниционното множество на нашия fibonacci.

Калин обнови решението на 14.10.2014 10:12 (преди около 10 години)

-def series(string, number)
- fibonacci = (0..number).inject([1,0]) {|(a,b), _| [b, a+b]}[0]
- lucas = (2..number).inject([2,1]) {|(a,b), _| [b, a+b]}[0]
- return fibonacci if string == 'fibonacci'
- return lucas if string == 'lucas'
- return fibonacci + lucas if string == 'summed'
+def series(sequence_type, number)
+ fibonacci = 2.upto(number).inject([1, 1]) { |(a, b), _| [b, a + b] }[0]
+ lucas = 2.upto(number).inject([2, 1]) { |(a, b), _| [b, a + b] }[0]
+ return fibonacci if sequence_type == 'fibonacci'
+ return lucas if sequence_type == 'lucas'
+ return fibonacci + lucas if sequence_type == 'summed'
end