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

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

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

Резултати

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

Код

def fibonacci(number)
if [1,2].include?(number)
return 1
else
return fibonacci(number-1) + fibonacci(number-2)
end
end
def lucas(number)
case number
when 1 then return 2
when 2 then return 1
else
return lucas(number-1)+lucas(number-2)
end
end
def series(name, number)
case name
when 'fibonacci' then return fibonacci(number)
when 'lucas' then return lucas(number)
else
return fibonacci(number)+lucas(number)
end
end

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

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

Finished in 0.0415 seconds
12 examples, 0 failures

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

Йончо обнови решението на 15.10.2014 00:16 (преди около 10 години)

+def fib(number)
+ return ((number==1 or number==2)?1: fib(number-1)+fib(number-2))
+end
+
+def lucas(number)
+ return (number==1 ? 2 : (number==2? 1 :
+ lucas(number-1)+lucas(number-2)))
+end
+
+def series(name, number)
+ return (name=='fibonacci'? fib(number): (name=='lucas'?
+ lucas(number) :fib(number)+lucas(number)))
+end
  • Прочети style guide.
  • Слагай спейсове между операторите.
  • Не съкращавай имената на функциите само за да пестиш символи. Ограниченията са сложени с цел да ви накарат да откриете ясни и кратки решения в контекста на Ruby, не са с цел да откривате "хитри" начинини да се побирате в тях.
  • Тернарният оператор е препоръчителен само за кратки изрази и определено не е добра идея да го влагаш. По този начин кода става труден за разбиране.
  • Провери case мисля, че ще ти спести много от тези влагания. Няма нищо лошо и в стандартния if else.

Точно заради стайл гайда, го промених, последният ми метод с if-ове беше 6 реда и не искаше да го пусне. Oк, оправено е, но следващият път в орграниченията не би било лошо да има място и за по-дълги решения.

Йончо обнови решението на 15.10.2014 14:18 (преди около 10 години)

-def fib(number)
- return ((number==1 or number==2)?1: fib(number-1)+fib(number-2))
+def fibonacci(number)
+ case number
+ when 1 then return 1
+ when 2 then return 1
+ else
+ return fibonacci(number-1) + fibonacci(number-2)
+ end
end
def lucas(number)
- return (number==1 ? 2 : (number==2? 1 :
- lucas(number-1)+lucas(number-2)))
+ case number
+ when 1 then return 2
+ when 2 then return 1
+ else
+ return lucas(number-1)+lucas(number-2)
+ end
end
def series(name, number)
- return (name=='fibonacci'? fib(number): (name=='lucas'?
- lucas(number) :fib(number)+lucas(number)))
+ case name
+ when 'fibonacci' then return fibonacci(number)
+ when 'lucas' then return lucas(number)
+ else
+ return fibonacci(number)+lucas(number)
+ end
end

Йончо обнови решението на 15.10.2014 14:26 (преди около 10 години)

def fibonacci(number)
- case number
- when 1 then return 1
- when 2 then return 1
+ if [1,2].include?(number)
+ return 1
else
return fibonacci(number-1) + fibonacci(number-2)
end
end
def lucas(number)
case number
when 1 then return 2
when 2 then return 1
else
return lucas(number-1)+lucas(number-2)
end
end
def series(name, number)
case name
when 'fibonacci' then return fibonacci(number)
when 'lucas' then return lucas(number)
else
return fibonacci(number)+lucas(number)
end
end