Решение на Втора задача от Делян Лафчиев

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

Към профила на Делян Лафчиев

Резултати

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

Код

class NumberSet
def initialize
@numbers = []
end
def print
puts @numbers
end
def << (number)
i = 0
while i < @numbers.length
if (@numbers[i] == number)
return
end
i += 1
end
@numbers << number
end
def size
@numbers.length
end
def empty?
@numbers.length == 0
end
def [] (filter_type)
match = Proc.new{|x| filter_type.matches_filter x}
@numbers.each {|x| unless match.call x then @numbers.delete x end}
end
end
class Filter
def initialize(&block)
@block = block
end
def matches_filter(number)
@block.call(number)
end
end

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

FFFFF...FFF.FFFFFFFFFFFF

Failures:

  1) NumberSet can store integers
     Failure/Error: expect(numbers).to include and_get_it_as
     NoMethodError:
       undefined method `include?' for #<NumberSet:0xba2d4c30 @numbers=[42]>
     # /tmp/d20141028-18133-1orgyat/spec.rb:171:in `can_store'
     # /tmp/d20141028-18133-1orgyat/spec.rb:3:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  2) NumberSet can store floating point numbers
     Failure/Error: expect(numbers).to include and_get_it_as
     NoMethodError:
       undefined method `include?' for #<NumberSet:0xba2c0ba4 @numbers=[3.14]>
     # /tmp/d20141028-18133-1orgyat/spec.rb:171:in `can_store'
     # /tmp/d20141028-18133-1orgyat/spec.rb:7:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  3) NumberSet can store complex numbers
     Failure/Error: expect(numbers).to include and_get_it_as
     NoMethodError:
       undefined method `include?' for #<NumberSet:0xba2c0028 @numbers=[(0.3+2i)]>
     # /tmp/d20141028-18133-1orgyat/spec.rb:171:in `can_store'
     # /tmp/d20141028-18133-1orgyat/spec.rb:11:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  4) NumberSet can store rational numbers
     Failure/Error: expect(numbers).to include and_get_it_as
     NoMethodError:
       undefined method `include?' for #<NumberSet:0xba25f4d0 @numbers=[(22/7)]>
     # /tmp/d20141028-18133-1orgyat/spec.rb:171:in `can_store'
     # /tmp/d20141028-18133-1orgyat/spec.rb:15:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  5) NumberSet can compare numbers of different types
     Failure/Error: expect(numbers).to include and_get_it_as
     NoMethodError:
       undefined method `include?' for #<NumberSet:0xba25e940 @numbers=[(2/1)]>
     # /tmp/d20141028-18133-1orgyat/spec.rb:171:in `can_store'
     # /tmp/d20141028-18133-1orgyat/spec.rb:19:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  6) NumberSet can filter by complex type
     Failure/Error: can_filter [0.3+2i, 3.14, 11], using: TypeFilter.new(:complex),
     NameError:
       uninitialized constant TypeFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:43:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  7) NumberSet can filter by integer type
     Failure/Error: can_filter [Rational(5, 2), 8.0, 7, Rational(9, 1)], using: TypeFilter.new(:integer),
     NameError:
       uninitialized constant TypeFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:49:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  8) NumberSet can filter by real type
     Failure/Error: can_filter [Rational(5, 2), 8.3, 7], using: TypeFilter.new(:real),
     NameError:
       uninitialized constant TypeFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:55:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  9) NumberSet can filter positive numbers
     Failure/Error: can_filter [Rational(-5, 2), 7.6, 0], using: SignFilter.new(:positive),
     NameError:
       uninitialized constant SignFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:67:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  10) NumberSet can filter non-positive numbers
     Failure/Error: can_filter [Rational(-5, 2), 7.6, 0], using: SignFilter.new(:non_positive),
     NameError:
       uninitialized constant SignFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:73:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  11) NumberSet can filter negative numbers
     Failure/Error: can_filter [Rational(-5, 2), 7.6, 0], using: SignFilter.new(:negative),
     NameError:
       uninitialized constant SignFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:79:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  12) NumberSet can filter non-negative numbers
     Failure/Error: can_filter [Rational(-5, 2), 7.6, 0], using: SignFilter.new(:non_negative),
     NameError:
       uninitialized constant SignFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:85:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  13) NumberSet can combine two filters with "and" rule
     Failure/Error: filter = SignFilter.new(:non_negative) & Filter.new { |number| number != 0 }
     NameError:
       uninitialized constant SignFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:91:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  14) NumberSet can combine two filters with "or" rule
     Failure/Error: filter = Filter.new { |number| number % 2 == 0 } | Filter.new { |number| number > 5 }
     NoMethodError:
       undefined method `|' for #<Filter:0xba30d184>
     # /tmp/d20141028-18133-1orgyat/spec.rb:98:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  15) NumberSet can combine multiple filters with "and" rule
     Failure/Error: non_negative  = SignFilter.new(:non_negative)
     NameError:
       uninitialized constant SignFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:105:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  16) NumberSet can combine multiple filters with "or" rule
     Failure/Error: negative      = SignFilter.new(:negative)
     NameError:
       uninitialized constant SignFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:116:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  17) NumberSet can combine multiple filters with "and" and "or" rules
     Failure/Error: negative      = SignFilter.new(:negative)
     NameError:
       uninitialized constant SignFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:126:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  18) NumberSet can combine multiple filters with "and", "or" and parenthesis
     Failure/Error: negative      = SignFilter.new(:negative)
     NameError:
       uninitialized constant SignFilter
     # /tmp/d20141028-18133-1orgyat/spec.rb:136:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  19) NumberSet is enumerable
     Failure/Error: expect(numbers).to be_a Enumerable
       expected #<NumberSet:0xba281ff8 @numbers=[(5/2), 8.0, 7, (9/1)]> to be a kind of Enumerable
     # /tmp/d20141028-18133-1orgyat/spec.rb:149:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

  20) NumberSet returns enumerable of set's contents if no block is given to each
     Failure/Error: expect(numbers.each.to_a.size).to eq [1, 3, 5].size
     NoMethodError:
       undefined method `each' for #<NumberSet:0xba2802e8 @numbers=[1, 3, 5]>
     # /tmp/d20141028-18133-1orgyat/spec.rb:164:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:5:in `block (2 levels) in <top (required)>'

Finished in 0.03799 seconds
24 examples, 20 failures

Failed examples:

rspec /tmp/d20141028-18133-1orgyat/spec.rb:2 # NumberSet can store integers
rspec /tmp/d20141028-18133-1orgyat/spec.rb:6 # NumberSet can store floating point numbers
rspec /tmp/d20141028-18133-1orgyat/spec.rb:10 # NumberSet can store complex numbers
rspec /tmp/d20141028-18133-1orgyat/spec.rb:14 # NumberSet can store rational numbers
rspec /tmp/d20141028-18133-1orgyat/spec.rb:18 # NumberSet can compare numbers of different types
rspec /tmp/d20141028-18133-1orgyat/spec.rb:42 # NumberSet can filter by complex type
rspec /tmp/d20141028-18133-1orgyat/spec.rb:48 # NumberSet can filter by integer type
rspec /tmp/d20141028-18133-1orgyat/spec.rb:54 # NumberSet can filter by real type
rspec /tmp/d20141028-18133-1orgyat/spec.rb:66 # NumberSet can filter positive numbers
rspec /tmp/d20141028-18133-1orgyat/spec.rb:72 # NumberSet can filter non-positive numbers
rspec /tmp/d20141028-18133-1orgyat/spec.rb:78 # NumberSet can filter negative numbers
rspec /tmp/d20141028-18133-1orgyat/spec.rb:84 # NumberSet can filter non-negative numbers
rspec /tmp/d20141028-18133-1orgyat/spec.rb:90 # NumberSet can combine two filters with "and" rule
rspec /tmp/d20141028-18133-1orgyat/spec.rb:97 # NumberSet can combine two filters with "or" rule
rspec /tmp/d20141028-18133-1orgyat/spec.rb:104 # NumberSet can combine multiple filters with "and" rule
rspec /tmp/d20141028-18133-1orgyat/spec.rb:114 # NumberSet can combine multiple filters with "or" rule
rspec /tmp/d20141028-18133-1orgyat/spec.rb:124 # NumberSet can combine multiple filters with "and" and "or" rules
rspec /tmp/d20141028-18133-1orgyat/spec.rb:134 # NumberSet can combine multiple filters with "and", "or" and parenthesis
rspec /tmp/d20141028-18133-1orgyat/spec.rb:144 # NumberSet is enumerable
rspec /tmp/d20141028-18133-1orgyat/spec.rb:159 # NumberSet returns enumerable of set's contents if no block is given to each

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

Делян обнови решението на 27.10.2014 16:02 (преди около 10 години)

+class NumberSet
+
+ def initialize
+ @numbers = []
+ end
+
+ def print
+ puts @numbers
+ end
+
+ def << (number)
+ i = 0
+ while i < @numbers.length
+ if (@numbers[i] == number)
+ return
+ end
+ i += 1
+ end
+ @numbers << number
+ end
+
+ def size
+ @numbers.length
+ end
+
+ def empty?
+ @numbers.length == 0
+ end
+
+ def [] (filter_type)
+ match = Proc.new{|x| filter_type.matches_filter x}
+ @numbers.each {|x| unless match.call x then @numbers.delete x end}
+ end
+
+end
+
+class Filter
+ def initialize(&block)
+ @block = block
+ end
+
+ def matches_filter(number)
+ @block.call(number)
+ end
+
+end