Решение на Първа задача от Дамян Димитров

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

Към профила на Дамян Димитров

Резултати

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

Код

def series_initial_members(series_name)
series_name == 'fibonacci' ? [1, 1] : [2, 1]
end
def series_nth_member(series_name, n)
members = series_initial_members(series_name)
2.upto(n).each do |nth_member|
members[nth_member] = members[nth_member - 1] + members[nth_member - 2]
end
members[n - 1]
end
def series(series_name, n)
if series_name == 'summed'
series_nth_member('fibonacci', n) + series_nth_member('lucas', n)
else
series_nth_member(series_name, n)
end
end

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

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

Finished in 0.01329 seconds
12 examples, 0 failures

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

Дамян обнови решението на 10.10.2014 16:54 (преди около 10 години)

+def series_start_values(series_name)
+ series_name == 'fibonacci' ? [1, 1] : [2, 1]
+end
+
+def series_nth_member(series_name, n)
+ series_n = series_start_values(series_name)
+ (2..n).each do |i|
+ series_n[i] = series_n[i - 1] + series_n[i - 2]
+ end
+ series_n[n - 1]
+end
+
+def series(series_name, n)
+ case series_name
+ when 'summed'
+ series_nth_member('fibonacci', n) + series_nth_member('lucas', n)
+ else
+ series_nth_member(series_name, n)
+ end
+end

Като цяло добре.

  • Опитай се да измислиш по-добри имена от series_n и i. series_start_values е може би малко borderline.
  • Имаш лек проблем с индентацията на case според нашата версия на style guide-а. Принципно ако имам само два случая бих използвал обикновен if - else.
  • Остави един празен ред между изчисленията и връщането на стойност във series_nth_member за по-добра четимост.
  • В Ruby (x..y) най-често идва в комбинация с === или when. Тук би било по-добре да конструираш Range с x.upto(y).

Дамян обнови решението на 12.10.2014 21:13 (преди около 10 години)

-def series_start_values(series_name)
+def series_initial_members(series_name)
series_name == 'fibonacci' ? [1, 1] : [2, 1]
end
def series_nth_member(series_name, n)
- series_n = series_start_values(series_name)
- (2..n).each do |i|
- series_n[i] = series_n[i - 1] + series_n[i - 2]
+ members = series_initial_members(series_name)
+ 2.upto(n).each do |nth_member|
+ members[nth_member] = members[nth_member - 1] + members[nth_member - 2]
end
- series_n[n - 1]
+
+ members[n - 1]
end
def series(series_name, n)
- case series_name
- when 'summed'
- series_nth_member('fibonacci', n) + series_nth_member('lucas', n)
+ if series_name == 'summed'
+ series_nth_member('fibonacci', n) + series_nth_member('lucas', n)
else
- series_nth_member(series_name, n)
+ series_nth_member(series_name, n)
end
end