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

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

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

Резултати

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

Код

def series(circuit, number)
case circuit
when "fibonacci" then fibonacci(number)
when "lucas" then lucas(number)
when "summed" then summed(number)
end
end
def fibonacci(number)
case number
when 1, 2 then 1
else fibonacci(number - 1) + fibonacci(number - 2)
end
end
def lucas(number)
case number
when 1 then 2
when 2 then 1
else lucas(number - 1) + lucas(number - 2)
end
end
def summed(number)
fibonacci(number) + lucas(number)
end

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

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

Finished in 0.02387 seconds
12 examples, 0 failures

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

Даяна обнови решението на 11.10.2014 23:33 (преди около 10 години)

+def series(string, number)
+ string == "fibonacci" ? fibonacci(number)
+ : string == "lucas" ? lucas(number) : summed(number)
+end
+
+def fibonacci(number)
+ number <= 1 ? number : fibonacci(number - 1) + fibonacci(number - 2)
+end
+
+def lucas(number)
+ if number == 1
+ 2
+ elsif number == 2
+ 1
+ else lucas(number - 1) + lucas(number - 2)
+ end
+end
+
+def summed(number)
+ fibonacci(number) + lucas(number)
+end

Даяна обнови решението на 11.10.2014 23:34 (преди около 10 години)

def series(string, number)
string == "fibonacci" ? fibonacci(number)
: string == "lucas" ? lucas(number) : summed(number)
end
def fibonacci(number)
number <= 1 ? number : fibonacci(number - 1) + fibonacci(number - 2)
end
def lucas(number)
- if number == 1
- 2
- elsif number == 2
- 1
- else lucas(number - 1) + lucas(number - 2)
- end
+ number == 1 ? 2 : number == 2 ? 1 : lucas(number - 1) + lucas(number - 2)
end
def summed(number)
fibonacci(number) + lucas(number)
end
  • string е доста общо име. Опитвай се имената на променливите ти да показват каква е семантиката им. Точно този string в точно тази ситуация значи нещо конкретно. Кръсти го така.
  • Не използвай вложен тернарен оператор. Кодът става по-малко четим, отбелязано е и в style guide-а. Старай се да постигнеш яснота и чак тогава краткост. За алтернативи можеш да погледнеш case или обикновен if - elsif - else.
  • Леко си разширила дефиниционното множество на нашия fibonacci. По принцип можеш да си връщаш и гърмиш както искаш за недефинирани стойности. Но е добре кодът ти да се държи все едно са действително недефинирани (когато това е възможно без trade-off), не трябва да разчита на имплементационна магия. :)

Ако адресираш горните точки и останеш с ясно и кратко решение ще е супер.

Даяна обнови решението на 13.10.2014 00:49 (преди около 10 години)

-def series(string, number)
- string == "fibonacci" ? fibonacci(number)
- : string == "lucas" ? lucas(number) : summed(number)
+def series(name_of_row, number)
+ case name_of_line
+ when "fibonacci" then fibonacci(number)
+ when "lucas" then lucas(number)
+ when "summed" then summed(number)
+ end
end
def fibonacci(number)
- number <= 1 ? number : fibonacci(number - 1) + fibonacci(number - 2)
+ case number
+ when 1, 2 then 1
+ else fibonacci(number - 1) + fibonacci(number - 2)
+ end
end
def lucas(number)
- number == 1 ? 2 : number == 2 ? 1 : lucas(number - 1) + lucas(number - 2)
+ case number
+ when 1 then 2
+ when 2 then 1
+ else lucas(number - 1) + lucas(number - 2)
+ end
end
-
-def summed(number)
- fibonacci(number) + lucas(number)
-end

Даяна обнови решението на 13.10.2014 00:53 (преди около 10 години)

-def series(name_of_row, number)
+def series(name_of_line, number)
case name_of_line
when "fibonacci" then fibonacci(number)
when "lucas" then lucas(number)
when "summed" then summed(number)
end
end
def fibonacci(number)
case number
when 1, 2 then 1
else fibonacci(number - 1) + fibonacci(number - 2)
end
end
def lucas(number)
case number
when 1 then 2
when 2 then 1
else lucas(number - 1) + lucas(number - 2)
end
end

Даяна обнови решението на 13.10.2014 01:12 (преди около 10 години)

-def series(name_of_line, number)
- case name_of_line
+def series(function, number)
+ case function
when "fibonacci" then fibonacci(number)
when "lucas" then lucas(number)
when "summed" then summed(number)
end
end
def fibonacci(number)
case number
when 1, 2 then 1
else fibonacci(number - 1) + fibonacci(number - 2)
end
end
def lucas(number)
case number
when 1 then 2
when 2 then 1
else lucas(number - 1) + lucas(number - 2)
end
end
+
+def summed(number)
+ fibonacci(number) + lucas(number)
+end

Даяна обнови решението на 13.10.2014 01:20 (преди около 10 години)

-def series(function, number)
- case function
+def series(circuit, number)
+ case circuit
when "fibonacci" then fibonacci(number)
when "lucas" then lucas(number)
when "summed" then summed(number)
end
end
def fibonacci(number)
case number
when 1, 2 then 1
else fibonacci(number - 1) + fibonacci(number - 2)
end
end
def lucas(number)
case number
when 1 then 2
when 2 then 1
else lucas(number - 1) + lucas(number - 2)
end
end
def summed(number)
fibonacci(number) + lucas(number)
end