Решение на Първа задача от Георги Христозов

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

Към профила на Георги Христозов

Резултати

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

Код

class Array
def to_hash
self.inject({}) {|result, item| result[item[0]] = item[1]; result}
end
def index_by
self.inject({}) {|result, item| result[yield item] = item; result}
end
def occurences_count
self.inject(Hash.new(0)) {|result, item| result[item] += 1; result }
end
def subarray_count(subarray)
result = 0
(0...self.size).each do |i|
result +=1 if self[i...i+subarray.size] == subarray
end
result
end
end

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

.................

Finished in 0.01615 seconds
17 examples, 0 failures

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

Георги обнови решението на 18.10.2011 12:58 (преди над 12 години)

+class Array
+
+ def to_hash
+ self.inject({}) {|result, item| result[item[0]] = item[1]; result}
+ end
+
+ def index_by
+ self.inject({}) {|result, item| result[yield item] = item; result}
+ end
+
+ def occurences_count
+ self.inject(Hash.new(0)) {|result, item| result[item] += 1; result }
+ end
+
+ def subarray_count(subarray)
+ result = 0
+ (0...self.size).each do |i|
+ result +=1 if self[i...i+subarray.size] == subarray
+ end
+ result
+ end
+
+end

Виждам, че си се влюбил в Enumerable#inject :) Препоръките ми са свързани основно с coding-стила ти:

  • По конвенция, едноредовите блокове с къдрави скоби имат интервали около скобите така: sth { |args| code }
  • Каквато и конвенция да ползваш, прави го консистентно; в occurences_count имаш един интервал преди затварящата } скоба :)
  • И при теб няма нужда от експлицитно указан self в случаите от рода на self.inject ...; skip it!
  • Не оставяй празни редове след class Something и преди съответния му затварящ end

И си по-перфектен :)