From c6f9dd094d79d4dfb64fcb78994ee2ad2ff75991 Mon Sep 17 00:00:00 2001
From: aymanpopje <76626896+aymanpopje@users.noreply.github.com>
Date: Thu, 13 Jun 2024 13:42:11 +0200
Subject: [PATCH 01/27] Added README.md template (see section 3.6 in Assignemnt
1), Renamed the original README.md to README_original.md (Required by
Assignemnt 1).
---
README.md | 491 +++++++--------------------------------------
README_original.md | 424 ++++++++++++++++++++++++++++++++++++++
2 files changed, 491 insertions(+), 424 deletions(-)
create mode 100644 README_original.md
diff --git a/README.md b/README.md
index 65caeb5ca..fd8293229 100644
--- a/README.md
+++ b/README.md
@@ -1,424 +1,67 @@
-[](https://badge.fury.io/py/algorithms)
-[](https://www.codetriage.com/keon/algorithms)
-[](https://travis-ci.org/keon/algorithms)
-[](https://coveralls.io/github/keon/algorithms?branch=master)
-
-

-
-Pythonic Data Structures and Algorithms
-=========================================
-
-Minimal and clean example implementations of data structures and algorithms in Python 3.
-
-## Contributing
-Thanks for your interest in contributing! There are many ways to contribute to this project. [Get started here](CONTRIBUTING.md)
-
-## Tests
-
-### Use unittest
-For running all tests write down:
-
- $ python3 -m unittest discover tests
-
-For running some specific tests you can do this as following (Ex: sort):
-
- $ python3 -m unittest tests.test_sort
-
-### Use pytest
-For running all tests write down:
-
- $ python3 -m pytest tests
-
-## Install
-If you want to use the API algorithms in your code, it is as simple as:
-
- $ pip3 install algorithms
-
-You can test by creating a python file: (Ex: use `merge_sort` in `sort`)
-
-```python3
-from algorithms.sort import merge_sort
-
-if __name__ == "__main__":
- my_list = [1, 8, 3, 5, 6]
- my_list = merge_sort(my_list)
- print(my_list)
-```
-
-## Uninstall
-If you want to uninstall algorithms, it is as simple as:
-
- $ pip3 uninstall -y algorithms
-
-## List of Implementations
-
-- [arrays](algorithms/arrays)
- - [delete_nth](algorithms/arrays/delete_nth.py)
- - [flatten](algorithms/arrays/flatten.py)
- - [garage](algorithms/arrays/garage.py)
- - [josephus_problem](algorithms/arrays/josephus.py)
- - [limit](algorithms/arrays/limit.py)
- - [longest_non_repeat](algorithms/arrays/longest_non_repeat.py/)
- - [max_ones_index](algorithms/arrays/max_ones_index.py)
- - [merge_intervals](algorithms/arrays/merge_intervals.py)
- - [missing_ranges](algorithms/arrays/missing_ranges.py)
- - [plus_one](algorithms/arrays/plus_one.py)
- - [remove_duplicates](algorithms/arrays/remove_duplicates.py)
- - [rotate](algorithms/arrays/rotate.py)
- - [summarize_ranges](algorithms/arrays/summarize_ranges.py)
- - [three_sum](algorithms/arrays/three_sum.py)
- - [trimmean](algorithms/arrays/trimmean.py)
- - [top_1](algorithms/arrays/top_1.py)
- - [two_sum](algorithms/arrays/two_sum.py)
- - [move_zeros](algorithms/arrays/move_zeros.py)
- - [n_sum](algorithms/arrays/n_sum.py)
-- [greedy](algorithms/greedy/)
- - [max_contiguous_subsequence_sum](algorithms/greedy/max_contiguous_subsequence_sum.py)
-- [automata](algorithms/automata)
- - [DFA](algorithms/automata/dfa.py)
-- [backtrack](algorithms/backtrack)
- - [general_solution.md](algorithms/backtrack/)
- - [add_operators](algorithms/backtrack/add_operators.py)
- - [anagram](algorithms/backtrack/anagram.py)
- - [array_sum_combinations](algorithms/backtrack/array_sum_combinations.py)
- - [combination_sum](algorithms/backtrack/combination_sum.py)
- - [factor_combinations](algorithms/backtrack/factor_combinations.py)
- - [generate_abbreviations](algorithms/backtrack/generate_abbreviations.py)
- - [generate_parenthesis](algorithms/backtrack/generate_parenthesis.py)
- - [letter_combination](algorithms/backtrack/letter_combination.py)
- - [palindrome_partitioning](algorithms/backtrack/palindrome_partitioning.py)
- - [pattern_match](algorithms/backtrack/pattern_match.py)
- - [permute](algorithms/backtrack/permute.py)
- - [permute_unique](algorithms/backtrack/permute_unique.py)
- - [subsets](algorithms/backtrack/subsets.py)
- - [subsets_unique](algorithms/backtrack/subsets_unique.py)
-- [bfs](algorithms/bfs)
- - [maze_search](algorithms/bfs/maze_search.py)
- - [shortest_distance_from_all_buildings](algorithms/bfs/shortest_distance_from_all_buildings.py)
- - [word_ladder](algorithms/bfs/word_ladder.py)
-- [bit](algorithms/bit)
- - [add_bitwise_operator](algorithms/bit/add_bitwise_operator.py)
- - [bit_operation](algorithms/bit/bit_operation.py)
- - [bytes_int_conversion](algorithms/bit/bytes_int_conversion.py)
- - [count_flips_to_convert](algorithms/bit/count_flips_to_convert.py)
- - [count_ones](algorithms/bit/count_ones.py)
- - [find_difference](algorithms/bit/find_difference.py)
- - [find_missing_number](algorithms/bit/find_missing_number.py)
- - [flip_bit_longest_sequence](algorithms/bit/flip_bit_longest_sequence.py)
- - [power_of_two](algorithms/bit/power_of_two.py)
- - [reverse_bits](algorithms/bit/reverse_bits.py)
- - [single_number](algorithms/bit/single_number.py)
- - [single_number2](algorithms/bit/single_number2.py)
- - [single_number3](algorithms/bit/single_number3.py)
- - [subsets](algorithms/bit/subsets.py)
- - [swap_pair](algorithms/bit/swap_pair.py)
- - [has_alternative_bit](algorithms/bit/has_alternative_bit.py)
- - [insert_bit](algorithms/bit/insert_bit.py)
- - [remove_bit](algorithms/bit/remove_bit.py)
- - [binary_gap](algorithms/bit/binary_gap.py)
-- [compression](algorithms/compression)
- - [huffman_coding](algorithms/compression/huffman_coding.py)
- - [rle_compression](algorithms/compression/rle_compression.py)
- - [elias](algorithms/compression/elias.py)
-- [dfs](algorithms/dfs)
- - [all_factors](algorithms/dfs/all_factors.py)
- - [count_islands](algorithms/dfs/count_islands.py)
- - [pacific_atlantic](algorithms/dfs/pacific_atlantic.py)
- - [sudoku_solver](algorithms/dfs/sudoku_solver.py)
- - [walls_and_gates](algorithms/dfs/walls_and_gates.py)
-- [distribution](algorithms/distribution)
- - [histogram](algorithms/distribution/histogram.py)
-- [dp](algorithms/dp)
- - [buy_sell_stock](algorithms/dp/buy_sell_stock.py)
- - [climbing_stairs](algorithms/dp/climbing_stairs.py)
- - [coin_change](algorithms/dp/coin_change.py)
- - [combination_sum](algorithms/dp/combination_sum.py)
- - [egg_drop](algorithms/dp/egg_drop.py)
- - [house_robber](algorithms/dp/house_robber.py)
- - [int_divide](algorithms/dp/int_divide.py)
- - [job_scheduling](algorithms/dp/job_scheduling.py)
- - [knapsack](algorithms/dp/knapsack.py)
- - [longest_increasing](algorithms/dp/longest_increasing.py)
- - [matrix_chain_order](algorithms/dp/matrix_chain_order.py)
- - [max_product_subarray](algorithms/dp/max_product_subarray.py)
- - [max_subarray](algorithms/dp/max_subarray.py)
- - [min_cost_path](algorithms/dp/min_cost_path.py)
- - [num_decodings](algorithms/dp/num_decodings.py)
- - [regex_matching](algorithms/dp/regex_matching.py)
- - [rod_cut](algorithms/dp/rod_cut.py)
- - [word_break](algorithms/dp/word_break.py)
- - [fibonacci](algorithms/dp/fib.py)
- - [hosoya triangle](algorithms/dp/hosoya_triangle.py)
- - [K-Factor_strings](algorithms/dp/k_factor.py)
- - [planting_trees](algorithms/dp/planting_trees.py)
-- [graph](algorithms/graph)
- - [check_bipartite](algorithms/graph/check_bipartite.py)
- - [strongly_connected](algorithms/graph/check_digraph_strongly_connected.py)
- - [clone_graph](algorithms/graph/clone_graph.py)
- - [cycle_detection](algorithms/graph/cycle_detection.py)
- - [find_all_cliques](algorithms/graph/find_all_cliques.py)
- - [find_path](algorithms/graph/find_path.py)
- - [graph](algorithms/graph/graph.py)
- - [dijkstra](algorithms/graph/dijkstra.py)
- - [markov_chain](algorithms/graph/markov_chain.py)
- - [minimum_spanning_tree](algorithms/graph/minimum_spanning_tree.py)
- - [satisfiability](algorithms/graph/satisfiability.py)
- - [minimum_spanning_tree_prims](algorithms/graph/prims_minimum_spanning.py)
- - [tarjan](algorithms/graph/tarjan.py)
- - [traversal](algorithms/graph/traversal.py)
- - [maximum_flow](algorithms/graph/maximum_flow.py)
- - [maximum_flow_bfs](algorithms/graph/maximum_flow_bfs.py)
- - [maximum_flow_dfs](algorithms/graph/maximum_flow_dfs.py)
- - [all_pairs_shortest_path](algorithms/graph/all_pairs_shortest_path.py)
- - [bellman_ford](algorithms/graph/bellman_ford.py)
- - [Count Connected Components](algorithms/graph/count_connected_number_of_component.py)
-- [heap](algorithms/heap)
- - [merge_sorted_k_lists](algorithms/heap/merge_sorted_k_lists.py)
- - [skyline](algorithms/heap/skyline.py)
- - [sliding_window_max](algorithms/heap/sliding_window_max.py)
- - [binary_heap](algorithms/heap/binary_heap.py)
- - [k_closest_points](algorithms/heap/k_closest_points.py)
-- [linkedlist](algorithms/linkedlist)
- - [add_two_numbers](algorithms/linkedlist/add_two_numbers.py)
- - [copy_random_pointer](algorithms/linkedlist/copy_random_pointer.py)
- - [delete_node](algorithms/linkedlist/delete_node.py)
- - [first_cyclic_node](algorithms/linkedlist/first_cyclic_node.py)
- - [is_cyclic](algorithms/linkedlist/is_cyclic.py)
- - [is_palindrome](algorithms/linkedlist/is_palindrome.py)
- - [kth_to_last](algorithms/linkedlist/kth_to_last.py)
- - [linkedlist](algorithms/linkedlist/linkedlist.py)
- - [remove_duplicates](algorithms/linkedlist/remove_duplicates.py)
- - [reverse](algorithms/linkedlist/reverse.py)
- - [rotate_list](algorithms/linkedlist/rotate_list.py)
- - [swap_in_pairs](algorithms/linkedlist/swap_in_pairs.py)
- - [is_sorted](algorithms/linkedlist/is_sorted.py)
- - [remove_range](algorithms/linkedlist/remove_range.py)
-- [map](algorithms/map)
- - [hashtable](algorithms/map/hashtable.py)
- - [separate_chaining_hashtable](algorithms/map/separate_chaining_hashtable.py)
- - [longest_common_subsequence](algorithms/map/longest_common_subsequence.py)
- - [longest_palindromic_subsequence](algorithms/map/longest_palindromic_subsequence.py)
- - [randomized_set](algorithms/map/randomized_set.py)
- - [valid_sudoku](algorithms/map/valid_sudoku.py)
- - [word_pattern](algorithms/map/word_pattern.py)
- - [is_isomorphic](algorithms/map/is_isomorphic.py)
- - [is_anagram](algorithms/map/is_anagram.py)
-- [maths](algorithms/maths)
- - [base_conversion](algorithms/maths/base_conversion.py)
- - [chinese_remainder_theorem](algorithms/maths/chinese_remainder_theorem.py)
- - [combination](algorithms/maths/combination.py)
- - [cosine_similarity](algorithms/maths/cosine_similarity.py)
- - [decimal_to_binary_ip](algorithms/maths/decimal_to_binary_ip.py)
- - [diffie_hellman_key_exchange](algorithms/maths/diffie_hellman_key_exchange.py)
- - [euler_totient](algorithms/maths/euler_totient.py)
- - [extended_gcd](algorithms/maths/extended_gcd.py)
- - [factorial](algorithms/maths/factorial.py)
- - [find_order](algorithms/maths/find_order_simple.py)
- - [find_primitive_root](algorithms/maths/find_primitive_root_simple.py)
- - [gcd/lcm](algorithms/maths/gcd.py)
- - [generate_strobogrammtic](algorithms/maths/generate_strobogrammtic.py)
- - [hailstone](algorithms/maths/hailstone.py)
- - [is_strobogrammatic](algorithms/maths/is_strobogrammatic.py)
- - [krishnamurthy_number](algorithms/maths/krishnamurthy_number.py)
- - [magic_number](algorithms/maths/magic_number.py)
- - [modular_exponential](algorithms/maths/modular_exponential.py)
- - [modular_inverse](algorithms/maths/modular_inverse.py)
- - [next_bigger](algorithms/maths/next_bigger.py)
- - [next_perfect_square](algorithms/maths/next_perfect_square.py)
- - [nth_digit](algorithms/maths/nth_digit.py)
- - [num_perfect_squares](algorithms/maths/num_perfect_squares.py)
- - [polynomial](algorithms/maths/polynomial.py)
- - [power](algorithms/maths/power.py)
- - [prime_check](algorithms/maths/prime_check.py)
- - [primes_sieve_of_eratosthenes](algorithms/maths/primes_sieve_of_eratosthenes.py)
- - [pythagoras](algorithms/maths/pythagoras.py)
- - [rabin_miller](algorithms/maths/rabin_miller.py)
- - [recursive_binomial_coefficient](algorithms/maths/recursive_binomial_coefficient.py)
- - [rsa](algorithms/maths/rsa.py)
- - [sqrt_precision_factor](algorithms/maths/sqrt_precision_factor.py)
- - [summing_digits](algorithms/maths/summing_digits.py)
- - [symmetry_group_cycle_index](algorithms/maths/symmetry_group_cycle_index.py)
-- [matrix](algorithms/matrix)
- - [sudoku_validator](algorithms/matrix/sudoku_validator.py)
- - [bomb_enemy](algorithms/matrix/bomb_enemy.py)
- - [copy_transform](algorithms/matrix/copy_transform.py)
- - [count_paths](algorithms/matrix/count_paths.py)
- - [matrix_exponentiation](algorithms/matrix/matrix_exponentiation.py)
- - [matrix_inversion](algorithms/matrix/matrix_inversion.py)
- - [matrix_multiplication](algorithms/matrix/multiply.py)
- - [rotate_image](algorithms/matrix/rotate_image.py)
- - [search_in_sorted_matrix](algorithms/matrix/search_in_sorted_matrix.py)
- - [sparse_dot_vector](algorithms/matrix/sparse_dot_vector.py)
- - [sparse_mul](algorithms/matrix/sparse_mul.py)
- - [spiral_traversal](algorithms/matrix/spiral_traversal.py)
- - [crout_matrix_decomposition](algorithms/matrix/crout_matrix_decomposition.py)
- - [cholesky_matrix_decomposition](algorithms/matrix/cholesky_matrix_decomposition.py)
- - [sum_sub_squares](algorithms/matrix/sum_sub_squares.py)
- - [sort_matrix_diagonally](algorithms/matrix/sort_matrix_diagonally.py)
-- [queues](algorithms/queues)
- - [max_sliding_window](algorithms/queues/max_sliding_window.py)
- - [moving_average](algorithms/queues/moving_average.py)
- - [queue](algorithms/queues/queue.py)
- - [reconstruct_queue](algorithms/queues/reconstruct_queue.py)
- - [zigzagiterator](algorithms/queues/zigzagiterator.py)
-- [search](algorithms/search)
- - [binary_search](algorithms/search/binary_search.py)
- - [first_occurrence](algorithms/search/first_occurrence.py)
- - [last_occurrence](algorithms/search/last_occurrence.py)
- - [linear_search](algorithms/search/linear_search.py)
- - [search_insert](algorithms/search/search_insert.py)
- - [two_sum](algorithms/search/two_sum.py)
- - [search_range](algorithms/search/search_range.py)
- - [find_min_rotate](algorithms/search/find_min_rotate.py)
- - [search_rotate](algorithms/search/search_rotate.py)
- - [jump_search](algorithms/search/jump_search.py)
- - [next_greatest_letter](algorithms/search/next_greatest_letter.py)
- - [interpolation_search](algorithms/search/interpolation_search.py)
-- [set](algorithms/set)
- - [randomized_set](algorithms/set/randomized_set.py)
- - [set_covering](algorithms/set/set_covering.py)
- - [find_keyboard_row](algorithms/set/find_keyboard_row.py)
-- [sort](algorithms/sort)
- - [bitonic_sort](algorithms/sort/bitonic_sort.py)
- - [bogo_sort](algorithms/sort/bogo_sort.py)
- - [bubble_sort](algorithms/sort/bubble_sort.py)
- - [bucket_sort](algorithms/sort/bucket_sort.py)
- - [cocktail_shaker_sort](algorithms/sort/cocktail_shaker_sort.py)
- - [comb_sort](algorithms/sort/comb_sort.py)
- - [counting_sort](algorithms/sort/counting_sort.py)
- - [cycle_sort](algorithms/sort/cycle_sort.py)
- - [exchange_sort](algorithms/sort/exchange_sort.py)
- - [gnome_sort](algorithms/sort/gnome_sort.py)
- - [heap_sort](algorithms/sort/heap_sort.py)
- - [insertion_sort](algorithms/sort/insertion_sort.py)
- - [meeting_rooms](algorithms/sort/meeting_rooms.py)
- - [merge_sort](algorithms/sort/merge_sort.py)
- - [pancake_sort](algorithms/sort/pancake_sort.py)
- - [pigeonhole_sort](algorithms/sort/pigeonhole_sort.py)
- - [quick_sort](algorithms/sort/quick_sort.py)
- - [radix_sort](algorithms/sort/radix_sort.py)
- - [selection_sort](algorithms/sort/selection_sort.py)
- - [shell_sort](algorithms/sort/shell_sort.py)
- - [sort_colors](algorithms/sort/sort_colors.py)
- - [stooge_sort](algorithms/sort/stooge_sort.py)
- - [top_sort](algorithms/sort/top_sort.py)
- - [wiggle_sort](algorithms/sort/wiggle_sort.py)
-- [stack](algorithms/stack)
- - [longest_abs_path](algorithms/stack/longest_abs_path.py)
- - [simplify_path](algorithms/stack/simplify_path.py)
- - [stack](algorithms/stack/stack.py)
- - [valid_parenthesis](algorithms/stack/valid_parenthesis.py)
- - [stutter](algorithms/stack/stutter.py)
- - [switch_pairs](algorithms/stack/switch_pairs.py)
- - [is_consecutive](algorithms/stack/is_consecutive.py)
- - [remove_min](algorithms/stack/remove_min.py)
- - [is_sorted](algorithms/stack/is_sorted.py)
-- [streaming](algorithms/streaming)
- - [1-sparse-recovery](algorithms/streaming/one_sparse_recovery.py)
- - [misra-gries](algorithms/streaming/misra_gries.py)
-- [strings](algorithms/strings)
- - [fizzbuzz](algorithms/strings/fizzbuzz.py)
- - [delete_reoccurring](algorithms/strings/delete_reoccurring.py)
- - [strip_url_params](algorithms/strings/strip_url_params.py)
- - [validate_coordinates](algorithms/strings/validate_coordinates.py)
- - [domain_extractor](algorithms/strings/domain_extractor.py)
- - [merge_string_checker](algorithms/strings/merge_string_checker.py)
- - [add_binary](algorithms/strings/add_binary.py)
- - [breaking_bad](algorithms/strings/breaking_bad.py)
- - [decode_string](algorithms/strings/decode_string.py)
- - [encode_decode](algorithms/strings/encode_decode.py)
- - [group_anagrams](algorithms/strings/group_anagrams.py)
- - [int_to_roman](algorithms/strings/int_to_roman.py)
- - [is_palindrome](algorithms/strings/is_palindrome.py)
- - [license_number](algorithms/strings/license_number.py)
- - [make_sentence](algorithms/strings/make_sentence.py)
- - [multiply_strings](algorithms/strings/multiply_strings.py)
- - [one_edit_distance](algorithms/strings/one_edit_distance.py)
- - [rabin_karp](algorithms/strings/rabin_karp.py)
- - [reverse_string](algorithms/strings/reverse_string.py)
- - [reverse_vowel](algorithms/strings/reverse_vowel.py)
- - [reverse_words](algorithms/strings/reverse_words.py)
- - [roman_to_int](algorithms/strings/roman_to_int.py)
- - [word_squares](algorithms/strings/word_squares.py)
- - [unique_morse](algorithms/strings/unique_morse.py)
- - [judge_circle](algorithms/strings/judge_circle.py)
- - [strong_password](algorithms/strings/strong_password.py)
- - [caesar_cipher](algorithms/strings/caesar_cipher.py)
- - [check_pangram](algorithms/strings/check_pangram.py)
- - [contain_string](algorithms/strings/contain_string.py)
- - [count_binary_substring](algorithms/strings/count_binary_substring.py)
- - [repeat_string](algorithms/strings/repeat_string.py)
- - [min_distance](algorithms/strings/min_distance.py)
- - [longest_common_prefix](algorithms/strings/longest_common_prefix.py)
- - [rotate](algorithms/strings/rotate.py)
- - [first_unique_char](algorithms/strings/first_unique_char.py)
- - [repeat_substring](algorithms/strings/repeat_substring.py)
- - [atbash_cipher](algorithms/strings/atbash_cipher.py)
- - [longest_palindromic_substring](algorithms/strings/longest_palindromic_substring.py)
- - [knuth_morris_pratt](algorithms/strings/knuth_morris_pratt.py)
- - [panagram](algorithms/strings/panagram.py)
-- [tree](algorithms/tree)
- - [bst](algorithms/tree/bst)
- - [array_to_bst](algorithms/tree/bst/array_to_bst.py)
- - [bst_closest_value](algorithms/tree/bst/bst_closest_value.py)
- - [BSTIterator](algorithms/tree/bst/BSTIterator.py)
- - [delete_node](algorithms/tree/bst/delete_node.py)
- - [is_bst](algorithms/tree/bst/is_bst.py)
- - [kth_smallest](algorithms/tree/bst/kth_smallest.py)
- - [lowest_common_ancestor](algorithms/tree/bst/lowest_common_ancestor.py)
- - [predecessor](algorithms/tree/bst/predecessor.py)
- - [serialize_deserialize](algorithms/tree/bst/serialize_deserialize.py)
- - [successor](algorithms/tree/bst/successor.py)
- - [unique_bst](algorithms/tree/bst/unique_bst.py)
- - [depth_sum](algorithms/tree/bst/depth_sum.py)
- - [count_left_node](algorithms/tree/bst/count_left_node.py)
- - [num_empty](algorithms/tree/bst/num_empty.py)
- - [height](algorithms/tree/bst/height.py)
- - [fenwick_tree](algorithms/tree/fenwick_tree/fenwick_tree.py)
- - [red_black_tree](algorithms/tree/red_black_tree)
- - [red_black_tree](algorithms/tree/red_black_tree/red_black_tree.py)
- - [segment_tree](algorithms/tree/segment_tree)
- - [segment_tree](algorithms/tree/segment_tree/segment_tree.py)
- - [iterative_segment_tree](algorithms/tree/segment_tree/iterative_segment_tree.py)
- - [traversal](algorithms/tree/traversal)
- - [inorder](algorithms/tree/traversal/inorder.py)
- - [level_order](algorithms/tree/traversal/level_order.py)
- - [postorder](algorithms/tree/traversal/postorder.py)
- - [preorder](algorithms/tree/traversal/preorder.py)
- - [zigzag](algorithms/tree/traversal/zigzag.py)
- - [trie](algorithms/tree/trie)
- - [add_and_search](algorithms/tree/trie/add_and_search.py)
- - [trie](algorithms/tree/trie/trie.py)
- - [b_tree](algorithms/tree/b_tree.py)
- - [binary_tree_paths](algorithms/tree/binary_tree_paths.py)
- - [bin_tree_to_list](algorithms/tree/bin_tree_to_list.py)
- - [construct_tree_preorder_postorder](algorithms/tree/construct_tree_postorder_preorder.py)
- - [deepest_left](algorithms/tree/deepest_left.py)
- - [invert_tree](algorithms/tree/invert_tree.py)
- - [is_balanced](algorithms/tree/is_balanced.py)
- - [is_subtree](algorithms/tree/is_subtree.py)
- - [is_symmetric](algorithms/tree/is_symmetric.py)
- - [longest_consecutive](algorithms/tree/longest_consecutive.py)
- - [lowest_common_ancestor](algorithms/tree/lowest_common_ancestor.py)
- - [max_height](algorithms/tree/max_height.py)
- - [max_path_sum](algorithms/tree/max_path_sum.py)
- - [min_height](algorithms/tree/min_height.py)
- - [path_sum](algorithms/tree/path_sum.py)
- - [path_sum2](algorithms/tree/path_sum2.py)
- - [pretty_print](algorithms/tree/pretty_print.py)
- - [same_tree](algorithms/tree/same_tree.py)
- - [tree](algorithms/tree/tree.py)
-- [unix](algorithms/unix)
- - [path](algorithms/unix/path/)
- - [join_with_slash](algorithms/unix/path/join_with_slash.py)
- - [full_path](algorithms/unix/path/full_path.py)
- - [split](algorithms/unix/path/split.py)
- - [simplify_path](algorithms/unix/path/simplify_path.py)
-- [unionfind](algorithms/unionfind)
- - [count_islands](algorithms/unionfind/count_islands.py)
-
-
-## Contributors
-
-Thanks to [all the contributors](https://github.com/keon/algorithms/graphs/contributors)
-who helped in building the repo.
+# Report for Assignment 1
+
+## Project chosen
+
+Name:
+
+URL:
+
+Number of lines of code and the tool used to count it:
+
+Programming language:
+
+## Coverage measurement
+
+### Existing tool
+
+
+
+
+
+### Your own coverage tool
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Coverage improvement
+
+### Individual tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Overall
+
+
+
+
+
+## Statement of individual contributions
+
+
diff --git a/README_original.md b/README_original.md
new file mode 100644
index 000000000..25bf3bc03
--- /dev/null
+++ b/README_original.md
@@ -0,0 +1,424 @@
+[](https://badge.fury.io/py/algorithms)
+[](https://www.codetriage.com/keon/algorithms)
+[](https://travis-ci.org/keon/algorithms)
+[](https://coveralls.io/github/keon/algorithms?branch=master)
+
+
+
+Pythonic Data Structures and Algorithms
+=========================================
+
+Minimal and clean example implementations of data structures and algorithms in Python 3.
+
+## Contributing
+Thanks for your interest in contributing! There are many ways to contribute to this project. [Get started here](CONTRIBUTING.md)
+
+## Tests
+
+### Use unittest
+For running all tests write down:
+
+ $ python3 -m unittest discover tests
+
+For running some specific tests you can do this as following (Ex: sort):
+
+ $ python3 -m unittest tests.test_sort
+
+### Use pytest
+For running all tests write down:
+
+ $ python3 -m pytest tests
+
+## Install
+If you want to use the API algorithms in your code, it is as simple as:
+
+ $ pip3 install algorithms
+
+You can test by creating a python file: (Ex: use `merge_sort` in `sort`)
+
+```python3
+from algorithms.sort import merge_sort
+
+if __name__ == "__main__":
+ my_list = [1, 8, 3, 5, 6]
+ my_list = merge_sort(my_list)
+ print(my_list)
+```
+
+## Uninstall
+If you want to uninstall algorithms, it is as simple as:
+
+ $ pip3 uninstall -y algorithms
+
+## List of Implementations
+
+- [arrays](algorithms/arrays)
+ - [delete_nth](algorithms/arrays/delete_nth.py)
+ - [flatten](algorithms/arrays/flatten.py)
+ - [garage](algorithms/arrays/garage.py)
+ - [josephus_problem](algorithms/arrays/josephus.py)
+ - [limit](algorithms/arrays/limit.py)
+ - [longest_non_repeat](algorithms/arrays/longest_non_repeat.py/)
+ - [max_ones_index](algorithms/arrays/max_ones_index.py)
+ - [merge_intervals](algorithms/arrays/merge_intervals.py)
+ - [missing_ranges](algorithms/arrays/missing_ranges.py)
+ - [plus_one](algorithms/arrays/plus_one.py)
+ - [remove_duplicates](algorithms/arrays/remove_duplicates.py)
+ - [rotate](algorithms/arrays/rotate.py)
+ - [summarize_ranges](algorithms/arrays/summarize_ranges.py)
+ - [three_sum](algorithms/arrays/three_sum.py)
+ - [trimmean](algorithms/arrays/trimmean.py)
+ - [top_1](algorithms/arrays/top_1.py)
+ - [two_sum](algorithms/arrays/two_sum.py)
+ - [move_zeros](algorithms/arrays/move_zeros.py)
+ - [n_sum](algorithms/arrays/n_sum.py)
+- [greedy](algorithms/greedy/)
+ - [max_contiguous_subsequence_sum](algorithms/greedy/max_contiguous_subsequence_sum.py)
+- [automata](algorithms/automata)
+ - [DFA](algorithms/automata/dfa.py)
+- [backtrack](algorithms/backtrack)
+ - [general_solution.md](algorithms/backtrack/)
+ - [add_operators](algorithms/backtrack/add_operators.py)
+ - [anagram](algorithms/backtrack/anagram.py)
+ - [array_sum_combinations](algorithms/backtrack/array_sum_combinations.py)
+ - [combination_sum](algorithms/backtrack/combination_sum.py)
+ - [factor_combinations](algorithms/backtrack/factor_combinations.py)
+ - [generate_abbreviations](algorithms/backtrack/generate_abbreviations.py)
+ - [generate_parenthesis](algorithms/backtrack/generate_parenthesis.py)
+ - [letter_combination](algorithms/backtrack/letter_combination.py)
+ - [palindrome_partitioning](algorithms/backtrack/palindrome_partitioning.py)
+ - [pattern_match](algorithms/backtrack/pattern_match.py)
+ - [permute](algorithms/backtrack/permute.py)
+ - [permute_unique](algorithms/backtrack/permute_unique.py)
+ - [subsets](algorithms/backtrack/subsets.py)
+ - [subsets_unique](algorithms/backtrack/subsets_unique.py)
+- [bfs](algorithms/bfs)
+ - [maze_search](algorithms/bfs/maze_search.py)
+ - [shortest_distance_from_all_buildings](algorithms/bfs/shortest_distance_from_all_buildings.py)
+ - [word_ladder](algorithms/bfs/word_ladder.py)
+- [bit](algorithms/bit)
+ - [add_bitwise_operator](algorithms/bit/add_bitwise_operator.py)
+ - [bit_operation](algorithms/bit/bit_operation.py)
+ - [bytes_int_conversion](algorithms/bit/bytes_int_conversion.py)
+ - [count_flips_to_convert](algorithms/bit/count_flips_to_convert.py)
+ - [count_ones](algorithms/bit/count_ones.py)
+ - [find_difference](algorithms/bit/find_difference.py)
+ - [find_missing_number](algorithms/bit/find_missing_number.py)
+ - [flip_bit_longest_sequence](algorithms/bit/flip_bit_longest_sequence.py)
+ - [power_of_two](algorithms/bit/power_of_two.py)
+ - [reverse_bits](algorithms/bit/reverse_bits.py)
+ - [single_number](algorithms/bit/single_number.py)
+ - [single_number2](algorithms/bit/single_number2.py)
+ - [single_number3](algorithms/bit/single_number3.py)
+ - [subsets](algorithms/bit/subsets.py)
+ - [swap_pair](algorithms/bit/swap_pair.py)
+ - [has_alternative_bit](algorithms/bit/has_alternative_bit.py)
+ - [insert_bit](algorithms/bit/insert_bit.py)
+ - [remove_bit](algorithms/bit/remove_bit.py)
+ - [binary_gap](algorithms/bit/binary_gap.py)
+- [compression](algorithms/compression)
+ - [huffman_coding](algorithms/compression/huffman_coding.py)
+ - [rle_compression](algorithms/compression/rle_compression.py)
+ - [elias](algorithms/compression/elias.py)
+- [dfs](algorithms/dfs)
+ - [all_factors](algorithms/dfs/all_factors.py)
+ - [count_islands](algorithms/dfs/count_islands.py)
+ - [pacific_atlantic](algorithms/dfs/pacific_atlantic.py)
+ - [sudoku_solver](algorithms/dfs/sudoku_solver.py)
+ - [walls_and_gates](algorithms/dfs/walls_and_gates.py)
+- [distribution](algorithms/distribution)
+ - [histogram](algorithms/distribution/histogram.py)
+- [dp](algorithms/dp)
+ - [buy_sell_stock](algorithms/dp/buy_sell_stock.py)
+ - [climbing_stairs](algorithms/dp/climbing_stairs.py)
+ - [coin_change](algorithms/dp/coin_change.py)
+ - [combination_sum](algorithms/dp/combination_sum.py)
+ - [egg_drop](algorithms/dp/egg_drop.py)
+ - [house_robber](algorithms/dp/house_robber.py)
+ - [int_divide](algorithms/dp/int_divide.py)
+ - [job_scheduling](algorithms/dp/job_scheduling.py)
+ - [knapsack](algorithms/dp/knapsack.py)
+ - [longest_increasing](algorithms/dp/longest_increasing.py)
+ - [matrix_chain_order](algorithms/dp/matrix_chain_order.py)
+ - [max_product_subarray](algorithms/dp/max_product_subarray.py)
+ - [max_subarray](algorithms/dp/max_subarray.py)
+ - [min_cost_path](algorithms/dp/min_cost_path.py)
+ - [num_decodings](algorithms/dp/num_decodings.py)
+ - [regex_matching](algorithms/dp/regex_matching.py)
+ - [rod_cut](algorithms/dp/rod_cut.py)
+ - [word_break](algorithms/dp/word_break.py)
+ - [fibonacci](algorithms/dp/fib.py)
+ - [hosoya triangle](algorithms/dp/hosoya_triangle.py)
+ - [K-Factor_strings](algorithms/dp/k_factor.py)
+ - [planting_trees](algorithms/dp/planting_trees.py)
+- [graph](algorithms/graph)
+ - [check_bipartite](algorithms/graph/check_bipartite.py)
+ - [strongly_connected](algorithms/graph/check_digraph_strongly_connected.py)
+ - [clone_graph](algorithms/graph/clone_graph.py)
+ - [cycle_detection](algorithms/graph/cycle_detection.py)
+ - [find_all_cliques](algorithms/graph/find_all_cliques.py)
+ - [find_path](algorithms/graph/find_path.py)
+ - [graph](algorithms/graph/graph.py)
+ - [dijkstra](algorithms/graph/dijkstra.py)
+ - [markov_chain](algorithms/graph/markov_chain.py)
+ - [minimum_spanning_tree](algorithms/graph/minimum_spanning_tree.py)
+ - [satisfiability](algorithms/graph/satisfiability.py)
+ - [minimum_spanning_tree_prims](algorithms/graph/prims_minimum_spanning.py)
+ - [tarjan](algorithms/graph/tarjan.py)
+ - [traversal](algorithms/graph/traversal.py)
+ - [maximum_flow](algorithms/graph/maximum_flow.py)
+ - [maximum_flow_bfs](algorithms/graph/maximum_flow_bfs.py)
+ - [maximum_flow_dfs](algorithms/graph/maximum_flow_dfs.py)
+ - [all_pairs_shortest_path](algorithms/graph/all_pairs_shortest_path.py)
+ - [bellman_ford](algorithms/graph/bellman_ford.py)
+ - [Count Connected Components](algorithms/graph/count_connected_number_of_component.py)
+- [heap](algorithms/heap)
+ - [merge_sorted_k_lists](algorithms/heap/merge_sorted_k_lists.py)
+ - [skyline](algorithms/heap/skyline.py)
+ - [sliding_window_max](algorithms/heap/sliding_window_max.py)
+ - [binary_heap](algorithms/heap/binary_heap.py)
+ - [k_closest_points](algorithms/heap/k_closest_points.py)
+- [linkedlist](algorithms/linkedlist)
+ - [add_two_numbers](algorithms/linkedlist/add_two_numbers.py)
+ - [copy_random_pointer](algorithms/linkedlist/copy_random_pointer.py)
+ - [delete_node](algorithms/linkedlist/delete_node.py)
+ - [first_cyclic_node](algorithms/linkedlist/first_cyclic_node.py)
+ - [is_cyclic](algorithms/linkedlist/is_cyclic.py)
+ - [is_palindrome](algorithms/linkedlist/is_palindrome.py)
+ - [kth_to_last](algorithms/linkedlist/kth_to_last.py)
+ - [linkedlist](algorithms/linkedlist/linkedlist.py)
+ - [remove_duplicates](algorithms/linkedlist/remove_duplicates.py)
+ - [reverse](algorithms/linkedlist/reverse.py)
+ - [rotate_list](algorithms/linkedlist/rotate_list.py)
+ - [swap_in_pairs](algorithms/linkedlist/swap_in_pairs.py)
+ - [is_sorted](algorithms/linkedlist/is_sorted.py)
+ - [remove_range](algorithms/linkedlist/remove_range.py)
+- [map](algorithms/map)
+ - [hashtable](algorithms/map/hashtable.py)
+ - [separate_chaining_hashtable](algorithms/map/separate_chaining_hashtable.py)
+ - [longest_common_subsequence](algorithms/map/longest_common_subsequence.py)
+ - [longest_palindromic_subsequence](algorithms/map/longest_palindromic_subsequence.py)
+ - [randomized_set](algorithms/map/randomized_set.py)
+ - [valid_sudoku](algorithms/map/valid_sudoku.py)
+ - [word_pattern](algorithms/map/word_pattern.py)
+ - [is_isomorphic](algorithms/map/is_isomorphic.py)
+ - [is_anagram](algorithms/map/is_anagram.py)
+- [maths](algorithms/maths)
+ - [base_conversion](algorithms/maths/base_conversion.py)
+ - [chinese_remainder_theorem](algorithms/maths/chinese_remainder_theorem.py)
+ - [combination](algorithms/maths/combination.py)
+ - [cosine_similarity](algorithms/maths/cosine_similarity.py)
+ - [decimal_to_binary_ip](algorithms/maths/decimal_to_binary_ip.py)
+ - [diffie_hellman_key_exchange](algorithms/maths/diffie_hellman_key_exchange.py)
+ - [euler_totient](algorithms/maths/euler_totient.py)
+ - [extended_gcd](algorithms/maths/extended_gcd.py)
+ - [factorial](algorithms/maths/factorial.py)
+ - [find_order](algorithms/maths/find_order_simple.py)
+ - [find_primitive_root](algorithms/maths/find_primitive_root_simple.py)
+ - [gcd/lcm](algorithms/maths/gcd.py)
+ - [generate_strobogrammtic](algorithms/maths/generate_strobogrammtic.py)
+ - [hailstone](algorithms/maths/hailstone.py)
+ - [is_strobogrammatic](algorithms/maths/is_strobogrammatic.py)
+ - [krishnamurthy_number](algorithms/maths/krishnamurthy_number.py)
+ - [magic_number](algorithms/maths/magic_number.py)
+ - [modular_exponential](algorithms/maths/modular_exponential.py)
+ - [modular_inverse](algorithms/maths/modular_inverse.py)
+ - [next_bigger](algorithms/maths/next_bigger.py)
+ - [next_perfect_square](algorithms/maths/next_perfect_square.py)
+ - [nth_digit](algorithms/maths/nth_digit.py)
+ - [num_perfect_squares](algorithms/maths/num_perfect_squares.py)
+ - [polynomial](algorithms/maths/polynomial.py)
+ - [power](algorithms/maths/power.py)
+ - [prime_check](algorithms/maths/prime_check.py)
+ - [primes_sieve_of_eratosthenes](algorithms/maths/primes_sieve_of_eratosthenes.py)
+ - [pythagoras](algorithms/maths/pythagoras.py)
+ - [rabin_miller](algorithms/maths/rabin_miller.py)
+ - [recursive_binomial_coefficient](algorithms/maths/recursive_binomial_coefficient.py)
+ - [rsa](algorithms/maths/rsa.py)
+ - [sqrt_precision_factor](algorithms/maths/sqrt_precision_factor.py)
+ - [summing_digits](algorithms/maths/summing_digits.py)
+ - [symmetry_group_cycle_index](algorithms/maths/symmetry_group_cycle_index.py)
+- [matrix](algorithms/matrix)
+ - [sudoku_validator](algorithms/matrix/sudoku_validator.py)
+ - [bomb_enemy](algorithms/matrix/bomb_enemy.py)
+ - [copy_transform](algorithms/matrix/copy_transform.py)
+ - [count_paths](algorithms/matrix/count_paths.py)
+ - [matrix_exponentiation](algorithms/matrix/matrix_exponentiation.py)
+ - [matrix_inversion](algorithms/matrix/matrix_inversion.py)
+ - [matrix_multiplication](algorithms/matrix/multiply.py)
+ - [rotate_image](algorithms/matrix/rotate_image.py)
+ - [search_in_sorted_matrix](algorithms/matrix/search_in_sorted_matrix.py)
+ - [sparse_dot_vector](algorithms/matrix/sparse_dot_vector.py)
+ - [sparse_mul](algorithms/matrix/sparse_mul.py)
+ - [spiral_traversal](algorithms/matrix/spiral_traversal.py)
+ - [crout_matrix_decomposition](algorithms/matrix/crout_matrix_decomposition.py)
+ - [cholesky_matrix_decomposition](algorithms/matrix/cholesky_matrix_decomposition.py)
+ - [sum_sub_squares](algorithms/matrix/sum_sub_squares.py)
+ - [sort_matrix_diagonally](algorithms/matrix/sort_matrix_diagonally.py)
+- [queues](algorithms/queues)
+ - [max_sliding_window](algorithms/queues/max_sliding_window.py)
+ - [moving_average](algorithms/queues/moving_average.py)
+ - [queue](algorithms/queues/queue.py)
+ - [reconstruct_queue](algorithms/queues/reconstruct_queue.py)
+ - [zigzagiterator](algorithms/queues/zigzagiterator.py)
+- [search](algorithms/search)
+ - [binary_search](algorithms/search/binary_search.py)
+ - [first_occurrence](algorithms/search/first_occurrence.py)
+ - [last_occurrence](algorithms/search/last_occurrence.py)
+ - [linear_search](algorithms/search/linear_search.py)
+ - [search_insert](algorithms/search/search_insert.py)
+ - [two_sum](algorithms/search/two_sum.py)
+ - [search_range](algorithms/search/search_range.py)
+ - [find_min_rotate](algorithms/search/find_min_rotate.py)
+ - [search_rotate](algorithms/search/search_rotate.py)
+ - [jump_search](algorithms/search/jump_search.py)
+ - [next_greatest_letter](algorithms/search/next_greatest_letter.py)
+ - [interpolation_search](algorithms/search/interpolation_search.py)
+- [set](algorithms/set)
+ - [randomized_set](algorithms/set/randomized_set.py)
+ - [set_covering](algorithms/set/set_covering.py)
+ - [find_keyboard_row](algorithms/set/find_keyboard_row.py)
+- [sort](algorithms/sort)
+ - [bitonic_sort](algorithms/sort/bitonic_sort.py)
+ - [bogo_sort](algorithms/sort/bogo_sort.py)
+ - [bubble_sort](algorithms/sort/bubble_sort.py)
+ - [bucket_sort](algorithms/sort/bucket_sort.py)
+ - [cocktail_shaker_sort](algorithms/sort/cocktail_shaker_sort.py)
+ - [comb_sort](algorithms/sort/comb_sort.py)
+ - [counting_sort](algorithms/sort/counting_sort.py)
+ - [cycle_sort](algorithms/sort/cycle_sort.py)
+ - [exchange_sort](algorithms/sort/exchange_sort.py)
+ - [gnome_sort](algorithms/sort/gnome_sort.py)
+ - [heap_sort](algorithms/sort/heap_sort.py)
+ - [insertion_sort](algorithms/sort/insertion_sort.py)
+ - [meeting_rooms](algorithms/sort/meeting_rooms.py)
+ - [merge_sort](algorithms/sort/merge_sort.py)
+ - [pancake_sort](algorithms/sort/pancake_sort.py)
+ - [pigeonhole_sort](algorithms/sort/pigeonhole_sort.py)
+ - [quick_sort](algorithms/sort/quick_sort.py)
+ - [radix_sort](algorithms/sort/radix_sort.py)
+ - [selection_sort](algorithms/sort/selection_sort.py)
+ - [shell_sort](algorithms/sort/shell_sort.py)
+ - [sort_colors](algorithms/sort/sort_colors.py)
+ - [stooge_sort](algorithms/sort/stooge_sort.py)
+ - [top_sort](algorithms/sort/top_sort.py)
+ - [wiggle_sort](algorithms/sort/wiggle_sort.py)
+- [stack](algorithms/stack)
+ - [longest_abs_path](algorithms/stack/longest_abs_path.py)
+ - [simplify_path](algorithms/stack/simplify_path.py)
+ - [stack](algorithms/stack/stack.py)
+ - [valid_parenthesis](algorithms/stack/valid_parenthesis.py)
+ - [stutter](algorithms/stack/stutter.py)
+ - [switch_pairs](algorithms/stack/switch_pairs.py)
+ - [is_consecutive](algorithms/stack/is_consecutive.py)
+ - [remove_min](algorithms/stack/remove_min.py)
+ - [is_sorted](algorithms/stack/is_sorted.py)
+- [streaming](algorithms/streaming)
+ - [1-sparse-recovery](algorithms/streaming/one_sparse_recovery.py)
+ - [misra-gries](algorithms/streaming/misra_gries.py)
+- [strings](algorithms/strings)
+ - [fizzbuzz](algorithms/strings/fizzbuzz.py)
+ - [delete_reoccurring](algorithms/strings/delete_reoccurring.py)
+ - [strip_url_params](algorithms/strings/strip_url_params.py)
+ - [validate_coordinates](algorithms/strings/validate_coordinates.py)
+ - [domain_extractor](algorithms/strings/domain_extractor.py)
+ - [merge_string_checker](algorithms/strings/merge_string_checker.py)
+ - [add_binary](algorithms/strings/add_binary.py)
+ - [breaking_bad](algorithms/strings/breaking_bad.py)
+ - [decode_string](algorithms/strings/decode_string.py)
+ - [encode_decode](algorithms/strings/encode_decode.py)
+ - [group_anagrams](algorithms/strings/group_anagrams.py)
+ - [int_to_roman](algorithms/strings/int_to_roman.py)
+ - [is_palindrome](algorithms/strings/is_palindrome.py)
+ - [license_number](algorithms/strings/license_number.py)
+ - [make_sentence](algorithms/strings/make_sentence.py)
+ - [multiply_strings](algorithms/strings/multiply_strings.py)
+ - [one_edit_distance](algorithms/strings/one_edit_distance.py)
+ - [rabin_karp](algorithms/strings/rabin_karp.py)
+ - [reverse_string](algorithms/strings/reverse_string.py)
+ - [reverse_vowel](algorithms/strings/reverse_vowel.py)
+ - [reverse_words](algorithms/strings/reverse_words.py)
+ - [roman_to_int](algorithms/strings/roman_to_int.py)
+ - [word_squares](algorithms/strings/word_squares.py)
+ - [unique_morse](algorithms/strings/unique_morse.py)
+ - [judge_circle](algorithms/strings/judge_circle.py)
+ - [strong_password](algorithms/strings/strong_password.py)
+ - [caesar_cipher](algorithms/strings/caesar_cipher.py)
+ - [check_pangram](algorithms/strings/check_pangram.py)
+ - [contain_string](algorithms/strings/contain_string.py)
+ - [count_binary_substring](algorithms/strings/count_binary_substring.py)
+ - [repeat_string](algorithms/strings/repeat_string.py)
+ - [min_distance](algorithms/strings/min_distance.py)
+ - [longest_common_prefix](algorithms/strings/longest_common_prefix.py)
+ - [rotate](algorithms/strings/rotate.py)
+ - [first_unique_char](algorithms/strings/first_unique_char.py)
+ - [repeat_substring](algorithms/strings/repeat_substring.py)
+ - [atbash_cipher](algorithms/strings/atbash_cipher.py)
+ - [longest_palindromic_substring](algorithms/strings/longest_palindromic_substring.py)
+ - [knuth_morris_pratt](algorithms/strings/knuth_morris_pratt.py)
+ - [panagram](algorithms/strings/panagram.py)
+- [tree](algorithms/tree)
+ - [bst](algorithms/tree/bst)
+ - [array_to_bst](algorithms/tree/bst/array_to_bst.py)
+ - [bst_closest_value](algorithms/tree/bst/bst_closest_value.py)
+ - [BSTIterator](algorithms/tree/bst/BSTIterator.py)
+ - [delete_node](algorithms/tree/bst/delete_node.py)
+ - [is_bst](algorithms/tree/bst/is_bst.py)
+ - [kth_smallest](algorithms/tree/bst/kth_smallest.py)
+ - [lowest_common_ancestor](algorithms/tree/bst/lowest_common_ancestor.py)
+ - [predecessor](algorithms/tree/bst/predecessor.py)
+ - [serialize_deserialize](algorithms/tree/bst/serialize_deserialize.py)
+ - [successor](algorithms/tree/bst/successor.py)
+ - [unique_bst](algorithms/tree/bst/unique_bst.py)
+ - [depth_sum](algorithms/tree/bst/depth_sum.py)
+ - [count_left_node](algorithms/tree/bst/count_left_node.py)
+ - [num_empty](algorithms/tree/bst/num_empty.py)
+ - [height](algorithms/tree/bst/height.py)
+ - [fenwick_tree](algorithms/tree/fenwick_tree/fenwick_tree.py)
+ - [red_black_tree](algorithms/tree/red_black_tree)
+ - [red_black_tree](algorithms/tree/red_black_tree/red_black_tree.py)
+ - [segment_tree](algorithms/tree/segment_tree)
+ - [segment_tree](algorithms/tree/segment_tree/segment_tree.py)
+ - [iterative_segment_tree](algorithms/tree/segment_tree/iterative_segment_tree.py)
+ - [traversal](algorithms/tree/traversal)
+ - [inorder](algorithms/tree/traversal/inorder.py)
+ - [level_order](algorithms/tree/traversal/level_order.py)
+ - [postorder](algorithms/tree/traversal/postorder.py)
+ - [preorder](algorithms/tree/traversal/preorder.py)
+ - [zigzag](algorithms/tree/traversal/zigzag.py)
+ - [trie](algorithms/tree/trie)
+ - [add_and_search](algorithms/tree/trie/add_and_search.py)
+ - [trie](algorithms/tree/trie/trie.py)
+ - [b_tree](algorithms/tree/b_tree.py)
+ - [binary_tree_paths](algorithms/tree/binary_tree_paths.py)
+ - [bin_tree_to_list](algorithms/tree/bin_tree_to_list.py)
+ - [construct_tree_preorder_postorder](algorithms/tree/construct_tree_postorder_preorder.py)
+ - [deepest_left](algorithms/tree/deepest_left.py)
+ - [invert_tree](algorithms/tree/invert_tree.py)
+ - [is_balanced](algorithms/tree/is_balanced.py)
+ - [is_subtree](algorithms/tree/is_subtree.py)
+ - [is_symmetric](algorithms/tree/is_symmetric.py)
+ - [longest_consecutive](algorithms/tree/longest_consecutive.py)
+ - [lowest_common_ancestor](algorithms/tree/lowest_common_ancestor.py)
+ - [max_height](algorithms/tree/max_height.py)
+ - [max_path_sum](algorithms/tree/max_path_sum.py)
+ - [min_height](algorithms/tree/min_height.py)
+ - [path_sum](algorithms/tree/path_sum.py)
+ - [path_sum2](algorithms/tree/path_sum2.py)
+ - [pretty_print](algorithms/tree/pretty_print.py)
+ - [same_tree](algorithms/tree/same_tree.py)
+ - [tree](algorithms/tree/tree.py)
+- [unix](algorithms/unix)
+ - [path](algorithms/unix/path/)
+ - [join_with_slash](algorithms/unix/path/join_with_slash.py)
+ - [full_path](algorithms/unix/path/full_path.py)
+ - [split](algorithms/unix/path/split.py)
+ - [simplify_path](algorithms/unix/path/simplify_path.py)
+- [unionfind](algorithms/unionfind)
+ - [count_islands](algorithms/unionfind/count_islands.py)
+
+
+## Contributors
+
+Thanks to [all the contributors](https://github.com/keon/algorithms/graphs/contributors)
+who helped in building the repo.
From bbce1bde5f8c3481469da796f8e910752e4e2f10 Mon Sep 17 00:00:00 2001
From: aymanpopje
Date: Thu, 13 Jun 2024 13:53:27 +0200
Subject: [PATCH 02/27] Added missing comma in "test_array.py"
---
tests/test_array.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/test_array.py b/tests/test_array.py
index f1ad11693..b73ecb17b 100644
--- a/tests/test_array.py
+++ b/tests/test_array.py
@@ -9,7 +9,7 @@
missing_ranges,
move_zeros,
plus_one_v1, plus_one_v2, plus_one_v3,
- remove_duplicates
+ remove_duplicates,
rotate_v1, rotate_v2, rotate_v3,
summarize_ranges,
three_sum,
From a2036f5c55c4e88773cc8835afff30068d157a9a Mon Sep 17 00:00:00 2001
From: aymanpopje
Date: Fri, 14 Jun 2024 12:00:55 +0200
Subject: [PATCH 03/27] Created script for measuring doing tests and measuring
branch coverage. (branch-coverage.py. Requires coverage.py is installed) Made
test scripts not count towards branch coverage
---
.coveragerc | 1 +
branch-coverage.py | 4 ++++
2 files changed, 5 insertions(+)
create mode 100644 branch-coverage.py
diff --git a/.coveragerc b/.coveragerc
index a5f7fcee8..c42e2db7a 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -1,5 +1,6 @@
[report]
omit =
+ */tests/*
*/python?.?/*
*/site-packages/nose/*
*__init__*
diff --git a/branch-coverage.py b/branch-coverage.py
new file mode 100644
index 000000000..04ab54c8f
--- /dev/null
+++ b/branch-coverage.py
@@ -0,0 +1,4 @@
+import subprocess
+
+subprocess.run(["coverage", "run", "--branch", "-m", "pytest", "tests"])
+subprocess.run(["coverage", "report"])
\ No newline at end of file
From fcec603cc18fda4af5530a1b251f864eaa4b6123 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Fri, 14 Jun 2024 20:14:54 +0200
Subject: [PATCH 04/27] add
---
algorithms/maths/euler_totient.py | 22 +++++++++++++++++++
algorithms/strings/count_binary_substring.py | 23 ++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/algorithms/maths/euler_totient.py b/algorithms/maths/euler_totient.py
index f29d382ff..ed5d873c5 100644
--- a/algorithms/maths/euler_totient.py
+++ b/algorithms/maths/euler_totient.py
@@ -4,15 +4,37 @@
which are coprime to n.
(Two numbers are coprime if their greatest common divisor (GCD) equals 1).
"""
+branch_coverage = {
+ "check_1": False, # if branch for x > 0
+ "check_2": False, # else branch
+ "check_2": False,
+ "check_2": False,
+}
def euler_totient(n):
"""Euler's totient function or Phi function.
Time Complexity: O(sqrt(n))."""
result = n
for i in range(2, int(n ** 0.5) + 1):
+ branch_coverage["check_1"] = True
if n % i == 0:
+ branch_coverage["check_2"] = True
while n % i == 0:
+ branch_coverage["check_3"] = True
n //= i
result -= result // i
if n > 1:
+ branch_coverage["check_4"] = True
result -= result // n
return result
+
+def print_coverage():
+ total = len(branch_coverage)
+ reached = sum(branch_coverage.values())
+ coverage_percentage = (reached / total) * 100
+ for branch, hit in branch_coverage.items():
+ print(f"{branch} was {'hit' if hit else 'not hit'}")
+ print(f"coverage_percentage: {coverage_percentage}%")
+
+
+result = euler_totient(21)
+print_coverage()
\ No newline at end of file
diff --git a/algorithms/strings/count_binary_substring.py b/algorithms/strings/count_binary_substring.py
index bd775ee53..b766d12c9 100644
--- a/algorithms/strings/count_binary_substring.py
+++ b/algorithms/strings/count_binary_substring.py
@@ -18,16 +18,39 @@
Explanation: There are 4 substrings: "10", "01", "10", "01" that have equal number of consecutive 1's and 0's.
Reference: https://leetcode.com/problems/count-binary-substrings/description/
"""
+branch_coverage = {
+ "check_5": False,
+ "check_6": False,
+ "check_7": False,
+}
+
def count_binary_substring(s):
+ global branch_coverage
cur = 1
pre = 0
count = 0
for i in range(1, len(s)):
+ branch_coverage["check_5"] = True
if s[i] != s[i - 1]:
+ branch_coverage["check_6"] = True
count = count + min(pre, cur)
pre = cur
cur = 1
else:
+ branch_coverage["check_7"] = True
cur = cur + 1
count = count + min(pre, cur)
return count
+
+
+def print_coverage():
+ total = len(branch_coverage)
+ reached_branches = sum(branch_coverage.values())
+ percentage = (reached_branches / total) * 100
+ for branch, hit in branch_coverage.items():
+ print(f"{branch} was {'hit' if hit else 'not hit'}")
+ print(f"total Coverage: {percentage}%")
+
+count = count_binary_substring("01100110")
+
+print_coverage()
From 57b66879c6ae0f82712c55528f540dfdb3c3ddd3 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 14:09:35 +0200
Subject: [PATCH 05/27] add
---
algorithms/dp/word_break.py | 30 +++++++++++++++++++++++----
algorithms/sort/stooge_sort.py | 38 +++++++++++++++++++++++++++-------
2 files changed, 57 insertions(+), 11 deletions(-)
diff --git a/algorithms/dp/word_break.py b/algorithms/dp/word_break.py
index f520456b0..0cae1b189 100644
--- a/algorithms/dp/word_break.py
+++ b/algorithms/dp/word_break.py
@@ -17,6 +17,14 @@
"""
+# TC: O(N^2) SC: O(N)
+branch_coverage = {
+ "check_1": False,
+ "check_2": False,
+ "check_3": False,
+ "check_4": False,
+
+}
# TC: O(N^2) SC: O(N)
def word_break(word, word_dict):
"""
@@ -27,15 +35,29 @@ def word_break(word, word_dict):
dp_array = [False] * (len(word)+1)
dp_array[0] = True
for i in range(1, len(word)+1):
+ branch_coverage["check_1"] = True
for j in range(0, i):
+ branch_coverage["check_2"] = True
if dp_array[j] and word[j:i] in word_dict:
+ branch_coverage["check_3"] = True
dp_array[i] = True
break
+ branch_coverage["check_4"] = True
return dp_array[-1]
-if __name__ == "__main__":
- STR = "keonkim"
- dic = ["keon", "kim"]
+def print_coverage():
+ total = len(branch_coverage)
+ reached = sum(branch_coverage.values())
+ coverage_percentage = (reached / total) * 100
+ for branch, hit in branch_coverage.items():
+ print(f"{branch} was {'hit' if hit else 'not hit'}")
+ print(f"coverage_percentage: {coverage_percentage}%")
+
+
+result = word_break("keonkim", {"keon", "kim"})
+print_coverage()
+
+
+
- print(word_break(str, dic))
diff --git a/algorithms/sort/stooge_sort.py b/algorithms/sort/stooge_sort.py
index 42f8b3bd4..b8419cef8 100644
--- a/algorithms/sort/stooge_sort.py
+++ b/algorithms/sort/stooge_sort.py
@@ -6,15 +6,22 @@
'''
-
+branch_coverage = {
+ "check_1": False, # if branch for x > 0
+ "check_2": False, # else branch
+ "check_3": False,
+ "check_4": False,
+}
def stoogesort(arr, l, h):
if l >= h:
+ branch_coverage["check_1"] = True
return
# If first element is smaller
# than last, swap them
if arr[l]>arr[h]:
+ branch_coverage["check_2"] = True
t = arr[l]
arr[l] = arr[h]
arr[h] = t
@@ -22,6 +29,7 @@ def stoogesort(arr, l, h):
# If there are more than 2 elements in
# the array
if h-l + 1 > 2:
+ branch_coverage["check_3"] = True
t = (int)((h-l + 1)/3)
# Recursively sort first 2 / 3 elements
@@ -33,11 +41,27 @@ def stoogesort(arr, l, h):
# Recursively sort first 2 / 3 elements
# again to confirm
stoogesort(arr, l, (h-t))
+
+ branch_coverage["check_4"] = True
+
+def print_coverage():
+ total = len(branch_coverage)
+ reached = sum(branch_coverage.values())
+ coverage_percentage = (reached / total) * 100
+ for branch, hit in branch_coverage.items():
+ print(f"{branch} was {'hit' if hit else 'not hit'}")
+ print(f"coverage_percentage: {coverage_percentage}%")
+
+arr1 = [10, -1, 2, 3, 0]
+arr2 = []
+result = stoogesort(arr1, 0, len(arr1) - 1)
+result = stoogesort(arr1, 0, len(arr2) - 1)
+print_coverage()
-if __name__ == "__main__":
- array = [1,3,64,5,7,8]
- n = len(array)
- stoogesort(array, 0, n-1)
- for i in range(0, n):
- print(array[i], end = ' ')
+# if __name__ == "__main__":
+# array = [1,3,64,5,7,8]
+# n = len(array)
+# stoogesort(array, 0, n-1)
+# for i in range(0, n):
+# print(array[i], end = ' ')
From 157de36fd4c373b67cd03e3b3713be9ba5cf0d97 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 14:34:08 +0200
Subject: [PATCH 06/27] add
---
tests/test_dp.py | 13 ++++++++++++-
tests/test_sort.py | 25 +++++++++++++++++++++++--
2 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/tests/test_dp.py b/tests/test_dp.py
index e92800a11..e1f2ab8cd 100644
--- a/tests/test_dp.py
+++ b/tests/test_dp.py
@@ -14,7 +14,8 @@
longest_increasing_subsequence_optimized,
longest_increasing_subsequence_optimized2,
int_divide,find_k_factor,
- planting_trees, regex_matching
+ planting_trees, regex_matching,
+ word_break,
)
@@ -258,6 +259,16 @@ def test_symbol_2(self):
p = "ab*"
self.assertTrue(regex_matching.is_match(s, p))
+class TestWordBreak(unittest.TestCase):
+ """Test for interpolation_search and word_break"""
+
+ def test_word_break(self):
+ self.assertTrue(word_break("keonkim", {"keon", "kim"}))
+ self.assertTrue(word_break("leetcode", {"leet", "code"}))
+ self.assertFalse(word_break("catsandog", {"cats", "dog", "sand", "and", "cat"}))
+ self.assertTrue(word_break("applepenapple", {"apple", "pen"}))
+ self.assertFalse(word_break("pineapplepenapple", {"apple", "pen"}))
+ self.assertTrue(word_break("aaaaaaa", {"aaaa", "aaa"}))
if __name__ == '__main__':
unittest.main()
diff --git a/tests/test_sort.py b/tests/test_sort.py
index c80290fdf..3627bb7cd 100644
--- a/tests/test_sort.py
+++ b/tests/test_sort.py
@@ -17,7 +17,8 @@
radix_sort,
gnome_sort,
cocktail_shaker_sort,
- top_sort, top_sort_recursive
+ top_sort, top_sort_recursive,
+
)
import unittest
@@ -124,7 +125,27 @@ def test_topsort(self):
self.assertTrue(res.index('g') < res.index('e'))
res = top_sort(self.depGraph)
self.assertTrue(res.index('g') < res.index('e'))
-
+class TestStoog(unittest.TestCase):
+ def test_stoogesort(self):
+ arr1 = [1, 3, 64, 5, 7, 8]
+ stoogesort(arr1, 0, len(arr1) - 1)
+ self.assertEqual(arr1, [1, 3, 5, 7, 8, 64])
+
+ arr2 = [5, 4, 3, 2, 1]
+ stoogesort(arr2, 0, len(arr2) - 1)
+ self.assertEqual(arr2, [1, 2, 3, 4, 5])
+
+ arr3 = [1, 2, 3, 4, 5]
+ stoogesort(arr3, 0, len(arr3) - 1)
+ self.assertEqual(arr3, [1, 2, 3, 4, 5])
+
+ arr4 = [10, -1, 2, 3, 0]
+ stoogesort(arr4, 0, len(arr4) - 1)
+ self.assertEqual(arr4, [-1, 0, 2, 3, 10])
+
+ arr5 = []
+ stoogesort(arr5, 0, len(arr5) - 1)
+ self.assertEqual(arr5, [])
if __name__ == "__main__":
unittest.main()
From 386ed52ba2edf4185491cbf3caa505b183721a5c Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 14:36:06 +0200
Subject: [PATCH 07/27] add
---
tests/test_sort.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/test_sort.py b/tests/test_sort.py
index 3627bb7cd..10113348e 100644
--- a/tests/test_sort.py
+++ b/tests/test_sort.py
@@ -18,7 +18,7 @@
gnome_sort,
cocktail_shaker_sort,
top_sort, top_sort_recursive,
-
+ stoogesort
)
import unittest
From 0f4d2d944cfb779f4345d98c05c3da411e0b68d1 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 16:40:14 +0200
Subject: [PATCH 08/27] add
---
README.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 59 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index fd8293229..be1bd88b1 100644
--- a/README.md
+++ b/README.md
@@ -6,15 +6,13 @@ Name:
URL:
-Number of lines of code and the tool used to count it:
-
Programming language:
## Coverage measurement
### Existing tool
-
+
@@ -24,6 +22,62 @@ Programming language:
+Almuthana Almustafa
+
+
+
+stoogsort in stoog_sort.py
+
+
+
+link to commit in test files:
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97
+
+link to commit in founction:
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3
+
+
+
+result:
+
+
+
+existing tool result before:
+
+
+
+existing tool result after:
+
+
+
+
+
+
+word_break in word_break.py
+
+
+
+link to commit in test files:
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97
+
+link to commit in founction:
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3
+
+
+result:
+
+
+
+existing tool result before:
+
+
+
+existing tool result after:
+
+
+
+
+
@@ -65,3 +119,5 @@ Programming language:
## Statement of individual contributions
+
+Almuthana Almustafa make the stoogsort and word_break functions.
From b0de551da7f1ab870430823339d1acb523c5dda4 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 16:43:07 +0200
Subject: [PATCH 09/27] add
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index be1bd88b1..bfa9f8273 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,8 @@ Name:
URL:
+Number of lines of code and the tool used to count it:
+
Programming language:
## Coverage measurement
From 4b6a7b943393714f28ac159263bf9cf5796623b3 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 16:44:52 +0200
Subject: [PATCH 10/27] add
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index bfa9f8273..a82c57bc7 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ Name:
URL:
-Number of lines of code and the tool used to count it:
+Number of lines of code and the tool used to count it:
Programming language:
From d823b9c6a2226673b968b805b15785863536ea61 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 16:45:46 +0200
Subject: [PATCH 11/27] add
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index a82c57bc7..6aa23cc0b 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ Name:
URL:
-Number of lines of code and the tool used to count it:
+
Programming language:
@@ -14,7 +14,7 @@ Programming language:
### Existing tool
-
+
From fab5c24ffffda63ac71b3fee7370feccaff15a29 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 16:46:33 +0200
Subject: [PATCH 12/27] add
---
README.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index 6aa23cc0b..cec491c7f 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@ Name:
URL:
-
+Number of lines of code and the tool used to count it:
Programming language:
@@ -14,7 +14,7 @@ Programming language:
### Existing tool
-
+
From dbb131c8426dedad18d9ddebacfa35dfd5b588be Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 16:48:18 +0200
Subject: [PATCH 13/27] add
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index cec491c7f..30aa3da72 100644
--- a/README.md
+++ b/README.md
@@ -122,4 +122,4 @@ existing tool result after:
-Almuthana Almustafa make the stoogsort and word_break functions.
+
From c8c757573a8669847fee7fba9676012c5c69bdc8 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 16:50:34 +0200
Subject: [PATCH 14/27] added
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index 30aa3da72..96e69e642 100644
--- a/README.md
+++ b/README.md
@@ -122,4 +122,6 @@ existing tool result after:
+Abdullah -> increased the coverage for two functions.
+Almuthana Almustafa -> increased the coverage for two functions.
From 6bab0cd7a3be8810a999c74f1804331b7f3c08b1 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 16:51:41 +0200
Subject: [PATCH 15/27] added
---
README.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/README.md b/README.md
index 96e69e642..8e0238f26 100644
--- a/README.md
+++ b/README.md
@@ -124,4 +124,3 @@ existing tool result after:
Abdullah -> increased the coverage for two functions.
-Almuthana Almustafa -> increased the coverage for two functions.
From d7d2780b4a2fa3af377cd5ae3f6bec0906ea862f Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 18:46:10 +0200
Subject: [PATCH 16/27] add
---
README.md | 251 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 245 insertions(+), 6 deletions(-)
diff --git a/README.md b/README.md
index 8e0238f26..c8068c929 100644
--- a/README.md
+++ b/README.md
@@ -2,21 +2,24 @@
## Project chosen
-Name:
+Name: algorithms
-URL:
+URL: (https://github.com/keon/algorithms)
-Number of lines of code and the tool used to count it:
+Number of lines of code and the tool used to count it: 18023(18 KLOC), counted using lizard
-Programming language:
+Programming language: Python
## Coverage measurement
### Existing tool
-
+We have used coverage.py to measure the cover of our chosen project. After installing all tools and dependencies, we have
+run the tool by typing coverage run --branch -m pytest tests. Afterwards, we use coverage report to generate the report. Later, Ayman has written a scrip to run the commands in a single script, and to also skip the test files, which don't need to be tested.
+
+In order to not put in 8 large images, I will insert the final screenshot, with the total branch coverage:
+
-
### Your own coverage tool
@@ -90,6 +93,75 @@ existing tool result after:
+#### Ayman Errahmouni
+
+##### Function 1: simplify_path_v2
+
+[Link the commit](https://github.com/CatalinAnt/algorithms-SEP-95/pull/2/commits/22ee6fa1df4785596c603af61a725c558973eb0b)
+
+Screenshot of branch measurement (66%):
+
+
+##### Function 2: insertion_sort
+
+[Link to commit](https://github.com/CatalinAnt/algorithms-SEP-95/pull/2/commits/5dae7f28036f89b7f6ff673639a922dd714aff3e)
+
+Screenshot of branch measurement (0%, was untested):
+
+
+#### Catalin Antonescu
+
+##### Function 1: strong_password
+
+Link to commit:
+[https://github.com/CatalinAnt/algorithms-SEP-95/commit/eaad6d32ecd73bb8fde876a4d4852cb522aea6f8](https://github.com/CatalinAnt/algorithms-SEP-95/commit/2b0b9187c1c040e4476b1ca14f2c2249273566b7)
+
+Screenshot of branch measurement:
+
+
+##### Function 2: rotate_image
+
+Link to commit:(same as for the first one)
+[https://github.com/CatalinAnt/algorithms-SEP-95/commit/eaad6d32ecd73bb8fde876a4d4852cb522aea6f8](https://github.com/CatalinAnt/algorithms-SEP-95/commit/2b0b9187c1c040e4476b1ca14f2c2249273566b7)
+
+Screenshot of branch measurement:
+
+
+#### Abdullah Abdelkhalik
+
+
+pythagoras
+
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/5651abafebe8ae3a5ea63e74883bb991acf19303
+
+
+
+
+first_unique_char
+
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/c16f26e952322b2c1729778a4141a57103ba7658
+
+
+
+
+#### Abdullah Abdelkhalik
+
+
+pythagoras
+
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/5651abafebe8ae3a5ea63e74883bb991acf19303
+
+
+
+
+first_unique_char
+
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/c16f26e952322b2c1729778a4141a57103ba7658
+
+
+
+
+
## Coverage improvement
### Individual tests
@@ -112,15 +184,182 @@ existing tool result after:
+## Ayman Errahmouni
+
+####
+
+An enhanced existing test
+
+Old coverage:
+
+
+Diff (LHS = new code, RHS = old code):
+
+
+New coverage:
+
+
+The coverage was improved because certain cases that could happen in file paths (e.g. the "." directory, empty path) were not tested for.
+By added additional tests that use such cases, the coverage improved.
+
+The test was also faulty on windows (i guess linux was assumed), so i added support for that in the test. (It now passes on Windows 10 too)
+
+####
+
+An new test. (before, `insertion_sort` was not present in any test)
+
+Diff (LHS: new code, RHS: old code):
+(New test)
+
+(Changes in imports)
+
+
+Old coverage:
+
+
+New coverage:
+
+
+
+
+## Catalin Antonescu
+
+Test 1:
+
+In test_string:
+
+Link to commit:
+
+[https://github.com/CatalinAnt/algorithms-SEP-95/commit/eaad6d32ecd73bb8fde876a4d4852cb522aea6f8](https://github.com/CatalinAnt/algorithms-SEP-95/commit/2b0b9187c1c040e4476b1ca14f2c2249273566b7)
+
+Old coverage:
+
+
+
+
+New coverage:
+
+
+
+
+For strong_password there was a 26% coverage improvement with the existing tool and 40% with manual measurement tool.
+
+
+Test 2:
+
+In test_matrix:
+
+[https://github.com/CatalinAnt/algorithms-SEP-95/commit/eaad6d32ecd73bb8fde876a4d4852cb522aea6f8](https://github.com/CatalinAnt/algorithms-SEP-95/commit/2b0b9187c1c040e4476b1ca14f2c2249273566b7)
+
+Old coverage:
+
+
+
+
+
+New coverage:
+
+
+
+ For rotate_image, thre was a 33% coverage improvement with the existing tool and 25% with manual tool.
+
+
+## Abdullah Abdelkhalik
+
+test_maths
+
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/60832d9c672efd586848077cc41a52630d34371b
+
+
+
+
+
+the coverage is improved by 28%, the code only hit one of the five branches and cover only one of the three cases of the pythagoras theory. I added the other two cases, i could have a fourth case where none of the cases is present.
+
+test_strings
+
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/5651abafebe8ae3a5ea63e74883bb991acf19303
+
+
+
+
+
+The coverage is improved by 13%, the code only hit three out of five branches and only set up two examples. I added a case where there is no unique letter.
+
+
+Almuthana Almustafa
+
+stoogsort in stoog_sort.py
+
+[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3)
+
+result:
+
+
+
+word_break in word_break.py
+
+link to commit in founction:
+[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3 )
+
+result:
+
+
+
+Almuthana Almustafa
+
+stoogsort function
+
+link to commit in test files:
+[Link to the commit in the test files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97)
+
+existing tool result before:
+
+
+
+existing tool result after:
+
+
+
+The coverage increased by 89%, largely attributable to the implementation of new tests.
+
+word_break function
+
+[Link to the commit in the test files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97)
+
+existing tool result before:
+
+
+
+existing tool result after:
+
+
+
+The coverage improved by 86% due to the creation of new tests.
+
### Overall
+Old overall coverage:
+
+New overall coverage:
+
+
+
+Due to the large size of the project, the percentage only went up by one percent.
## Statement of individual contributions
Abdullah -> increased the coverage for two functions.
+Almuthana Almustafa -> Instrumentation was added to two functions, and test cases were created for them to improve coverage.
+
+
+
+
+
+
From 50cfaff2442a7e9ba3cf87cd290186d6c1dc2d4c Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 18:50:55 +0200
Subject: [PATCH 17/27] add
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index c8068c929..3fe74a081 100644
--- a/README.md
+++ b/README.md
@@ -302,7 +302,7 @@ word_break in word_break.py
link to commit in founction:
[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3 )
-result:
+result:

From 39e7967dcb5c4e2c06dc0180b3007747ac069366 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 18:57:20 +0200
Subject: [PATCH 18/27] ad
---
README.md | 76 ++++---------------------------------------------------
1 file changed, 5 insertions(+), 71 deletions(-)
diff --git a/README.md b/README.md
index 3fe74a081..a61e4c8f8 100644
--- a/README.md
+++ b/README.md
@@ -23,76 +23,6 @@ In order to not put in 8 large images, I will insert the final screenshot, with
### Your own coverage tool
-
-
-
-
-Almuthana Almustafa
-
-
-
-stoogsort in stoog_sort.py
-
-
-
-link to commit in test files:
-https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97
-
-link to commit in founction:
-https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3
-
-
-
-result:
-
-
-
-existing tool result before:
-
-
-
-existing tool result after:
-
-
-
-
-
-
-word_break in word_break.py
-
-
-
-link to commit in test files:
-https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97
-
-link to commit in founction:
-https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3
-
-
-result:
-
-
-
-existing tool result before:
-
-
-
-existing tool result after:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
#### Ayman Errahmouni
##### Function 1: simplify_path_v2
@@ -287,7 +217,7 @@ https://github.com/CatalinAnt/algorithms-SEP-95/commit/5651abafebe8ae3a5ea63e748
The coverage is improved by 13%, the code only hit three out of five branches and only set up two examples. I added a case where there is no unique letter.
-Almuthana Almustafa
+## Almuthana Almustafa
stoogsort in stoog_sort.py
@@ -308,6 +238,8 @@ result:
Almuthana Almustafa
+Test 1:
+
stoogsort function
link to commit in test files:
@@ -323,6 +255,8 @@ existing tool result after:
The coverage increased by 89%, largely attributable to the implementation of new tests.
+Test 2:
+
word_break function
[Link to the commit in the test files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97)
From 206364842842b8074b1f7169539eaef8de9f1e9e Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 20:23:48 +0200
Subject: [PATCH 19/27] images added
---
README.md | 54 +++++++++++++++++++++++++-----------------------------
1 file changed, 25 insertions(+), 29 deletions(-)
diff --git a/README.md b/README.md
index a61e4c8f8..3f1d2aa1f 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ Screenshot of branch measurement (0%, was untested):
#### Catalin Antonescu
##### Function 1: strong_password
-
+
Link to commit:
[https://github.com/CatalinAnt/algorithms-SEP-95/commit/eaad6d32ecd73bb8fde876a4d4852cb522aea6f8](https://github.com/CatalinAnt/algorithms-SEP-95/commit/2b0b9187c1c040e4476b1ca14f2c2249273566b7)
@@ -91,6 +91,24 @@ https://github.com/CatalinAnt/algorithms-SEP-95/commit/c16f26e952322b2c1729778a4

+#### Almuthana Almustafa
+
+##### Function 1: stoogsort in stoog_sort.py
+
+[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3)
+
+result:
+
+
+
+##### Function 2: word_break in word_break.py
+
+link to commit in founction:
+[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3 )
+
+result:
+
+
## Coverage improvement
@@ -216,58 +234,36 @@ https://github.com/CatalinAnt/algorithms-SEP-95/commit/5651abafebe8ae3a5ea63e748
The coverage is improved by 13%, the code only hit three out of five branches and only set up two examples. I added a case where there is no unique letter.
-
## Almuthana Almustafa
-stoogsort in stoog_sort.py
+### Test 1: stoogsort
-[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3)
-
-result:
-
-
-
-word_break in word_break.py
-
-link to commit in founction:
-[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3 )
-result:
-
-
-
-Almuthana Almustafa
-
-Test 1:
-
-stoogsort function
link to commit in test files:
[Link to the commit in the test files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97)
existing tool result before:
-
+
existing tool result after:
-
+
The coverage increased by 89%, largely attributable to the implementation of new tests.
-Test 2:
-
-word_break function
+### Test 2: word_break
[Link to the commit in the test files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97)
existing tool result before:
-
+
existing tool result after:
-
+
The coverage improved by 86% due to the creation of new tests.
From 60118df8a07a42a5c97a63ff296589be5ff17bd2 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 20:50:36 +0200
Subject: [PATCH 20/27] image added
---
result_image-2.png | Bin 0 -> 3692 bytes
stoog_sort_image1.png | Bin 0 -> 2572 bytes
stoog_sort_image2.png | Bin 0 -> 2542 bytes
word_break_image1.png | Bin 0 -> 2681 bytes
word_break_image2.png | Bin 0 -> 2827 bytes
5 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 result_image-2.png
create mode 100644 stoog_sort_image1.png
create mode 100644 stoog_sort_image2.png
create mode 100644 word_break_image1.png
create mode 100644 word_break_image2.png
diff --git a/result_image-2.png b/result_image-2.png
new file mode 100644
index 0000000000000000000000000000000000000000..1106174d2b46b2daa2e05e9be34a7967dd24a55a
GIT binary patch
literal 3692
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
literal 0
HcmV?d00001
diff --git a/stoog_sort_image1.png b/stoog_sort_image1.png
new file mode 100644
index 0000000000000000000000000000000000000000..98f6c7c6dd483367cacf83333b7949c79a12372e
GIT binary patch
literal 2572
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
literal 0
HcmV?d00001
diff --git a/word_break_image2.png b/word_break_image2.png
new file mode 100644
index 0000000000000000000000000000000000000000..48e8684061b4b00f1f3847ec3ec722c1daa12380
GIT binary patch
literal 2827
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
T$TmHaJ-IW!1vRYHcaHimH@#%Q
literal 0
HcmV?d00001
From 7c2276a4b8b8f15c1c85bbc48e530f47292c46cf Mon Sep 17 00:00:00 2001
From: almuthana
Date: Wed, 26 Jun 2024 20:57:57 +0200
Subject: [PATCH 21/27] ad
---
README.md | 2 +-
algorithms/dp/word_break.py | 16 ++++++++--------
result_image_2.png | Bin 0 -> 3558 bytes
3 files changed, 9 insertions(+), 9 deletions(-)
create mode 100644 result_image_2.png
diff --git a/README.md b/README.md
index 3f1d2aa1f..a601d0d45 100644
--- a/README.md
+++ b/README.md
@@ -108,7 +108,7 @@ link to commit in founction:
result:
-
+
## Coverage improvement
diff --git a/algorithms/dp/word_break.py b/algorithms/dp/word_break.py
index 0cae1b189..2ef9fd03b 100644
--- a/algorithms/dp/word_break.py
+++ b/algorithms/dp/word_break.py
@@ -19,10 +19,10 @@
# TC: O(N^2) SC: O(N)
branch_coverage = {
- "check_1": False,
- "check_2": False,
- "check_3": False,
- "check_4": False,
+ "check_5": False,
+ "check_6": False,
+ "check_7": False,
+ "check_8": False,
}
# TC: O(N^2) SC: O(N)
@@ -35,14 +35,14 @@ def word_break(word, word_dict):
dp_array = [False] * (len(word)+1)
dp_array[0] = True
for i in range(1, len(word)+1):
- branch_coverage["check_1"] = True
+ branch_coverage["check_5"] = True
for j in range(0, i):
- branch_coverage["check_2"] = True
+ branch_coverage["check_6"] = True
if dp_array[j] and word[j:i] in word_dict:
- branch_coverage["check_3"] = True
+ branch_coverage["check_7"] = True
dp_array[i] = True
break
- branch_coverage["check_4"] = True
+ branch_coverage["check_8"] = True
return dp_array[-1]
diff --git a/result_image_2.png b/result_image_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..3cc6c81909a2becc5e8c00adac17c794d161bc38
GIT binary patch
literal 3558
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
literal 0
HcmV?d00001
From 2017fe397ae674bb39f03002db3b5ef9cb244c2c Mon Sep 17 00:00:00 2001
From: almuthana
Date: Thu, 27 Jun 2024 10:09:46 +0200
Subject: [PATCH 22/27] updated
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index a601d0d45..b7cb85220 100644
--- a/README.md
+++ b/README.md
@@ -285,8 +285,10 @@ Due to the large size of the project, the percentage only went up by one percent
Abdullah -> increased the coverage for two functions.
+
Almuthana Almustafa -> Instrumentation was added to two functions, and test cases were created for them to improve coverage.
+Cataline -> Instrumentation was added to two functions, and the tests for these functions were enhanced.
From 98cc754db258757a6e779f9953f5e13da2db59b8 Mon Sep 17 00:00:00 2001
From: almuthana
Date: Thu, 27 Jun 2024 19:39:56 +0200
Subject: [PATCH 23/27] readme update
---
README.md | 129 ++++++++++++++++++++++----------------------------
SS_befor1.png | Bin 0 -> 3483 bytes
WB_befor1.png | Bin 0 -> 3688 bytes
3 files changed, 57 insertions(+), 72 deletions(-)
create mode 100644 SS_befor1.png
create mode 100644 WB_befor1.png
diff --git a/README.md b/README.md
index b7cb85220..73ec34ab3 100644
--- a/README.md
+++ b/README.md
@@ -18,8 +18,8 @@ We have used coverage.py to measure the cover of our chosen project. After insta
run the tool by typing coverage run --branch -m pytest tests. Afterwards, we use coverage report to generate the report. Later, Ayman has written a scrip to run the commands in a single script, and to also skip the test files, which don't need to be tested.
In order to not put in 8 large images, I will insert the final screenshot, with the total branch coverage:
-
+
### Your own coverage tool
@@ -29,15 +29,15 @@ In order to not put in 8 large images, I will insert the final screenshot, with
[Link the commit](https://github.com/CatalinAnt/algorithms-SEP-95/pull/2/commits/22ee6fa1df4785596c603af61a725c558973eb0b)
-Screenshot of branch measurement (66%):
+Screenshot of branch measurement:

##### Function 2: insertion_sort
[Link to commit](https://github.com/CatalinAnt/algorithms-SEP-95/pull/2/commits/5dae7f28036f89b7f6ff673639a922dd714aff3e)
-Screenshot of branch measurement (0%, was untested):
-
+Screenshot of branch measurement:
+
#### Catalin Antonescu
@@ -57,58 +57,38 @@ Link to commit:(same as for the first one)
Screenshot of branch measurement:

-#### Abdullah Abdelkhalik
-
+#### Almuthana Almustafa
-pythagoras
+##### Function 1: stoogsort in stoog_sort.py
-https://github.com/CatalinAnt/algorithms-SEP-95/commit/5651abafebe8ae3a5ea63e74883bb991acf19303
+[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3)
-
+result:
+
-first_unique_char
+##### Function 2: word_break in word_break.py
-https://github.com/CatalinAnt/algorithms-SEP-95/commit/c16f26e952322b2c1729778a4141a57103ba7658
+link to commit in founction:
+[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3 )
-
+result:
+
#### Abdullah Abdelkhalik
-
-pythagoras
+##### Function 2: pythagoras
https://github.com/CatalinAnt/algorithms-SEP-95/commit/5651abafebe8ae3a5ea63e74883bb991acf19303
-
-
+
-first_unique_char
+##### Function 2: first_unique_char
https://github.com/CatalinAnt/algorithms-SEP-95/commit/c16f26e952322b2c1729778a4141a57103ba7658
-
-
-
-#### Almuthana Almustafa
-
-##### Function 1: stoogsort in stoog_sort.py
-
-[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3)
-
-result:
-
-
-
-##### Function 2: word_break in word_break.py
-
-link to commit in founction:
-[Link to the commit in the founction files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/57b66879c6ae0f82712c55528f540dfdb3c3ddd3 )
-
-result:
-
-
+
## Coverage improvement
@@ -132,9 +112,9 @@ result:
-## Ayman Errahmouni
+#### Ayman Errahmouni
-####
+#####
An enhanced existing test
@@ -143,6 +123,7 @@ Old coverage:
Diff (LHS = new code, RHS = old code):

+
New coverage:

@@ -152,7 +133,7 @@ By added additional tests that use such cases, the coverage improved.
The test was also faulty on windows (i guess linux was assumed), so i added support for that in the test. (It now passes on Windows 10 too)
-####
+#####
An new test. (before, `insertion_sort` was not present in any test)
@@ -161,6 +142,8 @@ Diff (LHS: new code, RHS: old code):

(Changes in imports)

+(Instrumentation)
+
Old coverage:

@@ -170,7 +153,7 @@ New coverage:
-## Catalin Antonescu
+#### Catalin Antonescu
Test 1:
@@ -192,7 +175,6 @@ New coverage:
For strong_password there was a 26% coverage improvement with the existing tool and 40% with manual measurement tool.
-
Test 2:
In test_matrix:
@@ -204,41 +186,15 @@ Old coverage:


-
New coverage:


For rotate_image, thre was a 33% coverage improvement with the existing tool and 25% with manual tool.
-
-## Abdullah Abdelkhalik
-
-test_maths
-
-https://github.com/CatalinAnt/algorithms-SEP-95/commit/60832d9c672efd586848077cc41a52630d34371b
-
-
-
-
-
-the coverage is improved by 28%, the code only hit one of the five branches and cover only one of the three cases of the pythagoras theory. I added the other two cases, i could have a fourth case where none of the cases is present.
-
-test_strings
-
-https://github.com/CatalinAnt/algorithms-SEP-95/commit/5651abafebe8ae3a5ea63e74883bb991acf19303
-
-
-
-
-
-The coverage is improved by 13%, the code only hit three out of five branches and only set up two examples. I added a case where there is no unique letter.
-
-## Almuthana Almustafa
-
-### Test 1: stoogsort
-
+#### Almuthana Almustafa
+##### Test 1: stoogsort
link to commit in test files:
[Link to the commit in the test files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97)
@@ -251,9 +207,11 @@ existing tool result after:

+
+
The coverage increased by 89%, largely attributable to the implementation of new tests.
-### Test 2: word_break
+##### Test 2: word_break
[Link to the commit in the test files](https://github.com/CatalinAnt/algorithms-SEP-95/commit/157de36fd4c373b67cd03e3b3713be9ba5cf0d97)
@@ -265,8 +223,34 @@ existing tool result after:

+
+
The coverage improved by 86% due to the creation of new tests.
+#### Abdullah Abdelkhalik
+
+#### Improvements
+
+test_maths
+
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/60832d9c672efd586848077cc41a52630d34371b
+
+
+
+
+
+the coverage is improved by 28%, the code only hit one of the five branches and cover only one of the three cases of the pythagoras theory. I added the other two cases, i could have a fourth case where none of the cases is present.
+
+test_strings
+
+https://github.com/CatalinAnt/algorithms-SEP-95/commit/5651abafebe8ae3a5ea63e74883bb991acf19303
+
+
+
+
+
+The coverage is improved by 13%, the code only hit three out of five branches and only set up two examples. I added a case where there is no unique letter.
+
### Overall
@@ -295,3 +279,4 @@ Cataline -> Instrumentation was added to two functions, and the tests for these
+
diff --git a/SS_befor1.png b/SS_befor1.png
new file mode 100644
index 0000000000000000000000000000000000000000..c37497dd17c428ecefb78d6e87f4ff2be2dc0fff
GIT binary patch
literal 3483
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
literal 0
HcmV?d00001
diff --git a/WB_befor1.png b/WB_befor1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b63096c7f5f2bb44a9e0380f7138055e5b1eafc
GIT binary patch
literal 3688
zcmZ{nc{r5q_rM>_WEokr#3)IWwY-F}YwQ^mgK0*3twXkqME1fUOV(`Jg?XulDJE-Z
zDjBkt?E4^lX=M40_x-)U>-t^a>-)!ZKlgn-=Q-y-pL5QAo+r){VRW2BgaZJ8<0i)N
zYXHEc#+ZAv9b=5O6Wq#-8G}Ha!CrD3HY%vyOk@
zW@G1)y}&Me;UwQd^TJ|#=50zQloEj3sYMQ5&FM&$!~QnTBpuR!EDs;DF|5qq+)@Mp
zNmdXSkRr#U2Ivy=3?|Dh*6JKu`rbC`$R^k#mh+#M&ua-QTX{L{!q=7q!oAofStZnX
z+M*oneaBh-RZgP9T6-f}?X4xxf7aiKUYw$Q(eB?5L2S{_R(~o0@J!4LeuZNRxbr*F
zRB&rqUzk`PTyslwE9UES>_J7D?!0|wn$N-B1Mgvf;sk8PVeufybDaHpaPZAOXXkO5
z$Oh>(S$%WVZms89AS_gU@u?2vL`D2e2l3uq2xe_@?jZYPY|7L?Ud?y)6nfd*Lt?RQ
zCgxB|k^Xq=`U9BIj0Lq{Xl!t(bE9r^%if%BM`8C6?ezCw@4;r#nXvsbQE5qXQMC)l
zatvUnUvDoZ&Uw323$}!QEG%m!N^w)W0h*4Q-V#uMvJ7q$W{Z!o`DY=ca~(b!5`V*pl!;KbwwYv@|zd&ZK^Rn7Mp%pY*x1
zD#0a;Yj7Q%@Z8*NxDyrX_B+Jqpn2XbMv&*XR#0bx$(3*KW6JM1e42ogd$^4=?nTZJ
zmLDm;kx;vgzxLOu{hdcU`Gc&g?|2j4$O0AxuA`sS-`)wU3k@q7i`3Z7rv>q1FVvTy
z{5*%>8#s^jw0N~NcOQb{5OiUrL3s-;r=+;0VAItgIr_ZM4>wA|{DM(Ko
zX>)J3n6tHvSKc@HDJ{m^f{!=+eDI?$b;#t)(==m{B*#qnUeF8JBi~xdtwmJ#>uT+v
z$|74AEf4ngJI|@MZ?z{Kba3`NPmkfzrQ<`jV=0f|KBm$Q9wK^KipcdIO7A91jNzVn
z%wT~BuYIGT0m9=NW_5LN|2#}S?w%xHs_{Yxm`t?Rd)EbZL5}xUz#%*CO3&B>n-k&M
zN|DsLysmC;l^&Ol&<+XrE=jCFYz6w=G)JhGG}gx&2QH{h%4O62K*=cdat%U|$DJ>lvWRN?}6Y#^>XM1wa7T>d+vJli>Y&fxIGH)3jn?+bteJfL+URc(yx#?
zUXC6ZGtdY4`vMWpZ9D@1o?U;-Fh{Zgl3n&7#B=!Chb~>Op)Wfui-q!5URSi
z!@b2*nQW_FqecujMj7wbmD+%^iU~v0NgCEGQt9ByDgh2ONmr)>0=