diff --git a/TaskB05/run.py b/TaskB05/run.py index a13bcae..0946c9b 100644 --- a/TaskB05/run.py +++ b/TaskB05/run.py @@ -4,13 +4,11 @@ import re import sys # Regex pattern for reading atandt format -atandt_desc_pattern = re.compile(r"^([0-9]+)\t([0-9]+)\t(\S+)$") #^([0-9]+)\t([0-9]+)\t(\S+)$ regex for tab separated columns +atandt_desc_pattern = re.compile(r"^([0-9]+)[ \t]([0-9]+)[ \t](\S+)") #^([0-9]+)\t([0-9]+)\t(\S+)$ regex for tab separated columns atandt_accepted_state_pattern = re.compile(r"^[0-9]+$") current_state = 0 accept_states = set() -visited_nodes = [] - state_move = set() # function that filters set by starting node and returns all edges that starts in that node @@ -20,29 +18,33 @@ def filter_set(xs, filtered_value): def dfs(graph, start): visited = set() - stack = set() + stack = [] for el in filter_set(state_move, 0): - stack.add(el) + stack.append(el) while stack: edge = stack.pop() #print('Current edge: {edge}'.format(edge = edge)) #return immediately if cycle is detected if edge[0] == edge[2]: return [-1] + if edge[2] in accept_states: + visited = set() if edge not in visited: visited.add(edge) children = set() for val in filter_set(state_move, edge[2]): - stack.add(val) + stack.append(val) #print('Stack: {stack}'.format(stack = stack)) #print('Visited: {visited}'.format(visited = visited)) else: - return [-1] + return [-2] return visited +#print("Start program") # load atand format from stdin for line in sys.stdin: line = line.replace('\n', '') + #print(line) move = atandt_desc_pattern.match(line) succes = atandt_accepted_state_pattern.match(line) if move: @@ -54,7 +56,12 @@ for line in sys.stdin: #print('Accept states: {accept_states}'.format(accept_states = accept_states)) vis = dfs(state_move, 0) +#print(vis) +# if edge start and end node is the same if -1 in vis: print("TAK") +# if edge is in visited +elif -2 in vis: + print("TAK") else: print("NIE")