Решение на Първа задача от Людмила Савова

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

Към профила на Людмила Савова

Резултати

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

Код

def series(sequence, index)
case sequence
when 'fibonacci' then sequence(1, index)
when 'lucas' then sequence(2, index)
when 'summed' then sequence(1, index) + sequence(2, index)
end
end
def sequence(first_number, index)
numbers = [first_number, 1]
(index - 2).times { numbers << numbers[-1] + numbers[-2] }
numbers[index - 1]
end

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

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

Finished in 0.01223 seconds
12 examples, 0 failures

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

Людмила обнови решението на 11.10.2014 18:54 (преди около 10 години)

+def series(sequence, index)
+ kind = case sequence
+ when 'fibonacci' then fibonacci(index)
+ when 'lucas' then lucas(index)
+ when 'summed' then summed(index)
+ end
+end
+
+def fibonacci(index)
+ sequence(1, index)
+end
+
+def lucas(index)
+ sequence(2, index)
+end
+
+def summed(index)
+ fibonacci(index) + lucas(index)
+end
+
+def sequence(first_number, index)
+ numbers = [first_number, 1]
+ for index in (3..index)
+ numbers.push(numbers[index-2] + numbers[index-3])
+ end
+ numbers[index-1]
+end

Людмила обнови решението на 11.10.2014 18:54 (преди около 10 години)

def series(sequence, index)
- kind = case sequence
+ result = case sequence
when 'fibonacci' then fibonacci(index)
when 'lucas' then lucas(index)
when 'summed' then summed(index)
end
end
def fibonacci(index)
sequence(1, index)
end
def lucas(index)
sequence(2, index)
end
def summed(index)
fibonacci(index) + lucas(index)
end
def sequence(first_number, index)
numbers = [first_number, 1]
for index in (3..index)
numbers.push(numbers[index-2] + numbers[index-3])
end
numbers[index-1]
end

Здравей :)

Примерните тестове минават за решението ти. Да не би да гледаш Deprecation Warning-а за :should? Това не е от твоето решение, а от нашите тестове. Интересува те последният ред - 3 examples, 0 failures.

Иначе имам малко съвети за самия код:

  • Може да махнеш result =. За да върнеш резултат от метод е достатъчно просто да оставиш case-a и резултатът от метода ще е резултатът от съответната функция, която ще се извика в някой от when-овете.
  • Трябват ли ти функциите fibonacci, lucas и summed? Тъй като са едноредови и се използват само на едно място, можеш да сложиш кода им в series.
  • Не харесваме for, но понеже не остана време от предната лекция, не сме го казвали. Разгледай метода each. С него for index in (3..index) ще стане (3..index).each do |index|, или още по-добре 3.upto(index) do |index|
  • Припокриват се променливите index в метода sequence, което леко усложнява нещата, защото този, който чете кода, трябва да следи коя от двете променливи се използва в даден момент. Ще е по-добре ако измислиш друго (по-описателно) име за параметъра на sequence, така че да няма повторения в имената.
  • Вместо numbers.push(нещо) може да използваш numbers << нещо. Правят едно и също, но по-често се използва второто.
  • Според Style Guide-a трябва да има празни места около минуса

Решението ти е доста добро, а ако промениш тези неща направо ще стане супер :)

Людмила обнови решението на 11.10.2014 23:08 (преди около 10 години)

def series(sequence, index)
result = case sequence
when 'fibonacci' then fibonacci(index)
when 'lucas' then lucas(index)
when 'summed' then summed(index)
end
end
def fibonacci(index)
sequence(1, index)
end
def lucas(index)
sequence(2, index)
end
def summed(index)
fibonacci(index) + lucas(index)
end
def sequence(first_number, index)
numbers = [first_number, 1]
- for index in (3..index)
- numbers.push(numbers[index-2] + numbers[index-3])
- end
- numbers[index-1]
+ (1..index-2).each { |index| numbers.push(numbers[-1] + numbers[-2]) }
+ numbers[index - 1]
end

Людмила обнови решението на 11.10.2014 23:47 (преди около 10 години)

def series(sequence, index)
result = case sequence
- when 'fibonacci' then fibonacci(index)
- when 'lucas' then lucas(index)
- when 'summed' then summed(index)
- end
+ when 'fibonacci' then fibonacci(index)
+ when 'lucas' then lucas(index)
+ when 'summed' then summed(index)
+ end
end
def fibonacci(index)
sequence(1, index)
end
def lucas(index)
sequence(2, index)
end
def summed(index)
fibonacci(index) + lucas(index)
end
def sequence(first_number, index)
numbers = [first_number, 1]
(1..index-2).each { |index| numbers.push(numbers[-1] + numbers[-2]) }
numbers[index - 1]
end

Людмила обнови решението на 13.10.2014 22:54 (преди около 10 години)

def series(sequence, index)
- result = case sequence
- when 'fibonacci' then fibonacci(index)
- when 'lucas' then lucas(index)
- when 'summed' then summed(index)
- end
+ case sequence
+ when 'fibonacci' then sequence(1, index)
+ when 'lucas' then sequence(2, index)
+ when 'summed' then sequence(1, index) + sequence(2, index)
+ end
end
-def fibonacci(index)
- sequence(1, index)
-end
-
-def lucas(index)
- sequence(2, index)
-end
-
-def summed(index)
- fibonacci(index) + lucas(index)
-end
-
def sequence(first_number, index)
numbers = [first_number, 1]
- (1..index-2).each { |index| numbers.push(numbers[-1] + numbers[-2]) }
+ (1..index - 2).each { |index| numbers.push(numbers[-1] + numbers[-2]) }
numbers[index - 1]
end

Людмила обнови решението на 13.10.2014 23:00 (преди около 10 години)

def series(sequence, index)
case sequence
when 'fibonacci' then sequence(1, index)
when 'lucas' then sequence(2, index)
when 'summed' then sequence(1, index) + sequence(2, index)
end
end
def sequence(first_number, index)
numbers = [first_number, 1]
- (1..index - 2).each { |index| numbers.push(numbers[-1] + numbers[-2]) }
+ (1..index - 2).each { |index| numbers << numbers[-1] + numbers[-2] }
numbers[index - 1]
end

Изглежда супер :)

Само още нещо дребно - когато не ти трябва параметъра в блок (на each например), можеш просто да не го пишеш. Все едно, че няма параметри. Може да разгледаш и times като алтернатива на each (щом не ти трябва параметъра).

Людмила обнови решението на 14.10.2014 21:29 (преди около 10 години)

def series(sequence, index)
case sequence
when 'fibonacci' then sequence(1, index)
when 'lucas' then sequence(2, index)
when 'summed' then sequence(1, index) + sequence(2, index)
end
end
def sequence(first_number, index)
numbers = [first_number, 1]
- (1..index - 2).each { |index| numbers << numbers[-1] + numbers[-2] }
+ (index - 2).times { numbers << numbers[-1] + numbers[-2] }
numbers[index - 1]
end