Явор обнови решението на 13.10.2012 17:17 (преди около 12 години)
+#Първа задача
+class Integer
+ def prime?
+ var = Math.sqrt(self.abs).ceil
+ return true if self == 2
+ (2..var).each do |n|
+ return false if self % n == 0
+ end
+ true
+ end
+
+ def prime_divisors
+ (2..self.abs).to_a.select { |n| n.prime? and (self % n == 0) }
+ end
+end
+
+#Втора задача
+class Range
+ def fizzbuzz
+ self.to_a.map do |n|
+ if (n % 5 == 0) and (n % 3 == 0)
+ n = :fizzbuzz
+ elsif n % 5 == 0
+ n = :buzz
+ elsif n % 3 == 0
+ n = :fizz
+ else
+ n
+ end
+ end
+ end
+end
+
+#Трета задача
+class Hash
+ def group_values
+ hash = {}
+ buff = []
+ self.each do |key, value|
+ unless buff.include? value
+ hash[value] = self.select { |k, v| v == value }.keys
+ buff << value
+ end
+ end
+ hash
+ end
+end
+
+#Четвърта задача
+class Array
+ def densities
+ buff = []
+ self.each { |n| buff << self.count(n) }
+ buff
+ end
+end
- Не разбирам защо правиш
n =
въвfizzbuz
. Ако очакваш това присвояване да промени нещо, грешиш. Изтрий го и метода ти пак ще работи. Ако се чудиш защо - проучи. - Нямаш нужда от
self.
никъде -
n % 3 == 0 and n % 5 == 0
се записва катоn % 15 == 0
- Защо имаш променлива, която се казва
buff
? Речниковото значение на думата е "a stout, dull yellow leather with a velvety surface.". Не виждам логика. Може би си имал предвидbuffer
, обаче в това също не виждам никаква локига, понеже какво буферираш? Мисли повече при даването на имена. - В
Array#densities
можеш да ползвашmap
вместоeach
и ще се получи по-добре. -
prime?
метода ти е сложен. Можеш да минеш сany?
вместо сeach
Ще имам в предвид забележките ,но мисля ,че на #4 и #13 ред self.abs няма как да се избегне(поне не знам как).Също в Hash#group_values променливата buff наистина я ползвам като буфер.
Разбира се, че има как - просто изтрий self.
. Как прочете това, което написах?
Не ползваш променливата като буфер, понеже не буферираш нищо. Просто натрупваш резултатите там. Това не е буфер. Това е просто масив, в който събираш резултати. Което прави името грешно.
Добре, ще се опитам да мисля по-точни имена.Ако не успея, при следващия такъв случай смятам да си кръстя променливата- prosto_masiv_koito_sybira_rezultati :D.
Пробвай.