class TestGraph(TestCase): def setUp(self) -> None: self.first_one_edge_graph = Graph() self.first_one_edge_graph.add_edge("1", "2") self.second_multi_edge_graph = Graph() self.second_multi_edge_graph.add_edge("1", "2") self.second_multi_edge_graph.add_edge("1", "3") self.second_multi_edge_graph.add_edge("3", "4") self.second_multi_edge_graph.add_edge("4", "5") self.second_multi_edge_graph.add_edge("2", "6") self.second_multi_edge_graph.add_edge("6", "4") def test_add_edge_first_quantity(self): self.assertEqual(1, len(self.first_one_edge_graph.adjacencies.keys())) def test_add_edge_first_composition(self): self.assertSetEqual({"1"}, set(self.first_one_edge_graph.adjacencies.keys())) def test_get_vertices_with_edge_first_quantity(self): self.assertEqual(1, len(self.first_one_edge_graph.get_vertices_with_edge())) def test_get_vertices_with_edge_first_composition(self): self.assertSetEqual({"1"}, set(self.first_one_edge_graph.get_vertices_with_edge())) def test_find_longest_path_from_first_normal(self): self.assertEqual(2, self.first_one_edge_graph.find_longest_path_from("1")) def test_find_longest_path_from_first_invalid(self): with self.assertRaises(ValueError): self.first_one_edge_graph.find_longest_path_from("2") with self.assertRaises(ValueError): self.first_one_edge_graph.find_longest_path_from("5") def test_add_edge_second_quantity(self): self.assertEqual(5, len(self.second_multi_edge_graph.adjacencies.keys())) def test_add_edge_second_composition(self): self.assertSetEqual({"1", "2", "3", "4", "6"}, set(self.second_multi_edge_graph.adjacencies.keys())) def test_get_vertices_with_edge_second_quantity(self): self.assertEqual(5, len(self.second_multi_edge_graph.get_vertices_with_edge())) def test_get_vertices_with_edge_second_composition(self): self.assertSetEqual({"1", "2", "3", "4", "6"}, set(self.second_multi_edge_graph.get_vertices_with_edge())) def test_find_longest_path_from_second_normal(self): self.assertEqual(5, self.second_multi_edge_graph.find_longest_path_from("1")) self.assertEqual(3, self.second_multi_edge_graph.find_longest_path_from("6")) self.assertEqual(2, self.second_multi_edge_graph.find_longest_path_from("4")) def test_find_longest_path_from_second_invalid(self): with self.assertRaises(ValueError): self.second_multi_edge_graph.find_longest_path_from("5")
return sorted(input_words_list, key=len, reverse=True) # реалізація під капотом? def read_words_from_file(filename: str) -> List[str]: output_words = [] with open(filename, "r") as input_file: words_number = int(input_file.readline().strip()) for line in input_file: output_words.append(line.strip()) return output_words def write_data_to_file(filename: str, data): with open(filename, "w") as output_file: output_file.write(str(data)) if __name__ == '__main__': graph = Graph() words_list = read_words_from_file(INPUT_FILE_NAME) words_list = sort_words_by_length_descending(words_list) graph = fill_in_graph_with_words(graph, words_list) longest_chain = max([ graph.find_longest_path_from(root) for root in graph.get_vertices_with_edge() ]) write_data_to_file(OUTPUT_FILE_NAME, longest_chain)