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

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

Към профила на Кристиан Цветков

Резултати

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

Код

def series(sequence, index)
case sequence
when 'fibonacci' then fibonacci(index)
when 'lucas' then lucas(index)
else fibonacci(index) + lucas(index)
end
end
def fibonacci(index)
iterate_sequence(index, 1, 1)
end
def lucas(index)
iterate_sequence(index, 1, 2)
end
def iterate_sequence(index, next_number, result)
if index == 1
result
else
iterate_sequence(index - 1, result + next_number, next_number)
end
end

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

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

Finished in 0.01157 seconds
12 examples, 0 failures

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

Кристиан обнови решението на 11.10.2014 21:34 (преди около 10 години)

+def series(sequence, index)
+ return fibonacci(index) if sequence == 'fibonacci'
+ return lucas(index) if sequence == 'lucas'
+ return fibonacci(index) + lucas(index)
+end
+
+def fibonacci(index)
+ fibonacci_iterator(1, 1, index)
+end
+
+def fibonacci_iterator(first, second, index)
+ if index == 1
+ second
+ else
+ fibonacci_iterator(first + second, first, index - 1)
+ end
+end
+
+def lucas(index)
+ lucas_iterator(2, 1, index)
+end
+
+def lucas_iterator(first, second, index)
+ if index == 1
+ first
+ else
+ lucas_iterator(second, first + second, index - 1)
+ end
+end
  • fibonacci_iterator и lucas_iterator звучат повече като имена на някакви класове или променливи. Опитай се да измислиш по-добри. Също какво са first и second? Може би първият и вторият член на редицата, но после стават нещо друго.
  • fibonacci_iterator и lucas_iterator не правят ли едно и също с разменени аргументи? Можеш ли да ги слееш в един метод, който да преизползваш?
  • Предполагам си сложил return-а на последния ред в series за естетическа консистентност. Недей. Имаш няколко опции - използвай case (switch-ът в Ruby) или if - elsif - else. Може да настояваш на return x if y, ако имаш някакви изключения и след тях идва логиката за 'главния случай', но тогава ги отдели от нея с празен ред и не слагай return накрая.

Като цяло нямаш трагични грешки, ако адресираш горните точки решението ще е много прилично.

Кристиан обнови решението на 12.10.2014 23:15 (преди около 10 години)

def series(sequence, index)
- return fibonacci(index) if sequence == 'fibonacci'
- return lucas(index) if sequence == 'lucas'
- return fibonacci(index) + lucas(index)
+ case sequence
+ when 'fibonacci' then fibonacci(index)
+ when 'lucas' then lucas(index)
+ else fibonacci(index) + lucas(index)
+ end
end
def fibonacci(index)
- fibonacci_iterator(1, 1, index)
+ iterate_sequence(index, 1, 1)
end
-def fibonacci_iterator(first, second, index)
- if index == 1
- second
- else
- fibonacci_iterator(first + second, first, index - 1)
- end
-end
-
def lucas(index)
- lucas_iterator(2, 1, index)
+ iterate_sequence(index, 1, 2)
end
-def lucas_iterator(first, second, index)
+def iterate_sequence(index, next_number, result)
if index == 1
- first
+ result
else
- lucas_iterator(second, first + second, index - 1)
+ iterate_sequence(index - 1, result + next_number, next_number)
end
-end
+end