Решение на Втора задача от Стоян Стоянов

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

Към профила на Стоян Стоянов

Резултати

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

Код

class Song
def initialize(song)
@name = song[0]
@artist = song[1]
@album = song[2]
end
def name
@name
end
def artist
@artist
end
def album
@album
end
end
class Collection
include Enumerable
attr_reader :songs
def initialize(songs)
@songs = songs
end
def names
@songs.map { |song| song.name }
end
def artists
@songs.map { |song| song.artist }
end
def albums
@songs.map { |song| song.album }
end
def Collection.parse(text)
lines = INPUT.split("\n").select { |line| line != "" }
songs = lines.each_slice(3).to_a.map { |element| Song.new(element) }
Collection.new(songs)
end
def each
@songs.each { |song| yield songs }
end
def filter(criteria)
@songs.select { |x| x.send(criteria.type) == criteria.value }
end
end
class Criteria
attr_reader :type, :value
def initialize(type, value)
@type = type
@value = value
end
def Criteria.name(name)
Criteria.new("name", name)
end
def Criteria.artist(artist)
Criteria.new("artist", artist)
end
def Criteria.album(album)
Criteria.new("album", album)
end
end

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

FFFFFFFFFFF

Failures:

  1) Collection can find all the artists in the collection
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:5: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 find all the names of all songs in the collection
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:17: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 find all the albums in the collection
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:30: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 can be filtered by song name
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:44: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 be filtered by song name
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/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)>'

  6) Collection can be filtered by album
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:54: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 return an empty result
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/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)>'

  8) Collection supports a conjuction of filters
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:64: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 supports a disjunction of filters
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/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 supports negation of filters
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/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)>'

  11) Collection can be adjoined with another collection
     Failure/Error: let(:collection) { Collection.parse(SONGS) }
     NameError:
       uninitialized constant Collection::INPUT
     # /tmp/d20130203-23049-zpv3x3/solution.rb:43:in `parse'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:2:in `block (2 levels) in <top (required)>'
     # /tmp/d20130203-23049-zpv3x3/spec.rb:83: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.02191 seconds
11 examples, 11 failures

Failed examples:

rspec /tmp/d20130203-23049-zpv3x3/spec.rb:4 # Collection can find all the artists in the collection
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:16 # Collection can find all the names of all songs in the collection
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:29 # Collection can find all the albums in the collection
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:43 # Collection can be filtered by song name
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:48 # Collection can be filtered by song name
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:53 # Collection can be filtered by album
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:58 # Collection can return an empty result
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:63 # Collection supports a conjuction of filters
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:68 # Collection supports a disjunction of filters
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:77 # Collection supports negation of filters
rspec /tmp/d20130203-23049-zpv3x3/spec.rb:82 # Collection can be adjoined with another collection

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

Стоян обнови решението на 31.10.2012 00:44 (преди около 12 години)

+class Song
+ def initialize(song)
+ @name = song[0]
+ @artist = song[1]
+ @album = song[2]
+ end
+
+ def name
+ @name
+ end
+
+ def artist
+ @artist
+ end
+
+ def album
+ @album
+ end
+end
+
+class Collection
+ include Enumerable
+
+ attr_reader :songs
+
+ def initialize(songs)
+ @songs = songs
+ end
+
+ def names
+ @songs.map { |song| song.name }
+ end
+
+ def artists
+ @songs.map { |song| song.artist }
+ end
+
+ def albums
+ @songs.map { |song| song.album }
+ end
+
+ def Collection.parse(text)
+ lines = INPUT.split("\n").select { |line| line != "" }
+ songs = lines.each_slice(3).to_a.map { |element| Song.new(element) }
+ Collection.new(songs)
+ end
+
+ def each
+ @songs.each { |song| yield songs }
+ end
+
+ def filter(criteria)
+ @songs.select { |x| x.send(criteria.type) == criteria.value }
+
+ end
+end
+
+class Criteria
+ attr_reader :type, :value
+
+ def initialize(type, value)
+ @type = type
+ @value = value
+ end
+
+ def Criteria.name(name)
+ Criteria.new("name", name)
+ end
+
+ def Criteria.artist(artist)
+ Criteria.new("artist", artist)
+ end
+
+ def Criteria.album(album)
+ Criteria.new("album", album)
+ end
+end