Николай обнови решението на 14.10.2012 23:51 (преди около 12 години)
+#Patch Integer
+class Integer
+ def isPrime?
+ curr = 2
+ while curr < self.abs
+ if self.abs % curr == 0
+ return false
+ else
+ curr += 1
+ end
+ end
+ return true
+ end
+ def prime_divisors
+ curr = 2
+ prime_divs = []
+ while curr <= self.abs
+ if self.abs % curr == 0 and curr.isPrime?
+ prime_divs << curr
+ end
+ curr += 1
+ end
+ return prime_divs
+ end
+end
+
+#Patch Range
+class Range
+ def fizzbuzz
+ fizzBuzzRes = []
+ fizzBuzzMap = lambda do |x|
+ if x % 3 == 0 and x % 5 != 0
+ :fizz
+ elsif x % 5 == 0 and x % 3 != 0
+ :buzz
+ elsif x % 5 == 0 and x % 3 == 0
+ :fizzbuzz
+ else
+ x
+ end
+ end
+
+ self.each do |n|
+ fizzBuzzRes << fizzBuzzMap.call(n)
+ end
+
+ return fizzBuzzRes
+ end
+end
+
+#Path Hash
+class Hash
+ def group_values
+ groupVH = Hash.new {|h,k| h[k] = []}
+ self.each { |key,value| groupVH[value] << key }
+ return groupVH
+ end
+end
+
+#Path Array
+class Array
+ def densities
+ denHash = Hash.new{ |h,k| h[k] = 0 }
+ densArray = []
+ self.each { |x| denHash[x] += 1 }
+ self.each { |x| densArray << denHash[x] }
+ return densArray
+ end
+end
- Не спазваш конвенциите в Ruby. За това вземаме точки.
-
isPrime?
е нечовешки грешно име на метод в Ruby. Има две грешки в него. Едната е, чеis
е излишно. - Идентираш с табулации. Не се прави така.
- Не си кръщавай променливите
curr
. Нищо няма да ти стане, ако я кръстишcurrent
. - Аналогично за
prime_divs
иprime_divisors
. - Променливите в Ruby не са с camelCase.
- Изтърваваш ред моменти да ползваш
map
,select
и компания. -
self.
-а на повечето места е излишен. - Можеш да пренапишеш всичко без
while
цикли и ще се получи по-добре. - Нямаш нужда от lambda в
#fizzbuzz
. Отделно, можеш да ползвашmap
вместоeach
. - Начина, по който си организирал условията си във
fizzbuzz
е глупав. Ако ги пренареиш и опростиш малко, ще се получи по-добре.