Симеон обнови решението на 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: може да извикаш този блок различен брой пъти) - За проверка дали нещо е нула - има вграден предикат, който може да ползваш :)
Иначе като цяло - добро решение :)