Решение на Първа задача от Петко Борджуков

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

Към профила на Петко Борджуков

Резултати

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

Код

class Integer
def prime?
return false if abs < 2
(2..Math.sqrt(abs)).all? { |divisor| abs % divisor != 0 }
end
def prime_divisors
(2..abs).select { |divisor| divisor.prime? && abs % divisor == 0 }
end
end
class Range
def fizzbuzz
map do |divident|
next :fizzbuzz if divident % 15 == 0
next :buzz if divident % 5 == 0
next :fizz if divident % 3 == 0
divident
end
end
end
class Hash
def group_values
keys.group_by { |key| self[key] }
end
end
class Array
def densities
map { |element| count element }
end
end

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

........

Finished in 0.00833 seconds
8 examples, 0 failures

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

Петко обнови решението на 10.10.2012 12:55 (преди над 11 години)

+require "prime"
+
+class Integer
+ def prime_divisors
+ Prime.prime_division(self).collect{|element| element.first}
+ end
+end

Петко обнови решението на 10.10.2012 13:03 (преди над 11 години)

require "prime"
class Integer
def prime_divisors
- Prime.prime_division(self).collect{|element| element.first}
+ Prime.prime_division(self.abs).collect{|element| element.first}
end
end

Петко обнови решението на 10.10.2012 13:04 (преди над 11 години)

require "prime"
class Integer
def prime_divisors
- Prime.prime_division(self.abs).collect{|element| element.first}
+ Prime.prime_division(self.abs).collect{|element| element.first}
end
end

Петко обнови решението на 10.10.2012 13:34 (преди над 11 години)

require "prime"
class Integer
def prime_divisors
Prime.prime_division(self.abs).collect{|element| element.first}
end
+end
+
+class Range
+ def fizzbuzz
+ self.map do |number|
+ if number.modulo(15) == 0
+ :fizzbuzz
+ elsif number.modulo(3) == 0
+ :fizz
+ elsif number.modulo(5) == 0
+ :buzz
+ else
+ number
+ end
+ end
+ end
end

Петко обнови решението на 10.10.2012 13:58 (преди над 11 години)

require "prime"
class Integer
def prime_divisors
- Prime.prime_division(self.abs).collect{|element| element.first}
+ Prime.prime_division(self.abs).map{|element| element.first}
end
end
class Range
def fizzbuzz
- self.map do |number|
+ map do |number|
if number.modulo(15) == 0
:fizzbuzz
elsif number.modulo(3) == 0
:fizz
elsif number.modulo(5) == 0
:buzz
else
number
end
end
+ end
+end
+
+class Hash
+ def group_values
+ keys.group_by {|key| self[key]}
end
end

Петко обнови решението на 10.10.2012 14:02 (преди над 11 години)

require "prime"
class Integer
def prime_divisors
Prime.prime_division(self.abs).map{|element| element.first}
end
end
class Range
def fizzbuzz
map do |number|
if number.modulo(15) == 0
:fizzbuzz
elsif number.modulo(3) == 0
:fizz
elsif number.modulo(5) == 0
:buzz
else
number
end
end
end
end
class Hash
def group_values
keys.group_by {|key| self[key]}
end
+end
+
+class Array
+ def densities
+ map{|element| count(element)}
+ end
end

Петко обнови решението на 10.10.2012 14:04 (преди над 11 години)

+# encoding: utf-8
+
require "prime"
class Integer
def prime_divisors
Prime.prime_division(self.abs).map{|element| element.first}
end
end
class Range
def fizzbuzz
map do |number|
if number.modulo(15) == 0
:fizzbuzz
elsif number.modulo(3) == 0
:fizz
elsif number.modulo(5) == 0
:buzz
else
number
end
end
end
end
class Hash
def group_values
keys.group_by {|key| self[key]}
end
end
class Array
def densities
map{|element| count(element)}
end
end

Петко обнови решението на 10.10.2012 14:49 (преди над 11 години)

# encoding: utf-8
require "prime"
class Integer
def prime_divisors
Prime.prime_division(self.abs).map{|element| element.first}
end
end
class Range
def fizzbuzz
map do |number|
- if number.modulo(15) == 0
+ if number % 15 == 0
:fizzbuzz
- elsif number.modulo(3) == 0
+ elsif number % 3 == 0
:fizz
- elsif number.modulo(5) == 0
+ elsif number % 5 == 0
:buzz
else
number
end
end
end
end
class Hash
def group_values
keys.group_by {|key| self[key]}
end
end
class Array
def densities
map{|element| count(element)}
end
end

Петко обнови решението на 10.10.2012 15:52 (преди над 11 години)

# encoding: utf-8
require "prime"
class Integer
def prime_divisors
- Prime.prime_division(self.abs).map{|element| element.first}
+ Prime.prime_division(self.abs).map {|element| element.first}
end
end
class Range
def fizzbuzz
map do |number|
if number % 15 == 0
:fizzbuzz
elsif number % 3 == 0
:fizz
elsif number % 5 == 0
:buzz
else
number
end
end
end
end
class Hash
def group_values
keys.group_by {|key| self[key]}
end
end
class Array
def densities
- map{|element| count(element)}
+ map {|element| count(element)}
end
end
  • Много добре!
  • Пренапиши го без prime, моля те. Когато пускаме тестовете, няма да има модул prime. Допълнително, това беше нещо, което трябваше да попиташ на форумите. Ще го добавя в условието.
  • self.-а ти е излишен
  • От вътрешната страна на скобите при подаване на блок се оставят интервали map { |element| count element }. От вътрешната страна на скобите при хеш не се - {:foo => 1, :bar => 2}.

Петко обнови решението на 10.10.2012 19:15 (преди над 11 години)

# encoding: utf-8
require "prime"
class Integer
def prime_divisors
- Prime.prime_division(self.abs).map {|element| element.first}
+ Prime.prime_division(abs).map { |element| element.first }
end
end
class Range
def fizzbuzz
map do |number|
if number % 15 == 0
:fizzbuzz
elsif number % 3 == 0
:fizz
elsif number % 5 == 0
:buzz
else
number
end
end
end
end
class Hash
def group_values
- keys.group_by {|key| self[key]}
+ keys.group_by { |key| self[key] }
end
end
class Array
def densities
- map {|element| count(element)}
+ map { |element| count element }
end
end

Петко обнови решението на 11.10.2012 00:40 (преди над 11 години)

# encoding: utf-8
-require "prime"
-
class Integer
+ def prime?
+ return false if abs < 2
+ (2..Math.sqrt(abs)).each { |number| return false if abs % number == 0 }
+ true
+ end
+
def prime_divisors
- Prime.prime_division(abs).map { |element| element.first }
+ (2..abs).select { |number| number.prime? && abs % number == 0}
end
end
class Range
def fizzbuzz
map do |number|
if number % 15 == 0
:fizzbuzz
elsif number % 3 == 0
:fizz
elsif number % 5 == 0
:buzz
else
number
end
end
end
end
class Hash
def group_values
keys.group_by { |key| self[key] }
end
end
class Array
def densities
map { |element| count element }
end
-end
+end

Петко обнови решението на 11.10.2012 00:42 (преди над 11 години)

# encoding: utf-8
class Integer
def prime?
return false if abs < 2
(2..Math.sqrt(abs)).each { |number| return false if abs % number == 0 }
true
end
def prime_divisors
- (2..abs).select { |number| number.prime? && abs % number == 0}
+ (2..abs).select { |divisor| divisor.prime? && abs % divisor == 0}
end
end
class Range
def fizzbuzz
map do |number|
if number % 15 == 0
:fizzbuzz
elsif number % 3 == 0
:fizz
elsif number % 5 == 0
:buzz
else
number
end
end
end
end
class Hash
def group_values
keys.group_by { |key| self[key] }
end
end
class Array
def densities
map { |element| count element }
end
end

Петко обнови решението на 11.10.2012 13:08 (преди над 11 години)

# encoding: utf-8
class Integer
def prime?
return false if abs < 2
(2..Math.sqrt(abs)).each { |number| return false if abs % number == 0 }
true
end
def prime_divisors
- (2..abs).select { |divisor| divisor.prime? && abs % divisor == 0}
+ (2..abs).select { |divisor| divisor.prime? && abs % divisor == 0 }
end
end
class Range
def fizzbuzz
- map do |number|
- if number % 15 == 0
- :fizzbuzz
- elsif number % 3 == 0
- :fizz
- elsif number % 5 == 0
- :buzz
- else
- number
- end
+ map do |divident|
+ next :fizzbuzz if divident % 15 == 0
+ next :buzz if divident % 5 == 0
+ next :fizz if divident % 3 == 0
+ divident
end
end
end
class Hash
def group_values
keys.group_by { |key| self[key] }
end
end
class Array
def densities
map { |element| count element }
end
end

Петко обнови решението на 11.10.2012 13:32 (преди над 11 години)

# encoding: utf-8
class Integer
def prime?
return false if abs < 2
- (2..Math.sqrt(abs)).each { |number| return false if abs % number == 0 }
- true
+ (2..Math.sqrt(abs)).all? { |number| abs % number != 0 }
end
def prime_divisors
(2..abs).select { |divisor| divisor.prime? && abs % divisor == 0 }
end
end
class Range
def fizzbuzz
map do |divident|
next :fizzbuzz if divident % 15 == 0
next :buzz if divident % 5 == 0
next :fizz if divident % 3 == 0
divident
end
end
end
class Hash
def group_values
keys.group_by { |key| self[key] }
end
end
class Array
def densities
map { |element| count element }
end
-end
+end

Петко обнови решението на 12.10.2012 11:49 (преди над 11 години)

-# encoding: utf-8
-
class Integer
def prime?
return false if abs < 2
- (2..Math.sqrt(abs)).all? { |number| abs % number != 0 }
+ (2..Math.sqrt(abs)).all? { |divisor| abs % divisor != 0 }
end
def prime_divisors
(2..abs).select { |divisor| divisor.prime? && abs % divisor == 0 }
end
end
class Range
def fizzbuzz
map do |divident|
next :fizzbuzz if divident % 15 == 0
next :buzz if divident % 5 == 0
next :fizz if divident % 3 == 0
divident
end
end
end
class Hash
def group_values
keys.group_by { |key| self[key] }
end
end
class Array
def densities
map { |element| count element }
end
end

Супер!

Имаш две бонус точки от нас. Няколко коментара:

  • 2.upto(abs) е по-добре от (2..abs). Най-вече заради скобите.
  • map-а не е готин с този next. Наистина, кода е по-кратък, отколкото с if/else, но има внезапни излизания от блока. Можеш да мине без тях и кода също щеше да е толкова прост.
  • and и or над && и ||