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

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

Към профила на Гергана Петрова

Резултати

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

Код

class Integer
def prime?
(1...self.abs).inject { |a,b| a*b } % self.abs == self.abs-1
end
def prime_divisors
(2..self.abs).select { |i| self.abs % i == 0 and i.prime? }.sort
end
end
class Range
def fizzbuzz
self.to_a.map do |n|
if n % 15 == 0
:fizzbuzz
elsif n % 3 == 0
:fizz
elsif n % 5 == 0
:buzz
else
n
end
end
end
end
class Hash
def keys_for(value)
self.to_a.select { |k,v| v == value }.map { |k, v| k }
end
def group_values
Hash[self.values.uniq.map { |value| [value, keys_for(value)] }]
end
end
class Array
def densities
self.map { |element| count(element) }
end
end

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

........

Finished in 0.00917 seconds
8 examples, 0 failures

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

Гергана обнови решението на 13.10.2012 20:34 (преди около 12 години)

+class Integer
+ def prime?
+ (1...self.abs).inject { |a,b| a*b } % self.abs == self.abs-1
+ end
+
+ def prime_divisors
+ (2..self.abs).select { |i| self.abs % i == 0 and i.prime? }.sort
+ end
+end
+
+class Range
+ def fizzbuzz
+ self.to_a.map do |n|
+ if n % 15 == 0
+ :fizzbuzz
+ elsif n % 3 == 0
+ :fizz
+ elsif n % 5 == 0
+ :buzz
+ else
+ n
+ end
+ end
+ end
+end
+
+class Hash
+ def keys_for(value)
+ self.to_a.select { |k,v| v == value }.map { |k, v| k }
+ end
+
+ def group_values
+ Hash[self.values.uniq.map { |value| [value, keys_for(value)] }]
+ end
+end
+
+class Array
+ def densities
+ self.map { |element| count(element) }
+ end
+end
  • Нямаш причина да ползваш self.
  • self.to_a.map е ненужно дълъг начин да направиш map (важи и за select/values)
  • Малко странно ми стои конструирането в group_values. Може би ще изглежда по-приятно с някакъв inject по същия уникален масив от стойности.
  • self.map { |element| count(element) } няма нужда от () около element
  • Хаха. Integer#prime? ме забавлява, но не мога да осмисля дали е правилно. Това някаква теорема ли беше?
  • Харесва ми идеята функционалния стил в Hash, но не и начина по който си го направила. Кода щеше да е по-прост, ако беше по-тривиален.
  • Не съм сигурен защо сортираш числата в Integer#prime_divisors. Струва ми се, че ще бъдат подредени във възходящ ред.
  • Можеш да направиш inject(:*) вместо да подаваш блок.