Решение на Първа задача от Илиян Величков

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

Към профила на Илиян Величков

Резултати

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

Код

class Integer
def prime_divisors
(2..self).to_a.select do |divisor|
if self % divisor == 0
div = (2...divisor).to_a.select { |n| divisor % n == 0 }
div.empty?
end
end
end
end
class Range
def fizzbuzz
ret_arr = []
self.each do |n|
if n % 3 == 0 && n % 5 == 0
ret_arr.push :fizzbuzz
elsif n % 3 == 0
ret_arr.push :fizz
elsif n % 5 == 0
ret_arr.push :buzz
else
ret_arr.push n
end
end
ret_arr
end
end
class Hash
def group_values
swaped = {}
self.each do |key, value|
if swaped.has_key? value and not swaped[value].include? key
swaped[value].push key
else
swaped[value]=[key]
end
end
swaped
end
end
class Array
def densities
ret_arr = []
self.each do |n|
ret_arr.push self.count n
end
ret_arr
end
end

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

.F......

Failures:

  1) Integer#prime_divisors works with negative numbers
     Failure/Error: (-10).prime_divisors.should eq [2, 5]
       
       expected: [2, 5]
            got: []
       
       (compared using ==)
     # /tmp/d20130307-6960-19zv0e8/spec.rb:11:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.00759 seconds
8 examples, 1 failure

Failed examples:

rspec /tmp/d20130307-6960-19zv0e8/spec.rb:10 # Integer#prime_divisors works with negative numbers

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

Илиян обнови решението на 13.10.2012 22:18 (преди около 12 години)

+class Integer
+ def prime_divisors
+ (2..self).to_a.select do |divisor|
+ if self % divisor == 0
+ div = (2...divisor).to_a.select { |n| divisor % n == 0 }
+ div.empty?
+ end
+ end
+ end
+end
+
+class Range
+ def fizzbuzz
+ ret_arr = []
+ self.each do |n|
+ if n % 3 == 0 && n % 5 == 0
+ ret_arr.push :fizzbuzz
+ elsif n % 3 == 0
+ ret_arr.push :fizz
+ elsif n % 5 == 0
+ ret_arr.push :buzz
+ else
+ ret_arr.push n
+ end
+ end
+ ret_arr
+ end
+end
+
+class Hash
+ def group_values
+ swaped = {}
+ self.each do |key, value|
+ if swaped.has_key? value and not swaped[value].include? key
+ swaped[value].push key
+ else
+ swaped[value]=[key]
+ end
+ end
+ swaped
+ end
+end
+
+class Array
+ def densities
+ ret_arr = []
+ self.each do |n|
+ ret_arr.push self.count n
+ end
+ ret_arr
+ end
+end
  • Идентацията ти е притеснително неправилна (може би използваш tab?) - щом го забелязвам аз, @Стефан ще получи удар :)
  • select работи достатъчно успешно и върху Range, спокойно можеш да си спестиш to_a в (2...divisor).to_a.select
  • Слагай си нормални имена на променливите
  • При тази организация не виждам причина и да си присвояваш масива(div) във временна променлива
  • Във fizbuzz си искал да напишеш map. В densities също.
  • Удар не, но идентацията ти определено е омазана. Което за тази задача струва една точка.
  • ret_arr е много глупаво име на променлива. Дори го има на две места. Първо, има съкращения. Второ, можеш просто да го кръстиш result.
  • n % 3 == 0 and n % 5 == 0 се записва като n % 15 == 0
  • Няма дума swaped. Правописните грешки в променливите изглеждат мърляво.
  • В един блок имаш променливи div и divisor. Това е ужасно.