Решение на Първа задача от Румен Палетов

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

Към профила на Румен Палетов

Резултати

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

Код

class Integer
def prime_divisors
index = 2
number = self.abs
prime_devisors = []
while index <= number
if index.is_prime == true and number % index == 0
prime_devisors << index
number = number.multiple_division(index)
end
index += 1
end
return prime_devisors
end
def multiple_division(devisor)
number = self
while number % devisor == 0
number /= devisor
end
return number
end
def is_prime
if self == 0 or self == 1
return false
end
index = 2
limit = Math.sqrt(self)
while index <= limit
if self % index == 0
return false
end
index += 1
end
return true
end
def get_fizzbuzz_number
if self % 3 == 0 and self % 5 == 0
return :fizzbuzz
elsif self % 3 == 0
return :fizz
elsif self % 5 == 0
return :buzz
else
return self
end
end
end
class Range
def fizzbuzz
fizzbuzz_list = []
self.each do |element|
fizzbuzz_list << element.get_fizzbuzz_number
end
return fizzbuzz_list
end
end
class Hash
def group_values
grouped_hash = Hash.new{|h, k| h[k] = []}
self.each {|key, value| grouped_hash[value] << key}
return grouped_hash
end
end
class Array
def densities
occurrences_array = []
helperHash = Hash.new{|h, k| h[k] = 0}
self.each {|element| helperHash[element] += 1}
self.each {|element| occurrences_array << helperHash[element]}
return occurrences_array
end
end

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

........

Finished in 0.0075 seconds
8 examples, 0 failures

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

Румен обнови решението на 15.10.2012 01:40 (преди около 12 години)

+class Integer
+ def prime_divisors
+ index = 2
+ number = self.abs
+ prime_devisors = []
+ while index <= number
+ if index.is_prime == true and number % index == 0
+ prime_devisors.push(index)
+ while number % index == 0
+ number /= index
+ end
+ end
+ index += 1
+ end
+ return prime_devisors
+ end
+
+ def is_prime
+ if self == 0 or self == 1
+ return false
+ end
+
+ index = 2
+ limit = Math.sqrt(self)
+ while index <= limit
+ if self % index == 0
+ return false
+ end
+ index += 1
+ end
+ return true
+ end
+end

Румен обнови решението на 15.10.2012 01:50 (преди около 12 години)

class Integer
def prime_divisors
index = 2
number = self.abs
prime_devisors = []
while index <= number
if index.is_prime == true and number % index == 0
prime_devisors.push(index)
- while number % index == 0
- number /= index
- end
+ number = number.multiple_division(index)
end
index += 1
end
return prime_devisors
+ end
+
+ def multiple_division(devisor)
+ number = self
+ while number % devisor == 0
+ number /= devisor
+ end
+ return number
end
def is_prime
if self == 0 or self == 1
return false
end
index = 2
limit = Math.sqrt(self)
while index <= limit
if self % index == 0
return false
end
index += 1
end
return true
end
end

Румен обнови решението на 15.10.2012 02:16 (преди около 12 години)

class Integer
def prime_divisors
index = 2
number = self.abs
prime_devisors = []
while index <= number
if index.is_prime == true and number % index == 0
prime_devisors.push(index)
number = number.multiple_division(index)
end
index += 1
end
return prime_devisors
end
def multiple_division(devisor)
number = self
while number % devisor == 0
number /= devisor
end
return number
end
def is_prime
if self == 0 or self == 1
return false
end
index = 2
limit = Math.sqrt(self)
while index <= limit
if self % index == 0
return false
end
index += 1
end
return true
end
+
+ def get_fizzbuzz_number
+ if self % 3 == 0 and self % 5 == 0
+ return :fizzbuzz
+ elsif self % 3 == 0
+ return :fizz
+ elsif self % 5 == 0
+ return :buzz
+ else
+ return self
+ end
+ end
+end
+
+class Range
+ def fizzbuzz
+ fizzbuzz_list = []
+ self.each do |element|
+ fizzbuzz_list.push(element.get_fizzbuzz_number)
+ end
+ return fizzbuzz_list
+ end
end

Румен обнови решението на 15.10.2012 03:34 (преди около 12 години)

class Integer
def prime_divisors
index = 2
number = self.abs
prime_devisors = []
while index <= number
if index.is_prime == true and number % index == 0
- prime_devisors.push(index)
+ prime_devisors << index
number = number.multiple_division(index)
end
index += 1
end
return prime_devisors
end
def multiple_division(devisor)
number = self
while number % devisor == 0
number /= devisor
end
return number
end
def is_prime
if self == 0 or self == 1
return false
end
index = 2
limit = Math.sqrt(self)
while index <= limit
if self % index == 0
return false
end
index += 1
end
return true
end
def get_fizzbuzz_number
if self % 3 == 0 and self % 5 == 0
return :fizzbuzz
elsif self % 3 == 0
return :fizz
elsif self % 5 == 0
return :buzz
else
return self
end
end
end
class Range
def fizzbuzz
fizzbuzz_list = []
self.each do |element|
- fizzbuzz_list.push(element.get_fizzbuzz_number)
+ fizzbuzz_list << element.get_fizzbuzz_number
end
return fizzbuzz_list
end
-end
+end
+
+class Hash
+ def group_values
+ grouped_hash = Hash.new{|h, k| h[k] = []}
+ self.each {|key, value| grouped_hash[value] << key}
+ return grouped_hash
+ end
+end
+
+/*
+class Array
+ def count_all_values
+ newArray = []
+ values = {}
+ end
+end
+*/

Румен обнови решението на 15.10.2012 03:45 (преди около 12 години)

class Integer
def prime_divisors
index = 2
number = self.abs
prime_devisors = []
while index <= number
if index.is_prime == true and number % index == 0
prime_devisors << index
number = number.multiple_division(index)
end
index += 1
end
return prime_devisors
end
def multiple_division(devisor)
number = self
while number % devisor == 0
number /= devisor
end
return number
end
def is_prime
if self == 0 or self == 1
return false
end
index = 2
limit = Math.sqrt(self)
while index <= limit
if self % index == 0
return false
end
index += 1
end
return true
end
def get_fizzbuzz_number
if self % 3 == 0 and self % 5 == 0
return :fizzbuzz
elsif self % 3 == 0
return :fizz
elsif self % 5 == 0
return :buzz
else
return self
end
end
end
class Range
def fizzbuzz
fizzbuzz_list = []
self.each do |element|
fizzbuzz_list << element.get_fizzbuzz_number
end
return fizzbuzz_list
end
end
class Hash
def group_values
grouped_hash = Hash.new{|h, k| h[k] = []}
self.each {|key, value| grouped_hash[value] << key}
return grouped_hash
end
end
-/*
class Array
- def count_all_values
- newArray = []
- values = {}
+ def get_occurrences_array
+ occurrences_array = []
+ helperHash = Hash.new{|h, k| h[k] = 0}
+ self.each {|element| helperHash[element] += 1}
+ self.each {|element| occurrences_array << helperHash[element]}
+ return occurrences_array
end
-end
-*/
+end

Румен обнови решението на 15.10.2012 15:58 (преди около 12 години)

class Integer
def prime_divisors
index = 2
number = self.abs
prime_devisors = []
while index <= number
if index.is_prime == true and number % index == 0
prime_devisors << index
number = number.multiple_division(index)
end
index += 1
end
return prime_devisors
end
def multiple_division(devisor)
number = self
while number % devisor == 0
number /= devisor
end
return number
end
def is_prime
if self == 0 or self == 1
return false
end
index = 2
limit = Math.sqrt(self)
while index <= limit
if self % index == 0
return false
end
index += 1
end
return true
end
def get_fizzbuzz_number
if self % 3 == 0 and self % 5 == 0
return :fizzbuzz
elsif self % 3 == 0
return :fizz
elsif self % 5 == 0
return :buzz
else
return self
end
end
end
class Range
def fizzbuzz
fizzbuzz_list = []
self.each do |element|
fizzbuzz_list << element.get_fizzbuzz_number
end
return fizzbuzz_list
end
end
class Hash
def group_values
grouped_hash = Hash.new{|h, k| h[k] = []}
self.each {|key, value| grouped_hash[value] << key}
return grouped_hash
end
end
class Array
- def get_occurrences_array
+ def densities
occurrences_array = []
helperHash = Hash.new{|h, k| h[k] = 0}
self.each {|element| helperHash[element] += 1}
self.each {|element| occurrences_array << helperHash[element]}
return occurrences_array
end
end
  • Идентацията и употребата ти на whitespace не е наред и съгласно предупрежденията ни, ти отнемаме една точка за това; за справка виж ръководството за стил на курса
  • Този метод get_fizzbuzz_number в Integer не е много добра идея, тъй като е monkey patch на вграден клас, който може да бъде избегнат; за справка, виж примерното решение, което ние показахме на последната сбирка, или виж решенията на твои колеги, на които сме дали бонус точки
  • fizzbuzz и densities се получават много добре с map; допълнително, densities се прави на един ред, с този код: map { |item| count item } :)
  • self. е излишно на всички места, на които го ползваш; в такива случаи се изпуска по конвенция
  • Хешът, който връщаш на потребителя в group_values има особен страничен ефект и той е, че като човек поиска несъществуващ ключ, ще получи празен списък, вместо nil; това е окей при хешове за вътрешна употреба, но не е окей за хешове, връщани на потребителя
  • "unbound" цикли в Ruby като while, until и прочее се ползват много рядко — например ако четеш данни по мрежа и не знаеш кога ще свършат; в случаите, в които ти ги ползваш, се предпочитат each, map, select и сродни
  • return пред последния израз в метод е излишен и се изпуска; това важи за ред 21, 37, 59, 67, 77 и целия метод get_fizzbuzz_number