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

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

Към профила на Ростислав Градинаров

Резултати

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

Код

#!/usr/bin/env ruby
class Array
def to_hash ()
my_hash = Hash[*self.flatten]
puts my_hash
end
def subarray_count(subarray)
if subarray == []
puts "Invalid argument!"
elsif subarray == self
puts 1
else
count = 0
0.step(self.length, 1) do |i|
if self.slice(i, 2) == subarray
count+=1
end
end
puts count
end
end
def occurences_count ()
my_hash = Hash.new(0)
self.each do |i|
my_hash[i]+=1
end
puts my_hash
end
def index_by ()
copy = []
0.step(self.length, 1) do |i|
copy<<yield(self[i])
end
my_hash = Hash[*copy.zip(self).flatten]
puts my_hash
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"}
FFF{:something=>nil}
F{nil=>nil, false=>false}
F3
F2
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-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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')
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111025-2903-jg51fh/spec.rb:33:in `block (3 levels) in <top (required)>'
     # /tmp/d20111025-2903-jg51fh/solution.rb:37:in `block in index_by'
     # /tmp/d20111025-2903-jg51fh/solution.rb:36:in `step'
     # /tmp/d20111025-2903-jg51fh/solution.rb:36:in `index_by'
     # /tmp/d20111025-2903-jg51fh/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)
     NoMethodError:
       undefined method `%' for nil:NilClass
     # /tmp/d20111025-2903-jg51fh/spec.rb:37:in `block (3 levels) in <top (required)>'
     # /tmp/d20111025-2903-jg51fh/solution.rb:37:in `block in index_by'
     # /tmp/d20111025-2903-jg51fh/solution.rb:36:in `step'
     # /tmp/d20111025-2903-jg51fh/solution.rb:36:in `index_by'
     # /tmp/d20111025-2903-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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-jg51fh/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.01587 seconds
17 examples, 17 failures

Failed examples:

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

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

Ростислав обнови решението на 24.10.2011 00:47 (преди над 12 години)

+#!/usr/bin/env ruby
+
+class Array
+
+ def to_hash ()
+ my_hash = Hash[*self.flatten]
+ puts my_hash
+ end
+
+ def subarray_count(subarray)
+ if subarray == []
+ puts "Invalid argument!"
+ elsif subarray == self
+ puts 1
+ else
+ count = 0
+ 0.step(self.length, 1) do |i|
+ if self.slice(i, 2) == subarray
+ count+=1
+ end
+ end
+ puts count
+ end
+ end
+
+ def occurences_count ()
+ my_hash = Hash.new(0)
+ self.each do |i|
+ my_hash[i]+=1
+ end
+ puts my_hash
+ end
+
+ def index_by ()
+ copy = []
+ 0.step(self.length, 1) do |i|
+ copy<<yield(self[i])
+ end
+ my_hash = Hash[*copy.zip(self).flatten]
+ puts my_hash
+ end
+
+end