예제 #1
0
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")
예제 #2
0
    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)