Решение на Първа задача от Здравко Георгиев

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

Към профила на Здравко Георгиев

Резултати

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

Код

def fibonacci(number)
return 1 if number == 1
return 1 if number == 2
fibonacci(number - 1) + fibonacci(number - 2) if number > 2
end
def lucas(number)
return 2 if number == 1
return 1 if number == 2
lucas(number - 1) + lucas(number - 2) if number > 2
end
def series(option, range)
return fibonacci(range) if option == 'fibonacci'
return lucas(range) if option == 'lucas'
return fibonacci(range) + lucas(range) if option == 'summed'
end

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

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

Finished in 0.02843 seconds
12 examples, 0 failures

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

Здравко обнови решението на 11.10.2014 22:31 (преди около 10 години)

+def fibonacci(number)
+ return 1 if number == 1
+ return 1 if number == 2
+ fibonacci(number - 1) + fibonacci(number - 2) if number > 2
+end
+
+def lucas(number)
+ return 2 if number == 1
+ return 1 if number == 2
+ lucas(number - 1) + lucas(number - 2) if number > 2
+end
+
+def series(option, range)
+ return fibonacci(range) if option == 'fibonacci'
+ return lucas(range) if option == 'lucas'
+ return fibonacci(range) + lucas(range) if option == 'summed'
+end
  • option не е много добро име. Опитай се да дадеш нещо по-близо до семантиката на съдържаната стойност.
  • range е леко подлъгващо име. Когато някой го прочете си мисли едно от две неща - класът Range/негови инстанции (нещата, които се получават с (x..y), (x...y) или x.upto(y)) или отрязък от числовата ос. Тук не искаме редицата в някакъв отрязък, а в точно определена точка.
  • Предполагам си сложил return-а на последния ред в series за естетическа консистентност. Недей. Имаш няколко опции - използвай case (switch-ът в Ruby) или if - elsif - else. Може да настояваш на return x if y, ако имаш някакви изключения и след тях идва логиката за 'главния случай', но тогава ги отдели от нея с празен ред и не слагай return накрая.
  • Приложи горната точка също за fibonacci и lucas. Проверката if number > 2 е излишна, като цяло не се грижи за невалидни входни данни.
  • Можеше да слееш двете проверки във fibonacci като сложиш един or.

Като цяло е хубаво решение.