Решение на Първа задача от Христо Хърсев

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

Към профила на Христо Хърсев

Резултати

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

Код

class Integer
def prime_divisors
prime_divisors = []
(2..abs).each do |n|
if n.prime? and self % n == 0
prime_divisors << n
end
end
prime_divisors
end
def prime?
(2...self).all? { |n| self % n != 0 }
end
end
class Range
def fizzbuzz
fizzbuzz = []
each do |number|
if number % 3 == 0 and number % 5 == 0
fizzbuzz << :fizzbuzz
elsif number % 3 == 0
fizzbuzz << :fizz
elsif number % 5 == 0
fizzbuzz << :buzz
else
fizzbuzz << number
end
end
fizzbuzz
end
end
class Hash
def group_values
result = {}
each do |k, v|
result[v] ||= []
result[v] << k
end
result
end
end
class Array
def densities
densities = []
(0...length).each do |x|
count = 0
(0...length).each do |y|
if self[x] == self[y]
count += 1
end
end
densities << count
end
densities
end
end

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

........

Finished in 0.0092 seconds
8 examples, 0 failures

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

Христо обнови решението на 11.10.2012 22:46 (преди над 11 години)

+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.absabs, self.eacheach и т.н.
  • prime_digits → prime_numbers или prime_divisors; не са цифри, а числа ;)
  • Опитвай да намериш по-добро име на итерационните променливи от a :) Дори едно number е по-добро. А променливи с имена c, temp и подобни са особено забранени. Още повече, в Array#densities няма никаква причина да "копираш" length в temp. Махни излишния return и пробвай да измислиш по-добри имена на променливите.
  • За имплементацията на Integer#prime, хвърли едно око на Enumerable#all? и any? (документация)
  • Не ползвай Hash.new (без аргументи) за да правиш хешове; това се ползва само при конструкция на по-особени хешове; за такива по подразбиране се ползва литералният синтаксис {}.

Иначе, решението ти е прилично :) Ще трябва да си признаеш кой ти е помагал ;)

ахахахаха :) е имаше подпомагане (както си личи) с Хешовете, ама той не е от курса този човек.. така че няма проблем :D С друго освен хешовете няма помощ! Само лошият ме накара да реша densities с хешове за упражнение та да им посвикна малко.. защото са нещо ново за мен (ама не съм го пращал като решение)

Видях забележките ще ги пооправя събота/неделя даже може да пратя на ново решенията

Христо обнови решението на 14.10.2012 16:23 (преди над 11 години)

class Integer
def prime_divisors
- prime_digits = []
- (2..self.abs).each do |n|
+ prime_divisors = []
+ (2..abs).each do |n|
if n.prime? and self % n == 0
- prime_digits << n
+ prime_divisors << n
end
end
- prime_digits
+ prime_divisors
end
def prime?
- (2...self).each do |a|
- if self % a == 0
- return false
- end
- end
- true
+ (2...self).all? { |n| self % n != 0 }
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
+ fizzbuzz = []
+ each do |number|
+ if number % 3 == 0 and number % 5 == 0
+ fizzbuzz << :fizzbuzz
+ elsif number % 3 == 0
+ fizzbuzz << :fizz
+ elsif number % 5 == 0
+ fizzbuzz << :buzz
else
- list << a
+ fizzbuzz << number
end
end
- list
+ fizzbuzz
end
end
class Hash
def group_values
- result = Hash.new
- self.each do |k, v|
+ result = {}
+ 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|
+ densities = []
+ (0...length).each do |x|
count = 0
- (0...temp).each do |y|
- if self[x] ==self[y]
+ (0...length).each do |y|
+ if self[x] == self[y]
count += 1
end
end
- c << count
+ densities << count
end
- return c
+ densities
end
-end
-
+end