[CodingDojo] WhildThing

문제 출처 : http://club.filltong.net/codingdojo/22285

원문 : http://uva.onlinejudge.org/external/4/475.html

와일드 카드 문자에 대해서는...
Wildcard characters are used within filenames to permit the user to generically specify a group of files that a command should act upon. A wildcard character itself matches zero or more characters in the same position as the wildcard.

(와일드카드 문자는 사용자가 명령이 실행되는 한 파일 그룹을 명시하는데 사용된다. 와일드카드 문자 자체는 와일드 카드 위치에 0개 이상의 다른 문자들로 대치된다.)

매칭되는 단어가 없는 경우에는 아무 것도 출력하지 않습니다.

입력 예

C*AT
COMFILE.DAT
COST.DATA
CAT
%XCAT
COAT
CATCH

*A*
MOUNTAIN.TXT
ALFRED
PROG1A
SECOND.ED
PROG1A.PAS
HELLO
NOTHING
B**N* NIBBLE.BIT BANANA BNXJ.25 BORN ABNORMAL.LIS BRANDISH.SRD BITNET

출력 예

MATCHES FOR THE PATTERN: C*AT
COMFILE.DAT
CAT
COAT

MATCHES FOR THE PATTERN: *A*
MOUNTAIN.TXT
ALFRED
PROG1A
PROG1A.PAS

MATCHES FOR THE PATTERN: B**N*
BANANA
BNXJ.25
BORN
BRANDISH.SRD
BITNET
풀이
import unittest
import re

def matched( condition, input ):
    condition = condition.replace( "*", ".*" )
    pattern = "^" + condition + "$"
    returnValue = [];
    for i in range(0,len(input)):
        match = re.search( pattern, input[i] );
        if( match ):
            returnValue += [ input[i] ]        
    return returnValue

class TestWhildThing( unittest.TestCase ):
    def test_whild(self):
        self.assertEquals( ["COMFILE.DAT", "CAT", "COAT"], matched( "C*AT",         
                                  ["COMFILE.DAT","COST.DATA","CAT","%XCAT","COAT","CATCH",]))        
       self.assertEquals( ["MOUNTAIN.TXT", "ALFRED", "PROG1A", "PROG1A.PAS"], 
                                 matched("*A*", ["MOUNTAIN.TXT", "ALFRED", "PROG1A", "PROG1A.PAS"]))
        self.assertEquals( [], matched( "HELLO", ["NOTHING"]))
        self.assertEquals( ["BANANA", "BNXJ.25", "BORN", "BRANDISH.SRD", "BITNET"], matched("B**N*", 
                                  ["NIBBLE.BIT", "BANANA", "BNXJ.25", "BORN", "ABNORMAL.LIS", "BRANDISH.SRD", "BITNET"]))

if __name__ == '__main__':
    unittest.main(argv=('', '-v'))