Решение на Първа задача от Димитър Керанов

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

Към профила на Димитър Керанов

Резултати

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

Код

class Hash
def group_values
result = Hash.new { |hash, key| hash[key] = [] }
each { |key, value| result[value] << key }
result
end
end
class Array
def densities
result = []
count_density = Hash.new { |hash, key| hash[key] = 0 }
each { |item| count_density[item] += 1 }
each { |item| result << count_density[item] }
result
end
end
class Range
def fizzbuzz
collect { |item| check_division item }
end
def check_division(n)
if n % 3 == 0 and n % 5 == 0
:fizzbuzz
elsif n % 3 == 0
:fizz
elsif n % 5 == 0
:buzz
else
n
end
end
end
class Integer
def prime?
max = Math.sqrt self
(2..max).each { |n| return false if self % n == 0 }
true
end
def prime_divisors
raise TypeError, "Choose a number different than 0 or 1" if self == 0 or self == 1
result = abs.downto(2).to_a
result.select { |n| n.prime? and self % n == 0 }.sort
end
end

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

........

Finished in 0.00814 seconds
8 examples, 0 failures

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

Димитър обнови решението на 14.10.2012 21:03 (преди над 11 години)

+class Hash
+ def group_values
+ result = Hash.new { |hash, key| hash[key] = Array.new }
+ self.each { |key, value| result[value] << key }
+ result
+ end
+end
+
+class Array
+ def densities
+ result = Array.new
+ helpHash = Hash.new { |hash, key| hash[key] = 0 }
+ self.each { |item| helpHash[item] += 1 }
+ self.each { |item| result << helpHash[item] }
+ result
+ end
+end
+
+class Range
+ def fizzbuzz
+ check_division = lambda do |n|
+ if n % 3 == 0 and n % 5 == 0
+ :fizzbuzz
+ elsif n % 3 == 0
+ :fizz
+ elsif n % 5 == 0
+ :buzz
+ else
+ n
+ end
+ end
+
+ self.collect { |item| check_division.call(item) }
+ end
+end
+
+class Integer
+ def prime?
+ max = Math.sqrt self
+ (2..max).each { |n| return false if self % n == 0 }
+ true
+ end
+
+ def prime_divisors
+ raise TypeError, "Choose a number different than 0 or 1" if self == 0 or self == 1
+ result = Array.new
+ self.abs.downto(2) { |n| result << n if n.prime? and self % n == 0 }
+ result.sort
+ end
+end
  • Никога, ама никога не пиши просто Array.new. Има литерален синтаксис и той е [].
  • self.-а на всичките места, на които си го ползвал, е излишен.
  • helpHash е глупаво име на променлива. Отделно, не е в унисон с конвенциите в Ruby.
  • Нямаш нужда от тази ламбда във #fizzbuzz. Ако не друго, само прави кода по-труде за четене.
  • На едно място можеш да направиш select вместо да конструираш списък на ръка.

Знам ли. Мотивацията ти трябва да бъде, че искаш кода ти да е максимално добър.

Ако искаш да видиш дали ще получиш бонус точки или ще ти вземем точки ако не го оправиш, може провериш :)

Димитър обнови решението на 15.10.2012 00:15 (преди над 11 години)

class Hash
def group_values
- result = Hash.new { |hash, key| hash[key] = Array.new }
- self.each { |key, value| result[value] << key }
+ result = Hash.new { |hash, key| hash[key] = [] }
+ each { |key, value| result[value] << key }
result
end
end
class Array
def densities
- result = Array.new
- helpHash = Hash.new { |hash, key| hash[key] = 0 }
- self.each { |item| helpHash[item] += 1 }
- self.each { |item| result << helpHash[item] }
+ result = []
+ count_density = Hash.new { |hash, key| hash[key] = 0 }
+ each { |item| count_density[item] += 1 }
+ each { |item| result << count_density[item] }
result
end
end
-class Range
+class Range
def fizzbuzz
- check_division = lambda do |n|
- if n % 3 == 0 and n % 5 == 0
- :fizzbuzz
- elsif n % 3 == 0
- :fizz
- elsif n % 5 == 0
- :buzz
- else
- n
- end
+ collect { |item| check_division item }
+ end
+
+ def check_division(n)
+ if n % 3 == 0 and n % 5 == 0
+ :fizzbuzz
+ elsif n % 3 == 0
+ :fizz
+ elsif n % 5 == 0
+ :buzz
+ else
+ n
end
-
- self.collect { |item| check_division.call(item) }
end
end
class Integer
def prime?
max = Math.sqrt self
(2..max).each { |n| return false if self % n == 0 }
true
end
-
+
def prime_divisors
raise TypeError, "Choose a number different than 0 or 1" if self == 0 or self == 1
- result = Array.new
- self.abs.downto(2) { |n| result << n if n.prime? and self % n == 0 }
- result.sort
+ result = abs.downto(2).to_a
+ result.select { |n| n.prime? and self % n == 0 }.sort
end
-end
+end