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

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

Към профила на Александър Александров

Резултати

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

Код

def fibonacci (position)
return 1 if position <= 2
fibonacci(position - 1) + fibonacci(position - 2)
end
def lucas (position)
return 2 if position == 1
return 1 if position == 2
lucas(position - 1) + lucas(position - 2)
end
def summed (position)
fibonacci(position) + lucas(position)
end
def series (mode, position)
return fibonacci(position) if mode == 'fibonacci'
return lucas(position) if mode == 'lucas'
return summed(position) if mode == 'summed'
end

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

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

Finished in 0.022 seconds
12 examples, 0 failures

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

Александър обнови решението на 09.10.2014 01:22 (преди над 9 години)

+def fibonacci (number)
+ return number 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 (string,number)
+ return fibonacci(number) if string=='fibonacci'
+ return lucas(number) if string=='lucas'
+ return summed(number) if string=='summed'
+end
  • Имаш някои проблеми със спазването на конвенциите, главно whitespace-и и излишни скоби. Погледни style guide-ът, за да ги адресираш.
  • x if y синтаксисът в Ruby е много красиво нещо, но лично аз бих се замислил дали не е по-добре да го разпиша с обикновен if - elsif - else, ако го ползвам на всеки ред в метода си и то в комбинация с control flow return-и. Опционално може да разгледаш и case (switch-ът в Ruby).
  • Опитвай се имената на променливите ти да са близо до семантиката, която искаш да изкажеш. Всеки string може да се казва string. В конкретния случай точно този string има някакво специално значение. Постарай се да го отразиш чрез подходящо име.

Александър обнови решението на 09.10.2014 16:24 (преди над 9 години)

-def fibonacci (number)
- return number if number<2
- (fibonacci(number-1) + fibonacci(number-2))
+def fibonacci (position)
+ return position if position < 2
+ fibonacci(position - 1) + fibonacci(position - 2)
end
-def lucas (number)
- return 2 if number==1
- return 1 if number==2
- (lucas(number-1) + lucas(number-2))
+
+def lucas (position)
+ return 2 if position == 1
+ return 1 if position == 2
+ lucas(position - 1) + lucas(position - 2)
end
-def summed (number)
- (fibonacci(number)+lucas(number))
+
+def summed (position)
+ fibonacci(position) + lucas(position)
end
-def series (string,number)
- return fibonacci(number) if string=='fibonacci'
- return lucas(number) if string=='lucas'
- return summed(number) if string=='summed'
+
+def series (mode,position)
+ return fibonacci(position) if mode == 'fibonacci'
+ return lucas(position) if mode == 'lucas'
+ return summed(position) if mode == 'summed'
end
  • Супер, оправил си повечето неща, но все още имаш 2 дребни проблема с whitespace-ите.
  • Не използвай експлицитен return пред последния израз в метод. Против конвенцията е. Дори и аргументът ти да е, че така редовете изглеждат по-симетрични пропускаш факта, че кодът ти става по-неконсистентен (само series е особен в това отношение).

Александър обнови решението на 14.10.2014 00:09 (преди над 9 години)

def fibonacci (position)
- return position if position < 2
+ return 1 if position <= 2
fibonacci(position - 1) + fibonacci(position - 2)
end
def lucas (position)
return 2 if position == 1
return 1 if position == 2
lucas(position - 1) + lucas(position - 2)
end
def summed (position)
fibonacci(position) + lucas(position)
end
-def series (mode,position)
+def series (mode, position)
return fibonacci(position) if mode == 'fibonacci'
return lucas(position) if mode == 'lucas'
return summed(position) if mode == 'summed'
end