Решение на Първа задача от Денислав Савков

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

Към профила на Денислав Савков

Резултати

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

Код

class Array
def densities
element_count = self.count_elements
map { |x| element_count[x
class Array
def densities
element_count = self.count_elements
map { |x| element_count[x] }
end
def count_elements
result = {}
each do |x|
result[x] ? result[x] = result[x] + 1 : result[x] = 1
end
result
end
end
class Hash
def group_values
result = {}
each do |key,value|
result[value] ? result[value] << key : result[value] = [key]
end
result
end
end
class Integer
def prime_divisors
integer = abs
return[2] if integer == 2
result = []
(2..integer).each { |x| result<< x if x.prime? and self % x == 0 }
result
end
def prime?
divisors = []
(1..self).each { |x| divisors << x if self % x == 0 }
divisors == [1, self]
end
end
class Range
def fizzbuzz
to_a.map { |x| bizzfuzz x }
end
private
def bizzfuzz number
if number % 15 == 0
:fizzbuzz
elsif number % 5 == 0
:buzz
elsif number % 3 == 0
:fizz
else
number
end
end
end

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

/data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/configuration.rb:434:in `require': /tmp/d20130307-6960-1x9ckm9/solution.rb:7: syntax error, unexpected keyword_class, expecting ']' (SyntaxError)
class Array  
     ^
/tmp/d20130307-6960-1x9ckm9/solution.rb:7: class definition in method body
/tmp/d20130307-6960-1x9ckm9/solution.rb:25: class definition in method body
/tmp/d20130307-6960-1x9ckm9/solution.rb:38: class definition in method body
/tmp/d20130307-6960-1x9ckm9/solution.rb:57: class definition in method body
/tmp/d20130307-6960-1x9ckm9/solution.rb:76: syntax error, unexpected $end, expecting '}'
	from /data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/configuration.rb:434:in `block in requires='
	from /data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/configuration.rb:434:in `map'
	from /data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/configuration.rb:434:in `requires='
	from /data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/configuration_options.rb:20:in `block in configure'
	from /data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/configuration_options.rb:19:in `each'
	from /data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/configuration_options.rb:19:in `configure'
	from /data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/command_line.rb:21:in `run'
	from /data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/runner.rb:69:in `run'
	from /data/rails/evans-2012/shared/bundled_gems/ruby/1.9.1/gems/rspec-core-2.11.0/lib/rspec/core/runner.rb:8:in `block in autorun'

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

Денислав обнови решението на 15.10.2012 02:06 (преди около 12 години)

+
+class Array
+
+ def densities
+ element_count = self.count_elements
+ map { |x| element_count[x
+class Array
+
+ def densities
+ element_count = self.count_elements
+ map { |x| element_count[x] }
+ end
+
+ def count_elements
+ result = {}
+ each do |x|
+ result[x] ? result[x] = result[x] + 1 : result[x] = 1
+ end
+ result
+ end
+
+end
+
+
+class Hash
+
+ def group_values
+ result = {}
+ each do |key,value|
+ result[value] ? result[value] << key : result[value] = [key]
+ end
+ result
+ end
+
+end
+
+
+class Integer
+
+ def prime_divisors
+ integer = abs
+ return[2] if integer == 2
+ result = []
+ (2..integer).each { |x| result<< x if x.prime? and self % x == 0 }
+ result
+ end
+
+ def prime?
+ divisors = []
+ (1..self).each { |x| divisors << x if self % x == 0 }
+ divisors == [1, self]
+ end
+
+end
+
+
+class Range
+
+ def fizzbuzz
+ to_a.map { |x| bizzfuzz x }
+ end
+
+ private
+ def bizzfuzz number
+ if number % 15 == 0
+ :fizzbuzz
+ elsif number % 5 == 0
+ :buzz
+ elsif number % 3 == 0
+ :fizz
+ else
+ number
+ end
+ end
+
+end

Деджо, май видя вече, че си омазал copy/paste-a и вероятно няма да ти мине автоматизирания тест :) Но това не е толкова важно, ето малко коментари:

  • densities ти е много близо до идеалното решение, с тази бележка, че вместо да имплементираш count_elements сам, можеше да ползваш вградения метод count... :)
  • Не оставяй празен ред след class X или преди end-а на клас; другите ти употреби на конвенции са окей
  • На ред 60 няма нужда да правиш to_a.map, може направо да викнеш map на обект от тип Range и резултатът ще бъде Array
  • Окей е, че си извел private метод в Range, но името му е малко криво... :)
  • В prime? можеше да циклиш по (2..self - 1) (забележи, че приоритетът на .. е подходящ и няма да има проблем) и съответно в края да провериш дали divisors.empty?; макар че разликата не е голяма, и по твоя начин става
  • В prime_divisors по-подходяща е употребата на select
  • На ред 30 обикновено нещата се записват така: result[value] ||= []; result[value] << key (на два реда)

Като цяло, решението ти е прилично, само да не беше омазал copy/paste-а... :) Нищо — следващия път :)

Да, още не съм усвоил стандартната библиотека :)

За реда след Class, така ми се видя по четимо, но просто трябва да свикна с другия начин.

bizzfuzz беше шега, вероятно to_fizzbuzz или Integer#fizzbuz ще е по добре:)

Айде, чакам следващата :)