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

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

Към профила на Генади Самоковаров

Резултати

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

Код

class Array
def to_hash
Hash[*flatten]
end
def index_by(&block)
map(&block).zip(self).to_hash
end
def occurences_count
zip(map{ |i| count(i) }).to_hash
end
def subarray_count(sub)
0.upto(size).map{ |i| slice(i, sub.size) }.delete_if{ |e| e.empty? }.count(sub)
end
end

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

..F...........F.F

Failures:

  1) Array#to_hash works when the keys and values are arrays
     Failure/Error: [[1, [2, 3]], [[4, 5], 6]].to_hash.should eq(1 => [2, 3], [4, 5] => 6)
       
       expected {1=>[2, 3], [4, 5]=>6}
            got {1=>2, 3=>4, 5=>6}
       
       (compared using ==)
       
       Diff:
       @@ -1,2 +1,2 @@
       -{1=>[2, 3], [4, 5]=>6}
       +{1=>2, 3=>4, 5=>6}
     # /tmp/d20111025-2903-1edb6q9/spec.rb:11:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  2) Array#occurences_count returns a hash that defaults to 0 when the key is not present
     Failure/Error: [].occurences_count[:something].should eq 0
       
       expected 0
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1edb6q9/spec.rb:74:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  3) Array#occurences_count returns a hash, that does not change when indexed with a non-occuring element
     Failure/Error: hash['b'].should eq 0
       
       expected 0
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1edb6q9/spec.rb:84:in `block (2 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/homework/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.01844 seconds
17 examples, 3 failures

Failed examples:

rspec /tmp/d20111025-2903-1edb6q9/spec.rb:10 # Array#to_hash works when the keys and values are arrays
rspec /tmp/d20111025-2903-1edb6q9/spec.rb:73 # Array#occurences_count returns a hash that defaults to 0 when the key is not present
rspec /tmp/d20111025-2903-1edb6q9/spec.rb:81 # Array#occurences_count returns a hash, that does not change when indexed with a non-occuring element

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

Генади обнови решението на 18.10.2011 01:33 (преди около 13 години)

+class Array
+ def to_hash
+ Hash[*flatten]
+ end
+
+ def index_by(&block)
+ map(&block).zip(self).to_hash
+ end
+
+ def occurences_count
+ zip(map{ |i| count(i) }).to_hash
+ end
+
+ def subarray_count(sub)
+ 0.upto(size).map{ |i| slice(i, sub.size) }.delete_if{ |e| e.empty? }.count(sub)
+ end
+end

Два проблема имам с map{ |i| count(i) }:

  1. i се ползва за име на целочислена индексна променива; ако искаш да кажеш item, напиши го цялото, не го съкращавай до i никога, понеже е супер объркващо
  2. Поставай интервал между func и блока й, в случая между map и { :)

Точка 2 важи и за нещата в subarray_count.