Адриан обнови решението на 15.10.2012 01:18 (преди около 12 години)
+class Integer
+ def prime_divisors
+ num=self.abs
+ if ( (num!=1) and (num!=0) )
+ results=[]
+ (2..num).each do |n|
+ if (num%n==0)
+ num=(num/n)
+ results.push(n)
+ end
+ end
+ print results
+ else
+ puts 'This Method is not defined for 0 1 and -1'
+ end
+ end
+end
+#-1.prime_divisors
+
+class Range
+ def fizzbuzz
+ results=[];
+ if !(self.exclude_end?)
+ self.each do |n|
+ if ( (n%3==0) and (n%5==0))
+ results.push(:fizzbuzz);
+ elsif(n%3==0)
+ results.push(:fizz)
+ elsif(n%5==0)
+ results.push(:buzz);
+ else
+ results.push(n);
+ end
+ end
+ print results
+ else
+ puts 'This method is defined only for double dots (..)';
+ end
+ end
+end
+# (1...27).fizzbuzz
+
+class Hash
+ def group_values
+ result = Hash.new("")
+ self.each_pair do | key, value |
+ if (result.has_key?(value))
+ result[value].push(key)
+ else
+ result[value]=[key]
+ end
+ end
+ print result
+ end
+end
+#{a: 1, b: 2, c: 1}.group_values
+
+class Array
+ def densities
+ results=Array.new
+ counter = Hash.new()
+ self.each do |n|
+ if (counter.has_key?(n))
+ counter[n] += 1
+ else
+ counter[n]=1
+ end
+ end
+ self.each do |n|
+ results.push(counter[n])
+ end
+ print results
+ end
+end
+#[:a, :b, :c].densities
+#[:a, :a, :a].densities
+#[:a, :b, :a].densities
- Идентацията и употребата ти на whitespace не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса
- Предпочитай да ползваш
Array#<<
предArray#push
за добавяне на елементи в списък; т.е.some_list << foo
-
fizzbuzz
иdensities
се получават много добре сmap
; допълнително,densities
се прави на един ред, с този код:map { |item| count item }
:) - Това на 45-ти ред нямам никаква идея защо го правиш:
result = Hash.new("")
— за какво ти е хеш с дифолтна стойност на липсващи ключове празен низ? - Тук скобите около условието са абсолютно излишни и се изпускат:
if (result.has_key?(value))
-
Array.new
,Hash.new
и т.н. никога не се ползват в този си вид (без аргументи); винаги се предпочита литералния синтаксис в тези случаи, т.е.[]
,{}
и прочее -
self.
е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция - Избягвай да ползваш метода
puts
по този начин, по който си го ползвал (за грешки); за тази цел има изключения, за които ще говорим по-натам; в случая, условието не изискваше да покривате тези случаи и работата, която си свършил, е излишна (да не говорим, че не се прави така). Принципно, добре е да се стремиш да не извършваш излишна работа, тъй като повече код = повече проблеми във всяко едно отношение :) - Обърни внимание на решенията на твои колеги, на които сме дали бонус точки, както и на примерното решение, което ние показахме на тази задача и ако имаш въпроси, ни пиши