Решение на Първа задача от Велина Ташева

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

Към профила на Велина Ташева

Резултати

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

Код

class Array
def to_hash
hash = {}
self.each { |k, v| hash[k] = v}
return hash
end
def index_by(&block)
hash = {}
self.each { |e| hash[yield e] = e }
return hash
end
def subarray_count(subarray)
subarray_length = subarray.length
count = 0
for i in 0..self.length - subarray.length
if self.slice(i, subarray_length) == subarray then
count = count + 1
end
end
return count
end
def occurences_count
freq = self.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
return freq
end
end

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

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

Finished in 0.01409 seconds
17 examples, 0 failures

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

Велина обнови решението на 24.10.2011 16:28 (преди около 13 години)

+class Array
+ def to_hash
+ hash = {}
+ self.each { |k, v| hash[k] = v}
+ return hash
+ end
+
+ def index_by(&block)
+ hash = {}
+ self.each { |e| hash[yield e] = e }
+ return hash
+ end
+
+ def subarray_count(subarray)
+ subarray_length = subarray.length
+ count = 0
+ for i in 0..self.length - subarray.length
+ if self.slice(i, subarray_length) == subarray then
+ count = count + 1
+ end
+ end
+ return count
+ end
+
+ def occurences_count
+ freq = self.inject(Hash.new(0)) { |h,v| h[v] += 1; h }
+ return freq
+ end
+end
  • В Ruby се идентира с 2 интервала; не с 4 интервала, не с табове (дори да са с "ширина 2"), а с два интервала
  • Пропускай експлицитния return, когато не е нужен; например в края на функцията, за да върнеш стойността на променливата x, напиши просто x
  • Няма нужда от експлицитно указан self в случаите на викане на метод в клас, който не завършва на =; например self.each ... е по-добре само като each ...
  • Излишните неща в Ruby не са на почит; излишно е да се ползва then с if, когато тялото на if-а е на следващия ред
  • Слагай интервали, когато изреждаш аргументи на метод/блок; например тук: { |h,v| h[v] += 1; h } е по-добре така: { |h, v| h[v] += 1; h }
  • В index_by няма нужда да взимаш блока, подаван на метода, в променлива (block), която по-долу не ползваш никъде; просто си го викай с yield и толкова