Решение на Първа задача от Мария Гроздева

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

Към профила на Мария Гроздева

Резултати

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

Код

class Array
# Ex.1
def to_hash
output = Hash.new
self.each do |x|
output[x[0]] = x[1]
end
puts output
end
# Ex.2
def index_by( &block )
output = Hash.new
self.each do |x|
output[block.(x)] = x
end
puts output
end
# Ex.3 - ne raboti osobeno :(#
def subarray_count(subarray)
if subarray.length > self.length
puts 0
else
puts self.combination(subarray.length).to_a.count(subarray)
end
end
# Ex.4
def occurences_count
output = Hash.new(0)
self.each do |x|
output[x] = self.count(x)
end
puts output
end
end

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

{:one=>1, :two=>2}
F{1=>3, 3=>4}
F{1=>[2, 3], [4, 5]=>6}
F{}
F{nil=>"nil", true=>"true", false=>"false"}
F{"Coltrane"=>"John Coltrane", "Davis"=>"Miles Davis"}
F{1=>41}
F{}
F{nil=>nil, false=>false}
F10
F3
F0
F0
F{:foo=>2, :bar=>1}
F{}
F{nil=>2, false=>2, true=>1}
F{"a"=>2}
F

Failures:

  1) Array#to_hash converts an array to a hash
     Failure/Error: [[:one, 1], [:two, 2]].to_hash.should eq(one: 1, two: 2)
       
       expected {:one=>1, :two=>2}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:3: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#to_hash uses the last pair when a key is present multiple times
     Failure/Error: [[1, 2], [3, 4], [1, 3]].to_hash.should eq(1 => 3, 3 => 4)
       
       expected {1=>3, 3=>4}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:7: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#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 nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/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)>'

  4) Array#to_hash works on empty arrays
     Failure/Error: [].to_hash.should eq({})
       
       expected {}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:15: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)>'

  5) Array#to_hash works with boolean keys
     Failure/Error: [nil, 'nil'],
       
       expected {nil=>"nil", true=>"true", false=>"false"}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:20: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)>'

  6) Array#index_by indexes the array elemens by a block
     Failure/Error: ['John Coltrane', 'Miles Davis'].index_by { |name| name.split(' ').last }.should eq('Coltrane' => 'John Coltrane', 'Davis' => 'Miles Davis')
       
       expected {"Coltrane"=>"John Coltrane", "Davis"=>"Miles Davis"}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:33: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)>'

  7) Array#index_by takes the last element when multiple elements evaluate to the same key
     Failure/Error: [11, 21, 31, 41].index_by { |n| n % 10 }.should eq(1 => 41)
       
       expected {1=>41}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:37: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)>'

  8) Array#index_by works on empty arrays
     Failure/Error: [].index_by { |n| :something }.should eq({})
       
       expected {}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:41: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)>'

  9) Array#index_by works with false and nil keys
     Failure/Error: [nil, false].index_by { |n| n }.should eq(nil => nil, false => false)
       
       expected {nil=>nil, false=>false}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:45: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)>'

  10) Array#subarray_count(subarray) counts the number of times the argument is present as a sub-array
     Failure/Error: [1, 1, 2, 1, 1, 1].subarray_count([1, 1]).should eq 3
       
       expected 3
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:51: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)>'

  11) Array#subarray_count(subarray) works with arrays with non-numeric keys
     Failure/Error: %w[a b c b c].subarray_count(%w[b c]).should eq 2
       
       expected 2
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:55: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)>'

  12) Array#subarray_count(subarray) work with empty arrays
     Failure/Error: [].subarray_count([1]).should be_zero
     NoMethodError:
       undefined method `zero?' for nil:NilClass
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:59: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)>'

  13) Array#subarray_count(subarray) work when the argument is larger than the array
     Failure/Error: [1].subarray_count([1, 2]).should eq 0
       
       expected 0
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:63: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)>'

  14) Array#occurences_count counts how many times an element is present in an array
     Failure/Error: [:foo, :bar, :foo].occurences_count.should eq(foo: 2, bar: 1)
       
       expected {:foo=>2, :bar=>1}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:69: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)>'

  15) Array#occurences_count returns a hash that defaults to 0 when the key is not present
     Failure/Error: [].occurences_count[:something].should eq 0
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # /tmp/d20111025-2903-1yqpfjk/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)>'

  16) Array#occurences_count works with arrays containing nil and false
     Failure/Error: [nil, false, nil, false, true].occurences_count.should eq(nil => 2, false => 2, true => 1)
       
       expected {nil=>2, false=>2, true=>1}
            got nil
       
       (compared using ==)
     # /tmp/d20111025-2903-1yqpfjk/spec.rb:78: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)>'

  17) Array#occurences_count returns a hash, that does not change when indexed with a non-occuring element
     Failure/Error: hash['b'].should eq 0
     NoMethodError:
       undefined method `[]' for nil:NilClass
     # /tmp/d20111025-2903-1yqpfjk/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.01743 seconds
17 examples, 17 failures

Failed examples:

rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:2 # Array#to_hash converts an array to a hash
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:6 # Array#to_hash uses the last pair when a key is present multiple times
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:10 # Array#to_hash works when the keys and values are arrays
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:14 # Array#to_hash works on empty arrays
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:18 # Array#to_hash works with boolean keys
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:32 # Array#index_by indexes the array elemens by a block
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:36 # Array#index_by takes the last element when multiple elements evaluate to the same key
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:40 # Array#index_by works on empty arrays
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:44 # Array#index_by works with false and nil keys
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:50 # Array#subarray_count(subarray) counts the number of times the argument is present as a sub-array
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:54 # Array#subarray_count(subarray) works with arrays with non-numeric keys
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:58 # Array#subarray_count(subarray) work with empty arrays
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:62 # Array#subarray_count(subarray) work when the argument is larger than the array
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:68 # Array#occurences_count counts how many times an element is present in an array
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:73 # Array#occurences_count returns a hash that defaults to 0 when the key is not present
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:77 # Array#occurences_count works with arrays containing nil and false
rspec /tmp/d20111025-2903-1yqpfjk/spec.rb:81 # Array#occurences_count returns a hash, that does not change when indexed with a non-occuring element

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

Мария обнови решението на 24.10.2011 15:55 (преди над 12 години)

+class Array
+# Ex.1
+ def to_hash
+ output = Hash.new
+ self.each do |x|
+ output[x[0]] = x[1]
+ end
+ puts output
+ end
+# Ex.2
+ def index_by( &block )
+ output = Hash.new
+ self.each do |x|
+ output[block.(x)] = x
+ end
+ puts output
+ end
+# Ex.3 - ne raboti osobeno :(#
+ def subarray_count(subarray)
+ if subarray.length > self.length
+ puts 0
+ else
+ puts self.combination(subarray.length).to_a.count(subarray)
+ end
+ end
+# Ex.4
+ def occurences_count
+ output = Hash.new(0)
+ self.each do |x|
+ output[x] = self.count(x)
+ end
+ puts output
+ end
+end

Ако се абстархираме от извеждането на резултат с "puts" 3 от задачите минават теста . Няма ли поощрение за труда , или трябва да си понесем наказанието, за да си пускаме тестовете следващия път :)

Би трябвало да е станало достатъчно ясно на сбирките, както и от условието на задачата, как трябва даден метод да продуцира резултат (да върне нещо, а не да изведе нещо на стандартния изход (с puts)).

Иначе, аз виждам 17 теста, от които предаденият от теб код не минава нито един. Ти как прецени, че "три от задачите минават теста" и, всъщност, какво точно имаш предвид? Кое минава какво?

Няма проблем за въпроса, разбира се :) А и човек се учи цял живот, така че... :)

Втора задача е налице отдавна, пробвай я, ако все още не си. Ако имаш въпроси — вторник понеделник на лекцията (напр. в междучасието).