Решение на Първа задача от Йоана Тодорова

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

Към профила на Йоана Тодорова

Резултати

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

Код

def seed_values_for(series_name)
case series_name
when 'fibonacci' then {1 => 1, 2 => 1}
when 'lucas' then {1 => 2, 2 => 1}
end
end
def compute_series(name, number)
seed_values_for(name)[number] ||
compute_series(name, number - 1) + compute_series(name, number - 2)
end
def series(name, number)
if name == 'summed'
compute_series('fibonacci', number) + compute_series('lucas', number)
else
compute_series(name, number)
end
end

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

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

Finished in 0.12419 seconds
12 examples, 0 failures

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

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

+def initial_values_for(type)
+ case type
+ when 'fibonacci' then { 1 => 1, 2 => 1}
+ when 'lucas' then { 1 => 2, 2 => 1 }
+ end
+end
+
+def compute_series(type, number)
+ initial_values_for(type)[number] ||
+ compute_series(type, number-1) + compute_series(type, number-2)
+end
+
+def series(type, number)
+ case type
+ when 'summed'
+ compute_series('fibonacci', number) + compute_series('lucas', number)
+ else compute_series(type, number)
+ end
+end

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

def initial_values_for(type)
case type
- when 'fibonacci' then { 1 => 1, 2 => 1}
+ when 'fibonacci' then { 1 => 1, 2 => 1 }
when 'lucas' then { 1 => 2, 2 => 1 }
end
end
def compute_series(type, number)
initial_values_for(type)[number] ||
compute_series(type, number-1) + compute_series(type, number-2)
end
def series(type, number)
case type
when 'summed'
compute_series('fibonacci', number) + compute_series('lucas', number)
else compute_series(type, number)
end
end
  • Имаш леки проблеми с конвенциите (главно whitespaces), консултирай се със style guide-а.
  • Наложително ли да позваш case, ако имаш само един when и един else?
  • initial_values_for е леко подлъгващо име. Носи импликация, че има някакви първоначални стойности, които се променят. Всеки член на редицата е константа, това че изчислението на другите се базира на първите е имплементационен детайл.
  • fibonacci и lucas са имена на редици, не видове редици. Това е наша грешка, поправихме се :)

Като изключим тези забележки, решението ти ми харесва.

Йоана обнови решението на 09.10.2014 19:13 (преди около 10 години)

-def initial_values_for(type)
- case type
- when 'fibonacci' then { 1 => 1, 2 => 1 }
- when 'lucas' then { 1 => 2, 2 => 1 }
+def seed_values_for(series_name)
+ case series_name
+ when 'fibonacci' then {1 => 1, 2 => 1}
+ when 'lucas' then {1 => 2, 2 => 1}
end
end
-def compute_series(type, number)
- initial_values_for(type)[number] ||
- compute_series(type, number-1) + compute_series(type, number-2)
+def compute_series(name, number)
+ seed_values_for(name)[number] ||
+ compute_series(name, number - 1) + compute_series(name, number - 2)
end
-def series(type, number)
- case type
- when 'summed'
+def series(name, number)
+ if name == 'summed'
compute_series('fibonacci', number) + compute_series('lucas', number)
- else compute_series(type, number)
+ else
+ compute_series(name, number)
end
end