Решение на Първа задача от Любомир Папазов

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

Към профила на Любомир Папазов

Резултати

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

Код

def fibonacci(x)
(x == 1 or x ==2) ? 1 : fibonacci(x-1) + fibonacci(x-2)
end
def lucas(x)
(x == 1 or x ==2) ? 3-x : lucas(x-1) + lucas(x-2)
#3-x returns 2 if x==1 and returns 1 if x==2
end
def series(function, member)
case function
when 'fibonacci' then fibonacci(member)
when 'lucas' then lucas(member)
when 'summed' then fibonacci(member)+lucas(member)
end
end

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

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

Finished in 0.02304 seconds
12 examples, 0 failures

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

Любомир обнови решението на 09.10.2014 16:38 (преди около 10 години)

+def fibonacci(x)
+ (x == 1 or x ==2) ? 1 : fibonacci(x-1) + fibonacci(x-2)
+end
+
+def lucas(x)
+ (x == 1 or x ==2) ? 3-x : lucas(x-1) + lucas(x-2)
+ #3-x returns 2 if x==1 and returns 1 if x==2
+end
+
+def lucas_or_summed(fun, member)
+ fun == 'lucas' ? lucas(member) : fibonacci(member) + lucas(member)
+end
+
+
+def series(fun, member)
+ fun == 'fibonacci' ? fibonacci(member) : lucas_or_summed(fun, member)
+end
  • Имаш известни проблеми с конвенции (главно whitespaces). Консултирай се със style guide-а, за да ги адресираш.
  • В Ruby, подобно на повечето езици има нормален if :) Добре е, че си видял 3-x зависимост, но самият факт, че се е наложило да напишеш коментар подсказва, че може би има по-добър начин. Стреми се към яснота, не към остроумност на кода. :)
  • Горното важи и за нуждата да съкратиш до fun. Не е случайно, че сме ви дали до 5 реда на метод.
  • Не съм напълно сигурен как се чувствам отностно lucas_or_summed. Ако в условието имаше 50 различни редици щеше ли да напишеш 49 различни метода x_or_y?

Любомир обнови решението на 11.10.2014 19:18 (преди около 10 години)

def fibonacci(x)
- (x == 1 or x ==2) ? 1 : fibonacci(x-1) + fibonacci(x-2)
+ (x == 1 or x ==2) ? 1 : fibonacci(x-1) + fibonacci(x-2)
end
def lucas(x)
- (x == 1 or x ==2) ? 3-x : lucas(x-1) + lucas(x-2)
- #3-x returns 2 if x==1 and returns 1 if x==2
+ (x == 1 or x ==2) ? 3-x : lucas(x-1) + lucas(x-2)
+ #3-x returns 2 if x==1 and returns 1 if x==2
end
-def lucas_or_summed(fun, member)
- fun == 'lucas' ? lucas(member) : fibonacci(member) + lucas(member)
-end
-
-
-def series(fun, member)
- fun == 'fibonacci' ? fibonacci(member) : lucas_or_summed(fun, member)
+def series(function, member)
+ case function
+ when 'fibonacci' then fibonacci(member)
+ when 'lucas' then lucas(member)
+ when 'summed' then fibonacci(member)+lucas(member)
+ end
end

Все още имаш проблеми с конвенциите. А и коментарът на ред 7 е излишен, не би трябвало да го има във финалното ти решение.

Непременно се запознай с конвенциите, които ръководството по стил препоръчва. От следващата задача ще отнемаме точки за грубото им неспазване.