Решение на Втора задача от Михаил Жеков

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

Към профила на Михаил Жеков

Резултати

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

Код

#Здравейте
#за съжаление нямах възможност да посещавам първите няколко
#лекции и едва днес разбрах, че ще имаме домашни всяка седмица.
#Това е, което успях да напиша за няколкото часа, в който
#се запознах с Ruby. Не успях да подкарам Ламбда функцията на #find
#Прочетох, че има и критерии, на които трябва да отговоря домаш-
#ното ми, но не успях да ги спазя този път. Изпращам го просто
#така, дори не съм сигурен дали това се чете от някой или
#се изпълнява автоматично от компютър.
class Song
def initialize(songname, artist, genre, subgenre, tags)
@name = songname.squeeze(" ")
@artist = artist.squeeze(" ")
@genre = genre.squeeze(" ")
@subgenre = subgenre.squeeze(" ")
@tags = tags
end
def name?(name)
if(name==nil)
then true
else @name==name
end
end
def artist?(artist)
if(artist==nil)
then true
else @artist==artist
end
end
def tags?(tags)
if(tags==nil)
then true
else (@tags&tags).length == tags.length
end
end
def to_s
"Song: #{@name}\nArtist: #{@artist}\nGenre:
#{@genre}\nSubgenre: #{@subgenre}\nTags: #{@tags}\n\n\n"
end
def genresToTags
@tags<<@genre.downcase
if @subgenre.empty?
then #nothing
else @tags<<@subgenre.downcase
end
@tags.uniq!
end
end
class Collection
def initialize(songs_as_string, artist_tags)
@arrayofsongs = Array.new
array = songs_as_string.lines.to_a
array.each do |line|
name, artist, lotsofgenres, lotsoftags = line.chomp.split(/\s*\.\s*/)
genre, subgenre = lotsofgenres.split(/\s*\,\s*/)
tags = lotsoftags.split(/\s*\,\s*/)
@arrayofsongs<<Song.new(name, artist, genre, subgenre, tags)
end
artistsToTags(artist_tags)
genresToTags
end
def find(criteria)
if criteria[:tags].kind_of?(Array)
then #nothing
else criteria[:tags] = [criteria[:tags]]
end
returnvalue = Array.new
@arrayofsongs.each do |song|
if song.artist?(criteria[:artist])
and song.name?(criteria[:name]) and song.tags?(criteria[:tags])
then returnvalue<<song
end
end
returnvalue
end
def to_s
@arrayofsongs.each {|song| puts song.to_s}
end
def artistsToTags(artist_tags)
artist_tags.each do |artist, tags|
array = find artist: artist
end
end
def genresToTags
@arrayofsongs.each do |song|
song.genresToTags
end
end
end

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

/data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:256:in `require': /tmp/d20111115-13548-1z0du76/solution.rb:72: syntax error, unexpected keyword_and (SyntaxError)
 and song.name?(criteria[:name]) and song.tags?(criteria[:tags])
    ^
/tmp/d20111115-13548-1z0du76/solution.rb:73: syntax error, unexpected keyword_then, expecting keyword_end
				then returnvalue<<song
				    ^
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:256:in `block in requires='
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:256:in `map'
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration.rb:256:in `requires='
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration_options.rb:19:in `block in configure'
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration_options.rb:18:in `each'
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/configuration_options.rb:18:in `configure'
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/command_line.rb:17:in `run'
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/runner.rb:80:in `run_in_process'
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/runner.rb:69:in `run'
	from /data/rails/evans/releases/20111115194838/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.7.1/lib/rspec/core/runner.rb:10:in `block in autorun'

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

Михаил обнови решението на 31.10.2011 16:53 (преди над 12 години)

+#Здравейте
+#за съжаление нямах възможност да посещавам първите няколко
+#лекции и едва днес разбрах, че ще имаме домашни всяка седмица.
+#Това е, което успях да напиша за няколкото часа, в който
+#се запознах с Ruby. Не успях да подкарам Ламбда функцията на #find
+#Прочетох, че има и критерии, на които трябва да отговоря домаш-
+#ното ми, но не успях да ги спазя този път. Изпращам го просто
+#така, дори не съм сигурен дали това се чете от някой или
+#се изпълнява автоматично от компютър.
+
+class Song
+ def initialize(songname, artist, genre, subgenre, tags)
+ @name = songname.squeeze(" ")
+ @artist = artist.squeeze(" ")
+ @genre = genre.squeeze(" ")
+ @subgenre = subgenre.squeeze(" ")
+ @tags = tags
+ end
+ def name?(name)
+ if(name==nil)
+ then true
+ else @name==name
+ end
+ end
+ def artist?(artist)
+ if(artist==nil)
+ then true
+ else @artist==artist
+ end
+ end
+ def tags?(tags)
+ if(tags==nil)
+ then true
+ else (@tags&tags).length == tags.length
+ end
+ end
+ def to_s
+ "Song: #{@name}\nArtist: #{@artist}\nGenre:
+#{@genre}\nSubgenre: #{@subgenre}\nTags: #{@tags}\n\n\n"
+ end
+ def genresToTags
+ @tags<<@genre.downcase
+ if @subgenre.empty?
+ then #nothing
+ else @tags<<@subgenre.downcase
+ end
+ @tags.uniq!
+ end
+end
+
+class Collection
+ def initialize(songs_as_string, artist_tags)
+ @arrayofsongs = Array.new
+ array = songs_as_string.lines.to_a
+ array.each do |line|
+ name, artist, lotsofgenres, lotsoftags = line.chomp.split(/\s*\.\s*/)
+ genre, subgenre = lotsofgenres.split(/\s*\,\s*/)
+ tags = lotsoftags.split(/\s*\,\s*/)
+ @arrayofsongs<<Song.new(name, artist, genre, subgenre, tags)
+ end
+ artistsToTags(artist_tags)
+ genresToTags
+ end
+ def find(criteria)
+ if criteria[:tags].kind_of?(Array)
+ then #nothing
+ else criteria[:tags] = [criteria[:tags]]
+ end
+ returnvalue = Array.new
+ @arrayofsongs.each do |song|
+ if song.artist?(criteria[:artist])
+ and song.name?(criteria[:name]) and song.tags?(criteria[:tags])
+ then returnvalue<<song
+ end
+ end
+ returnvalue
+ end
+ def to_s
+ @arrayofsongs.each {|song| puts song.to_s}
+ end
+ def artistsToTags(artist_tags)
+ artist_tags.each do |artist, tags|
+ array = find artist: artist
+ end
+ end
+ def genresToTags
+ @arrayofsongs.each do |song|
+ song.genresToTags
+ end
+ end
+end