Решение на Първа задача от Ралица Великова

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

Към профила на Ралица Великова

Резултати

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

Код

def fibonacci(number)
return 1 if number == 1
return 1 if number == 2
fibonacci(number - 1) + fibonacci(number - 2)
end
def lucas(number)
return 2 if number == 1
return 1 if number == 2
lucas(number - 1) + lucas(number - 2)
end
def summed(number)
fibonacci(number) + lucas(number)
end
def series(name, number)
return fibonacci(number) if name == "fibonacci"
return lucas(number) if name == "lucas"
return summed(number) if name == "summed"
end

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

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

Finished in 0.02304 seconds
12 examples, 0 failures

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

Ралица обнови решението на 12.10.2014 20:10 (преди около 10 години)

+def fibonacci(number)
+ return number if (0..1).include? number
+ fibonacci(number-1) + fibonacci(number-2)
+end
+
+def lucas(number)
+ return 2 if (0..1).include? number
+ if number === 2
+ return 1
+ end
+ lucas(number-1) + lucas(number-2)
+end
+
+def summed(number)
+ return fibonacci(number) + lucas(number)
+end
+
+def series(name, number)
+ send name, number
+end

Ралица обнови решението на 12.10.2014 20:28 (преди около 10 години)

def fibonacci(number)
- return number if (0..1).include? number
- fibonacci(number-1) + fibonacci(number-2)
+ return number if number == 1
+ fibonacci(number - 1) + fibonacci(number - 2)
end
def lucas(number)
- return 2 if (0..1).include? number
- if number === 2
- return 1
- end
- lucas(number-1) + lucas(number-2)
+ return 2 if number == 1
+ return 1 if number == 2
+ lucas(number - 1) + lucas(number - 2)
end
def summed(number)
- return fibonacci(number) + lucas(number)
+ return fibonacci(number) + lucas(number)
end
def series(name, number)
- send name, number
+ send name, number
end

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

def fibonacci(number)
- return number if number == 1
+ return 1 if (1..2).include? number
fibonacci(number - 1) + fibonacci(number - 2)
end
def lucas(number)
return 2 if number == 1
return 1 if number == 2
lucas(number - 1) + lucas(number - 2)
end
def summed(number)
return fibonacci(number) + lucas(number)
end
def series(name, number)
send name, number
end

Ралица обнови решението на 12.10.2014 23:38 (преди около 10 години)

def fibonacci(number)
return 1 if (1..2).include? number
fibonacci(number - 1) + fibonacci(number - 2)
end
def lucas(number)
return 2 if number == 1
return 1 if number == 2
lucas(number - 1) + lucas(number - 2)
end
def summed(number)
- return fibonacci(number) + lucas(number)
+ fibonacci(number) + lucas(number)
end
def series(name, number)
send name, number
end
  • Много се радвам, че си видяла send. Но все пак очаквахме просто решение на лесна задача. Вероятно 1/3 от лекциите ще си говорим за метапрограмиране, колко е яко и как не трябва да го използвате, ако нямате много основателна причина. Не сме ви дали да дефинирате 50 различни реда, не е оправдано, още повече, че го викаш в глобалния scope. Опитай да пренапишеш series с case или обикновен if - elsif - else.
  • Можеше преспокойно да сложиш [1, 2], а не (1..2). По принцип (x..y) и (x...y) вървят ръка за ръка с when или ===. В другите ситуации предпочитай x.upto(y). Естествено тук би било малко абсурдно като се прочете. Ако са само два елемента нямаш голям смисъл от Range. Дори не съм сигурен дали няма да е най-добре да се направят двете сравнения.
  • Слагай празен ред между основните изчисления и връщаната стойност на края или изключителните случаи и главната логика за по-добра четимост.

Ако адресираш горните точки решението ти ще е супер.

Ралица обнови решението на 15.10.2014 00:27 (преди около 10 години)

def fibonacci(number)
- return 1 if (1..2).include? number
+ return 1 if number == 1
+ return 1 if number == 2
+
fibonacci(number - 1) + fibonacci(number - 2)
end
def lucas(number)
return 2 if number == 1
return 1 if number == 2
+
lucas(number - 1) + lucas(number - 2)
end
def summed(number)
fibonacci(number) + lucas(number)
end
def series(name, number)
- send name, number
+ return fibonacci(number) if name == "fibonacci"
+ return lucas(number) if name == "lucas"
+ return summed(number) if name == "summed"
end