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

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

Към профила на Емилиан Станков

Резултати

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

Код

def series(sequence, index)
case sequence
when 'fibonacci' then fibonacci(index)
when 'lucas' then lucas(index)
else fibonacci(index) + lucas(index)
end
end
def fibonacci(index)
case index
when 1, 2 then 1
else fibonacci(index - 1) + fibonacci(index - 2)
end
end
def lucas(index)
case index
when 1 then 2
when 2 then 1
else lucas(index - 1) + lucas(index - 2)
end
end

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

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

Finished in 0.02663 seconds
12 examples, 0 failures

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

Емилиан обнови решението на 09.10.2014 00:41 (преди около 10 години)

+def series(type, index)
+ return fibonacci(index) if type == 'fibonacci'
+ return lucas(index) if type == 'lucas'
+ fibonacci(index) + lucas(index) if type == 'summed'
+end
+
+def fibonacci(index)
+ return 1 if index == 1 or index == 2
+ fibonacci(index - 1) + fibonacci(index - 2)
+end
+
+def lucas(index)
+ return 2 if index == 1
+ return 1 if index == 2
+ lucas(index - 1) + lucas(index - 2)
+end
  • x if y синтаксисът в Ruby е много красиво нещо, но лично аз бих се замислил дали не е по-добре да го разпиша с обикновен if - elsif - else, ако го ползвам на всеки ред в метода си и то в комбинация с control flow return-и. Опционално може да разгледаш и case (switch-ът в Ruby).
  • fibonacci и lucas са имена на редове, не типове. Наша грешка, поправихме се.

Като изключим това, решението ти е напълно наред.

Емилиан обнови решението на 11.10.2014 01:19 (преди около 10 години)

-def series(type, index)
- return fibonacci(index) if type == 'fibonacci'
- return lucas(index) if type == 'lucas'
- fibonacci(index) + lucas(index) if type == 'summed'
+def series(sequence, index)
+ case sequence
+ when 'fibonacci' then fibonacci(index)
+ when 'lucas' then lucas(index)
+ else fibonacci(index) + lucas(index)
+ end
end
def fibonacci(index)
- return 1 if index == 1 or index == 2
- fibonacci(index - 1) + fibonacci(index - 2)
+ case index
+ when 1, 2 then 1
+ else fibonacci(index - 1) + fibonacci(index - 2)
+ end
end
def lucas(index)
- return 2 if index == 1
- return 1 if index == 2
- lucas(index - 1) + lucas(index - 2)
+ case index
+ when 1 then 2
+ when 2 then 1
+ else lucas(index - 1) + lucas(index - 2)
+ end
end