Ростислав обнови решението на 13.10.2012 00:53 (преди около 12 години)
+#!/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
ти върши работа - Иван е прав, ако имаш
;
, вероятно правиш нещо грешно