Решение на Първа задача от Даяна Беркова

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

Към профила на Даяна Беркова

Резултати

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

Код

#prime_divisors
def prime?(n)
index = 2
while index <= n / 2
return false if n % index == 0
index += 1
end
true
end
class Integer
def prime_divisors
current = 2
divisors = []
while current <= self.abs / 2
divisors << current if self.abs % current == 0 and prime? current
current += 1
end
divisors << self.abs if divisors.empty?
divisors
end
end
#fizzbuzz
class Range
def fizzbuzz
array = self.to_a
array.each_index do |n|
if array[n] % 15 == 0
array[n] = :fizzbuzz
elsif array[n] % 3 == 0
array[n] = :fizz
elsif array[n] % 5 == 0
array[n] = :buzz
end
end
array
end
end
#group_values
class Hash
def group_values
group = Hash.new { |hash, key| hash[key] = [] }
each_key { |key| group[self[key]] << key }
group
end
end
#densities
class Array
def densities
count_elements = []
each { |n| count_elements << count(n) }
count_elements
end
end

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

........

Finished in 0.00929 seconds
8 examples, 0 failures

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

Даяна обнови решението на 15.10.2012 15:37 (преди над 11 години)

+#prime_divisors
+
+def prime(n)
+ index = 2
+ while index <= n / 2
+ return false if n % index == 0
+ index += 1
+ end
+ true
+end
+
+
+class Integer
+
+ def prime_divisors
+ current = 2
+ divisors = []
+ while current <= self.abs / 2
+ divisors << current if self.abs % current == 0 and prime current
+ current += 1
+ end
+ divisors << self.abs if divisors.empty?
+ divisors
+ end
+end
+
+
+
+
+#fizzbuzz
+
+class Range
+ def fizzbuzz
+ array = self.to_a
+ array.each_index do |n|
+ if array[n] % 15 == 0
+ array[n] = :fizzbuzz
+ elsif array[n] % 3 == 0
+ array[n] = :fizz
+ elsif array[n] % 5 == 0
+ array[n] = :buzz
+ end
+ end
+ array
+ end
+end
+
+
+
+
+
+#group_values
+
+class Hash
+ def group_values
+ group = Hash.new { |hash, key| hash[key] = [] }
+ each_key { |key| group[self[key]] << key }
+ group
+ end
+end
+
+
+
+
+#densities
+
+class Array
+ def densities
+ count_elements = []
+ each { |n| count_elements << count(n) }
+ count_elements
+ end
+end

Даяна обнови решението на 15.10.2012 16:32 (преди над 11 години)

#prime_divisors
-def prime(n)
+def prime?(n)
index = 2
while index <= n / 2
return false if n % index == 0
index += 1
end
true
end
class Integer
def prime_divisors
current = 2
divisors = []
while current <= self.abs / 2
- divisors << current if self.abs % current == 0 and prime current
+ divisors << current if self.abs % current == 0 and prime? current
current += 1
end
divisors << self.abs if divisors.empty?
divisors
end
end
#fizzbuzz
class Range
def fizzbuzz
array = self.to_a
array.each_index do |n|
if array[n] % 15 == 0
array[n] = :fizzbuzz
elsif array[n] % 3 == 0
array[n] = :fizz
elsif array[n] % 5 == 0
array[n] = :buzz
end
end
array
end
end
#group_values
class Hash
def group_values
group = Hash.new { |hash, key| hash[key] = [] }
each_key { |key| group[self[key]] << key }
group
end
end
#densities
class Array
def densities
count_elements = []
each { |n| count_elements << count(n) }
count_elements
end
end

Четимо и консистентно решение, само няколко забележки:

  • Погледни Array#map - ще ти улесни решенията на Range#fizzbuzz и Array#densities, пък и е добре да го знаеш като цяло. В някоя от следващите лекции ще се говори за Enumerable заедно с една друга купчина методи, които ще ти помогнат с итерирането. Доста са полезни.
  • При Range#fizzbuzz решението е по удачно да се ползва Array#each вместо Array#each_index. Трябват ти елементите така или иначе.
  • Екстра новите редове са ОК за това решение, но за следващите такива използвай само по един между методите и класовере. Не оставяй и нови редове след отварянето и преди затварянето на класове.
  • Глобално дефинираният prime? не е добра идея. Скоро ще споменем както става с тези глобално дефинирани методи, но по-доброто решение би било за него да е дефиниран в Integer. Като бонус - current.prime? би се четяло по-добре от prime? current.
  • Като цяло именоването на променливи е добре. Може да избягваш по-широкото на събирателни имена като array. Също така count_elements може да се сметне и за метод, който брои някакви елементи. Ако знаеше за Array#map, можешe да ти сe спести именоването неговото :)