diff --git a/.amazonq/rules/problem-creation.md b/.amazonq/rules/problem-creation.md index a262244..9249475 100644 --- a/.amazonq/rules/problem-creation.md +++ b/.amazonq/rules/problem-creation.md @@ -13,10 +13,11 @@ When user requests a problem by **number** or **name/slug**, the assistant will: - Images provide crucial visual context, especially for tree and graph problems - Always verify images are included in `readme_examples` and accessible 4. **Create** JSON file in `leetcode_py/cli/resources/leetcode/json/problems/{problem_name}.json` -5. **Update** Makefile with `PROBLEM ?= {problem_name}` -6. **Generate** problem structure using `make p-gen` -7. **Verify** with `make p-lint` - fix template issues in JSON if possible, or manually fix generated files if template limitations -8. **Iterate** if JSON fixes: re-run `make p-gen PROBLEM={problem_name} FORCE=1` and `make p-lint` until passes to ensure reproducibility +5. **Update tags.json5** - If user specifies tags, manually add problem name to corresponding tag arrays in `leetcode_py/cli/resources/leetcode/json/tags.json5` +6. **Update** Makefile with `PROBLEM ?= {problem_name}` +7. **Generate** problem structure using `make p-gen` +8. **Verify** with `make p-lint` - fix template issues in JSON if possible, or manually fix generated files if template limitations +9. **Iterate** if JSON fixes: re-run `make p-gen PROBLEM={problem_name} FORCE=1` and `make p-lint` until passes to ensure reproducibility ## Scraping Commands diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml index 6365946..7116769 100644 --- a/.github/workflows/ci-test.yml +++ b/.github/workflows/ci-test.yml @@ -6,9 +6,16 @@ on: pull_request: types: [opened, synchronize, reopened] +env: + TARGET_PYTHON_VERSION: "3.13" + jobs: test: runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: ["3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 @@ -16,7 +23,7 @@ jobs: - name: Set up Python uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0 with: - python-version: "3.13" + python-version: ${{ matrix.python-version }} - name: Install Poetry uses: snok/install-poetry@76e04a911780d5b312d89783f7b1cd627778900a # v1.4.1 @@ -30,7 +37,7 @@ jobs: uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 with: path: .venv - key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }} + key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies run: | @@ -67,11 +74,13 @@ jobs: run: make test - name: SonarQube Scan + if: matrix.python-version == env.TARGET_PYTHON_VERSION uses: SonarSource/sonarqube-scan-action@1a6d90ebcb0e6a6b1d87e37ba693fe453195ae25 # v5.3.1 env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - name: Upload coverage reports to Codecov + if: matrix.python-version == env.TARGET_PYTHON_VERSION uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 with: fail_ci_if_error: true diff --git a/Makefile b/Makefile index 1849e62..83be5a8 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ PYTHON_VERSION = 3.13 -PROBLEM ?= find_all_anagrams_in_a_string +PROBLEM ?= daily_temperatures FORCE ?= 0 COMMA := , @@ -42,6 +42,7 @@ define lint_target endef lint: + poetry run python scripts/sort_tags.py poetry sort npx prettier --write "**/*.{ts,tsx,css,json,yaml,yml,md}" $(call lint_target,.) diff --git a/leetcode/accounts_merge/test_solution.py b/leetcode/accounts_merge/test_solution.py index 8f18c66..0667cab 100644 --- a/leetcode/accounts_merge/test_solution.py +++ b/leetcode/accounts_merge/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_accounts_merge, run_accounts_merge from .solution import Solution diff --git a/leetcode/add_binary/test_solution.py b/leetcode/add_binary/test_solution.py index 585a246..bfdf6a7 100644 --- a/leetcode/add_binary/test_solution.py +++ b/leetcode/add_binary/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_add_binary, run_add_binary from .solution import Solution diff --git a/leetcode/balanced_binary_tree/test_solution.py b/leetcode/balanced_binary_tree/test_solution.py index 97000d1..9d7a061 100644 --- a/leetcode/balanced_binary_tree/test_solution.py +++ b/leetcode/balanced_binary_tree/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_is_balanced, run_is_balanced from .solution import Solution diff --git a/leetcode/basic_calculator/test_solution.py b/leetcode/basic_calculator/test_solution.py index 8a67479..6bbc871 100644 --- a/leetcode/basic_calculator/test_solution.py +++ b/leetcode/basic_calculator/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_calculate, run_calculate from .solution import Solution diff --git a/leetcode/best_time_to_buy_and_sell_stock/test_solution.py b/leetcode/best_time_to_buy_and_sell_stock/test_solution.py index 4ed9be5..4100e9f 100644 --- a/leetcode/best_time_to_buy_and_sell_stock/test_solution.py +++ b/leetcode/best_time_to_buy_and_sell_stock/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_max_profit, run_max_profit from .solution import Solution diff --git a/leetcode/binary_search/test_solution.py b/leetcode/binary_search/test_solution.py index 5ed0cee..f56195c 100644 --- a/leetcode/binary_search/test_solution.py +++ b/leetcode/binary_search/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_search, run_search from .solution import Solution diff --git a/leetcode/binary_tree_level_order_traversal/test_solution.py b/leetcode/binary_tree_level_order_traversal/test_solution.py index ccb041a..ee7f511 100644 --- a/leetcode/binary_tree_level_order_traversal/test_solution.py +++ b/leetcode/binary_tree_level_order_traversal/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_level_order, run_level_order from .solution import Solution diff --git a/leetcode/binary_tree_right_side_view/test_solution.py b/leetcode/binary_tree_right_side_view/test_solution.py index 871ecef..260e71b 100644 --- a/leetcode/binary_tree_right_side_view/test_solution.py +++ b/leetcode/binary_tree_right_side_view/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_right_side_view, run_right_side_view from .solution import Solution, SolutionBFS, SolutionDFS diff --git a/leetcode/climbing_stairs/test_solution.py b/leetcode/climbing_stairs/test_solution.py index a141b4e..a41eff7 100644 --- a/leetcode/climbing_stairs/test_solution.py +++ b/leetcode/climbing_stairs/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_climb_stairs, run_climb_stairs from .solution import Solution diff --git a/leetcode/clone_graph/test_solution.py b/leetcode/clone_graph/test_solution.py index 95bb87f..4bc8818 100644 --- a/leetcode/clone_graph/test_solution.py +++ b/leetcode/clone_graph/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_clone_graph, run_clone_graph from .solution import Solution, SolutionBFS, SolutionDFS diff --git a/leetcode/coin_change/test_solution.py b/leetcode/coin_change/test_solution.py index 62eede4..b5013d4 100644 --- a/leetcode/coin_change/test_solution.py +++ b/leetcode/coin_change/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_coin_change, run_coin_change from .solution import Solution diff --git a/leetcode/combination_sum/test_solution.py b/leetcode/combination_sum/test_solution.py index de34df9..e168a02 100644 --- a/leetcode/combination_sum/test_solution.py +++ b/leetcode/combination_sum/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_combination_sum, run_combination_sum from .solution import Solution diff --git a/leetcode/construct_binary_tree_from_preorder_and_inorder_traversal/test_solution.py b/leetcode/construct_binary_tree_from_preorder_and_inorder_traversal/test_solution.py index 5f08fe6..88f7534 100644 --- a/leetcode/construct_binary_tree_from_preorder_and_inorder_traversal/test_solution.py +++ b/leetcode/construct_binary_tree_from_preorder_and_inorder_traversal/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_build_tree, run_build_tree from .solution import Solution diff --git a/leetcode/container_with_most_water/test_solution.py b/leetcode/container_with_most_water/test_solution.py index c2bf0e1..edee77b 100644 --- a/leetcode/container_with_most_water/test_solution.py +++ b/leetcode/container_with_most_water/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_max_area, run_max_area from .solution import Solution diff --git a/leetcode/contains_duplicate/test_solution.py b/leetcode/contains_duplicate/test_solution.py index e8c2c7e..02178b9 100644 --- a/leetcode/contains_duplicate/test_solution.py +++ b/leetcode/contains_duplicate/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_contains_duplicate, run_contains_duplicate from .solution import Solution diff --git a/leetcode/course_schedule/test_solution.py b/leetcode/course_schedule/test_solution.py index 35aae35..85e5235 100644 --- a/leetcode/course_schedule/test_solution.py +++ b/leetcode/course_schedule/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_can_finish, run_can_finish from .solution import Solution diff --git a/leetcode/daily_temperatures/README.md b/leetcode/daily_temperatures/README.md new file mode 100644 index 0000000..ce4e11f --- /dev/null +++ b/leetcode/daily_temperatures/README.md @@ -0,0 +1,46 @@ +# Daily Temperatures + +**Difficulty:** Medium +**Topics:** Array, Stack, Monotonic Stack +**Tags:** grind + +**LeetCode:** [Problem 739](https://leetcode.com/problems/daily-temperatures/description/) + +## Problem Description + +Given an array of integers `temperatures` represents the daily temperatures, return an array `answer` such that `answer[i]` is the number of days you have to wait after the `ith` day to get a warmer temperature. If there is no future day for which this is possible, keep `answer[i] == 0` instead. + +## Examples + +### Example 1: + +``` +Input: temperatures = [73,74,75,71,69,72,76,73] +Output: [1,1,4,2,1,1,0,0] +``` + +**Explanation:** + +- For input `[73,74,75,71,69,72,76,73]`, the output should be `[1,1,4,2,1,1,0,0]`. +- For example, the first temperature is 73. The next warmer temperature is 74, which is 1 day later, so we put 1. +- The second temperature is 74. The next warmer temperature is 75, which is 1 day later, so we put 1. +- The third temperature is 75. The next warmer temperature is 76, which is 4 days later, so we put 4. + +### Example 2: + +``` +Input: temperatures = [30,40,50,60] +Output: [1,1,1,0] +``` + +### Example 3: + +``` +Input: temperatures = [30,60,90] +Output: [1,1,0] +``` + +## Constraints + +- `1 <= temperatures.length <= 10^5` +- `30 <= temperatures[i] <= 100` diff --git a/leetcode/daily_temperatures/__init__.py b/leetcode/daily_temperatures/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/leetcode/daily_temperatures/helpers.py b/leetcode/daily_temperatures/helpers.py new file mode 100644 index 0000000..dfef547 --- /dev/null +++ b/leetcode/daily_temperatures/helpers.py @@ -0,0 +1,8 @@ +def run_daily_temperatures(solution_class: type, temperatures: list[int]): + implementation = solution_class() + return implementation.daily_temperatures(temperatures) + + +def assert_daily_temperatures(result: list[int], expected: list[int]) -> bool: + assert result == expected + return True diff --git a/leetcode/daily_temperatures/playground.py b/leetcode/daily_temperatures/playground.py new file mode 100644 index 0000000..18c07bf --- /dev/null +++ b/leetcode/daily_temperatures/playground.py @@ -0,0 +1,29 @@ +# --- +# jupyter: +# jupytext: +# text_representation: +# extension: .py +# format_name: percent +# format_version: '1.3' +# jupytext_version: 1.17.3 +# kernelspec: +# display_name: leetcode-py-py3.13 +# language: python +# name: python3 +# --- + +# %% +from helpers import assert_daily_temperatures, run_daily_temperatures +from solution import Solution + +# %% +# Example test case +temperatures = [73, 74, 75, 71, 69, 72, 76, 73] +expected = [1, 1, 4, 2, 1, 1, 0, 0] + +# %% +result = run_daily_temperatures(Solution, temperatures) +result + +# %% +assert_daily_temperatures(result, expected) diff --git a/leetcode/daily_temperatures/solution.py b/leetcode/daily_temperatures/solution.py new file mode 100644 index 0000000..93002d9 --- /dev/null +++ b/leetcode/daily_temperatures/solution.py @@ -0,0 +1,15 @@ +class Solution: + + # Time: O(n) + # Space: O(n) + def daily_temperatures(self, temperatures: list[int]) -> list[int]: + result = [0] * len(temperatures) + stack: list[int] = [] + + for i, temp in enumerate(temperatures): + while stack and temperatures[stack[-1]] < temp: + prev_index = stack.pop() + result[prev_index] = i - prev_index + stack.append(i) + + return result diff --git a/leetcode/daily_temperatures/test_solution.py b/leetcode/daily_temperatures/test_solution.py new file mode 100644 index 0000000..3a50fc7 --- /dev/null +++ b/leetcode/daily_temperatures/test_solution.py @@ -0,0 +1,56 @@ +import pytest + +from leetcode_py import logged_test + +from .helpers import assert_daily_temperatures, run_daily_temperatures +from .solution import Solution + + +class TestDailyTemperatures: + def setup_method(self): + self.solution = Solution() + + @logged_test + @pytest.mark.parametrize( + "temperatures, expected", + [ + ([73, 74, 75, 71, 69, 72, 76, 73], [1, 1, 4, 2, 1, 1, 0, 0]), + ([30, 40, 50, 60], [1, 1, 1, 0]), + ([30, 60, 90], [1, 1, 0]), + ([89, 62, 70, 58, 47, 47, 46, 76, 100, 70], [8, 1, 5, 4, 3, 2, 1, 1, 0, 0]), + ([55, 38, 53, 81, 61, 93, 97, 32, 43, 78], [3, 1, 1, 2, 1, 1, 0, 1, 1, 0]), + ([34, 80, 80, 34, 34, 80, 80, 80, 80, 34], [1, 0, 0, 2, 1, 0, 0, 0, 0, 0]), + ([73], [0]), + ([100], [0]), + ([30, 31, 32, 33, 34], [1, 1, 1, 1, 0]), + ([90, 80, 70, 60, 50], [0, 0, 0, 0, 0]), + ([50, 50, 50, 50], [0, 0, 0, 0]), + ([30, 100, 30, 100], [1, 0, 1, 0]), + ([75, 71, 69, 72, 76], [4, 2, 1, 1, 0]), + ([40, 35, 32, 37, 50], [4, 2, 1, 1, 0]), + ([30, 40, 50, 60, 70, 80, 90, 100], [1, 1, 1, 1, 1, 1, 1, 0]), + ([30, 30], [0, 0]), + ([100, 100], [0, 0]), + ([30, 100], [1, 0]), + ([100, 30], [0, 0]), + ([30, 31, 100], [1, 1, 0]), + ([30, 99, 100], [1, 1, 0]), + ([50, 40, 60, 30, 70], [2, 1, 2, 1, 0]), + ([60, 50, 70, 40, 80], [2, 1, 2, 1, 0]), + ([40, 50, 60, 50, 40], [1, 1, 0, 0, 0]), + ([30, 40, 50, 40, 30], [1, 1, 0, 0, 0]), + ([60, 50, 40, 50, 60], [0, 3, 1, 1, 0]), + ([70, 60, 50, 60, 70], [0, 3, 1, 1, 0]), + ([45, 50, 40, 60, 55, 65], [1, 2, 1, 2, 1, 0]), + ([35, 45, 30, 50, 40, 60], [1, 2, 1, 2, 1, 0]), + ([30, 31, 32, 33, 34, 35, 36, 37, 38, 39], [1, 1, 1, 1, 1, 1, 1, 1, 1, 0]), + ([50, 49, 48, 47, 46, 45, 44, 43, 42, 41], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), + ([40, 40, 50, 50, 60, 60], [2, 1, 2, 1, 0, 0]), + ([60, 60, 50, 50, 40, 40], [0, 0, 0, 0, 0, 0]), + ([30, 31, 30, 32], [1, 2, 1, 0]), + ([99, 100, 99, 100], [1, 0, 1, 0]), + ], + ) + def test_daily_temperatures(self, temperatures: list[int], expected: list[int]): + result = run_daily_temperatures(Solution, temperatures) + assert_daily_temperatures(result, expected) diff --git a/leetcode/diagonal_traverse/test_solution.py b/leetcode/diagonal_traverse/test_solution.py index a57c110..2cec862 100644 --- a/leetcode/diagonal_traverse/test_solution.py +++ b/leetcode/diagonal_traverse/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_find_diagonal_order, run_find_diagonal_order from .solution import Solution, SolutionRowShift diff --git a/leetcode/diameter_of_binary_tree/test_solution.py b/leetcode/diameter_of_binary_tree/test_solution.py index 11468a0..8a3bffc 100644 --- a/leetcode/diameter_of_binary_tree/test_solution.py +++ b/leetcode/diameter_of_binary_tree/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_diameter_of_binary_tree, run_diameter_of_binary_tree from .solution import Solution diff --git a/leetcode/evaluate_reverse_polish_notation/test_solution.py b/leetcode/evaluate_reverse_polish_notation/test_solution.py index 244730f..e11cc5b 100644 --- a/leetcode/evaluate_reverse_polish_notation/test_solution.py +++ b/leetcode/evaluate_reverse_polish_notation/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_eval_rpn, run_eval_rpn from .solution import Solution diff --git a/leetcode/find_all_anagrams_in_a_string/test_solution.py b/leetcode/find_all_anagrams_in_a_string/test_solution.py index 3782888..d16ca19 100644 --- a/leetcode/find_all_anagrams_in_a_string/test_solution.py +++ b/leetcode/find_all_anagrams_in_a_string/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_find_anagrams, run_find_anagrams from .solution import Solution diff --git a/leetcode/find_median_from_data_stream/test_solution.py b/leetcode/find_median_from_data_stream/test_solution.py index 25ec573..823bd07 100644 --- a/leetcode/find_median_from_data_stream/test_solution.py +++ b/leetcode/find_median_from_data_stream/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_median_finder, run_median_finder from .solution import MedianFinder, MedianFinderHybrid diff --git a/leetcode/first_bad_version/test_solution.py b/leetcode/first_bad_version/test_solution.py index 3ea5446..916fb2c 100644 --- a/leetcode/first_bad_version/test_solution.py +++ b/leetcode/first_bad_version/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_first_bad_version, run_first_bad_version from .solution import Solution diff --git a/leetcode/flood_fill/test_solution.py b/leetcode/flood_fill/test_solution.py index c9703c3..cf1b8ab 100644 --- a/leetcode/flood_fill/test_solution.py +++ b/leetcode/flood_fill/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_flood_fill, run_flood_fill from .solution import Solution diff --git a/leetcode/implement_queue_using_stacks/test_solution.py b/leetcode/implement_queue_using_stacks/test_solution.py index 24520ea..8094d30 100644 --- a/leetcode/implement_queue_using_stacks/test_solution.py +++ b/leetcode/implement_queue_using_stacks/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_my_queue, run_my_queue from .solution import MyQueue diff --git a/leetcode/implement_trie_prefix_tree/test_solution.py b/leetcode/implement_trie_prefix_tree/test_solution.py index 272e9bd..8a53b20 100644 --- a/leetcode/implement_trie_prefix_tree/test_solution.py +++ b/leetcode/implement_trie_prefix_tree/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_trie_operations, run_trie_operations from .solution import Trie diff --git a/leetcode/insert_interval/test_solution.py b/leetcode/insert_interval/test_solution.py index a7ab73d..0901983 100644 --- a/leetcode/insert_interval/test_solution.py +++ b/leetcode/insert_interval/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_insert, run_insert from .solution import Solution diff --git a/leetcode/invert_binary_tree/test_solution.py b/leetcode/invert_binary_tree/test_solution.py index 9e40afb..c86cc48 100644 --- a/leetcode/invert_binary_tree/test_solution.py +++ b/leetcode/invert_binary_tree/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_invert_tree, run_invert_tree from .solution import Solution, SolutionBFS, SolutionDFS diff --git a/leetcode/k_closest_points_to_origin/test_solution.py b/leetcode/k_closest_points_to_origin/test_solution.py index df391c0..7faa99d 100644 --- a/leetcode/k_closest_points_to_origin/test_solution.py +++ b/leetcode/k_closest_points_to_origin/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_k_closest, run_k_closest from .solution import Solution diff --git a/leetcode/kth_smallest_element_in_a_bst/test_solution.py b/leetcode/kth_smallest_element_in_a_bst/test_solution.py index be3683e..f12abdb 100644 --- a/leetcode/kth_smallest_element_in_a_bst/test_solution.py +++ b/leetcode/kth_smallest_element_in_a_bst/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_kth_smallest, run_kth_smallest from .solution import Solution diff --git a/leetcode/largest_rectangle_in_histogram/test_solution.py b/leetcode/largest_rectangle_in_histogram/test_solution.py index 2ac5ee6..66965c5 100644 --- a/leetcode/largest_rectangle_in_histogram/test_solution.py +++ b/leetcode/largest_rectangle_in_histogram/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_largest_rectangle_area, run_largest_rectangle_area from .solution import Solution diff --git a/leetcode/letter_combinations_of_a_phone_number/test_solution.py b/leetcode/letter_combinations_of_a_phone_number/test_solution.py index c28498c..28c1e2b 100644 --- a/leetcode/letter_combinations_of_a_phone_number/test_solution.py +++ b/leetcode/letter_combinations_of_a_phone_number/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_letter_combinations, run_letter_combinations from .solution import Solution diff --git a/leetcode/linked_list_cycle/test_solution.py b/leetcode/linked_list_cycle/test_solution.py index 25f3780..c302c6d 100644 --- a/leetcode/linked_list_cycle/test_solution.py +++ b/leetcode/linked_list_cycle/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_has_cycle, run_has_cycle from .solution import Solution diff --git a/leetcode/longest_palindrome/test_solution.py b/leetcode/longest_palindrome/test_solution.py index 5c8e279..dfdfcce 100644 --- a/leetcode/longest_palindrome/test_solution.py +++ b/leetcode/longest_palindrome/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_longest_palindrome, run_longest_palindrome from .solution import Solution diff --git a/leetcode/longest_palindromic_substring/test_solution.py b/leetcode/longest_palindromic_substring/test_solution.py index 0cd1994..5751e25 100644 --- a/leetcode/longest_palindromic_substring/test_solution.py +++ b/leetcode/longest_palindromic_substring/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_longest_palindrome, run_longest_palindrome from .solution import Solution, SolutionManacher diff --git a/leetcode/longest_substring_without_repeating_characters/test_solution.py b/leetcode/longest_substring_without_repeating_characters/test_solution.py index 3193ea9..289a132 100644 --- a/leetcode/longest_substring_without_repeating_characters/test_solution.py +++ b/leetcode/longest_substring_without_repeating_characters/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_length_of_longest_substring, run_length_of_longest_substring from .solution import Solution diff --git a/leetcode/lowest_common_ancestor_of_a_binary_search_tree/test_solution.py b/leetcode/lowest_common_ancestor_of_a_binary_search_tree/test_solution.py index fd2cede..47dc07b 100644 --- a/leetcode/lowest_common_ancestor_of_a_binary_search_tree/test_solution.py +++ b/leetcode/lowest_common_ancestor_of_a_binary_search_tree/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_lowest_common_ancestor, run_lowest_common_ancestor from .solution import Solution diff --git a/leetcode/lowest_common_ancestor_of_a_binary_tree/test_solution.py b/leetcode/lowest_common_ancestor_of_a_binary_tree/test_solution.py index 3d28a96..6b01c21 100644 --- a/leetcode/lowest_common_ancestor_of_a_binary_tree/test_solution.py +++ b/leetcode/lowest_common_ancestor_of_a_binary_tree/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_lowest_common_ancestor, run_lowest_common_ancestor from .solution import Solution diff --git a/leetcode/lru_cache/test_solution.py b/leetcode/lru_cache/test_solution.py index db70723..3a3c15f 100644 --- a/leetcode/lru_cache/test_solution.py +++ b/leetcode/lru_cache/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_lru_cache, run_lru_cache from .solution import LRUCache, LRUCacheWithDoublyList diff --git a/leetcode/majority_element/test_solution.py b/leetcode/majority_element/test_solution.py index ef73961..eaa2b55 100644 --- a/leetcode/majority_element/test_solution.py +++ b/leetcode/majority_element/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_majority_element, run_majority_element from .solution import Solution diff --git a/leetcode/maximum_depth_of_binary_tree/test_solution.py b/leetcode/maximum_depth_of_binary_tree/test_solution.py index e86979c..285a10a 100644 --- a/leetcode/maximum_depth_of_binary_tree/test_solution.py +++ b/leetcode/maximum_depth_of_binary_tree/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_max_depth, run_max_depth from .solution import Solution diff --git a/leetcode/maximum_profit_in_job_scheduling/test_solution.py b/leetcode/maximum_profit_in_job_scheduling/test_solution.py index 8e17451..ec132a6 100644 --- a/leetcode/maximum_profit_in_job_scheduling/test_solution.py +++ b/leetcode/maximum_profit_in_job_scheduling/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_job_scheduling, run_job_scheduling from .solution import Solution diff --git a/leetcode/maximum_subarray/test_solution.py b/leetcode/maximum_subarray/test_solution.py index ddb4d89..841b14b 100644 --- a/leetcode/maximum_subarray/test_solution.py +++ b/leetcode/maximum_subarray/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_max_sub_array, run_max_sub_array from .solution import Solution diff --git a/leetcode/merge_intervals/test_solution.py b/leetcode/merge_intervals/test_solution.py index 195cced..b8d86f6 100644 --- a/leetcode/merge_intervals/test_solution.py +++ b/leetcode/merge_intervals/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_merge, run_merge from .solution import Solution diff --git a/leetcode/merge_k_sorted_lists/test_solution.py b/leetcode/merge_k_sorted_lists/test_solution.py index e9d9cfc..15d491c 100644 --- a/leetcode/merge_k_sorted_lists/test_solution.py +++ b/leetcode/merge_k_sorted_lists/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_merge_k_lists, run_merge_k_lists from .solution import Solution diff --git a/leetcode/merge_two_sorted_lists/test_solution.py b/leetcode/merge_two_sorted_lists/test_solution.py index 58b2887..1f04409 100644 --- a/leetcode/merge_two_sorted_lists/test_solution.py +++ b/leetcode/merge_two_sorted_lists/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_merge_two_lists, run_merge_two_lists from .solution import Solution diff --git a/leetcode/middle_of_the_linked_list/test_solution.py b/leetcode/middle_of_the_linked_list/test_solution.py index 0cdfdd0..ae85cfb 100644 --- a/leetcode/middle_of_the_linked_list/test_solution.py +++ b/leetcode/middle_of_the_linked_list/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_middle_node, run_middle_node from .solution import Solution diff --git a/leetcode/min_stack/test_solution.py b/leetcode/min_stack/test_solution.py index fd75d51..4e781e2 100644 --- a/leetcode/min_stack/test_solution.py +++ b/leetcode/min_stack/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_min_stack_operations, run_min_stack_operations from .solution import MinStack diff --git a/leetcode/minimum_height_trees/test_solution.py b/leetcode/minimum_height_trees/test_solution.py index 74cd63c..b03370a 100644 --- a/leetcode/minimum_height_trees/test_solution.py +++ b/leetcode/minimum_height_trees/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_find_min_height_trees, run_find_min_height_trees from .solution import Solution diff --git a/leetcode/minimum_window_substring/test_solution.py b/leetcode/minimum_window_substring/test_solution.py index a76fe7a..2e33210 100644 --- a/leetcode/minimum_window_substring/test_solution.py +++ b/leetcode/minimum_window_substring/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_min_window, run_min_window from .solution import Solution diff --git a/leetcode/number_of_islands/test_solution.py b/leetcode/number_of_islands/test_solution.py index 2b37d2d..44a247e 100644 --- a/leetcode/number_of_islands/test_solution.py +++ b/leetcode/number_of_islands/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_num_islands, run_num_islands from .solution import Solution diff --git a/leetcode/partition_equal_subset_sum/test_solution.py b/leetcode/partition_equal_subset_sum/test_solution.py index a480df5..0a983dc 100644 --- a/leetcode/partition_equal_subset_sum/test_solution.py +++ b/leetcode/partition_equal_subset_sum/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_can_partition, run_can_partition from .solution import Solution, SolutionBitset diff --git a/leetcode/permutations/test_solution.py b/leetcode/permutations/test_solution.py index d8d1bce..92237b9 100644 --- a/leetcode/permutations/test_solution.py +++ b/leetcode/permutations/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_permute, run_permute from .solution import Solution diff --git a/leetcode/product_of_array_except_self/test_solution.py b/leetcode/product_of_array_except_self/test_solution.py index 84013ac..fe69a3c 100644 --- a/leetcode/product_of_array_except_self/test_solution.py +++ b/leetcode/product_of_array_except_self/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_product_except_self, run_product_except_self from .solution import Solution diff --git a/leetcode/ransom_note/test_solution.py b/leetcode/ransom_note/test_solution.py index 429913a..d5613e0 100644 --- a/leetcode/ransom_note/test_solution.py +++ b/leetcode/ransom_note/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_can_construct, run_can_construct from .solution import Solution diff --git a/leetcode/reverse_linked_list/test_solution.py b/leetcode/reverse_linked_list/test_solution.py index 8f8198e..8a8c4d0 100644 --- a/leetcode/reverse_linked_list/test_solution.py +++ b/leetcode/reverse_linked_list/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_reverse_list, run_reverse_list from .solution import Solution diff --git a/leetcode/reverse_linked_list_ii/test_solution.py b/leetcode/reverse_linked_list_ii/test_solution.py index 5964711..56770a1 100644 --- a/leetcode/reverse_linked_list_ii/test_solution.py +++ b/leetcode/reverse_linked_list_ii/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_reverse_between, run_reverse_between from .solution import Solution diff --git a/leetcode/rotting_oranges/test_solution.py b/leetcode/rotting_oranges/test_solution.py index 9710fb8..571852a 100644 --- a/leetcode/rotting_oranges/test_solution.py +++ b/leetcode/rotting_oranges/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_oranges_rotting, run_oranges_rotting from .solution import Solution diff --git a/leetcode/search_in_rotated_sorted_array/test_solution.py b/leetcode/search_in_rotated_sorted_array/test_solution.py index a227711..29303eb 100644 --- a/leetcode/search_in_rotated_sorted_array/test_solution.py +++ b/leetcode/search_in_rotated_sorted_array/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_search, run_search from .solution import Solution diff --git a/leetcode/serialize_and_deserialize_binary_tree/test_solution.py b/leetcode/serialize_and_deserialize_binary_tree/test_solution.py index 8f67b6e..056ca2f 100644 --- a/leetcode/serialize_and_deserialize_binary_tree/test_solution.py +++ b/leetcode/serialize_and_deserialize_binary_tree/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_serialize_deserialize, run_serialize_deserialize from .solution import Codec diff --git a/leetcode/sort_colors/test_solution.py b/leetcode/sort_colors/test_solution.py index 43f6085..a9aaa03 100644 --- a/leetcode/sort_colors/test_solution.py +++ b/leetcode/sort_colors/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_sort_colors, run_sort_colors from .solution import Solution diff --git a/leetcode/spiral_matrix/test_solution.py b/leetcode/spiral_matrix/test_solution.py index 22bda84..d79d8ab 100644 --- a/leetcode/spiral_matrix/test_solution.py +++ b/leetcode/spiral_matrix/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_spiral_order, run_spiral_order from .solution import Solution diff --git a/leetcode/string_to_integer_atoi/test_solution.py b/leetcode/string_to_integer_atoi/test_solution.py index d09898c..e73c34a 100644 --- a/leetcode/string_to_integer_atoi/test_solution.py +++ b/leetcode/string_to_integer_atoi/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_my_atoi, run_my_atoi from .solution import Solution diff --git a/leetcode/subsets/test_solution.py b/leetcode/subsets/test_solution.py index 6efd136..e16ab8c 100644 --- a/leetcode/subsets/test_solution.py +++ b/leetcode/subsets/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_subsets, run_subsets from .solution import Solution diff --git a/leetcode/task_scheduler/test_solution.py b/leetcode/task_scheduler/test_solution.py index 85794ce..441fa58 100644 --- a/leetcode/task_scheduler/test_solution.py +++ b/leetcode/task_scheduler/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_least_interval, run_least_interval from .solution import Solution diff --git a/leetcode/three_sum/test_solution.py b/leetcode/three_sum/test_solution.py index 2bba573..46d0263 100644 --- a/leetcode/three_sum/test_solution.py +++ b/leetcode/three_sum/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_three_sum, run_three_sum from .solution import Solution diff --git a/leetcode/time_based_key_value_store/test_solution.py b/leetcode/time_based_key_value_store/test_solution.py index c0c16ff..fb955f7 100644 --- a/leetcode/time_based_key_value_store/test_solution.py +++ b/leetcode/time_based_key_value_store/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_time_map_operations, run_time_map_operations from .solution import TimeMap diff --git a/leetcode/trapping_rain_water/test_solution.py b/leetcode/trapping_rain_water/test_solution.py index c35bb3f..ab8cd90 100644 --- a/leetcode/trapping_rain_water/test_solution.py +++ b/leetcode/trapping_rain_water/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_trap, run_trap from .solution import Solution diff --git a/leetcode/two_sum/test_solution.py b/leetcode/two_sum/test_solution.py index 75cb3f3..a251146 100644 --- a/leetcode/two_sum/test_solution.py +++ b/leetcode/two_sum/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_two_sum, run_two_sum from .solution import Solution diff --git a/leetcode/unique_paths/test_solution.py b/leetcode/unique_paths/test_solution.py index b66ad67..1e9be3c 100644 --- a/leetcode/unique_paths/test_solution.py +++ b/leetcode/unique_paths/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_unique_paths, run_unique_paths from .solution import Solution, SolutionMath diff --git a/leetcode/valid_anagram/test_solution.py b/leetcode/valid_anagram/test_solution.py index 8a46646..0acd896 100644 --- a/leetcode/valid_anagram/test_solution.py +++ b/leetcode/valid_anagram/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_is_anagram, run_is_anagram from .solution import Solution diff --git a/leetcode/valid_palindrome/test_solution.py b/leetcode/valid_palindrome/test_solution.py index 83b4362..7804ca5 100644 --- a/leetcode/valid_palindrome/test_solution.py +++ b/leetcode/valid_palindrome/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_is_palindrome, run_is_palindrome from .solution import Solution diff --git a/leetcode/valid_parentheses/test_solution.py b/leetcode/valid_parentheses/test_solution.py index 7e4c8b2..78f33d3 100644 --- a/leetcode/valid_parentheses/test_solution.py +++ b/leetcode/valid_parentheses/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_is_valid, run_is_valid from .solution import Solution diff --git a/leetcode/validate_binary_search_tree/test_solution.py b/leetcode/validate_binary_search_tree/test_solution.py index 2491911..e71dd32 100644 --- a/leetcode/validate_binary_search_tree/test_solution.py +++ b/leetcode/validate_binary_search_tree/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_is_valid_bst, run_is_valid_bst from .solution import Solution, SolutionBFS, SolutionDFS diff --git a/leetcode/word_break/test_solution.py b/leetcode/word_break/test_solution.py index 97a2619..7463d00 100644 --- a/leetcode/word_break/test_solution.py +++ b/leetcode/word_break/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_word_break, run_word_break from .solution import Solution diff --git a/leetcode/word_ladder/test_solution.py b/leetcode/word_ladder/test_solution.py index 94008a8..2239150 100644 --- a/leetcode/word_ladder/test_solution.py +++ b/leetcode/word_ladder/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_ladder_length, run_ladder_length from .solution import Solution diff --git a/leetcode/word_search/test_solution.py b/leetcode/word_search/test_solution.py index 5e1151d..32f041c 100644 --- a/leetcode/word_search/test_solution.py +++ b/leetcode/word_search/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_exist, run_exist from .solution import Solution diff --git a/leetcode/zero_one_matrix/test_solution.py b/leetcode/zero_one_matrix/test_solution.py index 4129b47..d7823c0 100644 --- a/leetcode/zero_one_matrix/test_solution.py +++ b/leetcode/zero_one_matrix/test_solution.py @@ -1,6 +1,6 @@ import pytest -from leetcode_py.test_utils import logged_test +from leetcode_py import logged_test from .helpers import assert_update_matrix, run_update_matrix from .solution import Solution diff --git a/leetcode_py/__init__.py b/leetcode_py/__init__.py index 0300fc0..8134f11 100644 --- a/leetcode_py/__init__.py +++ b/leetcode_py/__init__.py @@ -1,5 +1,6 @@ from leetcode_py.data_structures.graph_node import GraphNode from leetcode_py.data_structures.list_node import ListNode from leetcode_py.data_structures.tree_node import TreeNode +from leetcode_py.tools.logged_test import logged_test -__all__ = ["GraphNode", "ListNode", "TreeNode"] +__all__ = ["GraphNode", "ListNode", "TreeNode", "logged_test"] diff --git a/leetcode_py/cli/resources/leetcode/cookiecutter.json b/leetcode_py/cli/resources/leetcode/cookiecutter.json index 4287ea1..e8175f0 100644 --- a/leetcode_py/cli/resources/leetcode/cookiecutter.json +++ b/leetcode_py/cli/resources/leetcode/cookiecutter.json @@ -18,7 +18,7 @@ "readme_constraints": "- 2 <= nums.length <= 10^4\n- -10^9 <= nums[i] <= 10^9\n- -10^9 <= target <= 10^9\n- Only one valid answer exists.", "readme_additional": "", - "helpers_imports": "import pytest\nfrom leetcode_py.test_utils import logged_test\nfrom .solution import Solution", + "helpers_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .solution import Solution", "helpers_content": "", "helpers_run_name": "two_sum", "helpers_run_signature": "(solution_class: type, nums: list[int], target: int)", @@ -31,7 +31,7 @@ "solution_contents": "", "solution_class_content": "", - "test_imports": "import pytest\nfrom leetcode_py.test_utils import logged_test\nfrom .helpers import assert_two_sum, run_two_sum\nfrom .solution import Solution", + "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_two_sum, run_two_sum\nfrom .solution import Solution", "test_content": "", "test_class_name": "TwoSum", "test_class_content": " def setup_method(self):\n self.solution = Solution()", diff --git a/leetcode_py/cli/resources/leetcode/examples/example.json5 b/leetcode_py/cli/resources/leetcode/examples/example.json5 index 09c1c24..57d4159 100644 --- a/leetcode_py/cli/resources/leetcode/examples/example.json5 +++ b/leetcode_py/cli/resources/leetcode/examples/example.json5 @@ -1,196 +1,200 @@ { - // ============================================================================ - // COMPREHENSIVE LEETCODE TEMPLATE EXAMPLE - // ============================================================================ - // This example demonstrates ALL template patterns using valid_anagram as base - // with comprehensive comments showing variations for different problem types. - // - // REFERENCE PROBLEMS (see .templates/leetcode/json/ for complete examples): - // 1. valid_anagram - Basic: string parameters, boolean return - // 2. invert_binary_tree - Tree: TreeNode imports/parameters - // 3. merge_two_sorted_lists - LinkedList: ListNode imports/parameters - // 4. lru_cache - Design: custom class, multiple methods, operations - // 5. implement_trie_prefix_tree - Trie: DictTree inheritance - // ============================================================================ + // ============================================================================ + // COMPREHENSIVE LEETCODE TEMPLATE EXAMPLE + // ============================================================================ + // This example demonstrates ALL template patterns using valid_anagram as base + // with comprehensive comments showing variations for different problem types. + // + // REFERENCE PROBLEMS (see .templates/leetcode/json/ for complete examples): + // 1. valid_anagram - Basic: string parameters, boolean return + // 2. invert_binary_tree - Tree: TreeNode imports/parameters + // 3. merge_two_sorted_lists - LinkedList: ListNode imports/parameters + // 4. lru_cache - Design: custom class, multiple methods, operations + // 5. implement_trie_prefix_tree - Trie: DictTree inheritance + // ============================================================================ - // === PROBLEM IDENTIFICATION === - "problem_name": "valid_anagram", // snake_case: used for directory/file names - "solution_class_name": "Solution", // "Solution" for basic problems - // "LRUCache" for design problems - // "Trie(DictTree[str])" for inheritance - "problem_number": "242", // LeetCode problem number as string - "problem_title": "Valid Anagram", // Exact title from LeetCode - "difficulty": "Easy", // Easy, Medium, Hard - "topics": "Hash Table, String, Sorting", // Comma-separated topics from LeetCode - "_tags": { "list": ["grind-75"] }, // Optional: common problem set tags - // Use _tags wrapper for cookiecutter lists + // === PROBLEM IDENTIFICATION === + problem_name: "valid_anagram", // snake_case: used for directory/file names + solution_class_name: "Solution", // "Solution" for basic problems + // "LRUCache" for design problems + // "Trie(DictTree[str])" for inheritance + problem_number: "242", // LeetCode problem number as string + problem_title: "Valid Anagram", // Exact title from LeetCode + difficulty: "Easy", // Easy, Medium, Hard + topics: "Hash Table, String, Sorting", // Comma-separated topics from LeetCode + _tags: { list: ["grind-75"] }, // Optional: common problem set tags + // Use _tags wrapper for cookiecutter lists - // === README CONTENT === - // IMPORTANT: Preserve rich HTML content from LeetCode including: - // - Code snippets with backticks: `code` - // - Bold text: **bold** or bold - // - Italic text: *italic* or italic - // - Images: ![Example](https://assets.leetcode.com/uploads/...) - // - HTML formatting:

,
,