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

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

Към профила на Ангел Ангелов

Резултати

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

Код

require 'bigdecimal'
PHI = (BigDecimal(1) + Math.sqrt(5)) / 2
PSI = 1 - PHI
def series(series_name, n)
case series_name
when 'fibonacci' then ((PHI**n - PSI**n) / Math.sqrt(5)).round
when 'lucas' then (PHI**(n - 1) + PSI**(n - 1)).round
when 'summed' then series('fibonacci', n) + series('lucas', n)
end
end

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

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

Finished in 0.01562 seconds
12 examples, 0 failures

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

Ангел обнови решението на 09.10.2014 22:42 (преди около 10 години)

+PHI = (1 + Math.sqrt(5))/2
+PSI = 1 - PHI
+
+def series(series_name, n)
+ if series_name == 'fibonacci'
+ return ((PHI**n - PSI**n)/Math.sqrt(5)).round
+ elsif series_name == 'lucas'
+ return (PHI**(n - 1) + PSI**(n - 1)).round
+ end
+ series('fibonacci', n) + series('lucas', n)
+end

Ангел обнови решението на 09.10.2014 23:32 (преди около 10 години)

-PHI = (1 + Math.sqrt(5))/2
+require 'bigdecimal'
+
+PHI = (BigDecimal('1') + Math.sqrt(5))/2
PSI = 1 - PHI
def series(series_name, n)
if series_name == 'fibonacci'
return ((PHI**n - PSI**n)/Math.sqrt(5)).round
elsif series_name == 'lucas'
return (PHI**(n - 1) + PSI**(n - 1)).round
end
series('fibonacci', n) + series('lucas', n)
end

Супер решение, само дребни забележки.

  • Конструкторът на BigDecimal със string е доста удобен за десетични дробни константи. За единица можеш да ползваш този с Fixnum.
  • Имаш лек whitespace проблем около един от операторите.
  • Опционално може да експериментираш дали ако сложиш и трите случая в if - elsif - else или case и пропуснеш return-ите няма да изглежда естетически по-добре.

Ангел обнови решението на 10.10.2014 18:31 (преди около 10 години)

require 'bigdecimal'
-PHI = (BigDecimal('1') + Math.sqrt(5))/2
+PHI = (BigDecimal(1) + Math.sqrt(5)) / 2
PSI = 1 - PHI
def series(series_name, n)
- if series_name == 'fibonacci'
- return ((PHI**n - PSI**n)/Math.sqrt(5)).round
- elsif series_name == 'lucas'
- return (PHI**(n - 1) + PSI**(n - 1)).round
+ case series_name
+ when 'fibonacci' then ((PHI**n - PSI**n) / Math.sqrt(5)).round
+ when 'lucas' then (PHI**(n - 1) + PSI**(n - 1)).round
+ else series('fibonacci', n) + series('lucas', n)
end
- series('fibonacci', n) + series('lucas', n)
end

Ангел обнови решението на 14.10.2014 11:43 (преди около 10 години)

require 'bigdecimal'
PHI = (BigDecimal(1) + Math.sqrt(5)) / 2
PSI = 1 - PHI
def series(series_name, n)
case series_name
- when 'fibonacci' then ((PHI**n - PSI**n) / Math.sqrt(5)).round
- when 'lucas' then (PHI**(n - 1) + PSI**(n - 1)).round
- else series('fibonacci', n) + series('lucas', n)
+ when 'fibonacci' then ((PHI**n - PSI**n) / Math.sqrt(5)).round
+ when 'lucas' then (PHI**(n - 1) + PSI**(n - 1)).round
+ else series('fibonacci', n) + series('lucas', n)
end
end

Ангел обнови решението на 14.10.2014 21:02 (преди около 10 години)

require 'bigdecimal'
PHI = (BigDecimal(1) + Math.sqrt(5)) / 2
PSI = 1 - PHI
def series(series_name, n)
case series_name
when 'fibonacci' then ((PHI**n - PSI**n) / Math.sqrt(5)).round
when 'lucas' then (PHI**(n - 1) + PSI**(n - 1)).round
- else series('fibonacci', n) + series('lucas', n)
+ when 'summed' then series('fibonacci', n) + series('lucas', n)
end
end

@Митьо пак се опитва да ви обърка. :)

Иначе сега видях, че малко съм те излъгал. then-овете не са напълно ok, защото има 2 space-a преди 'най-близкия' (т.е. този на 8 ред), а трябваше да е един и после другите да се подравнят спрямо него. :~