def main(input_file, output_file): # player 0: circular - even # player 1: rectangular - odd # creating the graph from this webpage: https://en.wikipedia.org/wiki/Parity_game even_nodes = [] odd_nodes = [] G = Graph() higher = -1 number = None with open(input_file) as reader: data = reader.read().splitlines(True) number = data[0].split() number = number[1] number = number.replace(";", "") data = data[1:] for line in data: uuid, p, owner, edges, name = line.split() uuid = int(uuid) p = int(p) owner = int(owner) name = name.replace("\"", "") name = name.replace(";", "") node = Node(p, owner, uuid, name) edges = edges.split(',') G.insert_node(node) for edge in edges: edge = int(edge) G.insert_edge(uuid, edge) if owner % 2 == 0: even_nodes.append(uuid) else: odd_nodes.append(uuid) if p > higher: higher = p if higher % 2 == 1: higher = higher + 1 WE = solveE(G, even_nodes, odd_nodes, higher) nodes = G.get_nodes() for node in WE: node.set_winner(0) # 0 means even player for node in nodes: if node.get_winner() == -1: node.set_winner(1) # 1 means odd player with open(output_file, 'w') as writter: writter.write("parity " + number + ";\n") for node in nodes: writter.write(str(node.get_uuid()) + " " + str(node.get_winner()) + ";\n")
def main(input_file, output_file): # player 0: circular - even # player 1: rectangular - odd even_nodes = [] odd_nodes = [] G = Graph() higher = -1 number_nodes = None with open(input_file) as reader: data = reader.read().splitlines(True) number_nodes = data[0].split() number_nodes = number_nodes[1] number_nodes = number_nodes.replace(";", "") data = data[1:] for line in data: uuid, p, owner, edges, name = line.split() uuid = int(uuid) p = int(p) owner = int(owner) name = name.replace("\"", "") name = name.replace(";", "") node = Node(p, owner, uuid, name) edges = edges.split(',') G.insert_node(node) for edge in edges: edge = int(edge) G.insert_edge(uuid, edge) if owner % 2 == 0: even_nodes.append(uuid) else: odd_nodes.append(uuid) if p > higher: higher = p if higher % 2 == 1: higher = higher + 1 # it's number_nodes + 1 because it's index in 0 WE = solveE(G, even_nodes, odd_nodes, higher, int(number_nodes) + 1, int(number_nodes) + 1) nodes = G.get_nodes() for node in WE: node.set_winner(0) # 0 means even player for node in nodes: if node.get_winner() == -1: node.set_winner(1) # 1 means odd player with open(output_file, 'w') as writter: writter.write("parity " + number_nodes + ";\n") for node in nodes: writter.write(str(node.get_uuid()) + " " + str(node.get_winner()) + ";\n")