Станислав обнови решението на 11.10.2014 00:41 (преди около 11 години)
+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? - Слагай един празен ред между изчисленията и последното връщане на стойност за по-добра четимост.
Ако срещнеш проблеми с която и да е от горните точки не се притеснявай да оставиш коментар.
