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

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

Към профила на Йордан Петров

Резултати

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

Код

class Integer
def is_prime?
(2...self).each { |n| return false if self % n == 0 }
true
end
def prime_divisors
pd_array = []
(2..abs).each { |n| pd_array << n if self % n == 0 and n.is_prime? }
pd_array
end
end
class Range
def fizzbuzz
fb_aray = []
each do |n|
if n % 3 == 0 and n % 5 == 0
fb_aray << :fizzbuzz
elsif n % 3 == 0
fb_aray << :fizz
elsif n % 5 == 0
fb_aray << :buzz
else
fb_aray << n
end
end
fb_aray
end
end
class Hash
def group_values
gv_hash = Hash.new { |hash, key| hash[key] = Array.new }
each { |key, value| gv_hash[value] << key }
gv_hash
end
end
class Array
def times_found element
counter = 0
each { |n| counter += 1 if element == n }
counter
end
def densities
densities_array = []
each { |n| densities_array << times_found(n) }
densities_array
end
end

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

........

Finished in 0.00721 seconds
8 examples, 0 failures

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

Йордан обнови решението на 15.10.2012 11:58 (преди около 12 години)

+class Integer
+ def is_prime?
+ (2...self).each { |n| return false if self % n == 0 }
+ true
+ end
+
+ def prime_divisors
+ pd_array = []
+ (2..abs).each { |n| pd_array << n if self % n == 0 and n.is_prime? }
+ pd_array
+ end
+end
+
+class Range
+ def fizzbuzz
+ fb_aray = []
+ each do |n|
+ if n % 3 == 0 and n % 5 == 0
+ fb_aray << :fizzbuzz
+ elsif n % 3 == 0
+ fb_aray << :fizz
+ elsif n % 5 == 0
+ fb_aray << :buzz
+ else
+ fb_aray << n
+ end
+ end
+ fb_aray
+ end
+end
+
+class Hash
+ def group_values
+ gv_hash = Hash.new { |hash, key| hash[key] = Array.new }
+ each { |key, value| gv_hash[value] << key }
+ gv_hash
+ end
+end
+
+class Array
+ def times_found element
+ counter = 0
+ each { |n| counter += 1 if element == n }
+ counter
+ end
+
+ def densities
+ densities_array = []
+ each { |n| densities_array << times_found(n) }
+ densities_array
+ end
+end
  • Виждам, че има някаква логика в именоването на тези променливи, но все пак pd_array, fb_array, gv_hash и прочее не са много добри имена на променливи; предполагам вече знаеш това, ако си бил на последната лекция
  • prime_divisors става добре със select
  • Array.new, Hash.new и т.н. никога не се ползват в този си вид (без аргументи); винаги се предпочита литералния синтаксис в тези случаи, т.е. [], {} и прочее
  • fizzbuzz и densities се получават много добре с map; допълнително, densities се прави на един ред, с този код: map { |item| count item } :) Тоест, не е имало нужда да имплементираш сам times_found, "вграденият" count вече прави това, което ти трябва
  • Хешът, който връщаш на потребителя в group_values има особен страничен ефект и той е, че като човек поиска несъществуващ ключ, ще получи празен списък, вместо nil; това е окей при хешове за вътрешна употреба, но не е окей за хешове, връщани на потребителя