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

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

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

Резултати

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

Код

def series(name, number)
case name
when 'fibonacci' then fibonacci(number)
when 'lucas' then lucas(number)
when 'summed' then summed(number)
end
end
def fibonacci(number)
if number < 3
1
else
fibonacci(number - 1) + fibonacci(number - 2)
end
end
def lucas(number)
if number < 3
3 - number
else
lucas(number - 1) + lucas(number - 2)
end
end
def summed(number)
fibonacci(number) + lucas(number)
end

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

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

Finished in 0.02205 seconds
12 examples, 0 failures

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

Светлозар обнови решението на 11.10.2014 18:32 (преди около 10 години)

+def series(string, number)
+
+ if (string == 'fibonacci') then return fibonacci(number)
+
+ elsif (string == 'lucas') then return lucas(number)
+
+ elsif (string == 'summed') then return summed(number)
+
+ end
+
+end
+
+def fibonacci(number)
+
+ if(number < 3)
+
+ return 1
+
+ else
+
+ fibonacci(number - 1) + fibonacci(number - 2)
+
+ end
+
+end
+
+def lucas(number)
+
+ if(number < 3)
+
+ return 3 - number
+
+ else
+
+ lucas(number - 1) + lucas(number - 2)
+
+ end
+
+end
+
+def summed(number)
+
+ fibonacci(number) + lucas(number)
+
+end
  • Не слагай ненужни празни редове в началото, средата и края на методите. По принцип те се използват за логическо разделение (например изчисленията от върнатата стойност).
  • Не ограждай условията на if-oвете в скоби.
  • string e много generic име. Всеки string е възмоно да се казва string. Точно този string в тази ситуация има някакво конкретно значение. Опитай се имената да изразяват семантиката на променливите.
  • Ако ти се наложи да слагаш if - then на един ред е добре да погледнеш case (switch-ът в Ruby).
  • Изглежда си видял какво връщат методите. if конструкциите връщат последния оценен израз на match-налия случай, ако няма такъв - nil. С други думи можеше да пропуснеш всички return-и в кода.
  • Знам, че ти изглежда просто, но 3 - number не е моментално очевидно какво прави. Предпочитай ясни пред хитроумни и кратки решения.

Светлозар обнови решението на 14.10.2014 23:15 (преди около 10 години)

-def series(string, number)
-
- if (string == 'fibonacci') then return fibonacci(number)
-
- elsif (string == 'lucas') then return lucas(number)
-
- elsif (string == 'summed') then return summed(number)
-
+def series(name, number)
+ case name
+ when 'fibonacci' then fibonacci(number)
+ when 'lucas' then lucas(number)
+ when 'summed' then summed(number)
end
-
end
def fibonacci(number)
-
- if(number < 3)
-
- return 1
-
+ if number < 3
+ 1
else
-
fibonacci(number - 1) + fibonacci(number - 2)
-
end
-
end
def lucas(number)
-
- if(number < 3)
-
- return 3 - number
-
+ if number < 3
+ 3 - number
else
-
lucas(number - 1) + lucas(number - 2)
-
end
-
end
def summed(number)
-
fibonacci(number) + lucas(number)
-
end