B00 added
This commit is contained in:
parent
3b6370cae9
commit
d72a208fa9
0
TaskB00/Makefile
Normal file
0
TaskB00/Makefile
Normal file
58
TaskB00/run
Normal file
58
TaskB00/run
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
import re, sys
|
||||||
|
|
||||||
|
class automata:
|
||||||
|
def __init__(self):
|
||||||
|
self.states = []
|
||||||
|
self.rules = []
|
||||||
|
self.current = '0'
|
||||||
|
|
||||||
|
def datainp(self, rls, wins):
|
||||||
|
for rule in rls:
|
||||||
|
self.rules += [(rule.split(' '))]
|
||||||
|
self.win_states = wins
|
||||||
|
self.states = [row[2] for row in self.rules]
|
||||||
|
|
||||||
|
def check(self):
|
||||||
|
k = [row[::2] for row in self.rules]
|
||||||
|
if [x for x in k if k.count(x) > 1]:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def play(self, word):
|
||||||
|
for l in list(word)[:-1]:
|
||||||
|
if (l not in self.states):
|
||||||
|
self.current = 'something'
|
||||||
|
break
|
||||||
|
res = 0
|
||||||
|
for rule in self.rules:
|
||||||
|
if (rule[0] == self.current) and (rule[2] == l):
|
||||||
|
self.current = rule[1]
|
||||||
|
res = 1
|
||||||
|
break
|
||||||
|
if (res == 0):
|
||||||
|
self.current = 'something'
|
||||||
|
break
|
||||||
|
if (self.current in self.win_states):
|
||||||
|
print ('YES ' + word[:-1])
|
||||||
|
else:
|
||||||
|
print ('NO ' + word[:-1])
|
||||||
|
self.current = '0'
|
||||||
|
|
||||||
|
def search_rules(inp):
|
||||||
|
return re.findall(r'[0-9]* [0-9]* [a-z]', inp)
|
||||||
|
def search_states(inp):
|
||||||
|
return re.findall(r'([0-9]+)\n', inp)
|
||||||
|
|
||||||
|
|
||||||
|
file = ''
|
||||||
|
for line in sys.stdin:
|
||||||
|
file = file + line
|
||||||
|
z = automata()
|
||||||
|
z.datainp(search_rules(file), search_states(file))
|
||||||
|
if (z.check()):
|
||||||
|
print('NONDETERMINISTIC')
|
||||||
|
else:
|
||||||
|
data = open(sys.argv[1], 'r')
|
||||||
|
for line in data:
|
||||||
|
z.play(line)
|
Loading…
Reference in New Issue
Block a user