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

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

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

Резултати

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

Код

def series(series_name, index)
case series_name
when 'fibonacci' then fibonacci(index)
when 'lucas' then lucas(index)
else summed(index)
end
end
def fibonacci(index)
(index == 1 or index == 2) ? 1 : fibonacci(index - 1) + fibonacci(index - 2)
end
def lucas(index)
case index
when 1 then 2
when 2 then 1
else lucas(index - 1) + lucas(index - 2)
end
end
def summed(index)
fibonacci(index) + lucas(index)
end

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

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

Finished in 0.02353 seconds
12 examples, 0 failures

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

Бетина обнови решението на 11.10.2014 19:49 (преди около 10 години)

+def series (sequence_name,index)
+ if sequence_name=='fibonacci' then result=fibonacci(index)
+ elsif sequence_name=='lucas' then result=lucas(index)
+ else result=summed(index)
+ end
+ return result
+end
+
+def fibonacci(index)
+ if index==1 or index==2 then result=1
+ else result=fibonacci(index-1)+fibonacci(index-2)
+ end
+ return result
+end
+
+def lucas(index)
+ if index==1 then result=2
+ elsif index==2 then result=1
+ else result=lucas(index-1)+lucas(index-2)
+ end
+ return result
+end
+
+def summed(index)
+ result=fibonacci(index)+lucas(index)
+ return result
+end

Бетина обнови решението на 11.10.2014 20:04 (преди около 10 години)

-def series (sequence_name,index)
- if sequence_name=='fibonacci' then result=fibonacci(index)
- elsif sequence_name=='lucas' then result=lucas(index)
+def series (series_name,index)
+ if series_name=='fibonacci' then result=fibonacci(index)
+ elsif series_name=='lucas' then result=lucas(index)
else result=summed(index)
end
return result
end
def fibonacci(index)
if index==1 or index==2 then result=1
else result=fibonacci(index-1)+fibonacci(index-2)
end
return result
end
def lucas(index)
if index==1 then result=2
elsif index==2 then result=1
else result=lucas(index-1)+lucas(index-2)
end
return result
end
def summed(index)
result=fibonacci(index)+lucas(index)
return result
-end
+end

Здравей.

  • Виж как да си форматираш кода правилно тук. Имаш проблеми главно с whitespace-а около операторите =, ==, +, -.

  • В ruby функциите винаги връщат последния остойностен израз и за добър стил е прието да се изпуска return, освен когато не се използва за control flow. Освен това if конструкцията връща стойността на бранча който е изпълнен, т.е тези присвоявания result= са излишни.

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

Бетина обнови решението на 12.10.2014 21:08 (преди около 10 години)

-def series (series_name,index)
- if series_name=='fibonacci' then result=fibonacci(index)
- elsif series_name=='lucas' then result=lucas(index)
- else result=summed(index)
+def series(series_name, index)
+ case series_name
+ when 'fibonacci' then fibonacci(index)
+ when 'lucas' then lucas(index)
+ else summed(index)
end
- return result
end
def fibonacci(index)
- if index==1 or index==2 then result=1
- else result=fibonacci(index-1)+fibonacci(index-2)
- end
- return result
+ (index == 1 or index == 2) ? 1 : fibonacci(index - 1) + fibonacci(index - 2)
end
def lucas(index)
- if index==1 then result=2
- elsif index==2 then result=1
- else result=lucas(index-1)+lucas(index-2)
+ case index
+ when 1 then 2
+ when 2 then 1
+ else lucas(index - 1) + lucas(index - 2)
end
- return result
end
def summed(index)
- result=fibonacci(index)+lucas(index)
- return result
+ fibonacci(index) + lucas(index)
-end
+end