Решение на Първа задача от Николай Шегунов

Обратно към всички решения

Към профила на Николай Шегунов

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 8 успешни тест(а)
  • 0 неуспешни тест(а)

Код

#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

Лог от изпълнението

........

Finished in 0.01262 seconds
8 examples, 0 failures

История (1 версия и 1 коментар)

Николай обнови решението на 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 е глупав. Ако ги пренареиш и опростиш малко, ще се получи по-добре.