Христо обнови решението на 11.10.2012 22:46 (преди около 12 години)
+class Integer
+ def prime_divisors
+ prime_digits = []
+ (2..self.abs).each do |n|
+ if n.prime? and self % n == 0
+ prime_digits << n
+ end
+ end
+ prime_digits
+ end
+
+ def prime?
+ (2...self).each do |a|
+ if self % a == 0
+ return false
+ end
+ end
+ true
+ end
+end
+
+class Range
+ def fizzbuzz
+ list = []
+ self.each do |a|
+ if a % 3 == 0 and a % 5 == 0
+ list << :fizzbuzz
+ elsif a % 3 == 0
+ list << :fizz
+ elsif a % 5 == 0
+ list << :buzz
+ else
+ list << a
+ end
+ end
+ list
+ end
+end
+
+class Hash
+ def group_values
+ result = Hash.new
+ self.each do |k, v|
+ result[v] ||= []
+ result[v] << k
+ end
+ result
+ end
+end
+
+class Array
+ def densities
+ c = []
+ temp = self.length
+ (0...temp).each do |x|
+ count = 0
+ (0...temp).each do |y|
+ if self[x] ==self[y]
+ count += 1
+ end
+ end
+ c << count
+ end
+ return c
+ end
+end
+
- Когато викаш метод на self, обикновено self се изпуска, защото се подразбира; например
self.abs
→abs
,self.each
→each
и т.н. - prime_digits → prime_numbers или prime_divisors; не са цифри, а числа ;)
- Опитвай да намериш по-добро име на итерационните променливи от
a
:) Дори едноnumber
е по-добро. А променливи с именаc
,temp
и подобни са особено забранени. Още повече, вArray#densities
няма никаква причина да "копираш"length
вtemp
. Махни излишнияreturn
и пробвай да измислиш по-добри имена на променливите. - За имплементацията на
Integer#prime
, хвърли едно око наEnumerable#all?
иany?
(документация) - Не ползвай
Hash.new
(без аргументи) за да правиш хешове; това се ползва само при конструкция на по-особени хешове; за такива по подразбиране се ползва литералният синтаксис{}
.
Иначе, решението ти е прилично :) Ще трябва да си признаеш кой ти е помагал ;)
ахахахаха :) е имаше подпомагане (както си личи) с Хешовете, ама той не е от курса този човек.. така че няма проблем :D С друго освен хешовете няма помощ! Само лошият ме накара да реша densities с хешове за упражнение та да им посвикна малко.. защото са нещо ново за мен (ама не съм го пращал като решение)
Видях забележките ще ги пооправя събота/неделя даже може да пратя на ново решенията