Решение на Втора задача от Николай Стоицев

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

Към профила на Николай Стоицев

Резултати

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

Код

class Collection
def initialize(songs_as_string, artist_tags)
@storage = []
songs_as_string.split("\n").each{ |song|
@storage << Song.new(song)
}
end
def find(criteria)
result = @storage
criteria.each_pair do |key, value|
if key == :tag
result = find_by_tag(result, value)
else
result = result.select{ |song| song.send(key) == value}
end
end
result
end
def find_by_tag(input, tags_arr)
Array(tags_arr).each{ |tag|
input = input.select{ |song| song.tags.include? tag}
}
input
end
end
class Song
attr_accessor :name, :artist, :genre, :subgenre, :tags
def initialize(song_as_string)
attr_array = []
song_as_string.split(".").each { |entry|
attr_array.push entry.lstrip.rstrip
}
@name = attr_array[0]
@artist = attr_array[1]
genre = attr_array[2].split(", ")
@genre = genre[0]
@subgenre = genre[1]
if attr_array[3] != nil
@tags = Array(attr_array[3].split(", "))
end
end
end

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

▸ Покажи лога

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

Николай обнови решението на 31.10.2011 00:50 (преди над 13 години)

▸ Покажи разликите
+class Collection
+
+ def initialize(songs_as_string, artist_tags)
+ @storage = []
+ songs_as_string.split("\n").each{ |song|
+ @storage << Song.new(song)
+ }
+ end
+
+ def find(criteria)
+ result = @storage
+ criteria.each_pair do |key, value|
+ if key == :tag
+ result = find_by_tag(result, value)
+ else
+ result = result.select{ |song| song.send(key) == value}
+ end
+ end
+ result
+ end
+
+ def find_by_tag(input, tags_arr)
+ Array(tags_arr).each{ |tag|
+ input = input.select{ |song| song.tags.include? tag}
+ }
+ input
+ end
+
+end
+
+class Song
+
+ attr_accessor :name, :artist, :genre, :subgenre, :tags
+
+ def initialize(song_as_string)
+ attr_array = []
+ song_as_string.split(".").each { |entry|
+ attr_array.push entry.lstrip.rstrip
+ }
+ @name = attr_array[0]
+ @artist = attr_array[1]
+ genre = attr_array[2].split(", ")
+ @genre = genre[0]
+ @subgenre = genre[1]
+ if attr_array[3] != nil
+ @tags = Array(attr_array[3].split(", "))
+ end
+ end
+
+end