Ростислав обнови решението на 13.10.2012 00:53 (преди около 13 години)
+#!/usr/bin/env ruby
+
+class Integer
+ def prime_divisors
+ (2..self.abs).select { |n| self%n == 0 && n.prime? }
+ end
+
+ def prime?
+ (2..self/2).inject(0) { |count, n| count+=1 if self%n == 0; count } == 0
+ end
+end
+
+class Range
+ def fizzbuzz
+ array = []
+ self.each do |n|
+ if n%3 == 0 && n%5 == 0
+ array<<:fizzbuzz
+ elsif n%3 == 0
+ array<<:fizz
+ elsif n%5 == 0
+ array<<:buzz
+ else array<<n
+ end
+ end
+ array
+ end
+end
+
+class Array
+ def densities
+ map { |item| count(item) }
+ end
+end
+
+class Hash
+ def group_values
+ inject({}) { |hash, pair| hash[pair[1]] = [] unless hash[pair[1]]; hash[pair[1]]<<pair[0]; hash }
+ end
+end
Ползвал си ;, което е официално анатемосано в указания, ако държиш да напишеш
(2..self/2).inject(0) { |count, n| count+=1 if self%n == 0; count } == 0
Може би ще изглежда по-добре като
(2..self/2).count { |number| sefl % number == 0 } == 0
Ако разгледаш enumerable ще видиш методи и като all?, които са по-близо до това, което си имал предвид
- Във
fizzbuzzсъщо си имал предвидmapвместо each - Погледни
Hash.new- мисля, чеgroup_valuesще изглежда по-добре без първата част наinjectблока
-
self.е излишен на повечето места - Не поставяш интервали около операторите.
array<<:fizzиn%3изглежда ужасно. Пиши гиarray << :fizzиn % 3. -
inject-а вgroup_valuesе неприятен. Май не ни остана време да го кажем на лекция, но не се прави така. Ако искаш да направиш хеш от масив, по-добре ползвайeach_with_object - Използваш
injectтам, къдетоcountти върши работа - Иван е прав, ако имаш
;, вероятно правиш нещо грешно
