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

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

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

Резултати

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

Код

class Array
def to_hash()
result={}
self.each {|n| result[n[0]] = n[1]}
result
end
def index_by(&block)
result={}
self.each {|n| result[block[n]] = n}
result
end
def subarray_count(sub)
if(self.count < sub.count)
0
else
result = 0
while !self.empty?
if self.last(sub.count) == sub
result += 1
end
self.pop
end
result
end
end
def occurences_count()
result=Hash.new(0)
self.each {|n| result[n]=self.count(n)}
result
end
end

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

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

Finished in 0.01514 seconds
17 examples, 0 failures

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

Димо обнови решението на 21.10.2011 19:01 (преди над 12 години)

+class Array
+ def to_hash()
+ result={}
+ self.each {|n| result[n[0]] = n[1]}
+ result
+ end
+
+ def index_by(&block)
+ result={}
+ self.each {|n| result[block[n]] = n}
+ result
+ end
+
+ def subarray_count(sub)
+ if(self.count < sub.count)
+ 0
+ else
+ result = 0
+ while !self.empty?
+ if self.last(sub.count) == sub
+ result += 1
+ end
+ self.pop
+ end
+ result
+ end
+ end
+
+ def occurences_count()
+ result=Hash.new(0)
+ self.each {|n| result[n]=self.count(n)}
+ result
+ end
+end
  • Whitespace-а ти не е ОК. В Ruby се слагат интервали около знака за присвояване. Например, result = {} и result = Hash.new(0).
  • Няма нужда от скобите на if-а в subarray_count.
  • Вместо да подаваш блок експлицитно в index_by, по-добре просто да правиш yield(n).
  • self. е излишен на всички места.
  • В subarray_count идентацията ти е лоша. 0 трябва да е два интервала по-навътре.
  • while !self.empty? се записва като. until empty?. Допълнително, subarray_count е много лошо написан, понеже изпразва масива, на който е извикан. Това би било доста изненадващо. Ако бях видял това преди да пусна тестовете, щях да добавя няколко, които да проверяват това.
  • За кратки условия, този стил е за предпочитане: result += 1 if last(sub.count) == sub
  • В твоя израз if self.last(sub.count) == sub има два интервала отдясно на ==.
  • Скобите при дефиниране методи без параметри се изпускат. Демек, def to_hash и def occurences_count.