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

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

Към профила на Мартин Попов

Резултати

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

Код

class Integer
def prime?
2.upto(pred).all? {|a| remainder(a).nonzero?}
end
def prime_divisors
result = []
2.upto(gcd(0)) do |n|
if n.prime? and remainder(n).zero?
result << n
end
end
result
end
end
class Range
def fizzbuzz_element(n)
if n.remainder(15).zero? then :fizzbuzz
elsif
n.remainder(5).zero? then :buzz
elsif
n.remainder(3).zero? then :fizz
else
n
end
end
def fizzbuzz
result=[]
each do |n|
a=fizzbuzz_element(n)
result<<a
end
result
end
end
class Hash
def group_values_element(n)
result=[]
each_key do |a|
if n == fetch(a) then result<<a
end
end
result
end
def group_values
result = Hash.new()
helper = values
values.each do |a|
a_keys = group_values_element(a)
result.store(a,a_keys)
end
result
end
end
class Array
def density_of_element(n)
result = 0
each do |i|
if n == i then result = result + 1
end
end
result
end
def densities
result = []
each do |i|
result << density_of_element(i)
end
result
end
end

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

........

Finished in 0.02739 seconds
8 examples, 0 failures

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

Мартин обнови решението на 14.10.2012 14:45 (преди над 11 години)

+class Integer
+
+ def prime?
+ 2.upto(pred).all? {|a| remainder(a).nonzero?}
+ end
+
+ def prime_divisors
+ result = []
+ 2.upto(gcd(0)) do |n|
+ if n.prime? and remainder(n).zero?
+ result << n
+ end
+ end
+ result
+ end
+
+end
+
+class Range
+
+ def fizzbuzz_element(n)
+ if n.remainder(15).zero? then :fizzbuzz
+ elsif
+ n.remainder(5).zero? then :buzz
+ elsif
+ n.remainder(3).zero? then :fizz
+ else
+ n
+ end
+ end
+
+ def fizzbuzz
+ result=[]
+ each do |n|
+ a=fizzbuzz_element(n)
+ result<<a
+ end
+ result
+ end
+end
+
+class Hash
+
+ def group_values_element(n)
+ result=[]
+ each_key do |a|
+ if n == fetch(a) then result<<a
+ end
+ end
+ result
+ end
+
+ def group_values
+ result = Hash.new()
+ helper = values
+ values.each do |a|
+ a_keys = group_values_element(a)
+ result.store(a,a_keys)
+ end
+ result
+ end
+
+end
+
+class Array
+
+ def density_of_element(n)
+ result = 0
+ each do |i|
+ if n == i then result = result + 1
+ end
+ end
+ result
+ end
+
+ def densities
+ result = []
+ each do |i|
+ result << density_of_element(i)
+ end
+ result
+ end
+
+end
  • Подравняването ти е под всякаква критика. И не спазваш конвецнии
  • Hash.new() се записва като {}
  • Слагай интервали от двете страни на операторите - result << a
  • a е лошо име за променлива, понеже не значи нищо
  • Многото методи, които си дефинирал не са добра идея. Отвъд четирите, които ние искахме, единствения адекватен е Integer#prime?

Нарушаването на конвенциите ще ти струва 1 точка.

Съгласен съм с критиката, но ми се струва, че при копирането на кода ми се размести подравняването. Другия път ще погледна какво се е получило. Относно методите ми, гледах да нямам големи такива, а за map и select не знаех.

За разместването - такова нещо се случва с текстов редактор, който има настройки да спазва някакво отместване, но не точно такова, каквото ти трябва, и си го коригирш с интервали - може да ти изглежда ок, но щом го прехвърлиш в друга среда се получава боза. И да, първата подобна боза, която съм виждала, беше мое собствено творение :) Та виж си настройките на текстовия редактор, би трябвало да можеш да го сетнеш на каквото ти трябва.