Методи обнови решението на 15.10.2012 16:20 (преди около 13 години)
+class Integer
+ def prime?
+ array_of_integers = (2..self.abs/2).to_a
+ array_of_integers.each do |i|
+ if self % i == 0 and i != self
+ return false
+ end
+ end
+ true
+ end
+ def prime_divisors
+ (2..self.abs-1).collect {|n| n if self % n == 0 and n.prime?}.compact.to_a
+ end
+end
+class Range
+ def fizzbuzz
+ s = self.collect do |n|
+ if n % 3 == 0 and n % 5 == 0
+ :fizzbuzz
+ elsif n % 3 == 0
+ :fizz
+ elsif n % 5 == 0
+ :buzz
+ else
+ n
+ end
+ end
+ s.compact.to_a
+ end
+end
+class Hash
+ def group_values
+ result_hash = Hash.new()
+ self.each do |key, value|
+ result_hash[value] = self.collect {|key1, value1| key1 if self[key1] == value}.compact.to_a
+ end
+ result_hash
+ end
+end
+class Array
+ def densities
+ self.collect { |n| self.count(n)}.to_a
+ end
+end
- Идентацията ти не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса
-
self.е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция - На места на един ред си сгъчкал твърде много логика и кодът ти е станал трудно разбираем; това трябва да се избягва
- В
densitiesнямаш нужда отto_aнакрая - Предпочитай
mapпредcollect(синоними са, но първото се предпочита) - В
Range#fizzbuzzможеш спокойно да пропуснеш 28-ми ред - Не разбирам и кавка е тази обсесия да викаш ненужни методи, напр.
compactна няколко места - На 3-4-ти ред не ти трябва да правиш списък, можеш направо да си обхождаш с
eachrange-а -
нещо % 3 == 0 and нещо % 5 == 0може да се запише и по-кратичко —нещо % 15 == 0... :)
Ползвам compact, защото след collect там където условието на "щипките" не се удовлетворява ми добавя елемент null, така ги премахвам. За map вместо collect не се сетих.
Разбираш, че можеш да ползваш select вместо map.compact, нали така?
Да, select звучи по-добре.
