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

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

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

Резултати

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

Код

def fibonacci(n)
n <= 1 ? n : fibonacci(n - 1) + fibonacci(n - 2)
end
def lucas(n)
n == 1 ? 2 : n == 2 ? 1 : lucas(n - 1) + lucas(n - 2)
end
def series(row, n)
row == "summed" ? fibonacci(n) + lucas(n) : send(row, n)
end

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

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

Finished in 0.02466 seconds
12 examples, 0 failures

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

Снежана обнови решението на 09.10.2014 11:33 (преди около 10 години)

+def f(n)
+ n == 1 ? 1 : n == 2 ? 1 : f(n-1) + f(n -2)
+end
+
+def l(n)
+ n == 1 ? 2 : n == 2 ? 1 : l(n-1) + l(n -2)
+end
+
+def series(type, n)
+ type == "fibonacci" ? f(n) : type == "lucas" ? l(n) : f(n) + l(n)
+end

Снежана обнови решението на 09.10.2014 11:34 (преди около 10 години)

def f(n)
- n == 1 ? 1 : n == 2 ? 1 : f(n-1) + f(n -2)
+ n == 1 ? 1 : n == 2 ? 1 : f(n-1) + f(n-2)
end
def l(n)
- n == 1 ? 2 : n == 2 ? 1 : l(n-1) + l(n -2)
+ n == 1 ? 2 : n == 2 ? 1 : l(n-1) + l(n-2)
end
def series(type, n)
type == "fibonacci" ? f(n) : type == "lucas" ? l(n) : f(n) + l(n)
end

Ако си присъствала на лекцията вчера би трябвало да знаеш, че четимост > малък брой символи. Това е главният проблем на решението ти.

  • Използваш вложен тернарен оператор, което не е ok.
  • Имаше ли голям смисъл да съкратиш до f и l?
  • fibonacci и lucas са имена на редове, не типове. Наша грешка, поправихме се. :)

Снежана обнови решението на 09.10.2014 23:39 (преди около 10 години)

-def f(n)
- n == 1 ? 1 : n == 2 ? 1 : f(n-1) + f(n-2)
+def fibonacci(n)
+ if n <= 1
+ n
+ else
+ fibonacci(n-1) + fibonacci(n-2)
+ end
end
-def l(n)
- n == 1 ? 2 : n == 2 ? 1 : l(n-1) + l(n-2)
+def lucas(n)
+ if n == 1
+ 2
+ elsif n == 2
+ 1
+ else
+ lucas(n-1) + lucas(n-2)
+ end
end
-def series(type, n)
- type == "fibonacci" ? f(n) : type == "lucas" ? l(n) : f(n) + l(n)
+def series(row, n)
+ if row == "fibonacci"
+ fibonacci(n)
+ elsif row == "lucas"
+ lucas(n)
+ else
+ fibonacci(n) + lucas(n)
+ end
end

Снежана обнови решението на 14.10.2014 13:59 (преди около 10 години)

def fibonacci(n)
- if n <= 1
- n
- else
- fibonacci(n-1) + fibonacci(n-2)
- end
+ n <= 1 ? n : fibonacci(n-1) + fibonacci(n-2)
end
def lucas(n)
- if n == 1
- 2
- elsif n == 2
- 1
- else
- lucas(n-1) + lucas(n-2)
- end
+ n == 1 ? 2 : n == 2 ? 1 : lucas(n-1) + lucas(n-2)
end
def series(row, n)
- if row == "fibonacci"
- fibonacci(n)
- elsif row == "lucas"
- lucas(n)
- else
- fibonacci(n) + lucas(n)
- end
+ row == "summed" ? fibonacci(n) + lucas(n) : send(row, n)
end

Снежана, все още имаш проблеми с конвенциите. Непременно се запознай с ръководството по стил.

Още бележки:

  • row не е добро име. Това е по-скоро series_type или нещо такова.
  • Принципно е добре да се придържаш към низове с единични кавички, освен ако не използваш специалните свойства на низ с двойни кавички (например, интерполация)
  • Не е добра идея да ползваш send в този случай. Това е елемент от метапрограмирането и ще говорим за него като му дойде времето. Добре е да се избягват. По-добре извикай методите ръчно – макар и да е по-дълго, е по-просто.
  • Избягвай употребата на тернарни оператори. С обикновени if-else се чете много по-лесно.
  • Трябва да има точно по един интервал около "операторите", като <=, -, +, ?, ==, : и т.н.

Останалата част от решението е окей.

Снежана обнови решението на 15.10.2014 16:51 (преди около 10 години)

def fibonacci(n)
- n <= 1 ? n : fibonacci(n-1) + fibonacci(n-2)
+ n <= 1 ? n : fibonacci(n - 1) + fibonacci(n - 2)
end
def lucas(n)
- n == 1 ? 2 : n == 2 ? 1 : lucas(n-1) + lucas(n-2)
+ n == 1 ? 2 : n == 2 ? 1 : lucas(n - 1) + lucas(n - 2)
end
def series(row, n)
row == "summed" ? fibonacci(n) + lucas(n) : send(row, n)
end