diff --git a/TaskB01/run b/TaskB01/run index f906ba0..a3190de 100644 --- a/TaskB01/run +++ b/TaskB01/run @@ -4,55 +4,39 @@ import re class automata: - # class variables init def __init__(self): - # dictionary of connections between nodes - self.storage = {} - # list of accepting states + self.storage = [] self.accepting_states = [] - # list of current states - self.state = ['0'] - - # print for debug purposes + self.state = '0' + def __repr__(self): return('%s\n\n%s\n\n%s\n\n' % (self.storage, self.accepting_states, self.state)) - - # add node in open fst format + def add_node(self, line): node = line.replace('\n', '').split(' ') if len(node) == 3: - if node[0] in self.storage: - # add value to existing node - self.storage[node[0]].append({node[2]: node[1]}) - else: - # create new node - self.storage[node[0]] = [{node[2]: node[1]}] + self.storage.append([[node[0], node[2]], node[1]]) elif len(node) == 1: - # add accepting state self.accepting_states.append(node[0]) - # check if string is accepted by automate def test_string(self, text): - self.state = ['0'] + self.state = '0' text = text.replace('\n', '') for i in text: - for q in self.state: - self.state = self.get_node_transition(q, i) - if not self.state: - return False - return self.check_if_accepted() + self.state = self.get_node_transition([self.state, i]) + if self.state == None: + return 'FALSE %s' % text - def check_if_accepted(self): - return not set(self.state).isdisjoint(self.accepting_states) + if self.state in self.accepting_states: + return 'TRUE %s' % text + else: + return 'FALSE %s' % text def get_node_transition(self, query): for i in self.storage: if i[0] == query: return i[1] - return [] - - def sort(self): - self.storage = sorted(self.storage, key = lambda x: (x[0][0], x[0][1])) + return None auto = automata()