Камен обнови решението на 10.10.2014 17:09 (преди около 10 години)
+def complete_sequence_and_return_index(sequence, index)
+ (index - sequence.size).times { sequence.push(sequence[-1] + sequence[-2]) }
+ sequence[index - 1] # index is not 0 based, arrays are 0 bazed
+end
+
+def fibonacci(index)
+ complete_sequence_and_return_index([1, 1], index)
+end
+
+def lucas(index)
+ complete_sequence_and_return_index([2, 1], index)
+end
+
+def series(type, index)
+ if type == 'fibonacci'
+ return fibonacci(index)
+ elsif type == 'lucas'
+ return lucas(index)
+ end
+ fibonacci(index) + lucas(index)
+end
+
Като цяло решението ми харесва. Леки забележки:
- Опитай се да измислиш по-добро име от
complete_sequence_and_return_index
. Най-малкото не връщаш индекс, а стойността на index члена на редицата. По принцип не трябва да щадиш символи при именуването, но ако стигнеш до нещо много конкретно и вербозно за сравнително простичък проблем, вероятно има друга алтернатива. - Махни коментара, напълно ненужен е. Aко си се чудил кое от двете е правилно - пише се based. :)
- Сложи празен ред между изчисленията и връщаната стойност в
complete_sequence_and_return_index
за по-добра четимост. - Не слагай празен ред на края на файла.
- Опционално можеш да вкараш summed случая на
series
вelse
клауза и да махнешreturn
-ите, за да видиш дали повече ще ти хареса. Разгледай иcase
. - По същия начин експериментирай и с
push
vs<<
.