Решение на Първа задача от Любомир Ятански

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

Към профила на Любомир Ятански

Резултати

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

Код

class Integer
def prime_divisors
divisors = Array.new
expected_divisor = 2
number = self.abs
while expected_divisor <= number
if number % expected_divisor == 0
divisors << expected_divisor
while number % expected_divisor == 0
number /= expected_divisor
end
else
expected_divisor += 1
end
end
divisors
end
end
class Range
def fizzbuzz
fizzbuzzed = Array.new
self.each do |x|
if x % 15 == 0
fizzbuzzed << :fizzbuzz
elsif x % 5 == 0
fizzbuzzed << :buzz
elsif x % 3 == 0
fizzbuzzed << :fizz
else
fizzbuzzed << x
end
end
fizzbuzzed
end
end
class Hash
def group_values
grouped = Hash.new
self.each do |key, value|
if grouped.key? value
grouped[value] << key
else
grouped = grouped.merge Hash[value, Array[key]]
end
end
grouped
end
end
class Array
def densities
self.collect {|x| self.count(x)}
end
end

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

........

Finished in 0.00716 seconds
8 examples, 0 failures

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

Любомир обнови решението на 15.10.2012 03:10 (преди над 11 години)

+class Integer
+ def prime_divisors
+ divisors = Array.new
+ expected_divisor = 2
+ number = self.abs
+ while expected_divisor <= number
+ if number % expected_divisor == 0
+ divisors << expected_divisor
+ while number % expected_divisor == 0
+ number /= expected_divisor
+ end
+ else
+ expected_divisor += 1
+ end
+ end
+ divisors
+ end
+end
+
+class Range
+ def fizzbuzz
+ fizzbuzzed = Array.new
+ self.each do |x|
+ if x % 15 == 0
+ fizzbuzzed << :fizzbuzz
+ elsif x % 5 == 0
+ fizzbuzzed << :buzz
+ elsif x % 3 == 0
+ fizzbuzzed << :fizz
+ else
+ fizzbuzzed << x
+ end
+ end
+ fizzbuzzed
+ end
+end
+
+class Hash
+ def group_values
+ grouped = Hash.new
+ self.each do |key, value|
+ if grouped.key? value
+ grouped[value] << key
+ else
+ grouped = grouped.merge Hash[value, Array[key]]
+ end
+ end
+ grouped
+ end
+end
+
+class Array
+ def densities
+ self.collect {|x| self.count(x)}
+ end
+end
  • Идентацията и употребата ти на whitespace не е съвсем наред, по-специално около { и } в случай на блок; внимавай, защото за тов ще отнемаме точки занапред; за справка виж ръководството за стил на курса
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • Array.new, Hash.new и т.н. никога не се ползват в този си вид (без аргументи); винаги се предпочита литералния синтаксис в тези случаи, т.е. [], {} и прочее
  • Това grouped = grouped.merge Hash[value, Array[key]] е ужасен начин да напишеш grouped[value] = [key]; ама ужасен... Не искам да го виждам повече :)
  • Предпочитай map пред collect (синоними са, но първото се предпочита)
  • fizzbuzz се получават по-добре с map

Иначе, решението ти не е зле за първи опит ;)