From 91f5c10306a7d6eba736493340ea9c9524d1f512 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Jan 2025 13:23:30 +0000 Subject: [PATCH 001/102] Update dependency attrs to v25 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5d4f69e8..7faebe9b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ astroid==3.3.8 -attrs==24.3.0 +attrs==25.1.0 autopep8==2.3.2 coverage==7.6.10 dill==0.3.9 From b26f9c9601cb9acb46fb8e1dac4b4d68ebecf0e8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jan 2025 13:54:03 +0000 Subject: [PATCH 002/102] Update dependency pylint to v3.3.4 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7faebe9b..e02fbc82 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,7 @@ platformdirs==4.3.6 pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 -pylint==3.3.3 +pylint==3.3.4 pyright==1.1.392.post0 pytest==8.3.4 pytest-cov==6.0.0 From 721dd1a2ad1f6b3be72b1c125bc660f5676215e5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jan 2025 13:58:17 +0000 Subject: [PATCH 003/102] Update dependency isort to v6 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e02fbc82..921cb73d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ dill==0.3.9 exceptiongroup==1.2.2 flake8==7.1.1 iniconfig==2.0.0 -isort==5.13.2 +isort==6.0.0 lazy-object-proxy==1.10.0 mccabe==0.7.0 nodeenv==1.9.1 From b50ff23f15bd52dbd2ac65b5caf227177f822b7c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jan 2025 12:52:37 +0000 Subject: [PATCH 004/102] Update dependency pyright to v1.1.393 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 921cb73d..cd31be27 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 pylint==3.3.4 -pyright==1.1.392.post0 +pyright==1.1.393 pytest==8.3.4 pytest-cov==6.0.0 tomli==2.2.1 From a26236256d16b524c25ab0b3a2ce1356cd870c34 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 5 Feb 2025 14:52:58 -0300 Subject: [PATCH 005/102] [CONFIG] [Github Actions] sonarcloud deprecation replacement. https://github.com/SonarSource/sonarqube-scan-action Warning This action is deprecated and will be removed in a future release. Please use the sonarqube-scan-action action instead. The sonarqube-scan-action is a drop-in replacement for this action. --- .github/workflows/python-coverage.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-coverage.yml b/.github/workflows/python-coverage.yml index d21f99f0..34f81970 100644 --- a/.github/workflows/python-coverage.yml +++ b/.github/workflows/python-coverage.yml @@ -61,8 +61,8 @@ jobs: run: | python3 -m coverage xml - - name: SonarCloud Scan - uses: SonarSource/sonarcloud-github-action@master + - name: Analyze with SonarQube / SonarCloud + uses: SonarSource/sonarqube-scan-action@master env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} # Needed to get PR information, if any From 44fb852224d2702d050b406949527aa2e6fcf16e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Feb 2025 01:57:05 +0000 Subject: [PATCH 006/102] Update python Docker tag to v3.13.2 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3c1ef2c3..37b0c251 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ############################################################################### -FROM python:3.13.1-alpine3.20 AS init +FROM python:3.13.2-alpine3.20 AS init ENV WORKDIR=/app WORKDIR ${WORKDIR} From 72e6248755dead478ceee243552c9b61f76a731a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 8 Feb 2025 17:50:18 +0000 Subject: [PATCH 007/102] Update dependency coverage to v7.6.11 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index cd31be27..c7dc3d57 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.8 attrs==25.1.0 autopep8==2.3.2 -coverage==7.6.10 +coverage==7.6.11 dill==0.3.9 exceptiongroup==1.2.2 flake8==7.1.1 From 4ac7b1ddf485dde8bb80c0e0c54f80b2ff95491b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 15:53:07 +0000 Subject: [PATCH 008/102] Update dependency coverage to v7.6.12 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c7dc3d57..b034cb53 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.8 attrs==25.1.0 autopep8==2.3.2 -coverage==7.6.11 +coverage==7.6.12 dill==0.3.9 exceptiongroup==1.2.2 flake8==7.1.1 From 32bc3e421f4fda291f96f9f44eaa36f0aefe55be Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 16:42:28 +0000 Subject: [PATCH 009/102] Update dependency pyright to v1.1.394 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b034cb53..4d116ae7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 pylint==3.3.4 -pyright==1.1.393 +pyright==1.1.394 pytest==8.3.4 pytest-cov==6.0.0 tomli==2.2.1 From 77575151e750df27638dd1629048117a9f5ef098 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 16 Feb 2025 22:10:49 +0000 Subject: [PATCH 010/102] Update dependency flake8 to v7.1.2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4d116ae7..61f4c5f2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ autopep8==2.3.2 coverage==7.6.12 dill==0.3.9 exceptiongroup==1.2.2 -flake8==7.1.1 +flake8==7.1.2 iniconfig==2.0.0 isort==6.0.0 lazy-object-proxy==1.10.0 From 0135eeed087952f492d399ddc478c8b781e4b4a3 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 19 Feb 2025 15:39:58 -0300 Subject: [PATCH 011/102] [CONFIG] sonar-scanner .scannerwork added to .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 60648631..c3a52581 100644 --- a/.gitignore +++ b/.gitignore @@ -181,3 +181,6 @@ cython_debug/ # Sarif *.sarif + +# SonarQube sonar-scanner (cli) +.scannerwork From dfa6f88cd9b8e9cfa919e3a478afcbda931bbaf3 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 19 Feb 2025 15:44:21 -0300 Subject: [PATCH 012/102] [CONFIG] setting camelCase as default naming convention for function names (match with Hacker Rank interface). --- .pylintrc | 2 +- sonar-project.properties | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.pylintrc b/.pylintrc index 992951cf..49d2fc9c 100644 --- a/.pylintrc +++ b/.pylintrc @@ -552,7 +552,7 @@ const-naming-style=UPPER_CASE docstring-min-length=-1 # Naming style matching correct function names. -function-naming-style=snake_case +function-naming-style=camelCase # Regular expression matching correct function names. Overrides function- # naming-style. If left empty, function names will be checked with the set diff --git a/sonar-project.properties b/sonar-project.properties index 63d81bf5..10a5ac0a 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -24,3 +24,4 @@ sonar.issue.ignore.multicriteria=e1 # python:S6792 Use the "type" parameter syntax to declare this generic class. sonar.issue.ignore.multicriteria.e1.ruleKey=python:S6792 sonar.issue.ignore.multicriteria.e1.resourceKey=**/*.py +sonar.python.naming.function=^[a-z][a-zA-Z0-9]*$ From 26b4a14a63cbeb0ba33c05367183b0a61b818e96 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 19 Feb 2025 16:43:33 -0300 Subject: [PATCH 013/102] [CONFIG] Makefile. clean action fixed (failed when files searched for deletion do not exist). --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index a7f573af..ab3720ec 100644 --- a/Makefile +++ b/Makefile @@ -118,15 +118,15 @@ upgrade: ${PACKAGE_TOOL} list --outdated | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U clean: - ${PACKAGE_TOOL} freeze > unins ; pip3 uninstall -y -r unins ; rm unins + ${PACKAGE_TOOL} freeze > unins ; ${PACKAGE_TOOL} uninstall -y -r unins ; rm unins rm -f .coverage rm -fr .pytest_cache rm -fr htmlcov rm -fr coverage rm -fr build - find . -path "*/*.pyc" -delete -print - find . -path "*/*.pyo" -delete -print - find . -path "*/__pycache__" -type d -print -exec rm -fr {} ';' + find . -path "*/*.pyc" -delete -print || true + find . -path "*/*.pyo" -delete -print || true + find . -path "*/__pycache__" -type d -print -exec rm -fr {} ';' || true compose/build: env ${DOCKER_COMPOSE} --profile lint build From 058f2d31fc164edb86f943ac5a0b1c855533d537 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 19 Feb 2025 15:44:51 -0300 Subject: [PATCH 014/102] [REFACTOR] Fixing naming convention for function names (to match with Hacker Rank interface). --- ...a-node-into-a-sorted-doubly-linked-list.md | 2 +- .../implementation/between_two_sets.py | 8 ++-- .../implementation/between_two_sets_test.py | 30 +++++++-------- .../arrays/cruch_bruteforce.py | 2 +- .../arrays/cruch_bruteforce_test.py | 6 +-- .../arrays/cruch_optimized.py | 2 +- .../arrays/cruch_optimized_test.py | 4 +- .../arrays/ctci_array_left_rotation.py | 6 +-- .../arrays/ctci_array_left_rotation_test.py | 10 ++--- .../arrays/minimum_swaps_2.py | 2 +- .../arrays/minimum_swaps_2_test.py | 6 +-- .../arrays/new_year_chaos.py | 11 ++++-- .../arrays/new_year_chaos_test.py | 8 ++-- .../arrays/two_d_array.py | 2 +- .../arrays/two_d_array_test.py | 6 +-- .../count_triplets_1.py | 4 +- .../count_triplets_1_test.py | 8 ++-- .../ctci_ransom_note.py | 10 +++-- .../ctci_ransom_note_test.py | 9 +++-- .../frequency_queries.py | 2 +- .../frequency_queries_test.py | 8 ++-- .../sherlock_and_anagrams.py | 2 +- .../sherlock_and_anagrams_test.py | 4 +- .../dictionaries_and_hashmaps/two_strings.py | 6 +-- .../two_strings_test.py | 6 +-- .../dynamic_programming/max_array_sum.py | 2 +- .../dynamic_programming/max_array_sum_test.py | 14 +++---- .../graphs/roads_and_libraries.py | 2 +- .../graphs/roads_and_libraries_test.py | 4 +- .../greedy_algorithms/angry_children.py | 2 +- .../greedy_algorithms/angry_children_test.py | 6 +-- .../greedy_algorithms/greedy_florist.py | 2 +- .../greedy_algorithms/greedy_florist_test.py | 6 +-- .../greedy_algorithms/luck_balance.py | 2 +- .../greedy_algorithms/luck_balance_test.py | 6 +-- ...minimum_absolute_difference_in_an_array.py | 2 +- ...um_absolute_difference_in_an_array_test.py | 6 +-- .../linked_lists/ctci_linked_list_cycle.py | 3 +- ..._merge_point_of_two_joined_linked_lists.py | 2 +- ...e_point_of_two_joined_linked_lists_test.py | 6 +-- ...at_a_specific_position_in_a_linked_list.py | 2 +- ...specific_position_in_a_linked_list_test.py | 16 ++++---- ...a_node_into_a_sorted_doubly_linked_list.py | 4 +- ...e_into_a_sorted_doubly_linked_list_test.py | 16 ++++---- .../linked_lists/lib/doubly_linked_list.py | 2 +- .../linked_lists/lib/singly_linked_list.py | 2 +- .../reverse_a_doubly_linked_list_test.py | 4 +- .../miscellaneous/flipping_bits.py | 2 +- .../miscellaneous/flipping_bits_test.py | 6 +-- .../miscellaneous/friend_circle_queries.py | 2 +- .../friend_circle_queries_test.py | 6 +-- .../ctci_recursive_staircase.py | 8 ++-- .../ctci_recursive_staircase_alternative.py | 4 +- .../ctci_recursive_staircase_test.py | 20 +++++----- .../recursive_digit_sum.py | 8 ++-- .../recursive_digit_sum_test.py | 6 +-- .../search/ctci_ice_cream_parlor.py | 3 +- .../ctci_ice_cream_parlor_bruteforce.py | 2 +- .../ctci_ice_cream_parlor_bruteforce_test.py | 12 +++--- .../search/ctci_ice_cream_parlor_test.py | 10 ++--- .../search/swap_nodes_algo.py | 38 +++++++++---------- .../search/swap_nodes_algo_big_test.py | 10 ++--- .../search/swap_nodes_algo_test.py | 20 +++++----- .../sorting/ctci_bubble_sort.py | 2 +- .../sorting/ctci_bubble_sort_test.py | 6 +-- .../sorting/ctci_comparator_sorting.py | 2 +- .../sorting/ctci_comparator_sorting_test.py | 6 +-- .../sorting/mark_and_toys.py | 2 +- .../sorting/mark_and_toys_test.py | 6 +-- .../stacks_and_queues/balanced_brackets.py | 2 +- .../balanced_brackets_test.py | 6 +-- .../alternating_characters.py | 2 +- .../alternating_characters_test.py | 6 +-- .../ctci_making_anagrams.py | 8 ++-- .../ctci_making_anagrams_test.py | 6 +-- .../sherlock_and_valid_string.py | 2 +- .../sherlock_and_valid_string_test.py | 6 +-- .../trees/ctci_is_binary_search_tree.py | 10 ++--- .../trees/ctci_is_binary_search_tree_test.py | 22 +++++------ src/hackerrank/warmup/a_very_big_sum.py | 2 +- src/hackerrank/warmup/a_very_big_sum_test.py | 6 +-- .../warmup/birthday_cake_candles.py | 2 +- .../warmup/birthday_cake_candles_test.py | 8 ++-- src/hackerrank/warmup/compare_triplets.py | 2 +- .../warmup/compare_triplets_test.py | 12 +++--- src/hackerrank/warmup/diagonal_difference.py | 2 +- .../warmup/diagonal_difference_test.py | 4 +- src/hackerrank/warmup/mini_max_sum.py | 2 +- src/hackerrank/warmup/mini_max_sum_test.py | 6 +-- src/hackerrank/warmup/plus_minus.py | 4 +- src/hackerrank/warmup/plus_minus_test.py | 6 +-- src/hackerrank/warmup/simple_array_sum.py | 2 +- .../warmup/simple_array_sum_test.py | 6 +-- src/hackerrank/warmup/solve_me_first.py | 2 +- src/hackerrank/warmup/solve_me_first_test.py | 6 +-- src/hackerrank/warmup/time_conversion.py | 2 +- src/hackerrank/warmup/time_conversion_test.py | 10 ++--- src/projecteuler/helpers/number_to_word.py | 4 +- .../helpers/number_to_word_test.py | 22 +++++------ src/projecteuler/helpers/palindrome.py | 2 +- src/projecteuler/helpers/palindrome_test.py | 18 ++++----- src/projecteuler/helpers/prime.py | 2 +- src/projecteuler/helpers/prime_test.py | 18 ++++----- src/projecteuler/helpers/word_score.py | 2 +- src/projecteuler/helpers/word_score_test.py | 10 ++--- src/projecteuler/problem0004.py | 4 +- src/projecteuler/problem0005_alt.py | 14 +++---- src/projecteuler/problem0005_test.py | 2 +- src/projecteuler/problem0007.py | 4 +- src/projecteuler/problem0017.py | 4 +- src/projecteuler/problem0022.py | 4 +- 111 files changed, 367 insertions(+), 353 deletions(-) diff --git a/docs/hackerrank/interview_preparation_kit/linked_lists/insert-a-node-into-a-sorted-doubly-linked-list.md b/docs/hackerrank/interview_preparation_kit/linked_lists/insert-a-node-into-a-sorted-doubly-linked-list.md index 48996bfb..11a4f454 100644 --- a/docs/hackerrank/interview_preparation_kit/linked_lists/insert-a-node-into-a-sorted-doubly-linked-list.md +++ b/docs/hackerrank/interview_preparation_kit/linked_lists/insert-a-node-into-a-sorted-doubly-linked-list.md @@ -1,4 +1,4 @@ -# [Linked Lists: Insert a node at a specific position in a linked list](https://www.hackerrank.com/challenges/insert-a-node-at-a-specific-position-in-a-linked-list) +# [Linked Lists: Insert a node at a specific position in a linked list](https://www.hackerrank.com/challenges/insert-a-node-into-a-sorted-doubly-linked-list) Create a node with a given value and insert it into a sorted doubly-linked list diff --git a/src/hackerrank/implementation/between_two_sets.py b/src/hackerrank/implementation/between_two_sets.py index 4dda56c4..0e74859c 100644 --- a/src/hackerrank/implementation/between_two_sets.py +++ b/src/hackerrank/implementation/between_two_sets.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def is_factor(_n: int, group: list[int]) -> bool: +def isFactor(_n: int, group: list[int]) -> bool: result: bool = True i: int = 0 @@ -21,7 +21,7 @@ def is_factor(_n: int, group: list[int]) -> bool: return result -def factor_of(_n: int, group: list[int]): +def factorOf(_n: int, group: list[int]): result: bool = True i: int = 0 @@ -37,7 +37,7 @@ def factor_of(_n: int, group: list[int]): return result -def get_total_x(_a: list[int], _b: list[int]) -> int: +def getTotalX(_a: list[int], _b: list[int]) -> int: _max_ = 0 for _, j in enumerate(_b): _max_ = max(_max_, j) @@ -45,7 +45,7 @@ def get_total_x(_a: list[int], _b: list[int]) -> int: result: list[int] = [] for i in range(2, _max_): - if is_factor(i, _a) and factor_of(i, _b): + if isFactor(i, _a) and factorOf(i, _b): result.append(i) output = len(result) diff --git a/src/hackerrank/implementation/between_two_sets_test.py b/src/hackerrank/implementation/between_two_sets_test.py index 72586f0d..37f8655f 100755 --- a/src/hackerrank/implementation/between_two_sets_test.py +++ b/src/hackerrank/implementation/between_two_sets_test.py @@ -1,5 +1,5 @@ import unittest -from .between_two_sets import get_total_x, is_factor, factor_of +from .between_two_sets import getTotalX, isFactor, factorOf class TestProblemBetweenTwoSets(unittest.TestCase): @@ -9,39 +9,39 @@ def test_get_total_x(self): tinput: list[int] = [16, 32, 96] solution_found: int = 0 - calculated_a = get_total_x([], tinput) + calculated_a = getTotalX([], tinput) self.assertEqual( calculated_a, solution_found, - f"get_total_x([], tinput) must be " + f"getTotalX([], tinput) must be " f"=> {solution_found}") - calculated_b = get_total_x(tinput, []) + calculated_b = getTotalX(tinput, []) self.assertEqual( calculated_b, solution_found, - f"get_total_x({tinput}, {[]}) must be " + f"getTotalX({tinput}, {[]}) must be " f"=> {solution_found}") - calculated_c = get_total_x([], []) + calculated_c = getTotalX([], []) self.assertEqual( calculated_c, solution_found, - f"get_total_x({[]}, {[]}) must be " + f"getTotalX({[]}, {[]}) must be " f"=> {solution_found}") - calculated_d = is_factor(1, []) + calculated_d = isFactor(1, []) self.assertEqual( calculated_d, solution_found, - f"is_factor({1}, {[]}) must be " + f"isFactor({1}, {[]}) must be " f"=> {False}") - calculated_e = factor_of(1, []) + calculated_e = factorOf(1, []) self.assertEqual( calculated_e, solution_found, - f"factor_of({1}, {[]}) must be " + f"factorOf({1}, {[]}) must be " f"=> {False}") def test_get_total_x_case_0(self): @@ -53,11 +53,11 @@ def test_get_total_x_case_0(self): solution_found = 3 self.assertEqual( - get_total_x(_a_, _b_), solution_found, - f"get_total_x({_a_}, {_b_}) must be " + getTotalX(_a_, _b_), solution_found, + f"getTotalX({_a_}, {_b_}) must be " f"=> {solution_found}") self.assertEqual( - get_total_x(_a_, _b_reverse_), solution_found, - f"get_total_x({_a_}, {_b_reverse_}) must be " + getTotalX(_a_, _b_reverse_), solution_found, + f"getTotalX({_a_}, {_b_reverse_}) must be " f"=> {solution_found}") diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.py b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.py index c9bb5dc4..da613a15 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.py +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce.py @@ -6,7 +6,7 @@ LOGGER = logging.getLogger(__name__) -def array_manipulation(n_operations: int, queries: list[list[int]]) -> int: +def arrayManipulation(n_operations: int, queries: list[list[int]]) -> int: result = [0] * (n_operations + 1) maximum = 0 diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce_test.py b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce_test.py index fb31c10a..f5bfc328 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .cruch_bruteforce import array_manipulation +from .cruch_bruteforce import arrayManipulation FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,6 @@ def test_array_manipulation(self): for _, _tt in enumerate(CRUCH_SMALL_TEST_CASES): self.assertEqual( - array_manipulation(_tt['n'], _tt['queries']), _tt['expected'], - f"{_} | array_manipulation({_tt['n']}, {_tt['queries']}) must be " + arrayManipulation(_tt['n'], _tt['queries']), _tt['expected'], + f"{_} | arrayManipulation({_tt['n']}, {_tt['queries']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.py b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.py index 487a82e6..7e612f23 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.py +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized.py @@ -9,7 +9,7 @@ LOGGER = logging.getLogger(__name__) -def array_manipulation_optimized(n_operations: int, queries: list[list[int]]) -> int: +def arrayManipulation(n_operations: int, queries: list[list[int]]) -> int: # why adding 2? # first slot to adjust 1-based index and # last slot for storing accum_sum result diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized_test.py b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized_test.py index 2380a778..c936c47d 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .cruch_optimized import array_manipulation_optimized +from .cruch_optimized import arrayManipulation FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,6 @@ def test_array_manipulation_optimized(self): for _, _tt in enumerate(CRUCH_SMALL_TEST_CASES): self.assertEqual( - array_manipulation_optimized(_tt['n'], _tt['queries']), _tt['expected'], + arrayManipulation(_tt['n'], _tt['queries']), _tt['expected'], f"{_} | array_manipulation_optimized({_tt['n']}, {_tt['queries']}) " f"must be => {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.py b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.py index b515e6c8..2b4bb5bb 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.py +++ b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.py @@ -7,7 +7,7 @@ FIRST_POSITION: int = 0 -def rot_left_one(group: list[int]) -> list[int]: +def rotLeftOne(group: list[int]) -> list[int]: first = group.pop(FIRST_POSITION) group.append(first) @@ -15,12 +15,12 @@ def rot_left_one(group: list[int]) -> list[int]: return group -def rot_left(group: list[int], d_rotations: int) -> list[int]: +def rotLeft(group: list[int], d_rotations: int) -> list[int]: output = group.copy() i = 1 while i <= d_rotations: - output = rot_left_one(output) + output = rotLeftOne(output) i += 1 return output diff --git a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py index 77f3c3b6..5008a0b4 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .ctci_array_left_rotation import rot_left, rot_left_one +from .ctci_array_left_rotation import rotLeft, rotLeftOne FILE_PATH = str(Path(__file__).resolve().parent) @@ -16,8 +16,8 @@ def test_rot_left_one(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - rot_left_one(_tt['input']), _tt['expected'], - f"{_} | rot_left({_tt['input']}) must be " + rotLeftOne(_tt['input']), _tt['expected'], + f"{_} | rotLeftOne({_tt['input']}) must be " f"=> {_tt['expected']}") def test_rot_left(self): @@ -29,6 +29,6 @@ def test_rot_left(self): for _, _tt in enumerate(tests): self.assertEqual( - rot_left(_tt['input'], _tt['d']), _tt['expected'], - f"{_} | rot_left({_tt['input']}) must be " + rotLeft(_tt['input'], _tt['d']), _tt['expected'], + f"{_} | rotLeft({_tt['input']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.py b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.py index 1cafff11..c58d6244 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.py +++ b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.py @@ -6,7 +6,7 @@ LOGGER = logging.getLogger(__name__) -def minimum_swaps(group: list[int]) -> int: +def minimumSwaps(group: list[int]) -> int: indexed_group = [i - 1 for i in group] swaps = 0 diff --git a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2_test.py b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2_test.py index 1b87a88d..35442032 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .minimum_swaps_2 import minimum_swaps +from .minimum_swaps_2 import minimumSwaps FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,6 @@ def test_minimum_swaps(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - minimum_swaps(_tt['input']), _tt['expected'], - f"{_} | minimum_swaps({_tt['input']}) must be " + minimumSwaps(_tt['input']), _tt['expected'], + f"{_} | minimumSwaps({_tt['input']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos.py b/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos.py index b9d5fecd..2ebcb884 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos.py +++ b/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos.py @@ -4,11 +4,10 @@ import logging LOGGER = logging.getLogger(__name__) - TOO_CHAOTIC_ERROR = 'Too chaotic' -def minimum_bribes(queue: list[int]) -> 'int | None': +def minimumBribesCompute(queue: list[int]) -> 'int | None': bribes = 0 for i, value in enumerate(queue): @@ -24,10 +23,14 @@ def minimum_bribes(queue: list[int]) -> 'int | None': return bribes -def minimum_bribes_transform(queue: list[int]) -> 'int | str': +def minimumBribesText(queue: list[int]) -> 'int | str': - result = minimum_bribes(queue) + result = minimumBribesCompute(queue) if result is None: return TOO_CHAOTIC_ERROR return result + + +def minimumBribes(queue: list[int]): + print(minimumBribesText(queue)) diff --git a/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos_test.py b/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos_test.py index 87c9c007..02e3fd13 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .new_year_chaos import minimum_bribes_transform +from .new_year_chaos import minimumBribes, minimumBribesText FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,8 @@ def test_minimum_bribes(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - minimum_bribes_transform(_tt['input']), _tt['expected'], - f"{_} | minimum_bribes_transform({_tt['input']}) must be " + minimumBribesText(_tt['input']), _tt['expected'], + f"{_} | minimumBribesText({_tt['input']}) must be " f"=> {_tt['expected']}") + + minimumBribes(_tt['input']) # Print the result (for coverage) diff --git a/src/hackerrank/interview_preparation_kit/arrays/two_d_array.py b/src/hackerrank/interview_preparation_kit/arrays/two_d_array.py index 86922c87..e33f6900 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/two_d_array.py +++ b/src/hackerrank/interview_preparation_kit/arrays/two_d_array.py @@ -25,7 +25,7 @@ def gethourglass(arr: list[list[int]], position_x: int, position_y: int) -> list return result -def hourglass_sum(arr: list[list[int]]) -> int | None: +def hourglassSum(arr: list[list[int]]) -> int | None: matrix_size: int = len(arr) matrix_start_index: int = 1 diff --git a/src/hackerrank/interview_preparation_kit/arrays/two_d_array_test.py b/src/hackerrank/interview_preparation_kit/arrays/two_d_array_test.py index 6761855a..bb3fa23a 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/two_d_array_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/two_d_array_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .two_d_array import hourglass_sum +from .two_d_array import hourglassSum FILE_PATH = str(Path(__file__).resolve().parent) @@ -16,6 +16,6 @@ def test_hourglass_sum(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - hourglass_sum(_tt['input']), _tt['expected'], - f"{_} | hourglass_sum({_tt['input']}) must be " + hourglassSum(_tt['input']), _tt['expected'], + f"{_} | hourglassSum({_tt['input']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1.py index 1d9010ce..0935f313 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1.py @@ -4,7 +4,7 @@ from collections import Counter -def count_triplets_brute_force(arr: list[int], ratio: int) -> int: +def countTripletsBruteForce(arr: list[int], ratio: int) -> int: size = len(arr) counter = 0 @@ -20,7 +20,7 @@ def count_triplets_brute_force(arr: list[int], ratio: int) -> int: return counter -def count_triplets(arr: list[int], ratio: int) -> int: +def countTriplets(arr: list[int], ratio: int) -> int: a_counter = Counter(arr) b_counter = Counter() triplets = 0 diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_test.py index ff059612..5c7fbce3 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .count_triplets_1 import count_triplets, count_triplets_brute_force +from .count_triplets_1 import countTriplets, countTripletsBruteForce FILE_PATH = str(Path(__file__).resolve().parent) @@ -19,7 +19,7 @@ def test_count_triplets_brute_force(self): for _, _tt in enumerate(SMALL_TEST_CASES): self.assertEqual( - count_triplets_brute_force(_tt['input'], _tt['r']), _tt['expected'], + countTripletsBruteForce(_tt['input'], _tt['r']), _tt['expected'], f"{_} | count_triplets_brute_force({_tt['input']}, {_tt['r']}) must be " f"=> {_tt['expected']}") @@ -28,7 +28,7 @@ def test_count_triplets(self): for _, _tt in enumerate(SMALL_TEST_CASES): self.assertEqual( - count_triplets(_tt['input'], _tt['r']), _tt['expected'], + countTriplets(_tt['input'], _tt['r']), _tt['expected'], f"{_} | count_triplets({_tt['input']}, {_tt['r']}) must be " f"=> {_tt['expected']} in {_tt['title']}") @@ -37,6 +37,6 @@ def test_count_triplets_big_cases(self): for _, _tt in enumerate(TEST_CASES_BIG): self.assertEqual( - count_triplets(_tt['input'], _tt['r']), _tt['expected'], + countTriplets(_tt['input'], _tt['r']), _tt['expected'], f"{_} | count_triplets({_tt['input']}, {_tt['r']}) must be " f"=> {_tt['expected']} in {_tt['title']}") diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note.py index 4b91a2e7..8cd382b9 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note.py @@ -7,7 +7,7 @@ __NO__ = 'No' -def check_magazine_compute(magazine: List[str], note: List[str]) -> bool: +def checkMagazineCompute(magazine: List[str], note: List[str]) -> bool: dictionary: Dict[str, int] = {} word: str @@ -29,5 +29,9 @@ def check_magazine_compute(magazine: List[str], note: List[str]) -> bool: return True -def check_magazine(magazine: List[str], note: List[str]) -> str: - return __YES__ if check_magazine_compute(magazine, note) else __NO__ +def checkMagazineText(magazine: List[str], note: List[str]) -> str: + return __YES__ if checkMagazineCompute(magazine, note) else __NO__ + + +def checkMagazine(magazine: List[str], note: List[str]): + print(checkMagazineText(magazine, note)) diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note_test.py index d3703536..5f8934a5 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .ctci_ransom_note import check_magazine +from .ctci_ransom_note import checkMagazine, checkMagazineText FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,9 @@ def test_check_magazine(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - check_magazine(_tt['magazine'], _tt['note']), _tt['expected'], - f"{_} | check_magazine({_tt['magazine']}, {_tt['note']}) must be " + checkMagazineText(_tt['magazine'], _tt['note']), _tt['expected'], + f"{_} | checkMagazineText({_tt['magazine']}, {_tt['note']}) must be " f"=> {_tt['expected']}") + + # Print the result (for coverage) + checkMagazine(_tt['magazine'], _tt['note']) diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries.py index 0d524335..55bf961c 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries.py @@ -13,7 +13,7 @@ __FOUND__ = 1 -def freq_query(queries): +def freqQuery(queries): result = [] data_map: Dict[int, int] = {} diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_test.py index a54e042d..f6530580 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .frequency_queries import freq_query +from .frequency_queries import freqQuery FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,12 +17,12 @@ def test_freq_query(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - freq_query(_tt['input']), _tt['expected'], - f"{_} | freq_query({_tt['input']}) must be " + freqQuery(_tt['input']), _tt['expected'], + f"{_} | freqQuery({_tt['input']}) must be " f"=> {_tt['expected']}") def test_freq_query_edge_case(self): self.assertRaisesRegex(ValueError, 'Invalid operation', - freq_query, [[4, 1]]) + freqQuery, [[4, 1]]) diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.py index 82de42d7..0b712308 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.py @@ -9,7 +9,7 @@ LOGGER = logging.getLogger(__name__) -def sherlock_and_anagrams(s_word: str) -> int: +def sherlockAndAnagrams(s_word: str) -> int: candidates: Dict[str, List[str]] = {} size: int = len(s_word) diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams_test.py index 5f7fecf6..798aa394 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams_test.py @@ -2,7 +2,7 @@ import json from pathlib import Path -from .sherlock_and_anagrams import sherlock_and_anagrams +from .sherlock_and_anagrams import sherlockAndAnagrams FILE_PATH = str(Path(__file__).resolve().parent) JSON_DATA_FILE = FILE_PATH + '/sherlock_and_anagrams.json' @@ -19,6 +19,6 @@ def test_sherlock_and_anagrams(self): for _, _tt in enumerate(testset['tests']): self.assertEqual( - sherlock_and_anagrams(_tt['input']), _tt['expected'], + sherlockAndAnagrams(_tt['input']), _tt['expected'], f"{_} | sherlock_and_anagrams({_tt['input']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings.py index 3c894530..067bebc7 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings.py @@ -5,7 +5,7 @@ __NO__ = 'No' -def two_strings_compute(s1_word: str, s2_word: str) -> bool: +def twoStringsCompute(s1_word: str, s2_word: str) -> bool: for letter in s1_word: if letter in s2_word: return True @@ -13,5 +13,5 @@ def two_strings_compute(s1_word: str, s2_word: str) -> bool: return False -def two_strings(s1_word: str, s2_word: str) -> str: - return __YES__ if two_strings_compute(s1_word, s2_word) else __NO__ +def twoStrings(s1_word: str, s2_word: str) -> str: + return __YES__ if twoStringsCompute(s1_word, s2_word) else __NO__ diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings_test.py index bd8bbe36..8ea68b6f 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .two_strings import two_strings +from .two_strings import twoStrings FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,6 @@ def test_two_strings(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - two_strings(_tt['s1'], _tt['s2']), _tt['expected'], - f"{_} | two_strings({_tt['s1']}, {_tt['s2']}) must be " + twoStrings(_tt['s1'], _tt['s2']), _tt['expected'], + f"{_} | twoStrings({_tt['s1']}, {_tt['s2']}) must be " f"=> {_tt['expected']} in {_tt['title']}") diff --git a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.py b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.py index 73e947db..6dbd2786 100644 --- a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.py +++ b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.py @@ -1,7 +1,7 @@ # @link Problem definition # [[docs/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum.md]] -def max_array_sum(arr_input: list[int]): +def maxSubsetSum(arr_input: list[int]): arr = arr_input[:] # Edge case diff --git a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum_test.py b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum_test.py index f7535f15..96047422 100644 --- a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum_test.py +++ b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .max_array_sum import max_array_sum +from .max_array_sum import maxSubsetSum FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,8 +17,8 @@ def test_max_array_sum(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - max_array_sum(_tt['input']), _tt['expected'], - f"{_} | max_array_sum({_tt['input']}) must be " + maxSubsetSum(_tt['input']), _tt['expected'], + f"{_} | maxSubsetSum({_tt['input']}) must be " f"=> {_tt['expected']}") def test_max_array_sum_edge_case_zero(self): @@ -27,8 +27,8 @@ def test_max_array_sum_edge_case_zero(self): _expected = 0 self.assertEqual( - max_array_sum(_input), _expected, - f"max_array_sum({_input}) must be " + maxSubsetSum(_input), _expected, + f"maxSubsetSum({_input}) must be " f"=> {_expected}") def test_max_array_sum_edge_case_one(self): @@ -37,6 +37,6 @@ def test_max_array_sum_edge_case_one(self): _expected = 1 self.assertEqual( - max_array_sum(_input), _expected, - f"max_array_sum({_input}) must be " + maxSubsetSum(_input), _expected, + f"maxSubsetSum({_input}) must be " f"=> {_expected}") diff --git a/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries.py b/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries.py index ac9f38fe..e254ec9d 100644 --- a/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries.py +++ b/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries.py @@ -36,7 +36,7 @@ def get_unions(self) -> int: return self._unions -def roads_and_libraries( +def roadsAndLibraries( q_paths: int, c_lib: int, c_road: int, diff --git a/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries_test.py b/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries_test.py index f41d5687..4b73c5bc 100644 --- a/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries_test.py +++ b/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .roads_and_libraries import roads_and_libraries +from .roads_and_libraries import roadsAndLibraries FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,7 +17,7 @@ def test_roads_and_libraries(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - roads_and_libraries( + roadsAndLibraries( _tt['n'], _tt['c_lib'], _tt['c_road'], diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children.py index 132d8a2c..e9e4a3ca 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children.py @@ -2,7 +2,7 @@ # @link Problem definition [[docs/hackerrank/interview_preparation_kit/greedy_algorithms/angry-children.md]] # noqa # pylint: enable=line-too-long -def max_min(k: int, arr: list[int]): +def maxMin(k: int, arr: list[int]): sortedlist = sorted(arr[:]) result = sortedlist[len(arr) - 1] - sortedlist[0] diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children_test.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children_test.py index 35bee1da..c9e43c32 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children_test.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .angry_children import max_min +from .angry_children import maxMin FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,6 @@ def test_max_min(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - max_min(_tt['k'], _tt['arr']), _tt['expected'], - f"{_} | max_min({_tt['k']}, {_tt['arr']}) must be " + maxMin(_tt['k'], _tt['arr']), _tt['expected'], + f"{_} | maxMin({_tt['k']}, {_tt['arr']}) must be " f"=> {_tt['expected']} in {_tt['title']}") diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist.py index bb1fb682..bb64f015 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist.py @@ -3,7 +3,7 @@ # pylint: enable=line-too-long -def get_minimum_cost(k_customers: int, c_costs: list[int]): +def getMinimumCost(k_customers: int, c_costs: list[int]): flowers = sorted(c_costs[:], reverse=True) total: int = 0 diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist_test.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist_test.py index d76f4807..c500631a 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist_test.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .greedy_florist import get_minimum_cost +from .greedy_florist import getMinimumCost FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,6 @@ def test_get_minimum_cost(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - get_minimum_cost(_tt['k'], _tt['contests']), _tt['expected'], - f"{_} | get_minimum_cost({_tt['k']}, {_tt['contests']}) must be " + getMinimumCost(_tt['k'], _tt['contests']), _tt['expected'], + f"{_} | getMinimumCost({_tt['k']}, {_tt['contests']}) must be " f"=> {_tt['expected']} in {_tt['title']}") diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance.py index 0683b825..852a05b6 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance.py @@ -15,7 +15,7 @@ def __getitem__(self, item): return self.__dict__[item] -def luck_balance(k, contests: list) -> int: +def luckBalance(k, contests: list) -> int: important_contests: list[Contest] = [] nonimportant_contests: list[Contest] = [] diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance_test.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance_test.py index 7605d622..39ebfdd1 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance_test.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .luck_balance import luck_balance +from .luck_balance import luckBalance FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,6 @@ def test_luck_balance(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - luck_balance(_tt['k'], _tt['contests']), _tt['expected'], - f"{_} | luck_balance({_tt['k']}, {_tt['contests']}) must be " + luckBalance(_tt['k'], _tt['contests']), _tt['expected'], + f"{_} | luckBalance({_tt['k']}, {_tt['contests']}) must be " f"=> {_tt['expected']} in {_tt['title']}") diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array.py index 1c9f925c..85d7ff91 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array.py @@ -8,7 +8,7 @@ LOGGER = logging.getLogger(__name__) -def minimum_absolute_difference(arr: list[int]) -> int | None: +def minimumAbsoluteDifference(arr: list[int]) -> int | None: sorted_nums = sorted(arr) result = None diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array_test.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array_test.py index 28fc654e..a5c81b41 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array_test.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .minimum_absolute_difference_in_an_array import minimum_absolute_difference +from .minimum_absolute_difference_in_an_array import minimumAbsoluteDifference FILE_PATH = str(Path(__file__).resolve().parent) @@ -17,6 +17,6 @@ def test_minimum_absolute_difference(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - minimum_absolute_difference(_tt['input']), _tt['expected'], - f"{_} | minimum_absolute_difference({_tt['input']}) must be " + minimumAbsoluteDifference(_tt['input']), _tt['expected'], + f"{_} | minimumAbsoluteDifference({_tt['input']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/ctci_linked_list_cycle.py b/src/hackerrank/interview_preparation_kit/linked_lists/ctci_linked_list_cycle.py index 13745b49..c6533c47 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/ctci_linked_list_cycle.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/ctci_linked_list_cycle.py @@ -1,3 +1,4 @@ +# pylint: disable=invalid-name # pylint: disable=line-too-long # @link Problem definition [[docs/hackerrank/interview_preparation_kit/linked_lists/ctci_linked_list_cycle.md]] # noqa: E501 # pylint: enable=line-too-long @@ -5,7 +6,7 @@ from .lib.singly_linked_list import SinglyLinkedListNode -def has_cycle(head: SinglyLinkedListNode) -> bool: +def has_cycle(head: SinglyLinkedListNode) -> bool: # NOSONAR llindex: list[SinglyLinkedListNode] = [] node: SinglyLinkedListNode | None = head diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/find_the_merge_point_of_two_joined_linked_lists.py b/src/hackerrank/interview_preparation_kit/linked_lists/find_the_merge_point_of_two_joined_linked_lists.py index 8282261e..cd3b430f 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/find_the_merge_point_of_two_joined_linked_lists.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/find_the_merge_point_of_two_joined_linked_lists.py @@ -5,7 +5,7 @@ from .lib.singly_linked_list import SinglyLinkedListNode -def find_merge_node( +def findMergeNode( head1: SinglyLinkedListNode, head2: SinglyLinkedListNode) -> int | None: llindex: list[SinglyLinkedListNode] = [] diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/find_the_merge_point_of_two_joined_linked_lists_test.py b/src/hackerrank/interview_preparation_kit/linked_lists/find_the_merge_point_of_two_joined_linked_lists_test.py index c2d823a9..41914b89 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/find_the_merge_point_of_two_joined_linked_lists_test.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/find_the_merge_point_of_two_joined_linked_lists_test.py @@ -1,7 +1,7 @@ import unittest from .lib.singly_linked_list import SinglyLinkedListNode -from .find_the_merge_point_of_two_joined_linked_lists import find_merge_node +from .find_the_merge_point_of_two_joined_linked_lists import findMergeNode # Test Case 0 # @@ -60,8 +60,8 @@ def test_find_merge_node(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - find_merge_node(_tt['llist1'], _tt['llist2']), + findMergeNode(_tt['llist1'], _tt['llist2']), _tt['answer'], - f"{_} | find_merge_node(" + f"{_} | findMergeNode(" f"{_tt['llist1']}, {_tt['llist2']})" f") must be => {_tt['answer']}") diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_at_a_specific_position_in_a_linked_list.py b/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_at_a_specific_position_in_a_linked_list.py index 35a80fab..a3a56feb 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_at_a_specific_position_in_a_linked_list.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_at_a_specific_position_in_a_linked_list.py @@ -5,7 +5,7 @@ from .lib.singly_linked_list import SinglyLinkedListNode -def insert_node_at_position(llist: SinglyLinkedListNode | None, data: int, position: int): +def insertNodeAtPosition(llist: SinglyLinkedListNode | None, data: int, position: int): new_node = SinglyLinkedListNode(data) diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_at_a_specific_position_in_a_linked_list_test.py b/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_at_a_specific_position_in_a_linked_list_test.py index 76a5ecfa..283c43c7 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_at_a_specific_position_in_a_linked_list_test.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_at_a_specific_position_in_a_linked_list_test.py @@ -1,7 +1,7 @@ import unittest -from .lib.singly_linked_list import SinglyLinkedList, singly_linked_list_to_text -from .insert_a_node_at_a_specific_position_in_a_linked_list import insert_node_at_position +from .lib.singly_linked_list import SinglyLinkedList, singlyLinkedListToText +from .insert_a_node_at_a_specific_position_in_a_linked_list import insertNodeAtPosition TEST_CASES = [ @@ -24,17 +24,17 @@ def test_insert_node_at_position(self): for _, _tt in enumerate(TEST_CASES): - insert_node_at_position( + insertNodeAtPosition( _tt['llist'].head, _tt['data'], _tt['position']) - result = singly_linked_list_to_text(_tt['llist'].head, ' ') + result = singlyLinkedListToText(_tt['llist'].head, ' ') self.assertEqual( result, _tt['answer'], - f"{_} | insert_node_at_position(" + f"{_} | insertNodeAtPosition(" f"{_tt['llist'].head}," f"{_tt['data']}," f"{_tt['position']}," @@ -46,19 +46,19 @@ def test_insert_node_at_position_edge_case(self): data = 2 position = 0 - head = insert_node_at_position( + head = insertNodeAtPosition( llist.head, data, position) - result = singly_linked_list_to_text(head, ' ') + result = singlyLinkedListToText(head, ' ') answer = '2 1' self.assertEqual( result, answer, - f"insert_node_at_position(" + f"insertNodeAtPosition(" f"{llist}," f"{data}," f"{position}," diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_into_a_sorted_doubly_linked_list.py b/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_into_a_sorted_doubly_linked_list.py index baf0d22a..96d3334b 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_into_a_sorted_doubly_linked_list.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_into_a_sorted_doubly_linked_list.py @@ -1,5 +1,5 @@ # pylint: disable=line-too-long -# @link Problem definition [[docs/hackerrank/interview_preparation_kit/linked_lists/insert-a-current-into-a-sorted-doubly-linked-list.md]] # noqa: E501 +# @link Problem definition [[docs/hackerrank/interview_preparation_kit/linked_lists/insert-a-node-into-a-sorted-doubly-linked-list.md]] # noqa: E501 # pylint: enable=line-too-long import logging @@ -8,7 +8,7 @@ LOGGER = logging.getLogger(__name__) -def sorted_insert( +def sortedInsert( llist: DoublyLinkedListNode | None, data: int) -> DoublyLinkedListNode | None: diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_into_a_sorted_doubly_linked_list_test.py b/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_into_a_sorted_doubly_linked_list_test.py index 43c06bc6..85935374 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_into_a_sorted_doubly_linked_list_test.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/insert_a_node_into_a_sorted_doubly_linked_list_test.py @@ -1,7 +1,7 @@ import unittest -from .lib.doubly_linked_list import DoublyLinkedList, double_linked_list_to_text -from .insert_a_node_into_a_sorted_doubly_linked_list import sorted_insert +from .lib.doubly_linked_list import DoublyLinkedList, doubleLinkedListToText +from .insert_a_node_into_a_sorted_doubly_linked_list import sortedInsert TEST_CASES = [ @@ -41,16 +41,16 @@ def test_sorted_insert(self): for _, _tt in enumerate(TEST_CASES): - llist = sorted_insert( + llist = sortedInsert( _tt['llist'].head, _tt['data']) - result = double_linked_list_to_text(llist, ' ') + result = doubleLinkedListToText(llist, ' ') self.assertEqual( result, _tt['answer'], - f"{_} | sorted_insert(" + f"{_} | sortedInsert(" f"{_tt['llist'].head}," f"{_tt['data']}," f") must be => {_tt['answer']}") @@ -60,18 +60,18 @@ def test_sorted_insert_edge_case(self): llist = DoublyLinkedList() data = 1 - head = sorted_insert( + head = sortedInsert( llist.head, data) - result = double_linked_list_to_text(head, ' ') + result = doubleLinkedListToText(head, ' ') answer = '1' self.assertEqual( result, answer, - f"sorted_insert(" + f"sortedInsert(" f"{llist}," f"{data}" f") must be => {answer}") diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/lib/doubly_linked_list.py b/src/hackerrank/interview_preparation_kit/linked_lists/lib/doubly_linked_list.py index 16612523..de99925e 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/lib/doubly_linked_list.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/lib/doubly_linked_list.py @@ -32,7 +32,7 @@ def insert_node(self, node_data): return self -def double_linked_list_to_text(node, sep): +def doubleLinkedListToText(node, sep): output: str = '' while node: diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/lib/singly_linked_list.py b/src/hackerrank/interview_preparation_kit/linked_lists/lib/singly_linked_list.py index 44962eb9..72cdde99 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/lib/singly_linked_list.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/lib/singly_linked_list.py @@ -32,7 +32,7 @@ def insert_node(self, node_data) -> SinglyLinkedList: # modified from original, this return a string instead of print -def singly_linked_list_to_text(node, sep) -> str: +def singlyLinkedListToText(node, sep) -> str: output: str = '' while node: diff --git a/src/hackerrank/interview_preparation_kit/linked_lists/reverse_a_doubly_linked_list_test.py b/src/hackerrank/interview_preparation_kit/linked_lists/reverse_a_doubly_linked_list_test.py index dadad7f2..ce958394 100644 --- a/src/hackerrank/interview_preparation_kit/linked_lists/reverse_a_doubly_linked_list_test.py +++ b/src/hackerrank/interview_preparation_kit/linked_lists/reverse_a_doubly_linked_list_test.py @@ -1,6 +1,6 @@ import unittest -from .lib.doubly_linked_list import DoublyLinkedList, double_linked_list_to_text +from .lib.doubly_linked_list import DoublyLinkedList, doubleLinkedListToText from .reverse_a_doubly_linked_list import reverse @@ -43,7 +43,7 @@ def test_reverse(self): llist = reverse(_tt['llist'].head) - result = double_linked_list_to_text(llist, ' ') + result = doubleLinkedListToText(llist, ' ') self.assertEqual( result, diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits.py b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits.py index bdfcca5c..6029aa0f 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits.py +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits.py @@ -2,7 +2,7 @@ # @link Problem definition [[docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.md]] # noqa # pylint: enable=line-too-long -def flipping_bits(number: int) -> int: +def flippingBits(number: int) -> int: # print(n) n_bin = bin(number) diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py index cdaab99d..9f5db04a 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .flipping_bits import flipping_bits +from .flipping_bits import flippingBits FILE_PATH = str(Path(__file__).resolve().parent) @@ -19,6 +19,6 @@ def test_flipping_bits(self): for _, _tt in enumerate(testset['tests']): self.assertEqual( - flipping_bits(_tt['input']), _tt['answer'], - f"{_} | flipping_bits({_tt['input']}) must be " + flippingBits(_tt['input']), _tt['answer'], + f"{_} | flippingBits({_tt['input']}) must be " f"=> {_tt['answer']}") diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.py b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.py index ea6d6bd8..6928c6c0 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.py +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.py @@ -47,7 +47,7 @@ def count_groups(self) -> int: return self._large_friendship -def max_circle(queries) -> list[int]: +def maxCircle(queries) -> list[int]: result: list[int] = [] friends = GroupingFriends() diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries_test.py b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries_test.py index 8c841870..2b78e91c 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries_test.py +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .friend_circle_queries import max_circle +from .friend_circle_queries import maxCircle FILE_PATH = str(Path(__file__).resolve().parent) @@ -18,6 +18,6 @@ def test_max_circle(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - max_circle(_tt['arr']), _tt['answer'], - f"{_} | max_circle({_tt['arr']}) must be " + maxCircle(_tt['arr']), _tt['answer'], + f"{_} | maxCircle({_tt['arr']}) must be " f"=> {_tt['answer']} in {_tt['title']}") diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.py b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.py index 5cb55d63..0291778f 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.py +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.py @@ -9,7 +9,7 @@ STEPS_LIMIT = 3 -def step_perms_comput_with_cache( +def stepPermsComputWithCache( n_steps: int, cache: Dict[int, int], steps_limit: int) -> int: @@ -23,7 +23,7 @@ def step_perms_comput_with_cache( search_key: int = n_steps - i if search_key not in cache: - cache[search_key] = step_perms_comput_with_cache( + cache[search_key] = stepPermsComputWithCache( search_key, cache, steps_limit @@ -34,6 +34,6 @@ def step_perms_comput_with_cache( return (result + 1) if n_steps <= steps_limit else result -def step_perms(n_steps: int) -> int: +def stepPerms(n_steps: int) -> int: initial_cache: Dict[int, int] = {} - return step_perms_comput_with_cache(n_steps, initial_cache, STEPS_LIMIT) % TOP_LIMIT + return stepPermsComputWithCache(n_steps, initial_cache, STEPS_LIMIT) % TOP_LIMIT diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_alternative.py b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_alternative.py index ad6194ac..97ae5449 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_alternative.py +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_alternative.py @@ -8,7 +8,7 @@ @cache -def step_perms(n_steps: int) -> int: +def stepPerms(n_steps: int) -> int: # Base cases if n_steps == 3: return 4 @@ -18,6 +18,6 @@ def step_perms(n_steps: int) -> int: # Recursion result = 0 for i in range(1, 4): - result += step_perms(n_steps - i) + result += stepPerms(n_steps - i) return result diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_test.py b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_test.py index 43f06777..99511979 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_test.py +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_test.py @@ -3,8 +3,8 @@ from pathlib import Path from typing import Dict -from .ctci_recursive_staircase import step_perms, step_perms_comput_with_cache -from .ctci_recursive_staircase_alternative import step_perms as step_perms_alt +from .ctci_recursive_staircase import stepPerms, stepPermsComputWithCache +from .ctci_recursive_staircase_alternative import stepPerms as stepPermsAlt FILE_PATH = str(Path(__file__).resolve().parent) @@ -30,8 +30,8 @@ def test_step_perms_alt_edge_case(self): title: str = 'Edge Case 0' self.assertEqual( - step_perms(n_input), answer, - f"step_perms_alt({input}) must be " + stepPermsAlt(n_input), answer, + f"stepPermsAlt({input}) must be " f"=> {answer} in {title}") def test_step_perms(self): @@ -41,8 +41,8 @@ def test_step_perms(self): for _, _tt in enumerate(testset['tests']): self.assertEqual( - step_perms(_tt['input']), _tt['expected'], - f"{_} | step_perms({_tt['input']}) must be " + stepPerms(_tt['input']), _tt['expected'], + f"{_} | stepPerms({_tt['input']}) must be " f"=> {_tt['expected']} in {testset['title']}") def test_step_perms_comput_with_cache(self): @@ -54,11 +54,11 @@ def test_step_perms_comput_with_cache(self): initial_cache: Dict[int, int] = {} self.assertEqual( - step_perms_comput_with_cache( + stepPermsComputWithCache( _tt['input'], initial_cache, _tt['limit']), _tt['expected'], - f"{_} | step_perms_comput_with_cache(" + f"{_} | stepPermsComputWithCache(" f"{_tt['input']}, {initial_cache}, {_tt['limit']}) must be " f"=> {_tt['expected']} in {testset['title']}") @@ -69,6 +69,6 @@ def test_step_perms_alt(self): for _, _tt in enumerate(testset['tests']): self.assertEqual( - step_perms_alt(_tt['input']), _tt['expected'], - f"{_} | step_perms_alt({_tt['input']}) must be " + stepPermsAlt(_tt['input']), _tt['expected'], + f"{_} | stepPermsAlt({_tt['input']}) must be " f"=> {_tt['expected']} in {testset['title']}") diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.py b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.py index 533a0608..8acd6578 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.py +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.py @@ -6,7 +6,7 @@ sys.set_int_max_str_digits(0) -def super_digit_compute(p_number: int): +def superDigitCompute(p_number: int): word = str(p_number) if len(word) == 1: @@ -16,8 +16,8 @@ def super_digit_compute(p_number: int): for digit in word: partial += int(digit) - return super_digit_compute(partial) + return superDigitCompute(partial) -def super_digit(n_number: int | str, k_times: int): - return super_digit_compute(int(n_number) * k_times) +def superDigit(n_number: int | str, k_times: int): + return superDigitCompute(int(n_number) * k_times) diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum_test.py b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum_test.py index cc19c6fb..2329b671 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum_test.py +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum_test.py @@ -1,5 +1,5 @@ import unittest -from .recursive_digit_sum import super_digit +from .recursive_digit_sum import superDigit TEST_CASES = [ { @@ -167,6 +167,6 @@ def test_super_digit(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - super_digit(_tt['n'], _tt['k']), _tt['answer'], - f"{_} | super_digit({_tt['n']}, {_tt['k']}) must be " + superDigit(_tt['n'], _tt['k']), _tt['answer'], + f"{_} | superDigit({_tt['n']}, {_tt['k']}) must be " f"=> {_tt['answer']} in {_tt['title']}") diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor.py b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor.py index 914dc645..17340276 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor.py +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor.py @@ -2,7 +2,8 @@ # @link Problem definition [[docs/hackerrank/interview_preparation_kit/search/ctci-ice-cream-parlor.md]] # noqa # pylint: enable=line-too-long -def what_flavors(cost: list[int], money: int) -> list[int] | None: + +def whatFlavors(cost: list[int], money: int) -> list[int] | None: cache = {} diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.py b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.py index 852e6fed..e7a1d5fa 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.py +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce.py @@ -1,4 +1,4 @@ -def what_flavors_brute_force(cost: list[int], money: int) -> list[int] | None: +def whatFlavors(cost: list[int], money: int) -> list[int] | None: for i, price in enumerate(cost): diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce_test.py b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce_test.py index 9f3fd1fc..870a7fde 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce_test.py +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce_test.py @@ -3,7 +3,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .ctci_ice_cream_parlor_bruteforce import what_flavors_brute_force +from .ctci_ice_cream_parlor_bruteforce import whatFlavors BRUTEFORCE = os.getenv('BRUTEFORCE') BRUTEFORCE = BRUTEFORCE.upper() == "TRUE" if BRUTEFORCE is not None else False @@ -19,24 +19,24 @@ class TestIceCreamParlorBruteForce(unittest.TestCase): # @unittest.skipIf(not BRUTEFORCE, "skipping due a is a large BRUTEFORCE test") - def test_what_flavors_brute_force(self): + def test_what_flavors(self): for _, testset in enumerate(TEST_CASES_SMALL_CASES): for _, _tt in enumerate(testset['tests']): self.assertEqual( - what_flavors_brute_force(_tt['costs'], _tt['money']), _tt['expected'], - f"{_} | what_flavors_brute_force({_tt['costs']}, {_tt['money']}) " + whatFlavors(_tt['costs'], _tt['money']), _tt['expected'], + f"{_} | whatFlavors({_tt['costs']}, {_tt['money']}) " f"=> must be {_tt['expected']}") - def test_what_flavors_brute_force_border_case(self): + def test_what_flavors_border_case(self): for _, testset in enumerate(TEST_CASES_BORDER_CASES): for _, _tt in enumerate(testset['tests']): self.assertEqual( - what_flavors_brute_force(_tt['costs'], _tt['money']), _tt['expected'], + whatFlavors(_tt['costs'], _tt['money']), _tt['expected'], f"{_} | what_flavors({_tt['costs']}, {_tt['money']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_test.py b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_test.py index 259696dc..3148b9fc 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_test.py +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .ctci_ice_cream_parlor import what_flavors +from .ctci_ice_cream_parlor import whatFlavors FILE_PATH = str(Path(__file__).resolve().parent) @@ -21,8 +21,8 @@ def test_what_flavors(self): for _, _tt in enumerate(testset['tests']): self.assertEqual( - what_flavors(_tt['costs'], _tt['money']), _tt['expected'], - f"{_} | what_flavors({_tt['costs']}, {_tt['money']}) must be " + whatFlavors(_tt['costs'], _tt['money']), _tt['expected'], + f"{_} | whatFlavors({_tt['costs']}, {_tt['money']}) must be " f"=> {_tt['expected']}") def test_what_flavors_border_case(self): @@ -32,6 +32,6 @@ def test_what_flavors_border_case(self): for _, _tt in enumerate(testset['tests']): self.assertEqual( - what_flavors(_tt['costs'], _tt['money']), _tt['expected'], - f"{_} | what_flavors({_tt['costs']}, {_tt['money']}) must be " + whatFlavors(_tt['costs'], _tt['money']), _tt['expected'], + f"{_} | whatFlavors({_tt['costs']}, {_tt['money']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.py b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.py index 272c2c91..f341a968 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.py +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.py @@ -22,7 +22,7 @@ sys.setrecursionlimit(__HIGH_RECURSION_LIMIT__) -def callback_collect_nodes( +def callbackCollectNodes( root: Node, collect: Dict[int, list[Node]], level: int @@ -33,7 +33,7 @@ def callback_collect_nodes( collect[level].append(root) -def callback_collect_plain( +def callbackCollectPlain( root: Node, collect: Dict[int, list[Node]], level: int @@ -47,7 +47,7 @@ def callback_collect_plain( collect[_level].append(root) -def traverse_in_order_collector( +def traverseInOrderCollector( root: Node, collect: Dict[int, list[Node]], level: int, @@ -55,17 +55,17 @@ def traverse_in_order_collector( ) -> Dict[int, list[Node]]: if root.left is not None: - traverse_in_order_collector(root.left, collect, level + 1, callback) + traverseInOrderCollector(root.left, collect, level + 1, callback) callback(root, collect, level) if root.right is not None: - traverse_in_order_collector(root.right, collect, level + 1, callback) + traverseInOrderCollector(root.right, collect, level + 1, callback) return collect -def build_tree(indexes: List[List[int]]) -> Node: +def buildTree(indexes: List[List[int]]) -> Node: indexes_copy = indexes[:] root: Node = Node(__ROOT_VALUE__) @@ -73,11 +73,11 @@ def build_tree(indexes: List[List[int]]) -> Node: while len(indexes_copy) > 0: node_collector = {} - traverse_in_order_collector( + traverseInOrderCollector( root, node_collector, __INITIAL_LEVEL__, - callback_collect_nodes) + callbackCollectNodes) last_level: int = sorted(list(node_collector))[-1] @@ -93,14 +93,14 @@ def build_tree(indexes: List[List[int]]) -> Node: return root -def flatten_tree(root: Node) -> List[int]: +def flattenTree(root: Node) -> List[int]: node_collector: Dict[int, list[Node]] = {} - node_collector = traverse_in_order_collector( + node_collector = traverseInOrderCollector( root, node_collector, __INITIAL_LEVEL__, - callback_collect_plain + callbackCollectPlain ) output: List[int] = [] @@ -113,7 +113,7 @@ def flatten_tree(root: Node) -> List[int]: return output -def swap_branch(root: Node | None) -> Node | None: +def swapBranch(root: Node | None) -> Node | None: if root is not None: temp: Node | None = root.left root.left = root.right @@ -122,23 +122,23 @@ def swap_branch(root: Node | None) -> Node | None: return root -def swap_nodes(indexes: List[List[int]], queries: List[int]) -> List[List[int]]: - tree: Node = build_tree(indexes) +def swapNodes(indexes: List[List[int]], queries: List[int]) -> List[List[int]]: + tree: Node = buildTree(indexes) plain: List[int] output: List[List[int]] = [] node_collector: Dict[int, list[Node]] = {} - traverse_in_order_collector( + traverseInOrderCollector( tree, node_collector, __INITIAL_LEVEL__, - callback_collect_nodes) + callbackCollectNodes) node_collector = dict(sorted(node_collector.items())) - plain = flatten_tree(tree) # original + plain = flattenTree(tree) # original LOGGER.debug('Plain tree: %s', plain) @@ -146,9 +146,9 @@ def swap_nodes(indexes: List[List[int]], queries: List[int]) -> List[List[int]]: for level, node_list in node_collector.items(): if level % query == 0: for node in node_list: - swap_branch(node) + swapBranch(node) - plain = flatten_tree(tree) + plain = flattenTree(tree) output.append(plain) return output diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_big_test.py b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_big_test.py index 184ac6f3..c948b57d 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_big_test.py +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_big_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .swap_nodes_algo import swap_nodes, build_tree, flatten_tree +from .swap_nodes_algo import swapNodes, buildTree, flattenTree FILE_PATH = str(Path(__file__).resolve().parent) BIG_TEST_CASES = load_test_cases(FILE_PATH + '/swap_nodes_algo.big.testcases.json') @@ -12,17 +12,17 @@ class TestSwapNodesAlgoBig(unittest.TestCase): def test_build_tree_and_flatten_big(self): for _, _tt in enumerate(BIG_TEST_CASES): - t_result: list[int] = flatten_tree(build_tree(_tt['nodes'])) + t_result: list[int] = flattenTree(buildTree(_tt['nodes'])) self.assertEqual( t_result, _tt['flattened'], - f"{_} | flatten_tree({_tt['nodes']}) must be {_tt['expected']}") + f"{_} | flattenTree({_tt['nodes']}) must be {_tt['expected']}") def test_swap_nodes_big(self): for _, _tt in enumerate(BIG_TEST_CASES): self.assertEqual( - swap_nodes(_tt['nodes'], _tt['queries']), _tt['expected'], - f"{_} | swap_nodes({_tt['nodes'], _tt['queries']}) must be " + swapNodes(_tt['nodes'], _tt['queries']), _tt['expected'], + f"{_} | swapNodes({_tt['nodes'], _tt['queries']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_test.py b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_test.py index f4544eee..2b3729a8 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_test.py +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .swap_nodes_algo import swap_nodes, build_tree, flatten_tree, swap_branch +from .swap_nodes_algo import swapNodes, swapBranch, buildTree, flattenTree FILE_PATH = str(Path(__file__).resolve().parent) TEST_CASES = load_test_cases(FILE_PATH + '/swap_nodes_algo.testcases.json') @@ -14,20 +14,20 @@ def test_swap_nodes(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - swap_nodes(_tt['nodes'], _tt['queries']), _tt['expected'], - f"{_} | swap_nodes({_tt['nodes'], _tt['queries']}) must be " + swapNodes(_tt['nodes'], _tt['queries']), _tt['expected'], + f"{_} | swapNodes({_tt['nodes'], _tt['queries']}) must be " f"=> {_tt['expected']}") def test_swap_branch(self): t_input = None - t_result = swap_branch(t_input) + t_result = swapBranch(t_input) expected = None self.assertEqual( t_result, expected, - f"swap_branch({t_input}) must be " + f"swapBranch({t_input}) must be " f"=> {expected}" ) @@ -35,22 +35,22 @@ def test_build_tree_and_plain(self): for _, _tt in enumerate(TEST_CASES): - t_result: list[int] = flatten_tree(build_tree(_tt['nodes'])) + t_result: list[int] = flattenTree(buildTree(_tt['nodes'])) self.assertEqual( t_result, _tt['flattened'], - f"{_} | flatten_tree({_tt['nodes']}) must be {_tt['expected']}") + f"{_} | flattenTree({_tt['nodes']}) must be {_tt['expected']}") def test_build_tree_empty(self): t_input = [] - t_to_test = build_tree(t_input) - t_result = flatten_tree(t_to_test) + t_to_test = buildTree(t_input) + t_result = flattenTree(t_to_test) expected = [1] self.assertEqual( t_result, expected, - f"build_tree({t_input}) must be " + f"buildTree({t_input}) must be " f"=> {expected}" ) diff --git a/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort.py b/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort.py index d012a362..77d1d2bf 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort.py +++ b/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort.py @@ -42,7 +42,7 @@ def bubble_sort(self) -> SortableGroup: return self -def count_swaps(group: list[int]) -> str: +def countSwaps(group: list[int]) -> str: sortable_group = SortableGroup(group) sortable_group.bubble_sort() diff --git a/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort_test.py b/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort_test.py index baf05de6..1a983898 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort_test.py +++ b/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .ctci_bubble_sort import SortableGroup, count_swaps +from .ctci_bubble_sort import SortableGroup, countSwaps FILE_PATH = str(Path(__file__).resolve().parent) @@ -29,6 +29,6 @@ def test_counts(self): expected: str = _tt['expected'].replace('\n', "\n") self.assertEqual( - count_swaps(_tt['input']), expected, - f"{_} | count_swaps({_tt['input']}) must be " + countSwaps(_tt['input']), expected, + f"{_} | countSwaps({_tt['input']}) must be " f"=> {expected}") diff --git a/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting.py b/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting.py index 4e6a25bc..de0a6978 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting.py +++ b/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting.py @@ -51,7 +51,7 @@ def comparator(self: Player, b_player: Player) -> int: return 0 -def comparator_sorting(players: List[SortablePlayer]) -> str: +def comparatorSorting(players: List[SortablePlayer]) -> str: players = sorted(players, key=cmp_to_key(SortablePlayer.comparator)) diff --git a/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting_test.py b/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting_test.py index 7c596f1c..bdcc7af0 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting_test.py +++ b/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .ctci_comparator_sorting import Player, SortablePlayer, comparator_sorting +from .ctci_comparator_sorting import Player, SortablePlayer, comparatorSorting FILE_PATH = str(Path(__file__).resolve().parent) @@ -32,6 +32,6 @@ def test_comparator_sorting(self): players.append(SortablePlayer(player['name'], player['score'])) self.assertEqual( - comparator_sorting(players), _tt['expected'], - f"{_} | comparator_sorting({_tt['input']}) must be " + comparatorSorting(players), _tt['expected'], + f"{_} | comparatorSorting({_tt['input']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys.py b/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys.py index a5a851fc..ee952b35 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys.py +++ b/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys.py @@ -1,7 +1,7 @@ # @link Problem definition # [[docs/hackerrank/interview_preparation_kit/sort/mark-and-toys.md]] -def maximum_toys(prices: list[int], k: int): +def maximumToys(prices: list[int], k: int): group = prices[:] group.sort() diff --git a/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys_test.py b/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys_test.py index 2acf7d33..347b9933 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys_test.py +++ b/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .mark_and_toys import maximum_toys +from .mark_and_toys import maximumToys FILE_PATH = str(Path(__file__).resolve().parent) @@ -15,6 +15,6 @@ def test_maximum_toys(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - maximum_toys(_tt['prices'], _tt['budget']), _tt['expected'], - f"{_} | maximum_toys({_tt['prices'], _tt['budget']}) must be " + maximumToys(_tt['prices'], _tt['budget']), _tt['expected'], + f"{_} | maximumToys({_tt['prices'], _tt['budget']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets.py b/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets.py index fe19dcc6..2608688c 100644 --- a/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets.py +++ b/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets.py @@ -7,7 +7,7 @@ LOGGER = logging.getLogger(__name__) -def is_balanced(text: str) -> bool: +def isBalanced(text: str) -> bool: pairs = {'{': '}', '(': ')', '[': ']'} brackets = [] diff --git a/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets_test.py b/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets_test.py index eaec8db6..3c435612 100644 --- a/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets_test.py +++ b/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .balanced_brackets import is_balanced +from .balanced_brackets import isBalanced FILE_PATH = str(Path(__file__).resolve().parent) @@ -18,6 +18,6 @@ def test_is_balanced(self): for _, _tt in enumerate(testset['tests']): self.assertEqual( - is_balanced(_tt['input']), _tt['answer'], - f"{_} | is_balanced({_tt['input']}) must be " + isBalanced(_tt['input']), _tt['answer'], + f"{_} | isBalanced({_tt['input']}) must be " f"=> {_tt['answer']}") diff --git a/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters.py b/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters.py index 2a05b799..b9176589 100644 --- a/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters.py +++ b/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters.py @@ -2,7 +2,7 @@ # @link Problem definition [[docs/hackerrank/interview_preparation_kit/string_manipulation/alternating-characters.md]] # noqa # pylint: enable=line-too-long -def alternating_characters(word: str) -> int: +def alternatingCharacters(word: str) -> int: last: str = '' new_string: str = '' diff --git a/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters_test.py b/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters_test.py index 5e58fe50..8eca8ad9 100644 --- a/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters_test.py +++ b/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .alternating_characters import alternating_characters +from .alternating_characters import alternatingCharacters FILE_PATH = str(Path(__file__).resolve().parent) @@ -18,6 +18,6 @@ def test_alternating_characters(self): for _, _tt in enumerate(testset['tests']): self.assertEqual( - alternating_characters(_tt['input']), _tt['expected'], - f"{_} | alternating_characters({_tt['input']}) must be " + alternatingCharacters(_tt['input']), _tt['expected'], + f"{_} | alternatingCharacters({_tt['input']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams.py b/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams.py index 14954a84..cda4b8b6 100644 --- a/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams.py +++ b/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams.py @@ -7,16 +7,16 @@ LOGGER = logging.getLogger(__name__) -def char_to_dict(word: str) -> dict: +def charToDict(word: str) -> dict: word_map = {char: (word.count(char)) for char in ''.join(sorted(word[:]))} return word_map -def make_anagram(word_a: str, word_b: str) -> int: +def makeAnagram(word_a: str, word_b: str) -> int: - a_map = char_to_dict(word_a) - b_map = char_to_dict(word_b) + a_map = charToDict(word_a) + b_map = charToDict(word_b) diff = 0 for key in a_map: diff --git a/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams_test.py b/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams_test.py index d81eeccd..9a74542c 100644 --- a/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams_test.py +++ b/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .ctci_making_anagrams import make_anagram +from .ctci_making_anagrams import makeAnagram FILE_PATH = str(Path(__file__).resolve().parent) @@ -16,6 +16,6 @@ def test_make_anagram(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - make_anagram(_tt['a'], _tt['b']), _tt['expected'], - f"{_} | make_anagram({_tt['a']}, {_tt['b']}) must be " + makeAnagram(_tt['a'], _tt['b']), _tt['expected'], + f"{_} | makeAnagram({_tt['a']}, {_tt['b']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string.py b/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string.py index 5187b3f8..4776d484 100644 --- a/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string.py +++ b/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string.py @@ -5,7 +5,7 @@ from collections import Counter -def is_valid(word: str) -> bool: +def isValid(word: str) -> bool: if len(word) <= 1: return True diff --git a/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string_test.py b/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string_test.py index 3afd0888..b9e08400 100644 --- a/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string_test.py +++ b/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....hackerrank.lib.loader import load_test_cases -from .sherlock_and_valid_string import is_valid +from .sherlock_and_valid_string import isValid FILE_PATH = str(Path(__file__).resolve().parent) @@ -16,6 +16,6 @@ def test_is_valid(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - is_valid(_tt['input']), _tt['expected'], - f"{_} | is_valid({_tt['input']}) must be " + isValid(_tt['input']), _tt['expected'], + f"{_} | isValid({_tt['input']}) must be " f"=> {_tt['expected']}") diff --git a/src/hackerrank/interview_preparation_kit/trees/ctci_is_binary_search_tree.py b/src/hackerrank/interview_preparation_kit/trees/ctci_is_binary_search_tree.py index ffb709bc..9a8f9a28 100644 --- a/src/hackerrank/interview_preparation_kit/trees/ctci_is_binary_search_tree.py +++ b/src/hackerrank/interview_preparation_kit/trees/ctci_is_binary_search_tree.py @@ -5,18 +5,18 @@ from ...lib.node import Node -def traverse_bst(root: Node | None, collect: list[int]) -> list[int] | None: +def traverseBST(root: Node | None, collect: list[int]) -> list[int] | None: if root is not None: - traverse_bst(root.left, collect) + traverseBST(root.left, collect) collect.append(root.data) - traverse_bst(root.right, collect) + traverseBST(root.right, collect) -def check_bst(root: Node | None) -> bool: +def checkBST(root: Node | None) -> bool: plaint_tree = [] - traverse_bst(root, plaint_tree) + traverseBST(root, plaint_tree) print(plaint_tree) result = True diff --git a/src/hackerrank/interview_preparation_kit/trees/ctci_is_binary_search_tree_test.py b/src/hackerrank/interview_preparation_kit/trees/ctci_is_binary_search_tree_test.py index b5d11dd2..a81c0acb 100644 --- a/src/hackerrank/interview_preparation_kit/trees/ctci_is_binary_search_tree_test.py +++ b/src/hackerrank/interview_preparation_kit/trees/ctci_is_binary_search_tree_test.py @@ -1,6 +1,6 @@ import unittest from ...lib.node import Node -from .ctci_is_binary_search_tree import check_bst +from .ctci_is_binary_search_tree import checkBST class TestIsBinarySearchTree(unittest.TestCase): @@ -11,8 +11,8 @@ def test_check_bst_edge_case(self): answer = True self.assertTrue( - check_bst(root), - f"check_bst({root}) must be " + checkBST(root), + f"checkBST({root}) must be " f"=> {answer}" ) @@ -35,8 +35,8 @@ def test_check_bst_test_example(self): answer = False self.assertFalse( - check_bst(root), - f"check_bst({root}) must be " + checkBST(root), + f"checkBST({root}) must be " f"=> {answer}" ) @@ -60,8 +60,8 @@ def test_check_bst_test_case_0(self): answer = True self.assertTrue( - check_bst(root), - f"check_bst({root}) must be " + checkBST(root), + f"checkBST({root}) must be " f"=> {answer}" ) @@ -85,8 +85,8 @@ def test_check_bst_test_case_1(self): answer = False self.assertFalse( - check_bst(root), - f"check_bst({root}) must be " + checkBST(root), + f"checkBST({root}) must be " f"=> {answer}" ) @@ -110,7 +110,7 @@ def test_check_bst_test_case_2(self): answer = True self.assertTrue( - check_bst(root), - f"check_bst({root}) must be " + checkBST(root), + f"checkBST({root}) must be " f"=> {answer}" ) diff --git a/src/hackerrank/warmup/a_very_big_sum.py b/src/hackerrank/warmup/a_very_big_sum.py index 43860a18..c27726c9 100644 --- a/src/hackerrank/warmup/a_very_big_sum.py +++ b/src/hackerrank/warmup/a_very_big_sum.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def a_very_big_sum(_input: list[int]) -> int: +def aVeryBigSum(_input: list[int]) -> int: result: int = 0 for i in _input: diff --git a/src/hackerrank/warmup/a_very_big_sum_test.py b/src/hackerrank/warmup/a_very_big_sum_test.py index c61f925a..613a52e9 100755 --- a/src/hackerrank/warmup/a_very_big_sum_test.py +++ b/src/hackerrank/warmup/a_very_big_sum_test.py @@ -1,5 +1,5 @@ import unittest -from .a_very_big_sum import a_very_big_sum +from .a_very_big_sum import aVeryBigSum class TestaVeryBigSum(unittest.TestCase): @@ -16,6 +16,6 @@ def test_a_very_big_sum(self): for _, _tt in enumerate(tests): self.assertEqual( - a_very_big_sum(_tt['input']), _tt['answer'], - f"{_} | a_very_big_sum({_tt['input']}) must be " + aVeryBigSum(_tt['input']), _tt['answer'], + f"{_} | aVeryBigSum({_tt['input']}) must be " f"=> {_tt['answer']}") diff --git a/src/hackerrank/warmup/birthday_cake_candles.py b/src/hackerrank/warmup/birthday_cake_candles.py index 8753a3da..a2392be8 100644 --- a/src/hackerrank/warmup/birthday_cake_candles.py +++ b/src/hackerrank/warmup/birthday_cake_candles.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def birthday_cake_candles(_ar: list[int]) -> int: +def birthdayCakeCandles(_ar: list[int]) -> int: if len(_ar) == 0: raise ValueError('Empty input') diff --git a/src/hackerrank/warmup/birthday_cake_candles_test.py b/src/hackerrank/warmup/birthday_cake_candles_test.py index 20c984b6..90284918 100755 --- a/src/hackerrank/warmup/birthday_cake_candles_test.py +++ b/src/hackerrank/warmup/birthday_cake_candles_test.py @@ -1,6 +1,6 @@ import unittest import pytest -from .birthday_cake_candles import birthday_cake_candles +from .birthday_cake_candles import birthdayCakeCandles class TestBirthdayCakeCandles(unittest.TestCase): @@ -15,11 +15,11 @@ def test_birthday_cake_candles(self): for _, _tt in enumerate(tests): self.assertEqual( - birthday_cake_candles(_tt['input']), _tt['answer'], - f"{_} | birthday_cake_candles({_tt['input']}) must be " + birthdayCakeCandles(_tt['input']), _tt['answer'], + f"{_} | birthdayCakeCandles({_tt['input']}) must be " f"=> {_tt['answer']}") def test_birthday_cake_candles_wrong_input(self): with pytest.raises(Exception): - birthday_cake_candles([]) + birthdayCakeCandles([]) diff --git a/src/hackerrank/warmup/compare_triplets.py b/src/hackerrank/warmup/compare_triplets.py index e7cbaba6..694ff5a1 100644 --- a/src/hackerrank/warmup/compare_triplets.py +++ b/src/hackerrank/warmup/compare_triplets.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def compare_triplets(_a: list[int], _b: list[int]) -> list[int]: +def compareTriplets(_a: list[int], _b: list[int]) -> list[int]: if len(_a) == 0 or len(_b) == 0 or len(_a) != len(_b): raise ValueError('Empty input') diff --git a/src/hackerrank/warmup/compare_triplets_test.py b/src/hackerrank/warmup/compare_triplets_test.py index 827a5776..f95f915c 100755 --- a/src/hackerrank/warmup/compare_triplets_test.py +++ b/src/hackerrank/warmup/compare_triplets_test.py @@ -1,6 +1,6 @@ import unittest import pytest -from .compare_triplets import compare_triplets +from .compare_triplets import compareTriplets class TestCompareTriplets(unittest.TestCase): @@ -11,13 +11,13 @@ def test_compare_triplets_wrong_data(self): _b = [2, 3] with pytest.raises(Exception): - compare_triplets(_a, _b) + compareTriplets(_a, _b) with pytest.raises(Exception): - compare_triplets([], _b) + compareTriplets([], _b) with pytest.raises(Exception): - compare_triplets(_a, []) + compareTriplets(_a, []) def test_compare_triplets_test_case0(self): @@ -28,6 +28,6 @@ def test_compare_triplets_test_case0(self): for _, _tt in enumerate(tests): self.assertEqual( - compare_triplets(_tt['a'], _tt['b']), _tt['answer'], - f"{_} | birthday_cake_candles({_tt['a']}, {_tt['b']}) must be " + compareTriplets(_tt['a'], _tt['b']), _tt['answer'], + f"{_} | compareTriplets({_tt['a']}, {_tt['b']}) must be " f"=> {_tt['answer']}") diff --git a/src/hackerrank/warmup/diagonal_difference.py b/src/hackerrank/warmup/diagonal_difference.py index d908e975..049b910c 100644 --- a/src/hackerrank/warmup/diagonal_difference.py +++ b/src/hackerrank/warmup/diagonal_difference.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def diagonal_difference(arr: list[list[int]]) -> int: +def diagonalDifference(arr: list[list[int]]) -> int: diag1 = 0 diag2 = 0 last = len(arr) - 1 diff --git a/src/hackerrank/warmup/diagonal_difference_test.py b/src/hackerrank/warmup/diagonal_difference_test.py index a767af51..b18ff43c 100755 --- a/src/hackerrank/warmup/diagonal_difference_test.py +++ b/src/hackerrank/warmup/diagonal_difference_test.py @@ -1,5 +1,5 @@ import unittest -from .diagonal_difference import diagonal_difference +from .diagonal_difference import diagonalDifference class TestdiagonalDifference(unittest.TestCase): @@ -15,6 +15,6 @@ def test_diagonal_difference(self): answer = 15 self.assertEqual( - diagonal_difference(matrix), answer, + diagonalDifference(matrix), answer, f"diagonalDifference({matrix}) must be " f"=> {answer}") diff --git a/src/hackerrank/warmup/mini_max_sum.py b/src/hackerrank/warmup/mini_max_sum.py index 7299cc6b..c38d8954 100644 --- a/src/hackerrank/warmup/mini_max_sum.py +++ b/src/hackerrank/warmup/mini_max_sum.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def mini_max_sum(arr: list[int]) -> str: +def miniMaxSum(arr: list[int]) -> str: if len(arr) == 0: raise ValueError('Empty input') diff --git a/src/hackerrank/warmup/mini_max_sum_test.py b/src/hackerrank/warmup/mini_max_sum_test.py index 54251d16..aa151a14 100755 --- a/src/hackerrank/warmup/mini_max_sum_test.py +++ b/src/hackerrank/warmup/mini_max_sum_test.py @@ -1,6 +1,6 @@ import unittest import pytest -from .mini_max_sum import mini_max_sum +from .mini_max_sum import miniMaxSum class TestMiniMaxSum(unittest.TestCase): @@ -8,7 +8,7 @@ class TestMiniMaxSum(unittest.TestCase): def test_mini_max_sum_wrong_data(self): with pytest.raises(Exception): - mini_max_sum([]) + miniMaxSum([]) def test_mini_max_sum(self): @@ -20,6 +20,6 @@ def test_mini_max_sum(self): for _, _tt in enumerate(tests): self.assertEqual( - mini_max_sum(_tt['input']), _tt['answer'], + miniMaxSum(_tt['input']), _tt['answer'], f"{_} | miniMaxSum({_tt['input']}) must be " f"=> {_tt['answer']}") diff --git a/src/hackerrank/warmup/plus_minus.py b/src/hackerrank/warmup/plus_minus.py index ae85227d..e38df445 100644 --- a/src/hackerrank/warmup/plus_minus.py +++ b/src/hackerrank/warmup/plus_minus.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def plus_minus(arr: list[int]) -> str: +def plusMinus(arr: list[int]) -> str: positives: int = 0 negatives: int = 0 zeros: int = 0 @@ -26,5 +26,5 @@ def plus_minus(arr: list[int]) -> str: output: str = '\n'.join(result) - LOGGER.info('Problem 0000 result: %s', output) + LOGGER.info('plusMinus result: %s', output) return output diff --git a/src/hackerrank/warmup/plus_minus_test.py b/src/hackerrank/warmup/plus_minus_test.py index 5c30fd76..ba5f935e 100755 --- a/src/hackerrank/warmup/plus_minus_test.py +++ b/src/hackerrank/warmup/plus_minus_test.py @@ -1,5 +1,5 @@ import unittest -from .plus_minus import plus_minus +from .plus_minus import plusMinus class TestPlusMinus(unittest.TestCase): @@ -16,6 +16,6 @@ def test_plus_minus(self): for _, _tt in enumerate(tests): self.assertEqual( - plus_minus(_tt['input']), _tt['answer'], - f"{_} | plus_minus({_tt['input']}) must be " + plusMinus(_tt['input']), _tt['answer'], + f"{_} | plusMinus({_tt['input']}) must be " f"=> {_tt['answer']}") diff --git a/src/hackerrank/warmup/simple_array_sum.py b/src/hackerrank/warmup/simple_array_sum.py index ebe6722d..0aa12cbe 100644 --- a/src/hackerrank/warmup/simple_array_sum.py +++ b/src/hackerrank/warmup/simple_array_sum.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def simple_array_sum(arr: list[int]) -> int: +def simpleArraySum(arr: list[int]) -> int: acum = 0 for _, value in enumerate(arr): diff --git a/src/hackerrank/warmup/simple_array_sum_test.py b/src/hackerrank/warmup/simple_array_sum_test.py index 01493fa0..1d7a934c 100755 --- a/src/hackerrank/warmup/simple_array_sum_test.py +++ b/src/hackerrank/warmup/simple_array_sum_test.py @@ -1,5 +1,5 @@ import unittest -from .simple_array_sum import simple_array_sum +from .simple_array_sum import simpleArraySum class TestSimpleArraySum(unittest.TestCase): @@ -13,6 +13,6 @@ def test_simple_array_sum(self): for _, _tt in enumerate(tests): self.assertEqual( - simple_array_sum(_tt['input']), _tt['answer'], - f"{_} | simple_array_sum({_tt['input']}) must be " + simpleArraySum(_tt['input']), _tt['answer'], + f"{_} | simpleArraySum({_tt['input']}) must be " f"=> {_tt['answer']}") diff --git a/src/hackerrank/warmup/solve_me_first.py b/src/hackerrank/warmup/solve_me_first.py index e2303ec8..82e92f5a 100644 --- a/src/hackerrank/warmup/solve_me_first.py +++ b/src/hackerrank/warmup/solve_me_first.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def solve_me_first(_a: int, _b: int) -> int: +def solveMeFirst(_a: int, _b: int) -> int: result = _a + _b LOGGER.info('Solve Me First result: %i', result) diff --git a/src/hackerrank/warmup/solve_me_first_test.py b/src/hackerrank/warmup/solve_me_first_test.py index e35467b1..b033d909 100644 --- a/src/hackerrank/warmup/solve_me_first_test.py +++ b/src/hackerrank/warmup/solve_me_first_test.py @@ -1,5 +1,5 @@ import unittest -from .solve_me_first import solve_me_first +from .solve_me_first import solveMeFirst class TestSolveMeFirst(unittest.TestCase): @@ -13,6 +13,6 @@ def test_solve_me_first(self): for _, _tt in enumerate(tests): self.assertEqual( - solve_me_first(_tt['a'], _tt['b']), _tt['answer'], - f"{_} | solve_me_first({_tt['a'], _tt['b']}) must be " + solveMeFirst(_tt['a'], _tt['b']), _tt['answer'], + f"{_} | solveMeFirst({_tt['a'], _tt['b']}) must be " f"=> {_tt['answer']}") diff --git a/src/hackerrank/warmup/time_conversion.py b/src/hackerrank/warmup/time_conversion.py index 3d006847..46c4f40c 100644 --- a/src/hackerrank/warmup/time_conversion.py +++ b/src/hackerrank/warmup/time_conversion.py @@ -5,7 +5,7 @@ LOGGER = logging.getLogger(__name__) -def time_conversion(_s: str) -> str: +def timeConversion(_s: str) -> str: meridian = _s[-2:] meridian = meridian.lower() diff --git a/src/hackerrank/warmup/time_conversion_test.py b/src/hackerrank/warmup/time_conversion_test.py index 654fa819..5d93f1cf 100755 --- a/src/hackerrank/warmup/time_conversion_test.py +++ b/src/hackerrank/warmup/time_conversion_test.py @@ -1,5 +1,5 @@ import unittest -from .time_conversion import time_conversion +from .time_conversion import timeConversion class TestTimeConversion(unittest.TestCase): @@ -14,8 +14,8 @@ def test_time_conversion_example(self): for _, _tt in enumerate(tests): self.assertEqual( - time_conversion(_tt['input']), _tt['answer'], - f"{_} | time_conversion_({input}) must be " + timeConversion(_tt['input']), _tt['answer'], + f"{_} | timeConversion({input}) must be " f"=> {_tt['answer']}") def test_time_conversion_case_0(self): @@ -24,6 +24,6 @@ def test_time_conversion_case_0(self): solution_found = '19:05:45' self.assertEqual( - time_conversion(tinput), solution_found, - f"problem0000({input}) must be " + timeConversion(tinput), solution_found, + f"timeConversion({input}) must be " f"=> {solution_found}") diff --git a/src/projecteuler/helpers/number_to_word.py b/src/projecteuler/helpers/number_to_word.py index 915dbce8..e639dbcb 100644 --- a/src/projecteuler/helpers/number_to_word.py +++ b/src/projecteuler/helpers/number_to_word.py @@ -37,7 +37,7 @@ } -def number_to_word(value: int) -> str: +def numberToWord(value: int) -> str: big_value = str(value) # 1 to 19 @@ -61,7 +61,7 @@ def number_to_word(value: int) -> str: if rest == 0: return f'{dictionary[big_value[0]]} {_CENTS_}' - return f'{dictionary[big_value[0]]} {_CENTS_} and {number_to_word(rest)}' + return f'{dictionary[big_value[0]]} {_CENTS_} and {numberToWord(rest)}' # up to 1000 if value == 1000: diff --git a/src/projecteuler/helpers/number_to_word_test.py b/src/projecteuler/helpers/number_to_word_test.py index cd6c0126..c31b7134 100644 --- a/src/projecteuler/helpers/number_to_word_test.py +++ b/src/projecteuler/helpers/number_to_word_test.py @@ -1,27 +1,27 @@ import unittest -from .number_to_word import number_to_word +from .number_to_word import numberToWord class TestNumberToWord(unittest.TestCase): def test_number_to_word_up_to_two_digits(self): - self.assertEqual(number_to_word(1), 'one') - self.assertEqual(number_to_word(16), 'sixteen') - self.assertEqual(number_to_word(20), 'twenty') - self.assertEqual(number_to_word(30), 'thirty') - self.assertEqual(number_to_word(64), 'sixty-four') + self.assertEqual(numberToWord(1), 'one') + self.assertEqual(numberToWord(16), 'sixteen') + self.assertEqual(numberToWord(20), 'twenty') + self.assertEqual(numberToWord(30), 'thirty') + self.assertEqual(numberToWord(64), 'sixty-four') def test_number_to_word_up_to_three_digit(self): - self.assertEqual(number_to_word(301), 'three hundred and one') - self.assertEqual(number_to_word(348), 'three hundred and forty-eight') - self.assertEqual(number_to_word(500), 'five hundred') + self.assertEqual(numberToWord(301), 'three hundred and one') + self.assertEqual(numberToWord(348), 'three hundred and forty-eight') + self.assertEqual(numberToWord(500), 'five hundred') def test_number_to_word_border_cases(self): - self.assertEqual(number_to_word(1000), 'one thousand') + self.assertEqual(numberToWord(1000), 'one thousand') self.assertRaisesRegex(AttributeError, 'Invalid value', - number_to_word, 9999) + numberToWord, 9999) diff --git a/src/projecteuler/helpers/palindrome.py b/src/projecteuler/helpers/palindrome.py index b72dc59a..789ec9c7 100644 --- a/src/projecteuler/helpers/palindrome.py +++ b/src/projecteuler/helpers/palindrome.py @@ -1,5 +1,5 @@ -def is_palindrome(num): +def isPalindrome(num): digits = str(num) reversed_num = "".join(reversed(digits)) diff --git a/src/projecteuler/helpers/palindrome_test.py b/src/projecteuler/helpers/palindrome_test.py index 0bdf599e..c17f7426 100644 --- a/src/projecteuler/helpers/palindrome_test.py +++ b/src/projecteuler/helpers/palindrome_test.py @@ -1,19 +1,19 @@ import unittest -from .palindrome import is_palindrome +from .palindrome import isPalindrome class TestPalindromes(unittest.TestCase): def test_is_palindrome(self): - self.assertTrue(is_palindrome(0)) - self.assertTrue(is_palindrome(7)) - self.assertTrue(is_palindrome(101)) - self.assertTrue(is_palindrome(9889)) + self.assertTrue(isPalindrome(0)) + self.assertTrue(isPalindrome(7)) + self.assertTrue(isPalindrome(101)) + self.assertTrue(isPalindrome(9889)) def test_is_not_palindrome(self): - self.assertFalse(is_palindrome(13), False) - self.assertFalse(is_palindrome(29), False) - self.assertFalse(is_palindrome(123), False) - self.assertFalse(is_palindrome(534), False) + self.assertFalse(isPalindrome(13), False) + self.assertFalse(isPalindrome(29), False) + self.assertFalse(isPalindrome(123), False) + self.assertFalse(isPalindrome(534), False) diff --git a/src/projecteuler/helpers/prime.py b/src/projecteuler/helpers/prime.py index fb3df201..be1bc8f5 100644 --- a/src/projecteuler/helpers/prime.py +++ b/src/projecteuler/helpers/prime.py @@ -1,4 +1,4 @@ -def is_prime(num): +def isPrime(num): if num in (0, 1): return False diff --git a/src/projecteuler/helpers/prime_test.py b/src/projecteuler/helpers/prime_test.py index f4b71a7f..fe2c290b 100644 --- a/src/projecteuler/helpers/prime_test.py +++ b/src/projecteuler/helpers/prime_test.py @@ -1,19 +1,19 @@ import unittest -from .prime import is_prime +from .prime import isPrime class TestPrimes(unittest.TestCase): def test_(self): - self.assertFalse(is_prime(1)) - self.assertTrue(is_prime(2)) - self.assertTrue(is_prime(7)) - self.assertTrue(is_prime(13)) + self.assertFalse(isPrime(1)) + self.assertTrue(isPrime(2)) + self.assertTrue(isPrime(7)) + self.assertTrue(isPrime(13)) def test_not_prime(self): - self.assertFalse(is_prime(4)) - self.assertFalse(is_prime(10)) - self.assertFalse(is_prime(100)) - self.assertFalse(is_prime(3000)) + self.assertFalse(isPrime(4)) + self.assertFalse(isPrime(10)) + self.assertFalse(isPrime(100)) + self.assertFalse(isPrime(3000)) diff --git a/src/projecteuler/helpers/word_score.py b/src/projecteuler/helpers/word_score.py index 38ca3622..b8b5aece 100644 --- a/src/projecteuler/helpers/word_score.py +++ b/src/projecteuler/helpers/word_score.py @@ -28,7 +28,7 @@ } -def word_score(word: str) -> int: +def wordScore(word: str) -> int: result = 0 for letter in list(word): diff --git a/src/projecteuler/helpers/word_score_test.py b/src/projecteuler/helpers/word_score_test.py index bada4927..12b7dd25 100644 --- a/src/projecteuler/helpers/word_score_test.py +++ b/src/projecteuler/helpers/word_score_test.py @@ -1,6 +1,6 @@ import unittest -from .word_score import word_score +from .word_score import wordScore class TestWordScore(unittest.TestCase): @@ -14,11 +14,11 @@ def test_wordscore(self): ] for _, _tt in enumerate(tests): - to_test = word_score(_tt['input']) + to_test = wordScore(_tt['input']) self.assertEqual( to_test, _tt['answer'], - f"{_} | word_score({_tt['input']}) must be " + f"{_} | wordScore({_tt['input']}) must be " f"=> {_tt['answer']}") def test_wordscore_with_scoreless_characters(self): @@ -29,9 +29,9 @@ def test_wordscore_with_scoreless_characters(self): ] for _, _tt in enumerate(tests): - to_test = word_score(_tt['input']) + to_test = wordScore(_tt['input']) self.assertEqual( to_test, _tt['answer'], - f"{_} | word_score({_tt['input']}) must be " + f"{_} | wordScore({_tt['input']}) must be " f"=> {_tt['answer']}") diff --git a/src/projecteuler/problem0004.py b/src/projecteuler/problem0004.py index 48af0e93..79b7afee 100644 --- a/src/projecteuler/problem0004.py +++ b/src/projecteuler/problem0004.py @@ -1,7 +1,7 @@ # @link Problem definition [[docs/projecteuler/problem0004.md]] import logging -from .helpers.palindrome import is_palindrome +from .helpers.palindrome import isPalindrome LOGGER = logging.getLogger(__name__) @@ -23,7 +23,7 @@ def problem0004(_bottom: int, _top: int) -> 'None | int': cycles += 1 - if is_palindrome(i * j): + if isPalindrome(i * j): found_palindrome = i * j LOGGER.debug("FOUND %d x %d = %d is Palindrome", diff --git a/src/projecteuler/problem0005_alt.py b/src/projecteuler/problem0005_alt.py index 53329655..26bc2c2f 100644 --- a/src/projecteuler/problem0005_alt.py +++ b/src/projecteuler/problem0005_alt.py @@ -7,7 +7,7 @@ LOGGER = logging.getLogger(__name__) -def _increase(element: int, group: dict[int, int]) -> dict[int, int]: +def increase(element: int, group: dict[int, int]) -> dict[int, int]: elem = group.get(element, None) if elem is None: group.update({element: 1}) @@ -17,7 +17,7 @@ def _increase(element: int, group: dict[int, int]) -> dict[int, int]: return group -def _replace_maximum(element: int, count: int, group: dict[int, int]) -> dict[int, int]: +def replaceMaximum(element: int, count: int, group: dict[int, int]) -> dict[int, int]: elem = group.get(element, None) if elem is None: group.update({element: count}) @@ -27,16 +27,16 @@ def _replace_maximum(element: int, count: int, group: dict[int, int]) -> dict[in return group -def prime_factors_collection(factors: list[int]) -> dict[int, int]: +def primeFactorsCollection(factors: list[int]) -> dict[int, int]: collection = {} for factor in factors: - collection = _increase(factor, collection) + collection = increase(factor, collection) return collection -def problem0005_alt(_bottom: int, _top: int) -> 'None | float': +def problem0005(_bottom: int, _top: int) -> 'None | float': minimum_prime_factors = {} result: None | float = None @@ -49,7 +49,7 @@ def problem0005_alt(_bottom: int, _top: int) -> 'None | float': primes = number.prime_factors() cycles += number.get_prime_factors_cycles() - factors = prime_factors_collection(primes) + factors = primeFactorsCollection(primes) cycles += len(primes) LOGGER.debug('Prime Factors of %d list => %s', i, str(primes)) @@ -57,7 +57,7 @@ def problem0005_alt(_bottom: int, _top: int) -> 'None | float': for factor, quantity in factors.items(): cycles += 1 - _replace_maximum(factor, quantity, minimum_prime_factors) + replaceMaximum(factor, quantity, minimum_prime_factors) LOGGER.debug('Prime Factors of %d grouped => %s', i, str(minimum_prime_factors)) diff --git a/src/projecteuler/problem0005_test.py b/src/projecteuler/problem0005_test.py index 2d64d261..3ac6f3e8 100755 --- a/src/projecteuler/problem0005_test.py +++ b/src/projecteuler/problem0005_test.py @@ -1,6 +1,6 @@ import unittest from .problem0005 import problem0005 -from .problem0005_alt import problem0005_alt +from .problem0005_alt import problem0005 as problem0005_alt class TestProblem0005(unittest.TestCase): diff --git a/src/projecteuler/problem0007.py b/src/projecteuler/problem0007.py index 451a3317..e45b16cb 100644 --- a/src/projecteuler/problem0007.py +++ b/src/projecteuler/problem0007.py @@ -1,7 +1,7 @@ # @link Problem definition [[docs/projecteuler/problem0007.md]] import logging -from .helpers.prime import is_prime +from .helpers.prime import isPrime LOGGER = logging.getLogger(__name__) @@ -15,7 +15,7 @@ def problem0007(_top: int) -> int: while len(primes) < _top: i += 1 - if is_prime(j): + if isPrime(j): primes.append(j) LOGGER.debug("Prime found %d put in position: %d", j, len(primes)) diff --git a/src/projecteuler/problem0017.py b/src/projecteuler/problem0017.py index 77c538f7..0d6ad579 100644 --- a/src/projecteuler/problem0017.py +++ b/src/projecteuler/problem0017.py @@ -2,7 +2,7 @@ import re import logging -from .helpers.number_to_word import number_to_word +from .helpers.number_to_word import numberToWord LOGGER = logging.getLogger(__name__) @@ -12,7 +12,7 @@ def problem0017(_init: int, _last: int) -> int: acum = 0 for i in range(_init, _last + 1): - word = number_to_word(i) + word = numberToWord(i) replaced = re.sub(r'[^a-zA-Z]', '', word) acum += len(replaced) diff --git a/src/projecteuler/problem0022.py b/src/projecteuler/problem0022.py index d59df681..c31c700e 100644 --- a/src/projecteuler/problem0022.py +++ b/src/projecteuler/problem0022.py @@ -3,7 +3,7 @@ import logging from typing import List -from .helpers.word_score import word_score +from .helpers.word_score import wordScore LOGGER = logging.getLogger(__name__) @@ -18,7 +18,7 @@ def problem0022(list_of_names: List[str]) -> int: for name in names: counter += 1 - result += counter * word_score(name) + result += counter * wordScore(name) LOGGER.info('Problem 0022 result: %i', result) return result From ed83cbe24aa520e5ede7d5ad3841b2e3d92cef51 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 20 Feb 2025 09:16:14 -0300 Subject: [PATCH 015/102] [REFACTOR] moving test data to JSON --- .../arrays/cruch_bruteforce_test.py | 4 +- .../arrays/cruch_optimized_test.py | 4 +- .../arrays/ctci_array_left_rotation_test.py | 4 +- .../arrays/minimum_swaps_2_test.py | 4 +- .../arrays/new_year_chaos_test.py | 4 +- .../arrays/two_d_array_test.py | 4 +- .../count_triplets_1_test.py | 6 +- .../ctci_ransom_note_test.py | 4 +- .../frequency_queries_test.py | 4 +- ...n => sherlock_and_anagrams.testcases.json} | 0 .../sherlock_and_anagrams_test.py | 8 +- .../two_strings_test.py | 4 +- .../dynamic_programming/max_array_sum_test.py | 4 +- .../graphs/roads_and_libraries_test.py | 4 +- .../greedy_algorithms/angry_children_test.py | 4 +- .../greedy_algorithms/greedy_florist_test.py | 4 +- .../greedy_algorithms/luck_balance_test.py | 4 +- ...um_absolute_difference_in_an_array_test.py | 4 +- .../miscellaneous/flipping_bits_test.py | 4 +- .../friend_circle_queries_test.py | 4 +- .../ctci_fibonacci_numbers.testcases.json | 17 ++ .../ctci_fibonacci_numbers_test.py | 28 +-- .../ctci_recursive_staircase_test.py | 18 +- .../recursive_digit_sum.testcases.json | 33 ++++ .../recursive_digit_sum_test.py | 168 +----------------- .../ctci_ice_cream_parlor_bruteforce_test.py | 6 +- .../search/ctci_ice_cream_parlor_test.py | 6 +- .../search/swap_nodes_algo_big_test.py | 4 +- .../search/swap_nodes_algo_test.py | 4 +- .../sorting/ctci_bubble_sort_test.py | 4 +- .../sorting/ctci_comparator_sorting_test.py | 4 +- .../sorting/mark_and_toys_test.py | 4 +- .../balanced_brackets_test.py | 4 +- .../alternating_characters_test.py | 4 +- .../ctci_making_anagrams_test.py | 4 +- .../sherlock_and_valid_string_test.py | 4 +- ...search_tree_lowest_common_ancestor_test.py | 4 +- .../tree_height_of_a_binary_tree_test.py | 4 +- src/{hackerrank => }/lib/loader.py | 2 +- src/projecteuler/problem0022_test.py | 27 +-- 40 files changed, 158 insertions(+), 273 deletions(-) rename src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/{sherlock_and_anagrams.json => sherlock_and_anagrams.testcases.json} (100%) create mode 100644 src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.testcases.json create mode 100644 src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.testcases.json rename src/{hackerrank => }/lib/loader.py (75%) diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce_test.py b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce_test.py index f5bfc328..dd669411 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_bruteforce_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .cruch_bruteforce import arrayManipulation FILE_PATH = str(Path(__file__).resolve().parent) -CRUCH_SMALL_TEST_CASES = load_test_cases( +CRUCH_SMALL_TEST_CASES = loadTestCases( FILE_PATH + '/cruch.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized_test.py b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized_test.py index c936c47d..d8deaaf8 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch_optimized_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .cruch_optimized import arrayManipulation FILE_PATH = str(Path(__file__).resolve().parent) -CRUCH_SMALL_TEST_CASES = load_test_cases( +CRUCH_SMALL_TEST_CASES = loadTestCases( FILE_PATH + '/cruch.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py index 5008a0b4..d29a1792 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .ctci_array_left_rotation import rotLeft, rotLeftOne FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/ctci_array_left_rotation.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2_test.py b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2_test.py index 35442032..67364e7f 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .minimum_swaps_2 import minimumSwaps FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/minimum_swaps_2.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos_test.py b/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos_test.py index 02e3fd13..14488074 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .new_year_chaos import minimumBribes, minimumBribesText FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/new_year_chaos.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/arrays/two_d_array_test.py b/src/hackerrank/interview_preparation_kit/arrays/two_d_array_test.py index bb3fa23a..ea9ef52c 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/two_d_array_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/two_d_array_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .two_d_array import hourglassSum FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/two_d_array.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_test.py index 5c7fbce3..efd8e97b 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1_test.py @@ -1,15 +1,15 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .count_triplets_1 import countTriplets, countTripletsBruteForce FILE_PATH = str(Path(__file__).resolve().parent) -SMALL_TEST_CASES = load_test_cases( +SMALL_TEST_CASES = loadTestCases( FILE_PATH + '/count_triplets_1.small.testcases.json') -TEST_CASES_BIG = load_test_cases( +TEST_CASES_BIG = loadTestCases( FILE_PATH + '/count_triplets_1.big.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note_test.py index 5f8934a5..35e65cf0 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/ctci_ransom_note_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .ctci_ransom_note import checkMagazine, checkMagazineText FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/ctci_ransom_note.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_test.py index f6530580..e93e2255 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/frequency_queries_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .frequency_queries import freqQuery FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/frequency_queries.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.json b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.testcases.json similarity index 100% rename from src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.json rename to src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.testcases.json diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams_test.py index 798aa394..2e8798b8 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams_test.py @@ -1,13 +1,13 @@ import unittest -import json from pathlib import Path +from ....lib.loader import loadTestCases from .sherlock_and_anagrams import sherlockAndAnagrams FILE_PATH = str(Path(__file__).resolve().parent) -JSON_DATA_FILE = FILE_PATH + '/sherlock_and_anagrams.json' -with open(JSON_DATA_FILE, encoding="utf-8") as file: - TEST_CASES = json.load(file) + +TEST_CASES = loadTestCases( + FILE_PATH + '/sherlock_and_anagrams.testcases.json') class TestSherlockAndAnagrams(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings_test.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings_test.py index 8ea68b6f..9c2382b9 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings_test.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/two_strings_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .two_strings import twoStrings FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/two_strings.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum_test.py b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum_test.py index 96047422..0f87221d 100644 --- a/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum_test.py +++ b/src/hackerrank/interview_preparation_kit/dynamic_programming/max_array_sum_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .max_array_sum import maxSubsetSum FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/max_array_sum.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries_test.py b/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries_test.py index 4b73c5bc..9bc2a515 100644 --- a/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries_test.py +++ b/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .roads_and_libraries import roadsAndLibraries FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/roads_and_libraries.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children_test.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children_test.py index c9e43c32..c9f36f77 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children_test.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/angry_children_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .angry_children import maxMin FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/angry_children.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist_test.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist_test.py index c500631a..aac125cf 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist_test.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/greedy_florist_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .greedy_florist import getMinimumCost FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/greedy_florist.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance_test.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance_test.py index 39ebfdd1..feb25242 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance_test.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .luck_balance import luckBalance FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/luck_balance.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array_test.py b/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array_test.py index a5c81b41..704cf4f7 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array_test.py +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/minimum_absolute_difference_in_an_array_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .minimum_absolute_difference_in_an_array import minimumAbsoluteDifference FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/minimum_absolute_difference_in_an_array.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py index 9f5db04a..084eb06b 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .flipping_bits import flippingBits FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/flipping_bits.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries_test.py b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries_test.py index 2b78e91c..7efff9df 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries_test.py +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries_test.py @@ -1,13 +1,13 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .friend_circle_queries import maxCircle FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/friend_circle_queries.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.testcases.json b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.testcases.json new file mode 100644 index 00000000..dfa753cf --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.testcases.json @@ -0,0 +1,17 @@ +[ + { + "title": "Sample Test case 0", + "input": 5, + "expected": 5 + }, + { + "title": "Sample Test case 1", + "input": 12, + "expected": 144 + }, + { + "title": "Sample Test case 2", + "input": 17, + "expected": 1597 + } +] diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers_test.py b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers_test.py index 6c110ae7..2922743b 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers_test.py +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers_test.py @@ -1,23 +1,13 @@ import unittest +from pathlib import Path + +from ....lib.loader import loadTestCases from .ctci_fibonacci_numbers import fibonacci -TEST_CASES = [ - { - 'title': 'Sample Test case 0', - 'input': 5, - 'answer': 5 - }, - { - 'title': 'Sample Test case 1', - 'input': 12, - 'answer': 144, - }, - { - 'title': 'Sample Test case 2', - 'input': 17, - 'answer': 1597 - } -] +FILE_PATH = str(Path(__file__).resolve().parent) + +TEST_CASES = loadTestCases( + FILE_PATH + '/ctci_fibonacci_numbers.testcases.json') class TestRecursionFibonacciNumbers(unittest.TestCase): @@ -27,6 +17,6 @@ def test_fibonacci(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - fibonacci(_tt['input']), _tt['answer'], + fibonacci(_tt['input']), _tt['expected'], f"{_} | fibonacci({_tt['input']}) must be " - f"=> {_tt['answer']} in {_tt['title']}") + f"=> {_tt['expected']} in {_tt['title']}") diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_test.py b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_test.py index 99511979..ee5e38c7 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_test.py +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase_test.py @@ -1,24 +1,18 @@ import unittest -import json from pathlib import Path from typing import Dict +from ....lib.loader import loadTestCases from .ctci_recursive_staircase import stepPerms, stepPermsComputWithCache from .ctci_recursive_staircase_alternative import stepPerms as stepPermsAlt FILE_PATH = str(Path(__file__).resolve().parent) -with open( - FILE_PATH + '/ctci_recursive_staircase.testcases.json', - encoding="utf-8" -) as file1: - TEST_CASES = json.load(file1) - -with open( - FILE_PATH + '/ctci_recursive_staircase_generalized.testcases.json', - encoding="utf-8" -) as file2: - TEST_CASES_GENERALIZED = json.load(file2) +TEST_CASES = loadTestCases( + FILE_PATH + '/ctci_recursive_staircase.testcases.json') + +TEST_CASES_GENERALIZED = loadTestCases( + FILE_PATH + '/ctci_recursive_staircase_generalized.testcases.json') class TestStaircase(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.testcases.json b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.testcases.json new file mode 100644 index 00000000..3c15cb4e --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.testcases.json @@ -0,0 +1,33 @@ +[ + { + "title": "Sample Test case 0", + "n": "148", + "k": 3, + "expected": 3 + }, + { + "title": "Sample Test case 7", + "n": + "2365978831649490136475575038877779575813226775851820912370812124502641538947920808397703549713678494683928497712437176140282589350277653479225520602813456433277417366680426198633681891184348757007292907409160353745221125354212095528784124728447770959861439390350308313917365021363541712618686942946773324003146008424205688630371656757561012224744901800726911246423272186301595490993253791386102270201965996662707215300748516732223935858816466886068592299708740453558018878677753623653080545592459765998008028026982510689469213738241205802446029154833458048894002646934119082621498341445221491190955459548371083839625590505228681017724678315572531551988758568150699821635779156685637531274097856486075649357610713833072735231599919848220063026429718137766286716343385059699133211699189933339174843625266398503099203416124466032711453854413933737536836406105991857744766344461162222670876732729171585512468615558499979720269427922798431312270483732004392503905160233457811525428432787732543799783309593536386190295516419339222642886780012683583264436427241020490358960438948951090123073035203797984302163150042110707217274102457735317367100133807782064391421012191958312396649052833396257876824943425814834615313474161638240747120342368147351931074481983318414461554116111216672594256301273113776892080967125790153125125885441941114178586071406149630777323200516190208241341822285244325578953416388462284725673478766919050744786263188733438572307443267700831425575113213359873223948072988922668251652320316884761627830570057061821492039968369341602081382603302965910382997241199808824091331180464950187035576778206683245316006405529597170652549163351875206280564448346510252775085876212617353369513619186390565654064068546863018765466029315754619416429621887091818939474391383675337791979997519954871635692656223852981330368145996344325688247632566665645262588764650823901065646663460851602833982853795901687202035893967893724362979886948663369428689585509715442019662325024294581705265808022570365351645495802686891955348084550615538750809287498241260408673517746608582833123696027380353038348218786331710334697053069152326732702246704177127367642287975998486114018970510842276024855162228267767755948030029723573646908844109049374244456580474922058250964260437721278380069311972455077102266167098465788845261016395772392904280411167763443571285141388567074805986331207454652671618663858701085276806486000014124900483188940484497173286284987124699515039831183902383877120136788492339903316093693938833730548247174799553092402671083313285813003903363625219370039413610850308966558948057932583576771492037811460439359542902624599661588624295232252616245186844975995180218889230403968087888108494214819234992007182241562844376961711438491105585390645332161544542326095869642445733823661806228697208277656426326128938546125761166960351482948539114133280810916317873360419836067625116114001377672929333638768292095236809153349426894896869446197395671771932928211109385884940274160388152027885130001908095515987519207099973668415699818805100890690896126345099249836616348702742776559368591004254298734292430313132506862931339852599450961120591169865484036943294045257801193102728400887526383477970523720630900867795111210451854194391002244150921934506879640791680297603712618076174694948300699937409787596860516266369711284028834238022724596540529491965656156574337073988564171171562036245389632730259264953520190321920347601255396137920500496074443380910841069973360586715775083998842187392360751892748665579312212647821816086677544702037289983388842777905728540745718314922321086695691823249801139552886748181144717500999021690749662561227798159566905725946118195067702032931332172088385727012140744362147720922176656204772910422189621466379287662792372374145383317294646977085291873933547226857758530880168793511465268400187943977613894365634645591604177130794105552582447385631392788652188052953414781129655671439788151513996304231024358843023105354157338564270003904673736178109502550650713167258319522545824056524791781105181639237127875356417268878249642171688744070159985867211941494396566216365392991627962886902198712613982017603237174682825814797983967054038269833008728407345912699623004623467287738296110774212005294050799218227654983820235796069236099706911525806244933683548619651925300435846989868138976944006822652462513903624200398184640627878400159480147462063679751851193719499676402496701528971830054482832320057097082360875809145428036636600549270698504540758319126452884313155162288201445118708935758033035083555929081756050975974040793712887964439001525986626643925845343840647344753344394209812309532147589135665638895095150172324875219965305745649692175878476631167339609984047545458299489650202318886162798841051758853022389219423402386031324398337411422060786064174337895040820526914615325075313448800789763344707190242881920892579588963376086146960633381215378914452523108903834607764477580583821712879080194987840450703336371649758616364805184545636558639909806705757141231728890945705281578891764357530862478284617890886615612608017861029342475376559517893073874528735689724989147963227442563141916115837740823088920018306622898786665697436694114134566032298418513134640110497915781256013658157626876007303865007938799121914067544773285391447059337068967640221461662745594510968605338966108977317081902507941847885331172633986644666002196037962414608353479436996966565895587993028389782659415971152403029518493019029205611785920255633270560095438637318885230551138363908343081523545591224134467205438637992783829259919217744713264231649621461535887435410548366408012977973203459983761967831442350892580662433295719596302715165438994052920660204857279403439598616231631708579334309451829396365207336409446940374623441420435439989058506571776629533788131454314121504595268258657172190365178279637763408587826711292793610001999656837923788319438384372260168303662843086203813103771712423574817520332644704407707584630263836497460974781867543909787940278207946350316762434685271126547340568379697114143432270663747926423410939366867323227307888313764100323948708488249291932762190879422500980573314510481474989813161818046596342997489244092851481456635241462079248335760582513488928151459281907438730238065382341691833250917737617330046824951709287812847967496061820848573006896422220098029186444659696393722864425443174804115295661452095886127784785656396807536597522937517010395385281668735072368362229248386090765688300603292905737705424037244946746445640174635429078019229973366378415273692915764515173009646632256826278792193749314522687455317800604524740119271772480341422364037622841158408693597798800732407214231715176216414119458470398433698630492023148912788371335047944731850924533486580463894436416946298869397354691924065211837844914014837056117850937923852135361875895012428779496342389871713463333419295329258828037504468306416370691252321110783303933730724981220411655523128107813025668960480700236419568269112404054054013255954297124592253625509027169128346186086879842249233969016492009074059375814396213470661585889025858173286307393463166771278528359358679107663618852904436981159408575155381452852538538161326799566605463071606829507721627760695695298663348037499346965080571845983286426728562771057921340809114888275207834276278723670038713251819678117637307797126524335451875674322135660001938501046206646725087020563845482789165114015140237476770960542212541262365674096922377749965211055083880951870947588439313087505990968967904452943561444336754539161497904651842954423690339860136920316455021978105823558793189756025331264642326253916951167641064028719315782248353333706214902160610987866723541787809188383034860801960339654982067421224921066723519523759569071993168783868197116308035921525346492767986090665094574147296651701824963729081365854249511700896706324052098265362182297874817162325372836249682033460453106454759294279011517085352648052686287835826956331856000530656816094258663224239727567999798475939204052755892731997428948369450364798425229576414764799300949556003266863462364785971588403993047829919672884685002127952124093077144535644623315342420032186819555104280110883937594970132297831017511120535205810256141119655336117669459771376005411248881994640753601606805393583940281645304757423903447751752383876356426048210439751541893763188890403792485964646286690953432929961087972625329578244854544295899075470411907779181886987220577672224785177419791954783277253421243333498197370278143247403594312138218592254174197047846302000164735966226394070001204323764164912690541799927573761616438820835021411743898829210130296149250887986491553547221899402096605456148489590866922112294624680546281250567297009605663936998939340731539740128008013832941045470722922727419033890751091173021386847464099733717633316304536930447077599861319788266450790785072377536483225439587367122393671167950836029510856465462738804587713268436992128892171509071641161165880608224322539890931445909082786991260734902410993863449929626354001121991398640542747424891140797115509495342486678389565402504229791244504867508301342798992744796454984189142033193018659744179186808244403688375727771580862592404226696538971232713170205127941869698531179001250635892043048835137445218382957976989721755706861701366347894376710532041643279157597459032202591566808167568419301491754821992741943996185368155017334681412500723160011387595363158410560488203993638466615700276165502049790282263414502568166837301414930688269694553727263733690839349714652132206285243796184219815308355634318194592022805870387606542297381666905458451054204419608774066516116961329031388338821535694456637910702328420582124442440139995352494707284230907975581024232726130673375360163257154562557607055131368534412734263401317160921075802949888891100336188281116884460133424076740001934250575466042922149519629860344218277351996828116545149383178424384811799946144322536711027462093434842033767504492071349955677051700618860129870409856113128392373584622061075886499407885141951318807519645386474", + "k": 100000, + "expected": 7 + }, + { + "title": "Sample Test case 10", + "n": "9875", + "k": 4, + "expected": 8 + }, + { + "title": "Sample Test case 11", + "n": "123", + "k": 3, + "expected": 9 + }, + { + "title": "Sample Test case 10", + "n": "9875", + "k": 4, + "expected": 8 + } +] diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum_test.py b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum_test.py index 2329b671..95194ef2 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum_test.py +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum_test.py @@ -1,163 +1,13 @@ import unittest +from pathlib import Path + +from ....lib.loader import loadTestCases from .recursive_digit_sum import superDigit -TEST_CASES = [ - { - 'title': 'Sample Test case 0', - 'n': 123, - 'k': 3, - 'answer': 9 - }, - { - 'title': 'Sample Test case 7', - 'n': - '2365978831649490136475575038877779575813226775851820912370812124502641' - '5389479208083977035497136784946839284977124371761402825893502776534792' - '2552060281345643327741736668042619863368189118434875700729290740916035' - '3745221125354212095528784124728447770959861439390350308313917365021363' - '5417126186869429467733240031460084242056886303716567575610122247449018' - '0072691124642327218630159549099325379138610227020196599666270721530074' - '8516732223935858816466886068592299708740453558018878677753623653080545' - '5924597659980080280269825106894692137382412058024460291548334580488940' - '0264693411908262149834144522149119095545954837108383962559050522868101' - '7724678315572531551988758568150699821635779156685637531274097856486075' - '6493576107138330727352315999198482200630264297181377662867163433850596' - '9913321169918993333917484362526639850309920341612446603271145385441393' - '3737536836406105991857744766344461162222670876732729171585512468615558' - '4999797202694279227984313122704837320043925039051602334578115254284327' - '8773254379978330959353638619029551641933922264288678001268358326443642' - '7241020490358960438948951090123073035203797984302163150042110707217274' - '1024577353173671001338077820643914210121919583123966490528333962578768' - '2494342581483461531347416163824074712034236814735193107448198331841446' - '1554116111216672594256301273113776892080967125790153125125885441941114' - '1785860714061496307773232005161902082413418222852443255789534163884622' - '8472567347876691905074478626318873343857230744326770083142557511321335' - '9873223948072988922668251652320316884761627830570057061821492039968369' - '3416020813826033029659103829972411998088240913311804649501870355767782' - '0668324531600640552959717065254916335187520628056444834651025277508587' - '6212617353369513619186390565654064068546863018765466029315754619416429' - '6218870918189394743913836753377919799975199548716356926562238529813303' - '6814599634432568824763256666564526258876465082390106564666346085160283' - '3982853795901687202035893967893724362979886948663369428689585509715442' - '0196623250242945817052658080225703653516454958026868919553480845506155' - '3875080928749824126040867351774660858283312369602738035303834821878633' - '1710334697053069152326732702246704177127367642287975998486114018970510' - '8422760248551622282677677559480300297235736469088441090493742444565804' - '7492205825096426043772127838006931197245507710226616709846578884526101' - '6395772392904280411167763443571285141388567074805986331207454652671618' - '6638587010852768064860000141249004831889404844971732862849871246995150' - '3983118390238387712013678849233990331609369393883373054824717479955309' - '2402671083313285813003903363625219370039413610850308966558948057932583' - '5767714920378114604393595429026245996615886242952322526162451868449759' - '9518021888923040396808788810849421481923499200718224156284437696171143' - '8491105585390645332161544542326095869642445733823661806228697208277656' - '4263261289385461257611669603514829485391141332808109163178733604198360' - '6762511611400137767292933363876829209523680915334942689489686944619739' - '5671771932928211109385884940274160388152027885130001908095515987519207' - '0999736684156998188051008906908961263450992498366163487027427765593685' - '9100425429873429243031313250686293133985259945096112059116986548403694' - '3294045257801193102728400887526383477970523720630900867795111210451854' - '1943910022441509219345068796407916802976037126180761746949483006999374' - '0978759686051626636971128402883423802272459654052949196565615657433707' - '3988564171171562036245389632730259264953520190321920347601255396137920' - '5004960744433809108410699733605867157750839988421873923607518927486655' - '7931221264782181608667754470203728998338884277790572854074571831492232' - '1086695691823249801139552886748181144717500999021690749662561227798159' - '5669057259461181950677020329313321720883857270121407443621477209221766' - '5620477291042218962146637928766279237237414538331729464697708529187393' - '3547226857758530880168793511465268400187943977613894365634645591604177' - '1307941055525824473856313927886521880529534147811296556714397881515139' - '9630423102435884302310535415733856427000390467373617810950255065071316' - '7258319522545824056524791781105181639237127875356417268878249642171688' - '7440701599858672119414943965662163653929916279628869021987126139820176' - '0323717468282581479798396705403826983300872840734591269962300462346728' - '7738296110774212005294050799218227654983820235796069236099706911525806' - '2449336835486196519253004358469898681389769440068226524625139036242003' - '9818464062787840015948014746206367975185119371949967640249670152897183' - '0054482832320057097082360875809145428036636600549270698504540758319126' - '4528843131551622882014451187089357580330350835559290817560509759740407' - '9371288796443900152598662664392584534384064734475334439420981230953214' - '7589135665638895095150172324875219965305745649692175878476631167339609' - '9840475454582994896502023188861627988410517588530223892194234023860313' - '2439833741142206078606417433789504082052691461532507531344880078976334' - '4707190242881920892579588963376086146960633381215378914452523108903834' - '6077644775805838217128790801949878404507033363716497586163648051845456' - '3655863990980670575714123172889094570528157889176435753086247828461789' - '0886615612608017861029342475376559517893073874528735689724989147963227' - '4425631419161158377408230889200183066228987866656974366941141345660322' - '9841851313464011049791578125601365815762687600730386500793879912191406' - '7544773285391447059337068967640221461662745594510968605338966108977317' - '0819025079418478853311726339866446660021960379624146083534794369969665' - '6589558799302838978265941597115240302951849301902920561178592025563327' - '0560095438637318885230551138363908343081523545591224134467205438637992' - '7838292599192177447132642316496214615358874354105483664080129779732034' - '5998376196783144235089258066243329571959630271516543899405292066020485' - '7279403439598616231631708579334309451829396365207336409446940374623441' - '4204354399890585065717766295337881314543141215045952682586571721903651' - '7827963776340858782671129279361000199965683792378831943838437226016830' - '3662843086203813103771712423574817520332644704407707584630263836497460' - '9747818675439097879402782079463503167624346852711265473405683796971141' - '4343227066374792642341093936686732322730788831376410032394870848824929' - '1932762190879422500980573314510481474989813161818046596342997489244092' - '8514814566352414620792483357605825134889281514592819074387302380653823' - '4169183325091773761733004682495170928781284796749606182084857300689642' - '2220098029186444659696393722864425443174804115295661452095886127784785' - '6563968075365975229375170103953852816687350723683622292483860907656883' - '0060329290573770542403724494674644564017463542907801922997336637841527' - '3692915764515173009646632256826278792193749314522687455317800604524740' - '1192717724803414223640376228411584086935977988007324072142317151762164' - '1411945847039843369863049202314891278837133504794473185092453348658046' - '3894436416946298869397354691924065211837844914014837056117850937923852' - '1353618758950124287794963423898717134633334192953292588280375044683064' - '1637069125232111078330393373072498122041165552312810781302566896048070' - '0236419568269112404054054013255954297124592253625509027169128346186086' - '8798422492339690164920090740593758143962134706615858890258581732863073' - '9346316677127852835935867910766361885290443698115940857515538145285253' - '8538161326799566605463071606829507721627760695695298663348037499346965' - '0805718459832864267285627710579213408091148882752078342762787236700387' - '1325181967811763730779712652433545187567432213566000193850104620664672' - '5087020563845482789165114015140237476770960542212541262365674096922377' - '7499652110550838809518709475884393130875059909689679044529435614443367' - '5453916149790465184295442369033986013692031645502197810582355879318975' - '6025331264642326253916951167641064028719315782248353333706214902160610' - '9878667235417878091883830348608019603396549820674212249210667235195237' - '5956907199316878386819711630803592152534649276798609066509457414729665' - '1701824963729081365854249511700896706324052098265362182297874817162325' - '3728362496820334604531064547592942790115170853526480526862878358269563' - '3185600053065681609425866322423972756799979847593920405275589273199742' - '8948369450364798425229576414764799300949556003266863462364785971588403' - '9930478299196728846850021279521240930771445356446233153424200321868195' - '5510428011088393759497013229783101751112053520581025614111965533611766' - '9459771376005411248881994640753601606805393583940281645304757423903447' - '7517523838763564260482104397515418937631888904037924859646462866909534' - '3292996108797262532957824485454429589907547041190777918188698722057767' - '2224785177419791954783277253421243333498197370278143247403594312138218' - '5922541741970478463020001647359662263940700012043237641649126905417999' - '2757376161643882083502141174389882921013029614925088798649155354722189' - '9402096605456148489590866922112294624680546281250567297009605663936998' - '9393407315397401280080138329410454707229227274190338907510911730213868' - '4746409973371763331630453693044707759986131978826645079078507237753648' - '3225439587367122393671167950836029510856465462738804587713268436992128' - '8921715090716411611658806082243225398909314459090827869912607349024109' - '9386344992962635400112199139864054274742489114079711550949534248667838' - '9565402504229791244504867508301342798992744796454984189142033193018659' - '7441791868082444036883757277715808625924042266965389712327131702051279' - '4186969853117900125063589204304883513744521838295797698972175570686170' - '1366347894376710532041643279157597459032202591566808167568419301491754' - '8219927419439961853681550173346814125007231600113875953631584105604882' - '0399363846661570027616550204979028226341450256816683730141493068826969' - '4553727263733690839349714652132206285243796184219815308355634318194592' - '0228058703876065422973816669054584510542044196087740665161169613290313' - '8833882153569445663791070232842058212444244013999535249470728423090797' - '5581024232726130673375360163257154562557607055131368534412734263401317' - '1609210758029498888911003361882811168844601334240767400019342505754660' - '4292214951962986034421827735199682811654514938317842438481179994614432' - '2536711027462093434842033767504492071349955677051700618860129870409856' - '113128392373584622061075886499407885141951318807519645386474', - 'k': 100000, - 'answer': 7 - } -] +FILE_PATH = str(Path(__file__).resolve().parent) + +TEST_CASES = loadTestCases( + FILE_PATH + '/recursive_digit_sum.testcases.json') class TestRecursiveDigitSum(unittest.TestCase): @@ -167,6 +17,6 @@ def test_super_digit(self): for _, _tt in enumerate(TEST_CASES): self.assertEqual( - superDigit(_tt['n'], _tt['k']), _tt['answer'], + superDigit(_tt['n'], _tt['k']), _tt['expected'], f"{_} | superDigit({_tt['n']}, {_tt['k']}) must be " - f"=> {_tt['answer']} in {_tt['title']}") + f"=> {_tt['expected']} in {_tt['title']}") diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce_test.py b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce_test.py index 870a7fde..38736bb4 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce_test.py +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_bruteforce_test.py @@ -2,7 +2,7 @@ import os from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .ctci_ice_cream_parlor_bruteforce import whatFlavors BRUTEFORCE = os.getenv('BRUTEFORCE') @@ -10,9 +10,9 @@ FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES_SMALL_CASES = load_test_cases( +TEST_CASES_SMALL_CASES = loadTestCases( FILE_PATH + '/ctci_ice_cream_parlor.testcases.json') -TEST_CASES_BORDER_CASES = load_test_cases( +TEST_CASES_BORDER_CASES = loadTestCases( FILE_PATH + '/ctci_ice_cream_parlor.border_testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_test.py b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_test.py index 3148b9fc..226447bf 100644 --- a/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_test.py +++ b/src/hackerrank/interview_preparation_kit/search/ctci_ice_cream_parlor_test.py @@ -1,14 +1,14 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .ctci_ice_cream_parlor import whatFlavors FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases(FILE_PATH + '/ctci_ice_cream_parlor.testcases.json') -TEST_CASES_BORDER_CASES = load_test_cases( +TEST_CASES = loadTestCases(FILE_PATH + '/ctci_ice_cream_parlor.testcases.json') +TEST_CASES_BORDER_CASES = loadTestCases( FILE_PATH + '/ctci_ice_cream_parlor.border_testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_big_test.py b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_big_test.py index c948b57d..6eb14297 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_big_test.py +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_big_test.py @@ -1,11 +1,11 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .swap_nodes_algo import swapNodes, buildTree, flattenTree FILE_PATH = str(Path(__file__).resolve().parent) -BIG_TEST_CASES = load_test_cases(FILE_PATH + '/swap_nodes_algo.big.testcases.json') +BIG_TEST_CASES = loadTestCases(FILE_PATH + '/swap_nodes_algo.big.testcases.json') class TestSwapNodesAlgoBig(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_test.py b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_test.py index 2b3729a8..d78f4b67 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_test.py +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo_test.py @@ -1,11 +1,11 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .swap_nodes_algo import swapNodes, swapBranch, buildTree, flattenTree FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases(FILE_PATH + '/swap_nodes_algo.testcases.json') +TEST_CASES = loadTestCases(FILE_PATH + '/swap_nodes_algo.testcases.json') class TestSwapNodesAlgo(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort_test.py b/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort_test.py index 1a983898..0ef5d972 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort_test.py +++ b/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .ctci_bubble_sort import SortableGroup, countSwaps FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases(FILE_PATH + '/ctci_bubble_sort.testcases.json') +TEST_CASES = loadTestCases(FILE_PATH + '/ctci_bubble_sort.testcases.json') class TestBubleSort(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting_test.py b/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting_test.py index bdcc7af0..813afda0 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting_test.py +++ b/src/hackerrank/interview_preparation_kit/sorting/ctci_comparator_sorting_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .ctci_comparator_sorting import Player, SortablePlayer, comparatorSorting FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases(FILE_PATH + '/ctci_comparator_sorting.testcases.json') +TEST_CASES = loadTestCases(FILE_PATH + '/ctci_comparator_sorting.testcases.json') class TestComparatorSorting(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys_test.py b/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys_test.py index 347b9933..db581665 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys_test.py +++ b/src/hackerrank/interview_preparation_kit/sorting/mark_and_toys_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .mark_and_toys import maximumToys FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases(FILE_PATH + '/mark_and_toys.testcases.json') +TEST_CASES = loadTestCases(FILE_PATH + '/mark_and_toys.testcases.json') class TestMarkAndToys(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets_test.py b/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets_test.py index 3c435612..9e8a568a 100644 --- a/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets_test.py +++ b/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .balanced_brackets import isBalanced FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases(FILE_PATH + '/balanced_brackets.testcases.json') +TEST_CASES = loadTestCases(FILE_PATH + '/balanced_brackets.testcases.json') class TestBalancedBrackets(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters_test.py b/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters_test.py index 8eca8ad9..d4a8cbb3 100644 --- a/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters_test.py +++ b/src/hackerrank/interview_preparation_kit/string_manipulation/alternating_characters_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .alternating_characters import alternatingCharacters FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases(FILE_PATH + '/alternating_characters.testcases.json') +TEST_CASES = loadTestCases(FILE_PATH + '/alternating_characters.testcases.json') class TestAlternatingCharacters(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams_test.py b/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams_test.py index 9a74542c..b9cba35b 100644 --- a/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams_test.py +++ b/src/hackerrank/interview_preparation_kit/string_manipulation/ctci_making_anagrams_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .ctci_making_anagrams import makeAnagram FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases(FILE_PATH + '/ctci_making_anagrams.testcases.json') +TEST_CASES = loadTestCases(FILE_PATH + '/ctci_making_anagrams.testcases.json') class TestMakeAnagram(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string_test.py b/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string_test.py index b9e08400..144c9525 100644 --- a/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string_test.py +++ b/src/hackerrank/interview_preparation_kit/string_manipulation/sherlock_and_valid_string_test.py @@ -1,12 +1,12 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from .sherlock_and_valid_string import isValid FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases(FILE_PATH + '/sherlock_and_valid_string.testcases.json') +TEST_CASES = loadTestCases(FILE_PATH + '/sherlock_and_valid_string.testcases.json') class TestSherklockAndValidString(unittest.TestCase): diff --git a/src/hackerrank/interview_preparation_kit/trees/binary_search_tree_lowest_common_ancestor_test.py b/src/hackerrank/interview_preparation_kit/trees/binary_search_tree_lowest_common_ancestor_test.py index 5cade71e..2113055a 100644 --- a/src/hackerrank/interview_preparation_kit/trees/binary_search_tree_lowest_common_ancestor_test.py +++ b/src/hackerrank/interview_preparation_kit/trees/binary_search_tree_lowest_common_ancestor_test.py @@ -1,13 +1,13 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from ...lib.tree import BinarySearchTree from .binary_search_tree_lowest_common_ancestor import lca, find FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/binary_search_tree_lowest_common_ancestor.testcases.json') diff --git a/src/hackerrank/interview_preparation_kit/trees/tree_height_of_a_binary_tree_test.py b/src/hackerrank/interview_preparation_kit/trees/tree_height_of_a_binary_tree_test.py index 36f56184..eaf5de56 100644 --- a/src/hackerrank/interview_preparation_kit/trees/tree_height_of_a_binary_tree_test.py +++ b/src/hackerrank/interview_preparation_kit/trees/tree_height_of_a_binary_tree_test.py @@ -1,13 +1,13 @@ import unittest from pathlib import Path -from ....hackerrank.lib.loader import load_test_cases +from ....lib.loader import loadTestCases from ...lib.tree import BinarySearchTree from .tree_height_of_a_binary_tree import height FILE_PATH = str(Path(__file__).resolve().parent) -TEST_CASES = load_test_cases( +TEST_CASES = loadTestCases( FILE_PATH + '/tree_height_of_a_binary_tree.testcases.json') diff --git a/src/hackerrank/lib/loader.py b/src/lib/loader.py similarity index 75% rename from src/hackerrank/lib/loader.py rename to src/lib/loader.py index ac5943e4..f5356ccc 100644 --- a/src/hackerrank/lib/loader.py +++ b/src/lib/loader.py @@ -1,7 +1,7 @@ import json -def load_test_cases(filename: str): +def loadTestCases(filename: str): with open(filename, encoding="utf-8" ) as file: return json.load(file) diff --git a/src/projecteuler/problem0022_test.py b/src/projecteuler/problem0022_test.py index 0ef00166..a96065c0 100755 --- a/src/projecteuler/problem0022_test.py +++ b/src/projecteuler/problem0022_test.py @@ -1,22 +1,23 @@ import unittest -import json -import os +from pathlib import Path + +from ..lib.loader import loadTestCases from .problem0022 import problem0022 +FILE_PATH = str(Path(__file__).resolve().parent) + +NAMES = loadTestCases( + FILE_PATH + '/data/p022_names.json') + + class TestProblem0022(unittest.TestCase): def test_problem0022(self): - file_abs_path = os.path.abspath(os.path.dirname(__file__)) - - with open( - os.path.join(file_abs_path, 'data', 'p022_names.json'), - encoding="utf-8") as read_content: - names = json.load(read_content) - solution_found = 871198282 + solution_found = 871198282 - self.assertEqual( - problem0022(names), solution_found, - f"problem0022({names}) must be " - f"=> {solution_found}") + self.assertEqual( + problem0022(NAMES), solution_found, + f"problem0022({NAMES}) must be " + f"=> {solution_found}") From adc36fb1b7ccc9bbf75d8b9c6a57d67fd9410db0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 23:14:53 +0000 Subject: [PATCH 016/102] Update dependency isort to v6.0.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 61f4c5f2..9e35e005 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ dill==0.3.9 exceptiongroup==1.2.2 flake8==7.1.2 iniconfig==2.0.0 -isort==6.0.0 +isort==6.0.1 lazy-object-proxy==1.10.0 mccabe==0.7.0 nodeenv==1.9.1 From e57ce01c0d0ae71c60a7b75cfe8918ce85ef4b0f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 10:14:50 +0000 Subject: [PATCH 017/102] Update dependency pyright to v1.1.395 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 9e35e005..e655dc85 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 pylint==3.3.4 -pyright==1.1.394 +pyright==1.1.395 pytest==8.3.4 pytest-cov==6.0.0 tomli==2.2.1 From c279970faa3cccf51ab0d5eba8658a307e771327 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 2 Mar 2025 05:10:28 +0000 Subject: [PATCH 018/102] Update dependency pyright to v1.1.396 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e655dc85..2cfeaf86 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 pylint==3.3.4 -pyright==1.1.395 +pyright==1.1.396 pytest==8.3.4 pytest-cov==6.0.0 tomli==2.2.1 From 4707b0228a6a91e86134ddb4ee9267c9ca2d09f2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 2 Mar 2025 13:58:43 +0000 Subject: [PATCH 019/102] Update dependency pytest to v8.3.5 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 2cfeaf86..a1a61dce 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ pycodestyle==2.12.1 pyflakes==3.2.0 pylint==3.3.4 pyright==1.1.396 -pytest==8.3.4 +pytest==8.3.5 pytest-cov==6.0.0 tomli==2.2.1 tomlkit==0.13.2 From 2bf1d8f879d9264983f74f765be7036c8744c594 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Thu, 20 Feb 2025 23:56:08 -0300 Subject: [PATCH 020/102] [REFACTOR] [Hacker Rank] Interview Preparation Kit: Arrays: Left Rotation. New JSON data. --- .../ctci_array_left_rotation.testcases.json | 13 +++++++----- .../arrays/ctci_array_left_rotation_test.py | 20 ++++--------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.testcases.json b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.testcases.json index 1750d965..d78f6838 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.testcases.json +++ b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.testcases.json @@ -1,7 +1,10 @@ [ - {"input": [1, 2, 3, 4, 5], "expected": [2, 3, 4, 5, 1]}, - {"input": [2, 3, 4, 5, 1], "expected": [3, 4, 5, 1, 2]}, - {"input": [3, 4, 5, 1, 2], "expected": [4, 5, 1, 2, 3]}, - {"input": [4, 5, 1, 2, 3], "expected": [5, 1, 2, 3, 4]}, - {"input": [5, 1, 2, 3, 4], "expected": [1, 2, 3, 4, 5]} + {"title": "Own 0", "input": [1, 2, 3, 4, 5], "d_rotations": 1, "expected": [2, 3, 4, 5, 1]}, + {"title": "Own 1", "input": [2, 3, 4, 5, 1], "d_rotations": 1, "expected": [3, 4, 5, 1, 2]}, + {"title": "Own 2", "input": [3, 4, 5, 1, 2], "d_rotations": 1, "expected": [4, 5, 1, 2, 3]}, + {"title": "Own 3", "input": [4, 5, 1, 2, 3], "d_rotations": 1, "expected": [5, 1, 2, 3, 4]}, + {"title": "Own 4", "input": [5, 1, 2, 3, 4], "d_rotations": 1, "expected": [1, 2, 3, 4, 5]}, + {"title": "Sample Test case 0", "input": [1, 2, 3, 4, 5], "d_rotations": 4, "expected": [5, 1, 2, 3, 4]}, + {"title": "Sample Test case 1", "input": [41, 73, 89, 7, 10, 1, 59, 58, 84, 77, 77, 97, 58, 1, 86, 58, 26, 10, 86, 51], "d_rotations": 10, "expected": [77, 97, 58, 1, 86, 58, 26, 10, 86, 51, 41, 73, 89, 7, 10, 1, 59, 58, 84, 77]}, + {"title": "Sample Test case 2", "input": [33, 47, 70, 37, 8, 53, 13, 93, 71, 72, 51, 100, 60, 87, 97], "d_rotations": 13, "expected": [87, 97, 33, 47, 70, 37, 8, 53, 13, 93, 71, 72, 51, 100, 60]} ] diff --git a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py index d29a1792..4b7d6d16 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py +++ b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation_test.py @@ -2,7 +2,7 @@ from pathlib import Path from ....lib.loader import loadTestCases -from .ctci_array_left_rotation import rotLeft, rotLeftOne +from .ctci_array_left_rotation import rotLeft FILE_PATH = str(Path(__file__).resolve().parent) @@ -12,23 +12,11 @@ class TestArrayLeftRotation(unittest.TestCase): - def test_rot_left_one(self): - for _, _tt in enumerate(TEST_CASES): - - self.assertEqual( - rotLeftOne(_tt['input']), _tt['expected'], - f"{_} | rotLeftOne({_tt['input']}) must be " - f"=> {_tt['expected']}") - def test_rot_left(self): - tests = [ - {'input': [1, 2, 3, 4, 5], 'd': 4, 'expected': [5, 1, 2, 3, 4]}, - ] - - for _, _tt in enumerate(tests): + for _, _tt in enumerate(TEST_CASES): self.assertEqual( - rotLeft(_tt['input'], _tt['d']), _tt['expected'], - f"{_} | rotLeft({_tt['input']}) must be " + rotLeft(_tt['input'], _tt['d_rotations']), _tt['expected'], + f"{_} | rotLeft({_tt['input'], _tt['d_rotations']}) must be " f"=> {_tt['expected']}") From fd23cacbe23fc7e862a0ee69631bd91a937b7642 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 9 Mar 2025 09:15:49 +0000 Subject: [PATCH 021/102] Update dependency pylint to v3.3.5 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a1a61dce..c218b1e1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,7 @@ platformdirs==4.3.6 pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 -pylint==3.3.4 +pylint==3.3.5 pyright==1.1.396 pytest==8.3.5 pytest-cov==6.0.0 From 5ba69034bde5b4a77ba45aeab169a013989b2d2b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 9 Mar 2025 14:07:11 +0000 Subject: [PATCH 022/102] Update dependency astroid to v3.3.9 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a1a61dce..b807e26a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -astroid==3.3.8 +astroid==3.3.9 attrs==25.1.0 autopep8==2.3.2 coverage==7.6.12 From 06beed78e86969a680576fbb6ddc53468104cf29 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Mar 2025 11:35:37 +0000 Subject: [PATCH 023/102] Update dependency attrs to v25.2.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5e6fdb87..22f33914 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ astroid==3.3.9 -attrs==25.1.0 +attrs==25.2.0 autopep8==2.3.2 coverage==7.6.12 dill==0.3.9 From 08c8870873637236eb21d6087b96c5bcfcc63246 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Mar 2025 14:55:40 +0000 Subject: [PATCH 024/102] Update dependency attrs to v25.3.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 22f33914..0768fb2f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ astroid==3.3.9 -attrs==25.2.0 +attrs==25.3.0 autopep8==2.3.2 coverage==7.6.12 dill==0.3.9 From 3c98bb3b68965eef3308bc1e485e0698eabb7972 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 05:57:01 +0000 Subject: [PATCH 025/102] Update aquasecurity/trivy-action action to v0.30.0 --- .github/workflows/docker-image.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 2ae02e6a..5021cc75 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -179,7 +179,7 @@ jobs: docker image ls -a - name: Run Trivy vulnerability scanner (cli report) - uses: aquasecurity/trivy-action@0.29.0 + uses: aquasecurity/trivy-action@0.30.0 with: image-ref: ${{ env.IMAGE_NAME }}:${{ github.sha }} format: 'table' @@ -187,7 +187,7 @@ jobs: TRIVY_DB_REPOSITORY: ${{ vars.TRIVY_DB_REPOSITORY }} - name: Run Trivy vulnerability scanner (sarif report) - uses: aquasecurity/trivy-action@0.29.0 + uses: aquasecurity/trivy-action@0.30.0 with: image-ref: ${{ env.IMAGE_NAME }}:${{ github.sha }} format: 'sarif' From 07cc2f028c068197368d8c096a9af5c824ca52a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 09:39:16 +0000 Subject: [PATCH 026/102] Bump coverage from 7.6.12 to 7.7.0 Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.6.12 to 7.7.0. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.6.12...7.7.0) --- updated-dependencies: - dependency-name: coverage dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0768fb2f..7af88e6a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.9 attrs==25.3.0 autopep8==2.3.2 -coverage==7.6.12 +coverage==7.7.0 dill==0.3.9 exceptiongroup==1.2.2 flake8==7.1.2 From 9157cd189503300d19999376f01127ef3054ce46 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Mar 2025 11:51:23 +0000 Subject: [PATCH 027/102] Update dependency pyright to v1.1.397 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7af88e6a..6e4ceb6a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 pylint==3.3.5 -pyright==1.1.396 +pyright==1.1.397 pytest==8.3.5 pytest-cov==6.0.0 tomli==2.2.1 From 359130b1bdcbfcd6995b649a680f4019e83db9b0 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 19 Mar 2025 15:28:45 -0300 Subject: [PATCH 028/102] [REFACTOR] sonarcloud warnings (Consistency) fixed. --- src/hackerrank/certification/num_cells.py | 10 +++++----- src/hackerrank/certification/num_cells_test.py | 4 ++-- src/hackerrank/projecteuler/euler001.py | 8 ++++---- src/hackerrank/projecteuler/euler002.py | 4 ++-- src/hackerrank/projecteuler/euler003.py | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/hackerrank/certification/num_cells.py b/src/hackerrank/certification/num_cells.py index 27533255..a8168e89 100644 --- a/src/hackerrank/certification/num_cells.py +++ b/src/hackerrank/certification/num_cells.py @@ -7,16 +7,16 @@ LOGGER = logging.getLogger(__name__) -def valid_coordinate(grid: List[List[int]], i: int, j: int, k: int, m: int) -> bool: +def validCoordinate(grid: List[List[int]], i: int, j: int, k: int, m: int) -> bool: return 0 <= k < len(grid) and \ 0 <= m < len(grid[k]) and \ (k, m) != (i, j) -def all_neighbors_are_minor(grid: List[List[int]], i: int, j: int) -> bool: +def allNeighborsAreMinor(grid: List[List[int]], i: int, j: int) -> bool: for k in range(i - 1, i + 2): for m in range(j - 1, j + 2): - if valid_coordinate(grid, i, j, k, m) and \ + if validCoordinate(grid, i, j, k, m) and \ grid[k][m] >= grid[i][j]: LOGGER.debug( 'Found some major neighbor: i = %i, j = %i, grid[i][j] = %i', @@ -29,7 +29,7 @@ def all_neighbors_are_minor(grid: List[List[int]], i: int, j: int) -> bool: return False -def num_cells(grid: List[List[int]]) -> int: +def numCells(grid: List[List[int]]) -> int: dominant_counter = 0 @@ -37,7 +37,7 @@ def num_cells(grid: List[List[int]]) -> int: for j in range(0, len(grid[i])): LOGGER.debug('Checking: i = %i, j = %i, grid[i][j] = %i', i, j, grid[i][j]) - if all_neighbors_are_minor(grid, i, j) is False: + if allNeighborsAreMinor(grid, i, j) is False: LOGGER.debug('grid[%i][%i] is dominant', i, j) dominant_counter += 1 diff --git a/src/hackerrank/certification/num_cells_test.py b/src/hackerrank/certification/num_cells_test.py index 65809d19..642c9bed 100644 --- a/src/hackerrank/certification/num_cells_test.py +++ b/src/hackerrank/certification/num_cells_test.py @@ -1,5 +1,5 @@ import unittest -from .num_cells import num_cells +from .num_cells import numCells class TestNumCells(unittest.TestCase): @@ -14,6 +14,6 @@ def test_num_cells_case_0(self): solution_found = 2 self.assertEqual( - num_cells(grid), solution_found, + numCells(grid), solution_found, f"num_cells({grid}) must be " f"=> {solution_found}") diff --git a/src/hackerrank/projecteuler/euler001.py b/src/hackerrank/projecteuler/euler001.py index 8520a570..89ae3188 100644 --- a/src/hackerrank/projecteuler/euler001.py +++ b/src/hackerrank/projecteuler/euler001.py @@ -5,7 +5,7 @@ # Function to find sum of Arithmetic Progression series -def sum_of_arithmetic_progression(n: int, d: int) -> int: +def sumOfArithmeticProgression(n: int, d: int) -> int: # Number of terms n = n // d @@ -20,6 +20,6 @@ def euler001(a: int, b: int, n: int) -> int: n = n - 1 lcm = (a * b) // math.gcd(a, b) - return sum_of_arithmetic_progression(n, a) + \ - sum_of_arithmetic_progression(n, b) - \ - sum_of_arithmetic_progression(n, lcm) + return sumOfArithmeticProgression(n, a) + \ + sumOfArithmeticProgression(n, b) - \ + sumOfArithmeticProgression(n, lcm) diff --git a/src/hackerrank/projecteuler/euler002.py b/src/hackerrank/projecteuler/euler002.py index 16ccfc51..4fbb9833 100644 --- a/src/hackerrank/projecteuler/euler002.py +++ b/src/hackerrank/projecteuler/euler002.py @@ -1,7 +1,7 @@ # @link Problem definition [[docs/hackerrank/projecteuler/euler002.md]] # pylint: disable=C0103:invalid-name -def fibo_even_sum(n: int) -> int: +def fiboEvenSum(n: int) -> int: total = 0 fibo = 0 fibo1 = 1 @@ -20,4 +20,4 @@ def fibo_even_sum(n: int) -> int: def euler002(n: int) -> int: - return fibo_even_sum(n) + return fiboEvenSum(n) diff --git a/src/hackerrank/projecteuler/euler003.py b/src/hackerrank/projecteuler/euler003.py index 8f231c67..37435646 100644 --- a/src/hackerrank/projecteuler/euler003.py +++ b/src/hackerrank/projecteuler/euler003.py @@ -6,7 +6,7 @@ import math -def prime_factor(n: int) -> 'int | None': +def primeFactor(n: int) -> 'int | None': if n < 2: return None @@ -30,4 +30,4 @@ def prime_factor(n: int) -> 'int | None': def euler003(n: int) -> 'int | None': - return prime_factor(n) + return primeFactor(n) From fb75a2e923bd035e9f6deaa22479f973cc27eeae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 11:53:33 +0000 Subject: [PATCH 029/102] Update dependency pylint to v3.3.6 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6e4ceb6a..ea30c996 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,7 @@ platformdirs==4.3.6 pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 -pylint==3.3.5 +pylint==3.3.6 pyright==1.1.397 pytest==8.3.5 pytest-cov==6.0.0 From 7963524e3017377d35f0ddb7986f99125b42b49d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 21:56:37 +0000 Subject: [PATCH 030/102] Update dependency coverage to v7.7.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ea30c996..7eb95f29 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.9 attrs==25.3.0 autopep8==2.3.2 -coverage==7.7.0 +coverage==7.7.1 dill==0.3.9 exceptiongroup==1.2.2 flake8==7.1.2 From 98f7122bd8baf29df64da6de0e31f923ea933baf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 10:27:50 +0000 Subject: [PATCH 031/102] Bump platformdirs from 4.3.6 to 4.3.7 Bumps [platformdirs](https://github.com/tox-dev/platformdirs) from 4.3.6 to 4.3.7. - [Release notes](https://github.com/tox-dev/platformdirs/releases) - [Changelog](https://github.com/tox-dev/platformdirs/blob/main/CHANGES.rst) - [Commits](https://github.com/tox-dev/platformdirs/compare/4.3.6...4.3.7) --- updated-dependencies: - dependency-name: platformdirs dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7eb95f29..c1bd6f0f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,7 +11,7 @@ lazy-object-proxy==1.10.0 mccabe==0.7.0 nodeenv==1.9.1 packaging==24.2 -platformdirs==4.3.6 +platformdirs==4.3.7 pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 From d71a98c972bfa4129ed3ca099bc3a8dd0b3bf337 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 14:07:15 +0000 Subject: [PATCH 032/102] Bump iniconfig from 2.0.0 to 2.1.0 Bumps [iniconfig](https://github.com/pytest-dev/iniconfig) from 2.0.0 to 2.1.0. - [Release notes](https://github.com/pytest-dev/iniconfig/releases) - [Changelog](https://github.com/pytest-dev/iniconfig/blob/main/CHANGELOG) - [Commits](https://github.com/pytest-dev/iniconfig/compare/v2.0.0...v2.1.0) --- updated-dependencies: - dependency-name: iniconfig dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c1bd6f0f..d688f368 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ coverage==7.7.1 dill==0.3.9 exceptiongroup==1.2.2 flake8==7.1.2 -iniconfig==2.0.0 +iniconfig==2.1.0 isort==6.0.1 lazy-object-proxy==1.10.0 mccabe==0.7.0 From 61ef094aa6c43876e8d07f3274c54eccf0c81110 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Mar 2025 11:42:56 +0000 Subject: [PATCH 033/102] Update dependency pyright to v1.1.398 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d688f368..f35e9e7c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.5.0 pycodestyle==2.12.1 pyflakes==3.2.0 pylint==3.3.6 -pyright==1.1.397 +pyright==1.1.398 pytest==8.3.5 pytest-cov==6.0.0 tomli==2.2.1 From 3a32d8ae49f545cd5f7c459e5f5d83c2080e03f0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Mar 2025 15:04:15 +0000 Subject: [PATCH 034/102] Update dependency typing_extensions to v4.13.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f35e9e7c..060e6372 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,6 @@ pytest==8.3.5 pytest-cov==6.0.0 tomli==2.2.1 tomlkit==0.13.2 -typing_extensions==4.12.2 +typing_extensions==4.13.0 wrapt==1.17.2 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 2a705c47697ee5420fc85f7fdf512a5f629fd385 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 29 Mar 2025 22:56:17 +0000 Subject: [PATCH 035/102] Update dependency flake8 to v7.2.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 060e6372..3251cf1b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ autopep8==2.3.2 coverage==7.7.1 dill==0.3.9 exceptiongroup==1.2.2 -flake8==7.1.2 +flake8==7.2.0 iniconfig==2.1.0 isort==6.0.1 lazy-object-proxy==1.10.0 From d1f960383d62fb4aebf3ca7c38e0bfac778bba3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 29 Mar 2025 22:56:21 +0000 Subject: [PATCH 036/102] Update dependency pyflakes to v3.3.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 3251cf1b..df3acbfc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,7 @@ packaging==24.2 platformdirs==4.3.7 pluggy==1.5.0 pycodestyle==2.12.1 -pyflakes==3.2.0 +pyflakes==3.3.0 pylint==3.3.6 pyright==1.1.398 pytest==8.3.5 From 1e7113d82f6c97831ac377edc121ba0031385b88 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 29 Mar 2025 18:50:42 +0000 Subject: [PATCH 037/102] Update dependency pycodestyle to v2.13.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index df3acbfc..ee51ab03 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,7 +13,7 @@ nodeenv==1.9.1 packaging==24.2 platformdirs==4.3.7 pluggy==1.5.0 -pycodestyle==2.12.1 +pycodestyle==2.13.0 pyflakes==3.3.0 pylint==3.3.6 pyright==1.1.398 From 523ac0634e5a5b7d269a77d7a29f4f58c4e2533e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 30 Mar 2025 22:54:42 +0000 Subject: [PATCH 038/102] Update dependency coverage to v7.8.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ee51ab03..7490962b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.9 attrs==25.3.0 autopep8==2.3.2 -coverage==7.7.1 +coverage==7.8.0 dill==0.3.9 exceptiongroup==1.2.2 flake8==7.2.0 From 69940ba8abd6dd434dcb91823b1f9c58d53262c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 09:15:09 +0000 Subject: [PATCH 039/102] Bump pyflakes from 3.3.0 to 3.3.1 Bumps [pyflakes](https://github.com/PyCQA/pyflakes) from 3.3.0 to 3.3.1. - [Changelog](https://github.com/PyCQA/pyflakes/blob/main/NEWS.rst) - [Commits](https://github.com/PyCQA/pyflakes/compare/3.3.0...3.3.1) --- updated-dependencies: - dependency-name: pyflakes dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7490962b..372d4249 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,7 @@ packaging==24.2 platformdirs==4.3.7 pluggy==1.5.0 pycodestyle==2.13.0 -pyflakes==3.3.0 +pyflakes==3.3.1 pylint==3.3.6 pyright==1.1.398 pytest==8.3.5 From 748f0d3fee0e2ebd5d803a4459560f9979411dfe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 14:02:51 +0000 Subject: [PATCH 040/102] Update dependency pyflakes to v3.3.2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 372d4249..4b9cb0f9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,7 @@ packaging==24.2 platformdirs==4.3.7 pluggy==1.5.0 pycodestyle==2.13.0 -pyflakes==3.3.1 +pyflakes==3.3.2 pylint==3.3.6 pyright==1.1.398 pytest==8.3.5 From 15cf8584962b04f6121fd14f66289cb74d560918 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 14:00:15 +0000 Subject: [PATCH 041/102] Update dependency pytest-cov to v6.1.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4b9cb0f9..38a06d5f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyflakes==3.3.2 pylint==3.3.6 pyright==1.1.398 pytest==8.3.5 -pytest-cov==6.0.0 +pytest-cov==6.1.0 tomli==2.2.1 tomlkit==0.13.2 typing_extensions==4.13.0 From b124928bdb3e530c98412dbb6f1275c383f79559 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Apr 2025 16:29:29 +0000 Subject: [PATCH 042/102] Update dependency typing_extensions to v4.13.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 38a06d5f..458326c1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,6 @@ pytest==8.3.5 pytest-cov==6.1.0 tomli==2.2.1 tomlkit==0.13.2 -typing_extensions==4.13.0 +typing_extensions==4.13.1 wrapt==1.17.2 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From f7486ee20186d3beb2a0838d0caa6ec908b28041 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 10:22:32 +0000 Subject: [PATCH 043/102] Bump pytest-cov from 6.1.0 to 6.1.1 Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 6.1.0 to 6.1.1. - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.1.0...v6.1.1) --- updated-dependencies: - dependency-name: pytest-cov dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 458326c1..01142f9e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyflakes==3.3.2 pylint==3.3.6 pyright==1.1.398 pytest==8.3.5 -pytest-cov==6.1.0 +pytest-cov==6.1.1 tomli==2.2.1 tomlkit==0.13.2 typing_extensions==4.13.1 From a51978e42a18cdc47f3870cf2464864999339f63 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 06:02:36 +0000 Subject: [PATCH 044/102] Update python Docker tag to v3.13.3 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 37b0c251..a23e88a6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ############################################################################### -FROM python:3.13.2-alpine3.20 AS init +FROM python:3.13.3-alpine3.20 AS init ENV WORKDIR=/app WORKDIR ${WORKDIR} From f330d06014a7b1b5eb12aa99f72bea2c1c230d96 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 06:36:47 +0000 Subject: [PATCH 045/102] Update dependency pyright to v1.1.399 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 01142f9e..2cafed31 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.5.0 pycodestyle==2.13.0 pyflakes==3.3.2 pylint==3.3.6 -pyright==1.1.398 +pyright==1.1.399 pytest==8.3.5 pytest-cov==6.1.1 tomli==2.2.1 From debae363fd8f8847059f7fdd68341f1e74b12cfe Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 15:34:18 +0000 Subject: [PATCH 046/102] Update dependency typing_extensions to v4.13.2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 01142f9e..908ecde8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,6 @@ pytest==8.3.5 pytest-cov==6.1.1 tomli==2.2.1 tomlkit==0.13.2 -typing_extensions==4.13.1 +typing_extensions==4.13.2 wrapt==1.17.2 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 623d48f89882938ba68af258c9313c7e8991bf08 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 02:41:47 +0000 Subject: [PATCH 047/102] Update dependency dill to v0.4.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0dc4a08b..bd32afbc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ astroid==3.3.9 attrs==25.3.0 autopep8==2.3.2 coverage==7.8.0 -dill==0.3.9 +dill==0.4.0 exceptiongroup==1.2.2 flake8==7.2.0 iniconfig==2.1.0 From 49830b94c9072fccaef749e989b06bb3c6be7da3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 18:40:13 +0000 Subject: [PATCH 048/102] Update dependency lazy-object-proxy to v1.11.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index bd32afbc..cd4bc5b1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ exceptiongroup==1.2.2 flake8==7.2.0 iniconfig==2.1.0 isort==6.0.1 -lazy-object-proxy==1.10.0 +lazy-object-proxy==1.11.0 mccabe==0.7.0 nodeenv==1.9.1 packaging==24.2 From ad3c6cc3edadbd0592e8fa775800528a65fef7f1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 19 Apr 2025 13:48:06 +0000 Subject: [PATCH 049/102] Update dependency packaging to v25 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index cd4bc5b1..50da2646 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ isort==6.0.1 lazy-object-proxy==1.11.0 mccabe==0.7.0 nodeenv==1.9.1 -packaging==24.2 +packaging==25.0 platformdirs==4.3.7 pluggy==1.5.0 pycodestyle==2.13.0 From c3d2235eac4ff75865f175db9d8ea235c4990f5b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 24 Apr 2025 15:50:26 +0000 Subject: [PATCH 050/102] Update dependency pyright to v1.1.400 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 50da2646..f4cc9226 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.5.0 pycodestyle==2.13.0 pyflakes==3.3.2 pylint==3.3.6 -pyright==1.1.399 +pyright==1.1.400 pytest==8.3.5 pytest-cov==6.1.1 tomli==2.2.1 From bcb7e14ba43456c31b3aa3634a39000607448f70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 May 2025 09:57:23 +0000 Subject: [PATCH 051/102] Bump pylint from 3.3.6 to 3.3.7 Bumps [pylint](https://github.com/pylint-dev/pylint) from 3.3.6 to 3.3.7. - [Release notes](https://github.com/pylint-dev/pylint/releases) - [Commits](https://github.com/pylint-dev/pylint/compare/v3.3.6...v3.3.7) --- updated-dependencies: - dependency-name: pylint dependency-version: 3.3.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f4cc9226..dfe1b98c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,7 @@ platformdirs==4.3.7 pluggy==1.5.0 pycodestyle==2.13.0 pyflakes==3.3.2 -pylint==3.3.6 +pylint==3.3.7 pyright==1.1.400 pytest==8.3.5 pytest-cov==6.1.1 From f0930c46e79600737fb936bde347b4da0aa22e9f Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 7 May 2025 11:54:49 -0400 Subject: [PATCH 052/102] [Docker] Parametric base image version. --- Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a23e88a6..c6401e5a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ +ARG BASE_IMAGE=python:3.13.3-alpine3.20 + ############################################################################### -FROM python:3.13.3-alpine3.20 AS init +FROM ${BASE_IMAGE} AS init ENV WORKDIR=/app WORKDIR ${WORKDIR} From a684136fb50629dae90a4596bade6fc5c032ae14 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 May 2025 03:45:53 +0000 Subject: [PATCH 053/102] Update dependency platformdirs to v4.3.8 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index dfe1b98c..7fc7b9b9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,7 +11,7 @@ lazy-object-proxy==1.11.0 mccabe==0.7.0 nodeenv==1.9.1 packaging==25.0 -platformdirs==4.3.7 +platformdirs==4.3.8 pluggy==1.5.0 pycodestyle==2.13.0 pyflakes==3.3.2 From 74ed1dbc42a4bf27c6112331e536852a37f19654 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 10 May 2025 18:33:33 +0000 Subject: [PATCH 054/102] Update dependency astroid to v3.3.10 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 7fc7b9b9..1ab11a94 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -astroid==3.3.9 +astroid==3.3.10 attrs==25.3.0 autopep8==2.3.2 coverage==7.8.0 From 2774c342f68ac50b4e140aee6b5557519904e587 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 11 May 2025 05:29:01 +0000 Subject: [PATCH 055/102] Update dependency exceptiongroup to v1.3.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1ab11a94..ea28d63b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ attrs==25.3.0 autopep8==2.3.2 coverage==7.8.0 dill==0.4.0 -exceptiongroup==1.2.2 +exceptiongroup==1.3.0 flake8==7.2.0 iniconfig==2.1.0 isort==6.0.1 From b2470ed58f1a9af8477cbdc1415bdcf549509cbb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 16:07:55 +0000 Subject: [PATCH 056/102] Update dependency pluggy to v1.6.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ea28d63b..bbfcfc70 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ mccabe==0.7.0 nodeenv==1.9.1 packaging==25.0 platformdirs==4.3.8 -pluggy==1.5.0 +pluggy==1.6.0 pycodestyle==2.13.0 pyflakes==3.3.2 pylint==3.3.7 From 38c83ad252463aba8f966e2258641d99ab5a5526 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 19 May 2025 16:15:26 -0400 Subject: [PATCH 057/102] [CONFIG] Prettier config file (for JSON data files for unit testing). --- .prettierrc.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .prettierrc.yaml diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 00000000..ccee703b --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,7 @@ +--- +singleQuote: true +quoteProps: preserve +useTabs: false +printWidth: 80 +tabWidth: 2 +trailingComma: none From c9738ae41752087e96c150bd1c3c98d092a9ba04 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 19 May 2025 16:26:50 -0400 Subject: [PATCH 058/102] [CONFIG] Makefile now check style in JSON files. --- Makefile | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ab3720ec..55c3c86d 100644 --- a/Makefile +++ b/Makefile @@ -79,12 +79,23 @@ test/static: dependencies ${RUNTIME_TOOL} -m flake8 --verbose src/ ${RUNTIME_TOOL} -m pyright --verbose src/ -test/styling: dependencies + +test/styling/json: dependencies + prettier --check ./src/**/*.json + +test/styling/sources: dependencies ${RUNTIME_TOOL} -m pycodestyle --statistics src/ -format: +test/styling: dependencies test/styling/sources test/styling/json + +format/json: + prettier --write ./src/**/*.json + +format/sources: ${RUNTIME_TOOL} -m autopep8 --in-place --recursive --aggressive --aggressive --verbose src/ +format: format/sources format/json + build: env rsync -av --prune-empty-dirs \ --exclude '*_test.py' \ From 3fb7b5c05d08c52cd73c7ef06d20ebb41691efe1 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Tue, 20 May 2025 23:56:11 -0400 Subject: [PATCH 059/102] [CONFIG] Docker: prettier added to lint step. --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c6401e5a..5934804b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,8 @@ WORKDIR ${WORKDIR} RUN apk add --update --no-cache make nodejs npm \ && apk add --update --no-cache yamllint \ - && npm install -g --ignore-scripts markdownlint-cli + && npm install -g --ignore-scripts markdownlint-cli \ + && npm install -g --ignore-scripts markdownlint-cli prettier # [!TIP] Use a bind-mount to "/app" to override following "copys" # for lint and test against "current" sources in this stage From 46029ba3580197537800d28c616edb28502b0bac Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 19 May 2025 16:38:55 -0400 Subject: [PATCH 060/102] [CONFIG] autopep8 tool added as source code style check --- .github/workflows/python.yml | 13 ++++++++----- Makefile | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 66a43bf6..23787a95 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -3,10 +3,10 @@ name: Python CI Tests on: # yamllint disable-line rule:truthy push: - branches: ["main"] + branches: ['main'] pull_request: # The branches below must be a subset of the branches above - branches: ["main"] + branches: ['main'] workflow_dispatch: env: @@ -14,12 +14,12 @@ env: jobs: build: - name: "Run CI" + name: 'Run CI' strategy: fail-fast: false matrix: - os: ["ubuntu-24.04", "macos-14", "windows-2022"] - python: ["3.10", "3.11", "3.12"] + os: ['ubuntu-24.04', 'macos-14', 'windows-2022'] + python: ['3.10', '3.11', '3.12'] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 @@ -49,6 +49,9 @@ jobs: run: | python3 -m pycodestyle --statistics src/ + - name: Styling (autopep8) + run: | + python3 -m autopep8 --diff --recursive --exit-code --verbose . - name: Test run: > coverage run -m pytest --verbose diff --git a/Makefile b/Makefile index 55c3c86d..6dce9657 100644 --- a/Makefile +++ b/Makefile @@ -85,6 +85,7 @@ test/styling/json: dependencies test/styling/sources: dependencies ${RUNTIME_TOOL} -m pycodestyle --statistics src/ + ${RUNTIME_TOOL} -m autopep8 --diff --recursive --exit-code --verbose . test/styling: dependencies test/styling/sources test/styling/json From 9fca92674b72b9f9834c6ba0bcce7df185a2e99e Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 19 May 2025 16:28:22 -0400 Subject: [PATCH 061/102] [REFACTOR] JSON files style fixed. --- .../arrays/cruch.testcases.json | 56 +- .../ctci_array_left_rotation.testcases.json | 62 +- .../arrays/minimum_swaps_2.testcases.json | 6 +- .../arrays/new_year_chaos.testcases.json | 52 +- .../count_triplets_1.big.testcases.json | 11 +- .../sherlock_and_anagrams.testcases.json | 30 +- .../graphs/roads_and_libraries.testcases.json | 29 +- .../luck_balance.testcases.json | 9 +- .../flipping_bits.testcases.json | 11 +- .../friend_circle_queries.testcases.json | 12 +- .../ctci_fibonacci_numbers.testcases.json | 30 +- .../ctci_recursive_staircase.testcases.json | 94 +- .../recursive_digit_sum.testcases.json | 3 +- .../search/swap_nodes_algo.big.testcases.json | 522 +- .../search/swap_nodes_algo.testcases.json | 68 +- .../balanced_brackets.testcases.json | 9 +- src/projecteuler/data/p022_names.json | 5166 ++++++++++++++++- 17 files changed, 5937 insertions(+), 233 deletions(-) diff --git a/src/hackerrank/interview_preparation_kit/arrays/cruch.testcases.json b/src/hackerrank/interview_preparation_kit/arrays/cruch.testcases.json index 0ba0fd99..fa4f8a1d 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/cruch.testcases.json +++ b/src/hackerrank/interview_preparation_kit/arrays/cruch.testcases.json @@ -1,27 +1,33 @@ [ - { - "title": "Sample Test Case 0", - "n": 5, - "queries": [[1, 2, 100], - [2, 5, 100], - [3, 4, 100]], - "expected": 200 - }, - { - "title": "Sample Test Case 1", - "n": 10, - "queries": [[1, 5, 3], - [4, 8, 7], - [6, 9, 1]], - "expected": 10 - }, - { - "title": "Sample Test Case 3", - "n": 10, - "queries": [[2, 6, 8], - [3, 5, 7], - [1, 8, 1], - [5, 9, 15]], - "expected": 31 - } + { + "title": "Sample Test Case 0", + "n": 5, + "queries": [ + [1, 2, 100], + [2, 5, 100], + [3, 4, 100] + ], + "expected": 200 + }, + { + "title": "Sample Test Case 1", + "n": 10, + "queries": [ + [1, 5, 3], + [4, 8, 7], + [6, 9, 1] + ], + "expected": 10 + }, + { + "title": "Sample Test Case 3", + "n": 10, + "queries": [ + [2, 6, 8], + [3, 5, 7], + [1, 8, 1], + [5, 9, 15] + ], + "expected": 31 + } ] diff --git a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.testcases.json b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.testcases.json index d78f6838..7a411a2d 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.testcases.json +++ b/src/hackerrank/interview_preparation_kit/arrays/ctci_array_left_rotation.testcases.json @@ -1,10 +1,56 @@ [ - {"title": "Own 0", "input": [1, 2, 3, 4, 5], "d_rotations": 1, "expected": [2, 3, 4, 5, 1]}, - {"title": "Own 1", "input": [2, 3, 4, 5, 1], "d_rotations": 1, "expected": [3, 4, 5, 1, 2]}, - {"title": "Own 2", "input": [3, 4, 5, 1, 2], "d_rotations": 1, "expected": [4, 5, 1, 2, 3]}, - {"title": "Own 3", "input": [4, 5, 1, 2, 3], "d_rotations": 1, "expected": [5, 1, 2, 3, 4]}, - {"title": "Own 4", "input": [5, 1, 2, 3, 4], "d_rotations": 1, "expected": [1, 2, 3, 4, 5]}, - {"title": "Sample Test case 0", "input": [1, 2, 3, 4, 5], "d_rotations": 4, "expected": [5, 1, 2, 3, 4]}, - {"title": "Sample Test case 1", "input": [41, 73, 89, 7, 10, 1, 59, 58, 84, 77, 77, 97, 58, 1, 86, 58, 26, 10, 86, 51], "d_rotations": 10, "expected": [77, 97, 58, 1, 86, 58, 26, 10, 86, 51, 41, 73, 89, 7, 10, 1, 59, 58, 84, 77]}, - {"title": "Sample Test case 2", "input": [33, 47, 70, 37, 8, 53, 13, 93, 71, 72, 51, 100, 60, 87, 97], "d_rotations": 13, "expected": [87, 97, 33, 47, 70, 37, 8, 53, 13, 93, 71, 72, 51, 100, 60]} + { + "title": "Own 0", + "input": [1, 2, 3, 4, 5], + "d_rotations": 1, + "expected": [2, 3, 4, 5, 1] + }, + { + "title": "Own 1", + "input": [2, 3, 4, 5, 1], + "d_rotations": 1, + "expected": [3, 4, 5, 1, 2] + }, + { + "title": "Own 2", + "input": [3, 4, 5, 1, 2], + "d_rotations": 1, + "expected": [4, 5, 1, 2, 3] + }, + { + "title": "Own 3", + "input": [4, 5, 1, 2, 3], + "d_rotations": 1, + "expected": [5, 1, 2, 3, 4] + }, + { + "title": "Own 4", + "input": [5, 1, 2, 3, 4], + "d_rotations": 1, + "expected": [1, 2, 3, 4, 5] + }, + { + "title": "Sample Test case 0", + "input": [1, 2, 3, 4, 5], + "d_rotations": 4, + "expected": [5, 1, 2, 3, 4] + }, + { + "title": "Sample Test case 1", + "input": [ + 41, 73, 89, 7, 10, 1, 59, 58, 84, 77, 77, 97, 58, 1, 86, 58, 26, 10, 86, + 51 + ], + "d_rotations": 10, + "expected": [ + 77, 97, 58, 1, 86, 58, 26, 10, 86, 51, 41, 73, 89, 7, 10, 1, 59, 58, 84, + 77 + ] + }, + { + "title": "Sample Test case 2", + "input": [33, 47, 70, 37, 8, 53, 13, 93, 71, 72, 51, 100, 60, 87, 97], + "d_rotations": 13, + "expected": [87, 97, 33, 47, 70, 37, 8, 53, 13, 93, 71, 72, 51, 100, 60] + } ] diff --git a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.testcases.json b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.testcases.json index 6a814023..6a1a2f12 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.testcases.json +++ b/src/hackerrank/interview_preparation_kit/arrays/minimum_swaps_2.testcases.json @@ -1,5 +1,5 @@ [ - {"title": "Sample input 0", "input": [4, 3, 1, 2], "expected": 3}, - {"title": "Sample input 1", "input": [2, 3, 4, 1, 5], "expected": 3}, - {"title": "Sample input 2", "input": [1, 3, 5, 2, 4, 6, 7], "expected": 3} + { "title": "Sample input 0", "input": [4, 3, 1, 2], "expected": 3 }, + { "title": "Sample input 1", "input": [2, 3, 4, 1, 5], "expected": 3 }, + { "title": "Sample input 2", "input": [1, 3, 5, 2, 4, 6, 7], "expected": 3 } ] diff --git a/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos.testcases.json b/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos.testcases.json index 5527c31e..5549ce8c 100644 --- a/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos.testcases.json +++ b/src/hackerrank/interview_preparation_kit/arrays/new_year_chaos.testcases.json @@ -1,27 +1,27 @@ [ - { - "title": "Test Case 0-0", - "input": [2, 1, 5, 3, 4], - "expected": 3 - }, - { - "title": "Test Case 0-1", - "input": [2, 5, 1, 3, 4], - "expected": "Too chaotic" - }, - { - "title": "Test Case 1-1", - "input": [5, 1, 2, 3, 7, 8, 6, 4], - "expected": "Too chaotic" - }, - { - "title": "Test Case 1-2", - "input": [1, 2, 5, 3, 7, 8, 6, 4], - "expected": 7 - }, - { - "title": "Test Case 2", - "input": [1, 2, 5, 3, 4, 7, 8, 6], - "expected": 4 - } - ] + { + "title": "Test Case 0-0", + "input": [2, 1, 5, 3, 4], + "expected": 3 + }, + { + "title": "Test Case 0-1", + "input": [2, 5, 1, 3, 4], + "expected": "Too chaotic" + }, + { + "title": "Test Case 1-1", + "input": [5, 1, 2, 3, 7, 8, 6, 4], + "expected": "Too chaotic" + }, + { + "title": "Test Case 1-2", + "input": [1, 2, 5, 3, 7, 8, 6, 4], + "expected": 7 + }, + { + "title": "Test Case 2", + "input": [1, 2, 5, 3, 4, 7, 8, 6], + "expected": 4 + } +] diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1.big.testcases.json b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1.big.testcases.json index f38639cd..5aa28af9 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1.big.testcases.json +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/count_triplets_1.big.testcases.json @@ -1,11 +1,12 @@ [ { "title": "Sample Test Case 2", - "input": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + "input": [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ], "r": 1, "expected": 161700 } diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.testcases.json b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.testcases.json index f0e7c3ff..e69d0ae0 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.testcases.json +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.testcases.json @@ -38,53 +38,43 @@ "title": "Test case 3", "tests": [ { - "input": - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "input": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "expected": 166650 }, { - "input": - "bbcaadacaacbdddcdbddaddabcccdaaadcadcbddadababdaaabcccdcdaacadcababbabbdbacabbdcbbbbbddacdbbcdddbaaa", + "input": "bbcaadacaacbdddcdbddaddabcccdaaadcadcbddadababdaaabcccdcdaacadcababbabbdbacabbdcbbbbbddacdbbcdddbaaa", "expected": 4832 }, { - "input": - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "input": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "expected": 166650 }, { - "input": - "cacccbbcaaccbaacbbbcaaaababcacbbababbaacabccccaaaacbcababcbaaaaaacbacbccabcabbaaacabccbabccabbabcbba", + "input": "cacccbbcaaccbaacbbbcaaaababcacbbababbaacabccccaaaacbcababcbaaaaaacbacbccabcabbaaacabccbabccabbabcbba", "expected": 13022 }, { - "input": - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "input": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "expected": 166650 }, { - "input": - "bbcbacaabacacaaacbbcaabccacbaaaabbcaaaaaaaccaccabcacabbbbabbbbacaaccbabbccccaacccccabcabaacaabbcbaca", + "input": "bbcbacaabacacaaacbbcaabccacbaaaabbcaaaaaaaccaccabcacabbbbabbbbacaaccbabbccccaacccccabcabaacaabbcbaca", "expected": 9644 }, { - "input": - "cbaacdbaadbabbdbbaabddbdabbbccbdaccdbbdacdcabdbacbcadbbbbacbdabddcaccbbacbcadcdcabaabdbaacdccbbabbbc", + "input": "cbaacdbaadbabbdbbaabddbdabbbccbdaccdbbdacdcabdbacbcadbbbbacbdabddcaccbbacbcadcdcabaabdbaacdccbbabbbc", "expected": 6346 }, { - "input": - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "input": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "expected": 166650 }, { - "input": - "babacaccaaabaaaaaaaccaaaccaaccabcbbbabccbbabababccaabcccacccaaabaccbccccbaacbcaacbcaaaaaaabacbcbbbcc", + "input": "babacaccaaabaaaaaaaccaaaccaaccabcbbbabccbbabababccaabcccacccaaabaccbccccbaacbcaacbcaaaaaaabacbcbbbcc", "expected": 8640 }, { - "input": - "bcbabbaccacbacaacbbaccbcbccbaaaabbbcaccaacaccbabcbabccacbaabbaaaabbbcbbbbbaababacacbcaabbcbcbcabbaba", + "input": "bcbabbaccacbacaacbbaccbcbccbaaaabbbcaccaacaccbabcbabccacbaabbaaaabbbcbbbbbaababacacbcaabbcbcbcabbaba", "expected": 11577 } ] diff --git a/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries.testcases.json b/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries.testcases.json index d9d1d114..2414a1b5 100644 --- a/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries.testcases.json +++ b/src/hackerrank/interview_preparation_kit/graphs/roads_and_libraries.testcases.json @@ -4,7 +4,11 @@ "n": 3, "c_lib": 2, "c_road": 1, - "cities": [[1, 2], [3, 1], [2, 3]], + "cities": [ + [1, 2], + [3, 1], + [2, 3] + ], "expected": 4 }, { @@ -12,7 +16,14 @@ "n": 6, "c_lib": 2, "c_road": 5, - "cities": [[1, 3], [3, 4], [2, 4], [1, 2], [2, 3], [5, 6]], + "cities": [ + [1, 3], + [3, 4], + [2, 4], + [1, 2], + [2, 3], + [5, 6] + ], "expected": 12 }, { @@ -20,7 +31,12 @@ "n": 6, "c_lib": 2, "c_road": 3, - "cities": [[1, 2], [1, 3], [4, 5], [4, 6]], + "cities": [ + [1, 2], + [1, 3], + [4, 5], + [4, 6] + ], "expected": 12 }, { @@ -28,7 +44,12 @@ "n": 6, "c_lib": 2, "c_road": 3, - "cities": [[1, 2], [1, 3], [4, 5], [4, 6]], + "cities": [ + [1, 2], + [1, 3], + [4, 5], + [4, 6] + ], "expected": 12 } ] diff --git a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance.testcases.json b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance.testcases.json index 99e0243c..8d802b22 100644 --- a/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance.testcases.json +++ b/src/hackerrank/interview_preparation_kit/greedy_algorithms/luck_balance.testcases.json @@ -2,7 +2,14 @@ { "title": "Sample Test case 0", "k": 3, - "contests": [[5, 1], [2, 1], [1, 1], [8, 1], [10, 0], [5, 0]], + "contests": [ + [5, 1], + [2, 1], + [1, 1], + [8, 1], + [10, 0], + [5, 0] + ], "expected": 29 } ] diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits.testcases.json b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits.testcases.json index c62160bf..2e5d7365 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits.testcases.json +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits.testcases.json @@ -1,8 +1,7 @@ [ { "title": "Sample Test Case 0", - "tests": - [ + "tests": [ { "input": 2147483647, "answer": 2147483648 @@ -19,9 +18,7 @@ }, { "title": "Sample Test Case 1", - "tests": - [ - + "tests": [ { "input": 4, "answer": 4294967291 @@ -34,9 +31,7 @@ }, { "title": "Sample Test Case 2", - "tests": - [ - + "tests": [ { "input": 0, "answer": 4294967295 diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.testcases.json b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.testcases.json index a3c5d4a2..a1392664 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.testcases.json +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/friend_circle_queries.testcases.json @@ -1,12 +1,20 @@ [ { "title": "Sample Test case 0", - "arr": [[1, 2], [1, 3]], + "arr": [ + [1, 2], + [1, 3] + ], "answer": [2, 3] }, { "title": "Sample Test case 0", - "arr": [[1, 2], [1, 3], [1, 2], [1, 3]], + "arr": [ + [1, 2], + [1, 3], + [1, 2], + [1, 3] + ], "answer": [2, 3, 3, 3] }, { diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.testcases.json b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.testcases.json index dfa753cf..9d5ae9b3 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.testcases.json +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_fibonacci_numbers.testcases.json @@ -1,17 +1,17 @@ [ - { - "title": "Sample Test case 0", - "input": 5, - "expected": 5 - }, - { - "title": "Sample Test case 1", - "input": 12, - "expected": 144 - }, - { - "title": "Sample Test case 2", - "input": 17, - "expected": 1597 - } + { + "title": "Sample Test case 0", + "input": 5, + "expected": 5 + }, + { + "title": "Sample Test case 1", + "input": 12, + "expected": 144 + }, + { + "title": "Sample Test case 2", + "input": 17, + "expected": 1597 + } ] diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.testcases.json b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.testcases.json index 120ef099..290ab248 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.testcases.json +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/ctci_recursive_staircase.testcases.json @@ -1,49 +1,49 @@ [ - { - "title": "Sample Test case 0", - "tests": [ - { - "input": 1, - "expected": 1 - }, - { - "input": 3, - "expected": 4 - }, - { - "input": 7, - "expected": 44 - } - ] - }, - { - "title": "Sample Test case 9", - "tests": [ - { - "input": 5, - "expected": 13 - }, - { - "input": 8, - "expected": 81 - } - ] - }, - { - "title": "Sample Test case 10", - "tests": [ - { - "input": 15, - "expected": 5768 - }, - { - "input": 20, - "expected": 121415 - }, - { - "input": 27, - "expected": 8646064 - } - ] - } + { + "title": "Sample Test case 0", + "tests": [ + { + "input": 1, + "expected": 1 + }, + { + "input": 3, + "expected": 4 + }, + { + "input": 7, + "expected": 44 + } + ] + }, + { + "title": "Sample Test case 9", + "tests": [ + { + "input": 5, + "expected": 13 + }, + { + "input": 8, + "expected": 81 + } + ] + }, + { + "title": "Sample Test case 10", + "tests": [ + { + "input": 15, + "expected": 5768 + }, + { + "input": 20, + "expected": 121415 + }, + { + "input": 27, + "expected": 8646064 + } + ] + } ] diff --git a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.testcases.json b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.testcases.json index 3c15cb4e..64ad7b65 100644 --- a/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.testcases.json +++ b/src/hackerrank/interview_preparation_kit/recursion_and_backtracking/recursive_digit_sum.testcases.json @@ -7,8 +7,7 @@ }, { "title": "Sample Test case 7", - "n": - "2365978831649490136475575038877779575813226775851820912370812124502641538947920808397703549713678494683928497712437176140282589350277653479225520602813456433277417366680426198633681891184348757007292907409160353745221125354212095528784124728447770959861439390350308313917365021363541712618686942946773324003146008424205688630371656757561012224744901800726911246423272186301595490993253791386102270201965996662707215300748516732223935858816466886068592299708740453558018878677753623653080545592459765998008028026982510689469213738241205802446029154833458048894002646934119082621498341445221491190955459548371083839625590505228681017724678315572531551988758568150699821635779156685637531274097856486075649357610713833072735231599919848220063026429718137766286716343385059699133211699189933339174843625266398503099203416124466032711453854413933737536836406105991857744766344461162222670876732729171585512468615558499979720269427922798431312270483732004392503905160233457811525428432787732543799783309593536386190295516419339222642886780012683583264436427241020490358960438948951090123073035203797984302163150042110707217274102457735317367100133807782064391421012191958312396649052833396257876824943425814834615313474161638240747120342368147351931074481983318414461554116111216672594256301273113776892080967125790153125125885441941114178586071406149630777323200516190208241341822285244325578953416388462284725673478766919050744786263188733438572307443267700831425575113213359873223948072988922668251652320316884761627830570057061821492039968369341602081382603302965910382997241199808824091331180464950187035576778206683245316006405529597170652549163351875206280564448346510252775085876212617353369513619186390565654064068546863018765466029315754619416429621887091818939474391383675337791979997519954871635692656223852981330368145996344325688247632566665645262588764650823901065646663460851602833982853795901687202035893967893724362979886948663369428689585509715442019662325024294581705265808022570365351645495802686891955348084550615538750809287498241260408673517746608582833123696027380353038348218786331710334697053069152326732702246704177127367642287975998486114018970510842276024855162228267767755948030029723573646908844109049374244456580474922058250964260437721278380069311972455077102266167098465788845261016395772392904280411167763443571285141388567074805986331207454652671618663858701085276806486000014124900483188940484497173286284987124699515039831183902383877120136788492339903316093693938833730548247174799553092402671083313285813003903363625219370039413610850308966558948057932583576771492037811460439359542902624599661588624295232252616245186844975995180218889230403968087888108494214819234992007182241562844376961711438491105585390645332161544542326095869642445733823661806228697208277656426326128938546125761166960351482948539114133280810916317873360419836067625116114001377672929333638768292095236809153349426894896869446197395671771932928211109385884940274160388152027885130001908095515987519207099973668415699818805100890690896126345099249836616348702742776559368591004254298734292430313132506862931339852599450961120591169865484036943294045257801193102728400887526383477970523720630900867795111210451854194391002244150921934506879640791680297603712618076174694948300699937409787596860516266369711284028834238022724596540529491965656156574337073988564171171562036245389632730259264953520190321920347601255396137920500496074443380910841069973360586715775083998842187392360751892748665579312212647821816086677544702037289983388842777905728540745718314922321086695691823249801139552886748181144717500999021690749662561227798159566905725946118195067702032931332172088385727012140744362147720922176656204772910422189621466379287662792372374145383317294646977085291873933547226857758530880168793511465268400187943977613894365634645591604177130794105552582447385631392788652188052953414781129655671439788151513996304231024358843023105354157338564270003904673736178109502550650713167258319522545824056524791781105181639237127875356417268878249642171688744070159985867211941494396566216365392991627962886902198712613982017603237174682825814797983967054038269833008728407345912699623004623467287738296110774212005294050799218227654983820235796069236099706911525806244933683548619651925300435846989868138976944006822652462513903624200398184640627878400159480147462063679751851193719499676402496701528971830054482832320057097082360875809145428036636600549270698504540758319126452884313155162288201445118708935758033035083555929081756050975974040793712887964439001525986626643925845343840647344753344394209812309532147589135665638895095150172324875219965305745649692175878476631167339609984047545458299489650202318886162798841051758853022389219423402386031324398337411422060786064174337895040820526914615325075313448800789763344707190242881920892579588963376086146960633381215378914452523108903834607764477580583821712879080194987840450703336371649758616364805184545636558639909806705757141231728890945705281578891764357530862478284617890886615612608017861029342475376559517893073874528735689724989147963227442563141916115837740823088920018306622898786665697436694114134566032298418513134640110497915781256013658157626876007303865007938799121914067544773285391447059337068967640221461662745594510968605338966108977317081902507941847885331172633986644666002196037962414608353479436996966565895587993028389782659415971152403029518493019029205611785920255633270560095438637318885230551138363908343081523545591224134467205438637992783829259919217744713264231649621461535887435410548366408012977973203459983761967831442350892580662433295719596302715165438994052920660204857279403439598616231631708579334309451829396365207336409446940374623441420435439989058506571776629533788131454314121504595268258657172190365178279637763408587826711292793610001999656837923788319438384372260168303662843086203813103771712423574817520332644704407707584630263836497460974781867543909787940278207946350316762434685271126547340568379697114143432270663747926423410939366867323227307888313764100323948708488249291932762190879422500980573314510481474989813161818046596342997489244092851481456635241462079248335760582513488928151459281907438730238065382341691833250917737617330046824951709287812847967496061820848573006896422220098029186444659696393722864425443174804115295661452095886127784785656396807536597522937517010395385281668735072368362229248386090765688300603292905737705424037244946746445640174635429078019229973366378415273692915764515173009646632256826278792193749314522687455317800604524740119271772480341422364037622841158408693597798800732407214231715176216414119458470398433698630492023148912788371335047944731850924533486580463894436416946298869397354691924065211837844914014837056117850937923852135361875895012428779496342389871713463333419295329258828037504468306416370691252321110783303933730724981220411655523128107813025668960480700236419568269112404054054013255954297124592253625509027169128346186086879842249233969016492009074059375814396213470661585889025858173286307393463166771278528359358679107663618852904436981159408575155381452852538538161326799566605463071606829507721627760695695298663348037499346965080571845983286426728562771057921340809114888275207834276278723670038713251819678117637307797126524335451875674322135660001938501046206646725087020563845482789165114015140237476770960542212541262365674096922377749965211055083880951870947588439313087505990968967904452943561444336754539161497904651842954423690339860136920316455021978105823558793189756025331264642326253916951167641064028719315782248353333706214902160610987866723541787809188383034860801960339654982067421224921066723519523759569071993168783868197116308035921525346492767986090665094574147296651701824963729081365854249511700896706324052098265362182297874817162325372836249682033460453106454759294279011517085352648052686287835826956331856000530656816094258663224239727567999798475939204052755892731997428948369450364798425229576414764799300949556003266863462364785971588403993047829919672884685002127952124093077144535644623315342420032186819555104280110883937594970132297831017511120535205810256141119655336117669459771376005411248881994640753601606805393583940281645304757423903447751752383876356426048210439751541893763188890403792485964646286690953432929961087972625329578244854544295899075470411907779181886987220577672224785177419791954783277253421243333498197370278143247403594312138218592254174197047846302000164735966226394070001204323764164912690541799927573761616438820835021411743898829210130296149250887986491553547221899402096605456148489590866922112294624680546281250567297009605663936998939340731539740128008013832941045470722922727419033890751091173021386847464099733717633316304536930447077599861319788266450790785072377536483225439587367122393671167950836029510856465462738804587713268436992128892171509071641161165880608224322539890931445909082786991260734902410993863449929626354001121991398640542747424891140797115509495342486678389565402504229791244504867508301342798992744796454984189142033193018659744179186808244403688375727771580862592404226696538971232713170205127941869698531179001250635892043048835137445218382957976989721755706861701366347894376710532041643279157597459032202591566808167568419301491754821992741943996185368155017334681412500723160011387595363158410560488203993638466615700276165502049790282263414502568166837301414930688269694553727263733690839349714652132206285243796184219815308355634318194592022805870387606542297381666905458451054204419608774066516116961329031388338821535694456637910702328420582124442440139995352494707284230907975581024232726130673375360163257154562557607055131368534412734263401317160921075802949888891100336188281116884460133424076740001934250575466042922149519629860344218277351996828116545149383178424384811799946144322536711027462093434842033767504492071349955677051700618860129870409856113128392373584622061075886499407885141951318807519645386474", + "n": "2365978831649490136475575038877779575813226775851820912370812124502641538947920808397703549713678494683928497712437176140282589350277653479225520602813456433277417366680426198633681891184348757007292907409160353745221125354212095528784124728447770959861439390350308313917365021363541712618686942946773324003146008424205688630371656757561012224744901800726911246423272186301595490993253791386102270201965996662707215300748516732223935858816466886068592299708740453558018878677753623653080545592459765998008028026982510689469213738241205802446029154833458048894002646934119082621498341445221491190955459548371083839625590505228681017724678315572531551988758568150699821635779156685637531274097856486075649357610713833072735231599919848220063026429718137766286716343385059699133211699189933339174843625266398503099203416124466032711453854413933737536836406105991857744766344461162222670876732729171585512468615558499979720269427922798431312270483732004392503905160233457811525428432787732543799783309593536386190295516419339222642886780012683583264436427241020490358960438948951090123073035203797984302163150042110707217274102457735317367100133807782064391421012191958312396649052833396257876824943425814834615313474161638240747120342368147351931074481983318414461554116111216672594256301273113776892080967125790153125125885441941114178586071406149630777323200516190208241341822285244325578953416388462284725673478766919050744786263188733438572307443267700831425575113213359873223948072988922668251652320316884761627830570057061821492039968369341602081382603302965910382997241199808824091331180464950187035576778206683245316006405529597170652549163351875206280564448346510252775085876212617353369513619186390565654064068546863018765466029315754619416429621887091818939474391383675337791979997519954871635692656223852981330368145996344325688247632566665645262588764650823901065646663460851602833982853795901687202035893967893724362979886948663369428689585509715442019662325024294581705265808022570365351645495802686891955348084550615538750809287498241260408673517746608582833123696027380353038348218786331710334697053069152326732702246704177127367642287975998486114018970510842276024855162228267767755948030029723573646908844109049374244456580474922058250964260437721278380069311972455077102266167098465788845261016395772392904280411167763443571285141388567074805986331207454652671618663858701085276806486000014124900483188940484497173286284987124699515039831183902383877120136788492339903316093693938833730548247174799553092402671083313285813003903363625219370039413610850308966558948057932583576771492037811460439359542902624599661588624295232252616245186844975995180218889230403968087888108494214819234992007182241562844376961711438491105585390645332161544542326095869642445733823661806228697208277656426326128938546125761166960351482948539114133280810916317873360419836067625116114001377672929333638768292095236809153349426894896869446197395671771932928211109385884940274160388152027885130001908095515987519207099973668415699818805100890690896126345099249836616348702742776559368591004254298734292430313132506862931339852599450961120591169865484036943294045257801193102728400887526383477970523720630900867795111210451854194391002244150921934506879640791680297603712618076174694948300699937409787596860516266369711284028834238022724596540529491965656156574337073988564171171562036245389632730259264953520190321920347601255396137920500496074443380910841069973360586715775083998842187392360751892748665579312212647821816086677544702037289983388842777905728540745718314922321086695691823249801139552886748181144717500999021690749662561227798159566905725946118195067702032931332172088385727012140744362147720922176656204772910422189621466379287662792372374145383317294646977085291873933547226857758530880168793511465268400187943977613894365634645591604177130794105552582447385631392788652188052953414781129655671439788151513996304231024358843023105354157338564270003904673736178109502550650713167258319522545824056524791781105181639237127875356417268878249642171688744070159985867211941494396566216365392991627962886902198712613982017603237174682825814797983967054038269833008728407345912699623004623467287738296110774212005294050799218227654983820235796069236099706911525806244933683548619651925300435846989868138976944006822652462513903624200398184640627878400159480147462063679751851193719499676402496701528971830054482832320057097082360875809145428036636600549270698504540758319126452884313155162288201445118708935758033035083555929081756050975974040793712887964439001525986626643925845343840647344753344394209812309532147589135665638895095150172324875219965305745649692175878476631167339609984047545458299489650202318886162798841051758853022389219423402386031324398337411422060786064174337895040820526914615325075313448800789763344707190242881920892579588963376086146960633381215378914452523108903834607764477580583821712879080194987840450703336371649758616364805184545636558639909806705757141231728890945705281578891764357530862478284617890886615612608017861029342475376559517893073874528735689724989147963227442563141916115837740823088920018306622898786665697436694114134566032298418513134640110497915781256013658157626876007303865007938799121914067544773285391447059337068967640221461662745594510968605338966108977317081902507941847885331172633986644666002196037962414608353479436996966565895587993028389782659415971152403029518493019029205611785920255633270560095438637318885230551138363908343081523545591224134467205438637992783829259919217744713264231649621461535887435410548366408012977973203459983761967831442350892580662433295719596302715165438994052920660204857279403439598616231631708579334309451829396365207336409446940374623441420435439989058506571776629533788131454314121504595268258657172190365178279637763408587826711292793610001999656837923788319438384372260168303662843086203813103771712423574817520332644704407707584630263836497460974781867543909787940278207946350316762434685271126547340568379697114143432270663747926423410939366867323227307888313764100323948708488249291932762190879422500980573314510481474989813161818046596342997489244092851481456635241462079248335760582513488928151459281907438730238065382341691833250917737617330046824951709287812847967496061820848573006896422220098029186444659696393722864425443174804115295661452095886127784785656396807536597522937517010395385281668735072368362229248386090765688300603292905737705424037244946746445640174635429078019229973366378415273692915764515173009646632256826278792193749314522687455317800604524740119271772480341422364037622841158408693597798800732407214231715176216414119458470398433698630492023148912788371335047944731850924533486580463894436416946298869397354691924065211837844914014837056117850937923852135361875895012428779496342389871713463333419295329258828037504468306416370691252321110783303933730724981220411655523128107813025668960480700236419568269112404054054013255954297124592253625509027169128346186086879842249233969016492009074059375814396213470661585889025858173286307393463166771278528359358679107663618852904436981159408575155381452852538538161326799566605463071606829507721627760695695298663348037499346965080571845983286426728562771057921340809114888275207834276278723670038713251819678117637307797126524335451875674322135660001938501046206646725087020563845482789165114015140237476770960542212541262365674096922377749965211055083880951870947588439313087505990968967904452943561444336754539161497904651842954423690339860136920316455021978105823558793189756025331264642326253916951167641064028719315782248353333706214902160610987866723541787809188383034860801960339654982067421224921066723519523759569071993168783868197116308035921525346492767986090665094574147296651701824963729081365854249511700896706324052098265362182297874817162325372836249682033460453106454759294279011517085352648052686287835826956331856000530656816094258663224239727567999798475939204052755892731997428948369450364798425229576414764799300949556003266863462364785971588403993047829919672884685002127952124093077144535644623315342420032186819555104280110883937594970132297831017511120535205810256141119655336117669459771376005411248881994640753601606805393583940281645304757423903447751752383876356426048210439751541893763188890403792485964646286690953432929961087972625329578244854544295899075470411907779181886987220577672224785177419791954783277253421243333498197370278143247403594312138218592254174197047846302000164735966226394070001204323764164912690541799927573761616438820835021411743898829210130296149250887986491553547221899402096605456148489590866922112294624680546281250567297009605663936998939340731539740128008013832941045470722922727419033890751091173021386847464099733717633316304536930447077599861319788266450790785072377536483225439587367122393671167950836029510856465462738804587713268436992128892171509071641161165880608224322539890931445909082786991260734902410993863449929626354001121991398640542747424891140797115509495342486678389565402504229791244504867508301342798992744796454984189142033193018659744179186808244403688375727771580862592404226696538971232713170205127941869698531179001250635892043048835137445218382957976989721755706861701366347894376710532041643279157597459032202591566808167568419301491754821992741943996185368155017334681412500723160011387595363158410560488203993638466615700276165502049790282263414502568166837301414930688269694553727263733690839349714652132206285243796184219815308355634318194592022805870387606542297381666905458451054204419608774066516116961329031388338821535694456637910702328420582124442440139995352494707284230907975581024232726130673375360163257154562557607055131368534412734263401317160921075802949888891100336188281116884460133424076740001934250575466042922149519629860344218277351996828116545149383178424384811799946144322536711027462093434842033767504492071349955677051700618860129870409856113128392373584622061075886499407885141951318807519645386474", "k": 100000, "expected": 7 }, diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.testcases.json b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.testcases.json index ca1cfea6..2e87f536 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.testcases.json +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.big.testcases.json @@ -1,55 +1,481 @@ [ { "title": "Test case 4", - "nodes": [[-1, 2], [3, 4], [5, 6], [7, -1], [8, -1], [9, 10], [11, 12], [-1, 13], [14, 15], [-1, -1], [-1, 16], [17, -1], [18, 19], [20, 21], [22, 23], [-1, -1], [24, 25], [26, -1], [27, 28], [29, 30], [31, -1], [32, 33], [34, 35], [36, 37], [38, 39], [-1, 40], [-1, 41], [-1, 42], [-1, -1], [43, 44], [-1, -1], [45, 46], [47, 48], [-1, -1], [-1, 49], [-1, 50], [51, 52], [-1, 53], [54, 55], [-1, 56], [57, -1], [-1, 58], [59, -1], [60, 61], [-1, 62], [-1, 63], [-1, -1], [-1, 64], [65, -1], [66, -1], [-1, 67], [-1, -1], [-1, 68], [-1, 69], [70, -1], [71, -1], [72, 73], [74, 75], [-1, -1], [76, -1], [77, -1], [-1, -1], [78, -1], [-1, -1], [79, 80], [81, 82], [-1, 83], [84, -1], [85, -1], [86, -1], [-1, 87], [-1, -1], [-1, -1], [-1, 88], [-1, -1], [89, 90], [-1, -1], [91, -1], [-1, 92], [93, -1], [94, 95], [-1, -1], [96, 97], [98, -1], [-1, 99], [100, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1]], - "flattened": [1, 8, 26, 40, 71, 87, 56, 18, 13, 27, 72, 57, 73, 41, 19, 28, 42, 74, 88, 58, 75, 5, 3, 29, 20, 59, 43, 30, 89, 76, 90, 60, 44, 77, 61, 14, 31, 21, 9, 45, 62, 32, 46, 91, 78, 63, 22, 47, 33, 48, 64, 15, 34, 23, 35, 79, 92, 65, 93, 80, 49, 6, 10, 2, 11, 16, 7, 36, 94, 81, 95, 66, 82, 50, 24, 51, 67, 96, 83, 97, 37, 52, 17, 38, 53, 98, 84, 68, 25, 54, 85, 99, 69, 39, 100, 86, 70, 55, 12, 4], - "queries": [8, 6, 2, 3, 5, 7, 7, 5, 7, 1, 5, 6, 2, 8, 4, 6, 8, 12, 10, 6, 12, 11, 12, 8, 1, 7, 9, 3, 8, 7, 2, 7, 8, 3, 8, 9, 7, 9, 9, 8, 11, 10, 4, 12, 4], + "nodes": [ + [-1, 2], + [3, 4], + [5, 6], + [7, -1], + [8, -1], + [9, 10], + [11, 12], + [-1, 13], + [14, 15], + [-1, -1], + [-1, 16], + [17, -1], + [18, 19], + [20, 21], + [22, 23], + [-1, -1], + [24, 25], + [26, -1], + [27, 28], + [29, 30], + [31, -1], + [32, 33], + [34, 35], + [36, 37], + [38, 39], + [-1, 40], + [-1, 41], + [-1, 42], + [-1, -1], + [43, 44], + [-1, -1], + [45, 46], + [47, 48], + [-1, -1], + [-1, 49], + [-1, 50], + [51, 52], + [-1, 53], + [54, 55], + [-1, 56], + [57, -1], + [-1, 58], + [59, -1], + [60, 61], + [-1, 62], + [-1, 63], + [-1, -1], + [-1, 64], + [65, -1], + [66, -1], + [-1, 67], + [-1, -1], + [-1, 68], + [-1, 69], + [70, -1], + [71, -1], + [72, 73], + [74, 75], + [-1, -1], + [76, -1], + [77, -1], + [-1, -1], + [78, -1], + [-1, -1], + [79, 80], + [81, 82], + [-1, 83], + [84, -1], + [85, -1], + [86, -1], + [-1, 87], + [-1, -1], + [-1, -1], + [-1, 88], + [-1, -1], + [89, 90], + [-1, -1], + [91, -1], + [-1, 92], + [93, -1], + [94, 95], + [-1, -1], + [96, 97], + [98, -1], + [-1, 99], + [100, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1] + ], + "flattened": [ + 1, 8, 26, 40, 71, 87, 56, 18, 13, 27, 72, 57, 73, 41, 19, 28, 42, 74, 88, + 58, 75, 5, 3, 29, 20, 59, 43, 30, 89, 76, 90, 60, 44, 77, 61, 14, 31, 21, + 9, 45, 62, 32, 46, 91, 78, 63, 22, 47, 33, 48, 64, 15, 34, 23, 35, 79, 92, + 65, 93, 80, 49, 6, 10, 2, 11, 16, 7, 36, 94, 81, 95, 66, 82, 50, 24, 51, + 67, 96, 83, 97, 37, 52, 17, 38, 53, 98, 84, 68, 25, 54, 85, 99, 69, 39, + 100, 86, 70, 55, 12, 4 + ], + "queries": [ + 8, 6, 2, 3, 5, 7, 7, 5, 7, 1, 5, 6, 2, 8, 4, 6, 8, 12, 10, 6, 12, 11, 12, + 8, 1, 7, 9, 3, 8, 7, 2, 7, 8, 3, 8, 9, 7, 9, 9, 8, 11, 10, 4, 12, 4 + ], "expected": [ - [1, 8, 40, 71, 87, 56, 26, 18, 13, 72, 57, 73, 41, 27, 19, 42, 74, 88, 58, 75, 28, 5, 3, 29, 20, 89, 76, 90, 60, 44, 77, 61, 30, 59, 43, 14, 31, 21, 9, 46, 91, 78, 63, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 79, 92, 65, 93, 80, 49, 35, 6, 10, 2, 11, 16, 7, 94, 81, 95, 66, 82, 50, 36, 24, 52, 37, 51, 67, 96, 83, 97, 17, 53, 98, 84, 68, 38, 25, 100, 86, 70, 55, 39, 54, 85, 99, 69, 12, 4], - [1, 8, 72, 57, 73, 41, 27, 19, 42, 74, 88, 58, 75, 28, 13, 40, 71, 87, 56, 26, 18, 5, 3, 31, 21, 14, 29, 20, 89, 76, 90, 60, 44, 77, 61, 30, 59, 43, 9, 34, 23, 79, 92, 65, 93, 80, 49, 35, 15, 46, 91, 78, 63, 32, 45, 62, 22, 48, 64, 33, 47, 6, 10, 2, 11, 16, 7, 53, 98, 84, 68, 38, 25, 100, 86, 70, 55, 39, 54, 85, 99, 69, 17, 94, 81, 95, 66, 82, 50, 36, 24, 52, 37, 51, 67, 96, 83, 97, 12, 4], - [1, 36, 82, 66, 94, 81, 95, 50, 24, 51, 96, 83, 97, 67, 37, 52, 17, 38, 53, 68, 98, 84, 25, 54, 69, 85, 99, 39, 70, 100, 86, 55, 12, 7, 11, 16, 4, 2, 5, 8, 26, 40, 56, 71, 87, 18, 13, 27, 73, 57, 72, 41, 19, 28, 42, 75, 58, 74, 88, 3, 10, 6, 29, 20, 59, 43, 30, 60, 89, 76, 90, 44, 61, 77, 14, 31, 21, 9, 45, 62, 32, 46, 63, 91, 78, 22, 47, 33, 48, 64, 15, 34, 23, 35, 93, 80, 65, 79, 92, 49], - [1, 4, 38, 68, 98, 84, 53, 25, 69, 85, 99, 54, 39, 55, 70, 100, 86, 17, 36, 50, 82, 66, 94, 81, 95, 24, 96, 83, 97, 67, 51, 37, 52, 12, 7, 11, 16, 2, 10, 6, 31, 21, 14, 29, 20, 43, 59, 30, 61, 77, 44, 60, 89, 76, 90, 9, 34, 23, 35, 49, 93, 80, 65, 79, 92, 15, 62, 45, 32, 63, 91, 78, 46, 22, 47, 33, 64, 48, 3, 5, 8, 27, 41, 73, 57, 72, 19, 28, 75, 58, 74, 88, 42, 13, 26, 56, 71, 87, 40, 18], - [1, 4, 12, 38, 98, 84, 68, 53, 25, 85, 99, 69, 54, 39, 55, 100, 86, 70, 17, 36, 50, 94, 81, 95, 66, 82, 24, 67, 96, 83, 97, 51, 37, 52, 7, 16, 11, 2, 10, 6, 34, 23, 35, 49, 79, 92, 65, 93, 80, 15, 62, 45, 32, 91, 78, 63, 46, 22, 47, 33, 64, 48, 9, 31, 21, 14, 29, 20, 43, 59, 30, 77, 61, 44, 89, 76, 90, 60, 3, 5, 27, 41, 72, 57, 73, 19, 28, 74, 88, 58, 75, 42, 13, 26, 71, 87, 56, 40, 18, 8], - [1, 4, 12, 85, 99, 69, 54, 39, 55, 100, 86, 70, 25, 38, 98, 84, 68, 53, 17, 67, 96, 83, 97, 51, 37, 52, 24, 36, 50, 94, 81, 95, 66, 82, 7, 16, 11, 2, 10, 6, 35, 49, 79, 92, 65, 93, 80, 23, 34, 15, 47, 33, 64, 48, 22, 62, 45, 32, 91, 78, 63, 46, 9, 21, 31, 14, 43, 59, 30, 77, 61, 44, 89, 76, 90, 60, 20, 29, 3, 5, 28, 74, 88, 58, 75, 42, 19, 27, 41, 72, 57, 73, 13, 18, 26, 71, 87, 56, 40, 8], - [1, 4, 12, 38, 98, 84, 68, 53, 25, 85, 99, 69, 54, 39, 55, 100, 86, 70, 17, 36, 50, 94, 81, 95, 66, 82, 24, 67, 96, 83, 97, 51, 37, 52, 7, 16, 11, 2, 10, 6, 34, 23, 35, 49, 79, 92, 65, 93, 80, 15, 62, 45, 32, 91, 78, 63, 46, 22, 47, 33, 64, 48, 9, 31, 21, 14, 29, 20, 43, 59, 30, 77, 61, 44, 89, 76, 90, 60, 3, 5, 27, 41, 72, 57, 73, 19, 28, 74, 88, 58, 75, 42, 13, 26, 71, 87, 56, 40, 18, 8], - [1, 4, 38, 68, 98, 84, 53, 25, 69, 85, 99, 54, 39, 55, 70, 100, 86, 17, 36, 50, 82, 66, 94, 81, 95, 24, 96, 83, 97, 67, 51, 37, 52, 12, 7, 11, 16, 2, 10, 6, 31, 21, 14, 29, 20, 43, 59, 30, 61, 77, 44, 60, 89, 76, 90, 9, 34, 23, 35, 49, 93, 80, 65, 79, 92, 15, 62, 45, 32, 63, 91, 78, 46, 22, 47, 33, 64, 48, 3, 5, 8, 27, 41, 73, 57, 72, 19, 28, 75, 58, 74, 88, 42, 13, 26, 56, 71, 87, 40, 18], - [1, 4, 69, 85, 99, 54, 39, 55, 70, 100, 86, 25, 38, 68, 98, 84, 53, 17, 96, 83, 97, 67, 51, 37, 52, 24, 36, 50, 82, 66, 94, 81, 95, 12, 7, 11, 16, 2, 10, 6, 21, 31, 14, 43, 59, 30, 61, 77, 44, 60, 89, 76, 90, 20, 29, 9, 35, 49, 93, 80, 65, 79, 92, 23, 34, 15, 47, 33, 64, 48, 22, 62, 45, 32, 63, 91, 78, 46, 3, 5, 8, 28, 75, 58, 74, 88, 42, 19, 27, 41, 73, 57, 72, 13, 18, 26, 56, 71, 87, 40], - [40, 87, 71, 56, 26, 18, 13, 72, 57, 73, 41, 27, 19, 42, 88, 74, 58, 75, 28, 8, 5, 3, 46, 78, 91, 63, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 92, 79, 65, 80, 93, 49, 35, 9, 29, 20, 90, 76, 89, 60, 44, 77, 61, 30, 59, 43, 14, 31, 21, 6, 10, 2, 16, 11, 7, 12, 95, 81, 94, 66, 82, 50, 36, 24, 52, 37, 51, 67, 97, 83, 96, 17, 53, 84, 98, 68, 38, 25, 86, 100, 70, 55, 39, 54, 99, 85, 69, 4, 1], - [8, 40, 56, 87, 71, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, 88, 74, 28, 5, 3, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 14, 31, 21, 9, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 80, 93, 65, 92, 79, 49, 35, 6, 10, 2, 11, 16, 7, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, 96, 67, 17, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, 12, 4, 1], - [8, 73, 57, 72, 41, 27, 19, 42, 75, 58, 88, 74, 28, 13, 40, 56, 87, 71, 26, 18, 5, 3, 31, 21, 14, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 9, 34, 23, 80, 93, 65, 92, 79, 49, 35, 15, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 6, 10, 2, 11, 16, 7, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, 17, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, 96, 67, 12, 4, 1], - [36, 95, 81, 94, 66, 82, 50, 24, 51, 67, 97, 83, 96, 37, 52, 17, 38, 53, 84, 98, 68, 25, 54, 99, 85, 69, 39, 86, 100, 70, 55, 12, 7, 11, 16, 4, 2, 5, 8, 26, 40, 87, 71, 56, 18, 13, 27, 72, 57, 73, 41, 19, 28, 42, 88, 74, 58, 75, 3, 10, 6, 29, 20, 59, 43, 30, 90, 76, 89, 60, 44, 77, 61, 14, 31, 21, 9, 45, 62, 32, 46, 78, 91, 63, 22, 47, 33, 48, 64, 15, 34, 23, 35, 92, 79, 65, 80, 93, 49, 1], - [95, 81, 94, 66, 82, 50, 36, 24, 52, 37, 51, 67, 97, 83, 96, 17, 53, 84, 98, 68, 38, 25, 86, 100, 70, 55, 39, 54, 99, 85, 69, 12, 7, 11, 16, 4, 2, 5, 8, 40, 87, 71, 56, 26, 18, 13, 72, 57, 73, 41, 27, 19, 42, 88, 74, 58, 75, 28, 3, 10, 6, 29, 20, 90, 76, 89, 60, 44, 77, 61, 30, 59, 43, 14, 31, 21, 9, 46, 78, 91, 63, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 92, 79, 65, 80, 93, 49, 35, 1], - [11, 16, 7, 36, 95, 81, 94, 66, 82, 50, 24, 51, 67, 97, 83, 96, 37, 52, 17, 38, 53, 84, 98, 68, 25, 54, 99, 85, 69, 39, 86, 100, 70, 55, 12, 4, 2, 8, 26, 40, 87, 71, 56, 18, 13, 27, 72, 57, 73, 41, 19, 28, 42, 88, 74, 58, 75, 5, 3, 29, 20, 59, 43, 30, 90, 76, 89, 60, 44, 77, 61, 14, 31, 21, 9, 45, 62, 32, 46, 78, 91, 63, 22, 47, 33, 48, 64, 15, 34, 23, 35, 92, 79, 65, 80, 93, 49, 6, 10, 1], - [11, 16, 7, 38, 53, 84, 98, 68, 25, 54, 99, 85, 69, 39, 86, 100, 70, 55, 17, 36, 95, 81, 94, 66, 82, 50, 24, 51, 67, 97, 83, 96, 37, 52, 12, 4, 2, 8, 27, 72, 57, 73, 41, 19, 28, 42, 88, 74, 58, 75, 13, 26, 40, 87, 71, 56, 18, 5, 3, 31, 21, 14, 29, 20, 59, 43, 30, 90, 76, 89, 60, 44, 77, 61, 9, 34, 23, 35, 92, 79, 65, 80, 93, 49, 15, 45, 62, 32, 46, 78, 91, 63, 22, 47, 33, 48, 64, 6, 10, 1], - [11, 16, 7, 53, 84, 98, 68, 38, 25, 86, 100, 70, 55, 39, 54, 99, 85, 69, 17, 95, 81, 94, 66, 82, 50, 36, 24, 52, 37, 51, 67, 97, 83, 96, 12, 4, 2, 8, 72, 57, 73, 41, 27, 19, 42, 88, 74, 58, 75, 28, 13, 40, 87, 71, 56, 26, 18, 5, 3, 31, 21, 14, 29, 20, 90, 76, 89, 60, 44, 77, 61, 30, 59, 43, 9, 34, 23, 92, 79, 65, 80, 93, 49, 35, 15, 46, 78, 91, 63, 32, 45, 62, 22, 48, 64, 33, 47, 6, 10, 1], - [11, 16, 7, 53, 84, 98, 68, 38, 25, 86, 100, 70, 55, 39, 54, 99, 85, 69, 17, 95, 81, 94, 66, 82, 50, 36, 24, 52, 37, 51, 67, 97, 83, 96, 12, 4, 2, 8, 72, 57, 73, 41, 27, 19, 42, 88, 74, 58, 75, 28, 13, 40, 87, 71, 56, 26, 18, 5, 3, 31, 21, 14, 29, 20, 90, 76, 89, 60, 44, 77, 61, 30, 59, 43, 9, 34, 23, 92, 79, 65, 80, 93, 49, 35, 15, 46, 78, 91, 63, 32, 45, 62, 22, 48, 64, 33, 47, 6, 10, 1], - [11, 16, 7, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, 17, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, 96, 67, 12, 4, 2, 8, 73, 57, 72, 41, 27, 19, 42, 75, 58, 88, 74, 28, 13, 40, 56, 87, 71, 26, 18, 5, 3, 31, 21, 14, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 9, 34, 23, 80, 93, 65, 92, 79, 49, 35, 15, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 6, 10, 1], - [11, 16, 7, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, 96, 67, 17, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, 12, 4, 2, 8, 40, 56, 87, 71, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, 88, 74, 28, 5, 3, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 14, 31, 21, 9, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 80, 93, 65, 92, 79, 49, 35, 6, 10, 1], - [11, 16, 7, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, 96, 67, 17, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, 12, 4, 2, 8, 40, 56, 87, 71, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, 88, 74, 28, 5, 3, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 14, 31, 21, 9, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 80, 93, 65, 92, 79, 49, 35, 6, 10, 1], - [11, 16, 7, 82, 66, 94, 81, 95, 50, 36, 24, 52, 37, 51, 96, 83, 97, 67, 17, 53, 68, 98, 84, 38, 25, 70, 100, 86, 55, 39, 54, 69, 85, 99, 12, 4, 2, 8, 40, 56, 71, 87, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, 74, 88, 28, 5, 3, 29, 20, 60, 89, 76, 90, 44, 61, 77, 30, 59, 43, 14, 31, 21, 9, 46, 63, 91, 78, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 93, 80, 65, 79, 92, 49, 35, 6, 10, 1], - [11, 16, 7, 82, 66, 94, 81, 95, 50, 36, 24, 52, 37, 51, 96, 83, 97, 67, 17, 53, 68, 98, 84, 38, 25, 70, 100, 86, 55, 39, 54, 69, 85, 99, 12, 4, 2, 8, 40, 56, 71, 87, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, 74, 88, 28, 5, 3, 29, 20, 60, 89, 76, 90, 44, 61, 77, 30, 59, 43, 14, 31, 21, 9, 46, 63, 91, 78, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 93, 80, 65, 79, 92, 49, 35, 6, 10, 1], - [11, 16, 7, 36, 82, 66, 94, 81, 95, 50, 24, 51, 96, 83, 97, 67, 37, 52, 17, 38, 53, 68, 98, 84, 25, 54, 69, 85, 99, 39, 70, 100, 86, 55, 12, 4, 2, 8, 26, 40, 56, 71, 87, 18, 13, 27, 73, 57, 72, 41, 19, 28, 42, 75, 58, 74, 88, 5, 3, 29, 20, 59, 43, 30, 60, 89, 76, 90, 44, 61, 77, 14, 31, 21, 9, 45, 62, 32, 46, 63, 91, 78, 22, 47, 33, 48, 64, 15, 34, 23, 35, 93, 80, 65, 79, 92, 49, 6, 10, 1], - [1, 10, 6, 49, 92, 79, 65, 80, 93, 35, 23, 34, 15, 64, 48, 33, 47, 22, 78, 91, 63, 46, 32, 62, 45, 9, 21, 31, 14, 77, 61, 44, 90, 76, 89, 60, 30, 43, 59, 20, 29, 3, 5, 88, 74, 58, 75, 42, 28, 19, 41, 72, 57, 73, 27, 13, 18, 87, 71, 56, 40, 26, 8, 2, 4, 12, 55, 86, 100, 70, 39, 99, 85, 69, 54, 25, 84, 98, 68, 53, 38, 17, 52, 37, 67, 97, 83, 96, 51, 24, 50, 95, 81, 94, 66, 82, 36, 7, 16, 11], - [1, 10, 6, 34, 23, 49, 92, 79, 65, 80, 93, 35, 15, 78, 91, 63, 46, 32, 62, 45, 22, 64, 48, 33, 47, 9, 31, 21, 14, 29, 20, 77, 61, 44, 90, 76, 89, 60, 30, 43, 59, 3, 5, 41, 72, 57, 73, 27, 19, 88, 74, 58, 75, 42, 28, 13, 87, 71, 56, 40, 26, 18, 8, 2, 4, 12, 84, 98, 68, 53, 38, 25, 55, 86, 100, 70, 39, 99, 85, 69, 54, 17, 50, 95, 81, 94, 66, 82, 36, 24, 52, 37, 67, 97, 83, 96, 51, 7, 16, 11], - [1, 10, 6, 34, 23, 92, 79, 65, 80, 93, 49, 35, 15, 46, 78, 91, 63, 32, 45, 62, 22, 48, 64, 33, 47, 9, 31, 21, 14, 29, 20, 90, 76, 89, 60, 44, 77, 61, 30, 59, 43, 3, 5, 72, 57, 73, 41, 27, 19, 42, 88, 74, 58, 75, 28, 13, 40, 87, 71, 56, 26, 18, 8, 2, 4, 12, 53, 84, 98, 68, 38, 25, 86, 100, 70, 55, 39, 54, 99, 85, 69, 17, 95, 81, 94, 66, 82, 50, 36, 24, 52, 37, 51, 67, 97, 83, 96, 7, 16, 11], - [1, 5, 87, 71, 56, 40, 26, 18, 13, 41, 72, 57, 73, 27, 19, 88, 74, 58, 75, 42, 28, 8, 3, 10, 6, 78, 91, 63, 46, 32, 62, 45, 22, 64, 48, 33, 47, 15, 34, 23, 49, 92, 79, 65, 80, 93, 35, 9, 29, 20, 77, 61, 44, 90, 76, 89, 60, 30, 43, 59, 14, 31, 21, 2, 12, 50, 95, 81, 94, 66, 82, 36, 24, 52, 37, 67, 97, 83, 96, 51, 17, 84, 98, 68, 53, 38, 25, 55, 86, 100, 70, 39, 99, 85, 69, 54, 7, 16, 11, 4], - [1, 5, 26, 87, 71, 56, 40, 18, 13, 27, 41, 72, 57, 73, 19, 28, 88, 74, 58, 75, 42, 8, 3, 10, 6, 62, 45, 32, 78, 91, 63, 46, 22, 47, 33, 64, 48, 15, 34, 23, 35, 49, 92, 79, 65, 80, 93, 9, 29, 20, 43, 59, 30, 77, 61, 44, 90, 76, 89, 60, 14, 31, 21, 2, 12, 36, 50, 95, 81, 94, 66, 82, 24, 67, 97, 83, 96, 51, 37, 52, 17, 38, 84, 98, 68, 53, 25, 99, 85, 69, 54, 39, 55, 86, 100, 70, 7, 16, 11, 4], - [1, 5, 18, 26, 87, 71, 56, 40, 13, 28, 88, 74, 58, 75, 42, 19, 27, 41, 72, 57, 73, 8, 3, 10, 6, 47, 33, 64, 48, 22, 62, 45, 32, 78, 91, 63, 46, 15, 35, 49, 92, 79, 65, 80, 93, 23, 34, 9, 43, 59, 30, 77, 61, 44, 90, 76, 89, 60, 20, 29, 14, 21, 31, 2, 12, 67, 97, 83, 96, 51, 37, 52, 24, 36, 50, 95, 81, 94, 66, 82, 17, 99, 85, 69, 54, 39, 55, 86, 100, 70, 25, 38, 84, 98, 68, 53, 7, 16, 11, 4], - [1, 16, 11, 7, 12, 55, 70, 86, 100, 39, 69, 99, 85, 54, 25, 68, 84, 98, 53, 38, 17, 52, 37, 97, 83, 96, 67, 51, 24, 50, 82, 66, 95, 81, 94, 36, 4, 2, 75, 58, 88, 74, 42, 28, 19, 41, 73, 57, 72, 27, 13, 18, 56, 87, 71, 40, 26, 8, 5, 3, 49, 80, 93, 65, 92, 79, 35, 23, 34, 15, 64, 48, 33, 47, 22, 63, 78, 91, 46, 32, 62, 45, 9, 21, 31, 14, 61, 77, 44, 60, 90, 76, 89, 30, 43, 59, 20, 29, 6, 10], - [1, 16, 11, 7, 12, 68, 84, 98, 53, 38, 25, 55, 70, 86, 100, 39, 69, 99, 85, 54, 17, 50, 82, 66, 95, 81, 94, 36, 24, 52, 37, 97, 83, 96, 67, 51, 4, 2, 41, 73, 57, 72, 27, 19, 75, 58, 88, 74, 42, 28, 13, 56, 87, 71, 40, 26, 18, 8, 5, 3, 34, 23, 49, 80, 93, 65, 92, 79, 35, 15, 63, 78, 91, 46, 32, 62, 45, 22, 64, 48, 33, 47, 9, 31, 21, 14, 29, 20, 61, 77, 44, 60, 90, 76, 89, 30, 43, 59, 6, 10], - [1, 16, 11, 7, 12, 38, 68, 84, 98, 53, 25, 69, 99, 85, 54, 39, 55, 70, 86, 100, 17, 36, 50, 82, 66, 95, 81, 94, 24, 97, 83, 96, 67, 51, 37, 52, 4, 2, 27, 41, 73, 57, 72, 19, 28, 75, 58, 88, 74, 42, 13, 26, 56, 87, 71, 40, 18, 8, 5, 3, 34, 23, 35, 49, 80, 93, 65, 92, 79, 15, 62, 45, 32, 63, 78, 91, 46, 22, 47, 33, 64, 48, 9, 31, 21, 14, 29, 20, 43, 59, 30, 61, 77, 44, 60, 90, 76, 89, 6, 10], - [1, 4, 16, 11, 7, 12, 36, 82, 66, 95, 81, 94, 50, 24, 51, 97, 83, 96, 67, 37, 52, 17, 38, 53, 68, 84, 98, 25, 54, 69, 99, 85, 39, 70, 86, 100, 55, 2, 45, 62, 32, 46, 63, 78, 91, 22, 47, 33, 48, 64, 15, 34, 23, 35, 80, 93, 65, 92, 79, 49, 9, 29, 20, 59, 43, 30, 60, 90, 76, 89, 44, 61, 77, 14, 31, 21, 6, 10, 3, 26, 40, 56, 87, 71, 18, 13, 27, 73, 57, 72, 41, 19, 28, 42, 75, 58, 88, 74, 8, 5], - [1, 4, 16, 11, 7, 12, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, 96, 67, 17, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, 2, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 80, 93, 65, 92, 79, 49, 35, 9, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 14, 31, 21, 6, 10, 3, 40, 56, 87, 71, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, 88, 74, 28, 8, 5], - [1, 4, 16, 11, 7, 12, 50, 82, 66, 95, 81, 94, 36, 24, 52, 37, 97, 83, 96, 67, 51, 17, 68, 84, 98, 53, 38, 25, 55, 70, 86, 100, 39, 69, 99, 85, 54, 2, 63, 78, 91, 46, 32, 62, 45, 22, 64, 48, 33, 47, 15, 34, 23, 49, 80, 93, 65, 92, 79, 35, 9, 29, 20, 61, 77, 44, 60, 90, 76, 89, 30, 43, 59, 14, 31, 21, 6, 10, 3, 56, 87, 71, 40, 26, 18, 13, 41, 73, 57, 72, 27, 19, 75, 58, 88, 74, 42, 28, 8, 5], - [1, 4, 16, 11, 7, 12, 52, 37, 97, 83, 96, 67, 51, 24, 50, 82, 66, 95, 81, 94, 36, 17, 55, 70, 86, 100, 39, 69, 99, 85, 54, 25, 68, 84, 98, 53, 38, 2, 64, 48, 33, 47, 22, 63, 78, 91, 46, 32, 62, 45, 15, 49, 80, 93, 65, 92, 79, 35, 23, 34, 9, 61, 77, 44, 60, 90, 76, 89, 30, 43, 59, 20, 29, 14, 21, 31, 6, 10, 3, 18, 56, 87, 71, 40, 26, 13, 75, 58, 88, 74, 42, 28, 19, 41, 73, 57, 72, 27, 8, 5], - [1, 4, 16, 11, 7, 12, 52, 37, 51, 97, 83, 96, 67, 24, 82, 66, 95, 81, 94, 50, 36, 17, 70, 86, 100, 55, 39, 54, 69, 99, 85, 25, 53, 68, 84, 98, 38, 2, 48, 64, 33, 47, 22, 46, 63, 78, 91, 32, 45, 62, 15, 80, 93, 65, 92, 79, 49, 35, 23, 34, 9, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 20, 29, 14, 21, 31, 6, 10, 3, 18, 40, 56, 87, 71, 26, 13, 42, 75, 58, 88, 74, 28, 19, 73, 57, 72, 41, 27, 8, 5], - [1, 4, 16, 11, 7, 12, 52, 37, 97, 83, 96, 67, 51, 24, 50, 82, 66, 95, 81, 94, 36, 17, 55, 70, 86, 100, 39, 69, 99, 85, 54, 25, 68, 84, 98, 53, 38, 2, 64, 48, 33, 47, 22, 63, 78, 91, 46, 32, 62, 45, 15, 49, 80, 93, 65, 92, 79, 35, 23, 34, 9, 61, 77, 44, 60, 90, 76, 89, 30, 43, 59, 20, 29, 14, 21, 31, 6, 10, 3, 18, 56, 87, 71, 40, 26, 13, 75, 58, 88, 74, 42, 28, 19, 41, 73, 57, 72, 27, 8, 5], - [1, 4, 16, 11, 7, 12, 97, 83, 96, 67, 51, 37, 52, 24, 36, 50, 82, 66, 95, 81, 94, 17, 69, 99, 85, 54, 39, 55, 70, 86, 100, 25, 38, 68, 84, 98, 53, 2, 47, 33, 64, 48, 22, 62, 45, 32, 63, 78, 91, 46, 15, 35, 49, 80, 93, 65, 92, 79, 23, 34, 9, 43, 59, 30, 61, 77, 44, 60, 90, 76, 89, 20, 29, 14, 21, 31, 6, 10, 3, 18, 26, 56, 87, 71, 40, 13, 28, 75, 58, 88, 74, 42, 19, 27, 41, 73, 57, 72, 8, 5], - [1, 4, 16, 11, 7, 12, 96, 83, 97, 67, 51, 37, 52, 24, 36, 50, 82, 66, 94, 81, 95, 17, 69, 85, 99, 54, 39, 55, 70, 100, 86, 25, 38, 68, 98, 84, 53, 2, 47, 33, 64, 48, 22, 62, 45, 32, 63, 91, 78, 46, 15, 35, 49, 93, 80, 65, 79, 92, 23, 34, 9, 43, 59, 30, 61, 77, 44, 60, 89, 76, 90, 20, 29, 14, 21, 31, 6, 10, 3, 18, 26, 56, 71, 87, 40, 13, 28, 75, 58, 74, 88, 42, 19, 27, 41, 73, 57, 72, 8, 5], - [1, 4, 16, 11, 7, 12, 67, 96, 83, 97, 51, 37, 52, 24, 36, 50, 94, 81, 95, 66, 82, 17, 85, 99, 69, 54, 39, 55, 100, 86, 70, 25, 38, 98, 84, 68, 53, 2, 47, 33, 64, 48, 22, 62, 45, 32, 91, 78, 63, 46, 15, 35, 49, 79, 92, 65, 93, 80, 23, 34, 9, 43, 59, 30, 77, 61, 44, 89, 76, 90, 60, 20, 29, 14, 21, 31, 6, 10, 3, 18, 26, 71, 87, 56, 40, 13, 28, 74, 88, 58, 75, 42, 19, 27, 41, 72, 57, 73, 8, 5], - [1, 4, 12, 52, 37, 67, 96, 83, 97, 51, 24, 50, 94, 81, 95, 66, 82, 36, 17, 55, 100, 86, 70, 39, 85, 99, 69, 54, 25, 98, 84, 68, 53, 38, 7, 16, 11, 2, 10, 6, 64, 48, 33, 47, 22, 91, 78, 63, 46, 32, 62, 45, 15, 49, 79, 92, 65, 93, 80, 35, 23, 34, 9, 77, 61, 44, 89, 76, 90, 60, 30, 43, 59, 20, 29, 14, 21, 31, 3, 5, 18, 71, 87, 56, 40, 26, 13, 74, 88, 58, 75, 42, 28, 19, 41, 72, 57, 73, 27, 8], - [1, 4, 12, 52, 37, 67, 96, 83, 97, 51, 24, 50, 94, 81, 95, 66, 82, 36, 17, 55, 100, 86, 70, 39, 85, 99, 69, 54, 25, 98, 84, 68, 53, 38, 7, 16, 11, 2, 10, 6, 64, 48, 33, 47, 22, 91, 78, 63, 46, 32, 62, 45, 15, 49, 79, 92, 65, 93, 80, 35, 23, 34, 9, 77, 61, 44, 89, 76, 90, 60, 30, 43, 59, 20, 29, 14, 21, 31, 3, 5, 18, 71, 87, 56, 40, 26, 13, 74, 88, 58, 75, 42, 28, 19, 41, 72, 57, 73, 27, 8], - [1, 4, 16, 11, 7, 12, 67, 96, 83, 97, 51, 37, 52, 24, 36, 50, 94, 81, 95, 66, 82, 17, 85, 99, 69, 54, 39, 55, 100, 86, 70, 25, 38, 98, 84, 68, 53, 2, 47, 33, 64, 48, 22, 62, 45, 32, 91, 78, 63, 46, 15, 35, 49, 79, 92, 65, 93, 80, 23, 34, 9, 43, 59, 30, 77, 61, 44, 89, 76, 90, 60, 20, 29, 14, 21, 31, 6, 10, 3, 18, 26, 71, 87, 56, 40, 13, 28, 74, 88, 58, 75, 42, 19, 27, 41, 72, 57, 73, 8, 5] + [ + 1, 8, 40, 71, 87, 56, 26, 18, 13, 72, 57, 73, 41, 27, 19, 42, 74, 88, + 58, 75, 28, 5, 3, 29, 20, 89, 76, 90, 60, 44, 77, 61, 30, 59, 43, 14, + 31, 21, 9, 46, 91, 78, 63, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, + 79, 92, 65, 93, 80, 49, 35, 6, 10, 2, 11, 16, 7, 94, 81, 95, 66, 82, 50, + 36, 24, 52, 37, 51, 67, 96, 83, 97, 17, 53, 98, 84, 68, 38, 25, 100, 86, + 70, 55, 39, 54, 85, 99, 69, 12, 4 + ], + [ + 1, 8, 72, 57, 73, 41, 27, 19, 42, 74, 88, 58, 75, 28, 13, 40, 71, 87, + 56, 26, 18, 5, 3, 31, 21, 14, 29, 20, 89, 76, 90, 60, 44, 77, 61, 30, + 59, 43, 9, 34, 23, 79, 92, 65, 93, 80, 49, 35, 15, 46, 91, 78, 63, 32, + 45, 62, 22, 48, 64, 33, 47, 6, 10, 2, 11, 16, 7, 53, 98, 84, 68, 38, 25, + 100, 86, 70, 55, 39, 54, 85, 99, 69, 17, 94, 81, 95, 66, 82, 50, 36, 24, + 52, 37, 51, 67, 96, 83, 97, 12, 4 + ], + [ + 1, 36, 82, 66, 94, 81, 95, 50, 24, 51, 96, 83, 97, 67, 37, 52, 17, 38, + 53, 68, 98, 84, 25, 54, 69, 85, 99, 39, 70, 100, 86, 55, 12, 7, 11, 16, + 4, 2, 5, 8, 26, 40, 56, 71, 87, 18, 13, 27, 73, 57, 72, 41, 19, 28, 42, + 75, 58, 74, 88, 3, 10, 6, 29, 20, 59, 43, 30, 60, 89, 76, 90, 44, 61, + 77, 14, 31, 21, 9, 45, 62, 32, 46, 63, 91, 78, 22, 47, 33, 48, 64, 15, + 34, 23, 35, 93, 80, 65, 79, 92, 49 + ], + [ + 1, 4, 38, 68, 98, 84, 53, 25, 69, 85, 99, 54, 39, 55, 70, 100, 86, 17, + 36, 50, 82, 66, 94, 81, 95, 24, 96, 83, 97, 67, 51, 37, 52, 12, 7, 11, + 16, 2, 10, 6, 31, 21, 14, 29, 20, 43, 59, 30, 61, 77, 44, 60, 89, 76, + 90, 9, 34, 23, 35, 49, 93, 80, 65, 79, 92, 15, 62, 45, 32, 63, 91, 78, + 46, 22, 47, 33, 64, 48, 3, 5, 8, 27, 41, 73, 57, 72, 19, 28, 75, 58, 74, + 88, 42, 13, 26, 56, 71, 87, 40, 18 + ], + [ + 1, 4, 12, 38, 98, 84, 68, 53, 25, 85, 99, 69, 54, 39, 55, 100, 86, 70, + 17, 36, 50, 94, 81, 95, 66, 82, 24, 67, 96, 83, 97, 51, 37, 52, 7, 16, + 11, 2, 10, 6, 34, 23, 35, 49, 79, 92, 65, 93, 80, 15, 62, 45, 32, 91, + 78, 63, 46, 22, 47, 33, 64, 48, 9, 31, 21, 14, 29, 20, 43, 59, 30, 77, + 61, 44, 89, 76, 90, 60, 3, 5, 27, 41, 72, 57, 73, 19, 28, 74, 88, 58, + 75, 42, 13, 26, 71, 87, 56, 40, 18, 8 + ], + [ + 1, 4, 12, 85, 99, 69, 54, 39, 55, 100, 86, 70, 25, 38, 98, 84, 68, 53, + 17, 67, 96, 83, 97, 51, 37, 52, 24, 36, 50, 94, 81, 95, 66, 82, 7, 16, + 11, 2, 10, 6, 35, 49, 79, 92, 65, 93, 80, 23, 34, 15, 47, 33, 64, 48, + 22, 62, 45, 32, 91, 78, 63, 46, 9, 21, 31, 14, 43, 59, 30, 77, 61, 44, + 89, 76, 90, 60, 20, 29, 3, 5, 28, 74, 88, 58, 75, 42, 19, 27, 41, 72, + 57, 73, 13, 18, 26, 71, 87, 56, 40, 8 + ], + [ + 1, 4, 12, 38, 98, 84, 68, 53, 25, 85, 99, 69, 54, 39, 55, 100, 86, 70, + 17, 36, 50, 94, 81, 95, 66, 82, 24, 67, 96, 83, 97, 51, 37, 52, 7, 16, + 11, 2, 10, 6, 34, 23, 35, 49, 79, 92, 65, 93, 80, 15, 62, 45, 32, 91, + 78, 63, 46, 22, 47, 33, 64, 48, 9, 31, 21, 14, 29, 20, 43, 59, 30, 77, + 61, 44, 89, 76, 90, 60, 3, 5, 27, 41, 72, 57, 73, 19, 28, 74, 88, 58, + 75, 42, 13, 26, 71, 87, 56, 40, 18, 8 + ], + [ + 1, 4, 38, 68, 98, 84, 53, 25, 69, 85, 99, 54, 39, 55, 70, 100, 86, 17, + 36, 50, 82, 66, 94, 81, 95, 24, 96, 83, 97, 67, 51, 37, 52, 12, 7, 11, + 16, 2, 10, 6, 31, 21, 14, 29, 20, 43, 59, 30, 61, 77, 44, 60, 89, 76, + 90, 9, 34, 23, 35, 49, 93, 80, 65, 79, 92, 15, 62, 45, 32, 63, 91, 78, + 46, 22, 47, 33, 64, 48, 3, 5, 8, 27, 41, 73, 57, 72, 19, 28, 75, 58, 74, + 88, 42, 13, 26, 56, 71, 87, 40, 18 + ], + [ + 1, 4, 69, 85, 99, 54, 39, 55, 70, 100, 86, 25, 38, 68, 98, 84, 53, 17, + 96, 83, 97, 67, 51, 37, 52, 24, 36, 50, 82, 66, 94, 81, 95, 12, 7, 11, + 16, 2, 10, 6, 21, 31, 14, 43, 59, 30, 61, 77, 44, 60, 89, 76, 90, 20, + 29, 9, 35, 49, 93, 80, 65, 79, 92, 23, 34, 15, 47, 33, 64, 48, 22, 62, + 45, 32, 63, 91, 78, 46, 3, 5, 8, 28, 75, 58, 74, 88, 42, 19, 27, 41, 73, + 57, 72, 13, 18, 26, 56, 71, 87, 40 + ], + [ + 40, 87, 71, 56, 26, 18, 13, 72, 57, 73, 41, 27, 19, 42, 88, 74, 58, 75, + 28, 8, 5, 3, 46, 78, 91, 63, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, + 92, 79, 65, 80, 93, 49, 35, 9, 29, 20, 90, 76, 89, 60, 44, 77, 61, 30, + 59, 43, 14, 31, 21, 6, 10, 2, 16, 11, 7, 12, 95, 81, 94, 66, 82, 50, 36, + 24, 52, 37, 51, 67, 97, 83, 96, 17, 53, 84, 98, 68, 38, 25, 86, 100, 70, + 55, 39, 54, 99, 85, 69, 4, 1 + ], + [ + 8, 40, 56, 87, 71, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, 88, + 74, 28, 5, 3, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 14, 31, + 21, 9, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 80, + 93, 65, 92, 79, 49, 35, 6, 10, 2, 11, 16, 7, 82, 66, 95, 81, 94, 50, 36, + 24, 52, 37, 51, 97, 83, 96, 67, 17, 53, 68, 84, 98, 38, 25, 70, 86, 100, + 55, 39, 54, 69, 99, 85, 12, 4, 1 + ], + [ + 8, 73, 57, 72, 41, 27, 19, 42, 75, 58, 88, 74, 28, 13, 40, 56, 87, 71, + 26, 18, 5, 3, 31, 21, 14, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, + 43, 9, 34, 23, 80, 93, 65, 92, 79, 49, 35, 15, 46, 63, 78, 91, 32, 45, + 62, 22, 48, 64, 33, 47, 6, 10, 2, 11, 16, 7, 53, 68, 84, 98, 38, 25, 70, + 86, 100, 55, 39, 54, 69, 99, 85, 17, 82, 66, 95, 81, 94, 50, 36, 24, 52, + 37, 51, 97, 83, 96, 67, 12, 4, 1 + ], + [ + 36, 95, 81, 94, 66, 82, 50, 24, 51, 67, 97, 83, 96, 37, 52, 17, 38, 53, + 84, 98, 68, 25, 54, 99, 85, 69, 39, 86, 100, 70, 55, 12, 7, 11, 16, 4, + 2, 5, 8, 26, 40, 87, 71, 56, 18, 13, 27, 72, 57, 73, 41, 19, 28, 42, 88, + 74, 58, 75, 3, 10, 6, 29, 20, 59, 43, 30, 90, 76, 89, 60, 44, 77, 61, + 14, 31, 21, 9, 45, 62, 32, 46, 78, 91, 63, 22, 47, 33, 48, 64, 15, 34, + 23, 35, 92, 79, 65, 80, 93, 49, 1 + ], + [ + 95, 81, 94, 66, 82, 50, 36, 24, 52, 37, 51, 67, 97, 83, 96, 17, 53, 84, + 98, 68, 38, 25, 86, 100, 70, 55, 39, 54, 99, 85, 69, 12, 7, 11, 16, 4, + 2, 5, 8, 40, 87, 71, 56, 26, 18, 13, 72, 57, 73, 41, 27, 19, 42, 88, 74, + 58, 75, 28, 3, 10, 6, 29, 20, 90, 76, 89, 60, 44, 77, 61, 30, 59, 43, + 14, 31, 21, 9, 46, 78, 91, 63, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, + 23, 92, 79, 65, 80, 93, 49, 35, 1 + ], + [ + 11, 16, 7, 36, 95, 81, 94, 66, 82, 50, 24, 51, 67, 97, 83, 96, 37, 52, + 17, 38, 53, 84, 98, 68, 25, 54, 99, 85, 69, 39, 86, 100, 70, 55, 12, 4, + 2, 8, 26, 40, 87, 71, 56, 18, 13, 27, 72, 57, 73, 41, 19, 28, 42, 88, + 74, 58, 75, 5, 3, 29, 20, 59, 43, 30, 90, 76, 89, 60, 44, 77, 61, 14, + 31, 21, 9, 45, 62, 32, 46, 78, 91, 63, 22, 47, 33, 48, 64, 15, 34, 23, + 35, 92, 79, 65, 80, 93, 49, 6, 10, 1 + ], + [ + 11, 16, 7, 38, 53, 84, 98, 68, 25, 54, 99, 85, 69, 39, 86, 100, 70, 55, + 17, 36, 95, 81, 94, 66, 82, 50, 24, 51, 67, 97, 83, 96, 37, 52, 12, 4, + 2, 8, 27, 72, 57, 73, 41, 19, 28, 42, 88, 74, 58, 75, 13, 26, 40, 87, + 71, 56, 18, 5, 3, 31, 21, 14, 29, 20, 59, 43, 30, 90, 76, 89, 60, 44, + 77, 61, 9, 34, 23, 35, 92, 79, 65, 80, 93, 49, 15, 45, 62, 32, 46, 78, + 91, 63, 22, 47, 33, 48, 64, 6, 10, 1 + ], + [ + 11, 16, 7, 53, 84, 98, 68, 38, 25, 86, 100, 70, 55, 39, 54, 99, 85, 69, + 17, 95, 81, 94, 66, 82, 50, 36, 24, 52, 37, 51, 67, 97, 83, 96, 12, 4, + 2, 8, 72, 57, 73, 41, 27, 19, 42, 88, 74, 58, 75, 28, 13, 40, 87, 71, + 56, 26, 18, 5, 3, 31, 21, 14, 29, 20, 90, 76, 89, 60, 44, 77, 61, 30, + 59, 43, 9, 34, 23, 92, 79, 65, 80, 93, 49, 35, 15, 46, 78, 91, 63, 32, + 45, 62, 22, 48, 64, 33, 47, 6, 10, 1 + ], + [ + 11, 16, 7, 53, 84, 98, 68, 38, 25, 86, 100, 70, 55, 39, 54, 99, 85, 69, + 17, 95, 81, 94, 66, 82, 50, 36, 24, 52, 37, 51, 67, 97, 83, 96, 12, 4, + 2, 8, 72, 57, 73, 41, 27, 19, 42, 88, 74, 58, 75, 28, 13, 40, 87, 71, + 56, 26, 18, 5, 3, 31, 21, 14, 29, 20, 90, 76, 89, 60, 44, 77, 61, 30, + 59, 43, 9, 34, 23, 92, 79, 65, 80, 93, 49, 35, 15, 46, 78, 91, 63, 32, + 45, 62, 22, 48, 64, 33, 47, 6, 10, 1 + ], + [ + 11, 16, 7, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, + 17, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, 96, 67, 12, 4, + 2, 8, 73, 57, 72, 41, 27, 19, 42, 75, 58, 88, 74, 28, 13, 40, 56, 87, + 71, 26, 18, 5, 3, 31, 21, 14, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, + 59, 43, 9, 34, 23, 80, 93, 65, 92, 79, 49, 35, 15, 46, 63, 78, 91, 32, + 45, 62, 22, 48, 64, 33, 47, 6, 10, 1 + ], + [ + 11, 16, 7, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, 96, 67, + 17, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, 12, 4, + 2, 8, 40, 56, 87, 71, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, + 88, 74, 28, 5, 3, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 14, + 31, 21, 9, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, + 80, 93, 65, 92, 79, 49, 35, 6, 10, 1 + ], + [ + 11, 16, 7, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, 96, 67, + 17, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, 12, 4, + 2, 8, 40, 56, 87, 71, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, + 88, 74, 28, 5, 3, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 14, + 31, 21, 9, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, + 80, 93, 65, 92, 79, 49, 35, 6, 10, 1 + ], + [ + 11, 16, 7, 82, 66, 94, 81, 95, 50, 36, 24, 52, 37, 51, 96, 83, 97, 67, + 17, 53, 68, 98, 84, 38, 25, 70, 100, 86, 55, 39, 54, 69, 85, 99, 12, 4, + 2, 8, 40, 56, 71, 87, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, + 74, 88, 28, 5, 3, 29, 20, 60, 89, 76, 90, 44, 61, 77, 30, 59, 43, 14, + 31, 21, 9, 46, 63, 91, 78, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, + 93, 80, 65, 79, 92, 49, 35, 6, 10, 1 + ], + [ + 11, 16, 7, 82, 66, 94, 81, 95, 50, 36, 24, 52, 37, 51, 96, 83, 97, 67, + 17, 53, 68, 98, 84, 38, 25, 70, 100, 86, 55, 39, 54, 69, 85, 99, 12, 4, + 2, 8, 40, 56, 71, 87, 26, 18, 13, 73, 57, 72, 41, 27, 19, 42, 75, 58, + 74, 88, 28, 5, 3, 29, 20, 60, 89, 76, 90, 44, 61, 77, 30, 59, 43, 14, + 31, 21, 9, 46, 63, 91, 78, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, + 93, 80, 65, 79, 92, 49, 35, 6, 10, 1 + ], + [ + 11, 16, 7, 36, 82, 66, 94, 81, 95, 50, 24, 51, 96, 83, 97, 67, 37, 52, + 17, 38, 53, 68, 98, 84, 25, 54, 69, 85, 99, 39, 70, 100, 86, 55, 12, 4, + 2, 8, 26, 40, 56, 71, 87, 18, 13, 27, 73, 57, 72, 41, 19, 28, 42, 75, + 58, 74, 88, 5, 3, 29, 20, 59, 43, 30, 60, 89, 76, 90, 44, 61, 77, 14, + 31, 21, 9, 45, 62, 32, 46, 63, 91, 78, 22, 47, 33, 48, 64, 15, 34, 23, + 35, 93, 80, 65, 79, 92, 49, 6, 10, 1 + ], + [ + 1, 10, 6, 49, 92, 79, 65, 80, 93, 35, 23, 34, 15, 64, 48, 33, 47, 22, + 78, 91, 63, 46, 32, 62, 45, 9, 21, 31, 14, 77, 61, 44, 90, 76, 89, 60, + 30, 43, 59, 20, 29, 3, 5, 88, 74, 58, 75, 42, 28, 19, 41, 72, 57, 73, + 27, 13, 18, 87, 71, 56, 40, 26, 8, 2, 4, 12, 55, 86, 100, 70, 39, 99, + 85, 69, 54, 25, 84, 98, 68, 53, 38, 17, 52, 37, 67, 97, 83, 96, 51, 24, + 50, 95, 81, 94, 66, 82, 36, 7, 16, 11 + ], + [ + 1, 10, 6, 34, 23, 49, 92, 79, 65, 80, 93, 35, 15, 78, 91, 63, 46, 32, + 62, 45, 22, 64, 48, 33, 47, 9, 31, 21, 14, 29, 20, 77, 61, 44, 90, 76, + 89, 60, 30, 43, 59, 3, 5, 41, 72, 57, 73, 27, 19, 88, 74, 58, 75, 42, + 28, 13, 87, 71, 56, 40, 26, 18, 8, 2, 4, 12, 84, 98, 68, 53, 38, 25, 55, + 86, 100, 70, 39, 99, 85, 69, 54, 17, 50, 95, 81, 94, 66, 82, 36, 24, 52, + 37, 67, 97, 83, 96, 51, 7, 16, 11 + ], + [ + 1, 10, 6, 34, 23, 92, 79, 65, 80, 93, 49, 35, 15, 46, 78, 91, 63, 32, + 45, 62, 22, 48, 64, 33, 47, 9, 31, 21, 14, 29, 20, 90, 76, 89, 60, 44, + 77, 61, 30, 59, 43, 3, 5, 72, 57, 73, 41, 27, 19, 42, 88, 74, 58, 75, + 28, 13, 40, 87, 71, 56, 26, 18, 8, 2, 4, 12, 53, 84, 98, 68, 38, 25, 86, + 100, 70, 55, 39, 54, 99, 85, 69, 17, 95, 81, 94, 66, 82, 50, 36, 24, 52, + 37, 51, 67, 97, 83, 96, 7, 16, 11 + ], + [ + 1, 5, 87, 71, 56, 40, 26, 18, 13, 41, 72, 57, 73, 27, 19, 88, 74, 58, + 75, 42, 28, 8, 3, 10, 6, 78, 91, 63, 46, 32, 62, 45, 22, 64, 48, 33, 47, + 15, 34, 23, 49, 92, 79, 65, 80, 93, 35, 9, 29, 20, 77, 61, 44, 90, 76, + 89, 60, 30, 43, 59, 14, 31, 21, 2, 12, 50, 95, 81, 94, 66, 82, 36, 24, + 52, 37, 67, 97, 83, 96, 51, 17, 84, 98, 68, 53, 38, 25, 55, 86, 100, 70, + 39, 99, 85, 69, 54, 7, 16, 11, 4 + ], + [ + 1, 5, 26, 87, 71, 56, 40, 18, 13, 27, 41, 72, 57, 73, 19, 28, 88, 74, + 58, 75, 42, 8, 3, 10, 6, 62, 45, 32, 78, 91, 63, 46, 22, 47, 33, 64, 48, + 15, 34, 23, 35, 49, 92, 79, 65, 80, 93, 9, 29, 20, 43, 59, 30, 77, 61, + 44, 90, 76, 89, 60, 14, 31, 21, 2, 12, 36, 50, 95, 81, 94, 66, 82, 24, + 67, 97, 83, 96, 51, 37, 52, 17, 38, 84, 98, 68, 53, 25, 99, 85, 69, 54, + 39, 55, 86, 100, 70, 7, 16, 11, 4 + ], + [ + 1, 5, 18, 26, 87, 71, 56, 40, 13, 28, 88, 74, 58, 75, 42, 19, 27, 41, + 72, 57, 73, 8, 3, 10, 6, 47, 33, 64, 48, 22, 62, 45, 32, 78, 91, 63, 46, + 15, 35, 49, 92, 79, 65, 80, 93, 23, 34, 9, 43, 59, 30, 77, 61, 44, 90, + 76, 89, 60, 20, 29, 14, 21, 31, 2, 12, 67, 97, 83, 96, 51, 37, 52, 24, + 36, 50, 95, 81, 94, 66, 82, 17, 99, 85, 69, 54, 39, 55, 86, 100, 70, 25, + 38, 84, 98, 68, 53, 7, 16, 11, 4 + ], + [ + 1, 16, 11, 7, 12, 55, 70, 86, 100, 39, 69, 99, 85, 54, 25, 68, 84, 98, + 53, 38, 17, 52, 37, 97, 83, 96, 67, 51, 24, 50, 82, 66, 95, 81, 94, 36, + 4, 2, 75, 58, 88, 74, 42, 28, 19, 41, 73, 57, 72, 27, 13, 18, 56, 87, + 71, 40, 26, 8, 5, 3, 49, 80, 93, 65, 92, 79, 35, 23, 34, 15, 64, 48, 33, + 47, 22, 63, 78, 91, 46, 32, 62, 45, 9, 21, 31, 14, 61, 77, 44, 60, 90, + 76, 89, 30, 43, 59, 20, 29, 6, 10 + ], + [ + 1, 16, 11, 7, 12, 68, 84, 98, 53, 38, 25, 55, 70, 86, 100, 39, 69, 99, + 85, 54, 17, 50, 82, 66, 95, 81, 94, 36, 24, 52, 37, 97, 83, 96, 67, 51, + 4, 2, 41, 73, 57, 72, 27, 19, 75, 58, 88, 74, 42, 28, 13, 56, 87, 71, + 40, 26, 18, 8, 5, 3, 34, 23, 49, 80, 93, 65, 92, 79, 35, 15, 63, 78, 91, + 46, 32, 62, 45, 22, 64, 48, 33, 47, 9, 31, 21, 14, 29, 20, 61, 77, 44, + 60, 90, 76, 89, 30, 43, 59, 6, 10 + ], + [ + 1, 16, 11, 7, 12, 38, 68, 84, 98, 53, 25, 69, 99, 85, 54, 39, 55, 70, + 86, 100, 17, 36, 50, 82, 66, 95, 81, 94, 24, 97, 83, 96, 67, 51, 37, 52, + 4, 2, 27, 41, 73, 57, 72, 19, 28, 75, 58, 88, 74, 42, 13, 26, 56, 87, + 71, 40, 18, 8, 5, 3, 34, 23, 35, 49, 80, 93, 65, 92, 79, 15, 62, 45, 32, + 63, 78, 91, 46, 22, 47, 33, 64, 48, 9, 31, 21, 14, 29, 20, 43, 59, 30, + 61, 77, 44, 60, 90, 76, 89, 6, 10 + ], + [ + 1, 4, 16, 11, 7, 12, 36, 82, 66, 95, 81, 94, 50, 24, 51, 97, 83, 96, 67, + 37, 52, 17, 38, 53, 68, 84, 98, 25, 54, 69, 99, 85, 39, 70, 86, 100, 55, + 2, 45, 62, 32, 46, 63, 78, 91, 22, 47, 33, 48, 64, 15, 34, 23, 35, 80, + 93, 65, 92, 79, 49, 9, 29, 20, 59, 43, 30, 60, 90, 76, 89, 44, 61, 77, + 14, 31, 21, 6, 10, 3, 26, 40, 56, 87, 71, 18, 13, 27, 73, 57, 72, 41, + 19, 28, 42, 75, 58, 88, 74, 8, 5 + ], + [ + 1, 4, 16, 11, 7, 12, 82, 66, 95, 81, 94, 50, 36, 24, 52, 37, 51, 97, 83, + 96, 67, 17, 53, 68, 84, 98, 38, 25, 70, 86, 100, 55, 39, 54, 69, 99, 85, + 2, 46, 63, 78, 91, 32, 45, 62, 22, 48, 64, 33, 47, 15, 34, 23, 80, 93, + 65, 92, 79, 49, 35, 9, 29, 20, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, + 14, 31, 21, 6, 10, 3, 40, 56, 87, 71, 26, 18, 13, 73, 57, 72, 41, 27, + 19, 42, 75, 58, 88, 74, 28, 8, 5 + ], + [ + 1, 4, 16, 11, 7, 12, 50, 82, 66, 95, 81, 94, 36, 24, 52, 37, 97, 83, 96, + 67, 51, 17, 68, 84, 98, 53, 38, 25, 55, 70, 86, 100, 39, 69, 99, 85, 54, + 2, 63, 78, 91, 46, 32, 62, 45, 22, 64, 48, 33, 47, 15, 34, 23, 49, 80, + 93, 65, 92, 79, 35, 9, 29, 20, 61, 77, 44, 60, 90, 76, 89, 30, 43, 59, + 14, 31, 21, 6, 10, 3, 56, 87, 71, 40, 26, 18, 13, 41, 73, 57, 72, 27, + 19, 75, 58, 88, 74, 42, 28, 8, 5 + ], + [ + 1, 4, 16, 11, 7, 12, 52, 37, 97, 83, 96, 67, 51, 24, 50, 82, 66, 95, 81, + 94, 36, 17, 55, 70, 86, 100, 39, 69, 99, 85, 54, 25, 68, 84, 98, 53, 38, + 2, 64, 48, 33, 47, 22, 63, 78, 91, 46, 32, 62, 45, 15, 49, 80, 93, 65, + 92, 79, 35, 23, 34, 9, 61, 77, 44, 60, 90, 76, 89, 30, 43, 59, 20, 29, + 14, 21, 31, 6, 10, 3, 18, 56, 87, 71, 40, 26, 13, 75, 58, 88, 74, 42, + 28, 19, 41, 73, 57, 72, 27, 8, 5 + ], + [ + 1, 4, 16, 11, 7, 12, 52, 37, 51, 97, 83, 96, 67, 24, 82, 66, 95, 81, 94, + 50, 36, 17, 70, 86, 100, 55, 39, 54, 69, 99, 85, 25, 53, 68, 84, 98, 38, + 2, 48, 64, 33, 47, 22, 46, 63, 78, 91, 32, 45, 62, 15, 80, 93, 65, 92, + 79, 49, 35, 23, 34, 9, 60, 90, 76, 89, 44, 61, 77, 30, 59, 43, 20, 29, + 14, 21, 31, 6, 10, 3, 18, 40, 56, 87, 71, 26, 13, 42, 75, 58, 88, 74, + 28, 19, 73, 57, 72, 41, 27, 8, 5 + ], + [ + 1, 4, 16, 11, 7, 12, 52, 37, 97, 83, 96, 67, 51, 24, 50, 82, 66, 95, 81, + 94, 36, 17, 55, 70, 86, 100, 39, 69, 99, 85, 54, 25, 68, 84, 98, 53, 38, + 2, 64, 48, 33, 47, 22, 63, 78, 91, 46, 32, 62, 45, 15, 49, 80, 93, 65, + 92, 79, 35, 23, 34, 9, 61, 77, 44, 60, 90, 76, 89, 30, 43, 59, 20, 29, + 14, 21, 31, 6, 10, 3, 18, 56, 87, 71, 40, 26, 13, 75, 58, 88, 74, 42, + 28, 19, 41, 73, 57, 72, 27, 8, 5 + ], + [ + 1, 4, 16, 11, 7, 12, 97, 83, 96, 67, 51, 37, 52, 24, 36, 50, 82, 66, 95, + 81, 94, 17, 69, 99, 85, 54, 39, 55, 70, 86, 100, 25, 38, 68, 84, 98, 53, + 2, 47, 33, 64, 48, 22, 62, 45, 32, 63, 78, 91, 46, 15, 35, 49, 80, 93, + 65, 92, 79, 23, 34, 9, 43, 59, 30, 61, 77, 44, 60, 90, 76, 89, 20, 29, + 14, 21, 31, 6, 10, 3, 18, 26, 56, 87, 71, 40, 13, 28, 75, 58, 88, 74, + 42, 19, 27, 41, 73, 57, 72, 8, 5 + ], + [ + 1, 4, 16, 11, 7, 12, 96, 83, 97, 67, 51, 37, 52, 24, 36, 50, 82, 66, 94, + 81, 95, 17, 69, 85, 99, 54, 39, 55, 70, 100, 86, 25, 38, 68, 98, 84, 53, + 2, 47, 33, 64, 48, 22, 62, 45, 32, 63, 91, 78, 46, 15, 35, 49, 93, 80, + 65, 79, 92, 23, 34, 9, 43, 59, 30, 61, 77, 44, 60, 89, 76, 90, 20, 29, + 14, 21, 31, 6, 10, 3, 18, 26, 56, 71, 87, 40, 13, 28, 75, 58, 74, 88, + 42, 19, 27, 41, 73, 57, 72, 8, 5 + ], + [ + 1, 4, 16, 11, 7, 12, 67, 96, 83, 97, 51, 37, 52, 24, 36, 50, 94, 81, 95, + 66, 82, 17, 85, 99, 69, 54, 39, 55, 100, 86, 70, 25, 38, 98, 84, 68, 53, + 2, 47, 33, 64, 48, 22, 62, 45, 32, 91, 78, 63, 46, 15, 35, 49, 79, 92, + 65, 93, 80, 23, 34, 9, 43, 59, 30, 77, 61, 44, 89, 76, 90, 60, 20, 29, + 14, 21, 31, 6, 10, 3, 18, 26, 71, 87, 56, 40, 13, 28, 74, 88, 58, 75, + 42, 19, 27, 41, 72, 57, 73, 8, 5 + ], + [ + 1, 4, 12, 52, 37, 67, 96, 83, 97, 51, 24, 50, 94, 81, 95, 66, 82, 36, + 17, 55, 100, 86, 70, 39, 85, 99, 69, 54, 25, 98, 84, 68, 53, 38, 7, 16, + 11, 2, 10, 6, 64, 48, 33, 47, 22, 91, 78, 63, 46, 32, 62, 45, 15, 49, + 79, 92, 65, 93, 80, 35, 23, 34, 9, 77, 61, 44, 89, 76, 90, 60, 30, 43, + 59, 20, 29, 14, 21, 31, 3, 5, 18, 71, 87, 56, 40, 26, 13, 74, 88, 58, + 75, 42, 28, 19, 41, 72, 57, 73, 27, 8 + ], + [ + 1, 4, 12, 52, 37, 67, 96, 83, 97, 51, 24, 50, 94, 81, 95, 66, 82, 36, + 17, 55, 100, 86, 70, 39, 85, 99, 69, 54, 25, 98, 84, 68, 53, 38, 7, 16, + 11, 2, 10, 6, 64, 48, 33, 47, 22, 91, 78, 63, 46, 32, 62, 45, 15, 49, + 79, 92, 65, 93, 80, 35, 23, 34, 9, 77, 61, 44, 89, 76, 90, 60, 30, 43, + 59, 20, 29, 14, 21, 31, 3, 5, 18, 71, 87, 56, 40, 26, 13, 74, 88, 58, + 75, 42, 28, 19, 41, 72, 57, 73, 27, 8 + ], + [ + 1, 4, 16, 11, 7, 12, 67, 96, 83, 97, 51, 37, 52, 24, 36, 50, 94, 81, 95, + 66, 82, 17, 85, 99, 69, 54, 39, 55, 100, 86, 70, 25, 38, 98, 84, 68, 53, + 2, 47, 33, 64, 48, 22, 62, 45, 32, 91, 78, 63, 46, 15, 35, 49, 79, 92, + 65, 93, 80, 23, 34, 9, 43, 59, 30, 77, 61, 44, 89, 76, 90, 60, 20, 29, + 14, 21, 31, 6, 10, 3, 18, 26, 71, 87, 56, 40, 13, 28, 74, 88, 58, 75, + 42, 19, 27, 41, 72, 57, 73, 8, 5 + ] ] } ] diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.testcases.json b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.testcases.json index dc1c8751..92abd323 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.testcases.json +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.testcases.json @@ -1,35 +1,79 @@ [ { "title": "Sample 0", - "nodes": [[2, 3], [-1, -1], [-1, -1]], + "nodes": [ + [2, 3], + [-1, -1], + [-1, -1] + ], "flattened": [2, 1, 3], "queries": [1, 1], - "expected": [[3, 1, 2], [2, 1, 3]] + "expected": [ + [3, 1, 2], + [2, 1, 3] + ] }, { "title": "Sample 1", - "nodes": [[2, 3], [-1, 4], [-1, 5], [-1, -1], [-1, -1]], + "nodes": [ + [2, 3], + [-1, 4], + [-1, 5], + [-1, -1], + [-1, -1] + ], "flattened": [2, 4, 1, 3, 5], "queries": [2], "expected": [[4, 2, 1, 5, 3]] }, { "title": "Sample 2", - "nodes": [[2, 3], [4, -1], [5, -1], [6, -1], [7, 8], [-1, 9], - [-1, -1], [10, 11], [-1, -1], [-1, -1], [-1, -1]], + "nodes": [ + [2, 3], + [4, -1], + [5, -1], + [6, -1], + [7, 8], + [-1, 9], + [-1, -1], + [10, 11], + [-1, -1], + [-1, -1], + [-1, -1] + ], "flattened": [6, 9, 4, 2, 1, 7, 5, 10, 8, 11, 3], "queries": [2, 4], - "expected": [[2, 9, 6, 4, 1, 3, 7, 5, 11, 8, 10], - [2, 6, 9, 4, 1, 3, 7, 5, 10, 8, 11]] + "expected": [ + [2, 9, 6, 4, 1, 3, 7, 5, 11, 8, 10], + [2, 6, 9, 4, 1, 3, 7, 5, 10, 8, 11] + ] }, { "title": "Sample Test Case 1", - "nodes": [[2, 3], [4, 5], [6, -1], [-1, 7], [8, 9], [10, 11], [12, 13], - [-1, 14], [-1, -1], [15, -1], [16, 17], [-1, -1], [-1, -1], - [-1, -1], [-1, -1], [-1, -1], [-1, -1]], + "nodes": [ + [2, 3], + [4, 5], + [6, -1], + [-1, 7], + [8, 9], + [10, 11], + [12, 13], + [-1, 14], + [-1, -1], + [15, -1], + [16, 17], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1], + [-1, -1] + ], "flattened": [4, 12, 7, 13, 2, 8, 14, 5, 9, 1, 15, 10, 6, 16, 11, 17, 3], "queries": [2, 3], - "expected": [[14, 8, 5, 9, 2, 4, 13, 7, 12, 1, 3, 10, 15, 6, 17, 11, 16], - [9, 5, 14, 8, 2, 13, 7, 12, 4, 1, 3, 17, 11, 16, 6, 10, 15]] + "expected": [ + [14, 8, 5, 9, 2, 4, 13, 7, 12, 1, 3, 10, 15, 6, 17, 11, 16], + [9, 5, 14, 8, 2, 13, 7, 12, 4, 1, 3, 17, 11, 16, 6, 10, 15] + ] } ] diff --git a/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets.testcases.json b/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets.testcases.json index f4d6a053..b96b1a8c 100644 --- a/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets.testcases.json +++ b/src/hackerrank/interview_preparation_kit/stacks_and_queues/balanced_brackets.testcases.json @@ -1,8 +1,7 @@ [ { "title": "Sample Test Case 0", - "tests": - [ + "tests": [ { "input": "{[()]}", "answer": true @@ -19,8 +18,7 @@ }, { "title": "Sample Test Case 1", - "tests": - [ + "tests": [ { "input": "{{([])}}", "answer": true @@ -33,8 +31,7 @@ }, { "title": "Sample Test Case 1", - "tests": - [ + "tests": [ { "input": "{(([])[])[]}", "answer": true diff --git a/src/projecteuler/data/p022_names.json b/src/projecteuler/data/p022_names.json index 00746f90..55aef0c2 100644 --- a/src/projecteuler/data/p022_names.json +++ b/src/projecteuler/data/p022_names.json @@ -1 +1,5165 @@ -["MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET","DOROTHY","LISA","NANCY","KAREN","BETTY","HELEN","SANDRA","DONNA","CAROL","RUTH","SHARON","MICHELLE","LAURA","SARAH","KIMBERLY","DEBORAH","JESSICA","SHIRLEY","CYNTHIA","ANGELA","MELISSA","BRENDA","AMY","ANNA","REBECCA","VIRGINIA","KATHLEEN","PAMELA","MARTHA","DEBRA","AMANDA","STEPHANIE","CAROLYN","CHRISTINE","MARIE","JANET","CATHERINE","FRANCES","ANN","JOYCE","DIANE","ALICE","JULIE","HEATHER","TERESA","DORIS","GLORIA","EVELYN","JEAN","CHERYL","MILDRED","KATHERINE","JOAN","ASHLEY","JUDITH","ROSE","JANICE","KELLY","NICOLE","JUDY","CHRISTINA","KATHY","THERESA","BEVERLY","DENISE","TAMMY","IRENE","JANE","LORI","RACHEL","MARILYN","ANDREA","KATHRYN","LOUISE","SARA","ANNE","JACQUELINE","WANDA","BONNIE","JULIA","RUBY","LOIS","TINA","PHYLLIS","NORMA","PAULA","DIANA","ANNIE","LILLIAN","EMILY","ROBIN","PEGGY","CRYSTAL","GLADYS","RITA","DAWN","CONNIE","FLORENCE","TRACY","EDNA","TIFFANY","CARMEN","ROSA","CINDY","GRACE","WENDY","VICTORIA","EDITH","KIM","SHERRY","SYLVIA","JOSEPHINE","THELMA","SHANNON","SHEILA","ETHEL","ELLEN","ELAINE","MARJORIE","CARRIE","CHARLOTTE","MONICA","ESTHER","PAULINE","EMMA","JUANITA","ANITA","RHONDA","HAZEL","AMBER","EVA","DEBBIE","APRIL","LESLIE","CLARA","LUCILLE","JAMIE","JOANNE","ELEANOR","VALERIE","DANIELLE","MEGAN","ALICIA","SUZANNE","MICHELE","GAIL","BERTHA","DARLENE","VERONICA","JILL","ERIN","GERALDINE","LAUREN","CATHY","JOANN","LORRAINE","LYNN","SALLY","REGINA","ERICA","BEATRICE","DOLORES","BERNICE","AUDREY","YVONNE","ANNETTE","JUNE","SAMANTHA","MARION","DANA","STACY","ANA","RENEE","IDA","VIVIAN","ROBERTA","HOLLY","BRITTANY","MELANIE","LORETTA","YOLANDA","JEANETTE","LAURIE","KATIE","KRISTEN","VANESSA","ALMA","SUE","ELSIE","BETH","JEANNE","VICKI","CARLA","TARA","ROSEMARY","EILEEN","TERRI","GERTRUDE","LUCY","TONYA","ELLA","STACEY","WILMA","GINA","KRISTIN","JESSIE","NATALIE","AGNES","VERA","WILLIE","CHARLENE","BESSIE","DELORES","MELINDA","PEARL","ARLENE","MAUREEN","COLLEEN","ALLISON","TAMARA","JOY","GEORGIA","CONSTANCE","LILLIE","CLAUDIA","JACKIE","MARCIA","TANYA","NELLIE","MINNIE","MARLENE","HEIDI","GLENDA","LYDIA","VIOLA","COURTNEY","MARIAN","STELLA","CAROLINE","DORA","JO","VICKIE","MATTIE","TERRY","MAXINE","IRMA","MABEL","MARSHA","MYRTLE","LENA","CHRISTY","DEANNA","PATSY","HILDA","GWENDOLYN","JENNIE","NORA","MARGIE","NINA","CASSANDRA","LEAH","PENNY","KAY","PRISCILLA","NAOMI","CAROLE","BRANDY","OLGA","BILLIE","DIANNE","TRACEY","LEONA","JENNY","FELICIA","SONIA","MIRIAM","VELMA","BECKY","BOBBIE","VIOLET","KRISTINA","TONI","MISTY","MAE","SHELLY","DAISY","RAMONA","SHERRI","ERIKA","KATRINA","CLAIRE","LINDSEY","LINDSAY","GENEVA","GUADALUPE","BELINDA","MARGARITA","SHERYL","CORA","FAYE","ADA","NATASHA","SABRINA","ISABEL","MARGUERITE","HATTIE","HARRIET","MOLLY","CECILIA","KRISTI","BRANDI","BLANCHE","SANDY","ROSIE","JOANNA","IRIS","EUNICE","ANGIE","INEZ","LYNDA","MADELINE","AMELIA","ALBERTA","GENEVIEVE","MONIQUE","JODI","JANIE","MAGGIE","KAYLA","SONYA","JAN","LEE","KRISTINE","CANDACE","FANNIE","MARYANN","OPAL","ALISON","YVETTE","MELODY","LUZ","SUSIE","OLIVIA","FLORA","SHELLEY","KRISTY","MAMIE","LULA","LOLA","VERNA","BEULAH","ANTOINETTE","CANDICE","JUANA","JEANNETTE","PAM","KELLI","HANNAH","WHITNEY","BRIDGET","KARLA","CELIA","LATOYA","PATTY","SHELIA","GAYLE","DELLA","VICKY","LYNNE","SHERI","MARIANNE","KARA","JACQUELYN","ERMA","BLANCA","MYRA","LETICIA","PAT","KRISTA","ROXANNE","ANGELICA","JOHNNIE","ROBYN","FRANCIS","ADRIENNE","ROSALIE","ALEXANDRA","BROOKE","BETHANY","SADIE","BERNADETTE","TRACI","JODY","KENDRA","JASMINE","NICHOLE","RACHAEL","CHELSEA","MABLE","ERNESTINE","MURIEL","MARCELLA","ELENA","KRYSTAL","ANGELINA","NADINE","KARI","ESTELLE","DIANNA","PAULETTE","LORA","MONA","DOREEN","ROSEMARIE","ANGEL","DESIREE","ANTONIA","HOPE","GINGER","JANIS","BETSY","CHRISTIE","FREDA","MERCEDES","MEREDITH","LYNETTE","TERI","CRISTINA","EULA","LEIGH","MEGHAN","SOPHIA","ELOISE","ROCHELLE","GRETCHEN","CECELIA","RAQUEL","HENRIETTA","ALYSSA","JANA","KELLEY","GWEN","KERRY","JENNA","TRICIA","LAVERNE","OLIVE","ALEXIS","TASHA","SILVIA","ELVIRA","CASEY","DELIA","SOPHIE","KATE","PATTI","LORENA","KELLIE","SONJA","LILA","LANA","DARLA","MAY","MINDY","ESSIE","MANDY","LORENE","ELSA","JOSEFINA","JEANNIE","MIRANDA","DIXIE","LUCIA","MARTA","FAITH","LELA","JOHANNA","SHARI","CAMILLE","TAMI","SHAWNA","ELISA","EBONY","MELBA","ORA","NETTIE","TABITHA","OLLIE","JAIME","WINIFRED","KRISTIE","MARINA","ALISHA","AIMEE","RENA","MYRNA","MARLA","TAMMIE","LATASHA","BONITA","PATRICE","RONDA","SHERRIE","ADDIE","FRANCINE","DELORIS","STACIE","ADRIANA","CHERI","SHELBY","ABIGAIL","CELESTE","JEWEL","CARA","ADELE","REBEKAH","LUCINDA","DORTHY","CHRIS","EFFIE","TRINA","REBA","SHAWN","SALLIE","AURORA","LENORA","ETTA","LOTTIE","KERRI","TRISHA","NIKKI","ESTELLA","FRANCISCA","JOSIE","TRACIE","MARISSA","KARIN","BRITTNEY","JANELLE","LOURDES","LAUREL","HELENE","FERN","ELVA","CORINNE","KELSEY","INA","BETTIE","ELISABETH","AIDA","CAITLIN","INGRID","IVA","EUGENIA","CHRISTA","GOLDIE","CASSIE","MAUDE","JENIFER","THERESE","FRANKIE","DENA","LORNA","JANETTE","LATONYA","CANDY","MORGAN","CONSUELO","TAMIKA","ROSETTA","DEBORA","CHERIE","POLLY","DINA","JEWELL","FAY","JILLIAN","DOROTHEA","NELL","TRUDY","ESPERANZA","PATRICA","KIMBERLEY","SHANNA","HELENA","CAROLINA","CLEO","STEFANIE","ROSARIO","OLA","JANINE","MOLLIE","LUPE","ALISA","LOU","MARIBEL","SUSANNE","BETTE","SUSANA","ELISE","CECILE","ISABELLE","LESLEY","JOCELYN","PAIGE","JONI","RACHELLE","LEOLA","DAPHNE","ALTA","ESTER","PETRA","GRACIELA","IMOGENE","JOLENE","KEISHA","LACEY","GLENNA","GABRIELA","KERI","URSULA","LIZZIE","KIRSTEN","SHANA","ADELINE","MAYRA","JAYNE","JACLYN","GRACIE","SONDRA","CARMELA","MARISA","ROSALIND","CHARITY","TONIA","BEATRIZ","MARISOL","CLARICE","JEANINE","SHEENA","ANGELINE","FRIEDA","LILY","ROBBIE","SHAUNA","MILLIE","CLAUDETTE","CATHLEEN","ANGELIA","GABRIELLE","AUTUMN","KATHARINE","SUMMER","JODIE","STACI","LEA","CHRISTI","JIMMIE","JUSTINE","ELMA","LUELLA","MARGRET","DOMINIQUE","SOCORRO","RENE","MARTINA","MARGO","MAVIS","CALLIE","BOBBI","MARITZA","LUCILE","LEANNE","JEANNINE","DEANA","AILEEN","LORIE","LADONNA","WILLA","MANUELA","GALE","SELMA","DOLLY","SYBIL","ABBY","LARA","DALE","IVY","DEE","WINNIE","MARCY","LUISA","JERI","MAGDALENA","OFELIA","MEAGAN","AUDRA","MATILDA","LEILA","CORNELIA","BIANCA","SIMONE","BETTYE","RANDI","VIRGIE","LATISHA","BARBRA","GEORGINA","ELIZA","LEANN","BRIDGETTE","RHODA","HALEY","ADELA","NOLA","BERNADINE","FLOSSIE","ILA","GRETA","RUTHIE","NELDA","MINERVA","LILLY","TERRIE","LETHA","HILARY","ESTELA","VALARIE","BRIANNA","ROSALYN","EARLINE","CATALINA","AVA","MIA","CLARISSA","LIDIA","CORRINE","ALEXANDRIA","CONCEPCION","TIA","SHARRON","RAE","DONA","ERICKA","JAMI","ELNORA","CHANDRA","LENORE","NEVA","MARYLOU","MELISA","TABATHA","SERENA","AVIS","ALLIE","SOFIA","JEANIE","ODESSA","NANNIE","HARRIETT","LORAINE","PENELOPE","MILAGROS","EMILIA","BENITA","ALLYSON","ASHLEE","TANIA","TOMMIE","ESMERALDA","KARINA","EVE","PEARLIE","ZELMA","MALINDA","NOREEN","TAMEKA","SAUNDRA","HILLARY","AMIE","ALTHEA","ROSALINDA","JORDAN","LILIA","ALANA","GAY","CLARE","ALEJANDRA","ELINOR","MICHAEL","LORRIE","JERRI","DARCY","EARNESTINE","CARMELLA","TAYLOR","NOEMI","MARCIE","LIZA","ANNABELLE","LOUISA","EARLENE","MALLORY","CARLENE","NITA","SELENA","TANISHA","KATY","JULIANNE","JOHN","LAKISHA","EDWINA","MARICELA","MARGERY","KENYA","DOLLIE","ROXIE","ROSLYN","KATHRINE","NANETTE","CHARMAINE","LAVONNE","ILENE","KRIS","TAMMI","SUZETTE","CORINE","KAYE","JERRY","MERLE","CHRYSTAL","LINA","DEANNE","LILIAN","JULIANA","ALINE","LUANN","KASEY","MARYANNE","EVANGELINE","COLETTE","MELVA","LAWANDA","YESENIA","NADIA","MADGE","KATHIE","EDDIE","OPHELIA","VALERIA","NONA","MITZI","MARI","GEORGETTE","CLAUDINE","FRAN","ALISSA","ROSEANN","LAKEISHA","SUSANNA","REVA","DEIDRE","CHASITY","SHEREE","CARLY","JAMES","ELVIA","ALYCE","DEIRDRE","GENA","BRIANA","ARACELI","KATELYN","ROSANNE","WENDI","TESSA","BERTA","MARVA","IMELDA","MARIETTA","MARCI","LEONOR","ARLINE","SASHA","MADELYN","JANNA","JULIETTE","DEENA","AURELIA","JOSEFA","AUGUSTA","LILIANA","YOUNG","CHRISTIAN","LESSIE","AMALIA","SAVANNAH","ANASTASIA","VILMA","NATALIA","ROSELLA","LYNNETTE","CORINA","ALFREDA","LEANNA","CAREY","AMPARO","COLEEN","TAMRA","AISHA","WILDA","KARYN","CHERRY","QUEEN","MAURA","MAI","EVANGELINA","ROSANNA","HALLIE","ERNA","ENID","MARIANA","LACY","JULIET","JACKLYN","FREIDA","MADELEINE","MARA","HESTER","CATHRYN","LELIA","CASANDRA","BRIDGETT","ANGELITA","JANNIE","DIONNE","ANNMARIE","KATINA","BERYL","PHOEBE","MILLICENT","KATHERYN","DIANN","CARISSA","MARYELLEN","LIZ","LAURI","HELGA","GILDA","ADRIAN","RHEA","MARQUITA","HOLLIE","TISHA","TAMERA","ANGELIQUE","FRANCESCA","BRITNEY","KAITLIN","LOLITA","FLORINE","ROWENA","REYNA","TWILA","FANNY","JANELL","INES","CONCETTA","BERTIE","ALBA","BRIGITTE","ALYSON","VONDA","PANSY","ELBA","NOELLE","LETITIA","KITTY","DEANN","BRANDIE","LOUELLA","LETA","FELECIA","SHARLENE","LESA","BEVERLEY","ROBERT","ISABELLA","HERMINIA","TERRA","CELINA","TORI","OCTAVIA","JADE","DENICE","GERMAINE","SIERRA","MICHELL","CORTNEY","NELLY","DORETHA","SYDNEY","DEIDRA","MONIKA","LASHONDA","JUDI","CHELSEY","ANTIONETTE","MARGOT","BOBBY","ADELAIDE","NAN","LEEANN","ELISHA","DESSIE","LIBBY","KATHI","GAYLA","LATANYA","MINA","MELLISA","KIMBERLEE","JASMIN","RENAE","ZELDA","ELDA","MA","JUSTINA","GUSSIE","EMILIE","CAMILLA","ABBIE","ROCIO","KAITLYN","JESSE","EDYTHE","ASHLEIGH","SELINA","LAKESHA","GERI","ALLENE","PAMALA","MICHAELA","DAYNA","CARYN","ROSALIA","SUN","JACQULINE","REBECA","MARYBETH","KRYSTLE","IOLA","DOTTIE","BENNIE","BELLE","AUBREY","GRISELDA","ERNESTINA","ELIDA","ADRIANNE","DEMETRIA","DELMA","CHONG","JAQUELINE","DESTINY","ARLEEN","VIRGINA","RETHA","FATIMA","TILLIE","ELEANORE","CARI","TREVA","BIRDIE","WILHELMINA","ROSALEE","MAURINE","LATRICE","YONG","JENA","TARYN","ELIA","DEBBY","MAUDIE","JEANNA","DELILAH","CATRINA","SHONDA","HORTENCIA","THEODORA","TERESITA","ROBBIN","DANETTE","MARYJANE","FREDDIE","DELPHINE","BRIANNE","NILDA","DANNA","CINDI","BESS","IONA","HANNA","ARIEL","WINONA","VIDA","ROSITA","MARIANNA","WILLIAM","RACHEAL","GUILLERMINA","ELOISA","CELESTINE","CAREN","MALISSA","LONA","CHANTEL","SHELLIE","MARISELA","LEORA","AGATHA","SOLEDAD","MIGDALIA","IVETTE","CHRISTEN","ATHENA","JANEL","CHLOE","VEDA","PATTIE","TESSIE","TERA","MARILYNN","LUCRETIA","KARRIE","DINAH","DANIELA","ALECIA","ADELINA","VERNICE","SHIELA","PORTIA","MERRY","LASHAWN","DEVON","DARA","TAWANA","OMA","VERDA","CHRISTIN","ALENE","ZELLA","SANDI","RAFAELA","MAYA","KIRA","CANDIDA","ALVINA","SUZAN","SHAYLA","LYN","LETTIE","ALVA","SAMATHA","ORALIA","MATILDE","MADONNA","LARISSA","VESTA","RENITA","INDIA","DELOIS","SHANDA","PHILLIS","LORRI","ERLINDA","CRUZ","CATHRINE","BARB","ZOE","ISABELL","IONE","GISELA","CHARLIE","VALENCIA","ROXANNA","MAYME","KISHA","ELLIE","MELLISSA","DORRIS","DALIA","BELLA","ANNETTA","ZOILA","RETA","REINA","LAURETTA","KYLIE","CHRISTAL","PILAR","CHARLA","ELISSA","TIFFANI","TANA","PAULINA","LEOTA","BREANNA","JAYME","CARMEL","VERNELL","TOMASA","MANDI","DOMINGA","SANTA","MELODIE","LURA","ALEXA","TAMELA","RYAN","MIRNA","KERRIE","VENUS","NOEL","FELICITA","CRISTY","CARMELITA","BERNIECE","ANNEMARIE","TIARA","ROSEANNE","MISSY","CORI","ROXANA","PRICILLA","KRISTAL","JUNG","ELYSE","HAYDEE","ALETHA","BETTINA","MARGE","GILLIAN","FILOMENA","CHARLES","ZENAIDA","HARRIETTE","CARIDAD","VADA","UNA","ARETHA","PEARLINE","MARJORY","MARCELA","FLOR","EVETTE","ELOUISE","ALINA","TRINIDAD","DAVID","DAMARIS","CATHARINE","CARROLL","BELVA","NAKIA","MARLENA","LUANNE","LORINE","KARON","DORENE","DANITA","BRENNA","TATIANA","SAMMIE","LOUANN","LOREN","JULIANNA","ANDRIA","PHILOMENA","LUCILA","LEONORA","DOVIE","ROMONA","MIMI","JACQUELIN","GAYE","TONJA","MISTI","JOE","GENE","CHASTITY","STACIA","ROXANN","MICAELA","NIKITA","MEI","VELDA","MARLYS","JOHNNA","AURA","LAVERN","IVONNE","HAYLEY","NICKI","MAJORIE","HERLINDA","GEORGE","ALPHA","YADIRA","PERLA","GREGORIA","DANIEL","ANTONETTE","SHELLI","MOZELLE","MARIAH","JOELLE","CORDELIA","JOSETTE","CHIQUITA","TRISTA","LOUIS","LAQUITA","GEORGIANA","CANDI","SHANON","LONNIE","HILDEGARD","CECIL","VALENTINA","STEPHANY","MAGDA","KAROL","GERRY","GABRIELLA","TIANA","ROMA","RICHELLE","RAY","PRINCESS","OLETA","JACQUE","IDELLA","ALAINA","SUZANNA","JOVITA","BLAIR","TOSHA","RAVEN","NEREIDA","MARLYN","KYLA","JOSEPH","DELFINA","TENA","STEPHENIE","SABINA","NATHALIE","MARCELLE","GERTIE","DARLEEN","THEA","SHARONDA","SHANTEL","BELEN","VENESSA","ROSALINA","ONA","GENOVEVA","COREY","CLEMENTINE","ROSALBA","RENATE","RENATA","MI","IVORY","GEORGIANNA","FLOY","DORCAS","ARIANA","TYRA","THEDA","MARIAM","JULI","JESICA","DONNIE","VIKKI","VERLA","ROSELYN","MELVINA","JANNETTE","GINNY","DEBRAH","CORRIE","ASIA","VIOLETA","MYRTIS","LATRICIA","COLLETTE","CHARLEEN","ANISSA","VIVIANA","TWYLA","PRECIOUS","NEDRA","LATONIA","LAN","HELLEN","FABIOLA","ANNAMARIE","ADELL","SHARYN","CHANTAL","NIKI","MAUD","LIZETTE","LINDY","KIA","KESHA","JEANA","DANELLE","CHARLINE","CHANEL","CARROL","VALORIE","LIA","DORTHA","CRISTAL","SUNNY","LEONE","LEILANI","GERRI","DEBI","ANDRA","KESHIA","IMA","EULALIA","EASTER","DULCE","NATIVIDAD","LINNIE","KAMI","GEORGIE","CATINA","BROOK","ALDA","WINNIFRED","SHARLA","RUTHANN","MEAGHAN","MAGDALENE","LISSETTE","ADELAIDA","VENITA","TRENA","SHIRLENE","SHAMEKA","ELIZEBETH","DIAN","SHANTA","MICKEY","LATOSHA","CARLOTTA","WINDY","SOON","ROSINA","MARIANN","LEISA","JONNIE","DAWNA","CATHIE","BILLY","ASTRID","SIDNEY","LAUREEN","JANEEN","HOLLI","FAWN","VICKEY","TERESSA","SHANTE","RUBYE","MARCELINA","CHANDA","CARY","TERESE","SCARLETT","MARTY","MARNIE","LULU","LISETTE","JENIFFER","ELENOR","DORINDA","DONITA","CARMAN","BERNITA","ALTAGRACIA","ALETA","ADRIANNA","ZORAIDA","RONNIE","NICOLA","LYNDSEY","KENDALL","JANINA","CHRISSY","AMI","STARLA","PHYLIS","PHUONG","KYRA","CHARISSE","BLANCH","SANJUANITA","RONA","NANCI","MARILEE","MARANDA","CORY","BRIGETTE","SANJUANA","MARITA","KASSANDRA","JOYCELYN","IRA","FELIPA","CHELSIE","BONNY","MIREYA","LORENZA","KYONG","ILEANA","CANDELARIA","TONY","TOBY","SHERIE","OK","MARK","LUCIE","LEATRICE","LAKESHIA","GERDA","EDIE","BAMBI","MARYLIN","LAVON","HORTENSE","GARNET","EVIE","TRESSA","SHAYNA","LAVINA","KYUNG","JEANETTA","SHERRILL","SHARA","PHYLISS","MITTIE","ANABEL","ALESIA","THUY","TAWANDA","RICHARD","JOANIE","TIFFANIE","LASHANDA","KARISSA","ENRIQUETA","DARIA","DANIELLA","CORINNA","ALANNA","ABBEY","ROXANE","ROSEANNA","MAGNOLIA","LIDA","KYLE","JOELLEN","ERA","CORAL","CARLEEN","TRESA","PEGGIE","NOVELLA","NILA","MAYBELLE","JENELLE","CARINA","NOVA","MELINA","MARQUERITE","MARGARETTE","JOSEPHINA","EVONNE","DEVIN","CINTHIA","ALBINA","TOYA","TAWNYA","SHERITA","SANTOS","MYRIAM","LIZABETH","LISE","KEELY","JENNI","GISELLE","CHERYLE","ARDITH","ARDIS","ALESHA","ADRIANE","SHAINA","LINNEA","KAROLYN","HONG","FLORIDA","FELISHA","DORI","DARCI","ARTIE","ARMIDA","ZOLA","XIOMARA","VERGIE","SHAMIKA","NENA","NANNETTE","MAXIE","LOVIE","JEANE","JAIMIE","INGE","FARRAH","ELAINA","CAITLYN","STARR","FELICITAS","CHERLY","CARYL","YOLONDA","YASMIN","TEENA","PRUDENCE","PENNIE","NYDIA","MACKENZIE","ORPHA","MARVEL","LIZBETH","LAURETTE","JERRIE","HERMELINDA","CAROLEE","TIERRA","MIRIAN","META","MELONY","KORI","JENNETTE","JAMILA","ENA","ANH","YOSHIKO","SUSANNAH","SALINA","RHIANNON","JOLEEN","CRISTINE","ASHTON","ARACELY","TOMEKA","SHALONDA","MARTI","LACIE","KALA","JADA","ILSE","HAILEY","BRITTANI","ZONA","SYBLE","SHERRYL","RANDY","NIDIA","MARLO","KANDICE","KANDI","DEB","DEAN","AMERICA","ALYCIA","TOMMY","RONNA","NORENE","MERCY","JOSE","INGEBORG","GIOVANNA","GEMMA","CHRISTEL","AUDRY","ZORA","VITA","VAN","TRISH","STEPHAINE","SHIRLEE","SHANIKA","MELONIE","MAZIE","JAZMIN","INGA","HOA","HETTIE","GERALYN","FONDA","ESTRELLA","ADELLA","SU","SARITA","RINA","MILISSA","MARIBETH","GOLDA","EVON","ETHELYN","ENEDINA","CHERISE","CHANA","VELVA","TAWANNA","SADE","MIRTA","LI","KARIE","JACINTA","ELNA","DAVINA","CIERRA","ASHLIE","ALBERTHA","TANESHA","STEPHANI","NELLE","MINDI","LU","LORINDA","LARUE","FLORENE","DEMETRA","DEDRA","CIARA","CHANTELLE","ASHLY","SUZY","ROSALVA","NOELIA","LYDA","LEATHA","KRYSTYNA","KRISTAN","KARRI","DARLINE","DARCIE","CINDA","CHEYENNE","CHERRIE","AWILDA","ALMEDA","ROLANDA","LANETTE","JERILYN","GISELE","EVALYN","CYNDI","CLETA","CARIN","ZINA","ZENA","VELIA","TANIKA","PAUL","CHARISSA","THOMAS","TALIA","MARGARETE","LAVONDA","KAYLEE","KATHLENE","JONNA","IRENA","ILONA","IDALIA","CANDIS","CANDANCE","BRANDEE","ANITRA","ALIDA","SIGRID","NICOLETTE","MARYJO","LINETTE","HEDWIG","CHRISTIANA","CASSIDY","ALEXIA","TRESSIE","MODESTA","LUPITA","LITA","GLADIS","EVELIA","DAVIDA","CHERRI","CECILY","ASHELY","ANNABEL","AGUSTINA","WANITA","SHIRLY","ROSAURA","HULDA","EUN","BAILEY","YETTA","VERONA","THOMASINA","SIBYL","SHANNAN","MECHELLE","LUE","LEANDRA","LANI","KYLEE","KANDY","JOLYNN","FERNE","EBONI","CORENE","ALYSIA","ZULA","NADA","MOIRA","LYNDSAY","LORRETTA","JUAN","JAMMIE","HORTENSIA","GAYNELL","CAMERON","ADRIA","VINA","VICENTA","TANGELA","STEPHINE","NORINE","NELLA","LIANA","LESLEE","KIMBERELY","ILIANA","GLORY","FELICA","EMOGENE","ELFRIEDE","EDEN","EARTHA","CARMA","BEA","OCIE","MARRY","LENNIE","KIARA","JACALYN","CARLOTA","ARIELLE","YU","STAR","OTILIA","KIRSTIN","KACEY","JOHNETTA","JOEY","JOETTA","JERALDINE","JAUNITA","ELANA","DORTHEA","CAMI","AMADA","ADELIA","VERNITA","TAMAR","SIOBHAN","RENEA","RASHIDA","OUIDA","ODELL","NILSA","MERYL","KRISTYN","JULIETA","DANICA","BREANNE","AUREA","ANGLEA","SHERRON","ODETTE","MALIA","LORELEI","LIN","LEESA","KENNA","KATHLYN","FIONA","CHARLETTE","SUZIE","SHANTELL","SABRA","RACQUEL","MYONG","MIRA","MARTINE","LUCIENNE","LAVADA","JULIANN","JOHNIE","ELVERA","DELPHIA","CLAIR","CHRISTIANE","CHAROLETTE","CARRI","AUGUSTINE","ASHA","ANGELLA","PAOLA","NINFA","LEDA","LAI","EDA","SUNSHINE","STEFANI","SHANELL","PALMA","MACHELLE","LISSA","KECIA","KATHRYNE","KARLENE","JULISSA","JETTIE","JENNIFFER","HUI","CORRINA","CHRISTOPHER","CAROLANN","ALENA","TESS","ROSARIA","MYRTICE","MARYLEE","LIANE","KENYATTA","JUDIE","JANEY","IN","ELMIRA","ELDORA","DENNA","CRISTI","CATHI","ZAIDA","VONNIE","VIVA","VERNIE","ROSALINE","MARIELA","LUCIANA","LESLI","KARAN","FELICE","DENEEN","ADINA","WYNONA","TARSHA","SHERON","SHASTA","SHANITA","SHANI","SHANDRA","RANDA","PINKIE","PARIS","NELIDA","MARILOU","LYLA","LAURENE","LACI","JOI","JANENE","DOROTHA","DANIELE","DANI","CAROLYNN","CARLYN","BERENICE","AYESHA","ANNELIESE","ALETHEA","THERSA","TAMIKO","RUFINA","OLIVA","MOZELL","MARYLYN","MADISON","KRISTIAN","KATHYRN","KASANDRA","KANDACE","JANAE","GABRIEL","DOMENICA","DEBBRA","DANNIELLE","CHUN","BUFFY","BARBIE","ARCELIA","AJA","ZENOBIA","SHAREN","SHAREE","PATRICK","PAGE","MY","LAVINIA","KUM","KACIE","JACKELINE","HUONG","FELISA","EMELIA","ELEANORA","CYTHIA","CRISTIN","CLYDE","CLARIBEL","CARON","ANASTACIA","ZULMA","ZANDRA","YOKO","TENISHA","SUSANN","SHERILYN","SHAY","SHAWANDA","SABINE","ROMANA","MATHILDA","LINSEY","KEIKO","JOANA","ISELA","GRETTA","GEORGETTA","EUGENIE","DUSTY","DESIRAE","DELORA","CORAZON","ANTONINA","ANIKA","WILLENE","TRACEE","TAMATHA","REGAN","NICHELLE","MICKIE","MAEGAN","LUANA","LANITA","KELSIE","EDELMIRA","BREE","AFTON","TEODORA","TAMIE","SHENA","MEG","LINH","KELI","KACI","DANYELLE","BRITT","ARLETTE","ALBERTINE","ADELLE","TIFFINY","STORMY","SIMONA","NUMBERS","NICOLASA","NICHOL","NIA","NAKISHA","MEE","MAIRA","LOREEN","KIZZY","JOHNNY","JAY","FALLON","CHRISTENE","BOBBYE","ANTHONY","YING","VINCENZA","TANJA","RUBIE","RONI","QUEENIE","MARGARETT","KIMBERLI","IRMGARD","IDELL","HILMA","EVELINA","ESTA","EMILEE","DENNISE","DANIA","CARL","CARIE","ANTONIO","WAI","SANG","RISA","RIKKI","PARTICIA","MUI","MASAKO","MARIO","LUVENIA","LOREE","LONI","LIEN","KEVIN","GIGI","FLORENCIA","DORIAN","DENITA","DALLAS","CHI","BILLYE","ALEXANDER","TOMIKA","SHARITA","RANA","NIKOLE","NEOMA","MARGARITE","MADALYN","LUCINA","LAILA","KALI","JENETTE","GABRIELE","EVELYNE","ELENORA","CLEMENTINA","ALEJANDRINA","ZULEMA","VIOLETTE","VANNESSA","THRESA","RETTA","PIA","PATIENCE","NOELLA","NICKIE","JONELL","DELTA","CHUNG","CHAYA","CAMELIA","BETHEL","ANYA","ANDREW","THANH","SUZANN","SPRING","SHU","MILA","LILLA","LAVERNA","KEESHA","KATTIE","GIA","GEORGENE","EVELINE","ESTELL","ELIZBETH","VIVIENNE","VALLIE","TRUDIE","STEPHANE","MICHEL","MAGALY","MADIE","KENYETTA","KARREN","JANETTA","HERMINE","HARMONY","DRUCILLA","DEBBI","CELESTINA","CANDIE","BRITNI","BECKIE","AMINA","ZITA","YUN","YOLANDE","VIVIEN","VERNETTA","TRUDI","SOMMER","PEARLE","PATRINA","OSSIE","NICOLLE","LOYCE","LETTY","LARISA","KATHARINA","JOSELYN","JONELLE","JENELL","IESHA","HEIDE","FLORINDA","FLORENTINA","FLO","ELODIA","DORINE","BRUNILDA","BRIGID","ASHLI","ARDELLA","TWANA","THU","TARAH","SUNG","SHEA","SHAVON","SHANE","SERINA","RAYNA","RAMONITA","NGA","MARGURITE","LUCRECIA","KOURTNEY","KATI","JESUS","JESENIA","DIAMOND","CRISTA","AYANA","ALICA","ALIA","VINNIE","SUELLEN","ROMELIA","RACHELL","PIPER","OLYMPIA","MICHIKO","KATHALEEN","JOLIE","JESSI","JANESSA","HANA","HA","ELEASE","CARLETTA","BRITANY","SHONA","SALOME","ROSAMOND","REGENA","RAINA","NGOC","NELIA","LOUVENIA","LESIA","LATRINA","LATICIA","LARHONDA","JINA","JACKI","HOLLIS","HOLLEY","EMMY","DEEANN","CORETTA","ARNETTA","VELVET","THALIA","SHANICE","NETA","MIKKI","MICKI","LONNA","LEANA","LASHUNDA","KILEY","JOYE","JACQULYN","IGNACIA","HYUN","HIROKO","HENRY","HENRIETTE","ELAYNE","DELINDA","DARNELL","DAHLIA","COREEN","CONSUELA","CONCHITA","CELINE","BABETTE","AYANNA","ANETTE","ALBERTINA","SKYE","SHAWNEE","SHANEKA","QUIANA","PAMELIA","MIN","MERRI","MERLENE","MARGIT","KIESHA","KIERA","KAYLENE","JODEE","JENISE","ERLENE","EMMIE","ELSE","DARYL","DALILA","DAISEY","CODY","CASIE","BELIA","BABARA","VERSIE","VANESA","SHELBA","SHAWNDA","SAM","NORMAN","NIKIA","NAOMA","MARNA","MARGERET","MADALINE","LAWANA","KINDRA","JUTTA","JAZMINE","JANETT","HANNELORE","GLENDORA","GERTRUD","GARNETT","FREEDA","FREDERICA","FLORANCE","FLAVIA","DENNIS","CARLINE","BEVERLEE","ANJANETTE","VALDA","TRINITY","TAMALA","STEVIE","SHONNA","SHA","SARINA","ONEIDA","MICAH","MERILYN","MARLEEN","LURLINE","LENNA","KATHERIN","JIN","JENI","HAE","GRACIA","GLADY","FARAH","ERIC","ENOLA","EMA","DOMINQUE","DEVONA","DELANA","CECILA","CAPRICE","ALYSHA","ALI","ALETHIA","VENA","THERESIA","TAWNY","SONG","SHAKIRA","SAMARA","SACHIKO","RACHELE","PAMELLA","NICKY","MARNI","MARIEL","MAREN","MALISA","LIGIA","LERA","LATORIA","LARAE","KIMBER","KATHERN","KAREY","JENNEFER","JANETH","HALINA","FREDIA","DELISA","DEBROAH","CIERA","CHIN","ANGELIKA","ANDREE","ALTHA","YEN","VIVAN","TERRESA","TANNA","SUK","SUDIE","SOO","SIGNE","SALENA","RONNI","REBBECCA","MYRTIE","MCKENZIE","MALIKA","MAIDA","LOAN","LEONARDA","KAYLEIGH","FRANCE","ETHYL","ELLYN","DAYLE","CAMMIE","BRITTNI","BIRGIT","AVELINA","ASUNCION","ARIANNA","AKIKO","VENICE","TYESHA","TONIE","TIESHA","TAKISHA","STEFFANIE","SINDY","SANTANA","MEGHANN","MANDA","MACIE","LADY","KELLYE","KELLEE","JOSLYN","JASON","INGER","INDIRA","GLINDA","GLENNIS","FERNANDA","FAUSTINA","ENEIDA","ELICIA","DOT","DIGNA","DELL","ARLETTA","ANDRE","WILLIA","TAMMARA","TABETHA","SHERRELL","SARI","REFUGIO","REBBECA","PAULETTA","NIEVES","NATOSHA","NAKITA","MAMMIE","KENISHA","KAZUKO","KASSIE","GARY","EARLEAN","DAPHINE","CORLISS","CLOTILDE","CAROLYNE","BERNETTA","AUGUSTINA","AUDREA","ANNIS","ANNABELL","YAN","TENNILLE","TAMICA","SELENE","SEAN","ROSANA","REGENIA","QIANA","MARKITA","MACY","LEEANNE","LAURINE","KYM","JESSENIA","JANITA","GEORGINE","GENIE","EMIKO","ELVIE","DEANDRA","DAGMAR","CORIE","COLLEN","CHERISH","ROMAINE","PORSHA","PEARLENE","MICHELINE","MERNA","MARGORIE","MARGARETTA","LORE","KENNETH","JENINE","HERMINA","FREDERICKA","ELKE","DRUSILLA","DORATHY","DIONE","DESIRE","CELENA","BRIGIDA","ANGELES","ALLEGRA","THEO","TAMEKIA","SYNTHIA","STEPHEN","SOOK","SLYVIA","ROSANN","REATHA","RAYE","MARQUETTA","MARGART","LING","LAYLA","KYMBERLY","KIANA","KAYLEEN","KATLYN","KARMEN","JOELLA","IRINA","EMELDA","ELENI","DETRA","CLEMMIE","CHERYLL","CHANTELL","CATHEY","ARNITA","ARLA","ANGLE","ANGELIC","ALYSE","ZOFIA","THOMASINE","TENNIE","SON","SHERLY","SHERLEY","SHARYL","REMEDIOS","PETRINA","NICKOLE","MYUNG","MYRLE","MOZELLA","LOUANNE","LISHA","LATIA","LANE","KRYSTA","JULIENNE","JOEL","JEANENE","JACQUALINE","ISAURA","GWENDA","EARLEEN","DONALD","CLEOPATRA","CARLIE","AUDIE","ANTONIETTA","ALISE","ALEX","VERDELL","VAL","TYLER","TOMOKO","THAO","TALISHA","STEVEN","SO","SHEMIKA","SHAUN","SCARLET","SAVANNA","SANTINA","ROSIA","RAEANN","ODILIA","NANA","MINNA","MAGAN","LYNELLE","LE","KARMA","JOEANN","IVANA","INELL","ILANA","HYE","HONEY","HEE","GUDRUN","FRANK","DREAMA","CRISSY","CHANTE","CARMELINA","ARVILLA","ARTHUR","ANNAMAE","ALVERA","ALEIDA","AARON","YEE","YANIRA","VANDA","TIANNA","TAM","STEFANIA","SHIRA","PERRY","NICOL","NANCIE","MONSERRATE","MINH","MELYNDA","MELANY","MATTHEW","LOVELLA","LAURE","KIRBY","KACY","JACQUELYNN","HYON","GERTHA","FRANCISCO","ELIANA","CHRISTENA","CHRISTEEN","CHARISE","CATERINA","CARLEY","CANDYCE","ARLENA","AMMIE","YANG","WILLETTE","VANITA","TUYET","TINY","SYREETA","SILVA","SCOTT","RONALD","PENNEY","NYLA","MICHAL","MAURICE","MARYAM","MARYA","MAGEN","LUDIE","LOMA","LIVIA","LANELL","KIMBERLIE","JULEE","DONETTA","DIEDRA","DENISHA","DEANE","DAWNE","CLARINE","CHERRYL","BRONWYN","BRANDON","ALLA","VALERY","TONDA","SUEANN","SORAYA","SHOSHANA","SHELA","SHARLEEN","SHANELLE","NERISSA","MICHEAL","MERIDITH","MELLIE","MAYE","MAPLE","MAGARET","LUIS","LILI","LEONILA","LEONIE","LEEANNA","LAVONIA","LAVERA","KRISTEL","KATHEY","KATHE","JUSTIN","JULIAN","JIMMY","JANN","ILDA","HILDRED","HILDEGARDE","GENIA","FUMIKO","EVELIN","ERMELINDA","ELLY","DUNG","DOLORIS","DIONNA","DANAE","BERNEICE","ANNICE","ALIX","VERENA","VERDIE","TRISTAN","SHAWNNA","SHAWANA","SHAUNNA","ROZELLA","RANDEE","RANAE","MILAGRO","LYNELL","LUISE","LOUIE","LOIDA","LISBETH","KARLEEN","JUNITA","JONA","ISIS","HYACINTH","HEDY","GWENN","ETHELENE","ERLINE","EDWARD","DONYA","DOMONIQUE","DELICIA","DANNETTE","CICELY","BRANDA","BLYTHE","BETHANN","ASHLYN","ANNALEE","ALLINE","YUKO","VELLA","TRANG","TOWANDA","TESHA","SHERLYN","NARCISA","MIGUELINA","MERI","MAYBELL","MARLANA","MARGUERITA","MADLYN","LUNA","LORY","LORIANN","LIBERTY","LEONORE","LEIGHANN","LAURICE","LATESHA","LARONDA","KATRICE","KASIE","KARL","KALEY","JADWIGA","GLENNIE","GEARLDINE","FRANCINA","EPIFANIA","DYAN","DORIE","DIEDRE","DENESE","DEMETRICE","DELENA","DARBY","CRISTIE","CLEORA","CATARINA","CARISA","BERNIE","BARBERA","ALMETA","TRULA","TEREASA","SOLANGE","SHEILAH","SHAVONNE","SANORA","ROCHELL","MATHILDE","MARGARETA","MAIA","LYNSEY","LAWANNA","LAUNA","KENA","KEENA","KATIA","JAMEY","GLYNDA","GAYLENE","ELVINA","ELANOR","DANUTA","DANIKA","CRISTEN","CORDIE","COLETTA","CLARITA","CARMON","BRYNN","AZUCENA","AUNDREA","ANGELE","YI","WALTER","VERLIE","VERLENE","TAMESHA","SILVANA","SEBRINA","SAMIRA","REDA","RAYLENE","PENNI","PANDORA","NORAH","NOMA","MIREILLE","MELISSIA","MARYALICE","LARAINE","KIMBERY","KARYL","KARINE","KAM","JOLANDA","JOHANA","JESUSA","JALEESA","JAE","JACQUELYNE","IRISH","ILUMINADA","HILARIA","HANH","GENNIE","FRANCIE","FLORETTA","EXIE","EDDA","DREMA","DELPHA","BEV","BARBAR","ASSUNTA","ARDELL","ANNALISA","ALISIA","YUKIKO","YOLANDO","WONDA","WEI","WALTRAUD","VETA","TEQUILA","TEMEKA","TAMEIKA","SHIRLEEN","SHENITA","PIEDAD","OZELLA","MIRTHA","MARILU","KIMIKO","JULIANE","JENICE","JEN","JANAY","JACQUILINE","HILDE","FE","FAE","EVAN","EUGENE","ELOIS","ECHO","DEVORAH","CHAU","BRINDA","BETSEY","ARMINDA","ARACELIS","APRYL","ANNETT","ALISHIA","VEOLA","USHA","TOSHIKO","THEOLA","TASHIA","TALITHA","SHERY","RUDY","RENETTA","REIKO","RASHEEDA","OMEGA","OBDULIA","MIKA","MELAINE","MEGGAN","MARTIN","MARLEN","MARGET","MARCELINE","MANA","MAGDALEN","LIBRADA","LEZLIE","LEXIE","LATASHIA","LASANDRA","KELLE","ISIDRA","ISA","INOCENCIA","GWYN","FRANCOISE","ERMINIA","ERINN","DIMPLE","DEVORA","CRISELDA","ARMANDA","ARIE","ARIANE","ANGELO","ANGELENA","ALLEN","ALIZA","ADRIENE","ADALINE","XOCHITL","TWANNA","TRAN","TOMIKO","TAMISHA","TAISHA","SUSY","SIU","RUTHA","ROXY","RHONA","RAYMOND","OTHA","NORIKO","NATASHIA","MERRIE","MELVIN","MARINDA","MARIKO","MARGERT","LORIS","LIZZETTE","LEISHA","KAILA","KA","JOANNIE","JERRICA","JENE","JANNET","JANEE","JACINDA","HERTA","ELENORE","DORETTA","DELAINE","DANIELL","CLAUDIE","CHINA","BRITTA","APOLONIA","AMBERLY","ALEASE","YURI","YUK","WEN","WANETA","UTE","TOMI","SHARRI","SANDIE","ROSELLE","REYNALDA","RAGUEL","PHYLICIA","PATRIA","OLIMPIA","ODELIA","MITZIE","MITCHELL","MISS","MINDA","MIGNON","MICA","MENDY","MARIVEL","MAILE","LYNETTA","LAVETTE","LAURYN","LATRISHA","LAKIESHA","KIERSTEN","KARY","JOSPHINE","JOLYN","JETTA","JANISE","JACQUIE","IVELISSE","GLYNIS","GIANNA","GAYNELLE","EMERALD","DEMETRIUS","DANYELL","DANILLE","DACIA","CORALEE","CHER","CEOLA","BRETT","BELL","ARIANNE","ALESHIA","YUNG","WILLIEMAE","TROY","TRINH","THORA","TAI","SVETLANA","SHERIKA","SHEMEKA","SHAUNDA","ROSELINE","RICKI","MELDA","MALLIE","LAVONNA","LATINA","LARRY","LAQUANDA","LALA","LACHELLE","KLARA","KANDIS","JOHNA","JEANMARIE","JAYE","HANG","GRAYCE","GERTUDE","EMERITA","EBONIE","CLORINDA","CHING","CHERY","CAROLA","BREANN","BLOSSOM","BERNARDINE","BECKI","ARLETHA","ARGELIA","ARA","ALITA","YULANDA","YON","YESSENIA","TOBI","TASIA","SYLVIE","SHIRL","SHIRELY","SHERIDAN","SHELLA","SHANTELLE","SACHA","ROYCE","REBECKA","REAGAN","PROVIDENCIA","PAULENE","MISHA","MIKI","MARLINE","MARICA","LORITA","LATOYIA","LASONYA","KERSTIN","KENDA","KEITHA","KATHRIN","JAYMIE","JACK","GRICELDA","GINETTE","ERYN","ELINA","ELFRIEDA","DANYEL","CHEREE","CHANELLE","BARRIE","AVERY","AURORE","ANNAMARIA","ALLEEN","AILENE","AIDE","YASMINE","VASHTI","VALENTINE","TREASA","TORY","TIFFANEY","SHERYLL","SHARIE","SHANAE","SAU","RAISA","PA","NEDA","MITSUKO","MIRELLA","MILDA","MARYANNA","MARAGRET","MABELLE","LUETTA","LORINA","LETISHA","LATARSHA","LANELLE","LAJUANA","KRISSY","KARLY","KARENA","JON","JESSIKA","JERICA","JEANELLE","JANUARY","JALISA","JACELYN","IZOLA","IVEY","GREGORY","EUNA","ETHA","DREW","DOMITILA","DOMINICA","DAINA","CREOLA","CARLI","CAMIE","BUNNY","BRITTNY","ASHANTI","ANISHA","ALEEN","ADAH","YASUKO","WINTER","VIKI","VALRIE","TONA","TINISHA","THI","TERISA","TATUM","TANEKA","SIMONNE","SHALANDA","SERITA","RESSIE","REFUGIA","PAZ","OLENE","NA","MERRILL","MARGHERITA","MANDIE","MAN","MAIRE","LYNDIA","LUCI","LORRIANE","LORETA","LEONIA","LAVONA","LASHAWNDA","LAKIA","KYOKO","KRYSTINA","KRYSTEN","KENIA","KELSI","JUDE","JEANICE","ISOBEL","GEORGIANN","GENNY","FELICIDAD","EILENE","DEON","DELOISE","DEEDEE","DANNIE","CONCEPTION","CLORA","CHERILYN","CHANG","CALANDRA","BERRY","ARMANDINA","ANISA","ULA","TIMOTHY","TIERA","THERESSA","STEPHANIA","SIMA","SHYLA","SHONTA","SHERA","SHAQUITA","SHALA","SAMMY","ROSSANA","NOHEMI","NERY","MORIAH","MELITA","MELIDA","MELANI","MARYLYNN","MARISHA","MARIETTE","MALORIE","MADELENE","LUDIVINA","LORIA","LORETTE","LORALEE","LIANNE","LEON","LAVENIA","LAURINDA","LASHON","KIT","KIMI","KEILA","KATELYNN","KAI","JONE","JOANE","JI","JAYNA","JANELLA","JA","HUE","HERTHA","FRANCENE","ELINORE","DESPINA","DELSIE","DEEDRA","CLEMENCIA","CARRY","CAROLIN","CARLOS","BULAH","BRITTANIE","BOK","BLONDELL","BIBI","BEAULAH","BEATA","ANNITA","AGRIPINA","VIRGEN","VALENE","UN","TWANDA","TOMMYE","TOI","TARRA","TARI","TAMMERA","SHAKIA","SADYE","RUTHANNE","ROCHEL","RIVKA","PURA","NENITA","NATISHA","MING","MERRILEE","MELODEE","MARVIS","LUCILLA","LEENA","LAVETA","LARITA","LANIE","KEREN","ILEEN","GEORGEANN","GENNA","GENESIS","FRIDA","EWA","EUFEMIA","EMELY","ELA","EDYTH","DEONNA","DEADRA","DARLENA","CHANELL","CHAN","CATHERN","CASSONDRA","CASSAUNDRA","BERNARDA","BERNA","ARLINDA","ANAMARIA","ALBERT","WESLEY","VERTIE","VALERI","TORRI","TATYANA","STASIA","SHERISE","SHERILL","SEASON","SCOTTIE","SANDA","RUTHE","ROSY","ROBERTO","ROBBI","RANEE","QUYEN","PEARLY","PALMIRA","ONITA","NISHA","NIESHA","NIDA","NEVADA","NAM","MERLYN","MAYOLA","MARYLOUISE","MARYLAND","MARX","MARTH","MARGENE","MADELAINE","LONDA","LEONTINE","LEOMA","LEIA","LAWRENCE","LAURALEE","LANORA","LAKITA","KIYOKO","KETURAH","KATELIN","KAREEN","JONIE","JOHNETTE","JENEE","JEANETT","IZETTA","HIEDI","HEIKE","HASSIE","HAROLD","GIUSEPPINA","GEORGANN","FIDELA","FERNANDE","ELWANDA","ELLAMAE","ELIZ","DUSTI","DOTTY","CYNDY","CORALIE","CELESTA","ARGENTINA","ALVERTA","XENIA","WAVA","VANETTA","TORRIE","TASHINA","TANDY","TAMBRA","TAMA","STEPANIE","SHILA","SHAUNTA","SHARAN","SHANIQUA","SHAE","SETSUKO","SERAFINA","SANDEE","ROSAMARIA","PRISCILA","OLINDA","NADENE","MUOI","MICHELINA","MERCEDEZ","MARYROSE","MARIN","MARCENE","MAO","MAGALI","MAFALDA","LOGAN","LINN","LANNIE","KAYCE","KAROLINE","KAMILAH","KAMALA","JUSTA","JOLINE","JENNINE","JACQUETTA","IRAIDA","GERALD","GEORGEANNA","FRANCHESCA","FAIRY","EMELINE","ELANE","EHTEL","EARLIE","DULCIE","DALENE","CRIS","CLASSIE","CHERE","CHARIS","CAROYLN","CARMINA","CARITA","BRIAN","BETHANIE","AYAKO","ARICA","AN","ALYSA","ALESSANDRA","AKILAH","ADRIEN","ZETTA","YOULANDA","YELENA","YAHAIRA","XUAN","WENDOLYN","VICTOR","TIJUANA","TERRELL","TERINA","TERESIA","SUZI","SUNDAY","SHERELL","SHAVONDA","SHAUNTE","SHARDA","SHAKITA","SENA","RYANN","RUBI","RIVA","REGINIA","REA","RACHAL","PARTHENIA","PAMULA","MONNIE","MONET","MICHAELE","MELIA","MARINE","MALKA","MAISHA","LISANDRA","LEO","LEKISHA","LEAN","LAURENCE","LAKENDRA","KRYSTIN","KORTNEY","KIZZIE","KITTIE","KERA","KENDAL","KEMBERLY","KANISHA","JULENE","JULE","JOSHUA","JOHANNE","JEFFREY","JAMEE","HAN","HALLEY","GIDGET","GALINA","FREDRICKA","FLETA","FATIMAH","EUSEBIA","ELZA","ELEONORE","DORTHEY","DORIA","DONELLA","DINORAH","DELORSE","CLARETHA","CHRISTINIA","CHARLYN","BONG","BELKIS","AZZIE","ANDERA","AIKO","ADENA","YER","YAJAIRA","WAN","VANIA","ULRIKE","TOSHIA","TIFANY","STEFANY","SHIZUE","SHENIKA","SHAWANNA","SHAROLYN","SHARILYN","SHAQUANA","SHANTAY","SEE","ROZANNE","ROSELEE","RICKIE","REMONA","REANNA","RAELENE","QUINN","PHUNG","PETRONILA","NATACHA","NANCEY","MYRL","MIYOKO","MIESHA","MERIDETH","MARVELLA","MARQUITTA","MARHTA","MARCHELLE","LIZETH","LIBBIE","LAHOMA","LADAWN","KINA","KATHELEEN","KATHARYN","KARISA","KALEIGH","JUNIE","JULIEANN","JOHNSIE","JANEAN","JAIMEE","JACKQUELINE","HISAKO","HERMA","HELAINE","GWYNETH","GLENN","GITA","EUSTOLIA","EMELINA","ELIN","EDRIS","DONNETTE","DONNETTA","DIERDRE","DENAE","DARCEL","CLAUDE","CLARISA","CINDERELLA","CHIA","CHARLESETTA","CHARITA","CELSA","CASSY","CASSI","CARLEE","BRUNA","BRITTANEY","BRANDE","BILLI","BAO","ANTONETTA","ANGLA","ANGELYN","ANALISA","ALANE","WENONA","WENDIE","VERONIQUE","VANNESA","TOBIE","TEMPIE","SUMIKO","SULEMA","SPARKLE","SOMER","SHEBA","SHAYNE","SHARICE","SHANEL","SHALON","SAGE","ROY","ROSIO","ROSELIA","RENAY","REMA","REENA","PORSCHE","PING","PEG","OZIE","ORETHA","ORALEE","ODA","NU","NGAN","NAKESHA","MILLY","MARYBELLE","MARLIN","MARIS","MARGRETT","MARAGARET","MANIE","LURLENE","LILLIA","LIESELOTTE","LAVELLE","LASHAUNDA","LAKEESHA","KEITH","KAYCEE","KALYN","JOYA","JOETTE","JENAE","JANIECE","ILLA","GRISEL","GLAYDS","GENEVIE","GALA","FREDDA","FRED","ELMER","ELEONOR","DEBERA","DEANDREA","DAN","CORRINNE","CORDIA","CONTESSA","COLENE","CLEOTILDE","CHARLOTT","CHANTAY","CECILLE","BEATRIS","AZALEE","ARLEAN","ARDATH","ANJELICA","ANJA","ALFREDIA","ALEISHA","ADAM","ZADA","YUONNE","XIAO","WILLODEAN","WHITLEY","VENNIE","VANNA","TYISHA","TOVA","TORIE","TONISHA","TILDA","TIEN","TEMPLE","SIRENA","SHERRIL","SHANTI","SHAN","SENAIDA","SAMELLA","ROBBYN","RENDA","REITA","PHEBE","PAULITA","NOBUKO","NGUYET","NEOMI","MOON","MIKAELA","MELANIA","MAXIMINA","MARG","MAISIE","LYNNA","LILLI","LAYNE","LASHAUN","LAKENYA","LAEL","KIRSTIE","KATHLINE","KASHA","KARLYN","KARIMA","JOVAN","JOSEFINE","JENNELL","JACQUI","JACKELYN","HYO","HIEN","GRAZYNA","FLORRIE","FLORIA","ELEONORA","DWANA","DORLA","DONG","DELMY","DEJA","DEDE","DANN","CRYSTA","CLELIA","CLARIS","CLARENCE","CHIEKO","CHERLYN","CHERELLE","CHARMAIN","CHARA","CAMMY","BEE","ARNETTE","ARDELLE","ANNIKA","AMIEE","AMEE","ALLENA","YVONE","YUKI","YOSHIE","YEVETTE","YAEL","WILLETTA","VONCILE","VENETTA","TULA","TONETTE","TIMIKA","TEMIKA","TELMA","TEISHA","TAREN","TA","STACEE","SHIN","SHAWNTA","SATURNINA","RICARDA","POK","PASTY","ONIE","NUBIA","MORA","MIKE","MARIELLE","MARIELLA","MARIANELA","MARDELL","MANY","LUANNA","LOISE","LISABETH","LINDSY","LILLIANA","LILLIAM","LELAH","LEIGHA","LEANORA","LANG","KRISTEEN","KHALILAH","KEELEY","KANDRA","JUNKO","JOAQUINA","JERLENE","JANI","JAMIKA","JAME","HSIU","HERMILA","GOLDEN","GENEVIVE","EVIA","EUGENA","EMMALINE","ELFREDA","ELENE","DONETTE","DELCIE","DEEANNA","DARCEY","CUC","CLARINDA","CIRA","CHAE","CELINDA","CATHERYN","CATHERIN","CASIMIRA","CARMELIA","CAMELLIA","BREANA","BOBETTE","BERNARDINA","BEBE","BASILIA","ARLYNE","AMAL","ALAYNA","ZONIA","ZENIA","YURIKO","YAEKO","WYNELL","WILLOW","WILLENA","VERNIA","TU","TRAVIS","TORA","TERRILYN","TERICA","TENESHA","TAWNA","TAJUANA","TAINA","STEPHNIE","SONA","SOL","SINA","SHONDRA","SHIZUKO","SHERLENE","SHERICE","SHARIKA","ROSSIE","ROSENA","RORY","RIMA","RIA","RHEBA","RENNA","PETER","NATALYA","NANCEE","MELODI","MEDA","MAXIMA","MATHA","MARKETTA","MARICRUZ","MARCELENE","MALVINA","LUBA","LOUETTA","LEIDA","LECIA","LAURAN","LASHAWNA","LAINE","KHADIJAH","KATERINE","KASI","KALLIE","JULIETTA","JESUSITA","JESTINE","JESSIA","JEREMY","JEFFIE","JANYCE","ISADORA","GEORGIANNE","FIDELIA","EVITA","EURA","EULAH","ESTEFANA","ELSY","ELIZABET","ELADIA","DODIE","DION","DIA","DENISSE","DELORAS","DELILA","DAYSI","DAKOTA","CURTIS","CRYSTLE","CONCHA","COLBY","CLARETTA","CHU","CHRISTIA","CHARLSIE","CHARLENA","CARYLON","BETTYANN","ASLEY","ASHLEA","AMIRA","AI","AGUEDA","AGNUS","YUETTE","VINITA","VICTORINA","TYNISHA","TREENA","TOCCARA","TISH","THOMASENA","TEGAN","SOILA","SHILOH","SHENNA","SHARMAINE","SHANTAE","SHANDI","SEPTEMBER","SARAN","SARAI","SANA","SAMUEL","SALLEY","ROSETTE","ROLANDE","REGINE","OTELIA","OSCAR","OLEVIA","NICHOLLE","NECOLE","NAIDA","MYRTA","MYESHA","MITSUE","MINTA","MERTIE","MARGY","MAHALIA","MADALENE","LOVE","LOURA","LOREAN","LEWIS","LESHA","LEONIDA","LENITA","LAVONE","LASHELL","LASHANDRA","LAMONICA","KIMBRA","KATHERINA","KARRY","KANESHA","JULIO","JONG","JENEVA","JAQUELYN","HWA","GILMA","GHISLAINE","GERTRUDIS","FRANSISCA","FERMINA","ETTIE","ETSUKO","ELLIS","ELLAN","ELIDIA","EDRA","DORETHEA","DOREATHA","DENYSE","DENNY","DEETTA","DAINE","CYRSTAL","CORRIN","CAYLA","CARLITA","CAMILA","BURMA","BULA","BUENA","BLAKE","BARABARA","AVRIL","AUSTIN","ALAINE","ZANA","WILHEMINA","WANETTA","VIRGIL","VI","VERONIKA","VERNON","VERLINE","VASILIKI","TONITA","TISA","TEOFILA","TAYNA","TAUNYA","TANDRA","TAKAKO","SUNNI","SUANNE","SIXTA","SHARELL","SEEMA","RUSSELL","ROSENDA","ROBENA","RAYMONDE","PEI","PAMILA","OZELL","NEIDA","NEELY","MISTIE","MICHA","MERISSA","MAURITA","MARYLN","MARYETTA","MARSHALL","MARCELL","MALENA","MAKEDA","MADDIE","LOVETTA","LOURIE","LORRINE","LORILEE","LESTER","LAURENA","LASHAY","LARRAINE","LAREE","LACRESHA","KRISTLE","KRISHNA","KEVA","KEIRA","KAROLE","JOIE","JINNY","JEANNETTA","JAMA","HEIDY","GILBERTE","GEMA","FAVIOLA","EVELYNN","ENDA","ELLI","ELLENA","DIVINA","DAGNY","COLLENE","CODI","CINDIE","CHASSIDY","CHASIDY","CATRICE","CATHERINA","CASSEY","CAROLL","CARLENA","CANDRA","CALISTA","BRYANNA","BRITTENY","BEULA","BARI","AUDRIE","AUDRIA","ARDELIA","ANNELLE","ANGILA","ALONA","ALLYN","DOUGLAS","ROGER","JONATHAN","RALPH","NICHOLAS","BENJAMIN","BRUCE","HARRY","WAYNE","STEVE","HOWARD","ERNEST","PHILLIP","TODD","CRAIG","ALAN","PHILIP","EARL","DANNY","BRYAN","STANLEY","LEONARD","NATHAN","MANUEL","RODNEY","MARVIN","VINCENT","JEFFERY","JEFF","CHAD","JACOB","ALFRED","BRADLEY","HERBERT","FREDERICK","EDWIN","DON","RICKY","RANDALL","BARRY","BERNARD","LEROY","MARCUS","THEODORE","CLIFFORD","MIGUEL","JIM","TOM","CALVIN","BILL","LLOYD","DEREK","WARREN","DARRELL","JEROME","FLOYD","ALVIN","TIM","GORDON","GREG","JORGE","DUSTIN","PEDRO","DERRICK","ZACHARY","HERMAN","GLEN","HECTOR","RICARDO","RICK","BRENT","RAMON","GILBERT","MARC","REGINALD","RUBEN","NATHANIEL","RAFAEL","EDGAR","MILTON","RAUL","BEN","CHESTER","DUANE","FRANKLIN","BRAD","RON","ROLAND","ARNOLD","HARVEY","JARED","ERIK","DARRYL","NEIL","JAVIER","FERNANDO","CLINTON","TED","MATHEW","TYRONE","DARREN","LANCE","KURT","ALLAN","NELSON","GUY","CLAYTON","HUGH","MAX","DWAYNE","DWIGHT","ARMANDO","FELIX","EVERETT","IAN","WALLACE","KEN","BOB","ALFREDO","ALBERTO","DAVE","IVAN","BYRON","ISAAC","MORRIS","CLIFTON","WILLARD","ROSS","ANDY","SALVADOR","KIRK","SERGIO","SETH","KENT","TERRANCE","EDUARDO","TERRENCE","ENRIQUE","WADE","STUART","FREDRICK","ARTURO","ALEJANDRO","NICK","LUTHER","WENDELL","JEREMIAH","JULIUS","OTIS","TREVOR","OLIVER","LUKE","HOMER","GERARD","DOUG","KENNY","HUBERT","LYLE","MATT","ALFONSO","ORLANDO","REX","CARLTON","ERNESTO","NEAL","PABLO","LORENZO","OMAR","WILBUR","GRANT","HORACE","RODERICK","ABRAHAM","WILLIS","RICKEY","ANDRES","CESAR","JOHNATHAN","MALCOLM","RUDOLPH","DAMON","KELVIN","PRESTON","ALTON","ARCHIE","MARCO","WM","PETE","RANDOLPH","GARRY","GEOFFREY","JONATHON","FELIPE","GERARDO","ED","DOMINIC","DELBERT","COLIN","GUILLERMO","EARNEST","LUCAS","BENNY","SPENCER","RODOLFO","MYRON","EDMUND","GARRETT","SALVATORE","CEDRIC","LOWELL","GREGG","SHERMAN","WILSON","SYLVESTER","ROOSEVELT","ISRAEL","JERMAINE","FORREST","WILBERT","LELAND","SIMON","CLARK","IRVING","BRYANT","OWEN","RUFUS","WOODROW","KRISTOPHER","MACK","LEVI","MARCOS","GUSTAVO","JAKE","LIONEL","GILBERTO","CLINT","NICOLAS","ISMAEL","ORVILLE","ERVIN","DEWEY","AL","WILFRED","JOSH","HUGO","IGNACIO","CALEB","TOMAS","SHELDON","ERICK","STEWART","DOYLE","DARREL","ROGELIO","TERENCE","SANTIAGO","ALONZO","ELIAS","BERT","ELBERT","RAMIRO","CONRAD","NOAH","GRADY","PHIL","CORNELIUS","LAMAR","ROLANDO","CLAY","PERCY","DEXTER","BRADFORD","DARIN","AMOS","MOSES","IRVIN","SAUL","ROMAN","RANDAL","TIMMY","DARRIN","WINSTON","BRENDAN","ABEL","DOMINICK","BOYD","EMILIO","ELIJAH","DOMINGO","EMMETT","MARLON","EMANUEL","JERALD","EDMOND","EMIL","DEWAYNE","WILL","OTTO","TEDDY","REYNALDO","BRET","JESS","TRENT","HUMBERTO","EMMANUEL","STEPHAN","VICENTE","LAMONT","GARLAND","MILES","EFRAIN","HEATH","RODGER","HARLEY","ETHAN","ELDON","ROCKY","PIERRE","JUNIOR","FREDDY","ELI","BRYCE","ANTOINE","STERLING","CHASE","GROVER","ELTON","CLEVELAND","DYLAN","CHUCK","DAMIAN","REUBEN","STAN","AUGUST","LEONARDO","JASPER","RUSSEL","ERWIN","BENITO","HANS","MONTE","BLAINE","ERNIE","CURT","QUENTIN","AGUSTIN","MURRAY","JAMAL","ADOLFO","HARRISON","TYSON","BURTON","BRADY","ELLIOTT","WILFREDO","BART","JARROD","VANCE","DENIS","DAMIEN","JOAQUIN","HARLAN","DESMOND","ELLIOT","DARWIN","GREGORIO","BUDDY","XAVIER","KERMIT","ROSCOE","ESTEBAN","ANTON","SOLOMON","SCOTTY","NORBERT","ELVIN","WILLIAMS","NOLAN","ROD","QUINTON","HAL","BRAIN","ROB","ELWOOD","KENDRICK","DARIUS","MOISES","FIDEL","THADDEUS","CLIFF","MARCEL","JACKSON","RAPHAEL","BRYON","ARMAND","ALVARO","JEFFRY","DANE","JOESPH","THURMAN","NED","RUSTY","MONTY","FABIAN","REGGIE","MASON","GRAHAM","ISAIAH","VAUGHN","GUS","LOYD","DIEGO","ADOLPH","NORRIS","MILLARD","ROCCO","GONZALO","DERICK","RODRIGO","WILEY","RIGOBERTO","ALPHONSO","TY","NOE","VERN","REED","JEFFERSON","ELVIS","BERNARDO","MAURICIO","HIRAM","DONOVAN","BASIL","RILEY","NICKOLAS","MAYNARD","SCOT","VINCE","QUINCY","EDDY","SEBASTIAN","FEDERICO","ULYSSES","HERIBERTO","DONNELL","COLE","DAVIS","GAVIN","EMERY","WARD","ROMEO","JAYSON","DANTE","CLEMENT","COY","MAXWELL","JARVIS","BRUNO","ISSAC","DUDLEY","BROCK","SANFORD","CARMELO","BARNEY","NESTOR","STEFAN","DONNY","ART","LINWOOD","BEAU","WELDON","GALEN","ISIDRO","TRUMAN","DELMAR","JOHNATHON","SILAS","FREDERIC","DICK","IRWIN","MERLIN","CHARLEY","MARCELINO","HARRIS","CARLO","TRENTON","KURTIS","HUNTER","AURELIO","WINFRED","VITO","COLLIN","DENVER","CARTER","LEONEL","EMORY","PASQUALE","MOHAMMAD","MARIANO","DANIAL","LANDON","DIRK","BRANDEN","ADAN","BUFORD","GERMAN","WILMER","EMERSON","ZACHERY","FLETCHER","JACQUES","ERROL","DALTON","MONROE","JOSUE","EDWARDO","BOOKER","WILFORD","SONNY","SHELTON","CARSON","THERON","RAYMUNDO","DAREN","HOUSTON","ROBBY","LINCOLN","GENARO","BENNETT","OCTAVIO","CORNELL","HUNG","ARRON","ANTONY","HERSCHEL","GIOVANNI","GARTH","CYRUS","CYRIL","RONNY","LON","FREEMAN","DUNCAN","KENNITH","CARMINE","ERICH","CHADWICK","WILBURN","RUSS","REID","MYLES","ANDERSON","MORTON","JONAS","FOREST","MITCHEL","MERVIN","ZANE","RICH","JAMEL","LAZARO","ALPHONSE","RANDELL","MAJOR","JARRETT","BROOKS","ABDUL","LUCIANO","SEYMOUR","EUGENIO","MOHAMMED","VALENTIN","CHANCE","ARNULFO","LUCIEN","FERDINAND","THAD","EZRA","ALDO","RUBIN","ROYAL","MITCH","EARLE","ABE","WYATT","MARQUIS","LANNY","KAREEM","JAMAR","BORIS","ISIAH","EMILE","ELMO","ARON","LEOPOLDO","EVERETTE","JOSEF","ELOY","RODRICK","REINALDO","LUCIO","JERROD","WESTON","HERSHEL","BARTON","PARKER","LEMUEL","BURT","JULES","GIL","ELISEO","AHMAD","NIGEL","EFREN","ANTWAN","ALDEN","MARGARITO","COLEMAN","DINO","OSVALDO","LES","DEANDRE","NORMAND","KIETH","TREY","NORBERTO","NAPOLEON","JEROLD","FRITZ","ROSENDO","MILFORD","CHRISTOPER","ALFONZO","LYMAN","JOSIAH","BRANT","WILTON","RICO","JAMAAL","DEWITT","BRENTON","OLIN","FOSTER","FAUSTINO","CLAUDIO","JUDSON","GINO","EDGARDO","ALEC","TANNER","JARRED","DONN","TAD","PRINCE","PORFIRIO","ODIS","LENARD","CHAUNCEY","TOD","MEL","MARCELO","KORY","AUGUSTUS","KEVEN","HILARIO","BUD","SAL","ORVAL","MAURO","ZACHARIAH","OLEN","ANIBAL","MILO","JED","DILLON","AMADO","NEWTON","LENNY","RICHIE","HORACIO","BRICE","MOHAMED","DELMER","DARIO","REYES","MAC","JONAH","JERROLD","ROBT","HANK","RUPERT","ROLLAND","KENTON","DAMION","ANTONE","WALDO","FREDRIC","BRADLY","KIP","BURL","WALKER","TYREE","JEFFEREY","AHMED","WILLY","STANFORD","OREN","NOBLE","MOSHE","MIKEL","ENOCH","BRENDON","QUINTIN","JAMISON","FLORENCIO","DARRICK","TOBIAS","HASSAN","GIUSEPPE","DEMARCUS","CLETUS","TYRELL","LYNDON","KEENAN","WERNER","GERALDO","COLUMBUS","CHET","BERTRAM","MARKUS","HUEY","HILTON","DWAIN","DONTE","TYRON","OMER","ISAIAS","HIPOLITO","FERMIN","ADALBERTO","BO","BARRETT","TEODORO","MCKINLEY","MAXIMO","GARFIELD","RALEIGH","LAWERENCE","ABRAM","RASHAD","KING","EMMITT","DARON","SAMUAL","MIQUEL","EUSEBIO","DOMENIC","DARRON","BUSTER","WILBER","RENATO","JC","HOYT","HAYWOOD","EZEKIEL","CHAS","FLORENTINO","ELROY","CLEMENTE","ARDEN","NEVILLE","EDISON","DESHAWN","NATHANIAL","JORDON","DANILO","CLAUD","SHERWOOD","RAYMON","RAYFORD","CRISTOBAL","AMBROSE","TITUS","HYMAN","FELTON","EZEQUIEL","ERASMO","STANTON","LONNY","LEN","IKE","MILAN","LINO","JAROD","HERB","ANDREAS","WALTON","RHETT","PALMER","DOUGLASS","CORDELL","OSWALDO","ELLSWORTH","VIRGILIO","TONEY","NATHANAEL","DEL","BENEDICT","MOSE","JOHNSON","ISREAL","GARRET","FAUSTO","ASA","ARLEN","ZACK","WARNER","MODESTO","FRANCESCO","MANUAL","GAYLORD","GASTON","FILIBERTO","DEANGELO","MICHALE","GRANVILLE","WES","MALIK","ZACKARY","TUAN","ELDRIDGE","CRISTOPHER","CORTEZ","ANTIONE","MALCOM","LONG","KOREY","JOSPEH","COLTON","WAYLON","VON","HOSEA","SHAD","SANTO","RUDOLF","ROLF","REY","RENALDO","MARCELLUS","LUCIUS","KRISTOFER","BOYCE","BENTON","HAYDEN","HARLAND","ARNOLDO","RUEBEN","LEANDRO","KRAIG","JERRELL","JEROMY","HOBERT","CEDRICK","ARLIE","WINFORD","WALLY","LUIGI","KENETH","JACINTO","GRAIG","FRANKLYN","EDMUNDO","SID","PORTER","LEIF","JERAMY","BUCK","WILLIAN","VINCENZO","SHON","LYNWOOD","JERE","HAI","ELDEN","DORSEY","DARELL","BRODERICK","ALONSO"] +[ + "MARY", + "PATRICIA", + "LINDA", + "BARBARA", + "ELIZABETH", + "JENNIFER", + "MARIA", + "SUSAN", + "MARGARET", + "DOROTHY", + "LISA", + "NANCY", + "KAREN", + "BETTY", + "HELEN", + "SANDRA", + "DONNA", + "CAROL", + "RUTH", + "SHARON", + "MICHELLE", + "LAURA", + "SARAH", + "KIMBERLY", + "DEBORAH", + "JESSICA", + "SHIRLEY", + "CYNTHIA", + "ANGELA", + "MELISSA", + "BRENDA", + "AMY", + "ANNA", + "REBECCA", + "VIRGINIA", + "KATHLEEN", + "PAMELA", + "MARTHA", + "DEBRA", + "AMANDA", + "STEPHANIE", + "CAROLYN", + "CHRISTINE", + "MARIE", + "JANET", + "CATHERINE", + "FRANCES", + "ANN", + "JOYCE", + "DIANE", + "ALICE", + "JULIE", + "HEATHER", + "TERESA", + "DORIS", + "GLORIA", + "EVELYN", + "JEAN", + "CHERYL", + "MILDRED", + "KATHERINE", + "JOAN", + "ASHLEY", + "JUDITH", + "ROSE", + "JANICE", + "KELLY", + "NICOLE", + "JUDY", + "CHRISTINA", + "KATHY", + "THERESA", + "BEVERLY", + "DENISE", + "TAMMY", + "IRENE", + "JANE", + "LORI", + "RACHEL", + "MARILYN", + "ANDREA", + "KATHRYN", + "LOUISE", + "SARA", + "ANNE", + "JACQUELINE", + "WANDA", + "BONNIE", + "JULIA", + "RUBY", + "LOIS", + "TINA", + "PHYLLIS", + "NORMA", + "PAULA", + "DIANA", + "ANNIE", + "LILLIAN", + "EMILY", + "ROBIN", + "PEGGY", + "CRYSTAL", + "GLADYS", + "RITA", + "DAWN", + "CONNIE", + "FLORENCE", + "TRACY", + "EDNA", + "TIFFANY", + "CARMEN", + "ROSA", + "CINDY", + "GRACE", + "WENDY", + "VICTORIA", + "EDITH", + "KIM", + "SHERRY", + "SYLVIA", + "JOSEPHINE", + "THELMA", + "SHANNON", + "SHEILA", + "ETHEL", + "ELLEN", + "ELAINE", + "MARJORIE", + "CARRIE", + "CHARLOTTE", + "MONICA", + "ESTHER", + "PAULINE", + "EMMA", + "JUANITA", + "ANITA", + "RHONDA", + "HAZEL", + "AMBER", + "EVA", + "DEBBIE", + "APRIL", + "LESLIE", + "CLARA", + "LUCILLE", + "JAMIE", + "JOANNE", + "ELEANOR", + "VALERIE", + "DANIELLE", + "MEGAN", + "ALICIA", + "SUZANNE", + "MICHELE", + "GAIL", + "BERTHA", + "DARLENE", + "VERONICA", + "JILL", + "ERIN", + "GERALDINE", + "LAUREN", + "CATHY", + "JOANN", + "LORRAINE", + "LYNN", + "SALLY", + "REGINA", + "ERICA", + "BEATRICE", + "DOLORES", + "BERNICE", + "AUDREY", + "YVONNE", + "ANNETTE", + "JUNE", + "SAMANTHA", + "MARION", + "DANA", + "STACY", + "ANA", + "RENEE", + "IDA", + "VIVIAN", + "ROBERTA", + "HOLLY", + "BRITTANY", + "MELANIE", + "LORETTA", + "YOLANDA", + "JEANETTE", + "LAURIE", + "KATIE", + "KRISTEN", + "VANESSA", + "ALMA", + "SUE", + "ELSIE", + "BETH", + "JEANNE", + "VICKI", + "CARLA", + "TARA", + "ROSEMARY", + "EILEEN", + "TERRI", + "GERTRUDE", + "LUCY", + "TONYA", + "ELLA", + "STACEY", + "WILMA", + "GINA", + "KRISTIN", + "JESSIE", + "NATALIE", + "AGNES", + "VERA", + "WILLIE", + "CHARLENE", + "BESSIE", + "DELORES", + "MELINDA", + "PEARL", + "ARLENE", + "MAUREEN", + "COLLEEN", + "ALLISON", + "TAMARA", + "JOY", + "GEORGIA", + "CONSTANCE", + "LILLIE", + "CLAUDIA", + "JACKIE", + "MARCIA", + "TANYA", + "NELLIE", + "MINNIE", + "MARLENE", + "HEIDI", + "GLENDA", + "LYDIA", + "VIOLA", + "COURTNEY", + "MARIAN", + "STELLA", + "CAROLINE", + "DORA", + "JO", + "VICKIE", + "MATTIE", + "TERRY", + "MAXINE", + "IRMA", + "MABEL", + "MARSHA", + "MYRTLE", + "LENA", + "CHRISTY", + "DEANNA", + "PATSY", + "HILDA", + "GWENDOLYN", + "JENNIE", + "NORA", + "MARGIE", + "NINA", + "CASSANDRA", + "LEAH", + "PENNY", + "KAY", + "PRISCILLA", + "NAOMI", + "CAROLE", + "BRANDY", + "OLGA", + "BILLIE", + "DIANNE", + "TRACEY", + "LEONA", + "JENNY", + "FELICIA", + "SONIA", + "MIRIAM", + "VELMA", + "BECKY", + "BOBBIE", + "VIOLET", + "KRISTINA", + "TONI", + "MISTY", + "MAE", + "SHELLY", + "DAISY", + "RAMONA", + "SHERRI", + "ERIKA", + "KATRINA", + "CLAIRE", + "LINDSEY", + "LINDSAY", + "GENEVA", + "GUADALUPE", + "BELINDA", + "MARGARITA", + "SHERYL", + "CORA", + "FAYE", + "ADA", + "NATASHA", + "SABRINA", + "ISABEL", + "MARGUERITE", + "HATTIE", + "HARRIET", + "MOLLY", + "CECILIA", + "KRISTI", + "BRANDI", + "BLANCHE", + "SANDY", + "ROSIE", + "JOANNA", + "IRIS", + "EUNICE", + "ANGIE", + "INEZ", + "LYNDA", + "MADELINE", + "AMELIA", + "ALBERTA", + "GENEVIEVE", + "MONIQUE", + "JODI", + "JANIE", + "MAGGIE", + "KAYLA", + "SONYA", + "JAN", + "LEE", + "KRISTINE", + "CANDACE", + "FANNIE", + "MARYANN", + "OPAL", + "ALISON", + "YVETTE", + "MELODY", + "LUZ", + "SUSIE", + "OLIVIA", + "FLORA", + "SHELLEY", + "KRISTY", + "MAMIE", + "LULA", + "LOLA", + "VERNA", + "BEULAH", + "ANTOINETTE", + "CANDICE", + "JUANA", + "JEANNETTE", + "PAM", + "KELLI", + "HANNAH", + "WHITNEY", + "BRIDGET", + "KARLA", + "CELIA", + "LATOYA", + "PATTY", + "SHELIA", + "GAYLE", + "DELLA", + "VICKY", + "LYNNE", + "SHERI", + "MARIANNE", + "KARA", + "JACQUELYN", + "ERMA", + "BLANCA", + "MYRA", + "LETICIA", + "PAT", + "KRISTA", + "ROXANNE", + "ANGELICA", + "JOHNNIE", + "ROBYN", + "FRANCIS", + "ADRIENNE", + "ROSALIE", + "ALEXANDRA", + "BROOKE", + "BETHANY", + "SADIE", + "BERNADETTE", + "TRACI", + "JODY", + "KENDRA", + "JASMINE", + "NICHOLE", + "RACHAEL", + "CHELSEA", + "MABLE", + "ERNESTINE", + "MURIEL", + "MARCELLA", + "ELENA", + "KRYSTAL", + "ANGELINA", + "NADINE", + "KARI", + "ESTELLE", + "DIANNA", + "PAULETTE", + "LORA", + "MONA", + "DOREEN", + "ROSEMARIE", + "ANGEL", + "DESIREE", + "ANTONIA", + "HOPE", + "GINGER", + "JANIS", + "BETSY", + "CHRISTIE", + "FREDA", + "MERCEDES", + "MEREDITH", + "LYNETTE", + "TERI", + "CRISTINA", + "EULA", + "LEIGH", + "MEGHAN", + "SOPHIA", + "ELOISE", + "ROCHELLE", + "GRETCHEN", + "CECELIA", + "RAQUEL", + "HENRIETTA", + "ALYSSA", + "JANA", + "KELLEY", + "GWEN", + "KERRY", + "JENNA", + "TRICIA", + "LAVERNE", + "OLIVE", + "ALEXIS", + "TASHA", + "SILVIA", + "ELVIRA", + "CASEY", + "DELIA", + "SOPHIE", + "KATE", + "PATTI", + "LORENA", + "KELLIE", + "SONJA", + "LILA", + "LANA", + "DARLA", + "MAY", + "MINDY", + "ESSIE", + "MANDY", + "LORENE", + "ELSA", + "JOSEFINA", + "JEANNIE", + "MIRANDA", + "DIXIE", + "LUCIA", + "MARTA", + "FAITH", + "LELA", + "JOHANNA", + "SHARI", + "CAMILLE", + "TAMI", + "SHAWNA", + "ELISA", + "EBONY", + "MELBA", + "ORA", + "NETTIE", + "TABITHA", + "OLLIE", + "JAIME", + "WINIFRED", + "KRISTIE", + "MARINA", + "ALISHA", + "AIMEE", + "RENA", + "MYRNA", + "MARLA", + "TAMMIE", + "LATASHA", + "BONITA", + "PATRICE", + "RONDA", + "SHERRIE", + "ADDIE", + "FRANCINE", + "DELORIS", + "STACIE", + "ADRIANA", + "CHERI", + "SHELBY", + "ABIGAIL", + "CELESTE", + "JEWEL", + "CARA", + "ADELE", + "REBEKAH", + "LUCINDA", + "DORTHY", + "CHRIS", + "EFFIE", + "TRINA", + "REBA", + "SHAWN", + "SALLIE", + "AURORA", + "LENORA", + "ETTA", + "LOTTIE", + "KERRI", + "TRISHA", + "NIKKI", + "ESTELLA", + "FRANCISCA", + "JOSIE", + "TRACIE", + "MARISSA", + "KARIN", + "BRITTNEY", + "JANELLE", + "LOURDES", + "LAUREL", + "HELENE", + "FERN", + "ELVA", + "CORINNE", + "KELSEY", + "INA", + "BETTIE", + "ELISABETH", + "AIDA", + "CAITLIN", + "INGRID", + "IVA", + "EUGENIA", + "CHRISTA", + "GOLDIE", + "CASSIE", + "MAUDE", + "JENIFER", + "THERESE", + "FRANKIE", + "DENA", + "LORNA", + "JANETTE", + "LATONYA", + "CANDY", + "MORGAN", + "CONSUELO", + "TAMIKA", + "ROSETTA", + "DEBORA", + "CHERIE", + "POLLY", + "DINA", + "JEWELL", + "FAY", + "JILLIAN", + "DOROTHEA", + "NELL", + "TRUDY", + "ESPERANZA", + "PATRICA", + "KIMBERLEY", + "SHANNA", + "HELENA", + "CAROLINA", + "CLEO", + "STEFANIE", + "ROSARIO", + "OLA", + "JANINE", + "MOLLIE", + "LUPE", + "ALISA", + "LOU", + "MARIBEL", + "SUSANNE", + "BETTE", + "SUSANA", + "ELISE", + "CECILE", + "ISABELLE", + "LESLEY", + "JOCELYN", + "PAIGE", + "JONI", + "RACHELLE", + "LEOLA", + "DAPHNE", + "ALTA", + "ESTER", + "PETRA", + "GRACIELA", + "IMOGENE", + "JOLENE", + "KEISHA", + "LACEY", + "GLENNA", + "GABRIELA", + "KERI", + "URSULA", + "LIZZIE", + "KIRSTEN", + "SHANA", + "ADELINE", + "MAYRA", + "JAYNE", + "JACLYN", + "GRACIE", + "SONDRA", + "CARMELA", + "MARISA", + "ROSALIND", + "CHARITY", + "TONIA", + "BEATRIZ", + "MARISOL", + "CLARICE", + "JEANINE", + "SHEENA", + "ANGELINE", + "FRIEDA", + "LILY", + "ROBBIE", + "SHAUNA", + "MILLIE", + "CLAUDETTE", + "CATHLEEN", + "ANGELIA", + "GABRIELLE", + "AUTUMN", + "KATHARINE", + "SUMMER", + "JODIE", + "STACI", + "LEA", + "CHRISTI", + "JIMMIE", + "JUSTINE", + "ELMA", + "LUELLA", + "MARGRET", + "DOMINIQUE", + "SOCORRO", + "RENE", + "MARTINA", + "MARGO", + "MAVIS", + "CALLIE", + "BOBBI", + "MARITZA", + "LUCILE", + "LEANNE", + "JEANNINE", + "DEANA", + "AILEEN", + "LORIE", + "LADONNA", + "WILLA", + "MANUELA", + "GALE", + "SELMA", + "DOLLY", + "SYBIL", + "ABBY", + "LARA", + "DALE", + "IVY", + "DEE", + "WINNIE", + "MARCY", + "LUISA", + "JERI", + "MAGDALENA", + "OFELIA", + "MEAGAN", + "AUDRA", + "MATILDA", + "LEILA", + "CORNELIA", + "BIANCA", + "SIMONE", + "BETTYE", + "RANDI", + "VIRGIE", + "LATISHA", + "BARBRA", + "GEORGINA", + "ELIZA", + "LEANN", + "BRIDGETTE", + "RHODA", + "HALEY", + "ADELA", + "NOLA", + "BERNADINE", + "FLOSSIE", + "ILA", + "GRETA", + "RUTHIE", + "NELDA", + "MINERVA", + "LILLY", + "TERRIE", + "LETHA", + "HILARY", + "ESTELA", + "VALARIE", + "BRIANNA", + "ROSALYN", + "EARLINE", + "CATALINA", + "AVA", + "MIA", + "CLARISSA", + "LIDIA", + "CORRINE", + "ALEXANDRIA", + "CONCEPCION", + "TIA", + "SHARRON", + "RAE", + "DONA", + "ERICKA", + "JAMI", + "ELNORA", + "CHANDRA", + "LENORE", + "NEVA", + "MARYLOU", + "MELISA", + "TABATHA", + "SERENA", + "AVIS", + "ALLIE", + "SOFIA", + "JEANIE", + "ODESSA", + "NANNIE", + "HARRIETT", + "LORAINE", + "PENELOPE", + "MILAGROS", + "EMILIA", + "BENITA", + "ALLYSON", + "ASHLEE", + "TANIA", + "TOMMIE", + "ESMERALDA", + "KARINA", + "EVE", + "PEARLIE", + "ZELMA", + "MALINDA", + "NOREEN", + "TAMEKA", + "SAUNDRA", + "HILLARY", + "AMIE", + "ALTHEA", + "ROSALINDA", + "JORDAN", + "LILIA", + "ALANA", + "GAY", + "CLARE", + "ALEJANDRA", + "ELINOR", + "MICHAEL", + "LORRIE", + "JERRI", + "DARCY", + "EARNESTINE", + "CARMELLA", + "TAYLOR", + "NOEMI", + "MARCIE", + "LIZA", + "ANNABELLE", + "LOUISA", + "EARLENE", + "MALLORY", + "CARLENE", + "NITA", + "SELENA", + "TANISHA", + "KATY", + "JULIANNE", + "JOHN", + "LAKISHA", + "EDWINA", + "MARICELA", + "MARGERY", + "KENYA", + "DOLLIE", + "ROXIE", + "ROSLYN", + "KATHRINE", + "NANETTE", + "CHARMAINE", + "LAVONNE", + "ILENE", + "KRIS", + "TAMMI", + "SUZETTE", + "CORINE", + "KAYE", + "JERRY", + "MERLE", + "CHRYSTAL", + "LINA", + "DEANNE", + "LILIAN", + "JULIANA", + "ALINE", + "LUANN", + "KASEY", + "MARYANNE", + "EVANGELINE", + "COLETTE", + "MELVA", + "LAWANDA", + "YESENIA", + "NADIA", + "MADGE", + "KATHIE", + "EDDIE", + "OPHELIA", + "VALERIA", + "NONA", + "MITZI", + "MARI", + "GEORGETTE", + "CLAUDINE", + "FRAN", + "ALISSA", + "ROSEANN", + "LAKEISHA", + "SUSANNA", + "REVA", + "DEIDRE", + "CHASITY", + "SHEREE", + "CARLY", + "JAMES", + "ELVIA", + "ALYCE", + "DEIRDRE", + "GENA", + "BRIANA", + "ARACELI", + "KATELYN", + "ROSANNE", + "WENDI", + "TESSA", + "BERTA", + "MARVA", + "IMELDA", + "MARIETTA", + "MARCI", + "LEONOR", + "ARLINE", + "SASHA", + "MADELYN", + "JANNA", + "JULIETTE", + "DEENA", + "AURELIA", + "JOSEFA", + "AUGUSTA", + "LILIANA", + "YOUNG", + "CHRISTIAN", + "LESSIE", + "AMALIA", + "SAVANNAH", + "ANASTASIA", + "VILMA", + "NATALIA", + "ROSELLA", + "LYNNETTE", + "CORINA", + "ALFREDA", + "LEANNA", + "CAREY", + "AMPARO", + "COLEEN", + "TAMRA", + "AISHA", + "WILDA", + "KARYN", + "CHERRY", + "QUEEN", + "MAURA", + "MAI", + "EVANGELINA", + "ROSANNA", + "HALLIE", + "ERNA", + "ENID", + "MARIANA", + "LACY", + "JULIET", + "JACKLYN", + "FREIDA", + "MADELEINE", + "MARA", + "HESTER", + "CATHRYN", + "LELIA", + "CASANDRA", + "BRIDGETT", + "ANGELITA", + "JANNIE", + "DIONNE", + "ANNMARIE", + "KATINA", + "BERYL", + "PHOEBE", + "MILLICENT", + "KATHERYN", + "DIANN", + "CARISSA", + "MARYELLEN", + "LIZ", + "LAURI", + "HELGA", + "GILDA", + "ADRIAN", + "RHEA", + "MARQUITA", + "HOLLIE", + "TISHA", + "TAMERA", + "ANGELIQUE", + "FRANCESCA", + "BRITNEY", + "KAITLIN", + "LOLITA", + "FLORINE", + "ROWENA", + "REYNA", + "TWILA", + "FANNY", + "JANELL", + "INES", + "CONCETTA", + "BERTIE", + "ALBA", + "BRIGITTE", + "ALYSON", + "VONDA", + "PANSY", + "ELBA", + "NOELLE", + "LETITIA", + "KITTY", + "DEANN", + "BRANDIE", + "LOUELLA", + "LETA", + "FELECIA", + "SHARLENE", + "LESA", + "BEVERLEY", + "ROBERT", + "ISABELLA", + "HERMINIA", + "TERRA", + "CELINA", + "TORI", + "OCTAVIA", + "JADE", + "DENICE", + "GERMAINE", + "SIERRA", + "MICHELL", + "CORTNEY", + "NELLY", + "DORETHA", + "SYDNEY", + "DEIDRA", + "MONIKA", + "LASHONDA", + "JUDI", + "CHELSEY", + "ANTIONETTE", + "MARGOT", + "BOBBY", + "ADELAIDE", + "NAN", + "LEEANN", + "ELISHA", + "DESSIE", + "LIBBY", + "KATHI", + "GAYLA", + "LATANYA", + "MINA", + "MELLISA", + "KIMBERLEE", + "JASMIN", + "RENAE", + "ZELDA", + "ELDA", + "MA", + "JUSTINA", + "GUSSIE", + "EMILIE", + "CAMILLA", + "ABBIE", + "ROCIO", + "KAITLYN", + "JESSE", + "EDYTHE", + "ASHLEIGH", + "SELINA", + "LAKESHA", + "GERI", + "ALLENE", + "PAMALA", + "MICHAELA", + "DAYNA", + "CARYN", + "ROSALIA", + "SUN", + "JACQULINE", + "REBECA", + "MARYBETH", + "KRYSTLE", + "IOLA", + "DOTTIE", + "BENNIE", + "BELLE", + "AUBREY", + "GRISELDA", + "ERNESTINA", + "ELIDA", + "ADRIANNE", + "DEMETRIA", + "DELMA", + "CHONG", + "JAQUELINE", + "DESTINY", + "ARLEEN", + "VIRGINA", + "RETHA", + "FATIMA", + "TILLIE", + "ELEANORE", + "CARI", + "TREVA", + "BIRDIE", + "WILHELMINA", + "ROSALEE", + "MAURINE", + "LATRICE", + "YONG", + "JENA", + "TARYN", + "ELIA", + "DEBBY", + "MAUDIE", + "JEANNA", + "DELILAH", + "CATRINA", + "SHONDA", + "HORTENCIA", + "THEODORA", + "TERESITA", + "ROBBIN", + "DANETTE", + "MARYJANE", + "FREDDIE", + "DELPHINE", + "BRIANNE", + "NILDA", + "DANNA", + "CINDI", + "BESS", + "IONA", + "HANNA", + "ARIEL", + "WINONA", + "VIDA", + "ROSITA", + "MARIANNA", + "WILLIAM", + "RACHEAL", + "GUILLERMINA", + "ELOISA", + "CELESTINE", + "CAREN", + "MALISSA", + "LONA", + "CHANTEL", + "SHELLIE", + "MARISELA", + "LEORA", + "AGATHA", + "SOLEDAD", + "MIGDALIA", + "IVETTE", + "CHRISTEN", + "ATHENA", + "JANEL", + "CHLOE", + "VEDA", + "PATTIE", + "TESSIE", + "TERA", + "MARILYNN", + "LUCRETIA", + "KARRIE", + "DINAH", + "DANIELA", + "ALECIA", + "ADELINA", + "VERNICE", + "SHIELA", + "PORTIA", + "MERRY", + "LASHAWN", + "DEVON", + "DARA", + "TAWANA", + "OMA", + "VERDA", + "CHRISTIN", + "ALENE", + "ZELLA", + "SANDI", + "RAFAELA", + "MAYA", + "KIRA", + "CANDIDA", + "ALVINA", + "SUZAN", + "SHAYLA", + "LYN", + "LETTIE", + "ALVA", + "SAMATHA", + "ORALIA", + "MATILDE", + "MADONNA", + "LARISSA", + "VESTA", + "RENITA", + "INDIA", + "DELOIS", + "SHANDA", + "PHILLIS", + "LORRI", + "ERLINDA", + "CRUZ", + "CATHRINE", + "BARB", + "ZOE", + "ISABELL", + "IONE", + "GISELA", + "CHARLIE", + "VALENCIA", + "ROXANNA", + "MAYME", + "KISHA", + "ELLIE", + "MELLISSA", + "DORRIS", + "DALIA", + "BELLA", + "ANNETTA", + "ZOILA", + "RETA", + "REINA", + "LAURETTA", + "KYLIE", + "CHRISTAL", + "PILAR", + "CHARLA", + "ELISSA", + "TIFFANI", + "TANA", + "PAULINA", + "LEOTA", + "BREANNA", + "JAYME", + "CARMEL", + "VERNELL", + "TOMASA", + "MANDI", + "DOMINGA", + "SANTA", + "MELODIE", + "LURA", + "ALEXA", + "TAMELA", + "RYAN", + "MIRNA", + "KERRIE", + "VENUS", + "NOEL", + "FELICITA", + "CRISTY", + "CARMELITA", + "BERNIECE", + "ANNEMARIE", + "TIARA", + "ROSEANNE", + "MISSY", + "CORI", + "ROXANA", + "PRICILLA", + "KRISTAL", + "JUNG", + "ELYSE", + "HAYDEE", + "ALETHA", + "BETTINA", + "MARGE", + "GILLIAN", + "FILOMENA", + "CHARLES", + "ZENAIDA", + "HARRIETTE", + "CARIDAD", + "VADA", + "UNA", + "ARETHA", + "PEARLINE", + "MARJORY", + "MARCELA", + "FLOR", + "EVETTE", + "ELOUISE", + "ALINA", + "TRINIDAD", + "DAVID", + "DAMARIS", + "CATHARINE", + "CARROLL", + "BELVA", + "NAKIA", + "MARLENA", + "LUANNE", + "LORINE", + "KARON", + "DORENE", + "DANITA", + "BRENNA", + "TATIANA", + "SAMMIE", + "LOUANN", + "LOREN", + "JULIANNA", + "ANDRIA", + "PHILOMENA", + "LUCILA", + "LEONORA", + "DOVIE", + "ROMONA", + "MIMI", + "JACQUELIN", + "GAYE", + "TONJA", + "MISTI", + "JOE", + "GENE", + "CHASTITY", + "STACIA", + "ROXANN", + "MICAELA", + "NIKITA", + "MEI", + "VELDA", + "MARLYS", + "JOHNNA", + "AURA", + "LAVERN", + "IVONNE", + "HAYLEY", + "NICKI", + "MAJORIE", + "HERLINDA", + "GEORGE", + "ALPHA", + "YADIRA", + "PERLA", + "GREGORIA", + "DANIEL", + "ANTONETTE", + "SHELLI", + "MOZELLE", + "MARIAH", + "JOELLE", + "CORDELIA", + "JOSETTE", + "CHIQUITA", + "TRISTA", + "LOUIS", + "LAQUITA", + "GEORGIANA", + "CANDI", + "SHANON", + "LONNIE", + "HILDEGARD", + "CECIL", + "VALENTINA", + "STEPHANY", + "MAGDA", + "KAROL", + "GERRY", + "GABRIELLA", + "TIANA", + "ROMA", + "RICHELLE", + "RAY", + "PRINCESS", + "OLETA", + "JACQUE", + "IDELLA", + "ALAINA", + "SUZANNA", + "JOVITA", + "BLAIR", + "TOSHA", + "RAVEN", + "NEREIDA", + "MARLYN", + "KYLA", + "JOSEPH", + "DELFINA", + "TENA", + "STEPHENIE", + "SABINA", + "NATHALIE", + "MARCELLE", + "GERTIE", + "DARLEEN", + "THEA", + "SHARONDA", + "SHANTEL", + "BELEN", + "VENESSA", + "ROSALINA", + "ONA", + "GENOVEVA", + "COREY", + "CLEMENTINE", + "ROSALBA", + "RENATE", + "RENATA", + "MI", + "IVORY", + "GEORGIANNA", + "FLOY", + "DORCAS", + "ARIANA", + "TYRA", + "THEDA", + "MARIAM", + "JULI", + "JESICA", + "DONNIE", + "VIKKI", + "VERLA", + "ROSELYN", + "MELVINA", + "JANNETTE", + "GINNY", + "DEBRAH", + "CORRIE", + "ASIA", + "VIOLETA", + "MYRTIS", + "LATRICIA", + "COLLETTE", + "CHARLEEN", + "ANISSA", + "VIVIANA", + "TWYLA", + "PRECIOUS", + "NEDRA", + "LATONIA", + "LAN", + "HELLEN", + "FABIOLA", + "ANNAMARIE", + "ADELL", + "SHARYN", + "CHANTAL", + "NIKI", + "MAUD", + "LIZETTE", + "LINDY", + "KIA", + "KESHA", + "JEANA", + "DANELLE", + "CHARLINE", + "CHANEL", + "CARROL", + "VALORIE", + "LIA", + "DORTHA", + "CRISTAL", + "SUNNY", + "LEONE", + "LEILANI", + "GERRI", + "DEBI", + "ANDRA", + "KESHIA", + "IMA", + "EULALIA", + "EASTER", + "DULCE", + "NATIVIDAD", + "LINNIE", + "KAMI", + "GEORGIE", + "CATINA", + "BROOK", + "ALDA", + "WINNIFRED", + "SHARLA", + "RUTHANN", + "MEAGHAN", + "MAGDALENE", + "LISSETTE", + "ADELAIDA", + "VENITA", + "TRENA", + "SHIRLENE", + "SHAMEKA", + "ELIZEBETH", + "DIAN", + "SHANTA", + "MICKEY", + "LATOSHA", + "CARLOTTA", + "WINDY", + "SOON", + "ROSINA", + "MARIANN", + "LEISA", + "JONNIE", + "DAWNA", + "CATHIE", + "BILLY", + "ASTRID", + "SIDNEY", + "LAUREEN", + "JANEEN", + "HOLLI", + "FAWN", + "VICKEY", + "TERESSA", + "SHANTE", + "RUBYE", + "MARCELINA", + "CHANDA", + "CARY", + "TERESE", + "SCARLETT", + "MARTY", + "MARNIE", + "LULU", + "LISETTE", + "JENIFFER", + "ELENOR", + "DORINDA", + "DONITA", + "CARMAN", + "BERNITA", + "ALTAGRACIA", + "ALETA", + "ADRIANNA", + "ZORAIDA", + "RONNIE", + "NICOLA", + "LYNDSEY", + "KENDALL", + "JANINA", + "CHRISSY", + "AMI", + "STARLA", + "PHYLIS", + "PHUONG", + "KYRA", + "CHARISSE", + "BLANCH", + "SANJUANITA", + "RONA", + "NANCI", + "MARILEE", + "MARANDA", + "CORY", + "BRIGETTE", + "SANJUANA", + "MARITA", + "KASSANDRA", + "JOYCELYN", + "IRA", + "FELIPA", + "CHELSIE", + "BONNY", + "MIREYA", + "LORENZA", + "KYONG", + "ILEANA", + "CANDELARIA", + "TONY", + "TOBY", + "SHERIE", + "OK", + "MARK", + "LUCIE", + "LEATRICE", + "LAKESHIA", + "GERDA", + "EDIE", + "BAMBI", + "MARYLIN", + "LAVON", + "HORTENSE", + "GARNET", + "EVIE", + "TRESSA", + "SHAYNA", + "LAVINA", + "KYUNG", + "JEANETTA", + "SHERRILL", + "SHARA", + "PHYLISS", + "MITTIE", + "ANABEL", + "ALESIA", + "THUY", + "TAWANDA", + "RICHARD", + "JOANIE", + "TIFFANIE", + "LASHANDA", + "KARISSA", + "ENRIQUETA", + "DARIA", + "DANIELLA", + "CORINNA", + "ALANNA", + "ABBEY", + "ROXANE", + "ROSEANNA", + "MAGNOLIA", + "LIDA", + "KYLE", + "JOELLEN", + "ERA", + "CORAL", + "CARLEEN", + "TRESA", + "PEGGIE", + "NOVELLA", + "NILA", + "MAYBELLE", + "JENELLE", + "CARINA", + "NOVA", + "MELINA", + "MARQUERITE", + "MARGARETTE", + "JOSEPHINA", + "EVONNE", + "DEVIN", + "CINTHIA", + "ALBINA", + "TOYA", + "TAWNYA", + "SHERITA", + "SANTOS", + "MYRIAM", + "LIZABETH", + "LISE", + "KEELY", + "JENNI", + "GISELLE", + "CHERYLE", + "ARDITH", + "ARDIS", + "ALESHA", + "ADRIANE", + "SHAINA", + "LINNEA", + "KAROLYN", + "HONG", + "FLORIDA", + "FELISHA", + "DORI", + "DARCI", + "ARTIE", + "ARMIDA", + "ZOLA", + "XIOMARA", + "VERGIE", + "SHAMIKA", + "NENA", + "NANNETTE", + "MAXIE", + "LOVIE", + "JEANE", + "JAIMIE", + "INGE", + "FARRAH", + "ELAINA", + "CAITLYN", + "STARR", + "FELICITAS", + "CHERLY", + "CARYL", + "YOLONDA", + "YASMIN", + "TEENA", + "PRUDENCE", + "PENNIE", + "NYDIA", + "MACKENZIE", + "ORPHA", + "MARVEL", + "LIZBETH", + "LAURETTE", + "JERRIE", + "HERMELINDA", + "CAROLEE", + "TIERRA", + "MIRIAN", + "META", + "MELONY", + "KORI", + "JENNETTE", + "JAMILA", + "ENA", + "ANH", + "YOSHIKO", + "SUSANNAH", + "SALINA", + "RHIANNON", + "JOLEEN", + "CRISTINE", + "ASHTON", + "ARACELY", + "TOMEKA", + "SHALONDA", + "MARTI", + "LACIE", + "KALA", + "JADA", + "ILSE", + "HAILEY", + "BRITTANI", + "ZONA", + "SYBLE", + "SHERRYL", + "RANDY", + "NIDIA", + "MARLO", + "KANDICE", + "KANDI", + "DEB", + "DEAN", + "AMERICA", + "ALYCIA", + "TOMMY", + "RONNA", + "NORENE", + "MERCY", + "JOSE", + "INGEBORG", + "GIOVANNA", + "GEMMA", + "CHRISTEL", + "AUDRY", + "ZORA", + "VITA", + "VAN", + "TRISH", + "STEPHAINE", + "SHIRLEE", + "SHANIKA", + "MELONIE", + "MAZIE", + "JAZMIN", + "INGA", + "HOA", + "HETTIE", + "GERALYN", + "FONDA", + "ESTRELLA", + "ADELLA", + "SU", + "SARITA", + "RINA", + "MILISSA", + "MARIBETH", + "GOLDA", + "EVON", + "ETHELYN", + "ENEDINA", + "CHERISE", + "CHANA", + "VELVA", + "TAWANNA", + "SADE", + "MIRTA", + "LI", + "KARIE", + "JACINTA", + "ELNA", + "DAVINA", + "CIERRA", + "ASHLIE", + "ALBERTHA", + "TANESHA", + "STEPHANI", + "NELLE", + "MINDI", + "LU", + "LORINDA", + "LARUE", + "FLORENE", + "DEMETRA", + "DEDRA", + "CIARA", + "CHANTELLE", + "ASHLY", + "SUZY", + "ROSALVA", + "NOELIA", + "LYDA", + "LEATHA", + "KRYSTYNA", + "KRISTAN", + "KARRI", + "DARLINE", + "DARCIE", + "CINDA", + "CHEYENNE", + "CHERRIE", + "AWILDA", + "ALMEDA", + "ROLANDA", + "LANETTE", + "JERILYN", + "GISELE", + "EVALYN", + "CYNDI", + "CLETA", + "CARIN", + "ZINA", + "ZENA", + "VELIA", + "TANIKA", + "PAUL", + "CHARISSA", + "THOMAS", + "TALIA", + "MARGARETE", + "LAVONDA", + "KAYLEE", + "KATHLENE", + "JONNA", + "IRENA", + "ILONA", + "IDALIA", + "CANDIS", + "CANDANCE", + "BRANDEE", + "ANITRA", + "ALIDA", + "SIGRID", + "NICOLETTE", + "MARYJO", + "LINETTE", + "HEDWIG", + "CHRISTIANA", + "CASSIDY", + "ALEXIA", + "TRESSIE", + "MODESTA", + "LUPITA", + "LITA", + "GLADIS", + "EVELIA", + "DAVIDA", + "CHERRI", + "CECILY", + "ASHELY", + "ANNABEL", + "AGUSTINA", + "WANITA", + "SHIRLY", + "ROSAURA", + "HULDA", + "EUN", + "BAILEY", + "YETTA", + "VERONA", + "THOMASINA", + "SIBYL", + "SHANNAN", + "MECHELLE", + "LUE", + "LEANDRA", + "LANI", + "KYLEE", + "KANDY", + "JOLYNN", + "FERNE", + "EBONI", + "CORENE", + "ALYSIA", + "ZULA", + "NADA", + "MOIRA", + "LYNDSAY", + "LORRETTA", + "JUAN", + "JAMMIE", + "HORTENSIA", + "GAYNELL", + "CAMERON", + "ADRIA", + "VINA", + "VICENTA", + "TANGELA", + "STEPHINE", + "NORINE", + "NELLA", + "LIANA", + "LESLEE", + "KIMBERELY", + "ILIANA", + "GLORY", + "FELICA", + "EMOGENE", + "ELFRIEDE", + "EDEN", + "EARTHA", + "CARMA", + "BEA", + "OCIE", + "MARRY", + "LENNIE", + "KIARA", + "JACALYN", + "CARLOTA", + "ARIELLE", + "YU", + "STAR", + "OTILIA", + "KIRSTIN", + "KACEY", + "JOHNETTA", + "JOEY", + "JOETTA", + "JERALDINE", + "JAUNITA", + "ELANA", + "DORTHEA", + "CAMI", + "AMADA", + "ADELIA", + "VERNITA", + "TAMAR", + "SIOBHAN", + "RENEA", + "RASHIDA", + "OUIDA", + "ODELL", + "NILSA", + "MERYL", + "KRISTYN", + "JULIETA", + "DANICA", + "BREANNE", + "AUREA", + "ANGLEA", + "SHERRON", + "ODETTE", + "MALIA", + "LORELEI", + "LIN", + "LEESA", + "KENNA", + "KATHLYN", + "FIONA", + "CHARLETTE", + "SUZIE", + "SHANTELL", + "SABRA", + "RACQUEL", + "MYONG", + "MIRA", + "MARTINE", + "LUCIENNE", + "LAVADA", + "JULIANN", + "JOHNIE", + "ELVERA", + "DELPHIA", + "CLAIR", + "CHRISTIANE", + "CHAROLETTE", + "CARRI", + "AUGUSTINE", + "ASHA", + "ANGELLA", + "PAOLA", + "NINFA", + "LEDA", + "LAI", + "EDA", + "SUNSHINE", + "STEFANI", + "SHANELL", + "PALMA", + "MACHELLE", + "LISSA", + "KECIA", + "KATHRYNE", + "KARLENE", + "JULISSA", + "JETTIE", + "JENNIFFER", + "HUI", + "CORRINA", + "CHRISTOPHER", + "CAROLANN", + "ALENA", + "TESS", + "ROSARIA", + "MYRTICE", + "MARYLEE", + "LIANE", + "KENYATTA", + "JUDIE", + "JANEY", + "IN", + "ELMIRA", + "ELDORA", + "DENNA", + "CRISTI", + "CATHI", + "ZAIDA", + "VONNIE", + "VIVA", + "VERNIE", + "ROSALINE", + "MARIELA", + "LUCIANA", + "LESLI", + "KARAN", + "FELICE", + "DENEEN", + "ADINA", + "WYNONA", + "TARSHA", + "SHERON", + "SHASTA", + "SHANITA", + "SHANI", + "SHANDRA", + "RANDA", + "PINKIE", + "PARIS", + "NELIDA", + "MARILOU", + "LYLA", + "LAURENE", + "LACI", + "JOI", + "JANENE", + "DOROTHA", + "DANIELE", + "DANI", + "CAROLYNN", + "CARLYN", + "BERENICE", + "AYESHA", + "ANNELIESE", + "ALETHEA", + "THERSA", + "TAMIKO", + "RUFINA", + "OLIVA", + "MOZELL", + "MARYLYN", + "MADISON", + "KRISTIAN", + "KATHYRN", + "KASANDRA", + "KANDACE", + "JANAE", + "GABRIEL", + "DOMENICA", + "DEBBRA", + "DANNIELLE", + "CHUN", + "BUFFY", + "BARBIE", + "ARCELIA", + "AJA", + "ZENOBIA", + "SHAREN", + "SHAREE", + "PATRICK", + "PAGE", + "MY", + "LAVINIA", + "KUM", + "KACIE", + "JACKELINE", + "HUONG", + "FELISA", + "EMELIA", + "ELEANORA", + "CYTHIA", + "CRISTIN", + "CLYDE", + "CLARIBEL", + "CARON", + "ANASTACIA", + "ZULMA", + "ZANDRA", + "YOKO", + "TENISHA", + "SUSANN", + "SHERILYN", + "SHAY", + "SHAWANDA", + "SABINE", + "ROMANA", + "MATHILDA", + "LINSEY", + "KEIKO", + "JOANA", + "ISELA", + "GRETTA", + "GEORGETTA", + "EUGENIE", + "DUSTY", + "DESIRAE", + "DELORA", + "CORAZON", + "ANTONINA", + "ANIKA", + "WILLENE", + "TRACEE", + "TAMATHA", + "REGAN", + "NICHELLE", + "MICKIE", + "MAEGAN", + "LUANA", + "LANITA", + "KELSIE", + "EDELMIRA", + "BREE", + "AFTON", + "TEODORA", + "TAMIE", + "SHENA", + "MEG", + "LINH", + "KELI", + "KACI", + "DANYELLE", + "BRITT", + "ARLETTE", + "ALBERTINE", + "ADELLE", + "TIFFINY", + "STORMY", + "SIMONA", + "NUMBERS", + "NICOLASA", + "NICHOL", + "NIA", + "NAKISHA", + "MEE", + "MAIRA", + "LOREEN", + "KIZZY", + "JOHNNY", + "JAY", + "FALLON", + "CHRISTENE", + "BOBBYE", + "ANTHONY", + "YING", + "VINCENZA", + "TANJA", + "RUBIE", + "RONI", + "QUEENIE", + "MARGARETT", + "KIMBERLI", + "IRMGARD", + "IDELL", + "HILMA", + "EVELINA", + "ESTA", + "EMILEE", + "DENNISE", + "DANIA", + "CARL", + "CARIE", + "ANTONIO", + "WAI", + "SANG", + "RISA", + "RIKKI", + "PARTICIA", + "MUI", + "MASAKO", + "MARIO", + "LUVENIA", + "LOREE", + "LONI", + "LIEN", + "KEVIN", + "GIGI", + "FLORENCIA", + "DORIAN", + "DENITA", + "DALLAS", + "CHI", + "BILLYE", + "ALEXANDER", + "TOMIKA", + "SHARITA", + "RANA", + "NIKOLE", + "NEOMA", + "MARGARITE", + "MADALYN", + "LUCINA", + "LAILA", + "KALI", + "JENETTE", + "GABRIELE", + "EVELYNE", + "ELENORA", + "CLEMENTINA", + "ALEJANDRINA", + "ZULEMA", + "VIOLETTE", + "VANNESSA", + "THRESA", + "RETTA", + "PIA", + "PATIENCE", + "NOELLA", + "NICKIE", + "JONELL", + "DELTA", + "CHUNG", + "CHAYA", + "CAMELIA", + "BETHEL", + "ANYA", + "ANDREW", + "THANH", + "SUZANN", + "SPRING", + "SHU", + "MILA", + "LILLA", + "LAVERNA", + "KEESHA", + "KATTIE", + "GIA", + "GEORGENE", + "EVELINE", + "ESTELL", + "ELIZBETH", + "VIVIENNE", + "VALLIE", + "TRUDIE", + "STEPHANE", + "MICHEL", + "MAGALY", + "MADIE", + "KENYETTA", + "KARREN", + "JANETTA", + "HERMINE", + "HARMONY", + "DRUCILLA", + "DEBBI", + "CELESTINA", + "CANDIE", + "BRITNI", + "BECKIE", + "AMINA", + "ZITA", + "YUN", + "YOLANDE", + "VIVIEN", + "VERNETTA", + "TRUDI", + "SOMMER", + "PEARLE", + "PATRINA", + "OSSIE", + "NICOLLE", + "LOYCE", + "LETTY", + "LARISA", + "KATHARINA", + "JOSELYN", + "JONELLE", + "JENELL", + "IESHA", + "HEIDE", + "FLORINDA", + "FLORENTINA", + "FLO", + "ELODIA", + "DORINE", + "BRUNILDA", + "BRIGID", + "ASHLI", + "ARDELLA", + "TWANA", + "THU", + "TARAH", + "SUNG", + "SHEA", + "SHAVON", + "SHANE", + "SERINA", + "RAYNA", + "RAMONITA", + "NGA", + "MARGURITE", + "LUCRECIA", + "KOURTNEY", + "KATI", + "JESUS", + "JESENIA", + "DIAMOND", + "CRISTA", + "AYANA", + "ALICA", + "ALIA", + "VINNIE", + "SUELLEN", + "ROMELIA", + "RACHELL", + "PIPER", + "OLYMPIA", + "MICHIKO", + "KATHALEEN", + "JOLIE", + "JESSI", + "JANESSA", + "HANA", + "HA", + "ELEASE", + "CARLETTA", + "BRITANY", + "SHONA", + "SALOME", + "ROSAMOND", + "REGENA", + "RAINA", + "NGOC", + "NELIA", + "LOUVENIA", + "LESIA", + "LATRINA", + "LATICIA", + "LARHONDA", + "JINA", + "JACKI", + "HOLLIS", + "HOLLEY", + "EMMY", + "DEEANN", + "CORETTA", + "ARNETTA", + "VELVET", + "THALIA", + "SHANICE", + "NETA", + "MIKKI", + "MICKI", + "LONNA", + "LEANA", + "LASHUNDA", + "KILEY", + "JOYE", + "JACQULYN", + "IGNACIA", + "HYUN", + "HIROKO", + "HENRY", + "HENRIETTE", + "ELAYNE", + "DELINDA", + "DARNELL", + "DAHLIA", + "COREEN", + "CONSUELA", + "CONCHITA", + "CELINE", + "BABETTE", + "AYANNA", + "ANETTE", + "ALBERTINA", + "SKYE", + "SHAWNEE", + "SHANEKA", + "QUIANA", + "PAMELIA", + "MIN", + "MERRI", + "MERLENE", + "MARGIT", + "KIESHA", + "KIERA", + "KAYLENE", + "JODEE", + "JENISE", + "ERLENE", + "EMMIE", + "ELSE", + "DARYL", + "DALILA", + "DAISEY", + "CODY", + "CASIE", + "BELIA", + "BABARA", + "VERSIE", + "VANESA", + "SHELBA", + "SHAWNDA", + "SAM", + "NORMAN", + "NIKIA", + "NAOMA", + "MARNA", + "MARGERET", + "MADALINE", + "LAWANA", + "KINDRA", + "JUTTA", + "JAZMINE", + "JANETT", + "HANNELORE", + "GLENDORA", + "GERTRUD", + "GARNETT", + "FREEDA", + "FREDERICA", + "FLORANCE", + "FLAVIA", + "DENNIS", + "CARLINE", + "BEVERLEE", + "ANJANETTE", + "VALDA", + "TRINITY", + "TAMALA", + "STEVIE", + "SHONNA", + "SHA", + "SARINA", + "ONEIDA", + "MICAH", + "MERILYN", + "MARLEEN", + "LURLINE", + "LENNA", + "KATHERIN", + "JIN", + "JENI", + "HAE", + "GRACIA", + "GLADY", + "FARAH", + "ERIC", + "ENOLA", + "EMA", + "DOMINQUE", + "DEVONA", + "DELANA", + "CECILA", + "CAPRICE", + "ALYSHA", + "ALI", + "ALETHIA", + "VENA", + "THERESIA", + "TAWNY", + "SONG", + "SHAKIRA", + "SAMARA", + "SACHIKO", + "RACHELE", + "PAMELLA", + "NICKY", + "MARNI", + "MARIEL", + "MAREN", + "MALISA", + "LIGIA", + "LERA", + "LATORIA", + "LARAE", + "KIMBER", + "KATHERN", + "KAREY", + "JENNEFER", + "JANETH", + "HALINA", + "FREDIA", + "DELISA", + "DEBROAH", + "CIERA", + "CHIN", + "ANGELIKA", + "ANDREE", + "ALTHA", + "YEN", + "VIVAN", + "TERRESA", + "TANNA", + "SUK", + "SUDIE", + "SOO", + "SIGNE", + "SALENA", + "RONNI", + "REBBECCA", + "MYRTIE", + "MCKENZIE", + "MALIKA", + "MAIDA", + "LOAN", + "LEONARDA", + "KAYLEIGH", + "FRANCE", + "ETHYL", + "ELLYN", + "DAYLE", + "CAMMIE", + "BRITTNI", + "BIRGIT", + "AVELINA", + "ASUNCION", + "ARIANNA", + "AKIKO", + "VENICE", + "TYESHA", + "TONIE", + "TIESHA", + "TAKISHA", + "STEFFANIE", + "SINDY", + "SANTANA", + "MEGHANN", + "MANDA", + "MACIE", + "LADY", + "KELLYE", + "KELLEE", + "JOSLYN", + "JASON", + "INGER", + "INDIRA", + "GLINDA", + "GLENNIS", + "FERNANDA", + "FAUSTINA", + "ENEIDA", + "ELICIA", + "DOT", + "DIGNA", + "DELL", + "ARLETTA", + "ANDRE", + "WILLIA", + "TAMMARA", + "TABETHA", + "SHERRELL", + "SARI", + "REFUGIO", + "REBBECA", + "PAULETTA", + "NIEVES", + "NATOSHA", + "NAKITA", + "MAMMIE", + "KENISHA", + "KAZUKO", + "KASSIE", + "GARY", + "EARLEAN", + "DAPHINE", + "CORLISS", + "CLOTILDE", + "CAROLYNE", + "BERNETTA", + "AUGUSTINA", + "AUDREA", + "ANNIS", + "ANNABELL", + "YAN", + "TENNILLE", + "TAMICA", + "SELENE", + "SEAN", + "ROSANA", + "REGENIA", + "QIANA", + "MARKITA", + "MACY", + "LEEANNE", + "LAURINE", + "KYM", + "JESSENIA", + "JANITA", + "GEORGINE", + "GENIE", + "EMIKO", + "ELVIE", + "DEANDRA", + "DAGMAR", + "CORIE", + "COLLEN", + "CHERISH", + "ROMAINE", + "PORSHA", + "PEARLENE", + "MICHELINE", + "MERNA", + "MARGORIE", + "MARGARETTA", + "LORE", + "KENNETH", + "JENINE", + "HERMINA", + "FREDERICKA", + "ELKE", + "DRUSILLA", + "DORATHY", + "DIONE", + "DESIRE", + "CELENA", + "BRIGIDA", + "ANGELES", + "ALLEGRA", + "THEO", + "TAMEKIA", + "SYNTHIA", + "STEPHEN", + "SOOK", + "SLYVIA", + "ROSANN", + "REATHA", + "RAYE", + "MARQUETTA", + "MARGART", + "LING", + "LAYLA", + "KYMBERLY", + "KIANA", + "KAYLEEN", + "KATLYN", + "KARMEN", + "JOELLA", + "IRINA", + "EMELDA", + "ELENI", + "DETRA", + "CLEMMIE", + "CHERYLL", + "CHANTELL", + "CATHEY", + "ARNITA", + "ARLA", + "ANGLE", + "ANGELIC", + "ALYSE", + "ZOFIA", + "THOMASINE", + "TENNIE", + "SON", + "SHERLY", + "SHERLEY", + "SHARYL", + "REMEDIOS", + "PETRINA", + "NICKOLE", + "MYUNG", + "MYRLE", + "MOZELLA", + "LOUANNE", + "LISHA", + "LATIA", + "LANE", + "KRYSTA", + "JULIENNE", + "JOEL", + "JEANENE", + "JACQUALINE", + "ISAURA", + "GWENDA", + "EARLEEN", + "DONALD", + "CLEOPATRA", + "CARLIE", + "AUDIE", + "ANTONIETTA", + "ALISE", + "ALEX", + "VERDELL", + "VAL", + "TYLER", + "TOMOKO", + "THAO", + "TALISHA", + "STEVEN", + "SO", + "SHEMIKA", + "SHAUN", + "SCARLET", + "SAVANNA", + "SANTINA", + "ROSIA", + "RAEANN", + "ODILIA", + "NANA", + "MINNA", + "MAGAN", + "LYNELLE", + "LE", + "KARMA", + "JOEANN", + "IVANA", + "INELL", + "ILANA", + "HYE", + "HONEY", + "HEE", + "GUDRUN", + "FRANK", + "DREAMA", + "CRISSY", + "CHANTE", + "CARMELINA", + "ARVILLA", + "ARTHUR", + "ANNAMAE", + "ALVERA", + "ALEIDA", + "AARON", + "YEE", + "YANIRA", + "VANDA", + "TIANNA", + "TAM", + "STEFANIA", + "SHIRA", + "PERRY", + "NICOL", + "NANCIE", + "MONSERRATE", + "MINH", + "MELYNDA", + "MELANY", + "MATTHEW", + "LOVELLA", + "LAURE", + "KIRBY", + "KACY", + "JACQUELYNN", + "HYON", + "GERTHA", + "FRANCISCO", + "ELIANA", + "CHRISTENA", + "CHRISTEEN", + "CHARISE", + "CATERINA", + "CARLEY", + "CANDYCE", + "ARLENA", + "AMMIE", + "YANG", + "WILLETTE", + "VANITA", + "TUYET", + "TINY", + "SYREETA", + "SILVA", + "SCOTT", + "RONALD", + "PENNEY", + "NYLA", + "MICHAL", + "MAURICE", + "MARYAM", + "MARYA", + "MAGEN", + "LUDIE", + "LOMA", + "LIVIA", + "LANELL", + "KIMBERLIE", + "JULEE", + "DONETTA", + "DIEDRA", + "DENISHA", + "DEANE", + "DAWNE", + "CLARINE", + "CHERRYL", + "BRONWYN", + "BRANDON", + "ALLA", + "VALERY", + "TONDA", + "SUEANN", + "SORAYA", + "SHOSHANA", + "SHELA", + "SHARLEEN", + "SHANELLE", + "NERISSA", + "MICHEAL", + "MERIDITH", + "MELLIE", + "MAYE", + "MAPLE", + "MAGARET", + "LUIS", + "LILI", + "LEONILA", + "LEONIE", + "LEEANNA", + "LAVONIA", + "LAVERA", + "KRISTEL", + "KATHEY", + "KATHE", + "JUSTIN", + "JULIAN", + "JIMMY", + "JANN", + "ILDA", + "HILDRED", + "HILDEGARDE", + "GENIA", + "FUMIKO", + "EVELIN", + "ERMELINDA", + "ELLY", + "DUNG", + "DOLORIS", + "DIONNA", + "DANAE", + "BERNEICE", + "ANNICE", + "ALIX", + "VERENA", + "VERDIE", + "TRISTAN", + "SHAWNNA", + "SHAWANA", + "SHAUNNA", + "ROZELLA", + "RANDEE", + "RANAE", + "MILAGRO", + "LYNELL", + "LUISE", + "LOUIE", + "LOIDA", + "LISBETH", + "KARLEEN", + "JUNITA", + "JONA", + "ISIS", + "HYACINTH", + "HEDY", + "GWENN", + "ETHELENE", + "ERLINE", + "EDWARD", + "DONYA", + "DOMONIQUE", + "DELICIA", + "DANNETTE", + "CICELY", + "BRANDA", + "BLYTHE", + "BETHANN", + "ASHLYN", + "ANNALEE", + "ALLINE", + "YUKO", + "VELLA", + "TRANG", + "TOWANDA", + "TESHA", + "SHERLYN", + "NARCISA", + "MIGUELINA", + "MERI", + "MAYBELL", + "MARLANA", + "MARGUERITA", + "MADLYN", + "LUNA", + "LORY", + "LORIANN", + "LIBERTY", + "LEONORE", + "LEIGHANN", + "LAURICE", + "LATESHA", + "LARONDA", + "KATRICE", + "KASIE", + "KARL", + "KALEY", + "JADWIGA", + "GLENNIE", + "GEARLDINE", + "FRANCINA", + "EPIFANIA", + "DYAN", + "DORIE", + "DIEDRE", + "DENESE", + "DEMETRICE", + "DELENA", + "DARBY", + "CRISTIE", + "CLEORA", + "CATARINA", + "CARISA", + "BERNIE", + "BARBERA", + "ALMETA", + "TRULA", + "TEREASA", + "SOLANGE", + "SHEILAH", + "SHAVONNE", + "SANORA", + "ROCHELL", + "MATHILDE", + "MARGARETA", + "MAIA", + "LYNSEY", + "LAWANNA", + "LAUNA", + "KENA", + "KEENA", + "KATIA", + "JAMEY", + "GLYNDA", + "GAYLENE", + "ELVINA", + "ELANOR", + "DANUTA", + "DANIKA", + "CRISTEN", + "CORDIE", + "COLETTA", + "CLARITA", + "CARMON", + "BRYNN", + "AZUCENA", + "AUNDREA", + "ANGELE", + "YI", + "WALTER", + "VERLIE", + "VERLENE", + "TAMESHA", + "SILVANA", + "SEBRINA", + "SAMIRA", + "REDA", + "RAYLENE", + "PENNI", + "PANDORA", + "NORAH", + "NOMA", + "MIREILLE", + "MELISSIA", + "MARYALICE", + "LARAINE", + "KIMBERY", + "KARYL", + "KARINE", + "KAM", + "JOLANDA", + "JOHANA", + "JESUSA", + "JALEESA", + "JAE", + "JACQUELYNE", + "IRISH", + "ILUMINADA", + "HILARIA", + "HANH", + "GENNIE", + "FRANCIE", + "FLORETTA", + "EXIE", + "EDDA", + "DREMA", + "DELPHA", + "BEV", + "BARBAR", + "ASSUNTA", + "ARDELL", + "ANNALISA", + "ALISIA", + "YUKIKO", + "YOLANDO", + "WONDA", + "WEI", + "WALTRAUD", + "VETA", + "TEQUILA", + "TEMEKA", + "TAMEIKA", + "SHIRLEEN", + "SHENITA", + "PIEDAD", + "OZELLA", + "MIRTHA", + "MARILU", + "KIMIKO", + "JULIANE", + "JENICE", + "JEN", + "JANAY", + "JACQUILINE", + "HILDE", + "FE", + "FAE", + "EVAN", + "EUGENE", + "ELOIS", + "ECHO", + "DEVORAH", + "CHAU", + "BRINDA", + "BETSEY", + "ARMINDA", + "ARACELIS", + "APRYL", + "ANNETT", + "ALISHIA", + "VEOLA", + "USHA", + "TOSHIKO", + "THEOLA", + "TASHIA", + "TALITHA", + "SHERY", + "RUDY", + "RENETTA", + "REIKO", + "RASHEEDA", + "OMEGA", + "OBDULIA", + "MIKA", + "MELAINE", + "MEGGAN", + "MARTIN", + "MARLEN", + "MARGET", + "MARCELINE", + "MANA", + "MAGDALEN", + "LIBRADA", + "LEZLIE", + "LEXIE", + "LATASHIA", + "LASANDRA", + "KELLE", + "ISIDRA", + "ISA", + "INOCENCIA", + "GWYN", + "FRANCOISE", + "ERMINIA", + "ERINN", + "DIMPLE", + "DEVORA", + "CRISELDA", + "ARMANDA", + "ARIE", + "ARIANE", + "ANGELO", + "ANGELENA", + "ALLEN", + "ALIZA", + "ADRIENE", + "ADALINE", + "XOCHITL", + "TWANNA", + "TRAN", + "TOMIKO", + "TAMISHA", + "TAISHA", + "SUSY", + "SIU", + "RUTHA", + "ROXY", + "RHONA", + "RAYMOND", + "OTHA", + "NORIKO", + "NATASHIA", + "MERRIE", + "MELVIN", + "MARINDA", + "MARIKO", + "MARGERT", + "LORIS", + "LIZZETTE", + "LEISHA", + "KAILA", + "KA", + "JOANNIE", + "JERRICA", + "JENE", + "JANNET", + "JANEE", + "JACINDA", + "HERTA", + "ELENORE", + "DORETTA", + "DELAINE", + "DANIELL", + "CLAUDIE", + "CHINA", + "BRITTA", + "APOLONIA", + "AMBERLY", + "ALEASE", + "YURI", + "YUK", + "WEN", + "WANETA", + "UTE", + "TOMI", + "SHARRI", + "SANDIE", + "ROSELLE", + "REYNALDA", + "RAGUEL", + "PHYLICIA", + "PATRIA", + "OLIMPIA", + "ODELIA", + "MITZIE", + "MITCHELL", + "MISS", + "MINDA", + "MIGNON", + "MICA", + "MENDY", + "MARIVEL", + "MAILE", + "LYNETTA", + "LAVETTE", + "LAURYN", + "LATRISHA", + "LAKIESHA", + "KIERSTEN", + "KARY", + "JOSPHINE", + "JOLYN", + "JETTA", + "JANISE", + "JACQUIE", + "IVELISSE", + "GLYNIS", + "GIANNA", + "GAYNELLE", + "EMERALD", + "DEMETRIUS", + "DANYELL", + "DANILLE", + "DACIA", + "CORALEE", + "CHER", + "CEOLA", + "BRETT", + "BELL", + "ARIANNE", + "ALESHIA", + "YUNG", + "WILLIEMAE", + "TROY", + "TRINH", + "THORA", + "TAI", + "SVETLANA", + "SHERIKA", + "SHEMEKA", + "SHAUNDA", + "ROSELINE", + "RICKI", + "MELDA", + "MALLIE", + "LAVONNA", + "LATINA", + "LARRY", + "LAQUANDA", + "LALA", + "LACHELLE", + "KLARA", + "KANDIS", + "JOHNA", + "JEANMARIE", + "JAYE", + "HANG", + "GRAYCE", + "GERTUDE", + "EMERITA", + "EBONIE", + "CLORINDA", + "CHING", + "CHERY", + "CAROLA", + "BREANN", + "BLOSSOM", + "BERNARDINE", + "BECKI", + "ARLETHA", + "ARGELIA", + "ARA", + "ALITA", + "YULANDA", + "YON", + "YESSENIA", + "TOBI", + "TASIA", + "SYLVIE", + "SHIRL", + "SHIRELY", + "SHERIDAN", + "SHELLA", + "SHANTELLE", + "SACHA", + "ROYCE", + "REBECKA", + "REAGAN", + "PROVIDENCIA", + "PAULENE", + "MISHA", + "MIKI", + "MARLINE", + "MARICA", + "LORITA", + "LATOYIA", + "LASONYA", + "KERSTIN", + "KENDA", + "KEITHA", + "KATHRIN", + "JAYMIE", + "JACK", + "GRICELDA", + "GINETTE", + "ERYN", + "ELINA", + "ELFRIEDA", + "DANYEL", + "CHEREE", + "CHANELLE", + "BARRIE", + "AVERY", + "AURORE", + "ANNAMARIA", + "ALLEEN", + "AILENE", + "AIDE", + "YASMINE", + "VASHTI", + "VALENTINE", + "TREASA", + "TORY", + "TIFFANEY", + "SHERYLL", + "SHARIE", + "SHANAE", + "SAU", + "RAISA", + "PA", + "NEDA", + "MITSUKO", + "MIRELLA", + "MILDA", + "MARYANNA", + "MARAGRET", + "MABELLE", + "LUETTA", + "LORINA", + "LETISHA", + "LATARSHA", + "LANELLE", + "LAJUANA", + "KRISSY", + "KARLY", + "KARENA", + "JON", + "JESSIKA", + "JERICA", + "JEANELLE", + "JANUARY", + "JALISA", + "JACELYN", + "IZOLA", + "IVEY", + "GREGORY", + "EUNA", + "ETHA", + "DREW", + "DOMITILA", + "DOMINICA", + "DAINA", + "CREOLA", + "CARLI", + "CAMIE", + "BUNNY", + "BRITTNY", + "ASHANTI", + "ANISHA", + "ALEEN", + "ADAH", + "YASUKO", + "WINTER", + "VIKI", + "VALRIE", + "TONA", + "TINISHA", + "THI", + "TERISA", + "TATUM", + "TANEKA", + "SIMONNE", + "SHALANDA", + "SERITA", + "RESSIE", + "REFUGIA", + "PAZ", + "OLENE", + "NA", + "MERRILL", + "MARGHERITA", + "MANDIE", + "MAN", + "MAIRE", + "LYNDIA", + "LUCI", + "LORRIANE", + "LORETA", + "LEONIA", + "LAVONA", + "LASHAWNDA", + "LAKIA", + "KYOKO", + "KRYSTINA", + "KRYSTEN", + "KENIA", + "KELSI", + "JUDE", + "JEANICE", + "ISOBEL", + "GEORGIANN", + "GENNY", + "FELICIDAD", + "EILENE", + "DEON", + "DELOISE", + "DEEDEE", + "DANNIE", + "CONCEPTION", + "CLORA", + "CHERILYN", + "CHANG", + "CALANDRA", + "BERRY", + "ARMANDINA", + "ANISA", + "ULA", + "TIMOTHY", + "TIERA", + "THERESSA", + "STEPHANIA", + "SIMA", + "SHYLA", + "SHONTA", + "SHERA", + "SHAQUITA", + "SHALA", + "SAMMY", + "ROSSANA", + "NOHEMI", + "NERY", + "MORIAH", + "MELITA", + "MELIDA", + "MELANI", + "MARYLYNN", + "MARISHA", + "MARIETTE", + "MALORIE", + "MADELENE", + "LUDIVINA", + "LORIA", + "LORETTE", + "LORALEE", + "LIANNE", + "LEON", + "LAVENIA", + "LAURINDA", + "LASHON", + "KIT", + "KIMI", + "KEILA", + "KATELYNN", + "KAI", + "JONE", + "JOANE", + "JI", + "JAYNA", + "JANELLA", + "JA", + "HUE", + "HERTHA", + "FRANCENE", + "ELINORE", + "DESPINA", + "DELSIE", + "DEEDRA", + "CLEMENCIA", + "CARRY", + "CAROLIN", + "CARLOS", + "BULAH", + "BRITTANIE", + "BOK", + "BLONDELL", + "BIBI", + "BEAULAH", + "BEATA", + "ANNITA", + "AGRIPINA", + "VIRGEN", + "VALENE", + "UN", + "TWANDA", + "TOMMYE", + "TOI", + "TARRA", + "TARI", + "TAMMERA", + "SHAKIA", + "SADYE", + "RUTHANNE", + "ROCHEL", + "RIVKA", + "PURA", + "NENITA", + "NATISHA", + "MING", + "MERRILEE", + "MELODEE", + "MARVIS", + "LUCILLA", + "LEENA", + "LAVETA", + "LARITA", + "LANIE", + "KEREN", + "ILEEN", + "GEORGEANN", + "GENNA", + "GENESIS", + "FRIDA", + "EWA", + "EUFEMIA", + "EMELY", + "ELA", + "EDYTH", + "DEONNA", + "DEADRA", + "DARLENA", + "CHANELL", + "CHAN", + "CATHERN", + "CASSONDRA", + "CASSAUNDRA", + "BERNARDA", + "BERNA", + "ARLINDA", + "ANAMARIA", + "ALBERT", + "WESLEY", + "VERTIE", + "VALERI", + "TORRI", + "TATYANA", + "STASIA", + "SHERISE", + "SHERILL", + "SEASON", + "SCOTTIE", + "SANDA", + "RUTHE", + "ROSY", + "ROBERTO", + "ROBBI", + "RANEE", + "QUYEN", + "PEARLY", + "PALMIRA", + "ONITA", + "NISHA", + "NIESHA", + "NIDA", + "NEVADA", + "NAM", + "MERLYN", + "MAYOLA", + "MARYLOUISE", + "MARYLAND", + "MARX", + "MARTH", + "MARGENE", + "MADELAINE", + "LONDA", + "LEONTINE", + "LEOMA", + "LEIA", + "LAWRENCE", + "LAURALEE", + "LANORA", + "LAKITA", + "KIYOKO", + "KETURAH", + "KATELIN", + "KAREEN", + "JONIE", + "JOHNETTE", + "JENEE", + "JEANETT", + "IZETTA", + "HIEDI", + "HEIKE", + "HASSIE", + "HAROLD", + "GIUSEPPINA", + "GEORGANN", + "FIDELA", + "FERNANDE", + "ELWANDA", + "ELLAMAE", + "ELIZ", + "DUSTI", + "DOTTY", + "CYNDY", + "CORALIE", + "CELESTA", + "ARGENTINA", + "ALVERTA", + "XENIA", + "WAVA", + "VANETTA", + "TORRIE", + "TASHINA", + "TANDY", + "TAMBRA", + "TAMA", + "STEPANIE", + "SHILA", + "SHAUNTA", + "SHARAN", + "SHANIQUA", + "SHAE", + "SETSUKO", + "SERAFINA", + "SANDEE", + "ROSAMARIA", + "PRISCILA", + "OLINDA", + "NADENE", + "MUOI", + "MICHELINA", + "MERCEDEZ", + "MARYROSE", + "MARIN", + "MARCENE", + "MAO", + "MAGALI", + "MAFALDA", + "LOGAN", + "LINN", + "LANNIE", + "KAYCE", + "KAROLINE", + "KAMILAH", + "KAMALA", + "JUSTA", + "JOLINE", + "JENNINE", + "JACQUETTA", + "IRAIDA", + "GERALD", + "GEORGEANNA", + "FRANCHESCA", + "FAIRY", + "EMELINE", + "ELANE", + "EHTEL", + "EARLIE", + "DULCIE", + "DALENE", + "CRIS", + "CLASSIE", + "CHERE", + "CHARIS", + "CAROYLN", + "CARMINA", + "CARITA", + "BRIAN", + "BETHANIE", + "AYAKO", + "ARICA", + "AN", + "ALYSA", + "ALESSANDRA", + "AKILAH", + "ADRIEN", + "ZETTA", + "YOULANDA", + "YELENA", + "YAHAIRA", + "XUAN", + "WENDOLYN", + "VICTOR", + "TIJUANA", + "TERRELL", + "TERINA", + "TERESIA", + "SUZI", + "SUNDAY", + "SHERELL", + "SHAVONDA", + "SHAUNTE", + "SHARDA", + "SHAKITA", + "SENA", + "RYANN", + "RUBI", + "RIVA", + "REGINIA", + "REA", + "RACHAL", + "PARTHENIA", + "PAMULA", + "MONNIE", + "MONET", + "MICHAELE", + "MELIA", + "MARINE", + "MALKA", + "MAISHA", + "LISANDRA", + "LEO", + "LEKISHA", + "LEAN", + "LAURENCE", + "LAKENDRA", + "KRYSTIN", + "KORTNEY", + "KIZZIE", + "KITTIE", + "KERA", + "KENDAL", + "KEMBERLY", + "KANISHA", + "JULENE", + "JULE", + "JOSHUA", + "JOHANNE", + "JEFFREY", + "JAMEE", + "HAN", + "HALLEY", + "GIDGET", + "GALINA", + "FREDRICKA", + "FLETA", + "FATIMAH", + "EUSEBIA", + "ELZA", + "ELEONORE", + "DORTHEY", + "DORIA", + "DONELLA", + "DINORAH", + "DELORSE", + "CLARETHA", + "CHRISTINIA", + "CHARLYN", + "BONG", + "BELKIS", + "AZZIE", + "ANDERA", + "AIKO", + "ADENA", + "YER", + "YAJAIRA", + "WAN", + "VANIA", + "ULRIKE", + "TOSHIA", + "TIFANY", + "STEFANY", + "SHIZUE", + "SHENIKA", + "SHAWANNA", + "SHAROLYN", + "SHARILYN", + "SHAQUANA", + "SHANTAY", + "SEE", + "ROZANNE", + "ROSELEE", + "RICKIE", + "REMONA", + "REANNA", + "RAELENE", + "QUINN", + "PHUNG", + "PETRONILA", + "NATACHA", + "NANCEY", + "MYRL", + "MIYOKO", + "MIESHA", + "MERIDETH", + "MARVELLA", + "MARQUITTA", + "MARHTA", + "MARCHELLE", + "LIZETH", + "LIBBIE", + "LAHOMA", + "LADAWN", + "KINA", + "KATHELEEN", + "KATHARYN", + "KARISA", + "KALEIGH", + "JUNIE", + "JULIEANN", + "JOHNSIE", + "JANEAN", + "JAIMEE", + "JACKQUELINE", + "HISAKO", + "HERMA", + "HELAINE", + "GWYNETH", + "GLENN", + "GITA", + "EUSTOLIA", + "EMELINA", + "ELIN", + "EDRIS", + "DONNETTE", + "DONNETTA", + "DIERDRE", + "DENAE", + "DARCEL", + "CLAUDE", + "CLARISA", + "CINDERELLA", + "CHIA", + "CHARLESETTA", + "CHARITA", + "CELSA", + "CASSY", + "CASSI", + "CARLEE", + "BRUNA", + "BRITTANEY", + "BRANDE", + "BILLI", + "BAO", + "ANTONETTA", + "ANGLA", + "ANGELYN", + "ANALISA", + "ALANE", + "WENONA", + "WENDIE", + "VERONIQUE", + "VANNESA", + "TOBIE", + "TEMPIE", + "SUMIKO", + "SULEMA", + "SPARKLE", + "SOMER", + "SHEBA", + "SHAYNE", + "SHARICE", + "SHANEL", + "SHALON", + "SAGE", + "ROY", + "ROSIO", + "ROSELIA", + "RENAY", + "REMA", + "REENA", + "PORSCHE", + "PING", + "PEG", + "OZIE", + "ORETHA", + "ORALEE", + "ODA", + "NU", + "NGAN", + "NAKESHA", + "MILLY", + "MARYBELLE", + "MARLIN", + "MARIS", + "MARGRETT", + "MARAGARET", + "MANIE", + "LURLENE", + "LILLIA", + "LIESELOTTE", + "LAVELLE", + "LASHAUNDA", + "LAKEESHA", + "KEITH", + "KAYCEE", + "KALYN", + "JOYA", + "JOETTE", + "JENAE", + "JANIECE", + "ILLA", + "GRISEL", + "GLAYDS", + "GENEVIE", + "GALA", + "FREDDA", + "FRED", + "ELMER", + "ELEONOR", + "DEBERA", + "DEANDREA", + "DAN", + "CORRINNE", + "CORDIA", + "CONTESSA", + "COLENE", + "CLEOTILDE", + "CHARLOTT", + "CHANTAY", + "CECILLE", + "BEATRIS", + "AZALEE", + "ARLEAN", + "ARDATH", + "ANJELICA", + "ANJA", + "ALFREDIA", + "ALEISHA", + "ADAM", + "ZADA", + "YUONNE", + "XIAO", + "WILLODEAN", + "WHITLEY", + "VENNIE", + "VANNA", + "TYISHA", + "TOVA", + "TORIE", + "TONISHA", + "TILDA", + "TIEN", + "TEMPLE", + "SIRENA", + "SHERRIL", + "SHANTI", + "SHAN", + "SENAIDA", + "SAMELLA", + "ROBBYN", + "RENDA", + "REITA", + "PHEBE", + "PAULITA", + "NOBUKO", + "NGUYET", + "NEOMI", + "MOON", + "MIKAELA", + "MELANIA", + "MAXIMINA", + "MARG", + "MAISIE", + "LYNNA", + "LILLI", + "LAYNE", + "LASHAUN", + "LAKENYA", + "LAEL", + "KIRSTIE", + "KATHLINE", + "KASHA", + "KARLYN", + "KARIMA", + "JOVAN", + "JOSEFINE", + "JENNELL", + "JACQUI", + "JACKELYN", + "HYO", + "HIEN", + "GRAZYNA", + "FLORRIE", + "FLORIA", + "ELEONORA", + "DWANA", + "DORLA", + "DONG", + "DELMY", + "DEJA", + "DEDE", + "DANN", + "CRYSTA", + "CLELIA", + "CLARIS", + "CLARENCE", + "CHIEKO", + "CHERLYN", + "CHERELLE", + "CHARMAIN", + "CHARA", + "CAMMY", + "BEE", + "ARNETTE", + "ARDELLE", + "ANNIKA", + "AMIEE", + "AMEE", + "ALLENA", + "YVONE", + "YUKI", + "YOSHIE", + "YEVETTE", + "YAEL", + "WILLETTA", + "VONCILE", + "VENETTA", + "TULA", + "TONETTE", + "TIMIKA", + "TEMIKA", + "TELMA", + "TEISHA", + "TAREN", + "TA", + "STACEE", + "SHIN", + "SHAWNTA", + "SATURNINA", + "RICARDA", + "POK", + "PASTY", + "ONIE", + "NUBIA", + "MORA", + "MIKE", + "MARIELLE", + "MARIELLA", + "MARIANELA", + "MARDELL", + "MANY", + "LUANNA", + "LOISE", + "LISABETH", + "LINDSY", + "LILLIANA", + "LILLIAM", + "LELAH", + "LEIGHA", + "LEANORA", + "LANG", + "KRISTEEN", + "KHALILAH", + "KEELEY", + "KANDRA", + "JUNKO", + "JOAQUINA", + "JERLENE", + "JANI", + "JAMIKA", + "JAME", + "HSIU", + "HERMILA", + "GOLDEN", + "GENEVIVE", + "EVIA", + "EUGENA", + "EMMALINE", + "ELFREDA", + "ELENE", + "DONETTE", + "DELCIE", + "DEEANNA", + "DARCEY", + "CUC", + "CLARINDA", + "CIRA", + "CHAE", + "CELINDA", + "CATHERYN", + "CATHERIN", + "CASIMIRA", + "CARMELIA", + "CAMELLIA", + "BREANA", + "BOBETTE", + "BERNARDINA", + "BEBE", + "BASILIA", + "ARLYNE", + "AMAL", + "ALAYNA", + "ZONIA", + "ZENIA", + "YURIKO", + "YAEKO", + "WYNELL", + "WILLOW", + "WILLENA", + "VERNIA", + "TU", + "TRAVIS", + "TORA", + "TERRILYN", + "TERICA", + "TENESHA", + "TAWNA", + "TAJUANA", + "TAINA", + "STEPHNIE", + "SONA", + "SOL", + "SINA", + "SHONDRA", + "SHIZUKO", + "SHERLENE", + "SHERICE", + "SHARIKA", + "ROSSIE", + "ROSENA", + "RORY", + "RIMA", + "RIA", + "RHEBA", + "RENNA", + "PETER", + "NATALYA", + "NANCEE", + "MELODI", + "MEDA", + "MAXIMA", + "MATHA", + "MARKETTA", + "MARICRUZ", + "MARCELENE", + "MALVINA", + "LUBA", + "LOUETTA", + "LEIDA", + "LECIA", + "LAURAN", + "LASHAWNA", + "LAINE", + "KHADIJAH", + "KATERINE", + "KASI", + "KALLIE", + "JULIETTA", + "JESUSITA", + "JESTINE", + "JESSIA", + "JEREMY", + "JEFFIE", + "JANYCE", + "ISADORA", + "GEORGIANNE", + "FIDELIA", + "EVITA", + "EURA", + "EULAH", + "ESTEFANA", + "ELSY", + "ELIZABET", + "ELADIA", + "DODIE", + "DION", + "DIA", + "DENISSE", + "DELORAS", + "DELILA", + "DAYSI", + "DAKOTA", + "CURTIS", + "CRYSTLE", + "CONCHA", + "COLBY", + "CLARETTA", + "CHU", + "CHRISTIA", + "CHARLSIE", + "CHARLENA", + "CARYLON", + "BETTYANN", + "ASLEY", + "ASHLEA", + "AMIRA", + "AI", + "AGUEDA", + "AGNUS", + "YUETTE", + "VINITA", + "VICTORINA", + "TYNISHA", + "TREENA", + "TOCCARA", + "TISH", + "THOMASENA", + "TEGAN", + "SOILA", + "SHILOH", + "SHENNA", + "SHARMAINE", + "SHANTAE", + "SHANDI", + "SEPTEMBER", + "SARAN", + "SARAI", + "SANA", + "SAMUEL", + "SALLEY", + "ROSETTE", + "ROLANDE", + "REGINE", + "OTELIA", + "OSCAR", + "OLEVIA", + "NICHOLLE", + "NECOLE", + "NAIDA", + "MYRTA", + "MYESHA", + "MITSUE", + "MINTA", + "MERTIE", + "MARGY", + "MAHALIA", + "MADALENE", + "LOVE", + "LOURA", + "LOREAN", + "LEWIS", + "LESHA", + "LEONIDA", + "LENITA", + "LAVONE", + "LASHELL", + "LASHANDRA", + "LAMONICA", + "KIMBRA", + "KATHERINA", + "KARRY", + "KANESHA", + "JULIO", + "JONG", + "JENEVA", + "JAQUELYN", + "HWA", + "GILMA", + "GHISLAINE", + "GERTRUDIS", + "FRANSISCA", + "FERMINA", + "ETTIE", + "ETSUKO", + "ELLIS", + "ELLAN", + "ELIDIA", + "EDRA", + "DORETHEA", + "DOREATHA", + "DENYSE", + "DENNY", + "DEETTA", + "DAINE", + "CYRSTAL", + "CORRIN", + "CAYLA", + "CARLITA", + "CAMILA", + "BURMA", + "BULA", + "BUENA", + "BLAKE", + "BARABARA", + "AVRIL", + "AUSTIN", + "ALAINE", + "ZANA", + "WILHEMINA", + "WANETTA", + "VIRGIL", + "VI", + "VERONIKA", + "VERNON", + "VERLINE", + "VASILIKI", + "TONITA", + "TISA", + "TEOFILA", + "TAYNA", + "TAUNYA", + "TANDRA", + "TAKAKO", + "SUNNI", + "SUANNE", + "SIXTA", + "SHARELL", + "SEEMA", + "RUSSELL", + "ROSENDA", + "ROBENA", + "RAYMONDE", + "PEI", + "PAMILA", + "OZELL", + "NEIDA", + "NEELY", + "MISTIE", + "MICHA", + "MERISSA", + "MAURITA", + "MARYLN", + "MARYETTA", + "MARSHALL", + "MARCELL", + "MALENA", + "MAKEDA", + "MADDIE", + "LOVETTA", + "LOURIE", + "LORRINE", + "LORILEE", + "LESTER", + "LAURENA", + "LASHAY", + "LARRAINE", + "LAREE", + "LACRESHA", + "KRISTLE", + "KRISHNA", + "KEVA", + "KEIRA", + "KAROLE", + "JOIE", + "JINNY", + "JEANNETTA", + "JAMA", + "HEIDY", + "GILBERTE", + "GEMA", + "FAVIOLA", + "EVELYNN", + "ENDA", + "ELLI", + "ELLENA", + "DIVINA", + "DAGNY", + "COLLENE", + "CODI", + "CINDIE", + "CHASSIDY", + "CHASIDY", + "CATRICE", + "CATHERINA", + "CASSEY", + "CAROLL", + "CARLENA", + "CANDRA", + "CALISTA", + "BRYANNA", + "BRITTENY", + "BEULA", + "BARI", + "AUDRIE", + "AUDRIA", + "ARDELIA", + "ANNELLE", + "ANGILA", + "ALONA", + "ALLYN", + "DOUGLAS", + "ROGER", + "JONATHAN", + "RALPH", + "NICHOLAS", + "BENJAMIN", + "BRUCE", + "HARRY", + "WAYNE", + "STEVE", + "HOWARD", + "ERNEST", + "PHILLIP", + "TODD", + "CRAIG", + "ALAN", + "PHILIP", + "EARL", + "DANNY", + "BRYAN", + "STANLEY", + "LEONARD", + "NATHAN", + "MANUEL", + "RODNEY", + "MARVIN", + "VINCENT", + "JEFFERY", + "JEFF", + "CHAD", + "JACOB", + "ALFRED", + "BRADLEY", + "HERBERT", + "FREDERICK", + "EDWIN", + "DON", + "RICKY", + "RANDALL", + "BARRY", + "BERNARD", + "LEROY", + "MARCUS", + "THEODORE", + "CLIFFORD", + "MIGUEL", + "JIM", + "TOM", + "CALVIN", + "BILL", + "LLOYD", + "DEREK", + "WARREN", + "DARRELL", + "JEROME", + "FLOYD", + "ALVIN", + "TIM", + "GORDON", + "GREG", + "JORGE", + "DUSTIN", + "PEDRO", + "DERRICK", + "ZACHARY", + "HERMAN", + "GLEN", + "HECTOR", + "RICARDO", + "RICK", + "BRENT", + "RAMON", + "GILBERT", + "MARC", + "REGINALD", + "RUBEN", + "NATHANIEL", + "RAFAEL", + "EDGAR", + "MILTON", + "RAUL", + "BEN", + "CHESTER", + "DUANE", + "FRANKLIN", + "BRAD", + "RON", + "ROLAND", + "ARNOLD", + "HARVEY", + "JARED", + "ERIK", + "DARRYL", + "NEIL", + "JAVIER", + "FERNANDO", + "CLINTON", + "TED", + "MATHEW", + "TYRONE", + "DARREN", + "LANCE", + "KURT", + "ALLAN", + "NELSON", + "GUY", + "CLAYTON", + "HUGH", + "MAX", + "DWAYNE", + "DWIGHT", + "ARMANDO", + "FELIX", + "EVERETT", + "IAN", + "WALLACE", + "KEN", + "BOB", + "ALFREDO", + "ALBERTO", + "DAVE", + "IVAN", + "BYRON", + "ISAAC", + "MORRIS", + "CLIFTON", + "WILLARD", + "ROSS", + "ANDY", + "SALVADOR", + "KIRK", + "SERGIO", + "SETH", + "KENT", + "TERRANCE", + "EDUARDO", + "TERRENCE", + "ENRIQUE", + "WADE", + "STUART", + "FREDRICK", + "ARTURO", + "ALEJANDRO", + "NICK", + "LUTHER", + "WENDELL", + "JEREMIAH", + "JULIUS", + "OTIS", + "TREVOR", + "OLIVER", + "LUKE", + "HOMER", + "GERARD", + "DOUG", + "KENNY", + "HUBERT", + "LYLE", + "MATT", + "ALFONSO", + "ORLANDO", + "REX", + "CARLTON", + "ERNESTO", + "NEAL", + "PABLO", + "LORENZO", + "OMAR", + "WILBUR", + "GRANT", + "HORACE", + "RODERICK", + "ABRAHAM", + "WILLIS", + "RICKEY", + "ANDRES", + "CESAR", + "JOHNATHAN", + "MALCOLM", + "RUDOLPH", + "DAMON", + "KELVIN", + "PRESTON", + "ALTON", + "ARCHIE", + "MARCO", + "WM", + "PETE", + "RANDOLPH", + "GARRY", + "GEOFFREY", + "JONATHON", + "FELIPE", + "GERARDO", + "ED", + "DOMINIC", + "DELBERT", + "COLIN", + "GUILLERMO", + "EARNEST", + "LUCAS", + "BENNY", + "SPENCER", + "RODOLFO", + "MYRON", + "EDMUND", + "GARRETT", + "SALVATORE", + "CEDRIC", + "LOWELL", + "GREGG", + "SHERMAN", + "WILSON", + "SYLVESTER", + "ROOSEVELT", + "ISRAEL", + "JERMAINE", + "FORREST", + "WILBERT", + "LELAND", + "SIMON", + "CLARK", + "IRVING", + "BRYANT", + "OWEN", + "RUFUS", + "WOODROW", + "KRISTOPHER", + "MACK", + "LEVI", + "MARCOS", + "GUSTAVO", + "JAKE", + "LIONEL", + "GILBERTO", + "CLINT", + "NICOLAS", + "ISMAEL", + "ORVILLE", + "ERVIN", + "DEWEY", + "AL", + "WILFRED", + "JOSH", + "HUGO", + "IGNACIO", + "CALEB", + "TOMAS", + "SHELDON", + "ERICK", + "STEWART", + "DOYLE", + "DARREL", + "ROGELIO", + "TERENCE", + "SANTIAGO", + "ALONZO", + "ELIAS", + "BERT", + "ELBERT", + "RAMIRO", + "CONRAD", + "NOAH", + "GRADY", + "PHIL", + "CORNELIUS", + "LAMAR", + "ROLANDO", + "CLAY", + "PERCY", + "DEXTER", + "BRADFORD", + "DARIN", + "AMOS", + "MOSES", + "IRVIN", + "SAUL", + "ROMAN", + "RANDAL", + "TIMMY", + "DARRIN", + "WINSTON", + "BRENDAN", + "ABEL", + "DOMINICK", + "BOYD", + "EMILIO", + "ELIJAH", + "DOMINGO", + "EMMETT", + "MARLON", + "EMANUEL", + "JERALD", + "EDMOND", + "EMIL", + "DEWAYNE", + "WILL", + "OTTO", + "TEDDY", + "REYNALDO", + "BRET", + "JESS", + "TRENT", + "HUMBERTO", + "EMMANUEL", + "STEPHAN", + "VICENTE", + "LAMONT", + "GARLAND", + "MILES", + "EFRAIN", + "HEATH", + "RODGER", + "HARLEY", + "ETHAN", + "ELDON", + "ROCKY", + "PIERRE", + "JUNIOR", + "FREDDY", + "ELI", + "BRYCE", + "ANTOINE", + "STERLING", + "CHASE", + "GROVER", + "ELTON", + "CLEVELAND", + "DYLAN", + "CHUCK", + "DAMIAN", + "REUBEN", + "STAN", + "AUGUST", + "LEONARDO", + "JASPER", + "RUSSEL", + "ERWIN", + "BENITO", + "HANS", + "MONTE", + "BLAINE", + "ERNIE", + "CURT", + "QUENTIN", + "AGUSTIN", + "MURRAY", + "JAMAL", + "ADOLFO", + "HARRISON", + "TYSON", + "BURTON", + "BRADY", + "ELLIOTT", + "WILFREDO", + "BART", + "JARROD", + "VANCE", + "DENIS", + "DAMIEN", + "JOAQUIN", + "HARLAN", + "DESMOND", + "ELLIOT", + "DARWIN", + "GREGORIO", + "BUDDY", + "XAVIER", + "KERMIT", + "ROSCOE", + "ESTEBAN", + "ANTON", + "SOLOMON", + "SCOTTY", + "NORBERT", + "ELVIN", + "WILLIAMS", + "NOLAN", + "ROD", + "QUINTON", + "HAL", + "BRAIN", + "ROB", + "ELWOOD", + "KENDRICK", + "DARIUS", + "MOISES", + "FIDEL", + "THADDEUS", + "CLIFF", + "MARCEL", + "JACKSON", + "RAPHAEL", + "BRYON", + "ARMAND", + "ALVARO", + "JEFFRY", + "DANE", + "JOESPH", + "THURMAN", + "NED", + "RUSTY", + "MONTY", + "FABIAN", + "REGGIE", + "MASON", + "GRAHAM", + "ISAIAH", + "VAUGHN", + "GUS", + "LOYD", + "DIEGO", + "ADOLPH", + "NORRIS", + "MILLARD", + "ROCCO", + "GONZALO", + "DERICK", + "RODRIGO", + "WILEY", + "RIGOBERTO", + "ALPHONSO", + "TY", + "NOE", + "VERN", + "REED", + "JEFFERSON", + "ELVIS", + "BERNARDO", + "MAURICIO", + "HIRAM", + "DONOVAN", + "BASIL", + "RILEY", + "NICKOLAS", + "MAYNARD", + "SCOT", + "VINCE", + "QUINCY", + "EDDY", + "SEBASTIAN", + "FEDERICO", + "ULYSSES", + "HERIBERTO", + "DONNELL", + "COLE", + "DAVIS", + "GAVIN", + "EMERY", + "WARD", + "ROMEO", + "JAYSON", + "DANTE", + "CLEMENT", + "COY", + "MAXWELL", + "JARVIS", + "BRUNO", + "ISSAC", + "DUDLEY", + "BROCK", + "SANFORD", + "CARMELO", + "BARNEY", + "NESTOR", + "STEFAN", + "DONNY", + "ART", + "LINWOOD", + "BEAU", + "WELDON", + "GALEN", + "ISIDRO", + "TRUMAN", + "DELMAR", + "JOHNATHON", + "SILAS", + "FREDERIC", + "DICK", + "IRWIN", + "MERLIN", + "CHARLEY", + "MARCELINO", + "HARRIS", + "CARLO", + "TRENTON", + "KURTIS", + "HUNTER", + "AURELIO", + "WINFRED", + "VITO", + "COLLIN", + "DENVER", + "CARTER", + "LEONEL", + "EMORY", + "PASQUALE", + "MOHAMMAD", + "MARIANO", + "DANIAL", + "LANDON", + "DIRK", + "BRANDEN", + "ADAN", + "BUFORD", + "GERMAN", + "WILMER", + "EMERSON", + "ZACHERY", + "FLETCHER", + "JACQUES", + "ERROL", + "DALTON", + "MONROE", + "JOSUE", + "EDWARDO", + "BOOKER", + "WILFORD", + "SONNY", + "SHELTON", + "CARSON", + "THERON", + "RAYMUNDO", + "DAREN", + "HOUSTON", + "ROBBY", + "LINCOLN", + "GENARO", + "BENNETT", + "OCTAVIO", + "CORNELL", + "HUNG", + "ARRON", + "ANTONY", + "HERSCHEL", + "GIOVANNI", + "GARTH", + "CYRUS", + "CYRIL", + "RONNY", + "LON", + "FREEMAN", + "DUNCAN", + "KENNITH", + "CARMINE", + "ERICH", + "CHADWICK", + "WILBURN", + "RUSS", + "REID", + "MYLES", + "ANDERSON", + "MORTON", + "JONAS", + "FOREST", + "MITCHEL", + "MERVIN", + "ZANE", + "RICH", + "JAMEL", + "LAZARO", + "ALPHONSE", + "RANDELL", + "MAJOR", + "JARRETT", + "BROOKS", + "ABDUL", + "LUCIANO", + "SEYMOUR", + "EUGENIO", + "MOHAMMED", + "VALENTIN", + "CHANCE", + "ARNULFO", + "LUCIEN", + "FERDINAND", + "THAD", + "EZRA", + "ALDO", + "RUBIN", + "ROYAL", + "MITCH", + "EARLE", + "ABE", + "WYATT", + "MARQUIS", + "LANNY", + "KAREEM", + "JAMAR", + "BORIS", + "ISIAH", + "EMILE", + "ELMO", + "ARON", + "LEOPOLDO", + "EVERETTE", + "JOSEF", + "ELOY", + "RODRICK", + "REINALDO", + "LUCIO", + "JERROD", + "WESTON", + "HERSHEL", + "BARTON", + "PARKER", + "LEMUEL", + "BURT", + "JULES", + "GIL", + "ELISEO", + "AHMAD", + "NIGEL", + "EFREN", + "ANTWAN", + "ALDEN", + "MARGARITO", + "COLEMAN", + "DINO", + "OSVALDO", + "LES", + "DEANDRE", + "NORMAND", + "KIETH", + "TREY", + "NORBERTO", + "NAPOLEON", + "JEROLD", + "FRITZ", + "ROSENDO", + "MILFORD", + "CHRISTOPER", + "ALFONZO", + "LYMAN", + "JOSIAH", + "BRANT", + "WILTON", + "RICO", + "JAMAAL", + "DEWITT", + "BRENTON", + "OLIN", + "FOSTER", + "FAUSTINO", + "CLAUDIO", + "JUDSON", + "GINO", + "EDGARDO", + "ALEC", + "TANNER", + "JARRED", + "DONN", + "TAD", + "PRINCE", + "PORFIRIO", + "ODIS", + "LENARD", + "CHAUNCEY", + "TOD", + "MEL", + "MARCELO", + "KORY", + "AUGUSTUS", + "KEVEN", + "HILARIO", + "BUD", + "SAL", + "ORVAL", + "MAURO", + "ZACHARIAH", + "OLEN", + "ANIBAL", + "MILO", + "JED", + "DILLON", + "AMADO", + "NEWTON", + "LENNY", + "RICHIE", + "HORACIO", + "BRICE", + "MOHAMED", + "DELMER", + "DARIO", + "REYES", + "MAC", + "JONAH", + "JERROLD", + "ROBT", + "HANK", + "RUPERT", + "ROLLAND", + "KENTON", + "DAMION", + "ANTONE", + "WALDO", + "FREDRIC", + "BRADLY", + "KIP", + "BURL", + "WALKER", + "TYREE", + "JEFFEREY", + "AHMED", + "WILLY", + "STANFORD", + "OREN", + "NOBLE", + "MOSHE", + "MIKEL", + "ENOCH", + "BRENDON", + "QUINTIN", + "JAMISON", + "FLORENCIO", + "DARRICK", + "TOBIAS", + "HASSAN", + "GIUSEPPE", + "DEMARCUS", + "CLETUS", + "TYRELL", + "LYNDON", + "KEENAN", + "WERNER", + "GERALDO", + "COLUMBUS", + "CHET", + "BERTRAM", + "MARKUS", + "HUEY", + "HILTON", + "DWAIN", + "DONTE", + "TYRON", + "OMER", + "ISAIAS", + "HIPOLITO", + "FERMIN", + "ADALBERTO", + "BO", + "BARRETT", + "TEODORO", + "MCKINLEY", + "MAXIMO", + "GARFIELD", + "RALEIGH", + "LAWERENCE", + "ABRAM", + "RASHAD", + "KING", + "EMMITT", + "DARON", + "SAMUAL", + "MIQUEL", + "EUSEBIO", + "DOMENIC", + "DARRON", + "BUSTER", + "WILBER", + "RENATO", + "JC", + "HOYT", + "HAYWOOD", + "EZEKIEL", + "CHAS", + "FLORENTINO", + "ELROY", + "CLEMENTE", + "ARDEN", + "NEVILLE", + "EDISON", + "DESHAWN", + "NATHANIAL", + "JORDON", + "DANILO", + "CLAUD", + "SHERWOOD", + "RAYMON", + "RAYFORD", + "CRISTOBAL", + "AMBROSE", + "TITUS", + "HYMAN", + "FELTON", + "EZEQUIEL", + "ERASMO", + "STANTON", + "LONNY", + "LEN", + "IKE", + "MILAN", + "LINO", + "JAROD", + "HERB", + "ANDREAS", + "WALTON", + "RHETT", + "PALMER", + "DOUGLASS", + "CORDELL", + "OSWALDO", + "ELLSWORTH", + "VIRGILIO", + "TONEY", + "NATHANAEL", + "DEL", + "BENEDICT", + "MOSE", + "JOHNSON", + "ISREAL", + "GARRET", + "FAUSTO", + "ASA", + "ARLEN", + "ZACK", + "WARNER", + "MODESTO", + "FRANCESCO", + "MANUAL", + "GAYLORD", + "GASTON", + "FILIBERTO", + "DEANGELO", + "MICHALE", + "GRANVILLE", + "WES", + "MALIK", + "ZACKARY", + "TUAN", + "ELDRIDGE", + "CRISTOPHER", + "CORTEZ", + "ANTIONE", + "MALCOM", + "LONG", + "KOREY", + "JOSPEH", + "COLTON", + "WAYLON", + "VON", + "HOSEA", + "SHAD", + "SANTO", + "RUDOLF", + "ROLF", + "REY", + "RENALDO", + "MARCELLUS", + "LUCIUS", + "KRISTOFER", + "BOYCE", + "BENTON", + "HAYDEN", + "HARLAND", + "ARNOLDO", + "RUEBEN", + "LEANDRO", + "KRAIG", + "JERRELL", + "JEROMY", + "HOBERT", + "CEDRICK", + "ARLIE", + "WINFORD", + "WALLY", + "LUIGI", + "KENETH", + "JACINTO", + "GRAIG", + "FRANKLYN", + "EDMUNDO", + "SID", + "PORTER", + "LEIF", + "JERAMY", + "BUCK", + "WILLIAN", + "VINCENZO", + "SHON", + "LYNWOOD", + "JERE", + "HAI", + "ELDEN", + "DORSEY", + "DARELL", + "BRODERICK", + "ALONSO" +] From dba802325aa526ee66684bd0ed2c5d19a48e9a7d Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 19 May 2025 16:38:55 -0400 Subject: [PATCH 062/102] [REFACTOR] *.py files style fixed. --- .../sorting/ctci_bubble_sort.py | 4 ++-- src/projecteuler/lib/natural_number_test.py | 24 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort.py b/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort.py index 77d1d2bf..d648a52b 100644 --- a/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort.py +++ b/src/hackerrank/interview_preparation_kit/sorting/ctci_bubble_sort.py @@ -50,7 +50,7 @@ def countSwaps(group: list[int]) -> str: last = len(sortable_group.group) - 1 output = f'Array is sorted in {sortable_group.count} swaps.{SEPARATOR}' + \ - f'First Element: {sortable_group.group[0]}{SEPARATOR}' + \ - f'Last Element: {sortable_group.group[last]}{SEPARATOR}' + f'First Element: {sortable_group.group[0]}{SEPARATOR}' + \ + f'Last Element: {sortable_group.group[last]}{SEPARATOR}' return output diff --git a/src/projecteuler/lib/natural_number_test.py b/src/projecteuler/lib/natural_number_test.py index 3a3c1911..fa639bb4 100644 --- a/src/projecteuler/lib/natural_number_test.py +++ b/src/projecteuler/lib/natural_number_test.py @@ -88,15 +88,15 @@ def test_prime_factor(self): to_test = NaturalNumber(_tt['input']) message = f"{_} | NaturalNumber({_tt['input']}).get_prime_factor() "\ - f"must be => {_tt['answer']}" + f"must be => {_tt['answer']}" self.assertEqual(to_test.get_prime_factor(), _tt['answer'], message) message = f"{_} | NaturalNumber({_tt['input']}).get_divisor() "\ - f"must be => {_tt['divisor']}" + f"must be => {_tt['divisor']}" self.assertEqual(to_test.get_divisor(), _tt['divisor'], message) message = f"{_} | NaturalNumber({_tt['input']}).get_prime_factor_cycles() "\ - f"must be => {_tt['cycles']}" + f"must be => {_tt['cycles']}" self.assertEqual(to_test.get_prime_factor_cycles(), _tt['cycles'], message) def test_prime_factor_without_cache(self): @@ -112,7 +112,7 @@ def test_prime_factor_without_cache(self): to_test = NaturalNumber(_tt['input']) message = f"{_} | NaturalNumber({_tt['input']}).get_divisor() "\ - f"must be => {_tt['divisor']}" + f"must be => {_tt['divisor']}" self.assertEqual(to_test.get_divisor(), _tt['divisor'], message) def test_prime_factor_cycles_without_cache(self): @@ -128,7 +128,7 @@ def test_prime_factor_cycles_without_cache(self): to_test = NaturalNumber(_tt['input']) message = f"{_} | NaturalNumber({_tt['input']}).get_prime_factor_cycles() "\ - f"must be => {_tt['cycles']}" + f"must be => {_tt['cycles']}" self.assertEqual(to_test.get_prime_factor_cycles(), _tt['cycles'], message) def test_prime_and_cache(self): @@ -142,15 +142,15 @@ def test_prime_and_cache(self): to_test = NaturalNumber(_tt['input']) message = f"{_} | NaturalNumber({_tt['input']}).is_prime()"\ - f" first time must be => {_tt['answer']}" + f" first time must be => {_tt['answer']}" self.assertEqual(to_test.is_prime(), _tt['answer'], message) message = f"{_} | NaturalNumber({_tt['input']}).is_prime()"\ - f" with cache must be => {_tt['answer']}" + f" with cache must be => {_tt['answer']}" self.assertEqual(to_test.is_prime(), _tt['answer'], message) message = f"{_} | NaturalNumber({_tt['input']}).get_prime_cycles() must be "\ - f"=> {_tt['cycles']}" + f"=> {_tt['cycles']}" self.assertEqual(to_test.get_prime_cycles(), _tt['cycles'], message) def test_not_prime(self): @@ -164,7 +164,7 @@ def test_not_prime(self): to_test = NaturalNumber(_tt['input']) message = f"{_} | NaturalNumber({_tt['input']}).is_prime() must be "\ - f"=> {_tt['answer']}" + f"=> {_tt['answer']}" self.assertEqual(to_test.is_prime(), _tt['answer'], message) def test_prime_factors_and_cache(self): @@ -179,13 +179,13 @@ def test_prime_factors_and_cache(self): to_test = NaturalNumber(_tt['input']) message = f"{_} | NaturalNumber({_tt['input']}).prime_factors()"\ - f" fisrt time must be => {_tt['answer']}" + f" fisrt time must be => {_tt['answer']}" self.assertEqual(to_test.prime_factors(), _tt['answer'], message) message = f"{_} | NaturalNumber({_tt['input']}).prime_factors()"\ - f" with cache must be => {_tt['answer']}" + f" with cache must be => {_tt['answer']}" self.assertEqual(to_test.prime_factors(), _tt['answer'], message) message = f"{_} | NaturalNumber({_tt['input']}).get_prime_factors_cycles()"\ - f" must be => {_tt['cycles']}" + f" must be => {_tt['cycles']}" self.assertEqual(to_test.get_prime_factors_cycles(), _tt['cycles'], message) From a5e01dba58ce20d5cf90b99ae87d1df0a4e2e271 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 21 May 2025 00:48:18 -0400 Subject: [PATCH 063/102] [CONFIG] [Github Actions] lint and test actions splitted --- .../workflows/{python.yml => python-lint.yml} | 19 ++------ .github/workflows/python-test.yml | 45 +++++++++++++++++++ 2 files changed, 48 insertions(+), 16 deletions(-) rename .github/workflows/{python.yml => python-lint.yml} (80%) create mode 100644 .github/workflows/python-test.yml diff --git a/.github/workflows/python.yml b/.github/workflows/python-lint.yml similarity index 80% rename from .github/workflows/python.yml rename to .github/workflows/python-lint.yml index 23787a95..a941d8ff 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python-lint.yml @@ -1,5 +1,5 @@ --- -name: Python CI Tests +name: Python CI Lint on: # yamllint disable-line rule:truthy push: @@ -9,12 +9,9 @@ on: # yamllint disable-line rule:truthy branches: ['main'] workflow_dispatch: -env: - LOG_LEVEL: INFO - jobs: - build: - name: 'Run CI' + lint: + name: 'Python CI Lint' strategy: fail-fast: false matrix: @@ -52,13 +49,3 @@ jobs: - name: Styling (autopep8) run: | python3 -m autopep8 --diff --recursive --exit-code --verbose . - - name: Test - run: > - coverage run -m pytest --verbose - -o log_cli=true - --log-cli-level=INFO - src/ - - - name: Coverage - run: | - coverage report diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml new file mode 100644 index 00000000..6454e786 --- /dev/null +++ b/.github/workflows/python-test.yml @@ -0,0 +1,45 @@ +--- +name: Python CI Test + +on: # yamllint disable-line rule:truthy + push: + branches: ['main'] + pull_request: + # The branches below must be a subset of the branches above + branches: ['main'] + workflow_dispatch: + +env: + LOG_LEVEL: INFO + +jobs: + test: + name: 'Python CI Test' + strategy: + fail-fast: false + matrix: + os: ['ubuntu-24.04', 'macos-14', 'windows-2022'] + python: ['3.10', '3.11', '3.12'] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + + - name: Setup Python + uses: actions/setup-python@master + with: + python-version: ${{ matrix.python }} + + - name: Install + run: | + pip3 install -r requirements.txt + + - name: Test + run: > + coverage run -m pytest --verbose + -o log_cli=true + --log-cli-level=INFO + src/ + + - name: Coverage + run: | + coverage report From cc3d0fe1b4c7e746cef5fb3655ef1f2aa1c2626b Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 21 May 2025 01:00:10 -0400 Subject: [PATCH 064/102] [CONFIG] Makefile now check style in JSON files. --- Makefile | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 6dce9657..b26bb946 100644 --- a/Makefile +++ b/Makefile @@ -67,28 +67,26 @@ dependencies: ${PACKAGE_TOOL} install -r requirements.txt @echo "################################################################################" +lint/json: + prettier --check ./src/**/*.json + lint/markdown: markdownlint '**/*.md' --ignore node_modules && echo '✔ Your code looks good.' + lint/yaml: yamllint --stric . && echo '✔ Your code looks good.' -lint: lint/markdown lint/yaml test/styling test/static +lint: lint/markdown lint/yaml lint/json test/styling test/static test/static: dependencies ${RUNTIME_TOOL} -m pylint --verbose --recursive yes src/ ${RUNTIME_TOOL} -m flake8 --verbose src/ ${RUNTIME_TOOL} -m pyright --verbose src/ - -test/styling/json: dependencies - prettier --check ./src/**/*.json - -test/styling/sources: dependencies +test/styling: dependencies ${RUNTIME_TOOL} -m pycodestyle --statistics src/ ${RUNTIME_TOOL} -m autopep8 --diff --recursive --exit-code --verbose . -test/styling: dependencies test/styling/sources test/styling/json - format/json: prettier --write ./src/**/*.json From 0ecc21401d9236cbcf96f648c508ed8bc7627200 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 21 May 2025 01:00:28 -0400 Subject: [PATCH 065/102] [CONFIG] [Github Actions] lint JSON files --- .github/workflows/prettier-json.yml | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/workflows/prettier-json.yml diff --git a/.github/workflows/prettier-json.yml b/.github/workflows/prettier-json.yml new file mode 100644 index 00000000..c1b1e12e --- /dev/null +++ b/.github/workflows/prettier-json.yml @@ -0,0 +1,30 @@ +--- +name: Prettier JSON Lint + +on: # yamllint disable-line rule:truthy + push: + branches: ['main'] + pull_request: + # The branches below must be a subset of the branches above + branches: ['main'] + workflow_dispatch: + +jobs: + json-lint: + name: 'Prettier JSON Lint' + runs-on: ['ubuntu-24.04'] + steps: + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 24.x + + - name: Install Prettier + run: | + npm install -g prettier@3.5.3 + + - name: Prettier LINT / Style JSON + run: > + prettier --check ./src/**/*.json From a62e94ae7e388acd387812a634feac878a0f4d46 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 21 May 2025 01:31:06 -0400 Subject: [PATCH 066/102] [CONFIG] [Github Actions] node version upgrade --- .github/workflows/markdown-lint.yml | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/.github/workflows/markdown-lint.yml b/.github/workflows/markdown-lint.yml index 1b47c9ae..8ad904de 100644 --- a/.github/workflows/markdown-lint.yml +++ b/.github/workflows/markdown-lint.yml @@ -15,22 +15,14 @@ jobs: markdownlint: name: Markdown Lint runs-on: ubuntu-24.04 - - strategy: - matrix: - node-version: [22.x] - # See supported Node.js release schedule - # at https://nodejs.org/en/about/releases/ - steps: - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - - name: Set up Node.js ${{ matrix.node-version }} + - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: ${{ matrix.node-version }} - + node-version: 24.x - name: Install dependencies run: npm install -g markdownlint-cli From 5465fccbc18270637be980f757db21b9b3ea30dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 May 2025 13:48:21 +0000 Subject: [PATCH 067/102] Update dependency coverage to v7.8.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index bbfcfc70..3b2c6b62 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.10 attrs==25.3.0 autopep8==2.3.2 -coverage==7.8.0 +coverage==7.8.1 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.2.0 From 4d7092651bb6b0b4f1ea98691e59a8451f41697d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 03:54:57 +0000 Subject: [PATCH 068/102] Update dependency pyright to v1.1.401 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 3b2c6b62..6c9a8677 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.6.0 pycodestyle==2.13.0 pyflakes==3.3.2 pylint==3.3.7 -pyright==1.1.400 +pyright==1.1.401 pytest==8.3.5 pytest-cov==6.1.1 tomli==2.2.1 From e16c9eec30bcce21492e958a1b47bf8268d43c10 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 23 May 2025 15:46:42 +0000 Subject: [PATCH 069/102] Update dependency coverage to v7.8.2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 6c9a8677..ab780822 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.10 attrs==25.3.0 autopep8==2.3.2 -coverage==7.8.1 +coverage==7.8.2 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.2.0 From 675e6b64f041cc2f19fb715fd20f887e350b3765 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 16:01:18 +0000 Subject: [PATCH 070/102] Update dependency typing_extensions to v4.14.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ab780822..d332a912 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,6 @@ pytest==8.3.5 pytest-cov==6.1.1 tomli==2.2.1 tomlkit==0.13.2 -typing_extensions==4.13.2 +typing_extensions==4.14.0 wrapt==1.17.2 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From f2abe1978f51a06143bcadeacfc893c3148f36d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 20:59:49 +0000 Subject: [PATCH 071/102] Update dependency pytest to v8.4.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d332a912..532e6a73 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ pycodestyle==2.13.0 pyflakes==3.3.2 pylint==3.3.7 pyright==1.1.401 -pytest==8.3.5 +pytest==8.4.0 pytest-cov==6.1.1 tomli==2.2.1 tomlkit==0.13.2 From 673b63a10454bf24e89169a0bd46c8ed19ac7681 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:39:15 +0000 Subject: [PATCH 072/102] Update aquasecurity/trivy-action action to v0.31.0 --- .github/workflows/docker-image.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 5021cc75..85a7a206 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -179,7 +179,7 @@ jobs: docker image ls -a - name: Run Trivy vulnerability scanner (cli report) - uses: aquasecurity/trivy-action@0.30.0 + uses: aquasecurity/trivy-action@0.31.0 with: image-ref: ${{ env.IMAGE_NAME }}:${{ github.sha }} format: 'table' @@ -187,7 +187,7 @@ jobs: TRIVY_DB_REPOSITORY: ${{ vars.TRIVY_DB_REPOSITORY }} - name: Run Trivy vulnerability scanner (sarif report) - uses: aquasecurity/trivy-action@0.30.0 + uses: aquasecurity/trivy-action@0.31.0 with: image-ref: ${{ env.IMAGE_NAME }}:${{ github.sha }} format: 'sarif' From af5279aebfa146e96c7e805399784373272ea998 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Jun 2025 11:43:39 +0000 Subject: [PATCH 073/102] Update dependency tomlkit to v0.13.3 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 532e6a73..b7e4441e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,7 @@ pyright==1.1.401 pytest==8.4.0 pytest-cov==6.1.1 tomli==2.2.1 -tomlkit==0.13.2 +tomlkit==0.13.3 typing_extensions==4.14.0 wrapt==1.17.2 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 90b84427790ce1dd9b08e31aeeac9513099b7791 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Sun, 8 Jun 2025 01:03:36 -0400 Subject: [PATCH 074/102] [REFACTOR] Makefile reorder. --- Makefile | 78 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index b26bb946..666104b4 100644 --- a/Makefile +++ b/Makefile @@ -60,6 +60,7 @@ env: install: dependencies +## Dependency management dependencies: @echo "################################################################################" @echo "## Dependencies: ###############################################################" @@ -67,6 +68,36 @@ dependencies: ${PACKAGE_TOOL} install -r requirements.txt @echo "################################################################################" +outdated: + ${PACKAGE_TOOL} list --outdated + +update: + ${PACKAGE_TOOL} freeze > requirements.txt + +upgrade: + ${PACKAGE_TOOL} list --outdated | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U + +clean: + ${PACKAGE_TOOL} freeze > unins ; ${PACKAGE_TOOL} uninstall -y -r unins ; rm unins + rm -f .coverage + rm -fr .pytest_cache + rm -fr htmlcov + rm -fr coverage + rm -fr build + find . -path "*/*.pyc" -delete -print || true + find . -path "*/*.pyo" -delete -print || true + find . -path "*/__pycache__" -type d -print -exec rm -fr {} ';' || true + +## Building process +build: env + rsync -av --prune-empty-dirs \ + --exclude '*_test.py' \ + --exclude '*.pyc' \ + --exclude '.venv' \ + --exclude '__pycache__' \ + src/ build/ + +## Source code linting and formatting lint/json: prettier --check ./src/**/*.json @@ -78,15 +109,6 @@ lint/yaml: lint: lint/markdown lint/yaml lint/json test/styling test/static -test/static: dependencies - ${RUNTIME_TOOL} -m pylint --verbose --recursive yes src/ - ${RUNTIME_TOOL} -m flake8 --verbose src/ - ${RUNTIME_TOOL} -m pyright --verbose src/ - -test/styling: dependencies - ${RUNTIME_TOOL} -m pycodestyle --statistics src/ - ${RUNTIME_TOOL} -m autopep8 --diff --recursive --exit-code --verbose . - format/json: prettier --write ./src/**/*.json @@ -95,14 +117,17 @@ format/sources: format: format/sources format/json -build: env - rsync -av --prune-empty-dirs \ - --exclude '*_test.py' \ - --exclude '*.pyc' \ - --exclude '.venv' \ - --exclude '__pycache__' \ - src/ build/ +## Static code analysis +test/static: dependencies + ${RUNTIME_TOOL} -m pylint --verbose --recursive yes src/ + ${RUNTIME_TOOL} -m flake8 --verbose src/ + ${RUNTIME_TOOL} -m pyright --verbose src/ +test/styling: dependencies + ${RUNTIME_TOOL} -m pycodestyle --statistics src/ + ${RUNTIME_TOOL} -m autopep8 --diff --recursive --exit-code --verbose . + +## Unit tests and coverage test: env dependencies ${RUNTIME_TOOL} -m coverage run -m \ pytest --verbose \ @@ -118,26 +143,7 @@ coverage/html: test ${RUNTIME_TOOL} -m coverage html open htmlcov/index.html -outdated: - ${PACKAGE_TOOL} list --outdated - -update: - ${PACKAGE_TOOL} freeze > requirements.txt - -upgrade: - ${PACKAGE_TOOL} list --outdated | cut -f1 -d' ' | tr " " "\n" | awk '{if(NR>=3)print}' | cut -d' ' -f1 | xargs -n1 pip3 install -U - -clean: - ${PACKAGE_TOOL} freeze > unins ; ${PACKAGE_TOOL} uninstall -y -r unins ; rm unins - rm -f .coverage - rm -fr .pytest_cache - rm -fr htmlcov - rm -fr coverage - rm -fr build - find . -path "*/*.pyc" -delete -print || true - find . -path "*/*.pyo" -delete -print || true - find . -path "*/__pycache__" -type d -print -exec rm -fr {} ';' || true - +## Docker Compose commands compose/build: env ${DOCKER_COMPOSE} --profile lint build ${DOCKER_COMPOSE} --profile testing build From 03dc5511392bfe172fc6c199fe2661a6c1ad7118 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Sun, 8 Jun 2025 01:05:35 -0400 Subject: [PATCH 075/102] [CONFIG] Prettier JSON config added. --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 5934804b..39ba0cc5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -61,6 +61,9 @@ COPY ./.markdownlint.yaml ${WORKDIR}/ COPY ./.yamllint ${WORKDIR}/ COPY ./.yamlignore ${WORKDIR}/ +# JSON linting conf +COPY ./.prettierrc.yaml ${WORKDIR}/ + CMD ["make", "lint"] ############################################################################### From 370987cd9f32298c44056e60ae31623624784edc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Jun 2025 12:34:45 +0000 Subject: [PATCH 076/102] Update dependency pyright to v1.1.402 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b7e4441e..1fb58b98 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.6.0 pycodestyle==2.13.0 pyflakes==3.3.2 pylint==3.3.7 -pyright==1.1.401 +pyright==1.1.402 pytest==8.4.0 pytest-cov==6.1.1 tomli==2.2.1 From 0277a7c19d69785fdd6fb6589670259be9ed15f2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Jun 2025 17:11:27 +0000 Subject: [PATCH 077/102] Update dependency coverage to v7.9.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 1fb58b98..2ea6b25d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.10 attrs==25.3.0 autopep8==2.3.2 -coverage==7.8.2 +coverage==7.9.0 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.2.0 From 39de3827a9f375b11990ee018ea44d776f88af93 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Jun 2025 15:02:52 +0000 Subject: [PATCH 078/102] Update dependency coverage to v7.9.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 2ea6b25d..d3988fb4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.10 attrs==25.3.0 autopep8==2.3.2 -coverage==7.9.0 +coverage==7.9.1 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.2.0 From a5e49fb540ecf0cf66dd157079a9dbad338ea89a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 10:13:11 +0000 Subject: [PATCH 079/102] Bump pytest-cov from 6.1.1 to 6.2.1 Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 6.1.1 to 6.2.1. - [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.1.1...v6.2.1) --- updated-dependencies: - dependency-name: pytest-cov dependency-version: 6.2.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d3988fb4..70687ff7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ pyflakes==3.3.2 pylint==3.3.7 pyright==1.1.402 pytest==8.4.0 -pytest-cov==6.1.1 +pytest-cov==6.2.1 tomli==2.2.1 tomlkit==0.13.3 typing_extensions==4.14.0 From 7b99a699f6e12bf14735791edf987ce2005888ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 18 Jun 2025 07:49:56 +0000 Subject: [PATCH 080/102] Update dependency pytest to v8.4.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 70687ff7..126a2a8c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ pycodestyle==2.13.0 pyflakes==3.3.2 pylint==3.3.7 pyright==1.1.402 -pytest==8.4.0 +pytest==8.4.1 pytest-cov==6.2.1 tomli==2.2.1 tomlkit==0.13.3 From 5ba01979448bad02c3146a907ac9465d21b2e396 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 21 Jun 2025 03:53:24 +0000 Subject: [PATCH 081/102] Update dependency pyflakes to v3.4.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 126a2a8c..8623277a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,7 @@ packaging==25.0 platformdirs==4.3.8 pluggy==1.6.0 pycodestyle==2.13.0 -pyflakes==3.3.2 +pyflakes==3.4.0 pylint==3.3.7 pyright==1.1.402 pytest==8.4.1 From a4b38e0d0a7450193f31f1cbd740064a7e66bcb1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Jun 2025 23:13:12 +0000 Subject: [PATCH 082/102] Update dependency flake8 to v7.3.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 8623277a..f58580a8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ autopep8==2.3.2 coverage==7.9.1 dill==0.4.0 exceptiongroup==1.3.0 -flake8==7.2.0 +flake8==7.3.0 iniconfig==2.1.0 isort==6.0.1 lazy-object-proxy==1.11.0 From 2c1af3cb8dbdf6d6f2af32029ad1a4099087fec7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 20 Jun 2025 23:13:16 +0000 Subject: [PATCH 083/102] Update dependency pycodestyle to v2.14.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f58580a8..2befba2f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,7 +13,7 @@ nodeenv==1.9.1 packaging==25.0 platformdirs==4.3.8 pluggy==1.6.0 -pycodestyle==2.13.0 +pycodestyle==2.14.0 pyflakes==3.4.0 pylint==3.3.7 pyright==1.1.402 From 72b1fa1a6419eaa6946fe22f9f99a5377ea3a773 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Jul 2025 13:51:33 +0000 Subject: [PATCH 084/102] Update dependency coverage to v7.9.2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 2befba2f..3506eda6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.10 attrs==25.3.0 autopep8==2.3.2 -coverage==7.9.1 +coverage==7.9.2 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.3.0 From d555baf6269d9c0fa7ba6ced0afef6679be37bd6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Jul 2025 07:58:11 +0000 Subject: [PATCH 085/102] Update aquasecurity/trivy-action action to v0.32.0 --- .github/workflows/docker-image.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 85a7a206..7acaabb6 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -179,7 +179,7 @@ jobs: docker image ls -a - name: Run Trivy vulnerability scanner (cli report) - uses: aquasecurity/trivy-action@0.31.0 + uses: aquasecurity/trivy-action@0.32.0 with: image-ref: ${{ env.IMAGE_NAME }}:${{ github.sha }} format: 'table' @@ -187,7 +187,7 @@ jobs: TRIVY_DB_REPOSITORY: ${{ vars.TRIVY_DB_REPOSITORY }} - name: Run Trivy vulnerability scanner (sarif report) - uses: aquasecurity/trivy-action@0.31.0 + uses: aquasecurity/trivy-action@0.32.0 with: image-ref: ${{ env.IMAGE_NAME }}:${{ github.sha }} format: 'sarif' From 65e24d95ba2142ba27807cb818fe4fad60939b06 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Jul 2025 14:35:09 +0000 Subject: [PATCH 086/102] Update dependency typing_extensions to v4.14.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 3506eda6..5736772a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,6 @@ pytest==8.4.1 pytest-cov==6.2.1 tomli==2.2.1 tomlkit==0.13.3 -typing_extensions==4.14.0 +typing_extensions==4.14.1 wrapt==1.17.2 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From 0f17d80cf21db31b8e549432b99cfb76adc95a02 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 07:53:12 +0000 Subject: [PATCH 087/102] Update dependency pyright to v1.1.403 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 5736772a..2960b07d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,7 @@ pluggy==1.6.0 pycodestyle==2.14.0 pyflakes==3.4.0 pylint==3.3.7 -pyright==1.1.402 +pyright==1.1.403 pytest==8.4.1 pytest-cov==6.2.1 tomli==2.2.1 From 9d69cf19c69f6d67cc3cb67977ceb2d6913ae018 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Sun, 13 Jul 2025 13:36:33 -0400 Subject: [PATCH 088/102] [REFACTOR] sonarcloud fixes. --- .../dictionaries_and_hashmaps/sherlock_and_anagrams.py | 9 ++++----- .../interview_preparation_kit/search/swap_nodes_algo.py | 2 +- src/projecteuler/helpers/word_score.py | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.py b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.py index 0b712308..619b5a12 100644 --- a/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.py +++ b/src/hackerrank/interview_preparation_kit/dictionaries_and_hashmaps/sherlock_and_anagrams.py @@ -34,13 +34,12 @@ def sherlockAndAnagrams(s_word: str) -> int: total: int = 0 q_candidates = 0 # Final Anagram list - for word in list(candidates): - quantity_of_anagrams = len(candidates[word]) + + for word, candidates_of in candidates.items(): + quantity_of_anagrams = len(candidates_of) k = 2 - if quantity_of_anagrams <= 1: - del candidates[word] - else: + if quantity_of_anagrams > 1: # Binomial coefficient: https://en.wikipedia.org/wiki/Binomial_coefficient q_candidates += quantity_of_anagrams diff --git a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.py b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.py index f341a968..2813f922 100644 --- a/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.py +++ b/src/hackerrank/interview_preparation_kit/search/swap_nodes_algo.py @@ -79,7 +79,7 @@ def buildTree(indexes: List[List[int]]) -> Node: __INITIAL_LEVEL__, callbackCollectNodes) - last_level: int = sorted(list(node_collector))[-1] + last_level: int = sorted(node_collector)[-1] for i in range(0, min(len(indexes_copy), len(node_collector[last_level]))): current_node: Node = node_collector[last_level][i] diff --git a/src/projecteuler/helpers/word_score.py b/src/projecteuler/helpers/word_score.py index b8b5aece..16b6b4dc 100644 --- a/src/projecteuler/helpers/word_score.py +++ b/src/projecteuler/helpers/word_score.py @@ -31,7 +31,7 @@ def wordScore(word: str) -> int: result = 0 - for letter in list(word): + for letter in word: if letter in _scoreLetter: result += _scoreLetter[letter] From 8bb4ea26855ac727a4cb6130d0899e72daf0b313 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 13 Jul 2025 22:09:34 +0000 Subject: [PATCH 089/102] Update dependency astroid to v3.3.11 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 2960b07d..134af6d8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -astroid==3.3.10 +astroid==3.3.11 attrs==25.3.0 autopep8==2.3.2 coverage==7.9.2 From 34c3afa6cc96a9e4d3ae576634058418d1b519ff Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Mon, 21 Jul 2025 15:25:01 -0400 Subject: [PATCH 090/102] =?UTF-8?q?[Hacker=20Rank]=20Interview=20Preparati?= =?UTF-8?q?on=20Kit:=20Miscellaneous:=20Flipping=20bits.=20New=20way=20to?= =?UTF-8?q?=20solve=20=E2=9C=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flipping-bits-alt-solution-notes.md | 14 ++++++++++++++ .../miscellaneous/flipping_bits_alt.py | 7 +++++++ .../miscellaneous/flipping_bits_test.py | 6 ++++++ 3 files changed, 27 insertions(+) create mode 100644 docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md create mode 100644 src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_alt.py diff --git a/docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md b/docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md new file mode 100644 index 00000000..804ef5a4 --- /dev/null +++ b/docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md @@ -0,0 +1,14 @@ +# [Miscellaneous: Flipping bits](https://www.hackerrank.com/challenges/flipping-bits) + +- Difficulty: `#easy` +- Category: `#ProblemSolvingBasic` `#BitManipulation` + +## Using bitwise operations + +The bitwise NOT operator (~) flips all bits of the number. + +The & 0xFFFFFFFF ensures that we only keep the last 32 bits, +effectively simulating a 32-bit unsigned integer. + +This is a more efficient and concise way to achieve the same result +as the original code, without needing to convert to binary strings. diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_alt.py b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_alt.py new file mode 100644 index 00000000..9d95aa01 --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_alt.py @@ -0,0 +1,7 @@ +# pylint: disable=line-too-long +# @link Problem definition [[docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits.md]] # noqa +# @see Solution Notes: [[docs/hackerrank/interview_preparation_kit/miscellaneous/flipping-bits-alt-solution-notes.md]] # noqa +# pylint: enable=line-too-long + +def flippingBitsAlt(number: int) -> int: + return ~number & 0xFFFFFFFF diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py index 084eb06b..f2c0ed7c 100644 --- a/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/flipping_bits_test.py @@ -3,6 +3,7 @@ from ....lib.loader import loadTestCases from .flipping_bits import flippingBits +from .flipping_bits_alt import flippingBitsAlt FILE_PATH = str(Path(__file__).resolve().parent) @@ -22,3 +23,8 @@ def test_flipping_bits(self): flippingBits(_tt['input']), _tt['answer'], f"{_} | flippingBits({_tt['input']}) must be " f"=> {_tt['answer']}") + + self.assertEqual( + flippingBitsAlt(_tt['input']), _tt['answer'], + f"{_} | flippingBitsAlt({_tt['input']}) must be " + f"=> {_tt['answer']}") From 7d82ba74576dd87abd83860e0227118ab2b9c85b Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Wed, 23 Jul 2025 12:46:20 -0400 Subject: [PATCH 091/102] [BUGFIX] [DOC] [Hacker Rank] Interview Preparation Kit: Array: 2D Array - DS. Delimiter fixed. --- docs/hackerrank/interview_preparation_kit/arrays/two_d_array.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/hackerrank/interview_preparation_kit/arrays/two_d_array.md b/docs/hackerrank/interview_preparation_kit/arrays/two_d_array.md index 9c92ffe8..4ba5f988 100644 --- a/docs/hackerrank/interview_preparation_kit/arrays/two_d_array.md +++ b/docs/hackerrank/interview_preparation_kit/arrays/two_d_array.md @@ -57,7 +57,7 @@ at row `1`, column `2`: 0 4 3 1 8 6 6 -```` +``` **Note**: If you have already solved the Java domain's Java 2D Array challenge, you may wish to skip this challenge. From a85950f27374a2d3418bd7ba80bcc5dbfe52929d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 24 Jul 2025 20:00:50 +0000 Subject: [PATCH 092/102] Update dependency coverage to v7.10.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 134af6d8..10aefea8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.11 attrs==25.3.0 autopep8==2.3.2 -coverage==7.9.2 +coverage==7.10.0 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.3.0 From 6b1e4631951ed9c4f36bd0a69280f71ed7ca5fea Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 27 Jul 2025 17:22:13 +0000 Subject: [PATCH 093/102] Update dependency coverage to v7.10.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 10aefea8..f48530f0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.11 attrs==25.3.0 autopep8==2.3.2 -coverage==7.10.0 +coverage==7.10.1 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.3.0 From 2fb8ed0b005131b78cde79ff3278bc73d6031eb0 Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Fri, 1 Aug 2025 12:13:24 -0400 Subject: [PATCH 094/102] [CONFIG] Docker: snyk disabled. --- .github/workflows/docker-image.yml | 95 +++++++++++++++--------------- 1 file changed, 49 insertions(+), 46 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 7acaabb6..ee951d6f 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -111,53 +111,56 @@ jobs: run: | docker run --rm ${{ env.IMAGE_NAME }}:test make test - security: - name: "Snyk Container" - runs-on: ubuntu-24.04 - needs: build - permissions: - actions: read - contents: read - security-events: write - steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 - - name: Download artifact - uses: actions/download-artifact@v4 - with: - name: ${{ env.ARTIFACT_NAME }}_prod - path: /tmp/ - - - name: Load image - run: | - docker load --input /tmp/${{ env.ARTIFACT_NAME }}_prod.tar - docker image ls -a + # yamllint disable rule:line-length + # security: + # name: "Snyk Container" + # runs-on: ubuntu-24.04 + # needs: build + # permissions: + # actions: read + # contents: read + # security-events: write + # steps: + # - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + # - name: Download artifact + # uses: actions/download-artifact@v4 + # with: + # name: ${{ env.ARTIFACT_NAME }}_prod + # path: /tmp/ + + # - name: Load image + # run: | + # docker load --input /tmp/${{ env.ARTIFACT_NAME }}_prod.tar + # docker image ls -a + + # - name: Run Snyk to check Docker image for vulnerabilities + # # Snyk can be used to break the build when it detects vulnerabilities. + # # In this case we want to upload the issues to GitHub Code Scanning + # continue-on-error: true + # uses: snyk/actions/docker@master + # env: + # # yamllint disable rule:line-length + # # In order to use the Snyk Action you will need to have a Snyk API token. + # # See https://docs.snyk.io/integrations/ci-cd-integrations/github-actions-integration#getting-your-snyk-token + # # or you can sign up for free at https://snyk.io/login + # # yamllint enable rule:line-length + # SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} + # with: + # image: ${{ env.IMAGE_NAME }}:${{ github.sha }} + # args: --file=Dockerfile + # # yamllint disable rule:line-length + # # https://github.com/github/codeql-action/issues/2187#issuecomment-2043220400 + # - name: Replace security-severity undefined for license-related findings + # run: | + # sed -i 's/"security-severity": "undefined"/"security-severity": "0"/g' snyk.sarif + # sed -i 's/"security-severity": "null"/"security-severity": "0"/g' snyk.sarif + # # yamllint enable rule:line-length + # - name: Upload result to GitHub Code Scanning + # uses: github/codeql-action/upload-sarif@v3 + # with: + # sarif_file: 'snyk.sarif' + # yamllint enable rule:line-length - - name: Run Snyk to check Docker image for vulnerabilities - # Snyk can be used to break the build when it detects vulnerabilities. - # In this case we want to upload the issues to GitHub Code Scanning - continue-on-error: true - uses: snyk/actions/docker@master - env: - # yamllint disable rule:line-length - # In order to use the Snyk Action you will need to have a Snyk API token. - # See https://docs.snyk.io/integrations/ci-cd-integrations/github-actions-integration#getting-your-snyk-token - # or you can sign up for free at https://snyk.io/login - # yamllint enable rule:line-length - SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} - with: - image: ${{ env.IMAGE_NAME }}:${{ github.sha }} - args: --file=Dockerfile - # yamllint disable rule:line-length - # https://github.com/github/codeql-action/issues/2187#issuecomment-2043220400 - - name: Replace security-severity undefined for license-related findings - run: | - sed -i 's/"security-severity": "undefined"/"security-severity": "0"/g' snyk.sarif - sed -i 's/"security-severity": "null"/"security-severity": "0"/g' snyk.sarif - # yamllint enable rule:line-length - - name: Upload result to GitHub Code Scanning - uses: github/codeql-action/upload-sarif@v3 - with: - sarif_file: 'snyk.sarif' scan: name: "Trivy" runs-on: ubuntu-24.04 From fe29f24428469854e731bcc53ff3a1dd765e9267 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 12:19:12 +0000 Subject: [PATCH 095/102] Bump coverage from 7.10.1 to 7.10.2 Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.10.1 to 7.10.2. - [Release notes](https://github.com/nedbat/coveragepy/releases) - [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst) - [Commits](https://github.com/nedbat/coveragepy/compare/7.10.1...7.10.2) --- updated-dependencies: - dependency-name: coverage dependency-version: 7.10.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f48530f0..55bacc50 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.11 attrs==25.3.0 autopep8==2.3.2 -coverage==7.10.1 +coverage==7.10.2 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.3.0 From a105c225d6adc11823ce14489b9bcad4c5d2ab62 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Aug 2025 00:59:35 +0000 Subject: [PATCH 096/102] Update actions/download-artifact action to v5 --- .github/workflows/docker-image.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index ee951d6f..97edcba9 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -77,7 +77,7 @@ jobs: needs: build steps: - name: Download artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: ${{ env.ARTIFACT_NAME }}_lint path: /tmp/ @@ -97,7 +97,7 @@ jobs: needs: build steps: - name: Download artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: ${{ env.ARTIFACT_NAME }}_test path: /tmp/ @@ -171,7 +171,7 @@ jobs: security-events: write steps: - name: Download artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: ${{ env.ARTIFACT_NAME }}_prod path: /tmp/ From a7d474926d7548af30f51004a4d12d2d8123086c Mon Sep 17 00:00:00 2001 From: Gonzalo Diaz Date: Tue, 5 Aug 2025 19:02:40 -0400 Subject: [PATCH 097/102] =?UTF-8?q?[Hacker=20Rank]=20Interview=20Preparati?= =?UTF-8?q?on=20Kit:=20Miscellaneous:=20Time=20Complexity:=20Primality.=20?= =?UTF-8?q?Solved=20=E2=9C=93.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../miscellaneous/ctci-big-o.md | 65 +++++++++++++++++++ .../miscellaneous/ctci_big_o.py | 33 ++++++++++ .../miscellaneous/ctci_big_o.testcases.json | 57 ++++++++++++++++ .../miscellaneous/ctci_big_o_test.py | 28 ++++++++ 4 files changed, 183 insertions(+) create mode 100644 docs/hackerrank/interview_preparation_kit/miscellaneous/ctci-big-o.md create mode 100644 src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o.py create mode 100644 src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o.testcases.json create mode 100644 src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o_test.py diff --git a/docs/hackerrank/interview_preparation_kit/miscellaneous/ctci-big-o.md b/docs/hackerrank/interview_preparation_kit/miscellaneous/ctci-big-o.md new file mode 100644 index 00000000..6127c885 --- /dev/null +++ b/docs/hackerrank/interview_preparation_kit/miscellaneous/ctci-big-o.md @@ -0,0 +1,65 @@ +# [Time Complexity: Primality](https://www.hackerrank.com/challenges/ctci-big-o) + +- Difficulty: `#medium` +- Category: `#ProblemSolvingBasic` + +## Using bitwise operations + +A prime is a natural number greater than `1` that has no positive divisors other +than `1` and itself. +Given `p` integers, determine the primality of each integer and return `Prime` +or `Not prime` on a new line. + +**Note**: If possible, try to come up with an $ \mathcal{O}(\sqrt{n}) $ +primality algorithm, or see what sort of optimizations you can come up with for +san $ \mathcal{O}(\sqrt{n}) $ algorithm. Be sure to check out the Editorial +after submitting your code. + +## Function Description + +Complete the primality function in the editor below. +primality has the following parameter(s): + +- `int` n: an integer to test for primality + +## Returns + +- string: Prime if is prime, or Not prime + +## Input Format + +The first line contains an integer, , the number of integers to check for primality. +Each of the subsequent lines contains an integer, , the number to test. + +## Constraints + +- $ 1 \leq p \leq 30 $ +- $ 1 \leq n \leq 2 × 10^9 $ + +## Sample Input + +```text +STDIN Function +----- -------- +3 p = 3 (number of values to follow) +12 n = 12 (first number to check) +5 n = 5 +7 n = 7 +``` + +## Sample Output + +```text +Not prime +Prime +Prime +``` + +## Explanation + +We check the following $ p = 3 $ integers for primality: + +1. $ n = 12 $ is divisible by numbers other than $ 1 $ and itself + (i.e.: $ 2 $, $ 3 $, $ 4 $, $ 6 $). +1. $ n = 5 $ is only divisible and itself. +1. $ n = 7 $ is only divisible and itself. diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o.py b/src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o.py new file mode 100644 index 00000000..743430ea --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o.py @@ -0,0 +1,33 @@ +# pylint: disable=line-too-long +# @link Problem definition [[docs/hackerrank/interview_preparation_kit/miscellaneous/ctci-big-o.md]] # noqa +# pylint: enable=line-too-long + +import math + + +# pylint: disable=duplicate-code +def primeFactor(n: int) -> 'int | None': + + if n < 2: + return None + + divisor = n + max_prime_factor = None + + i = 2 + while i <= math.sqrt(divisor): + if 0 == divisor % i: + divisor = int(divisor / i) + max_prime_factor = divisor + else: + i += 1 + + if max_prime_factor is None: + return n + + return max_prime_factor +# pylint: enable=duplicate-code + + +def primality(n): + return "Prime" if primeFactor(n) == n else "Not prime" diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o.testcases.json b/src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o.testcases.json new file mode 100644 index 00000000..adfa3c30 --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o.testcases.json @@ -0,0 +1,57 @@ +[ + { + "title": "Sample Test case 0", + "tests": [ + { + "input": 12, + "answer": "Not prime" + }, + { + "input": 5, + "answer": "Prime" + }, + { + "input": 7, + "answer": "Prime" + } + ] + }, + { + "title": "Sample Test case 1", + "tests": [ + { + "input": 31, + "answer": "Prime" + }, + { + "input": 33, + "answer": "Not prime" + } + ] + }, + { + "title": "Sample Test case 2", + "tests": [ + { + "input": 2, + "answer": "Prime" + }, + { + "input": 7, + "answer": "Prime" + }, + { + "input": 1982, + "answer": "Not prime" + }, + { + "input": 14582734, + "answer": "Not prime" + }, + { + "input": 9891, + "answer": "Not prime" + } + ] + } +] diff --git a/src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o_test.py b/src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o_test.py new file mode 100644 index 00000000..f0f44525 --- /dev/null +++ b/src/hackerrank/interview_preparation_kit/miscellaneous/ctci_big_o_test.py @@ -0,0 +1,28 @@ +import unittest +from pathlib import Path + +from ....lib.loader import loadTestCases +from .ctci_big_o import primality + + +FILE_PATH = str(Path(__file__).resolve().parent) + +TEST_CASES = loadTestCases( + FILE_PATH + '/ctci_big_o.testcases.json') + + +class TestCtciBigO(unittest.TestCase): + + def test_ctci_big_o(self): + + for _, testset in enumerate(TEST_CASES): + + for _, _tt in enumerate(testset['tests']): + + self.assertEqual( + primality(_tt['input']), _tt['answer'], + f"{_} | primality({_tt['input']}) must be " + f"=> {_tt['answer']}") + + def test_ctci_big_o_edge_cases(self): + self.assertEqual(primality(1), "Not prime") From 2ed24730029aff48f82ba16ef41af5a20373155a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 9 Aug 2025 09:30:21 +0000 Subject: [PATCH 098/102] Update dependency pylint to v3.3.8 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 55bacc50..4449a1f8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,7 @@ platformdirs==4.3.8 pluggy==1.6.0 pycodestyle==2.14.0 pyflakes==3.4.0 -pylint==3.3.7 +pylint==3.3.8 pyright==1.1.403 pytest==8.4.1 pytest-cov==6.2.1 From e0605223fd1b8526621e7ca77c691d301c0caeb0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 04:28:33 +0000 Subject: [PATCH 099/102] Update dependency coverage to v7.10.3 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4449a1f8..495595b7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.11 attrs==25.3.0 autopep8==2.3.2 -coverage==7.10.2 +coverage==7.10.3 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.3.0 From 5d56fa61413e3f4237b023e61977eb4f9d0685ff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 17:24:24 +0000 Subject: [PATCH 100/102] Update actions/checkout action to v5 --- .github/workflows/codeql.yml | 2 +- .github/workflows/docker-image.yml | 2 +- .github/workflows/gitleaks.yml | 2 +- .github/workflows/markdown-lint.yml | 2 +- .github/workflows/prettier-json.yml | 2 +- .github/workflows/python-coverage.yml | 2 +- .github/workflows/python-lint.yml | 2 +- .github/workflows/python-test.yml | 2 +- .github/workflows/yamllint.yml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index e2a70b83..94cdfd3b 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -36,7 +36,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: Initialize CodeQL uses: github/codeql-action/init@v3 diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 97edcba9..cd87be12 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -20,7 +20,7 @@ jobs: name: "Build Docker images" runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 diff --git a/.github/workflows/gitleaks.yml b/.github/workflows/gitleaks.yml index b13eb4a8..1ab871d3 100644 --- a/.github/workflows/gitleaks.yml +++ b/.github/workflows/gitleaks.yml @@ -21,7 +21,7 @@ jobs: name: gitleaks runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 - uses: gitleaks/gitleaks-action@v2 diff --git a/.github/workflows/markdown-lint.yml b/.github/workflows/markdown-lint.yml index 8ad904de..11668082 100644 --- a/.github/workflows/markdown-lint.yml +++ b/.github/workflows/markdown-lint.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: Set up Node.js uses: actions/setup-node@v4 diff --git a/.github/workflows/prettier-json.yml b/.github/workflows/prettier-json.yml index c1b1e12e..218999d4 100644 --- a/.github/workflows/prettier-json.yml +++ b/.github/workflows/prettier-json.yml @@ -14,7 +14,7 @@ jobs: name: 'Prettier JSON Lint' runs-on: ['ubuntu-24.04'] steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: Set up Node.js uses: actions/setup-node@v4 diff --git a/.github/workflows/python-coverage.yml b/.github/workflows/python-coverage.yml index 34f81970..016f660a 100644 --- a/.github/workflows/python-coverage.yml +++ b/.github/workflows/python-coverage.yml @@ -22,7 +22,7 @@ jobs: python: ["3.12"] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 with: # Shallow clones should be disabled for a better relevancy of analysis fetch-depth: 0 diff --git a/.github/workflows/python-lint.yml b/.github/workflows/python-lint.yml index a941d8ff..c8b620a3 100644 --- a/.github/workflows/python-lint.yml +++ b/.github/workflows/python-lint.yml @@ -19,7 +19,7 @@ jobs: python: ['3.10', '3.11', '3.12'] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: Setup Python uses: actions/setup-python@master diff --git a/.github/workflows/python-test.yml b/.github/workflows/python-test.yml index 6454e786..43f2d2d2 100644 --- a/.github/workflows/python-test.yml +++ b/.github/workflows/python-test.yml @@ -22,7 +22,7 @@ jobs: python: ['3.10', '3.11', '3.12'] runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: Setup Python uses: actions/setup-python@master diff --git a/.github/workflows/yamllint.yml b/.github/workflows/yamllint.yml index 9cb9e0b3..15e8b3b8 100644 --- a/.github/workflows/yamllint.yml +++ b/.github/workflows/yamllint.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4 + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5 - name: Install yamllint run: pip install yamllint From a2a322e126dd0c809c87b65c46387d9386180d20 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 11:24:00 +0000 Subject: [PATCH 101/102] Update dependency wrapt to v1.17.3 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 495595b7..e6c6a638 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,5 +22,5 @@ pytest-cov==6.2.1 tomli==2.2.1 tomlkit==0.13.3 typing_extensions==4.14.1 -wrapt==1.17.2 +wrapt==1.17.3 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability From a6862bff9ecdce293c7612c8214dee456413422b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Aug 2025 01:46:13 +0000 Subject: [PATCH 102/102] Update dependency coverage to v7.10.4 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e6c6a638..29b8743f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ astroid==3.3.11 attrs==25.3.0 autopep8==2.3.2 -coverage==7.10.3 +coverage==7.10.4 dill==0.4.0 exceptiongroup==1.3.0 flake8==7.3.0