Станислав обнови решението на 11.10.2014 00:41 (преди около 10 години)
+def series(string, number)
+ if string == 'fibonacci' then result = fibonacci_flow(number) end
+ if result == nil && string == 'lucas' then result = lucas_flow(number) end
+ if result == nil && string == 'summed' then result = summed(number) end
+ result
+end
+def fibonacci_flow(number)
+ array = Array.new
+ (0...number+1).each do |i|
+ if i==0 || i==1 then array[i]=i else array[i]=array[i-1]+array[i-2] end
+ end
+ array[number]
+end
+def lucas_flow(number)
+ numbers = { 2 => 1, 1 => 2 }
+ (3...number+1).each do |i|
+ numbers[i] = numbers[i-1] + numbers[i-2]
+ end
+ numbers[number]
+end
+def summed(number)
+ fibonacci_flow(number) + lucas_flow(number)
+end
- Имаш известно количество проблеми с конвенциите. Моля прочети style guide-a, за да ги адресираш. Някои от тях включват липса на whitespaces, използване на едноредов
if
(можеш да го замениш според ситуацията с тернарен оператор -?:
, обърнат -x if y
, многоредов, или сcase
), конструирането на масив, предпочитание на||
/&&
предor
/and
. - Опитай се да подобриш избора си на имена. Те трябва да са (в този ред по важност) смислени, близо до домейна на решавания проблем, консистентни и кратки. Например
string
,array
иresult
са много generic. Всекиstring
можеше да се казва string, всекиarray
можеше да се казва array и резултатът от каквото и да е можеше да се казва result. Въпросът е каква е семантиката на точно този string от гледна точка на дадената задача? Еднобуквени имена на променливи са ok в много малка част от случаите. Защо сложи_flow
в края наfibonacci_flow
иlucas_flow
? Не носи никаква допълнителна информация и е объркващо. Още повече трябваше да кръстиш и summedsummed_flow
, за да го запазиш подобен на останалите. - Леко изненадващо е, че fibonacci и lucas са почти едни и същи, а имплементацията ти варира драстично. Опитай се да ги унифицираш.
-
(x...y)
всъщност е същото като(x..y - 1)
. По принцип(x..y)
и(x...y)
вървят заедно с===
илиwhen
, за другите случаи се предпочитаx.upto(y)
. - Имаше ли смисъл да проверяваш дали
result
еnil
? - Слагай един празен ред между изчисленията и последното връщане на стойност за по-добра четимост.
Ако срещнеш проблеми с която и да е от горните точки не се притеснявай да оставиш коментар.