Решение на Първа задача от Георги Буюклиев

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

Към профила на Георги Буюклиев

Резултати

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

Код

def series(sequence, index)
if sequence == 'fibonacci' then fibonacci(index)
elsif sequence == 'lucas'
lucas(index)
elsif sequence == 'summed'
fibonacci(index) + lucas(index)
end
end
def fibonacci(index)
if index <= 2 then 1
else
fibonacci(index - 1) + fibonacci(index - 2)
end
end
def lucas(index)
case index
when 1 then 2
when 2 then 1
else
lucas(index - 1) + lucas(index - 2)
end
end

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

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

Finished in 0.0219 seconds
12 examples, 0 failures

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

Георги обнови решението на 14.10.2014 14:02 (преди около 10 години)

+def series(string, index)
+ if string == 'fibonacci' then return fibonacci(index)
+ elsif string == 'lucas'
+ return lucas(index)
+ elsif string == 'summed'
+ return summed(index)
+ end
+end
+
+def fibonacci(n)
+ if n <= 2
+ return 1
+ else
+ return fibonacci(n - 1) + fibonacci(n - 2)
+ end
+end
+
+def lucas(n)
+ if n == 1 then return 2
+ elsif n == 2
+ return 1
+ else
+ return lucas(n - 1) + lucas(n - 2)
+ end
+end
+
+def summed(n)
+ if n == 1 then return 3
+ elsif n == 2
+ return 2
+ else
+ return fibonacci(n) + lucas(n)
+ end
+end
  • Всичките return-и са излишни. В руби функциите връщат последния остойностен израз.

  • Можеш да разгледаш case statement-a. Той е полезен когато имаш повече клаузи в if-а и те правят проверка спрямо един и същ елемент.

  • fibonacci, lucas и summed са ти почти еднакви, можеш да помислиш как да измъкнеш повтарящата се логика в отделна функция.

  • Веднъж ползваш n, веднъж ползваш index. Бъди консистентен. index е по-добре от двете.

  • string не е добро име за променлива. Помисли какво е значението на този string и му дай друго име :).

Георги обнови решението на 15.10.2014 13:30 (преди около 10 години)

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