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

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

Към профила на Симеон Мартев

Резултати

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

Код

def series(function, index)
send(function, index)
end
def fibonacci(index)
get_value(1, 1, index)
end
def lucas(index)
get_value(2, 1, index)
end
def summed(index)
fibonacci(index) + lucas(index)
end
def get_value(first, second, index)
return 0 if index == 0
return 2 if first == 2 and index == 1
(index.abs - 2).times { first, second = second, second + first }
second
end

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

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

Finished in 0.01335 seconds
12 examples, 0 failures

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

Симеон обнови решението на 12.10.2014 23:59 (преди около 10 години)

+def series(function, index)
+ send(function, index)
+end
+
+def fibonacci(index)
+ get_value(1, 1, index)
+end
+
+def lucas(index)
+ get_value(2, 1, index)
+end
+
+def summed(index)
+ fibonacci(index) + lucas(index)
+end
+
+def get_value(first, second, index)
+ return 0 if index == 0
+ return 2 if first == 2 and index == 1
+ (index.abs - 2).times { first, second = second, second + first }
+ second
+end

Привет :)

  • Интересно решение с използването на send. За него ще говорим по-късно в курса.
  • За името на аргументите в series: function не мисля, че е най-подходящото име в този контекст. За index е спорно. В get_value - first и second може да са малко по-специфични.
  • Също така името на метода get_value - много generic е. Може да помислиш за по-добро име в този случай, което описва точно проблема, който решаваш с този метод.
  • В метода get_value няма смисъл да правиш abs на входните данни, защото в случая ще са валидни. Също така не ми харесва това - 2 и там проблема може да го решиш по друг начин. (Hint: може да извикаш този блок различен брой пъти)
  • За проверка дали нещо е нула - има вграден предикат, който може да ползваш :)

Иначе като цяло - добро решение :)