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

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

Към профила на Стилиян Стоянов

Резултати

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

Код

def fibonacci(number)
if number <= 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 call_appropriate_method(name_of_sequence, number)
if name_of_sequence == 'lucas'
lucas(number)
elsif name_of_sequence == 'fibonacci'
fibonacci(number)
end
end
def series(name_of_sequence, number)
if name_of_sequence == 'summed'
fibonacci(number) + lucas(number)
else
call_appropriate_method(name_of_sequence, number)
end
end

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

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

Finished in 0.02208 seconds
12 examples, 0 failures

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

Стилиян обнови решението на 13.10.2014 14:56 (преди около 10 години)

+#solution without running skeptic, neither rspec.Later will be #tested
+def fibonacci(number)
+ if number<=2
+ return 1
+ else
+ return fibonacci(number-1)+fibonacci(number-2)
+ end
+end
+
+def lucas(number)
+ if number == 1
+ return 2
+ elsif number == 2
+ return 1
+ else return lucas(number-1)+lucas(number-2)
+ end
+end
+
+def helper(string,number)
+ if string == 'lucas'
+ lucas(number)
+ elsif string == 'fibonacci'
+ fibonacci(number)
+ end
+end
+
+def series(string, number)
+ if string == 'summed'
+ fibonacci(number)+lucas(number)
+ else
+ helper(string, number)
+ end
+end

Стилиян обнови решението на 13.10.2014 15:22 (преди около 10 години)

-#solution without running skeptic, neither rspec.Later will be #tested
+#solution without running skeptic, neither rspec.Later will be tested
def fibonacci(number)
- if number<=2
- return 1
+ if number <= 2 then 1
else
- return fibonacci(number-1)+fibonacci(number-2)
+ fibonacci(number - 1) + fibonacci(number - 2)
end
end
def lucas(number)
- if number == 1
- return 2
- elsif number == 2
- return 1
- else return lucas(number-1)+lucas(number-2)
+ if number == 1 then 2
+ elsif number == 2 then 1
+ else lucas(number - 1) + lucas(number - 2)
end
end
def helper(string,number)
if string == 'lucas'
lucas(number)
elsif string == 'fibonacci'
fibonacci(number)
end
end
def series(string, number)
if string == 'summed'
- fibonacci(number)+lucas(number)
+ fibonacci(number) + lucas(number)
else
helper(string, number)
end
end

Стилиян обнови решението на 14.10.2014 10:47 (преди около 10 години)

-#solution without running skeptic, neither rspec.Later will be tested
def fibonacci(number)
if number <= 2 then 1
else
fibonacci(number - 1) + fibonacci(number - 2)
end
end
def lucas(number)
if number == 1 then 2
elsif number == 2 then 1
else lucas(number - 1) + lucas(number - 2)
end
end
-def helper(string,number)
- if string == 'lucas'
+def helper(number_sequence,number)
+ if number_sequence == 'lucas'
lucas(number)
- elsif string == 'fibonacci'
+ elsif number_sequence == 'fibonacci'
fibonacci(number)
end
end
-def series(string, number)
- if string == 'summed'
+def series(number_sequence, number)
+ if number_sequence == 'summed'
fibonacci(number) + lucas(number)
else
- helper(string, number)
+ helper(number_sequence, number)
end
-end
+end

Стилиян обнови решението на 14.10.2014 10:48 (преди около 10 години)

def fibonacci(number)
if number <= 2 then 1
else
fibonacci(number - 1) + fibonacci(number - 2)
end
end
def lucas(number)
if number == 1 then 2
elsif number == 2 then 1
else lucas(number - 1) + lucas(number - 2)
end
end
-def helper(number_sequence,number)
+def helper(number_sequence, number)
if number_sequence == 'lucas'
lucas(number)
elsif number_sequence == 'fibonacci'
fibonacci(number)
end
end
def series(number_sequence, number)
if number_sequence == 'summed'
fibonacci(number) + lucas(number)
else
helper(number_sequence, number)
end
end

Като цяло е добре.

  • Главният ти проблем е измислянето на имена. number_sequence е малко подлъгващо. Не ви подаваме номер на редица или числова редица, а име на редица. helper не ми говори нищо, освен че ти помага. Какво, защо и как - не е ясно. Опитай се да дадеш име, което изказва семантиката на това, което helper прави.
  • Експериментирай дали ще ти хареса повече, ако пренапишеш lucas с case (switch-ът в Ruby).
  • Защо размени реда на fibonacci и lucas в helper? Не че е грешно, просто е леко wtf момент. :)

Благодаря за коментара. :) Имам сериозен проблем с именуването на променливи и функции. 1) name_of_number_sequence(name_of_num_sequence или name_of_sequence) добри имена ли са за този аргумент? helper просто намалява броя на редовете на функцията series, тъй като не успях да се вместя в 5-те реда.Съответно ако не се иска summed резултат се извиква тази функция, чиято цел е да извика функцията, която реализира исканата числова редица.Дано като преспя измисля някакво име за този метод. 3) Наистина е леко глупаво, но първоначално тръгнах да пиша helper с else вместо elsif и съответно кода е по-кратък с lucas(4 букви на ред :D).Но по този начин всеки низ, подаден на series, който не е нито 'summed', нито 'lucas' моето решение го смяташе с fibonacci.Промених го заради това и така съм го оставил в крайна сметка.Утре сутрин ще поправя нещата 2) и объркващите имена.

Стилиян обнови решението на 15.10.2014 10:28 (преди около 10 години)

def fibonacci(number)
if number <= 2 then 1
else
fibonacci(number - 1) + fibonacci(number - 2)
end
end
def lucas(number)
- if number == 1 then 2
- elsif number == 2 then 1
+ case number
+ when 1 then 2
+ when 2 then 1
else lucas(number - 1) + lucas(number - 2)
end
end
-def helper(number_sequence, number)
- if number_sequence == 'lucas'
+def call_appropriate_method(name_of_sequence, number)
+ if name_of_sequence == 'lucas'
lucas(number)
- elsif number_sequence == 'fibonacci'
+ elsif name_of_sequence == 'fibonacci'
fibonacci(number)
end
end
-def series(number_sequence, number)
- if number_sequence == 'summed'
+def series(name_of_sequence, number)
+ if name_of_sequence == 'summed'
fibonacci(number) + lucas(number)
else
- helper(number_sequence, number)
+ call_appropriate_method(name_of_sequence, number)
end
end

Сори, че не коментирах обратно навреме.

  • name_of_sequence е оk име. Аз бих го кръстил sequence_name.
  • call_appropriate_method не е ok име. :) Можеше да събереш различните случаи в series с case (when - then). Също силно препоръчвам да разгледаш решенията на другите, ще ти даде идеи.

Като изключим това, решението ти е напълно прилично.