From 32021fb533fb7778d3a2b252af12f8c1c8d91198 Mon Sep 17 00:00:00 2001 From: deadsmond <01.lewicki@gmail.com> Date: Mon, 25 Nov 2019 16:39:57 +0100 Subject: [PATCH] 'hm' --- TaskB01/run | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/TaskB01/run b/TaskB01/run index 418c15f..d05ce4b 100644 --- a/TaskB01/run +++ b/TaskB01/run @@ -1,43 +1,58 @@ #!/usr/bin/python3 import sys import re -import openfst_python as fst class automata: + # class variables init def __init__(self): - self.storage = [] + # dictionary of connections between nodes + self.storage = {} + # list of accepting states self.accepting_states = [] - self.state = '0' - + # list of current states + self.state = ['0'] + + # print for debug purposes 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: - self.storage.append([[node[0], node[2]], node[1]]) + 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]}] 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: - self.state = self.get_node_transition([self.state, i]) - if self.state == None: - return 'FALSE %s' % text + for q in self.state: + self.state = self.get_node_transition(state, i) + if not self.state: + return False + return self.check_if_accepted() - if self.state in self.accepting_states: - return 'TRUE %s' % text - else: - return 'FALSE %s' % text + def check_if_accepted(self): + return not set(self.state).isdisjoint(self.accepting_states) def get_node_transition(self, query): for i in self.storage: if i[0] == query: return i[1] - return None + return [] + + def sort(self): + self.storage = sorted(self.storage, key = lambda x: (x[0][0], x[0][1])) auto = automata() @@ -45,6 +60,8 @@ auto = automata() for line in sys.stdin: auto.add_node(line) +print(auto) + f = open(sys.argv[1], 'r') for line in f: