Решение на Първа задача от Мирослав Крамолински

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

Към профила на Мирослав Крамолински

Резултати

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

Код

# prime_divisors implementation
class Integer
def is_prime? n
half_of_n = n / 2
(2..half_of_n).each do |x|
return false if n % x == 0
end
return true
end
def prime_divisors
result = Array.new([])
half_of_self = abs / 2
(2..half_of_self).each do |x|
if is_prime?(x) == true
result << x if abs % x == 0
end
end
result << abs if result == []
result
end
end
# fizzbuzz implementation
class Range
def fizzbuzz
trace = 0
range = self.to_a
until trace >= range.length
if range[trace] % 3 == 0 and range[trace] % 5 == 0
range[trace] = :fizzbuzz
elsif range[trace] % 3 == 0
range[trace] = :fizz
elsif range[trace] % 5 == 0
range[trace] = :buzz
end
trace += 1
end
range
end
end
# group_values implementation
class Hash
def group_values
result = Hash.new { |hash, key| hash[key] = [] }
self.each { |key, value| result[value] << key }
result
end
end
# densities implementation
class Array
def densities
result = Array.new([])
(0..(length - 1)).each { |x| result << self.count(self[x]) }
result
end
end

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

........

Finished in 0.00942 seconds
8 examples, 0 failures

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

Мирослав обнови решението на 15.10.2012 16:56 (преди около 12 години)

+# prime_divisors implementation
+class Integer
+ def is_prime? n
+ half_of_n = n / 2
+ (2..half_of_n).each do |x|
+ return false if n % x == 0
+ end
+ return true
+ end
+
+ def prime_divisors
+ result = Array.new([])
+ half_of_self = abs / 2
+ (2..half_of_self).each do |x|
+ if is_prime?(x) == true
+ result << x if abs % x == 0
+ end
+ end
+ result << abs if result == []
+ result
+ end
+end
+
+
+# fizzbuzz implementation
+class Range
+ def fizzbuzz
+ trace = 0
+ range = self.to_a
+ until trace >= range.length
+ if range[trace] % 3 == 0 and range[trace] % 5 == 0
+ range[trace] = :fizzbuzz
+ elsif range[trace] % 3 == 0
+ range[trace] = :fizz
+ elsif range[trace] % 5 == 0
+ range[trace] = :buzz
+ end
+ trace += 1
+ end
+ range
+ end
+end
+
+
+# group_values implementation
+class Hash
+ def group_values
+ result = Hash.new { |hash, key| hash[key] = [] }
+ self.each { |key, value| result[value] << key }
+ result
+ end
+end
+
+
+# densities implementation
+class Array
+ def densities
+ result = Array.new([])
+ (0..(length - 1)).each { |x| result << self.count(self[x]) }
+ result
+ end
+end
  • Идентацията ти не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • Хешът, който връщаш на потребителя в group_values има особен страничен ефект и той е, че като човек поиска несъществуващ ключ, ще получи празен списък, вместо nil; това е окей при хешове за вътрешна употреба, но не е окей за хешове, връщани на потребителя
  • Това е невероятно крив начин да направиш празен списък: Array.new([]); прави се така: []
  • Употребата на until в Range#fizzbuzz е ужасно неидиоматична; ползвай map там
  • range[trace] % 3 == 0 and range[trace] % 5 == 0 може да се запише и по-кратичко — range[trace] % 15 == 0... :)
  • trace е доста неподходящо име на променлива
  • return-ът на 7-ми ред е излишен
  • if is_prime?(x) == true се записва като if is_prime?(x)