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

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

Към профила на Светлин Николов

Резултати

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

Код

class Integer
def prime_divisors
prime_divisors = []
number = self.abs
(2..number).each do |number_from_range|
if prime?(number_from_range) && number % number_from_range == 0
prime_divisors << number_from_range
end
end
return prime_divisors
end
def prime?(number)
(2..number - 1).each do |number_from_range|
return false if number % number_from_range == 0
end
return true
end
end
class Range
def fizzbuzz
fizzbuzz_array = []
self.each do |generated_number|
if generated_number % 3 == 0 && generated_number % 5 == 0
fizzbuzz_array << :fizzbuzz
elsif generated_number % 5 == 0
fizzbuzz_array << :buzz
elsif generated_number % 3 == 0
fizzbuzz_array << :fizz
else
fizzbuzz_array << generated_number
end
end
return fizzbuzz_array
end
end
class Hash
def group_values
grouped_values_hash = Hash.new{ |hash, key| hash[key] = [] }
self.each { |hash_key, hash_value| grouped_values_hash[hash_value] << hash_key }
return grouped_values_hash
end
end
class Array
def densities
densities_array = []
self.each{ |element| densities_array << get_count_in_array(self, element) }
return densities_array
end
def get_count_in_array(array, element)
element_count = 0
array.each { |n_element| element_count += 1 if n_element === element }
return element_count
end
end

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

........

Finished in 0.00746 seconds
8 examples, 0 failures

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

Светлин обнови решението на 15.10.2012 13:54 (преди около 12 години)

+class Integer
+ def prime_divisors
+ prime_divisors = []
+ number = self.abs
+
+ (2..number).each do |number_from_range|
+ if prime?(number_from_range) && number % number_from_range == 0
+ prime_divisors << number_from_range
+ end
+ end
+
+ return prime_divisors
+ end
+
+ def prime?(number)
+ (2..number - 1).each do |number_from_range|
+ return false if number % number_from_range == 0
+ end
+
+ return true
+ end
+ end
+
+ class Range
+ def fizzbuzz
+ fizzbuzz_array = []
+
+ self.each do |generated_number|
+ if generated_number % 3 == 0 && generated_number % 5 == 0
+ fizzbuzz_array << :fizzbuzz
+ elsif generated_number % 5 == 0
+ fizzbuzz_array << :buzz
+ elsif generated_number % 3 == 0
+ fizzbuzz_array << :fizz
+ else
+ fizzbuzz_array << generated_number
+ end
+ end
+
+ return fizzbuzz_array
+ end
+ end
+
+ class Hash
+ def group_values
+ grouped_values_hash = Hash.new{ |hash, key| hash[key] = [] }
+
+ self.each { |hash_key, hash_value| grouped_values_hash[hash_value] << hash_key }
+
+ return grouped_values_hash
+ end
+ end
+
+ class Array
+ def densities
+ densities_array = []
+
+ self.each{ |element| densities_array << get_count_in_array(self, element) }
+
+ return densities_array
+ end
+
+ def get_count_in_array(array, element)
+ element_count = 0
+
+ array.each { |n_element| element_count += 1 if n_element === element }
+
+ return element_count
+ end
+ end
  • Идентацията и употребата ти на whitespace не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • Хешът, който връщаш на потребителя в group_values има особен страничен ефект и той е, че като човек поиска несъществуващ ключ, ще получи празен списък, вместо nil; това е окей при хешове за вътрешна употреба, но не е окей за хешове, връщани на потребителя
  • fizzbuzz и densities се получават много добре с map; допълнително, densities се прави на един ред, с този код: map { |item| count item } и не е имало голяма нужда да имплементираш сам get_count_in_array :)
  • return пред последния израз в метод е излишен и се изпуска; това важи за редове 12, 20, 40, 50, 60, 68
  • (2..number - 1) може да се запише и така: (2...number), т.е. с non-inclusive range
  • prime_divisors става добре със select