Решение на Втора задача от Емилиян Янков

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

Към профила на Емилиян Янков

Резултати

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

Код

class Collection
def initialize list,dict
@collection =[]
array = list.split(/$/)
array.each do |elem|
temp = Song.new(elem.split(/\.\s+/))
if dict[temp.artist]
temp.add_tags(dict[temp.artist])
end
@collection.push temp
end
end
def find hash
@collection.select {|elem| elem.filter(hash)}
end
end
class Song
def initialize array
@name = array.shift
@artist = array.shift
temp = array[0].split(/,\s/)
@genre = temp.shift
@subgenre = temp.shift
array.shift
if array != []
@tags = array[0].split(/,\s/)
else @tags = []
end
@tags.push @subgenre
@tags.push @genre
end
attr_accessor :name, :genre, :artist, :subgenre, :tags
def add_tags list
tags.concat list
end
def filter hash
temp = true
hash.each do |key, value|
if key == :name and value != name {temp = false}
end
if key == :artist and value != artist {temp = false}
end
if key == :tags and Array.try_convert(value)==nil and @tags[0]!=value
temp=false
end
if key == :tags and Array.try_convert(value)==value and @tags!=value
temp=false
end
if key == :filter and not value.call {temp = false}
end
end
temp
end
def inspect
"#{@artist} #{@name} #{@genre} #{@subgenre} #{@tags}\n"
end
end

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

FFFFFFFFFFFF

Failures:

  1) Collection returns all entries if called without parameters
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/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)>'

  2) Collection can look up songs by artist
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/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)>'

  3) Collection can look up songs by name
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/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)>'

  4) Collection uses the genre and subgenre as tags
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/spec.rb:100:in `song'
     # /tmp/d20111115-13548-bl8izo/spec.rb:49: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) Collection can find songs by tag
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/spec.rb:53: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) Collection can find songs by multiple tags
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/spec.rb:57: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) Collection can find songs that don't have a tag
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/spec.rb:61: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) Collection can filter songs by a lambda
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/spec.rb:65: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) Collection adds the artist tags to the songs
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/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)>'

  10) Collection allows multiple criteria
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/spec.rb:73: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) Collection allows all criteria
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:96:in `songs'
     # /tmp/d20111115-13548-bl8izo/spec.rb:82: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) Collection constructs an object for each song
     Failure/Error: let(:collection) { Collection.new input, additional_tags }
     NoMethodError:
       undefined method `split' for nil:NilClass
     # /tmp/d20111115-13548-bl8izo/solution.rb:27:in `initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `new'
     # /tmp/d20111115-13548-bl8izo/solution.rb:7:in `block in initialize'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `each'
     # /tmp/d20111115-13548-bl8izo/solution.rb:6:in `initialize'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `new'
     # /tmp/d20111115-13548-bl8izo/spec.rb:34:in `block (2 levels) in <top (required)>'
     # /tmp/d20111115-13548-bl8izo/spec.rb:86: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.54766 seconds
12 examples, 12 failures

Failed examples:

rspec /tmp/d20111115-13548-bl8izo/spec.rb:36 # Collection returns all entries if called without parameters
rspec /tmp/d20111115-13548-bl8izo/spec.rb:40 # Collection can look up songs by artist
rspec /tmp/d20111115-13548-bl8izo/spec.rb:44 # Collection can look up songs by name
rspec /tmp/d20111115-13548-bl8izo/spec.rb:48 # Collection uses the genre and subgenre as tags
rspec /tmp/d20111115-13548-bl8izo/spec.rb:52 # Collection can find songs by tag
rspec /tmp/d20111115-13548-bl8izo/spec.rb:56 # Collection can find songs by multiple tags
rspec /tmp/d20111115-13548-bl8izo/spec.rb:60 # Collection can find songs that don't have a tag
rspec /tmp/d20111115-13548-bl8izo/spec.rb:64 # Collection can filter songs by a lambda
rspec /tmp/d20111115-13548-bl8izo/spec.rb:68 # Collection adds the artist tags to the songs
rspec /tmp/d20111115-13548-bl8izo/spec.rb:72 # Collection allows multiple criteria
rspec /tmp/d20111115-13548-bl8izo/spec.rb:76 # Collection allows all criteria
rspec /tmp/d20111115-13548-bl8izo/spec.rb:85 # Collection constructs an object for each song

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

Емилиян обнови решението на 31.10.2011 12:30 (преди около 13 години)

+class Collection
+
+ def initialize list,dict
+ @collection =[]
+ array = list.split(/$/)
+ array.each do |elem|
+ temp = Song.new(elem.split(/\.\s+/))
+ if dict[temp.artist]
+ temp.add_tags(dict[temp.artist])
+ end
+ @collection.push temp
+ end
+ end
+
+ def find hash
+ @collection.select {|elem| elem.filter(hash)}
+ end
+
+end
+
+
+class Song
+
+ def initialize array
+ @name = array.shift
+ @artist = array.shift
+ temp = array[0].split(/,\s/)
+ @genre = temp.shift
+ @subgenre = temp.shift
+ array.shift
+ if array != []
+ @tags = array[0].split(/,\s/)
+ else @tags = []
+ end
+ @tags.push @subgenre
+ @tags.push @genre
+ end
+
+ attr_accessor :name, :genre, :artist, :subgenre, :tags
+
+ def add_tags list
+ tags.concat list
+ end
+
+ def filter hash
+ temp = true
+ hash.each do |key, value|
+ if key == :name and value != name {temp = false}
+ end
+ if key == :artist and value != artist {temp = false}
+ end
+ if key == :tags and Array.try_convert(value)==nil and @tags[0]!=value
+ temp=false
+ end
+ if key == :tags and Array.try_convert(value)==value and @tags!=value
+ temp=false
+ end
+ if key == :filter and not value.call {temp = false}
+ end
+ end
+ temp
+ end
+
+ def inspect
+ "#{@artist} #{@name} #{@genre} #{@subgenre} #{@tags}\n"
+ end
+
+end