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

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

Към профила на Константин Тодоров

Резултати

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

Код

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

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

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

Finished in 0.02094 seconds
12 examples, 0 failures

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

Константин обнови решението на 12.10.2014 22:28 (преди над 9 години)

+def series(name, number)
+ unless name == 'summed'
+ name == 'fibonacci' ? get_fibonacci(number) : get_lucas(number)
+ else
+ get_lucas(number) + get_fibonacci(number)
+ end
+end
+
+def get_fibonacci(number)
+ case number
+ when 1..2 then 1
+ when 3..4 then number-1
+ else get_fibonacci(number - 1) + get_fibonacci(number - 2)
+ end
+end
+
+def get_lucas(number)
+ case number
+ when 1..2 then if (number - 1 == 0) then 2 else 1 end
+ when 3..4 then number
+ else get_lucas(number - 1) + get_lucas(number - 2)
+ end
+end

Константин обнови решението на 14.10.2014 00:01 (преди над 9 години)

def series(name, number)
unless name == 'summed'
name == 'fibonacci' ? get_fibonacci(number) : get_lucas(number)
else
get_lucas(number) + get_fibonacci(number)
end
end
def get_fibonacci(number)
- case number
- when 1..2 then 1
- when 3..4 then number-1
- else get_fibonacci(number - 1) + get_fibonacci(number - 2)
+ if number < 3 then
+ 1
+ else
+ get_fibonacci(number - 1) + get_fibonacci(number - 2)
end
end
def get_lucas(number)
- case number
- when 1..2 then if (number - 1 == 0) then 2 else 1 end
- when 3..4 then number
- else get_lucas(number - 1) + get_lucas(number - 2)
+ unless number < 3
+ get_lucas(number - 1) + get_lucas(number - 2)
+ else
+ 3 - number
end
end

Здрасти :)

  • В series според мен много по-четимо би било да се ползва case, защото така доста трябва да променяш логиката, ако например се добави още 1 редица.
  • Имаш неконсистентност в двата ти метода get_fibonacchi и get_lucas: В първия ползваш if, а на втория unless и обръщаш логиката.
  • Може да направиш нещата по кратки, ако ползваш x if y - прочети за нея.
  • Не знам до колко е подходящо да ползваш get_lucas вместо само lucas, но избора на имена е доста сложно нещо :) За всеки случай мини през style-guide-а.

Ако изключим горните неща - добро решение :)

Константин обнови решението на 14.10.2014 22:15 (преди над 9 години)

def series(name, number)
- unless name == 'summed'
- name == 'fibonacci' ? get_fibonacci(number) : get_lucas(number)
- else
- get_lucas(number) + get_fibonacci(number)
+ case name
+ when 'summed' then get_lucas(number) + get_fibonacci(number)
+ when 'fibonacci' then get_fibonacci(number)
+ when 'lucas' then get_lucas(number)
end
end
def get_fibonacci(number)
- if number < 3 then
- 1
- else
- get_fibonacci(number - 1) + get_fibonacci(number - 2)
- end
+ return 1 if number < 3
+ get_fibonacci(number - 1) + get_fibonacci(number - 2)
end
def get_lucas(number)
- unless number < 3
- get_lucas(number - 1) + get_lucas(number - 2)
- else
- 3 - number
- end
+ return 3 - number if number < 3
+ get_lucas(number - 1) + get_lucas(number - 2)
end