# Alexandria Vail
# 01/28/2011
# Enloe High
School
# Potter
# Contest 2
# Senior 3
class Search
(object):
def __init__ (self, search, bank):
self.master_search = search
self.master_bank = bank
def recursion (self, word, search, i, o,
b):
if o == len(search):
return i - len(search)
elif i == len(word):
return False
elif word[i] in ['0', '1', '2', '3',
'4', '5', '6', '7', '8', '9'] and search[o] == '#':
if int(word[i]) in range(b[0],
b[1]):
return self.recursion(word,
search, i + 1, o + 1, b)
else:
return False
elif word[i] == search[o] or search[o]
== '?':
return self.recursion(word, search,
i + 1, o + 1, b)
return self.recursion(word, search, i +
1, 0, b)
def asterisks (self):
bank = []
if
self.master_search.count("*") == 2:
self.master_search =
self.master_search[1:len(self.master_search) - 1]
t_search = "" +
self.master_search
x, y = [0, 0]
if t_search.find("[") +
1:
i =
t_search.find("[")
j =
t_search.find("]")
brackets =
self.master_search[i:j+1]
t_search = t_search[0:i] +
"#" + t_search[j + 1:len(t_search)]
x = int(brackets[1])
y = int(brackets[3]) + 1
for word in self.master_bank:
match = self.recursion(word,
t_search, 0, 0, [x, y])
if match >= 0:
bank.append(word[match:len(t_search) + match])
else:
bank.append("")
if t_search.find("#") +
1:
bank = self.brackets(bank)
self.match(bank,
self.master_search)
for word in bank:
if word == "":
self.master_bank[bank.index(word)] = ""
else:
if self.master_search.find("*")
== 0:
self.master_search =
self.master_search[1:len(self.master_search)]
if not
(self.master_search.find("[") + 1):
for word in
self.master_bank:
bank.append(word[len(word)
- len(self.master_search):len(word)])
else:
t_search =
self.master_search
while
t_search.find("[") + 1:
a =
self.master_search.find("[")
b = self.master_search.find("]")
t_search =
self.master_search[0:a] + self.master_search[b:len(self.master_search)]
for word in
self.master_bank:
bank.append(word[len(word) - len(t_search):len(word)])
else:
self.master_search =
self.master_search[0:len(self.master_search) - 1]
if not
(self.master_search.find("[") + 1):
for word in
self.master_bank:
bank.append(word[0:len(self.master_search)])
else:
t_search =
self.master_search
while
t_search.find("[") + 1:
a =
self.master_search.find("[")
b =
self.master_search.find("]")
t_search =
self.master_search[0:a] + self.master_search[b:len(self.master_search)]
for word in
self.master_bank:
bank.append(word[0:len(t_search)])
if
self.master_search.find("[") + 1:
bank = self.brackets(bank)
self.match(bank, self.master_search)
def brackets (self, bank):
i =
self.master_search.find("[")
j = self.master_search.find("]")
brackets = self.master_search[i:j+1]
self.master_search =
self.master_search[0:i] + "#" + self.master_search[j +
1:len(self.master_search)]
x = int(brackets[1])
y = int(brackets[3]) + 1
for i in range(0, len(bank) - 1):
try:
if
int(bank[i][self.master_search.index('#')]) not in range(x,y):
self.master_bank[i] =
""
bank[i] = ""
except ValueError:
self.master_bank[i] =
""
bank[i] = ""
return bank
def match (self, bank, search):
for i in range(len(bank)):
for letter in bank[i]:
s =
search[bank[i].find(letter)]
if s != "?" and s != "#" and letter != s:
self.master_bank[i] =
""
bank[i] = ""
break
def interpret (self):
if
self.master_search.find("*") + 1:
self.asterisks()
elif
self.master_search.find("[") + 1:
self.master_bank =
self.brackets(self.master_bank)
self.match(self.master_bank,
self.master_search)
else:
bank = []
for word in self.master_bank:
if len(word) ==
len(self.master_search):
bank.append(word)
self.match(bank,
self.master_search)
self.master_bank = bank
return self.master_bank
def get_input():
i, s = [], []
print
"INPUT"
for j in range(6):
i.append(raw_input(str(j+1) + ".
"))
b = i[0].split(', ')
for k in range(5):
s.append(i[k+1].strip())
return b, s
def output(i,
bank):
s = ""
if bank != []:
for word in bank:
if word != "":
s += word + " "
if s.strip() == "":
s = "No Match"
s = str(i) + ". " + s
print s
i_bank,
i_searches = get_input()
print
"\nOUTPUT"
for i in
range(5):
t = []
for item in i_bank:
t.append(item)
output(i + 1, Search(i_searches[i],
t).interpret())