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

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

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

Резултати

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

Код

def sequence(first, second, index)
if index <= 2
index == 1 ? first : second
else
sequence(first, second, index - 1) + sequence(first, second, index - 2)
end
end
def series(name_sequence, index)
return sequence(1, 1, index) if name_sequence == 'fibonacci'
return sequence(2, 1, index) if name_sequence == 'lucas'
sequence(1, 1, index) + sequence(2, 1, index) if name_sequence == 'summed'
end

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

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

Finished in 0.02304 seconds
12 examples, 0 failures

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

Светослав обнови решението на 12.10.2014 22:42 (преди около 10 години)

+def fibonacci(index)
+ index < 2 ? index : fibonacci(index-1) + fibonacci(index-2)
+end
+
+def lucas(index)
+ index <= 2 ? (3 - index) : lucas(index - 1) + lucas(index - 2)
+end
+
+def series(string, index)
+ if string == 'fibonacci' or string == 'lucas'
+ string == 'fibonacci' ? fibonacci(index) : lucas(index)
+ elsif string == 'summed'
+ return fibonacci(index) + lucas(index)
+ end
+end

Светослав обнови решението на 12.10.2014 22:43 (преди около 10 години)

def fibonacci(index)
- index < 2 ? index : fibonacci(index-1) + fibonacci(index-2)
+ index < 2 ? index : fibonacci(index - 1) + fibonacci(index - 2)
end
def lucas(index)
index <= 2 ? (3 - index) : lucas(index - 1) + lucas(index - 2)
end
def series(string, index)
if string == 'fibonacci' or string == 'lucas'
string == 'fibonacci' ? fibonacci(index) : lucas(index)
elsif string == 'summed'
return fibonacci(index) + lucas(index)
end
end

Светослав обнови решението на 13.10.2014 13:45 (преди около 10 години)

def fibonacci(index)
- index < 2 ? index : fibonacci(index - 1) + fibonacci(index - 2)
+ index < 2 ? index : fibonacci(index - 1) + fibonacci(index - 2)
end
def lucas(index)
- index <= 2 ? (3 - index) : lucas(index - 1) + lucas(index - 2)
+ index <= 2 ? (3 - index) : lucas(index - 1) + lucas(index - 2)
end
def series(string, index)
- if string == 'fibonacci' or string == 'lucas'
- string == 'fibonacci' ? fibonacci(index) : lucas(index)
- elsif string == 'summed'
- return fibonacci(index) + lucas(index)
- end
+ return fibonacci(index) if string == 'fibonacci'
+ return lucas(index) if string == 'lucas'
+ return fibonacci(index) + lucas(index) if string == 'summed'
end

Здрасти :)

  • В series според мен много по-четимо би било да се ползва case вместо 3 if-a.
  • Също така не мисля, че string е подходящо име за аргумент точно в този контекст. За index е спорно.
  • Използването на тернарен оператор вместо някаква версия на if е подходящо само в много редки случаи и според мен това не е такъв. Много по четимо би било ако ползваш версията на if, която ползваш в series.

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

Светослав обнови решението на 14.10.2014 20:34 (преди около 10 години)

-def fibonacci(index)
- index < 2 ? index : fibonacci(index - 1) + fibonacci(index - 2)
+def sequence(first, second, index)
+ if index <= 2
+ index == 1 ? first : second
+ else
+ sequence(first, second, index - 1) + sequence(first, second, index - 2)
+ end
end
-def lucas(index)
- index <= 2 ? (3 - index) : lucas(index - 1) + lucas(index - 2)
-end
-
-def series(string, index)
- return fibonacci(index) if string == 'fibonacci'
- return lucas(index) if string == 'lucas'
- return fibonacci(index) + lucas(index) if string == 'summed'
+def series(name_sequence, index)
+ return sequence(1, 1, index) if name_sequence == 'fibonacci'
+ return sequence(2, 1, index) if name_sequence == 'lucas'
+ sequence(1, 1, index) + sequence(2, 1, index) if name_sequence == 'summed'
end

Мерси за съветите. Мисля,че успях горе долу да го пооправя. Само за case не съм сигурен, че е много добре в тази конкретна задача защото ограничението беше най-много 5 реда на метод, а със case ми се получиха повече редове.