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

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

Към профила на Божидар Горов

Резултати

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

Код

def fibonacci(index)
base = {1 => 1, 2 => 1}
index <= 2 ? base[index] : fibonacci(index-1) + fibonacci(index-2)
end
def lucas(index)
base = {1 => 2, 2 => 1}
index <= 2 ? base[index] : lucas(index-1) + lucas(index-2)
end
def summed(index)
lucas(index) + fibonacci(index)
end
def series(type, index)
if type == 'summed'
summed(index)
elsif type == 'fibonacci' || type == 'lucas'
type == 'fibonacci' ? fibonacci(index) : lucas(index)
end
end

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

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

Finished in 0.09155 seconds
12 examples, 0 failures

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

Божидар обнови решението на 09.10.2014 07:51 (преди над 9 години)

+def fibonacci(index)
+ index < 2 ? index : fibonacci(index-1) + fibonacci(index-2)
+end
+
+def lucas(index)
+ values = {1 => 2, 2 => 1}
+ index <= 2 ? values[index] : lucas(index-1) + lucas(index-2)
+end
+
+def summed(index)
+ lucas(index) + fibonacci(index)
+end
+
+def series(type , index)
+ send(type , index)
+end
  • Леко си увеличил дефиниционното множество на фибоначи според нашата дефиниция.
  • Супер е че си разгледал и си видял за send, но като цяло идеята беше да използвате много базови инструменти за много лесен проблем. Ако за подобна задача се използва метапрограмиране се чудя какво ще стане с по-сложни.
  • Имаш проблеми с индентацията.

Божидар обнови решението на 10.10.2014 11:22 (преди над 9 години)

def fibonacci(index)
- index < 2 ? index : fibonacci(index-1) + fibonacci(index-2)
+ values = {1 => 1, 2 => 1}
+ index <= 2 ? values[index] : fibonacci(index-1) + fibonacci(index-2)
end
def lucas(index)
values = {1 => 2, 2 => 1}
index <= 2 ? values[index] : lucas(index-1) + lucas(index-2)
end
def summed(index)
lucas(index) + fibonacci(index)
end
def series(type , index)
- send(type , index)
-end
+ send(type , index)
+end
  • Все още имаш малки whitespace проблеми.
  • Наистина много се радвам, че си видял send. Въпреки това силно препоръчвам да се опиташ да направиш решение без него. Има потенциал да бъде опасен, особено щом все още не сме ви преподали лекция за метапрограмиране и особено като го ползваш върху глобалния scope. Щеше да бъде оправдано ако ви бяхме дали да имплементирате 50 различни редици, но това не е случая.
  • Опитай се да измислиш по-добро име от values за първите членове на редица.
  • fibonacci и lucas всъщност са имена на, а не типове редици. Това беше наша грешка в първоначалното условие, поправихме се.

Божидар обнови решението на 12.10.2014 22:21 (преди над 9 години)

def fibonacci(index)
- values = {1 => 1, 2 => 1}
- index <= 2 ? values[index] : fibonacci(index-1) + fibonacci(index-2)
+ base = {1 => 1, 2 => 1}
+ index <= 2 ? base[index] : fibonacci(index-1) + fibonacci(index-2)
end
def lucas(index)
- values = {1 => 2, 2 => 1}
- index <= 2 ? values[index] : lucas(index-1) + lucas(index-2)
+ base = {1 => 2, 2 => 1}
+ index <= 2 ? base[index] : lucas(index-1) + lucas(index-2)
end
def summed(index)
lucas(index) + fibonacci(index)
end
-def series(type , index)
- send(type , index)
+def series(type, index)
+ if type == 'summed'
+ summed(index)
+ elsif type == 'fibonacci' || type == 'lucas'
+ type == 'fibonacci' ? fibonacci(index) : lucas(index)
+ end
end