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

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

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

Резултати

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

Код

def calculate_sequence(accumulator, addend, index)
(index - 1).times { accumulator, addend = addend, accumulator + addend }
accumulator
end
def series(sequence, number)
case sequence
when 'fibonacci' then calculate_sequence(1, 1, number)
when 'lucas' then calculate_sequence(2, 1, number)
else calculate_sequence(1, 1, number) + calculate_sequence(2, 1, number)
end
end

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

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

Finished in 0.01572 seconds
12 examples, 0 failures

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

Константин обнови решението на 09.10.2014 00:06 (преди около 10 години)

+def calculate_sequence(first_element, second_element, index)
+ sequence = [first_element, second_element]
+ for item in (2...index).to_a
+ sequence[item] = sequence[item - 2] + sequence[item - 1]
+ end
+ return sequence[index - 1]
+end
+
+def series(type, index)
+ if ["fibonacci", "lucas"].include? type
+ first_element = type == "lucas" ? 2 : 1
+ return calculate_sequence(first_element, 1, index)
+ end
+ return calculate_sequence(1, 1, index) + calculate_sequence(2, 1, index)
+end

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

def calculate_sequence(first_element, second_element, index)
- sequence = [first_element, second_element]
- for item in (2...index).to_a
- sequence[item] = sequence[item - 2] + sequence[item - 1]
- end
- return sequence[index - 1]
+ sequence = [first_element, second_element]
+ for item in (2...index).to_a
+ sequence[item] = sequence[item - 2] + sequence[item - 1]
+ end
+ return sequence[index - 1]
end
def series(type, index)
- if ["fibonacci", "lucas"].include? type
- first_element = type == "lucas" ? 2 : 1
- return calculate_sequence(first_element, 1, index)
- end
- return calculate_sequence(1, 1, index) + calculate_sequence(2, 1, index)
+ if ["fibonacci", "lucas"].include? type
+ first_element = type == "lucas" ? 2 : 1
+ return calculate_sequence(first_element, 1, index)
+ end
+ return calculate_sequence(1, 1, index) + calculate_sequence(2, 1, index)
end
  • Избрал си доста процедурен подход за решение на задачата. Използването на for е силно непрепоръчително в Ruby. Погледни документацията на Enumberable и Array, за да почерпиш малко вдъхновение за нещо по-кратко и ясно.
  • Cast-ването до масив е излишно. item не е точното име в случая. Има по-приятен начин да получиш последния елемент на масив от sequence[index - 1].
  • return е опционален в Ruby. Не го пиши експлицитно пред последния израз на методите. Използвал си го и за control flow, когато това е било ненужно. Помисли дали можеш да промениш if-a, за да изглежда по-четим. Ако имаш желание можеш да прочетеш и за case (switch-ът в Ruby).

Константин обнови решението на 15.10.2014 09:26 (преди около 10 години)

-def calculate_sequence(first_element, second_element, index)
- sequence = [first_element, second_element]
- for item in (2...index).to_a
- sequence[item] = sequence[item - 2] + sequence[item - 1]
- end
- return sequence[index - 1]
+def calculate_sequence(accumulator, addend, index)
+ (index - 1).times { accumulator, addend = addend, accumulator + addend }
+ accumulator
end
-def series(type, index)
- if ["fibonacci", "lucas"].include? type
- first_element = type == "lucas" ? 2 : 1
- return calculate_sequence(first_element, 1, index)
+def series(sequence, number)
+ case sequence
+ when 'fibonacci' then calculate_sequence(1, 1, number)
+ when 'lucas' then calculate_sequence(2, 1, number)
+ else calculate_sequence(1, 1, number) + calculate_sequence(2, 1, number)
end
- return calculate_sequence(1, 1, index) + calculate_sequence(2, 1, index)
end

Константин обнови решението на 15.10.2014 09:30 (преди около 10 години)

def calculate_sequence(accumulator, addend, index)
(index - 1).times { accumulator, addend = addend, accumulator + addend }
accumulator
end
def series(sequence, number)
case sequence
when 'fibonacci' then calculate_sequence(1, 1, number)
- when 'lucas' then calculate_sequence(2, 1, number)
+ when 'lucas' then calculate_sequence(2, 1, number)
else calculate_sequence(1, 1, number) + calculate_sequence(2, 1, number)
end
end