Решение на Първа задача от Камен Канев

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

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

Резултати

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

Код

def fibonacci_formula(index_of_term, first_term)
return first_term if index_of_term == 1
return 1 if index_of_term == 2
fibonacci_formula(index_of_term - 1, first_term) +
fibonacci_formula(index_of_term - 2, first_term)
end
def series(name, index_of_term)
return fibonacci_formula(index_of_term, 1) if name == 'fibonacci'
return fibonacci_formula(index_of_term, 2) if name == 'lucas'
fibonacci_formula(index_of_term, 1) + fibonacci_formula(index_of_term, 2)
end

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

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

Finished in 0.02309 seconds
12 examples, 0 failures

История (6 версии и 3 коментара)

Камен обнови решението на 11.10.2014 13:01 (преди около 10 години)

+def series(name , number)
+ def fibonacci_lucas(number , type)
+ return 1 + type if number == 1
+ return 1 if number == 2
+ fibonacci_lucas(number-1 , type) + fibonacci_lucas(number-2 , type)
+ end
+ return fibonacci_lucas( number , 0) if name == 'fibonacci'
+ return fibonacci_lucas(number , 1) if name == 'lucas'
+ fibonacci_lucas(number , 0) + fibonacci_lucas(number , 1) if name == 'summed'
+end

Камен обнови решението на 11.10.2014 13:02 (преди около 10 години)

def series(name , number)
def fibonacci_lucas(number , type)
return 1 + type if number == 1
return 1 if number == 2
fibonacci_lucas(number-1 , type) + fibonacci_lucas(number-2 , type)
end
- return fibonacci_lucas( number , 0) if name == 'fibonacci'
- return fibonacci_lucas(number , 1) if name == 'lucas'
+ fibonacci_lucas( number , 0) if name == 'fibonacci'
+ fibonacci_lucas(number , 1) if name == 'lucas'
fibonacci_lucas(number , 0) + fibonacci_lucas(number , 1) if name == 'summed'
end

Камен обнови решението на 11.10.2014 13:09 (преди около 10 години)

def series(name , number)
def fibonacci_lucas(number , type)
return 1 + type if number == 1
return 1 if number == 2
fibonacci_lucas(number-1 , type) + fibonacci_lucas(number-2 , type)
end
- fibonacci_lucas( number , 0) if name == 'fibonacci'
- fibonacci_lucas(number , 1) if name == 'lucas'
+ return fibonacci_lucas( number , 0) if name == 'fibonacci'
+ return fibonacci_lucas(number , 1) if name == 'lucas'
fibonacci_lucas(number , 0) + fibonacci_lucas(number , 1) if name == 'summed'
end

Здравей :)

Не сме го споменавали на лекции (все още), но когато дефинираш метод в друг, всъщност метода не става вътрешен за текущия.

def a
  # код
end

def b
  # код
end

и

def b
  def a
    # код
  end
  # код
end

са почти едно и също. Единствената разлика е, че във втория случай метода a няма да бъде дефиниран, докато не извикаш b. Но щом го направиш, a ще стане "глобален".

Освен това:

  • Това type не ми харесва. Името е тип, но стойността е накакво магическо число. Не става ясно веднага защо е и какво се очаква да съдържа. Можеш просто да подаваш първата стойност, вместо да я събираш с 1.
  • Можеш ли да измислиш по-добро име на параметъра number? Не е много описателно, а и по тази логика може да кръстиш всяка променлива number, string или object.
  • fibonacci_lucas не е хубаво име на метод. Ако можеше да генерира 5 редици щеше ли да го кръстиш fibonacci_lucas_редица3_редица4_редица5? Знам, че измислянето на имена е трудно, но е и също толкова важно. :)
  • Имаш проблеми с интервалите. На запетаите, интервали се слагат само отдясно. Трябва да има и по един интервал около минусите.
  • if name == 'summed' може да се махне, тъй като няма да тестваме с невалидни аргументи, пък и така или иначе това е последният израз (като else).

Камен обнови решението на 13.10.2014 13:48 (преди около 10 години)

-def series(name , number)
- def fibonacci_lucas(number , type)
- return 1 + type if number == 1
- return 1 if number == 2
- fibonacci_lucas(number-1 , type) + fibonacci_lucas(number-2 , type)
- end
- return fibonacci_lucas( number , 0) if name == 'fibonacci'
- return fibonacci_lucas(number , 1) if name == 'lucas'
- fibonacci_lucas(number , 0) + fibonacci_lucas(number , 1) if name == 'summed'
+def fibonacci_formula(number, first_term)
+ return first_term if number == 1
+ return 1 if number == 2
+ fibonacci_formula(number-1, type) + fibonacci_formula(number-2, type)
+end
+def series(name, number)
+ return fibonacci_formula(number, 1) if name == 'fibonacci'
+ return fibonacci_formula(number, 2) if name == 'lucas'
+ fibonacci_formula(number, 1) + fibonacci_formula(number, 2)
end

Камен обнови решението на 13.10.2014 14:19 (преди около 10 години)

-def fibonacci_formula(number, first_term)
- return first_term if number == 1
- return 1 if number == 2
- fibonacci_formula(number-1, type) + fibonacci_formula(number-2, type)
+def fibonacci_formula(index_of_term, first_term)
+ return first_term if index_of_term == 1
+ return 1 if index_of_term == 2
+ fibonacci_formula(index_of_term - 1, first_term) +
+ fibonacci_formula(index_of_term - 2, first_term)
end
-def series(name, number)
- return fibonacci_formula(number, 1) if name == 'fibonacci'
+def series(name, index_of_term)
- return fibonacci_formula(number, 2) if name == 'lucas'
+ return fibonacci_formula(index_of_term, 1) if name == 'fibonacci'
- fibonacci_formula(number, 1) + fibonacci_formula(number, 2)
+ return fibonacci_formula(index_of_term, 2) if name == 'lucas'
-end
+ fibonacci_formula(index_of_term, 1) + fibonacci_formula(index_of_term, 2)
+end
+series('fibonacci', 4)

Камен обнови решението на 13.10.2014 14:22 (преди около 10 години)

def fibonacci_formula(index_of_term, first_term)
return first_term if index_of_term == 1
return 1 if index_of_term == 2
fibonacci_formula(index_of_term - 1, first_term) +
fibonacci_formula(index_of_term - 2, first_term)
end
def series(name, index_of_term)
return fibonacci_formula(index_of_term, 1) if name == 'fibonacci'
return fibonacci_formula(index_of_term, 2) if name == 'lucas'
fibonacci_formula(index_of_term, 1) + fibonacci_formula(index_of_term, 2)
-end
-series('fibonacci', 4)
+end

Остави поне един празен ред между двата метода за четимост. Кодът ти е доста сбит. Принципно е добра идея да се оставя и един празен ред преди редът с финалната върната стойност. Това ще рече празен ред между редове 3 и 4 и между 9 и 10.

Допълнително, не съм сигурен, че името на функцията fibonacci_formula достатъчно ясно казва, че това е generic формула и че не изчислява точно числата на Фибуначи. И какво е това "term"? Нямаш ли предвид елемент, число? Защо "term"?