Решение на Първа задача от Владимир Вутов

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

Към профила на Владимир Вутов

Резултати

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

Код

def series(type, n)
if type === 'fibonacci'
(0..n).inject([1, 0]){|(sum, item)| [item, sum + item]}[0]
elsif type === 'lucas'
(1..n).inject([-1, 2]){|(sum, item)| [item, sum + item]}[0]
else
series('fibonacci', n) + series('lucas', n)
end
end

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

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

Finished in 0.00991 seconds
12 examples, 0 failures

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

Владимир обнови решението на 15.10.2014 16:33 (преди около 10 години)

+def series(type, n)
+ if type === 'fibonacci'
+ (0..n).inject([1, 0]){|(sum, item)| [item, sum + item]}[0]
+ elsif type === 'lucas'
+ (1..n).inject([-1, 2]){|(sum, item)| [item, sum + item]}[0]
+ else
+ series('fibonacci', n) + series('lucas', n)
+ end
+end
+

Имаш стилови проблеми. Непременно се запознай с конвенциите, които ръководството по стил препоръчва. От следващата задача ще отнемаме точки за грубото им неспазване.

  • Не трябва да има два интервала след if-а на ред 2.
  • Ред 3 трябва да се форматира така: (0..n).inject([1, 0]) { |(sum, item)| [item, sum + item] }[0]
  • Тази употреба на inject не ми харесва. Твърде сложно за разбиране ми се струва. Има и по-прости начини да постигнеш същия ефект.
  • Не сравнявай с три равенства. Сравнява се с две: ==. Виж първата презентаця, там е споменато за различните видове сравнения. === е нещо специално, за него ще говорим по-натам.

И, най-важното – не предавай в последния момент, за да можем да ти оставим коментари и да реагираш на тях :)

Исках да използвам,нещо по-различно.Досега Фибоначи,съм правил на С++,PHP,на Матлаб и не ми се искаше да е толкова тривиално затова разучих inject(init),дори го имам решението и с Hash с метода update.Другият път от ранно ще предав.Мерси за feedback-a