Problem Statement
You have a collection of music files with names formatted as “genre-artist-album-song” (quotes for clarity only), where genre, artist, album, and song each consist of only lowercase letters (‘a’-'z’) and spaces (but no leading/trailing spaces). The collection is given in the String[] collection. You would like to filter the songs according to a set of criteria given in the String[] filterInfo. Each element of filterInfo is an equality check formatted as “field=value” (quotes for clarity only), where field is “genre”, “artist”, “album”, or “song”, and value consists of only lowercase letters (‘a’-'z’) and spaces (but no leading/trailing spaces). For a file to pass through the filter, it must satisfy every equality check in filterInfo. For example, if filterInfo = {“genre=country”, “album=greatest hits”}, only songs from country greatest hits albums should be returned. Return a String[] containing all the files that meet the given criteria in the same relative order as they appear in collection.

Definition
Class:SongFilter
Method:filter
Parameters:String[], String[]
Returns:String[]
Method signature:
String[] filter(String[] collection, String[] filterInfo)
(be sure your method is public)

Constraints
collection will contain between 1 and 50 elements, inclusive.
Each element of collection will be formatted as described in the problem statement.
Each element of collection will contain between 7 and 50 characters, inclusive.
Each genre, artist, album, and song in collection will contain between 1 and 20 characters, inclusive.
collection will contain no duplicate elements.
filterInfo will contain between 1 and 4 elements, inclusive.
Each element of filterInfo will be formatted as described in the problem statement.
Each value in filterInfo will contain between 1 and 20 characters, inclusive.

Examples
0)
{“jazz-joe pass-virtuoso-cherokee”,
”rock-led zeppelin-ii-lemon song”,
”country-dwight yoakam-long way home-things change”,
”metal-iron maiden-powerslave-aces high”,
”pop-supremes-more hits-ask any girl”,
”rock-faith no more-angel dust-rv”,
”jazz-chuck mangione-feels so good-feels so good”,
”rock-van halen-ii-spanish fly”}
{“genre=rock”, “album=ii”}
Returns: {“rock-led zeppelin-ii-lemon song”, “rock-van halen-ii-spanish fly” }
This filter returns all the rock songs from albums with the title “ii”.
1)
{“rock-jimi hendrix-axis bold as love-little wing”,
”rock-cars-cars-moving in stereo”,
”rock-jimi hendrix-electric ladyland-gypsy eyes”,
”blues-albert collins-ice pickin-ice pick”,
”rock-jimi hendrix-axis bold as love-bold as love”,
”rock-jimi  hendrix-axis bold as love-exp”}
{“artist=jimi hendrix”, “album=axis bold as love”}
Returns:
{“rock-jimi hendrix-axis bold as love-little wing”,
”rock-jimi hendrix-axis bold as love-bold as love” }
This filter returns all the songs that are from the album “axis bold as love” by the artist “jimi hendrix”. The last element in the collection is not returned because there are two spaces between “jimi” and “hendrix”.
2)
{“rock-ozzy osbourne-blizzard of ozz-dee”,
”rock-marvelous three-hey album-let me go”,
”rock-cheap trick-in color-downed”}
{“genre=soul”}
Returns: { }
There is no soul music in this collection, so an empty String[] is returned.
3)
{“country-topcoder-the country album-twangy”,
”rock-topcoder-the rock album-rockin”,
”jazz-topcoder-the jazz album-jazzy”,
”soul-topcoder-the soul album-soulful”,
”metal-topcoder-the metal album-thrash”}
{“artist=topcoder”, “genre=jazz”, “album=the jazz album”, “song=jazzy”}
Returns: {“jazz-topcoder-the jazz album-jazzy” }

4)
{“pop-jackson five-abc-the love you save”,
”rock-ac dc-powerage-riff raff”}
{“genre=pop”, “genre=rock”}
Returns: { }
No single element of collection can represent more than one genre, so this filter returns an empty String[].
This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.

题目来源:http://www.vcgood.com/archives/145

Python代码:

# -*- coding: cp936 -*-
class SongFilter:
def __init__(self,all_songs,criterias):
self.song_list = []
self.criteria_list = []
self.bad_criteria_flag = 0 #规则为错误规则的标志位 #将每首歌曲中间的连字符去掉,并组成列表;self.song_list为所有歌曲列表组成的总列表
for song in all_songs:
self.song_list.append(song.split('-')) #将每个规则中间的等号符去掉,并组成元组;self.criteria_list为所有规则元组组成的总列表
for criteria in criterias:
self.criteria_list.append(tuple(criteria.split('='))) #判断规则是否有误
length = len(self.criteria_list)
for i in range(length-1):
for j in range(i+1,length):
if self.criteria_list[i][0] == self.criteria_list[j][0]:
self.bad_criteria_flag = 1 #将规则元组组成的列表转化为字典存放
self.criteria_dict = dict(self.criteria_list) def filter(self):
self.filter_songs = []
self.result = [] #将符合规则的歌曲(没有连字符)存入self.filter_songs
for song in self.song_list:
if (song[0] == self.criteria_dict.get('genre') or self.criteria_dict.get('genre') == None):
if (song[1] == self.criteria_dict.get('artist') or self.criteria_dict.get('artist') == None):
if (song[2] == self.criteria_dict.get('album') or self.criteria_dict.get('album') == None):
if (song[3] == self.criteria_dict.get('song') or self.criteria_dict.get('song') == None):
self.filter_songs.append(song) #为过滤出的歌曲增加连字符
for song in self.filter_songs:
self.result.append( '-'.join(song)) if self.bad_criteria_flag == 1:
return []
return self.result

运行结果:

>>> all_songs = ['jazz-joe pass-virtuoso-cherokee',
'rock-led zeppelin-ii-lemon song',
'country-dwight yoakam-long way home-things change',
'metal-iron maiden-powerslave-aces high',
'pop-supremes-more hits-ask any girl',
'rock-faith no more-angel dust-rv',
'jazz-chuck mangione-feels so good-feels so good',
'rock-van halen-ii-spanish fly']
>>> criterias = ['genre=rock', 'album=ii']
>>> sf = SongFilter(all_songs,criterias)
>>> sf.filter()
['rock-led zeppelin-ii-lemon song', 'rock-van halen-ii-spanish fly']
>>> all_songs = ['rock-jimi hendrix-axis bold as love-little wing',
'rock-cars-cars-moving in stereo',
'rock-jimi hendrix-electric ladyland-gypsy eyes',
'blues-albert collins-ice pickin-ice pick',
'rock-jimi hendrix-axis bold as love-bold as love',
'rock-jimi  hendrix-axis bold as love-exp']
>>> criterias = ['artist=jimi hendrix', 'album=axis bold as love']
>>> sf = SongFilter(all_songs,criterias)
>>> sf.filter()
['rock-jimi hendrix-axis bold as love-little wing', 'rock-jimi hendrix-axis bold as love-bold as love']
>>> all_songs = ['rock-ozzy osbourne-blizzard of ozz-dee',
'rock-marvelous three-hey album-let me go',
'rock-cheap trick-in color-downed']
>>> criterias = ['genre=soul']
>>> sf = SongFilter(all_songs,criterias)
>>> sf.filter()
[]
>>> all_songs = ['country-topcoder-the country album-twangy',
'rock-topcoder-the rock album-rockin',
'jazz-topcoder-the jazz album-jazzy',
'soul-topcoder-the soul album-soulful',
'metal-topcoder-the metal album-thrash']
>>> criterias = ['artist=topcoder', 'genre=jazz', 'album=the jazz album', 'song=jazzy']
>>> sf = SongFilter(all_songs,criterias)
>>> sf.filter()
['jazz-topcoder-the jazz album-jazzy']

>>> all_songs = ['pop-jackson five-abc-the love you save',
'rock-ac dc-powerage-riff raff']
>>> criterias = ['genre=pop', 'genre=rock']
>>> sf = SongFilter(all_songs,criterias)
>>> sf.filter()
[]

google大赛 入围赛250分真题的更多相关文章

  1. 第九届蓝桥杯省赛c/c++真题明码题解答案,另类excel解法思路

    直到快比赛才重视起之前学校给报了蓝桥杯,且这段时间一直在做Python,所以没做什么准备. 赛场上做这道题时连反码补码的知识点都记混,所以直接用了excel做这道题目,分享下做题思路.及题解. 标题: ...

  2. 第十届蓝桥杯JavaB组省赛真题

    试题 A: 组队 本题总分:5 分 [问题描述] 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容. 每位球员担任 1 号位至 5 号位时的评分如下表所示. ...

  3. Python解答蓝桥杯省赛真题之从入门到真题(二刷题目一直更新)

    蓝桥刷题 原文链接: https://github.com/libo-sober/LanQiaoCup Python解答蓝桥杯省赛真题之从入门到真题 不同字串 """ 一 ...

  4. 2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

    2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!=1,宝宝心理苦啊.!感谢zzh ...

  5. 第九届蓝桥杯JavaC组决(国)赛真题

    1:年龄问题 s夫人一向很神秘.这会儿有人问起她的年龄,她想了想说: "20年前,我丈夫的年龄刚好是我的2倍,而现在他的年龄刚好是我的1.5倍". 你能算出s夫人现在的年龄吗? 这 ...

  6. Noip前的大抱佛脚----Noip真题复习

    Noip前的大抱佛脚----Noip真题复习 Tags: Noip前的大抱佛脚 Noip2010 题目不难,但是三个半小时的话要写四道题还是需要码力,不过按照现在的实力应该不出意外可以AK的. 机器翻 ...

  7. 第四届蓝桥杯 c/c++真题

    第四届蓝桥杯 c/c++真题 <1>高斯日记 问题 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们 ...

  8. 第三届蓝桥杯 c/c++真题

    第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...

  9. 蓝桥杯java历年真题及答案整理1~20.md

    蓝桥杯java历年真题及答案整理(闭关一个月,呕心沥血整理出来的) 1 算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种.如:给定 A.B.C三个不同的字符,则结果为:A ...

随机推荐

  1. 17) JMS: java Message Service(Java消息服务)

         JMS是一个标准,就像EJB,有很多开源的,商业的实现,ms技术对应的规范是jsr914,规范的实现称为jms provider,常见的实现有ActiveMQ.JBoss MQ.IBM We ...

  2. Mysql 简单问题汇总(持续更新)

    主从架构相关问题 问题现象:从机连接主机时报错 [ERROR] Slave I/O: error connecting to master 'repl@192.168.0.50:3306' - ret ...

  3. Oracle中查看无效的对象、约束、触发器和索引

    .检查无效的数据库对象: SELECT owner, object_name, object_type,status FROM dba_objects WHERE status = 'INVALID' ...

  4. Web Design:给实验室UI们的一堂课(上)

    实验室的UI越来越水,设计什么的做的一塌糊涂,所以拖了很久,就想给他们讲一下设计或者说入门吧,上周末才倒出来时间. 这里放上PPT和讲稿吧,懒得去整理板式了. 主要讲了一下Web Design怎么做, ...

  5. Supporting Connected Routes to Subnet Zero

    Supporting Connected Routes to Subnet Zero IOS allows the network engineer to tell a router to eithe ...

  6. 判断Check复选框是否选中

    <div id="prm_div" style="font-size: 12px;" align="left"> <for ...

  7. .NET开源工作流RoadFlow-流程设计-流程步骤设置-基本设置

    流程属性设置完成后点击确定之后,即可进行流程步骤设置了. 点击工具栏上的步骤按钮,即可添加一个新步骤. 在新步骤图形上双击即可弹出该步骤相应属性设置框. 步骤ID:系统自动为该步骤生成的唯一ID. 步 ...

  8. oracle 查看隐含参数脚本

    set linesize 132 column name format a30 column value format a25 select x.ksppinm name, y.ksppstvl va ...

  9. HTTP上传文件探究

    通常情况下,我们想在网页上上传一个文件的时候,会采用<input type="file">标签,但是你有没有想过,为什么通过这样一个标签,服务器端就能获取到文件数据呢? ...

  10. Karaf 依赖equinox and felix,karaf 本Apache的很多项目作为基础框架

    6月17日是Apache Karaf作为Apache顶级项目.Karaf是个运行时包,包含了一个OSGi框架(Equinox或Felix).一个命令shell(Felix Gogo)及默认情况下内置的 ...