Решение на Първа задача от Деян Гюрджеклиев

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

Към профила на Деян Гюрджеклиев

Резултати

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

Код

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

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

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

Finished in 0.0248 seconds
12 examples, 0 failures

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

Деян обнови решението на 10.10.2014 17:48 (преди над 9 години)

+def fibonacci(n)
+ n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2)
+end
+
+def lucas(n)
+ return 2 if n == 1
+ return 1 if n == 2
+ lucas(n - 1) + lucas(n - 2)
+end
+
+def series(function_type, number)
+ return fibonacci number if function_type.eql? "fibonacci"
+ return lucas number if function_type.eql? "lucas"
+ fibonacci(number) + lucas(number) if function_type.eql? "summed"
+end

Браво, това е една от най-добрите първоначални версии на решение до момента. Само дребни забележки:

  • Не си в някой от случаите, в които би искал да пропуснеш скоби при извикване на метод. Виж style guide-a за повече яснота.
  • Имаш малък whitespace проблем.
  • Можеш да експериментираш дали кодът ще изглежда по-добре ако замениш return x if y с if - elsif - else или case.
  • Имаше ли някаква причина да използваш eql?, а не ==?
  • fibonacci и lucas са имена на, а не типове редици. Това беше наша грешка в условието, поправихме се.

Деян обнови решението на 12.10.2014 22:43 (преди над 9 години)

def fibonacci(n)
n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2)
end
def lucas(n)
return 2 if n == 1
return 1 if n == 2
lucas(n - 1) + lucas(n - 2)
end
-def series(function_type, number)
- return fibonacci number if function_type.eql? "fibonacci"
- return lucas number if function_type.eql? "lucas"
- fibonacci(number) + lucas(number) if function_type.eql? "summed"
+def series(sequence_name, number)
+ return fibonacci(number) if sequence_name.eql? "fibonacci"
+ return lucas(number) if sequence_name.eql? "lucas"
+ fibonacci(number) + lucas(number) if sequence_name.eql? "summed"
end

Деян обнови решението на 12.10.2014 22:44 (преди над 9 години)

def fibonacci(n)
n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2)
end
def lucas(n)
return 2 if n == 1
return 1 if n == 2
lucas(n - 1) + lucas(n - 2)
end
def series(sequence_name, number)
return fibonacci(number) if sequence_name.eql? "fibonacci"
- return lucas(number) if sequence_name.eql? "lucas"
+ return lucas(number) if sequence_name.eql? "lucas"
fibonacci(number) + lucas(number) if sequence_name.eql? "summed"
end
  • fixed
  • fixed
  • За мен лично
     def series(function_type, number)
      case function_type
      when "fibonacci"
        fibonacci(number)
      when "lucas"
        lucas(number)
      when "summed"
        fibonacci(number) + lucas(number)   
      end
    end
    изглежда много по-добре, но не влиза в ограниченията, a може би аз не се сещам как да го направя.
  • Прочитайки документацията за eql? "Two strings are equal if they have the same length and content.", установих, че той е достатъчен за изисканото условие.
  • fixed
  • Можеш да използваш when x then y синтаксиса. Също case има else клауза.
  • Изглежда си Java фен. :) В Ruby == е предефиниран за всички core класове (или поне за тези, за които аз се сещам), така че да работят интуитивно (каквото и да значи това в дадения случай). Обикновено == и eql? са синоними, с някои дребни разлики понякога (String е пример за такава дребна разлика). Tук някой е описал както представляват всичките равенства на едно място. Като == се използва за общи сравнения и съответно когато някой види някъде eql? това е изненада и започва да се чуди защо не ==. Предпочитай ==, ако нямаш някакво конкретно съображение.

Деян обнови решението на 13.10.2014 17:45 (преди над 9 години)

def fibonacci(n)
n <= 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2)
end
def lucas(n)
- return 2 if n == 1
- return 1 if n == 2
- lucas(n - 1) + lucas(n - 2)
+ case n
+ when 2 then 1
+ when 1 then 2
+ else lucas(n - 1) + lucas(n - 2)
+ end
end
def series(sequence_name, number)
- return fibonacci(number) if sequence_name.eql? "fibonacci"
- return lucas(number) if sequence_name.eql? "lucas"
- fibonacci(number) + lucas(number) if sequence_name.eql? "summed"
+ case sequence_name
+ when "fibonacci" then fibonacci(number)
+ when "lucas" then lucas(number)
+ when "summed" then fibonacci(number) + lucas(number)
+ end
end