leetcode-py-sdk 1.0.2__tar.gz → 1.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- leetcode_py_sdk-1.0.4/PKG-INFO +137 -0
- leetcode_py_sdk-1.0.4/README.md +98 -0
- leetcode_py_sdk-1.0.4/pyproject.toml +154 -0
- leetcode_py_sdk-1.0.2/pyproject.toml → leetcode_py_sdk-1.0.4/pyproject.toml.orig +8 -3
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/main.py +13 -1
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_queue_using_stacks.json +3 -3
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_stack_using_queues.json +3 -3
- leetcode_py_sdk-1.0.4/src/leetcode_py/cli/resources/leetcode/json/problems/integer_to_roman.json +98 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/shortest_path_in_binary_matrix.json +19 -5
- leetcode_py_sdk-1.0.4/src/leetcode_py/cli/resources/leetcode/json/problems/shortest_path_to_get_food.json +100 -0
- leetcode_py_sdk-1.0.4/src/leetcode_py/cli/resources/leetcode/json/problems/zigzag_conversion.json +98 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/tags.json5 +51 -5
- leetcode_py_sdk-1.0.2/PKG-INFO +0 -361
- leetcode_py_sdk-1.0.2/README.md +0 -325
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/__init__.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/__init__.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/commands/__init__.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/commands/gen.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/commands/list.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/commands/scrape.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/cookiecutter.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/accounts_merge.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/add_binary.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/add_two_numbers.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/alien_dictionary.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/all_nodes_distance_k_in_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/asteroid_collision.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/backspace_string_compare.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/balanced_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/baseball_game.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/basic_calculator.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/basic_calculator_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/best_time_to_buy_and_sell_stock.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/best_time_to_buy_and_sell_stock_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/best_time_to_buy_and_sell_stock_with_cooldown.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_search.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_inorder_traversal.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_level_order_traversal.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_maximum_path_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_postorder_traversal.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_preorder_traversal.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_right_side_view.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_zigzag_level_order_traversal.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/bitwise_and_of_numbers_range.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/boats_to_save_people.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/build_a_matrix_with_conditions.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/burst_balloons.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/bus_routes.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/candy.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/capacity_to_ship_packages_within_d_days.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/car_fleet.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/car_pooling.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/cheapest_flights_within_k_stops.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/climbing_stairs.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/clone_graph.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/coin_change.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/coin_change_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum_iv.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/combinations.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/concatenation_of_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/construct_binary_tree_from_preorder_and_inorder_traversal.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/construct_quad_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/container_with_most_water.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/contains_duplicate.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/contains_duplicate_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/contiguous_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/convert_sorted_array_to_binary_search_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/copy_list_with_random_pointer.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/count_good_nodes_in_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/counting_bits.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule_iv.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/daily_temperatures.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_ways.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/delete_leaves_with_a_given_value.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/delete_node_in_a_bst.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/design_add_and_search_words_data_structure.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/design_circular_queue.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/design_hash_map.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/design_hash_set.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/design_hit_counter.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/design_in_memory_file_system.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/design_twitter.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/detect_squares.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/diagonal_traverse.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/diameter_of_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/distinct_subsequences.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/dota2_senate.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/edit_distance.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/employee_free_time.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/encode_and_decode_strings.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/evaluate_division.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/evaluate_reverse_polish_notation.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/excel_sheet_column_title.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/extra_characters_in_a_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/find_all_anagrams_in_a_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/find_critical_and_pseudo_critical_edges_in_minimum_spanning_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/find_first_and_last_position_of_element_in_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/find_in_mountain_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/find_k_closest_elements.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/find_median_from_data_stream.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/find_minimum_in_rotated_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/find_the_duplicate_number.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/find_the_town_judge.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/first_bad_version.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/first_missing_positive.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/flood_fill.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/four_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/gas_station.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/gcd_of_strings.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/generate_parentheses.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/graph_valid_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/greatest_common_divisor_traversal.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/group_anagrams.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/guess_number_higher_or_lower.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/hand_of_straights.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/happy_number.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber_iii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_trie_prefix_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/inorder_successor_in_bst.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_delete_getrandom_o1.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_greatest_common_divisors_in_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_interval.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_into_a_binary_search_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/integer_break.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/interleaving_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/invert_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/ipo.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/is_graph_bipartite.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/is_subsequence.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/island_perimeter.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game_vii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/k_closest_points_to_origin.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/koko_eating_bananas.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/kth_largest_element_in_a_stream.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/kth_largest_element_in_an_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/kth_smallest_element_in_a_bst.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/largest_number.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/largest_rectangle_in_histogram.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/last_stone_weight.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/last_stone_weight_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/lemonade_change.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/letter_combinations_of_a_phone_number.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/lfu_cache.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_common_prefix.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_common_subsequence.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_consecutive_sequence.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_happy_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_path_in_a_matrix.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_subsequence.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindrome.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindromic_substring.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_repeating_character_replacement.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_substring_without_repeating_characters.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_turbulent_subarray.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_valid_parentheses.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_search_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/lru_cache.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/majority_element.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/majority_element_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/matchsticks_to_square.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/max_area_of_island.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/max_points_on_a_line.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/maximal_square.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_depth_of_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_frequency_stack.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_product_subarray.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_profit_in_job_scheduling.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_subarray.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_sum_circular_subarray.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_width_of_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/median_of_two_sorted_arrays.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms_iii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_intervals.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_k_sorted_lists.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_strings_alternately.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_triplets_to_form_target_triplet.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_two_sorted_lists.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/middle_of_the_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/min_cost_climbing_stairs.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/min_cost_to_connect_all_points.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/min_stack.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_array_end.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_height_trees.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_interval_to_include_each_query.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_knight_moves.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_path_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_size_subarray_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_window_substring.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/missing_number.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/move_zeroes.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/multiply_strings.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/my_calendar_i.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/n_queens.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/n_queens_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/n_th_tribonacci_number.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/network_delay_time.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/next_permutation.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/non_overlapping_intervals.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_1_bits.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_connected_components_in_an_undirected_graph.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_islands.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_provinces.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/odd_even_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/online_stock_span.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/open_the_lock.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/pacific_atlantic_water_flow.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_number.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_pairs.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_partitioning.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/palindromic_substrings.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/partition_equal_subset_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/partition_labels.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/partition_to_k_equal_sum_subsets.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_iii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/path_with_minimum_effort.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/perfect_squares.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/permutation_in_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/permutations.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/permutations_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/plus_one.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/powx_n.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/product_of_array_except_self.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/random_pick_with_weight.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/range_sum_query_2d_immutable.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/ransom_note.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reconstruct_itinerary.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/redundant_connection.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/regular_expression_matching.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/remove_duplicates_from_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/remove_element.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/remove_nth_node_from_end_of_list.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reorder_list.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reorganize_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_bits.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_integer.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_nodes_in_k_group.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_words_in_a_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/roman_to_integer.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_image.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_list.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/rotting_oranges.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/same_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/search_a_2d_matrix.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/search_in_rotated_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/search_in_rotated_sorted_array_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/search_insert_position.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/serialize_and_deserialize_binary_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/set_matrix_zeroes.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/simplify_path.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/single_number.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/single_number_iii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/single_threaded_cpu.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/sliding_window_maximum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/smallest_range_covering_elements_from_k_lists.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/sort_an_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/sort_colors.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/sort_list.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/spiral_matrix.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/split_array_largest_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/sqrtx.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/squares_of_a_sorted_array.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/stone_game.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/stone_game_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/stone_game_iii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/string_to_integer_atoi.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/subarray_sum_equals_k.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/subsets.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/subsets_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/subtree_of_another_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/sudoku_solver.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/sum_of_all_subset_xor_totals.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/sum_of_two_integers.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/surrounded_regions.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/swap_nodes_in_pairs.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/swim_in_rising_water.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/symmetric_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/target_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/task_scheduler.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/three_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/three_sum_closest.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/time_based_key_value_store.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_elements.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_words.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/transpose_matrix.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/trapping_rain_water.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/two_sum.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/two_sum_ii_input_array_is_sorted.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/unique_paths.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/unique_paths_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_anagram.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_palindrome.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_palindrome_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_parentheses.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_parenthesis_string.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_sudoku.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/validate_binary_search_tree.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/verifying_an_alien_dictionary.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/walls_and_gates.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/word_break.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/word_break_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/word_ladder.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search_ii.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/json/problems/zero_one_matrix.json +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/README.md +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/__init__.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/helpers.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/playground.ipynb +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/solution.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/test_solution.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/utils/__init__.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/utils/problem_finder.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/utils/resources.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/cli/utils/tag_helpers.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/data_structures/__init__.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/data_structures/_utils.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/data_structures/dict_tree.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/data_structures/doubly_list_node.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/data_structures/graph_node.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/data_structures/list_node.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/data_structures/tree_node.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/py.typed +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/tools/__init__.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/tools/check_test_cases.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/tools/generator.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/tools/logged_test.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/tools/parser.py +0 -0
- {leetcode_py_sdk-1.0.2 → leetcode_py_sdk-1.0.4}/src/leetcode_py/tools/scraper.py +0 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: leetcode-py-sdk
|
|
3
|
+
Version: 1.0.4
|
|
4
|
+
Summary: Modern Python LeetCode practice environment with automated problem generation, beautiful data structure visualizations, and comprehensive testing
|
|
5
|
+
Keywords: algorithms,coding-practice,data-structures,interview-prep,leetcode
|
|
6
|
+
Author: Wisaroot Lertthaweedech
|
|
7
|
+
Author-email: Wisaroot Lertthaweedech <l.wisaroot@gmail.com>
|
|
8
|
+
License: Apache-2.0
|
|
9
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: Intended Audience :: Education
|
|
12
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Topic :: Education
|
|
20
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
21
|
+
Requires-Dist: anytree>=2.13.0
|
|
22
|
+
Requires-Dist: chardet>=7.4.3
|
|
23
|
+
Requires-Dist: cookiecutter>=2.6.0
|
|
24
|
+
Requires-Dist: graphviz>=0.21
|
|
25
|
+
Requires-Dist: json5>=0.13.0
|
|
26
|
+
Requires-Dist: loguru>=0.7.3
|
|
27
|
+
Requires-Dist: requests>=2.32.5
|
|
28
|
+
Requires-Dist: rich>=14.1.0
|
|
29
|
+
Requires-Dist: ruff>=0.14.0
|
|
30
|
+
Requires-Dist: ty>=0.0.13
|
|
31
|
+
Requires-Dist: typer>=0.21.0
|
|
32
|
+
Requires-Python: >=3.10
|
|
33
|
+
Project-URL: Changelog, https://github.com/wislertt/leetcode-py/releases
|
|
34
|
+
Project-URL: Documentation, https://leetcode-py.wisl.dev
|
|
35
|
+
Project-URL: Homepage, https://leetcode-py.wisl.dev
|
|
36
|
+
Project-URL: Issues, https://github.com/wislertt/leetcode-py/issues
|
|
37
|
+
Project-URL: Repository, https://github.com/wislertt/leetcode-py
|
|
38
|
+
Description-Content-Type: text/markdown
|
|
39
|
+
|
|
40
|
+
[](https://github.com/wislertt/leetcode-py/actions/workflows/cd.yml)
|
|
41
|
+
[](https://github.com/wislertt/leetcode-py/actions/workflows/cd.yml)
|
|
42
|
+
[](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
|
|
43
|
+
[](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
|
|
44
|
+
[](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
|
|
45
|
+
[](https://codecov.io/gh/wislertt/leetcode-py)
|
|
46
|
+
[](https://pypi.python.org/pypi/leetcode-py-sdk)
|
|
47
|
+
[](https://pepy.tech/projects/leetcode-py-sdk)
|
|
48
|
+
[](https://github.com/wislertt/leetcode-py/)
|
|
49
|
+
[](https://github.com/wislertt/leetcode-py)
|
|
50
|
+
[](https://github.com/sponsors/wislertt)
|
|
51
|
+
|
|
52
|
+
<p align="center">
|
|
53
|
+
<picture>
|
|
54
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/wislertt/leetcode-py@main/docs/img/brand/leetcode-py-lockup-dark.svg">
|
|
55
|
+
<img src="https://cdn.jsdelivr.net/gh/wislertt/leetcode-py@main/docs/img/brand/leetcode-py-lockup.svg" width="360" alt="leetcode-py logo">
|
|
56
|
+
</picture>
|
|
57
|
+
</p>
|
|
58
|
+
|
|
59
|
+
# leetcode-py
|
|
60
|
+
|
|
61
|
+
A Python package to generate professional LeetCode practice environments: a problem README, a typed solution stub, a parametrized pytest suite with 10+ cases, helpers, and a playground notebook, all from JSON templates. Full documentation lives at [leetcode-py.wisl.dev](https://leetcode-py.wisl.dev).
|
|
62
|
+
|
|
63
|
+
**What makes this different:**
|
|
64
|
+
|
|
65
|
+
- 🤖 **[LLM-Assisted Workflow](https://leetcode-py.wisl.dev/contributing/problem-creation)**: Generate new problems instantly with AI assistance
|
|
66
|
+
- 🎨 **[Visual Debugging](https://leetcode-py.wisl.dev/practice/visualizations)**: TreeNode, ListNode, and GraphNode render as Graphviz diagrams in Jupyter and clean ASCII in the terminal
|
|
67
|
+
- 🧪 **[Production Testing](https://leetcode-py.wisl.dev/practice/testing)**: Comprehensive test suites with edge cases and reproducibility verification
|
|
68
|
+
- 🚀 **Modern Python**: PEP 585/604 type hints, uv, and professional tooling
|
|
69
|
+
- 📊 **Quality Assurance**: 95%+ test coverage, security scanning, automated linting
|
|
70
|
+
- ⚡ **[Powerful CLI](https://leetcode-py.wisl.dev/cli/lcpy)**: Generate problems anywhere with `lcpy` command
|
|
71
|
+
|
|
72
|
+
## 🚀 Quick Start
|
|
73
|
+
|
|
74
|
+
Requires **Python 3.10+** and **Graphviz** for visualizations ([install guide](https://graphviz.org/download/)).
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Install the package
|
|
78
|
+
pip install leetcode-py-sdk
|
|
79
|
+
|
|
80
|
+
# Generate problems anywhere
|
|
81
|
+
lcpy gen -n 1 # Generate Two Sum
|
|
82
|
+
lcpy gen -t grind-75 # Generate all Grind 75 problems
|
|
83
|
+
lcpy list -t blind-75 # List Blind 75 problems
|
|
84
|
+
|
|
85
|
+
# Start practicing
|
|
86
|
+
cd leetcode/two_sum
|
|
87
|
+
python -m pytest test_solution.py # Run tests
|
|
88
|
+
# Edit solution.py, then rerun tests
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
See the [Quickstart](https://leetcode-py.wisl.dev/getting-started/quickstart) for the full walkthrough and the [CLI guide](https://leetcode-py.wisl.dev/cli/lcpy) for every option.
|
|
92
|
+
|
|
93
|
+
## 🗂️ Collections
|
|
94
|
+
|
|
95
|
+
307 problems, ready to generate, across six complete collections. Browse them all in the [catalog](https://leetcode-py.wisl.dev/catalog):
|
|
96
|
+
|
|
97
|
+
| Collection | What it is |
|
|
98
|
+
| -------------------------------------------------------------------- | ----------------------------------------------------------- |
|
|
99
|
+
| [Grind 75](https://leetcode-py.wisl.dev/catalog/grind-75) | Essential coding interview questions, time-boxed study plan |
|
|
100
|
+
| [Grind](https://leetcode-py.wisl.dev/catalog/grind) | 169 problems; Grind 75 plus the extended edition |
|
|
101
|
+
| [Blind 75](https://leetcode-py.wisl.dev/catalog/blind-75) | The original curated list |
|
|
102
|
+
| [NeetCode 150](https://leetcode-py.wisl.dev/catalog/neetcode-150) | Comprehensive coverage by topic |
|
|
103
|
+
| [NeetCode 250](https://leetcode-py.wisl.dev/catalog/neetcode-250) | NeetCode 150 plus 100 more |
|
|
104
|
+
| [AlgoMaster 75](https://leetcode-py.wisl.dev/catalog/algo-master-75) | Curated algorithmic mastery problems |
|
|
105
|
+
|
|
106
|
+
## 🛠️ Development
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
git clone https://github.com/wislertt/leetcode-py.git
|
|
110
|
+
cd leetcode-py
|
|
111
|
+
uv sync
|
|
112
|
+
bake test
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Problems in `leetcode/` are generated from JSON templates. To add one, use the [LLM-assisted workflow](https://leetcode-py.wisl.dev/contributing/problem-creation); for repo tasks see the [bakefile guide](https://leetcode-py.wisl.dev/contributing/bakefile).
|
|
116
|
+
|
|
117
|
+
## 📖 Documentation
|
|
118
|
+
|
|
119
|
+
- [Why leetcode-py](https://leetcode-py.wisl.dev/getting-started/why-leetcode-py)
|
|
120
|
+
- [Installation](https://leetcode-py.wisl.dev/getting-started/installation)
|
|
121
|
+
- [Problem anatomy](https://leetcode-py.wisl.dev/practice/problem-anatomy)
|
|
122
|
+
- [Testing pattern](https://leetcode-py.wisl.dev/practice/testing)
|
|
123
|
+
- [Visualizations](https://leetcode-py.wisl.dev/practice/visualizations)
|
|
124
|
+
- [Notebook workflow](https://leetcode-py.wisl.dev/practice/notebooks)
|
|
125
|
+
- [CLI reference](https://leetcode-py.wisl.dev/cli/lcpy)
|
|
126
|
+
- [Contributing](https://github.com/wislertt/leetcode-py/blob/main/CONTRIBUTING.md)
|
|
127
|
+
|
|
128
|
+
## 💖 Support This Project
|
|
129
|
+
|
|
130
|
+
If you find this project helpful, please consider **starring the repo ⭐** or **sponsoring my work 💖**.
|
|
131
|
+
|
|
132
|
+
[](https://github.com/wislertt/leetcode-py)
|
|
133
|
+
[](https://github.com/sponsors/wislertt)
|
|
134
|
+
|
|
135
|
+
## License
|
|
136
|
+
|
|
137
|
+
Apache-2.0. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
[](https://github.com/wislertt/leetcode-py/actions/workflows/cd.yml)
|
|
2
|
+
[](https://github.com/wislertt/leetcode-py/actions/workflows/cd.yml)
|
|
3
|
+
[](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
|
|
4
|
+
[](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
|
|
5
|
+
[](https://sonarcloud.io/summary/new_code?id=wislertt_leetcode-py)
|
|
6
|
+
[](https://codecov.io/gh/wislertt/leetcode-py)
|
|
7
|
+
[](https://pypi.python.org/pypi/leetcode-py-sdk)
|
|
8
|
+
[](https://pepy.tech/projects/leetcode-py-sdk)
|
|
9
|
+
[](https://github.com/wislertt/leetcode-py/)
|
|
10
|
+
[](https://github.com/wislertt/leetcode-py)
|
|
11
|
+
[](https://github.com/sponsors/wislertt)
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<picture>
|
|
15
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/wislertt/leetcode-py@main/docs/img/brand/leetcode-py-lockup-dark.svg">
|
|
16
|
+
<img src="https://cdn.jsdelivr.net/gh/wislertt/leetcode-py@main/docs/img/brand/leetcode-py-lockup.svg" width="360" alt="leetcode-py logo">
|
|
17
|
+
</picture>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
# leetcode-py
|
|
21
|
+
|
|
22
|
+
A Python package to generate professional LeetCode practice environments: a problem README, a typed solution stub, a parametrized pytest suite with 10+ cases, helpers, and a playground notebook, all from JSON templates. Full documentation lives at [leetcode-py.wisl.dev](https://leetcode-py.wisl.dev).
|
|
23
|
+
|
|
24
|
+
**What makes this different:**
|
|
25
|
+
|
|
26
|
+
- 🤖 **[LLM-Assisted Workflow](https://leetcode-py.wisl.dev/contributing/problem-creation)**: Generate new problems instantly with AI assistance
|
|
27
|
+
- 🎨 **[Visual Debugging](https://leetcode-py.wisl.dev/practice/visualizations)**: TreeNode, ListNode, and GraphNode render as Graphviz diagrams in Jupyter and clean ASCII in the terminal
|
|
28
|
+
- 🧪 **[Production Testing](https://leetcode-py.wisl.dev/practice/testing)**: Comprehensive test suites with edge cases and reproducibility verification
|
|
29
|
+
- 🚀 **Modern Python**: PEP 585/604 type hints, uv, and professional tooling
|
|
30
|
+
- 📊 **Quality Assurance**: 95%+ test coverage, security scanning, automated linting
|
|
31
|
+
- ⚡ **[Powerful CLI](https://leetcode-py.wisl.dev/cli/lcpy)**: Generate problems anywhere with `lcpy` command
|
|
32
|
+
|
|
33
|
+
## 🚀 Quick Start
|
|
34
|
+
|
|
35
|
+
Requires **Python 3.10+** and **Graphviz** for visualizations ([install guide](https://graphviz.org/download/)).
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Install the package
|
|
39
|
+
pip install leetcode-py-sdk
|
|
40
|
+
|
|
41
|
+
# Generate problems anywhere
|
|
42
|
+
lcpy gen -n 1 # Generate Two Sum
|
|
43
|
+
lcpy gen -t grind-75 # Generate all Grind 75 problems
|
|
44
|
+
lcpy list -t blind-75 # List Blind 75 problems
|
|
45
|
+
|
|
46
|
+
# Start practicing
|
|
47
|
+
cd leetcode/two_sum
|
|
48
|
+
python -m pytest test_solution.py # Run tests
|
|
49
|
+
# Edit solution.py, then rerun tests
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
See the [Quickstart](https://leetcode-py.wisl.dev/getting-started/quickstart) for the full walkthrough and the [CLI guide](https://leetcode-py.wisl.dev/cli/lcpy) for every option.
|
|
53
|
+
|
|
54
|
+
## 🗂️ Collections
|
|
55
|
+
|
|
56
|
+
307 problems, ready to generate, across six complete collections. Browse them all in the [catalog](https://leetcode-py.wisl.dev/catalog):
|
|
57
|
+
|
|
58
|
+
| Collection | What it is |
|
|
59
|
+
| -------------------------------------------------------------------- | ----------------------------------------------------------- |
|
|
60
|
+
| [Grind 75](https://leetcode-py.wisl.dev/catalog/grind-75) | Essential coding interview questions, time-boxed study plan |
|
|
61
|
+
| [Grind](https://leetcode-py.wisl.dev/catalog/grind) | 169 problems; Grind 75 plus the extended edition |
|
|
62
|
+
| [Blind 75](https://leetcode-py.wisl.dev/catalog/blind-75) | The original curated list |
|
|
63
|
+
| [NeetCode 150](https://leetcode-py.wisl.dev/catalog/neetcode-150) | Comprehensive coverage by topic |
|
|
64
|
+
| [NeetCode 250](https://leetcode-py.wisl.dev/catalog/neetcode-250) | NeetCode 150 plus 100 more |
|
|
65
|
+
| [AlgoMaster 75](https://leetcode-py.wisl.dev/catalog/algo-master-75) | Curated algorithmic mastery problems |
|
|
66
|
+
|
|
67
|
+
## 🛠️ Development
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git clone https://github.com/wislertt/leetcode-py.git
|
|
71
|
+
cd leetcode-py
|
|
72
|
+
uv sync
|
|
73
|
+
bake test
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Problems in `leetcode/` are generated from JSON templates. To add one, use the [LLM-assisted workflow](https://leetcode-py.wisl.dev/contributing/problem-creation); for repo tasks see the [bakefile guide](https://leetcode-py.wisl.dev/contributing/bakefile).
|
|
77
|
+
|
|
78
|
+
## 📖 Documentation
|
|
79
|
+
|
|
80
|
+
- [Why leetcode-py](https://leetcode-py.wisl.dev/getting-started/why-leetcode-py)
|
|
81
|
+
- [Installation](https://leetcode-py.wisl.dev/getting-started/installation)
|
|
82
|
+
- [Problem anatomy](https://leetcode-py.wisl.dev/practice/problem-anatomy)
|
|
83
|
+
- [Testing pattern](https://leetcode-py.wisl.dev/practice/testing)
|
|
84
|
+
- [Visualizations](https://leetcode-py.wisl.dev/practice/visualizations)
|
|
85
|
+
- [Notebook workflow](https://leetcode-py.wisl.dev/practice/notebooks)
|
|
86
|
+
- [CLI reference](https://leetcode-py.wisl.dev/cli/lcpy)
|
|
87
|
+
- [Contributing](https://github.com/wislertt/leetcode-py/blob/main/CONTRIBUTING.md)
|
|
88
|
+
|
|
89
|
+
## 💖 Support This Project
|
|
90
|
+
|
|
91
|
+
If you find this project helpful, please consider **starring the repo ⭐** or **sponsoring my work 💖**.
|
|
92
|
+
|
|
93
|
+
[](https://github.com/wislertt/leetcode-py)
|
|
94
|
+
[](https://github.com/sponsors/wislertt)
|
|
95
|
+
|
|
96
|
+
## License
|
|
97
|
+
|
|
98
|
+
Apache-2.0. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "leetcode-py-sdk"
|
|
3
|
+
version = "1.0.4"
|
|
4
|
+
description = "Modern Python LeetCode practice environment with automated problem generation, beautiful data structure visualizations, and comprehensive testing"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
keywords = [
|
|
8
|
+
"algorithms",
|
|
9
|
+
"coding-practice",
|
|
10
|
+
"data-structures",
|
|
11
|
+
"interview-prep",
|
|
12
|
+
"leetcode",
|
|
13
|
+
]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 5 - Production/Stable",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"Intended Audience :: Education",
|
|
18
|
+
"License :: OSI Approved :: Apache Software License",
|
|
19
|
+
"Programming Language :: Python :: 3",
|
|
20
|
+
"Programming Language :: Python :: 3.10",
|
|
21
|
+
"Programming Language :: Python :: 3.11",
|
|
22
|
+
"Programming Language :: Python :: 3.12",
|
|
23
|
+
"Programming Language :: Python :: 3.13",
|
|
24
|
+
"Programming Language :: Python :: 3.14",
|
|
25
|
+
"Topic :: Education",
|
|
26
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
27
|
+
]
|
|
28
|
+
dependencies = [
|
|
29
|
+
"anytree>=2.13.0",
|
|
30
|
+
"chardet>=7.4.3",
|
|
31
|
+
"cookiecutter>=2.6.0",
|
|
32
|
+
"graphviz>=0.21",
|
|
33
|
+
"json5>=0.13.0",
|
|
34
|
+
"loguru>=0.7.3",
|
|
35
|
+
"requests>=2.32.5",
|
|
36
|
+
"rich>=14.1.0",
|
|
37
|
+
"ruff>=0.14.0",
|
|
38
|
+
"ty>=0.0.13",
|
|
39
|
+
"typer>=0.21.0",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
[[project.authors]]
|
|
43
|
+
name = "Wisaroot Lertthaweedech"
|
|
44
|
+
email = "l.wisaroot@gmail.com"
|
|
45
|
+
|
|
46
|
+
[project.license]
|
|
47
|
+
text = "Apache-2.0"
|
|
48
|
+
|
|
49
|
+
[project.scripts]
|
|
50
|
+
lcpy = "leetcode_py.cli.main:app"
|
|
51
|
+
|
|
52
|
+
[project.urls]
|
|
53
|
+
Changelog = "https://github.com/wislertt/leetcode-py/releases"
|
|
54
|
+
Documentation = "https://leetcode-py.wisl.dev"
|
|
55
|
+
Homepage = "https://leetcode-py.wisl.dev"
|
|
56
|
+
Issues = "https://github.com/wislertt/leetcode-py/issues"
|
|
57
|
+
Repository = "https://github.com/wislertt/leetcode-py"
|
|
58
|
+
|
|
59
|
+
[dependency-groups]
|
|
60
|
+
dev = [
|
|
61
|
+
"bakefile[lib]>=0.0.57a0",
|
|
62
|
+
"deptry>=0.24.0",
|
|
63
|
+
"ipykernel>=7.0.0",
|
|
64
|
+
"jupytext>=1.16.6",
|
|
65
|
+
"nbqa>=1.9.1",
|
|
66
|
+
"pre-commit>=4.3.0",
|
|
67
|
+
"pytest-cov>=7.0.0",
|
|
68
|
+
"pytest>=9.0.0",
|
|
69
|
+
"ruff>=0.14.0",
|
|
70
|
+
"toml-sort>=0.24.3",
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
[build-system]
|
|
74
|
+
requires = ["uv_build>=0.12.0,<0.13.0"]
|
|
75
|
+
build-backend = "uv_build"
|
|
76
|
+
|
|
77
|
+
[tool.coverage.run]
|
|
78
|
+
omit = ["src/leetcode_py/cli/resources/**"]
|
|
79
|
+
|
|
80
|
+
[tool.deptry]
|
|
81
|
+
known_first_party = ["leetcode_py"]
|
|
82
|
+
extend_exclude = [
|
|
83
|
+
".claude",
|
|
84
|
+
"bakefile.py",
|
|
85
|
+
"leetcode",
|
|
86
|
+
"scripts",
|
|
87
|
+
"src/leetcode_py/cli/resources",
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
[tool.deptry.per_rule_ignores]
|
|
91
|
+
DEP002 = ["chardet"]
|
|
92
|
+
|
|
93
|
+
[tool.pytest.ini_options]
|
|
94
|
+
testpaths = [
|
|
95
|
+
"leetcode",
|
|
96
|
+
"tests",
|
|
97
|
+
]
|
|
98
|
+
norecursedirs = ["src/leetcode_py/cli/resources"]
|
|
99
|
+
|
|
100
|
+
[tool.ruff]
|
|
101
|
+
line-length = 100
|
|
102
|
+
extend-exclude = ["src/leetcode_py/cli/resources"]
|
|
103
|
+
|
|
104
|
+
[tool.ruff.lint]
|
|
105
|
+
select = [
|
|
106
|
+
"ARG",
|
|
107
|
+
"B",
|
|
108
|
+
"C4",
|
|
109
|
+
"E",
|
|
110
|
+
"F",
|
|
111
|
+
"I",
|
|
112
|
+
"N",
|
|
113
|
+
"PGH",
|
|
114
|
+
"PIE",
|
|
115
|
+
"PYI",
|
|
116
|
+
"RUF",
|
|
117
|
+
"SIM",
|
|
118
|
+
"UP",
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
[tool.ruff.lint.per-file-ignores]
|
|
122
|
+
"leetcode/*/playground.py" = ["B018"]
|
|
123
|
+
"leetcode/*/solution.py" = ["ARG002"]
|
|
124
|
+
|
|
125
|
+
[tool.ty.environment]
|
|
126
|
+
root = [
|
|
127
|
+
".",
|
|
128
|
+
"./.claude/.dev",
|
|
129
|
+
]
|
|
130
|
+
|
|
131
|
+
[[tool.ty.overrides]]
|
|
132
|
+
include = [
|
|
133
|
+
"leetcode/*/playground.ipynb",
|
|
134
|
+
"leetcode/*/playground.py",
|
|
135
|
+
]
|
|
136
|
+
|
|
137
|
+
[tool.ty.overrides.rules]
|
|
138
|
+
unresolved-import = "ignore"
|
|
139
|
+
|
|
140
|
+
[tool.ty.src]
|
|
141
|
+
exclude = [
|
|
142
|
+
"scripts/branding",
|
|
143
|
+
"src/leetcode_py/cli/resources",
|
|
144
|
+
]
|
|
145
|
+
|
|
146
|
+
[tool.uv.build-backend]
|
|
147
|
+
module-name = ["leetcode_py"]
|
|
148
|
+
module-root = "src"
|
|
149
|
+
|
|
150
|
+
[[tool.uv.index]]
|
|
151
|
+
name = "test-pypi"
|
|
152
|
+
url = "https://test.pypi.org/simple/"
|
|
153
|
+
publish-url = "https://test.pypi.org/legacy/"
|
|
154
|
+
explicit = true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "leetcode-py-sdk"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.4" # use git tag instead
|
|
4
4
|
description = "Modern Python LeetCode practice environment with automated problem generation, beautiful data structure visualizations, and comprehensive testing"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Wisaroot Lertthaweedech", email = "l.wisaroot@gmail.com"}
|
|
@@ -41,7 +41,10 @@ dependencies = [
|
|
|
41
41
|
lcpy = "leetcode_py.cli.main:app"
|
|
42
42
|
|
|
43
43
|
[project.urls]
|
|
44
|
-
|
|
44
|
+
Changelog = "https://github.com/wislertt/leetcode-py/releases"
|
|
45
|
+
Documentation = "https://leetcode-py.wisl.dev"
|
|
46
|
+
Homepage = "https://leetcode-py.wisl.dev"
|
|
47
|
+
Issues = "https://github.com/wislertt/leetcode-py/issues"
|
|
45
48
|
Repository = "https://github.com/wislertt/leetcode-py"
|
|
46
49
|
|
|
47
50
|
[dependency-groups]
|
|
@@ -59,7 +62,7 @@ dev = [
|
|
|
59
62
|
]
|
|
60
63
|
|
|
61
64
|
[build-system]
|
|
62
|
-
requires = ["uv_build>=0.
|
|
65
|
+
requires = ["uv_build>=0.12.0,<0.13.0"]
|
|
63
66
|
build-backend = "uv_build"
|
|
64
67
|
|
|
65
68
|
[tool.coverage.run]
|
|
@@ -73,6 +76,7 @@ extend_exclude = [
|
|
|
73
76
|
".claude",
|
|
74
77
|
"bakefile.py",
|
|
75
78
|
"leetcode",
|
|
79
|
+
"scripts",
|
|
76
80
|
"src/leetcode_py/cli/resources"
|
|
77
81
|
]
|
|
78
82
|
per_rule_ignores = {DEP002 = ["chardet"]}
|
|
@@ -122,6 +126,7 @@ unresolved-import = "ignore"
|
|
|
122
126
|
|
|
123
127
|
[tool.ty.src]
|
|
124
128
|
exclude = [
|
|
129
|
+
"scripts/branding",
|
|
125
130
|
"src/leetcode_py/cli/resources"
|
|
126
131
|
]
|
|
127
132
|
|
|
@@ -6,7 +6,19 @@ from .commands.gen import generate
|
|
|
6
6
|
from .commands.list import list_problems
|
|
7
7
|
from .commands.scrape import scrape
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
DOCS_URL = "https://leetcode-py.wisl.dev"
|
|
10
|
+
_INSTALL_SKILL_CMD = f"npx skills add {DOCS_URL}"
|
|
11
|
+
AGENT_DOCS_EPILOG = f"""Docs: {DOCS_URL}
|
|
12
|
+
Full docs in one file (for AI agents): {DOCS_URL}/llms-full.txt
|
|
13
|
+
Docs index: {DOCS_URL}/llms.txt
|
|
14
|
+
Agent skill: {DOCS_URL}/skill.md
|
|
15
|
+
Install agent skill: `{_INSTALL_SKILL_CMD}`
|
|
16
|
+
Docs search via MCP: {DOCS_URL}/mcp"""
|
|
17
|
+
|
|
18
|
+
app = typer.Typer(
|
|
19
|
+
help="LeetCode problem generator - Generate and list LeetCode problems",
|
|
20
|
+
epilog=AGENT_DOCS_EPILOG,
|
|
21
|
+
)
|
|
10
22
|
|
|
11
23
|
|
|
12
24
|
def show_version():
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
"helpers_content": "",
|
|
23
23
|
"helpers_run_name": "my_queue",
|
|
24
24
|
"helpers_run_signature": "(solution_class: type, operations: list[str], inputs: list[list[int]])",
|
|
25
|
-
"helpers_run_body": " queue = None\n results: list[int |
|
|
25
|
+
"helpers_run_body": " queue = None\n results: list[int | bool | None] = []\n for i, op in enumerate(operations):\n if op == 'MyQueue':\n queue = solution_class()\n results.append(None)\n elif op == 'push' and queue is not None:\n queue.push(inputs[i][0])\n results.append(None)\n elif op == 'pop' and queue is not None:\n results.append(queue.pop())\n elif op == 'peek' and queue is not None:\n results.append(queue.peek())\n elif op == 'empty' and queue is not None:\n results.append(queue.empty())\n return results, queue",
|
|
26
26
|
"helpers_assert_name": "my_queue",
|
|
27
|
-
"helpers_assert_signature": "(result: list[int |
|
|
27
|
+
"helpers_assert_signature": "(result: list[int | bool | None], expected: list[int | bool | None]) -> bool",
|
|
28
28
|
"helpers_assert_body": " assert result == expected\n return True",
|
|
29
29
|
"solution_imports": "",
|
|
30
30
|
"solution_contents": "",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"list": [
|
|
70
70
|
{
|
|
71
71
|
"name": "test_queue_operations",
|
|
72
|
-
"signature": "(self, operations: list[str], inputs: list[list[int]], expected: list[int |
|
|
72
|
+
"signature": "(self, operations: list[str], inputs: list[list[int]], expected: list[int | bool | None])",
|
|
73
73
|
"parametrize": "operations, inputs, expected",
|
|
74
74
|
"test_cases": {
|
|
75
75
|
"list": [
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"helpers_content": "",
|
|
21
21
|
"helpers_run_name": "my_stack",
|
|
22
22
|
"helpers_run_signature": "(solution_class: type, operations: list[str], inputs: list[list[int]])",
|
|
23
|
-
"helpers_run_body": " stack = None\n results: list[int |
|
|
23
|
+
"helpers_run_body": " stack = None\n results: list[int | bool | None] = []\n for i, op in enumerate(operations):\n if op == 'MyStack':\n stack = solution_class()\n results.append(None)\n elif op == 'push' and stack is not None:\n stack.push(inputs[i][0])\n results.append(None)\n elif op == 'pop' and stack is not None:\n results.append(stack.pop())\n elif op == 'top' and stack is not None:\n results.append(stack.top())\n elif op == 'empty' and stack is not None:\n results.append(stack.empty())\n return results, stack",
|
|
24
24
|
"helpers_assert_name": "my_stack",
|
|
25
|
-
"helpers_assert_signature": "(result: list[int |
|
|
25
|
+
"helpers_assert_signature": "(result: list[int | bool | None], expected: list[int | bool | None]) -> bool",
|
|
26
26
|
"helpers_assert_body": " assert result == expected\n return True",
|
|
27
27
|
"solution_imports": "",
|
|
28
28
|
"solution_contents": "",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
"list": [
|
|
68
68
|
{
|
|
69
69
|
"name": "test_stack_operations",
|
|
70
|
-
"signature": "(self, operations: list[str], inputs: list[list[int]], expected: list[int |
|
|
70
|
+
"signature": "(self, operations: list[str], inputs: list[list[int]], expected: list[int | bool | None])",
|
|
71
71
|
"parametrize": "operations, inputs, expected",
|
|
72
72
|
"test_cases": {
|
|
73
73
|
"list": [
|
leetcode_py_sdk-1.0.4/src/leetcode_py/cli/resources/leetcode/json/problems/integer_to_roman.json
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
{
|
|
2
|
+
"problem_name": "integer_to_roman",
|
|
3
|
+
"solution_class_name": "Solution",
|
|
4
|
+
"problem_number": "12",
|
|
5
|
+
"problem_title": "Integer to Roman",
|
|
6
|
+
"difficulty": "Medium",
|
|
7
|
+
"topics": "Hash Table, Math, String",
|
|
8
|
+
"_tags": {
|
|
9
|
+
"list": ["neetcode"]
|
|
10
|
+
},
|
|
11
|
+
"readme_description": "Seven different symbols represent Roman numerals with the following values:\n\n| Symbol | Value |\n| --- | --- |\n| I | 1 |\n| V | 5 |\n| X | 10 |\n| L | 50 |\n| C | 100 |\n| D | 500 |\n| M | 1000 |\n\nRoman numerals are formed by appending the conversions of decimal place values from highest to lowest. Converting a decimal place value into a Roman numeral has the following rules:\n\n- If the value does not start with 4 or 9, select the symbol of the maximal value that can be subtracted from the input, append that symbol to the result, subtract its value, and convert the remainder to a Roman numeral.\n- If the value starts with 4 or 9 use the **subtractive form** representing one symbol subtracted from the following symbol, for example, 4 is 1 (`I`) less than 5 (`V`): `IV` and 9 is 1 (`I`) less than 10 (`X`): `IX`. Only the following subtractive forms are used: 4 (`IV`), 9 (`IX`), 40 (`XL`), 90 (`XC`), 400 (`CD`) and 900 (`CM`).\n- Only powers of 10 (`I`, `X`, `C`, `M`) can be appended consecutively at most 3 times to represent multiples of 10. You cannot append 5 (`V`), 50 (`L`), or 500 (`D`) multiple times. If you need to append a symbol 4 times use the **subtractive form**.\n\nGiven an integer, convert it to a Roman numeral.",
|
|
12
|
+
"_readme_examples": {
|
|
13
|
+
"list": [
|
|
14
|
+
{
|
|
15
|
+
"content": "```\nInput: num = 3749\nOutput: \"MMMDCCXLIX\"\n\nExplanation:\n\n3000 = MMM as 1000 (M) + 1000 (M) + 1000 (M)\n 700 = DCC as 500 (D) + 100 (C) + 100 (C)\n 40 = XL as 10 (X) less of 50 (L)\n 9 = IX as 1 (I) less of 10 (X)\nNote: 49 is not 1 (I) less of 50 (L) because the conversion is based on decimal places\n```"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"content": "```\nInput: num = 58\nOutput: \"LVIII\"\n\nExplanation:\n\n50 = L\n 8 = VIII\n```"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"content": "```\nInput: num = 1994\nOutput: \"MCMXCIV\"\n\nExplanation:\n\n1000 = M\n 900 = CM\n 90 = XC\n 4 = IV\n```"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"readme_constraints": "- `1 <= num <= 3999`",
|
|
26
|
+
"readme_additional": "",
|
|
27
|
+
"helpers_imports": "",
|
|
28
|
+
"helpers_content": "",
|
|
29
|
+
"helpers_run_name": "int_to_roman",
|
|
30
|
+
"helpers_run_signature": "(solution_class: type, num: int)",
|
|
31
|
+
"helpers_run_body": " implementation = solution_class()\n return implementation.int_to_roman(num)",
|
|
32
|
+
"helpers_assert_name": "int_to_roman",
|
|
33
|
+
"helpers_assert_signature": "(result: str, expected: str) -> bool",
|
|
34
|
+
"helpers_assert_body": " assert result == expected\n return True",
|
|
35
|
+
"solution_imports": "",
|
|
36
|
+
"solution_contents": "",
|
|
37
|
+
"solution_class_content": "",
|
|
38
|
+
"test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_int_to_roman, run_int_to_roman\nfrom .solution import Solution",
|
|
39
|
+
"test_content": "",
|
|
40
|
+
"test_class_name": "IntegerToRoman",
|
|
41
|
+
"test_class_content": " def setup_method(self):\n self.solution = Solution()",
|
|
42
|
+
"_solution_methods": {
|
|
43
|
+
"list": [
|
|
44
|
+
{
|
|
45
|
+
"name": "int_to_roman",
|
|
46
|
+
"signature": "(self, num: int) -> str",
|
|
47
|
+
"body": " # TODO: Implement int_to_roman\n return \"\""
|
|
48
|
+
}
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"_test_helper_methods": {
|
|
52
|
+
"list": [
|
|
53
|
+
{
|
|
54
|
+
"name": "setup_method",
|
|
55
|
+
"parameters": "",
|
|
56
|
+
"body": "self.solution = Solution()"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"_test_methods": {
|
|
61
|
+
"list": [
|
|
62
|
+
{
|
|
63
|
+
"name": "test_int_to_roman",
|
|
64
|
+
"signature": "(self, num: int, expected: str)",
|
|
65
|
+
"parametrize": "num, expected",
|
|
66
|
+
"test_cases": {
|
|
67
|
+
"list": [
|
|
68
|
+
"(3749, 'MMMDCCXLIX')",
|
|
69
|
+
"(58, 'LVIII')",
|
|
70
|
+
"(1994, 'MCMXCIV')",
|
|
71
|
+
"(1, 'I')",
|
|
72
|
+
"(3999, 'MMMCMXCIX')",
|
|
73
|
+
"(3, 'III')",
|
|
74
|
+
"(4, 'IV')",
|
|
75
|
+
"(8, 'VIII')",
|
|
76
|
+
"(9, 'IX')",
|
|
77
|
+
"(14, 'XIV')",
|
|
78
|
+
"(40, 'XL')",
|
|
79
|
+
"(90, 'XC')",
|
|
80
|
+
"(400, 'CD')",
|
|
81
|
+
"(900, 'CM')",
|
|
82
|
+
"(1000, 'M')",
|
|
83
|
+
"(444, 'CDXLIV')",
|
|
84
|
+
"(999, 'CMXCIX')",
|
|
85
|
+
"(1776, 'MDCCLXXVI')",
|
|
86
|
+
"(2024, 'MMXXIV')",
|
|
87
|
+
"(3549, 'MMMDXLIX')"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"body": " result = run_int_to_roman(Solution, num)\n assert_int_to_roman(result, expected)"
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"playground_imports": "from helpers import run_int_to_roman, assert_int_to_roman\nfrom solution import Solution",
|
|
95
|
+
"playground_setup": "# Example test case\nnum = 3749\nexpected = 'MMMDCCXLIX'",
|
|
96
|
+
"playground_run": "result = run_int_to_roman(Solution, num)\nresult",
|
|
97
|
+
"playground_assert": "assert_int_to_roman(result, expected)"
|
|
98
|
+
}
|
|
@@ -5,13 +5,21 @@
|
|
|
5
5
|
"problem_title": "Shortest Path in Binary Matrix",
|
|
6
6
|
"difficulty": "Medium",
|
|
7
7
|
"topics": "Array, Breadth-First Search, Matrix",
|
|
8
|
-
"_tags": {
|
|
8
|
+
"_tags": {
|
|
9
|
+
"list": ["neetcode"]
|
|
10
|
+
},
|
|
9
11
|
"readme_description": "Given an `n x n` binary matrix `grid`, return *the length of the shortest **clear path*** in the matrix. If there is no clear path, return `-1`.\n\nA **clear path** in a binary matrix is a path from the top-left cell (i.e., `(0, 0)`) to the bottom-right cell (i.e., `(n - 1, n - 1)`) such that:\n\n- All the visited cells of the path are `0`.\n- All the adjacent cells of the path are **8-directionally** connected (i.e., they are different and they share an edge or a corner).\n\nThe length of a clear path is the number of visited cells of this path.",
|
|
10
12
|
"_readme_examples": {
|
|
11
13
|
"list": [
|
|
12
|
-
{
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
{
|
|
15
|
+
"content": "```\nInput: grid = [[0,1],[1,0]]\nOutput: 2\n```"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"content": "```\nInput: grid = [[0,0,0],[1,1,0],[1,1,0]]\nOutput: 4\n```"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"content": "```\nInput: grid = [[1,0,0],[1,1,0],[1,1,0]]\nOutput: -1\n```"
|
|
22
|
+
}
|
|
15
23
|
]
|
|
16
24
|
},
|
|
17
25
|
"readme_constraints": "- `n == grid.length`\n- `n == grid[i].length`\n- `1 <= n <= 100`\n- `grid[i][j] is 0 or 1`",
|
|
@@ -41,7 +49,13 @@
|
|
|
41
49
|
]
|
|
42
50
|
},
|
|
43
51
|
"_test_helper_methods": {
|
|
44
|
-
"list": [
|
|
52
|
+
"list": [
|
|
53
|
+
{
|
|
54
|
+
"name": "setup_method",
|
|
55
|
+
"parameters": "",
|
|
56
|
+
"body": "self.solution = Solution()"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
45
59
|
},
|
|
46
60
|
"playground_imports": "from helpers import run_shortest_path_binary_matrix, assert_shortest_path_binary_matrix\nfrom solution import Solution",
|
|
47
61
|
"playground_setup": "# Example test case\ngrid = [[0, 1], [1, 0]]\nexpected = 2",
|