zoukankan      html  css  js  c++  java
  • google大赛 入围赛250分真题

    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()
    []

  • 相关阅读:
    OpenGL入门学习
    linux下安装sqlite3
    SQLite 之 C#版 System.Data.SQLite 使用
    .net程序运行流程
    一种简单,轻量,灵活的C#对象转Json对象的方案
    C# 获取Windows系统:Cpu使用率,内存使用率,Mac地址,磁盘使用率
    WPF中选择文件及文件夹
    要想创业成功,千万不能在这十个方面走弯路
    [译]Quartz.Net 框架 教程(中文版)2.2.x 之第三课 更多关于Jobs和JobDetails
    [译]Quartz 框架 教程(中文版)2.2.x 之第二课 Quartz API,Jobs和Triggers简介
  • 原文地址:https://www.cnblogs.com/Camilo/p/3870503.html
Copyright © 2011-2022 走看看