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

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

Към профила на Валентин Ейткен

Резултати

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

Код

#!/usr/bin/env ruby
class Integer
def prime_divisors
factors = []
d = 2
tmp = self
while tmp > 1
while tmp % d == 0
factors << d unless factors.last == d
tmp /= d
end
d += 1
end
factors
end
end
class Range
def fizzbuzz
res = []
each do |x|
if x % 3 == 0 and x % 5 == 0
res << :fizzbuzz
elsif x % 3 == 0
res << :fizz
elsif x % 5 == 0
res << :buzz
else
res << x
end
end
res
end
end
class Hash
def group_values
new_hash = Hash.new { |h,k| h[k] = [] }
each do |k, v|
new_hash[v] << k
end
new_hash
end
end
class Array
def densities
freq_tbl = Hash.new(0)
each do |x|
freq_tbl[x] += 1
end
res = []
each do |x|
res << freq_tbl[x]
end
res
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-vsqnt6/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.00756 seconds
8 examples, 1 failure

Failed examples:

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

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

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

+#!/usr/bin/env ruby
+
+class Integer
+ def prime_divisors
+ factors = []
+ d = 2
+
+ tmp = self
+ while tmp > 1
+ while tmp % d == 0
+ factors << d unless factors.last == d
+ tmp /= d
+ end
+ d += 1
+ end
+ factors
+ end
+end
+
+
+class Range
+ def fizzbuzz
+ res = []
+ each do |x|
+ if x % 3 == 0 and x % 5 == 0
+ res << :fizzbuzz
+ elsif x % 3 == 0
+ res << :fizz
+ elsif x % 5 == 0
+ res << :buzz
+ else
+ res << x
+ end
+ end
+ res
+ end
+end
+
+
+class Hash
+ def group_values
+ new_hash = Hash.new { |h,k| h[k] = [] }
+ each do |k, v|
+ new_hash[v] << k
+ end
+ new_hash
+ end
+end
+
+
+class Array
+ def densities
+ freq_tbl = Hash.new(0)
+ each do |x|
+ freq_tbl[x] += 1
+ end
+
+ res = []
+ each do |x|
+ res << freq_tbl[x]
+ end
+ res
+ end
+end
  • Давай смислени имена на променливите (tmp/d не влизат в тази категория)
  • Във fizzbuzz си искал да използваш map
  • Какво искаш да постигнеш с Hash в densities (може би спестяваш някое преброяване, но курса не гони performance). Искал си да го завършиш с map { |element| freq_tbl[element] }